DailyFixedTaskLogic.lua 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. --[[
  2. absact = {
  3. task[id] = {
  4. state = 1
  5. cnt = 0
  6. }
  7. }
  8. ]]
  9. local AbsActLogic = require("absAct.AbsActLogic")
  10. local AbsActExcel = require("excel.absAct")
  11. local BuyExcel = require("excel.buy")
  12. local Util = require("common.Util")
  13. local Msg = require("core.Msg")
  14. local Grid = require("bag.Grid")
  15. local BagLogic = require("bag.BagLogic")
  16. local BuyLogic = require("topup.BuyLogic")
  17. local ObjHuman = require("core.ObjHuman")
  18. local Lang = require("common.Lang")
  19. local Broadcast = require("broadcast.Broadcast")
  20. local MailManager = require("mail.MailManager")
  21. local MailExcel = require("excel.mail")
  22. local YunYingLogic = require("yunying.YunYingLogic")
  23. function isOpen(human, YYInfo, funcConfig)
  24. local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
  25. if not state then return end
  26. --[[
  27. local absAct = human.db.absAct[funcConfig.funcID]
  28. if not absAct then
  29. return
  30. end
  31. ]]
  32. return true, endTime, startTime
  33. end
  34. function isActive(human, YYInfo, funcConfig)
  35. return not isOpen(human, YYInfo, funcConfig)
  36. end
  37. function fontDailyFixedTask(db,config,net,id)
  38. net.state = db.task and (db.task[id] and db.task[id].state or 0) or 0
  39. net.nowCnt = db.task and (db.task[id] and db.task[id].cnt or 0) or 0
  40. net.needCnt = config.needCnt
  41. net.desc = config.desc
  42. net.day = config.day
  43. net.giftId = id
  44. local len = #config.item
  45. for i = 1,len do
  46. Grid.makeItem(net.item[i],config.item[i][1],config.item[i][2])
  47. end
  48. net.item[0] = len
  49. end
  50. function getAndSendMsg(human,id)
  51. -- 判断活动是否开启
  52. local state, endTime, starTime = AbsActLogic.isStarted(human, id)
  53. if not state then return end
  54. local absConfig = AbsActExcel.absActivity[id]
  55. if not absConfig then return end
  56. local absAct = human.db.absAct[id]
  57. if not absAct then
  58. return
  59. end
  60. local nowDay = Util.diffDay(starTime) + 1
  61. local config = AbsActExcel.dailyFixedTask
  62. local msgRet = Msg.gc.GC_ABS_DAILY_FIXED_TASK_QUERY
  63. local len = #config
  64. local count = 0
  65. for i = 1,len do
  66. if config[i].day == nowDay and config[i].actId == absConfig.actId then
  67. count = count + 1
  68. local net = msgRet.netList[count]
  69. fontDailyFixedTask(absAct,config[i],net,i)
  70. end
  71. end
  72. msgRet.netList[0] = count
  73. Msg.send(msgRet,human.fd)
  74. end
  75. function getItem(human,id,giftId)
  76. -- 判断活动是否开启
  77. local state, endTime, starTime = AbsActLogic.isStarted(human, id)
  78. if not state then return end
  79. local absConfig = AbsActExcel.absActivity[id]
  80. if not absConfig then return end
  81. local absAct = human.db.absAct[id]
  82. if not absAct then
  83. return
  84. end
  85. local nowDay = Util.diffDay(starTime) + 1
  86. local config = AbsActExcel.dailyFixedTask[giftId]
  87. if not config or config.day ~= nowDay or config.actId ~= absConfig.actId then
  88. return
  89. end
  90. if absAct.task and absAct.task[giftId] and absAct.task[giftId].state == 2 then
  91. return
  92. end
  93. absAct.task = absAct.task or {}
  94. absAct.task[giftId] = absAct.task[giftId] or {}
  95. absAct.task[giftId].state = 2
  96. BagLogic.addItemList(human, config.item, "dailyFixedTask")
  97. getAndSendMsg(human,id)
  98. YunYingLogic.sendBanner(human)
  99. YunYingLogic.updateIcon(YYInfo[id], human)
  100. YunYingLogic.sendGroupUpdate(YYInfo[id], human, absConfig.panelID)
  101. end
  102. function onLogin(human,funcID)
  103. taskActive(human, 1, funcID,1)
  104. --特殊处理下活动没开前充值、完成了活跃度任务,任务开启后没玩法完成
  105. local nowHuoYue = human.db.dailyTask.nowHuoYue or 0
  106. if nowHuoYue > 0 then
  107. specailFunc(human, 2, funcID, nowHuoYue)
  108. end
  109. local topupAcountDaily = human.db.topupAcountDaily
  110. if topupAcountDaily and topupAcountDaily > 0 then
  111. specailFunc(human, 3, funcID, topupAcountDaily)
  112. end
  113. end
  114. function onCharge(human,parameter,funcID)
  115. taskActive(human, 3, funcID,parameter)
  116. end
  117. function onDailyTask(human,funcID, parameter)
  118. taskActive(human, 2, funcID,parameter)
  119. end
  120. function onZhanBuBuyCard(human, funcID, parameter)
  121. taskActive(human, 4, funcID, parameter)
  122. end
  123. --特殊处理下活动没开前充值、完成了活跃度任务,任务开启后没玩法完成
  124. function specailFunc(human, type, id, cnt)
  125. local state, endTime, starTime = AbsActLogic.isStarted(human, id)
  126. if not state then return end
  127. local absConfig = AbsActExcel.absActivity[id]
  128. if not absConfig then return end
  129. AbsActLogic.checkAbsActClean(human, id)
  130. local absAct = human.db.absAct[id]
  131. if not absAct then
  132. return
  133. end
  134. absAct.task = absAct.task or {}
  135. local nowDay = Util.diffDay(starTime) + 1
  136. local config = AbsActExcel.dailyFixedTask
  137. local len = #config
  138. for i = 1,len do
  139. if config[i].day == nowDay and config[i].actId == absConfig.actId and type == config[i].type then
  140. absAct.task[i] = absAct.task[i] or {}
  141. absAct.task[i].cnt = absAct.task[i].cnt or 0
  142. if absAct.task[i].state and absAct.task[i].cnt > 0 then --只处理一次
  143. break
  144. end
  145. absAct.task[i].cnt = cnt
  146. --absAct.task[i].cnt = absAct.task[i].cnt + cnt
  147. if absAct.task[i].cnt >= config[i].needCnt then
  148. absAct.task[i].state = 1
  149. break
  150. end
  151. end
  152. end
  153. YunYingLogic.sendBanner(human)
  154. YunYingLogic.updateIcon(YYInfo[id], human)
  155. YunYingLogic.sendGroupUpdate(YYInfo[id], human, absConfig.panelID)
  156. end
  157. -- 每日任务激活
  158. function taskActive(human, type, id, cnt)
  159. local state, endTime, starTime = AbsActLogic.isStarted(human, id)
  160. if not state then return end
  161. local absConfig = AbsActExcel.absActivity[id]
  162. if not absConfig then return end
  163. AbsActLogic.checkAbsActClean(human, id)
  164. local absAct = human.db.absAct[id]
  165. if not absAct then
  166. return
  167. end
  168. absAct.task = absAct.task or {}
  169. local nowDay = Util.diffDay(starTime) + 1
  170. local config = AbsActExcel.dailyFixedTask
  171. local len = #config
  172. for i = 1,len do
  173. if config[i].day == nowDay and config[i].actId == absConfig.actId and type == config[i].type then
  174. absAct.task[i] = absAct.task[i] or {}
  175. absAct.task[i].cnt = absAct.task[i].cnt or 0
  176. if absAct.task[i].state then
  177. break
  178. end
  179. absAct.task[i].cnt = absAct.task[i].cnt + cnt
  180. if absAct.task[i].cnt >= config[i].needCnt then
  181. absAct.task[i].state = 1
  182. break
  183. end
  184. end
  185. end
  186. YunYingLogic.sendBanner(human)
  187. YunYingLogic.updateIcon(YYInfo[id], human)
  188. YunYingLogic.sendGroupUpdate(YYInfo[id], human, absConfig.panelID)
  189. end
  190. function isRed(human, YYInfo, funcConfig)
  191. local state,endTime,starTime = AbsActLogic.isStarted(human, funcConfig.funcID)
  192. if not state then return end
  193. local absConfig = AbsActExcel.absActivity[funcConfig.funcID]
  194. local absAct = human.db.absAct[funcConfig.funcID]
  195. if not absAct then return end
  196. if not absAct.task then
  197. return
  198. end
  199. local config = AbsActExcel.dailyFixedTask
  200. local nowDay = Util.diffDay(starTime) + 1
  201. for k,v in pairs(absAct.task) do
  202. if v.state == 1 and config[k].actId == absConfig.actId and config[k].day == nowDay then
  203. return true
  204. end
  205. end
  206. return false
  207. end