AbsOpenServerTotalConsume.lua 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. local Msg = require("core.Msg")
  2. local Util = require("common.Util")
  3. local Lang = require("common.Lang")
  4. local Broadcast = require("broadcast.Broadcast")
  5. local PanelDefine = require("broadcast.PanelDefine")
  6. local BagLogic = require("bag.BagLogic")
  7. local Grid = require("bag.Grid")
  8. local DrawCardLogic = require("drawCard.DrawCardLogic")
  9. local YunYingLogic = require("yunying.YunYingLogic")
  10. local AbsActLogic = require("absAct.AbsActLogic")
  11. local AbsActExcel = require("excel.absAct")
  12. --[[
  13. 开服活动-累计消耗类活动 累计消耗钻、累计招募
  14. human.db.absAct[funcID] = {
  15. value = xxx, -- 累计消耗值
  16. [id] = xxx, -- 档位领取状态(0不可领,1可领,2已领)
  17. ...
  18. },
  19. local:
  20. reachTouchHanlde() -- 消耗达标处理
  21. wrapTConsumeList() -- 包装档位数据
  22. public:
  23. isRed() -- 红点提醒
  24. isActive() -- 激活状态
  25. isOpen() -- 活动开启
  26. getLeftTime() -- 得到活动剩余时间
  27. getAndSendMsg() -- 发送活动信息
  28. get() -- 领取活动奖励
  29. onDecZuanshi() -- 消耗钻石回调
  30. onDrawCard() -- 抽卡回调
  31. onZhandouli() -- 战力回调
  32. --]]
  33. STATE_0 = 0 -- 不可领
  34. STATE_1 = 1 -- 可领
  35. STATE_2 = 2 -- 已领完
  36. local function reachTouchHanlde(human, funcID, value, isReplace)
  37. local funcConfig = YunYingLogic.getFuncConfig(funcID)
  38. if not funcConfig then return end
  39. AbsActLogic.checkAbsActClean(human, funcID)
  40. local absActDB = human.db.absAct[funcID]
  41. if not absActDB then return end
  42. if isReplace then
  43. absActDB.value = value
  44. else
  45. local tValue = (absActDB.value or 0) + value
  46. absActDB.value = tValue
  47. end
  48. -- 取之前是不是有红点
  49. local beforeRed = isRed(human, nil, funcConfig)
  50. local absActConfig = AbsActExcel[funcConfig.param[2]]
  51. local isActive
  52. for id,info in pairs(absActConfig) do
  53. if info.actId == funcConfig.actId and
  54. info.needConsume <= absActDB.value and
  55. absActDB[id] ~= STATE_2 then
  56. absActDB[id] = STATE_1
  57. isActive = true
  58. end
  59. end
  60. -- 之前没有红点,现在激活了红点通知(只需要通知banner上的红点)
  61. if not beforeRed and isActive then
  62. if funcConfig.param[2] == "zhanliReach" then
  63. YunYingLogic.updateIcon(YYInfo[funcID], human)
  64. YunYingLogic.sendGroupUpdate(YYInfo[funcID], human, funcConfig.panelID)
  65. else
  66. YunYingLogic.sendBanner(human)
  67. end
  68. end
  69. end
  70. local function wrapTConsumeList(net, id, tConsumeInfo, absActDB)
  71. net.id = id
  72. net.needConsume = tConsumeInfo.needConsume
  73. net.state = absActDB[id] or STATE_0
  74. local len = 0
  75. for index,itemInfo in ipairs(tConsumeInfo.rewards) do
  76. len = len + 1
  77. Grid.makeItem(net.items[index], itemInfo[1], itemInfo[2])
  78. end
  79. net.items[0] = len
  80. end
  81. function isRed(human, YYInfo, funcConfig)
  82. AbsActLogic.checkAbsActClean(human, funcConfig.funcID)
  83. local absActDB = human.db.absAct[funcConfig.funcID]
  84. if not absActDB then return end
  85. local absActConfig = AbsActExcel[funcConfig.param[2]]
  86. for id,info in pairs(absActConfig) do
  87. if info.actId == funcConfig.actId and
  88. absActDB[id] and absActDB[id] == STATE_1 then return true end
  89. end
  90. end
  91. function isActive(human, YYInfo, funcConfig)
  92. return not isOpen(human, YYInfo, funcConfig)
  93. end
  94. function isOpen(human, YYInfo, funcConfig)
  95. return AbsActLogic.isStarted(human, funcConfig.funcID)
  96. end
  97. function getLeftTime(human, YInfo, funcConfig)
  98. local ret, endTime, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
  99. if ret == true then
  100. return endTime - os.time()
  101. else
  102. return 0
  103. end
  104. end
  105. function getAndSendMsg(human, funcID, actId)
  106. local state,endTime,starTime = AbsActLogic.isStarted(human, funcID)
  107. if not state then return end
  108. local absActDB = human.db.absAct[funcID]
  109. if not absActDB then return end
  110. local funcConfig = YunYingLogic.getFuncConfig(funcID)
  111. if not funcConfig then return end
  112. local leftTime = getLeftTime(human, nil, funcConfig)
  113. local absActConfig = AbsActExcel[funcConfig.param[2]]
  114. local msgRet = Msg.gc.GC_ABS_OPEN_SERVER_REACH_QUERY
  115. msgRet.funcID = funcID
  116. msgRet.type = funcConfig.param[1]
  117. msgRet.value = absActDB.value or 0
  118. msgRet.leftTime = leftTime
  119. local len = 0
  120. for id,info in pairs(absActConfig) do
  121. if actId == info.actId then
  122. len = len + 1
  123. wrapTConsumeList(msgRet.list[len], id, info, absActDB)
  124. end
  125. end
  126. msgRet.list[0] = len
  127. Msg.send(msgRet, human.fd)
  128. end
  129. function get(human, funcID, id)
  130. local state,endTime, starTime = AbsActLogic.isStarted(human, funcID)
  131. if not state then return end
  132. local funcConfig = YunYingLogic.getFuncConfig(funcID)
  133. if not funcConfig then return end
  134. local absActDB = human.db.absAct[funcID]
  135. if not absActDB then return end
  136. if absActDB[id] ~= STATE_1 then return end
  137. local absActConfig = AbsActExcel[funcConfig.param[2]]
  138. local tConsumeInfo = absActConfig[id]
  139. absActDB[id] = STATE_2
  140. BagLogic.addItemList(human, tConsumeInfo.rewards, "openServerTConsume_get")
  141. getAndSendMsg(human, funcID, funcConfig.actId)
  142. -- 现在没有红点了通知
  143. if not isRed(human, nil, funcConfig) then
  144. YunYingLogic.sendBanner(human)
  145. YunYingLogic.updateIcon(YYInfo[funcID], human)
  146. YunYingLogic.sendGroupUpdate(YYInfo[funcID], human, funcConfig.panelID)
  147. end
  148. end
  149. function onDecZuanshi(human, funcID, value)
  150. local funcConfig = YunYingLogic.getFuncConfig(funcID)
  151. if not funcConfig then return end
  152. if not isOpen(human, nil, funcConfig) then return end
  153. if funcConfig.param[2] == "openTotalConsume" then
  154. reachTouchHanlde(human, funcID, value)
  155. end
  156. end
  157. function onDrawCard(human, funcID, value, drawType)
  158. local funcConfig = YunYingLogic.getFuncConfig(funcID)
  159. if not funcConfig then return end
  160. if not isOpen(human, nil, funcConfig) then return end
  161. if funcConfig.param[2] == "openDrawCardConsume" then
  162. if drawType == DrawCardLogic.DRAWCARD_ID2 or
  163. drawType == DrawCardLogic.DRAWCARD_ID5 or
  164. drawType == DrawCardLogic.DRAWCARD_ID6 then
  165. reachTouchHanlde(human, funcID, value)
  166. end
  167. end
  168. end
  169. function onZhandouli(human, funcID, value)
  170. local funcConfig = YunYingLogic.getFuncConfig(funcID)
  171. if not funcConfig then return end
  172. if not isOpen(human, nil, funcConfig) then return end
  173. if funcConfig.param[2] == "zhanliReach" then
  174. reachTouchHanlde(human, funcID, value, true)
  175. end
  176. end