PremiumGiftLogic.lua 9.3 KB

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