PremiumGiftLogic.lua 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. local AbsActExcel = require("excel.absAct")
  2. local Lang = require("common.Lang")
  3. local ObjHuman = require("core.ObjHuman")
  4. local Msg = require("core.Msg")
  5. local Broadcast = require("broadcast.Broadcast")
  6. local Grid = require("bag.Grid")
  7. local BagLogic = require("bag.BagLogic")
  8. local ItemDefine = require("bag.ItemDefine")
  9. local BuyLogic = require("topup.BuyLogic")
  10. local AbsActDefine = require("absAct.AbsActDefine")
  11. local AbsActLogic = require("absAct.AbsActLogic")
  12. local Log = require("common.Log")
  13. local YunYingLogic = require("yunying.YunYingLogic")
  14. local CycleActivityLogic = require("yunying.CycleActivity")
  15. --
  16. ABS_PREMIUM_GIFT_LIST_ACTID = { }
  17. ABS_PREMIUM_GIFT_LIST_BUYID = { }
  18. function initAfterHot()
  19. ABS_PREMIUM_GIFT_LIST_ACTID = {}
  20. for k, v in pairs(AbsActExcel.premiumGift) do
  21. ABS_PREMIUM_GIFT_LIST_ACTID[v.actId] = ABS_PREMIUM_GIFT_LIST_ACTID[v.actId] or { }
  22. ABS_PREMIUM_GIFT_LIST_ACTID[v.actId][#ABS_PREMIUM_GIFT_LIST_ACTID[v.actId] + 1] = k
  23. if v.buyID ~= 0 then
  24. ABS_PREMIUM_GIFT_LIST_BUYID[v.buyID] = k
  25. end
  26. end
  27. end
  28. --
  29. function isActive(human, YYInfo, funcConfig)
  30. return not isOpen(human, YYInfo, funcConfig)
  31. end
  32. --
  33. function isOpen(human, YYInfo, funcConfig)
  34. -- return AbsActLogic.isStarted(human, funcConfig.funcID)
  35. return CycleActivityLogic.isStarted(human, funcConfig.funcID)
  36. end
  37. --
  38. function isRed(human, YYInfo, funcConfig)
  39. -- local ret, endTime, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
  40. local ret, endTime, startTime = CycleActivityLogic.isStarted(human, funcConfig.funcID)
  41. if ret == true then
  42. local id = funcConfig.funcID
  43. local absActConfig = AbsActExcel.absActivity[id]
  44. if not absActConfig then return end
  45. -- AbsActLogic.checkAbsActClean(human, id)
  46. local absAct = human.db.absAct[id]
  47. if not absAct then
  48. return false
  49. end
  50. for k, giftId in pairs(ABS_PREMIUM_GIFT_LIST_ACTID[absActConfig.actId]) do
  51. local v = AbsActExcel.premiumGift[giftId]
  52. if v then
  53. if not absAct.premiumCnt or not absAct.premiumCnt[giftId] then
  54. return true
  55. end
  56. end
  57. end
  58. return false
  59. end
  60. return false
  61. end
  62. --
  63. function getLeftTime(human, YInfo, funcConfig)
  64. -- local ret, endTime, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
  65. local ret, endTime, startTime = CycleActivityLogic.isStarted(human, funcConfig.funcID)
  66. if ret == true then
  67. return endTime - os.time()
  68. else
  69. return 0
  70. end
  71. end
  72. function premiumGift(human, id, buyConf, isFirst, cnt)
  73. -- local state = AbsActLogic.isStarted(human, id)
  74. local state = CycleActivityLogic.isStarted(human, id)
  75. local absConfig = AbsActExcel.absActivity[id]
  76. if absConfig == nil or not state then return end
  77. -- 存在多个特惠礼包 同时 开放
  78. local premiumID = ABS_PREMIUM_GIFT_LIST_BUYID[buyConf.id]
  79. if not premiumID then return end
  80. local config = AbsActExcel.premiumGift[premiumID]
  81. if not config then return end
  82. if config.actId ~= absConfig.actId then return end
  83. -- AbsActLogic.checkAbsActClean(human, id)
  84. human.db.absAct[id].premiumCnt = human.db.absAct[id].premiumCnt or { }
  85. local nowBuyCnt = human.db.absAct[id].premiumCnt[premiumID] or 0
  86. -- 判断是否达到购买上限
  87. if nowBuyCnt >= config.cnt then
  88. Broadcast.sendErr(human, Lang.HERO_BAG_BUY_CAP_NO_CNT)
  89. return
  90. end
  91. -- 当金币购买之后超过最大金币时,不允许购买
  92. for j = 1, #config.reward do
  93. local itemID = config.reward[j][1]
  94. local itemCnt = config.reward[j][2]
  95. if itemID == ItemDefine.ITEM_JINBI_ID then
  96. if not ObjHuman.canAddJinbi(human, itemCnt) then
  97. return
  98. end
  99. end
  100. end
  101. -- 增加已购买次数
  102. human.db.absAct[id].premiumCnt[premiumID] = nowBuyCnt + 1
  103. -- 发放物品
  104. -- local items = { }
  105. BagLogic.addItemList(human, AbsActExcel.premiumGift[premiumID].reward, "premium_reward")
  106. Broadcast.sendErr(human, Lang.ITEM_BUY_SUCCESS)
  107. AbsActLogic.actDetailQuery(human, id)
  108. end
  109. function getAndSendMsg(human, id, actId)
  110. local now = os.time()
  111. -- local startedFlag, endTime, startTime = AbsActLogic.isStarted(human, id)
  112. local startedFlag, endTime, startTime = CycleActivityLogic.isStarted(human, id)
  113. if not startedFlag then return end
  114. local absActConfig = AbsActExcel.absActivity[id]
  115. if not absActConfig then return end
  116. local absAct = human.db.absAct[id]
  117. if not absAct then return end
  118. local msgRet = Msg.gc.GC_ABS_ACT_PREMIUM_GIFT_QUERY
  119. msgRet.templateId = absActConfig.panelID
  120. msgRet.ad = absActConfig.adIcon
  121. msgRet.absActId = id
  122. msgRet.status = absAct.status or 0
  123. local index = 0
  124. for k, giftId in pairs(ABS_PREMIUM_GIFT_LIST_ACTID[absActConfig.actId]) do
  125. local v = AbsActExcel.premiumGift[giftId]
  126. if v then
  127. index = index + 1
  128. Log.write(Log.LOGID_TEST, "getAndSendMsg index="..index.." actId="..absActConfig.actId.." id="..id.." giftId="..giftId)
  129. for j = 1, #v.reward do
  130. Grid.makeItem(msgRet.premiumGiftMsg[index].item[j], v.reward[j][1], v.reward[j][2])
  131. end
  132. msgRet.premiumGiftMsg[index].item[0] = #v.reward
  133. msgRet.premiumGiftMsg[index].cnt = absAct.premiumCnt and absAct.premiumCnt[giftId] or 0
  134. msgRet.premiumGiftMsg[index].id = giftId
  135. msgRet.premiumGiftMsg[index].maxCnt = v.cnt
  136. msgRet.premiumGiftMsg[index].icon = v.icon or 0
  137. msgRet.premiumGiftMsg[index].name = v.name or ""
  138. local buyID = v.buyID
  139. msgRet.premiumGiftMsg[index].buyMsg[0] = 0
  140. msgRet.premiumGiftMsg[index].needItem[0] = 0
  141. if v.buyID == 0 then
  142. local len = 0
  143. for _, item in ipairs(v.needItem) do
  144. len = len + 1
  145. Grid.makeItem(msgRet.premiumGiftMsg[index].needItem[len], item[1], item[2])
  146. end
  147. msgRet.premiumGiftMsg[index].needItem[0] = len
  148. else
  149. BuyLogic.fontBuyItem(human, msgRet.premiumGiftMsg[index].buyMsg[1], buyID)
  150. msgRet.premiumGiftMsg[index].buyMsg[0] = 1
  151. end
  152. end
  153. end
  154. msgRet.premiumGiftMsg[0] = index
  155. msgRet.startTime = startTime
  156. msgRet.endTime = endTime
  157. Msg.send(msgRet, human.fd)
  158. end
  159. function giftBuy(human, id, premiumID)
  160. -- local state = AbsActLogic.isStarted(human, id)
  161. local state = CycleActivityLogic.isStarted(human, id)
  162. if state ~= true then return Broadcast.sendErr(human, Lang.ACT_WAS_OVER) end
  163. local absConfig = AbsActExcel.absActivity[id]
  164. if not absConfig then return end
  165. -- AbsActLogic.checkAbsActClean(human, id)
  166. -- 存在多个特惠礼包 同时 开放
  167. local config = AbsActExcel.premiumGift[premiumID]
  168. if config.buyID ~= 0 then return end
  169. -- 初始化已购买次数
  170. human.db.absAct[id].premiumCnt = human.db.absAct[id].premiumCnt or { }
  171. local nowBuyCnt = human.db.absAct[id].premiumCnt[premiumID] or 0
  172. -- 判断是否达到购买上限
  173. if nowBuyCnt >= config.cnt then
  174. Broadcast.sendErr(human, Lang.HERO_BAG_BUY_CAP_NO_CNT)
  175. return
  176. end
  177. for _, item in ipairs(config.needItem) do
  178. local itemID = item[1]
  179. local itemCnt = item[2]
  180. if not BagLogic.checkItemCnt(human, itemID, itemCnt) then
  181. Broadcast.sendErr(human, Lang.COMMON_NO_ZUANSHI)
  182. return
  183. end
  184. end
  185. -- 当金币购买之后超过最大金币时,不允许购买
  186. for j = 1, #config.reward do
  187. local itemID = config.reward[j][1]
  188. local itemCnt = config.reward[j][2]
  189. if itemID == ItemDefine.ITEM_JINBI_ID then
  190. if not ObjHuman.canAddJinbi(human, itemCnt) then
  191. return
  192. end
  193. end
  194. end
  195. for _, item in ipairs(config.needItem) do
  196. local itemID = item[1]
  197. local itemCnt = item[2]
  198. BagLogic.delItem(human, itemID, itemCnt, "premium_reward")
  199. end
  200. -- 增加已购买次数
  201. human.db.absAct[id].premiumCnt[premiumID] = nowBuyCnt + 1
  202. -- 发放物品
  203. -- local items = { }
  204. BagLogic.addItemList(human, AbsActExcel.premiumGift[premiumID].reward, "premium_reward")
  205. Broadcast.sendErr(human, Lang.ITEM_BUY_SUCCESS)
  206. AbsActLogic.actDetailQuery(human, id)
  207. end