GiftLogic.lua 4.9 KB

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