MonthHzz.lua 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. -- 月度活动 好战者活动 龙争虎斗 竞技高手
  2. -- 增加个人竞技场和君王试炼得参与
  3. -- human.db.actMonthTask.jifen
  4. -- human.db.actMonthTask.trial
  5. local MailExcel = require("excel.mail")
  6. local MonthActExcel = require("excel.monthAct")
  7. local HzzExcel = MonthActExcel.hzz
  8. local Util = require("common.Util")
  9. local Msg = require("core.Msg")
  10. local ObjHuman = require("core.ObjHuman")
  11. local Grid = require("bag.Grid")
  12. local CombatDefine = require("combat.CombatDefine")
  13. local MonthActFill = require("monthAct.MonthDataFill")
  14. local MonthActLogic = require("monthAct.MonthActLogic")
  15. local MailManager = require("mail.MailManager")
  16. local YunYingLogic = require("yunying.YunYingLogic")
  17. MONTHACT_HZZ_TYPE_1 = 1 -- 个人竞技场
  18. MONTHACT_HZZ_TYPE_2 = 2 -- 冠军试炼
  19. MONTHACT_HZZ_FINISH_TYPE = 3 -- 好战者活动完成所有其他任务的任务type
  20. -- 个人竞技场 积分
  21. local function getJifen(human)
  22. if not human.db.actMonthTask then
  23. return 0
  24. end
  25. return human.db.actMonthTask.jifen or 0
  26. end
  27. function setJifen(human, value)
  28. human.db.actMonthTask = human.db.actMonthTask or {}
  29. human.db.actMonthTask.jifen = value
  30. end
  31. -- 冠军试炼 积分
  32. local function getTrial(human)
  33. if not human.db.actMonthTask then
  34. return 0
  35. end
  36. return human.db.actMonthTask.trial or 0
  37. end
  38. function setTrial(human, value)
  39. human.db.actMonthTask = human.db.actMonthTask or {}
  40. human.db.actMonthTask.trial = value
  41. end
  42. local TASKTYPE_2_MAXVALUE = nil
  43. local function getMaxValue(taskType)
  44. if not TASKTYPE_2_MAXVALUE then
  45. TASKTYPE_2_MAXVALUE = {}
  46. for _, cf in ipairs(HzzExcel) do
  47. local oldvalue = TASKTYPE_2_MAXVALUE[cf.type] or 0
  48. TASKTYPE_2_MAXVALUE[cf.type] = math.max(oldvalue, cf.taskCnt)
  49. end
  50. end
  51. return TASKTYPE_2_MAXVALUE[taskType] or 0
  52. end
  53. local function getCurValue(human, taskType)
  54. if taskType == MONTHACT_HZZ_TYPE_1 then
  55. return getJifen(human)
  56. end
  57. if taskType == MONTHACT_HZZ_TYPE_2 then
  58. return getTrial(human)
  59. end
  60. return isMax(human) and 1 or 0
  61. end
  62. --检查好战者活动是否全部完成
  63. function isMax(human)
  64. if getJifen(human) >= getMaxValue(MONTHACT_HZZ_TYPE_1) and
  65. getTrial(human) >= getMaxValue(MONTHACT_HZZ_TYPE_2) then
  66. return true
  67. end
  68. end
  69. local function checkHzzActAllFinish(human)
  70. if isMax(human) then
  71. -- 满足条件 立马把 jifen 和 trial 存入db防止多次触发
  72. ObjHuman.save(human)
  73. -- 发送奖励邮件
  74. local items = {}
  75. for i = 1, #HzzExcel do
  76. local config = HzzExcel[i]
  77. if config.type == MONTHACT_HZZ_FINISH_TYPE then
  78. items = config.reward
  79. break
  80. end
  81. end
  82. local title = MailExcel.mail[10].title
  83. local content = MailExcel.mail[10].content
  84. local senderName = MailExcel.mail[10].senderName
  85. MailManager.add(MailManager.SYSTEM, human.db._id, title, content, items, senderName)
  86. end
  87. end
  88. function query(human)
  89. local msgRet = Msg.gc.GC_MONTHACT_HZZ_QUERY
  90. msgRet.leftTime = MonthActLogic.getActLeftTime(human)
  91. msgRet.list[0] = #HzzExcel
  92. for id, cf in ipairs(HzzExcel) do
  93. MonthActFill.makeMonthTaskData(msgRet.list[id], cf, id)
  94. msgRet.list[id].cur = getCurValue(human, cf.type)
  95. end
  96. --Msg.trace(msgRet)
  97. Msg.send(msgRet, human.fd)
  98. end
  99. -- 个人竞技场 计数
  100. function addJjcFight(human, state, jifen)
  101. -- 检查活动是否结束
  102. MonthActLogic.checkActEndTime(human)
  103. local oldJifen = getJifen(human)
  104. local maxCnt = getMaxValue(MONTHACT_HZZ_TYPE_1)
  105. if oldJifen >= maxCnt then
  106. return
  107. end
  108. jifen = jifen or ((state == CombatDefine.RESULT_WIN) and 2 or 1)
  109. local newJifen = math.min(oldJifen + jifen, maxCnt)
  110. -- 存db
  111. setJifen(human, newJifen)
  112. if newJifen >= maxCnt then
  113. --活动积分已达最大 检查活动任务是否都完成了
  114. checkHzzActAllFinish(human)
  115. end
  116. -- 有任务完成 就发放奖励
  117. for _, cf in ipairs(HzzExcel) do
  118. if cf.type == MONTHACT_HZZ_TYPE_1 and oldJifen < cf.taskCnt and newJifen >= cf.taskCnt then
  119. ObjHuman.save(human)
  120. --发放奖励 todo 邮件id未确定
  121. --local title = MailExcel.mail[8].title
  122. --local content = Util.format(MailExcel.mail[8].content, cf.taskCnt)
  123. --local senderName = MailExcel.mail[8].senderName
  124. --MailManager.add(MailManager.SYSTEM, human.db._id, title, content, cf.reward, senderName)
  125. end
  126. end
  127. end
  128. -- 冠军试炼 计数
  129. function addTrialCnt(human, state, jifen)
  130. -- 检查活动是否结束
  131. MonthActLogic.checkActEndTime(human)
  132. local oldJifen = getTrial(human)
  133. local maxCnt = getMaxValue(MONTHACT_HZZ_TYPE_2)
  134. if oldJifen >= maxCnt then
  135. return
  136. end
  137. jifen = jifen or ((state == CombatDefine.RESULT_WIN) and 2 or 1)
  138. local newJifen = math.min(oldJifen + jifen, maxCnt)
  139. -- 存db
  140. setTrial(human, newJifen)
  141. if newJifen >= maxCnt then
  142. --活动积分已达最大 检查活动任务是否都完成了
  143. checkHzzActAllFinish(human)
  144. end
  145. -- 有任务完成 就发放奖励
  146. for _, cf in ipairs(HzzExcel) do
  147. if cf.type == MONTHACT_HZZ_TYPE_2 and oldJifen < cf.taskCnt and newJifen >= cf.taskCnt then
  148. ObjHuman.save(human)
  149. --发放奖励 todo
  150. local title = MailExcel.mail[9].title
  151. local content = Util.format(MailExcel.mail[9].content, cf.taskCnt)
  152. local senderName = MailExcel.mail[9].senderName
  153. MailManager.add(MailManager.SYSTEM, human.db._id, title, content, cf.reward, senderName)
  154. end
  155. end
  156. end