GiftLogic.lua 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. ----------------------------
  2. -- 彈窗禮包
  3. ----------------------------
  4. local BuyExcel = require("excel.buy").buy
  5. local GiftExcel = require("excel.buy").gift
  6. local ItemDefine = require("bag.ItemDefine")
  7. local Grid = require("bag.Grid")
  8. local NewLogic = require("role.NewLogic")
  9. local BagLogic = require("bag.BagLogic")
  10. local BuyLogic = require("topup.BuyLogic")
  11. -- 推送协议类型
  12. local GC_GIFT_GENERATE = 50
  13. local GC_QUERY_GIFT = 51
  14. -- 礼包触发事件
  15. local PRINCIPAL_LINE_EVNET = 1 -- 主线推图
  16. local EVAL_TOWER_EVENT = 2 -- 恶魔之塔
  17. local Upgrade_HERO_EVENT = 3 -- 英雄升星
  18. --[[
  19. human.db.gift = {
  20. [id] = startTimeStamp
  21. }
  22. ]]
  23. local function genGiftData(human, id,startTime,region,isNew)
  24. local cfg = GiftExcel[id]
  25. local buyCfg = BuyExcel[cfg.buyID]
  26. -- 获取礼包信息
  27. local buyItem = {}
  28. BuyLogic.fontBuyItem(human, buyItem, cfg.buyID)
  29. -- 获取礼包content
  30. local itemData = {}
  31. for _,item in ipairs(cfg.content) do
  32. local data = {
  33. getway = {},
  34. suipian = {},
  35. equip = {},
  36. fuwen = {},
  37. }
  38. if not ItemDefine.isEquip(item[1]) then
  39. Grid.makeItem(data, item[1], item[2])
  40. end
  41. itemData[#itemData+1] = data
  42. end
  43. return {
  44. id = id,
  45. buyItem = buyItem,
  46. startTimeStamp = startTime,
  47. restTime = cfg.ttl - (os.time() - startTime),
  48. isNew = isNew,
  49. itemData = itemData,
  50. }
  51. end
  52. local function genGift(human,id)
  53. -- 已经触发过礼包了
  54. if human.db.gift.unlock[id] then
  55. return
  56. end
  57. human.db.gift.unlock[id] = true
  58. local now = os.time()
  59. human.db.gift.online[id] = now
  60. local giftData = genGiftData(human, id,now,human.region or "CN",1)
  61. return NewLogic.PushClient(human,GC_GIFT_GENERATE,{gift = giftData})
  62. end
  63. local function cleanGift(human)
  64. local nowTime = os.time()
  65. local gift = human.db.gift.online
  66. for id,ts in pairs(gift) do
  67. local cfg = GiftExcel[id] -- 是否需要判断cfg
  68. if nowTime - ts >= cfg.ttl then
  69. gift[id] = nil
  70. end
  71. end
  72. human.db.gift.online = gift
  73. end
  74. local function sendHumanGift(human)
  75. local gift = human.db.gift.online
  76. local list = {}
  77. -- 数据太大不好控制大小,分批次传送
  78. for id,ts in pairs(gift) do
  79. list[#list + 1] = genGiftData(human, id,ts,human.region or "CN")
  80. --[[if #list >= 5 then
  81. NewLogic.PushClient(human,GC_QUERY_GIFT,{
  82. list = list,
  83. isFinish = 1,
  84. })
  85. list = {}
  86. end]]
  87. end
  88. -- 通知客户端
  89. NewLogic.PushClient(human,GC_QUERY_GIFT,{
  90. list = list,
  91. isFinish = 2,
  92. })
  93. end
  94. local handler = {
  95. [PRINCIPAL_LINE_EVNET] = function(human,param)
  96. for id,cfg in pairs(GiftExcel) do
  97. -- 触发新礼包
  98. if cfg.trigger == PRINCIPAL_LINE_EVNET and cfg.param[1] == param.id then
  99. genGift(human,id)
  100. end
  101. end
  102. end,
  103. [EVAL_TOWER_EVENT] = function(human,param)
  104. for id,cfg in pairs(GiftExcel) do
  105. -- 触发新礼包
  106. if cfg.trigger == EVAL_TOWER_EVENT and cfg.param[1] == param.id then
  107. genGift(human,id)
  108. end
  109. end
  110. end,
  111. [Upgrade_HERO_EVENT] = function(human,param)
  112. -- 检测是否是第一个星级的英雄
  113. local star = param.star
  114. --[[local HeroLogic = require("hero.HeroLogic")
  115. local maxStar,cnt = HeroLogic.getHeroMaxStarCtn(human)
  116. if maxStar ~= star then
  117. return
  118. end
  119. if cnt ~= 1 then
  120. return
  121. end]]
  122. for id,cfg in pairs(GiftExcel) do
  123. -- 触发新礼包
  124. if cfg.trigger == Upgrade_HERO_EVENT and cfg.param[1] == star then
  125. genGift(human,id)
  126. end
  127. end
  128. end,
  129. }
  130. ---------------------------------------------------------------
  131. function onLogin(human)
  132. -- 登录清楚过期礼包
  133. cleanGift(human)
  134. -- 开启事件监听!?
  135. return sendHumanGift(human)
  136. end
  137. function trigger(human,type,param)
  138. local f = handler[type]
  139. if not f then
  140. return
  141. end
  142. return f(human,param)
  143. end
  144. function buy(human,giftId)
  145. -- 清楚一次过期的弹窗礼包
  146. print("recieve gift id is ",giftId)
  147. cleanGift(human)
  148. if not human.db.gift.online[giftId] then
  149. print("not found gift ",giftId)
  150. return
  151. end
  152. local cfg = GiftExcel[giftId]
  153. --[[local content = {}
  154. for _,item in pairs(cfg.content) do
  155. content[#content + 1] = {
  156. id = item[1],
  157. cnt = item[2]
  158. }
  159. end]]
  160. BagLogic.addItemList(human,cfg.content,"gift_buy")
  161. human.db.gift.online[giftId] = nil
  162. return sendHumanGift(human)
  163. end