GiftLogic.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  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. local Util = require("common.Util")
  12. -- 推送协议类型
  13. local GC_GIFT_GENERATE = 50
  14. local GC_QUERY_GIFT = 51
  15. -- 次类型
  16. GIFT_SEC_TYPE1 = 1
  17. GIFT_SEC_TYPE2 = 2
  18. GIFT_SEC_TYPE3 = 3
  19. -- 礼包触发事件
  20. local PRINCIPAL_LINE_EVNET = 1 -- 主线推图
  21. local EVAL_TOWER_EVENT = 2 -- 恶魔之塔
  22. local Upgrade_HERO_EVENT = 3 -- 英雄升星
  23. GIFT_UPGRADE_LV_EVENT = 4 -- 玩家升级
  24. GIFT_TALISMAN_UPGRADE_STAR = 5 -- 秘宝升星
  25. GIFT_WINNERRELIC_UPGRADE_STAR = 6 -- 圣遗物升星
  26. GIFT_ELF_UPGRADE_STAR = 7 -- 精灵升星
  27. GIFT_HERO_UPGRADE_STAR_DAILY = 8 -- 英雄升星, 每日只可触发一次, 可与 Upgrade_HERO_EVENT 同时触发
  28. GIFT_HEROSEED_UPGRADE_STAR = 9 -- 英雄种子
  29. GIFT_HEROTIANYUAN_UPGRADE_STAR = 10 -- 英雄天元
  30. GIFT_HEROWEAPON_UPGRADE_STAR = 11 -- 英雄专属武器
  31. GIFT_TALISMAN_OPEN = 15 -- 开启秘宝玩法
  32. GIFT_WINNERRELIC_OPEN = 16 -- 开启圣遗物玩法
  33. GIFT_ELF_OPEN = 17 -- 开启精灵玩法
  34. -- 每日只触发一次的礼包类型
  35. local dailyEventList = {
  36. [GIFT_HERO_UPGRADE_STAR_DAILY] = 1,
  37. }
  38. --[[
  39. human.db.gift = {
  40. [id] = startTimeStamp
  41. }
  42. ]]
  43. local function genGiftData(human, id,startTime,region,isNew)
  44. local cfg = GiftExcel[id]
  45. local buyCfg = BuyExcel[cfg.buyID]
  46. -- 获取礼包信息
  47. local buyItem = {}
  48. BuyLogic.fontBuyItem(human, buyItem, cfg.buyID)
  49. -- 获取礼包content
  50. local itemData = {}
  51. for _,item in ipairs(cfg.content) do
  52. local data = {
  53. getway = {},
  54. suipian = {},
  55. equip = {},
  56. fuwen = {},
  57. }
  58. if not ItemDefine.isEquip(item[1]) then
  59. Grid.makeItem(data, item[1], item[2])
  60. end
  61. itemData[#itemData+1] = data
  62. end
  63. return {
  64. id = id,
  65. buyItem = buyItem,
  66. startTimeStamp = startTime,
  67. restTime = cfg.ttl - (os.time() - startTime),
  68. isNew = isNew,
  69. itemData = itemData,
  70. }
  71. end
  72. local function genGift(human,id)
  73. local giftCfg = GiftExcel[id]
  74. local gitftType = giftCfg and giftCfg.trigger or 0
  75. -- 已经触发过礼包了
  76. -- 新修改: 类型8不受这个影响
  77. if human.db.gift.unlock[id] and GIFT_HERO_UPGRADE_STAR_DAILY ~= gitftType then
  78. return
  79. end
  80. human.db.gift.unlock[id] = true
  81. local now = os.time()
  82. human.db.gift.online[id] = now
  83. local giftData = genGiftData(human, id,now,human.region or "CN",1)
  84. return NewLogic.PushClient(human,GC_GIFT_GENERATE,{gift = giftData})
  85. end
  86. local function cleanGift(human)
  87. local nowTime = os.time()
  88. local gift = human.db.gift.online
  89. for id,ts in pairs(gift) do
  90. local cfg = GiftExcel[id] -- 是否需要判断cfg
  91. if nowTime - ts >= cfg.ttl then
  92. gift[id] = nil
  93. end
  94. end
  95. human.db.gift.online = gift
  96. end
  97. local function sendHumanGift(human)
  98. local gift = human.db.gift.online
  99. local list = {}
  100. -- 数据太大不好控制大小,分批次传送
  101. for id,ts in pairs(gift) do
  102. list[#list + 1] = genGiftData(human, id,ts,human.region or "CN")
  103. --[[if #list >= 5 then
  104. NewLogic.PushClient(human,GC_QUERY_GIFT,{
  105. list = list,
  106. isFinish = 1,
  107. })
  108. list = {}
  109. end]]
  110. end
  111. -- 通知客户端
  112. NewLogic.PushClient(human,GC_QUERY_GIFT,{
  113. list = list,
  114. isFinish = 2,
  115. })
  116. end
  117. -- 每日只触发一次的礼包
  118. local function dailyEventCheck(human, giftId)
  119. if not human.db.gift or not human.db.gift.dailyEventRecord then
  120. return true
  121. end
  122. local dailyEventRecord = human.db.gift.dailyEventRecord
  123. if dailyEventRecord[giftId] then
  124. local lastGenGiftTime = dailyEventRecord[giftId]
  125. if Util.isSameDay(lastGenGiftTime) then
  126. return false
  127. end
  128. end
  129. return true
  130. end
  131. local function updateDailyEventRecord(human, giftId)
  132. human.db.gift.dailyEventRecord = human.db.gift.dailyEventRecord or {}
  133. human.db.gift.dailyEventRecord[giftId] = os.time()
  134. end
  135. local handler = {
  136. [PRINCIPAL_LINE_EVNET] = function(human,param)
  137. for id,cfg in pairs(GiftExcel) do
  138. -- 触发新礼包
  139. if cfg.trigger == PRINCIPAL_LINE_EVNET and cfg.param[1] == param.id then
  140. genGift(human,id)
  141. end
  142. end
  143. end,
  144. [EVAL_TOWER_EVENT] = function(human,param)
  145. for id,cfg in pairs(GiftExcel) do
  146. -- 触发新礼包
  147. if cfg.trigger == EVAL_TOWER_EVENT and cfg.param[1] == param.id then
  148. genGift(human,id)
  149. end
  150. end
  151. end,
  152. [Upgrade_HERO_EVENT] = function(human,param)
  153. -- 检测是否是第一个星级的英雄
  154. local star = param.star
  155. --[[local HeroLogic = require("hero.HeroLogic")
  156. local maxStar,cnt = HeroLogic.getHeroMaxStarCtn(human)
  157. if maxStar ~= star then
  158. return
  159. end
  160. if cnt ~= 1 then
  161. return
  162. end]]
  163. for id,cfg in pairs(GiftExcel) do
  164. -- 触发新礼包
  165. if cfg.trigger == Upgrade_HERO_EVENT and cfg.param[1] == star then
  166. genGift(human,id)
  167. end
  168. end
  169. end,
  170. -- [GIFT_UPGRADE_LV_EVENT] = function (human,param)
  171. -- for id,cfg in pairs(GiftExcel) do
  172. -- -- 触发新礼包
  173. -- if cfg.trigger == GIFT_UPGRADE_LV_EVENT and cfg.param[1] == param.newLv then
  174. -- genGift(human,id)
  175. -- end
  176. -- end
  177. -- end,
  178. -- [GIFT_TALISMAN_UPGRADE_STAR] = function (human,param)
  179. -- for id,cfg in pairs(GiftExcel) do
  180. -- -- 触发新礼包
  181. -- if cfg.trigger == GIFT_TALISMAN_UPGRADE_STAR and cfg.param[1] == param.newLv then
  182. -- genGift(human,id)
  183. -- end
  184. -- end
  185. -- end,
  186. -- [GIFT_WINNERRELIC_UPGRADE_STAR] = function (human,param)
  187. -- for id,cfg in pairs(GiftExcel) do
  188. -- -- 触发新礼包
  189. -- if cfg.trigger == GIFT_WINNERRELIC_UPGRADE_STAR and cfg.param[1] == param.newLv then
  190. -- genGift(human,id)
  191. -- end
  192. -- end
  193. -- end,
  194. -- [GIFT_ELF_UPGRADE_STAR] = function (human,param)
  195. -- for id,cfg in pairs(GiftExcel) do
  196. -- -- 触发新礼包
  197. -- if cfg.trigger == GIFT_ELF_UPGRADE_STAR and cfg.param[1] == param.newLv then
  198. -- genGift(human,id)
  199. -- end
  200. -- end
  201. -- end,
  202. -- [GIFT_TALISMAN_OPEN] = function (human)
  203. -- for id,cfg in pairs(GiftExcel) do
  204. -- -- 触发新礼包
  205. -- if cfg.trigger == GIFT_TALISMAN_OPEN then
  206. -- genGift(human,id)
  207. -- end
  208. -- end
  209. -- end,
  210. -- [GIFT_WINNERRELIC_OPEN] = function (human)
  211. -- for id,cfg in pairs(GiftExcel) do
  212. -- -- 触发新礼包
  213. -- if cfg.trigger == GIFT_WINNERRELIC_OPEN then
  214. -- genGift(human,id)
  215. -- end
  216. -- end
  217. -- end,
  218. -- [GIFT_ELF_OPEN] = function (human)
  219. -- for id,cfg in pairs(GiftExcel) do
  220. -- -- 触发新礼包
  221. -- if cfg.trigger == GIFT_ELF_OPEN then
  222. -- genGift(human,id)
  223. -- end
  224. -- end
  225. -- end,
  226. }
  227. local handler2 = {
  228. [GIFT_SEC_TYPE1] = function (human, param, eventType)
  229. for id,cfg in pairs(GiftExcel) do
  230. -- 触发新礼包
  231. if cfg.trigger == eventType and cfg.param[1] == param.currentVal and (not dailyEventList[eventType] or dailyEventCheck(human, id)) then
  232. genGift(human,id)
  233. if dailyEventList[eventType] then
  234. updateDailyEventRecord(human, id)
  235. end
  236. end
  237. end
  238. end,
  239. [GIFT_SEC_TYPE2] = function (human, param, eventType)
  240. for id,cfg in pairs(GiftExcel) do
  241. -- 触发新礼包
  242. if cfg.trigger == eventType then
  243. genGift(human,id)
  244. end
  245. end
  246. end,
  247. [GIFT_SEC_TYPE3] = function (human, param, eventType)
  248. for id,cfg in pairs(GiftExcel) do
  249. -- 触发新礼包
  250. if cfg.trigger == eventType and cfg.param[1] <= param.currentVal and (not dailyEventList[eventType] or dailyEventCheck(human, id)) then
  251. genGift(human,id)
  252. if dailyEventList[eventType] then
  253. updateDailyEventRecord(human, id)
  254. end
  255. end
  256. end
  257. end,
  258. }
  259. ---------------------------------------------------------------
  260. function onLogin(human)
  261. -- 登录清楚过期礼包
  262. cleanGift(human)
  263. -- 开启事件监听!?
  264. return sendHumanGift(human)
  265. end
  266. function trigger(human,type,param, extraType)
  267. local f
  268. if not extraType then
  269. f = handler[type]
  270. else
  271. f = handler2[extraType]
  272. end
  273. if not f then
  274. return
  275. end
  276. return f(human, param, type)
  277. end
  278. function buy(human,giftId)
  279. -- 清楚一次过期的弹窗礼包
  280. print("recieve gift id is ",giftId)
  281. cleanGift(human)
  282. if not human.db.gift.online[giftId] then
  283. print("not found gift ",giftId)
  284. return
  285. end
  286. local cfg = GiftExcel[giftId]
  287. --[[local content = {}
  288. for _,item in pairs(cfg.content) do
  289. content[#content + 1] = {
  290. id = item[1],
  291. cnt = item[2]
  292. }
  293. end]]
  294. BagLogic.addItemList(human,cfg.content,"gift_buy")
  295. human.db.gift.online[giftId] = nil
  296. return sendHumanGift(human)
  297. end
  298. -- function GetRemainNum(human, nBuyID)
  299. -- local nChoseID = nil
  300. -- for id,cfg in pairs(GiftExcel) do
  301. -- if cfg.buyID == nBuyID then
  302. -- nChoseID = id
  303. -- break
  304. -- end
  305. -- end
  306. -- if not nChoseID then
  307. -- return 0
  308. -- end
  309. -- if not human.db.gift.online[nChoseID] then
  310. -- return 0
  311. -- else
  312. -- return 1
  313. -- end
  314. -- end