CycleHeroSendGift.lua 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. -- 新商业化活动2——英雄赠礼
  2. -- 玩法:多条配置奖励, 有的免费领取,有的需要先充值,但是所有奖励需要逐条领取。
  3. -- db
  4. --[=[
  5. human.db.absAct[id] = {
  6. gridData = { -- 当前格子
  7. nowIdx = 1, -- 从第一个开始
  8. state = 0, -- 0-不可领, 1-领可取
  9. }
  10. }
  11. ]=]--
  12. local Msg = require("core.Msg")
  13. local Grid = require("bag.Grid")
  14. local Lang = require("common.Lang")
  15. local BagLogic = require("bag.BagLogic")
  16. local BuyLogic = require("topup.BuyLogic")
  17. local AbsActExcel = require("excel.absAct")
  18. local Broadcast = require("broadcast.Broadcast")
  19. local YunYingLogic = require("yunying.YunYingLogic")
  20. local CommonDefine = require("common.CommonDefine")
  21. local CycleActivityLogic = require("yunying.CycleActivity")
  22. local heroSendGiftCfg = require("excel.commercializationActivity").heroSendGift
  23. -- 本活动日志标识
  24. local LOGTAG = "cycleAct_heroSendGift"
  25. local function initData(human, actId)
  26. human.db.absAct[actId] = human.db.absAct[actId] or {}
  27. human.db.absAct[actId].gridData = {
  28. nowIdx = 1,
  29. state = CommonDefine.COMMON_PRIZE_STATE_NOGET,
  30. }
  31. end
  32. local function getActData(human, actId)
  33. return human.db.absAct[actId]
  34. end
  35. local function updateActData(human, actId)
  36. local actData = getActData(human, actId)
  37. actData.gridData.state = CommonDefine.COMMON_PRIZE_STATE_CANGET
  38. end
  39. local function nextGrid(human, actId, nextIdx)
  40. if not nextIdx then
  41. return
  42. end
  43. local actData = getActData(human, actId)
  44. actData.gridData.nowIdx = nextIdx
  45. actData.gridData.state = CommonDefine.COMMON_PRIZE_STATE_NOGET
  46. end
  47. local function checkGridState(human, actId, nowBuyId)
  48. local actData = getActData(human, actId)
  49. if not actData then
  50. return
  51. end
  52. local gridData = actData.gridData
  53. local nowIdx = gridData and gridData.nowIdx or -1
  54. local gridCfg = heroSendGiftCfg[nowIdx]
  55. if not gridCfg then
  56. return
  57. end
  58. local bl = false
  59. if gridCfg.buyId == 0 then
  60. bl = true
  61. else
  62. if nowBuyId and gridCfg.buyId == nowBuyId then
  63. bl = true
  64. end
  65. end
  66. if bl then
  67. updateActData(human, actId)
  68. end
  69. return bl
  70. end
  71. -- 更新红点
  72. local function updateRedDot(human, actId)
  73. YunYingLogic.sendBanner(human)
  74. local otherConfig = AbsActExcel.absActivity[actId]
  75. YunYingLogic.sendGroupUpdate(YYInfo[actId], human, otherConfig.panelID)
  76. end
  77. function isOpen(human, YYInfo, funcConfig)
  78. local state, endTime, startTime = CycleActivityLogic.isStarted(human, funcConfig.funcID)
  79. if not state then return end
  80. return true, endTime, startTime
  81. end
  82. function isActive(human, YYInfo, funcConfig)
  83. return not isOpen(human, YYInfo, funcConfig)
  84. end
  85. function isRed(human, YYInfo, funcConfig)
  86. local actData = getActData(human, funcConfig.funcID)
  87. if not actData or not actData.gridData then
  88. return false
  89. end
  90. if actData.gridData.state == CommonDefine.COMMON_PRIZE_STATE_CANGET then
  91. return true
  92. end
  93. return false
  94. end
  95. function onLogin(human, funcID)
  96. local state = CycleActivityLogic.isStarted(human, funcID)
  97. if not state then return end
  98. local actData = getActData(human, funcID)
  99. if not actData then
  100. return false
  101. end
  102. if not actData.gridData or not actData.gridData.nowIdx then
  103. initData(human, funcID)
  104. checkGridState(human, funcID)
  105. end
  106. end
  107. function onCharge(human, price, funcID, buyID)
  108. local state = CycleActivityLogic.isStarted(human, funcID)
  109. if not state then return end
  110. local res = checkGridState(human, funcID, buyID)
  111. if res then
  112. -- 推送数据更新
  113. Query(human, funcID)
  114. -- 红点
  115. updateRedDot(human, funcID)
  116. end
  117. end
  118. function Query(human, actId)
  119. local actData = getActData(human, actId)
  120. if not actData then
  121. return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
  122. end
  123. if not actData.gridData or not actData.gridData.nowIdx then
  124. initData(human, actId)
  125. checkGridState(human, actId)
  126. end
  127. local gridData = actData.gridData
  128. local nowGridState = gridData.state
  129. local nowIdx = gridData.nowIdx
  130. if nowIdx > #heroSendGiftCfg then
  131. nowIdx = #heroSendGiftCfg
  132. nowGridState = CommonDefine.COMMON_PRIZE_STATE_GET
  133. end
  134. local msgRet = Msg.gc.GC_CYCLHEROSENDGIFT_QUERY
  135. local gridList = msgRet.gridList
  136. for k, v in ipairs(heroSendGiftCfg) do
  137. gridList[0] = k
  138. if k == nowIdx then
  139. gridList[k].state = nowGridState
  140. elseif k < nowIdx then
  141. gridList[k].state = CommonDefine.COMMON_PRIZE_STATE_GET
  142. else
  143. gridList[k].state = 3
  144. end
  145. BuyLogic.fontBuyItem(human, gridList[k].buyMsg, v.buyId)
  146. local itemList = gridList[k].itemList
  147. for len, itemCfg in ipairs(v.reward) do
  148. itemList[0] = len
  149. Grid.makeItem(itemList[len], itemCfg[1], itemCfg[2])
  150. end
  151. end
  152. Msg.send(msgRet, human.fd)
  153. end
  154. function GetReward(human, actId)
  155. local actData = getActData(human, actId)
  156. if not actData then
  157. return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
  158. end
  159. local gridData = actData.gridData
  160. local nowGridState = gridData.state
  161. if nowGridState ~= CommonDefine.COMMON_PRIZE_STATE_CANGET then
  162. return Broadcast.sendErr(human, Lang.SHARE_GROUP_GET_ERR_CNT)
  163. end
  164. local nowIdx = gridData.nowIdx
  165. local gridCfg = heroSendGiftCfg[nowIdx]
  166. if not gridCfg then
  167. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  168. end
  169. local itemVec = {}
  170. for l, itemCfg in ipairs(gridCfg.reward) do
  171. itemVec[l] = { itemCfg[1], itemCfg[2] }
  172. end
  173. nextGrid(human, actId, nowIdx+1)
  174. local bl = checkGridState(human, actId)
  175. if not bl then
  176. updateRedDot(human, actId)
  177. end
  178. BagLogic.addItemList(human, itemVec, LOGTAG)
  179. Query(human, actId)
  180. end