CycleHeroSendGift.lua 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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 CommercializationActivityExcel = require("excel.commercializationActivity")
  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 getChannelId(human)
  48. return human.db.phpChanelID or human.phpChanelID
  49. end
  50. local function isXiaoQiChannel(human)
  51. local channelID = getChannelId(human)
  52. return channelID == CommonDefine.CHANNEL_TAG_XIAOQI
  53. or channelID == tostring(CommonDefine.CHANNEL_TAG_XIAOQI)
  54. end
  55. local function getHeroSendGiftCfg(human)
  56. if isXiaoQiChannel(human) then
  57. return CommercializationActivityExcel.heroSendGift1
  58. end
  59. return CommercializationActivityExcel.heroSendGift
  60. end
  61. local function checkGridState(human, actId, nowBuyId)
  62. local actData = getActData(human, actId)
  63. if not actData then
  64. return
  65. end
  66. local gridData = actData.gridData
  67. local nowIdx = gridData and gridData.nowIdx or -1
  68. local heroSendGiftCfg = getHeroSendGiftCfg(human)
  69. local gridCfg = heroSendGiftCfg[nowIdx]
  70. if not gridCfg then
  71. return
  72. end
  73. local bl = false
  74. if gridCfg.buyId == 0 then
  75. bl = true
  76. else
  77. if nowBuyId and gridCfg.buyId == nowBuyId then
  78. bl = true
  79. end
  80. end
  81. if bl then
  82. updateActData(human, actId)
  83. end
  84. return bl
  85. end
  86. -- 更新红点
  87. local function updateRedDot(human, actId)
  88. YunYingLogic.sendBanner(human)
  89. local otherConfig = AbsActExcel.absActivity[actId]
  90. YunYingLogic.sendGroupUpdate(YYInfo[actId], human, otherConfig.panelID)
  91. end
  92. function isOpen(human, YYInfo, funcConfig)
  93. local state, endTime, startTime = CycleActivityLogic.isStarted(human, funcConfig.funcID)
  94. if not state then return end
  95. return true, endTime, startTime
  96. end
  97. function isActive(human, YYInfo, funcConfig)
  98. return not isOpen(human, YYInfo, funcConfig)
  99. end
  100. function isRed(human, YYInfo, funcConfig)
  101. local actData = getActData(human, funcConfig.funcID)
  102. if not actData or not actData.gridData then
  103. return false
  104. end
  105. if actData.gridData.state == CommonDefine.COMMON_PRIZE_STATE_CANGET then
  106. return true
  107. end
  108. return false
  109. end
  110. function onLogin(human, funcID)
  111. local state = CycleActivityLogic.isStarted(human, funcID)
  112. if not state then return end
  113. local actData = getActData(human, funcID)
  114. if not actData then
  115. return false
  116. end
  117. if not actData.gridData or not actData.gridData.nowIdx then
  118. initData(human, funcID)
  119. checkGridState(human, funcID)
  120. end
  121. end
  122. function onCharge(human, price, funcID, buyID)
  123. local state = CycleActivityLogic.isStarted(human, funcID)
  124. if not state then return end
  125. local res = checkGridState(human, funcID, buyID)
  126. if res then
  127. -- 推送数据更新
  128. Query(human, funcID)
  129. -- 红点
  130. updateRedDot(human, funcID)
  131. end
  132. end
  133. function Query(human, actId)
  134. local actData = getActData(human, actId)
  135. if not actData then
  136. return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
  137. end
  138. if not actData.gridData or not actData.gridData.nowIdx then
  139. initData(human, actId)
  140. checkGridState(human, actId)
  141. end
  142. local gridData = actData.gridData
  143. local nowGridState = gridData.state
  144. local nowIdx = gridData.nowIdx
  145. local heroSendGiftCfg = getHeroSendGiftCfg(human)
  146. if nowIdx > #heroSendGiftCfg then
  147. nowIdx = #heroSendGiftCfg
  148. nowGridState = CommonDefine.COMMON_PRIZE_STATE_GET
  149. end
  150. local msgRet = Msg.gc.GC_CYCLHEROSENDGIFT_QUERY
  151. local gridList = msgRet.gridList
  152. for k, v in ipairs(heroSendGiftCfg) do
  153. gridList[0] = k
  154. if k == nowIdx then
  155. gridList[k].state = nowGridState
  156. elseif k < nowIdx then
  157. gridList[k].state = CommonDefine.COMMON_PRIZE_STATE_GET
  158. else
  159. gridList[k].state = 3
  160. end
  161. BuyLogic.fontBuyItem(human, gridList[k].buyMsg, v.buyId)
  162. local itemList = gridList[k].itemList
  163. for len, itemCfg in ipairs(v.reward) do
  164. itemList[0] = len
  165. Grid.makeItem(itemList[len], itemCfg[1], itemCfg[2])
  166. end
  167. end
  168. Msg.send(msgRet, human.fd)
  169. end
  170. function GetReward(human, actId)
  171. local actData = getActData(human, actId)
  172. if not actData then
  173. return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
  174. end
  175. local gridData = actData.gridData
  176. local nowGridState = gridData.state
  177. if nowGridState ~= CommonDefine.COMMON_PRIZE_STATE_CANGET then
  178. return Broadcast.sendErr(human, Lang.SHARE_GROUP_GET_ERR_CNT)
  179. end
  180. local nowIdx = gridData.nowIdx
  181. local heroSendGiftCfg = getHeroSendGiftCfg(human)
  182. local gridCfg = heroSendGiftCfg[nowIdx]
  183. if not gridCfg then
  184. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  185. end
  186. local itemVec = {}
  187. for l, itemCfg in ipairs(gridCfg.reward) do
  188. itemVec[l] = { itemCfg[1], itemCfg[2] }
  189. end
  190. nextGrid(human, actId, nowIdx+1)
  191. local bl = checkGridState(human, actId)
  192. if not bl then
  193. updateRedDot(human, actId)
  194. end
  195. BagLogic.addItemList(human, itemVec, LOGTAG)
  196. Query(human, actId)
  197. end