BusThreeActGrandGift.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. --------------------------------
  2. -- 文件名 : BusThreeActGrandGift.lua
  3. -- 文件说明 : 新商业活动3-天选豪礼
  4. -- 创建时间 : 2025/09/01
  5. -- 创建人 : FC
  6. --------------------------------
  7. local tGrandGiftConf = require("excel.BusThreeActivity").GrandGift
  8. local Util = require("common.Util")
  9. local Msg = require("core.Msg")
  10. local Grid = require("bag.Grid")
  11. local BagLogic = require("bag.BagLogic")
  12. local CommonDefine = require("common.CommonDefine")
  13. local AbsActLogic = require("absAct.AbsActLogic")
  14. local BuyLogic = require("topup.BuyLogic")
  15. local YunYingLogic = require("yunying.YunYingLogic")
  16. local AbsActExcel = require("excel.absAct")
  17. local BUSTHREEGRANDGIFTABSID = 7402 -- 对应ABS活动ID
  18. local BUSTHREEGRANDGIFT_PAY_NOGET = 0 -- 不可领取
  19. local BUSTHREEGRANDGIFT_PAY_BUY = 1 -- 已购买
  20. local BUSTHREEGRANDGIFT_PAY_HUOYUE = 2 -- 活跃度到达要求
  21. local BUSTHREEGRANDGIFT_PAY_CANGET = 3 -- 可以领取
  22. local BUSTHREEGRANDGIFT_PAY_GET = 4 -- 已领取
  23. ----------------------------------------- 内部处理开始 -------------------------------------
  24. -- 创建DB
  25. local function BusThreeGrandGift_CreatDB(human)
  26. if not human.db.absAct[BUSTHREEGRANDGIFTABSID] then
  27. human.db.absAct[BUSTHREEGRANDGIFTABSID] = {}
  28. end
  29. human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo = {
  30. nNum = 0,
  31. tStatus = {}
  32. }
  33. local tStatus = human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo.tStatus
  34. for nID, v in ipairs(tGrandGiftConf) do
  35. tStatus[nID] = {
  36. nFreeStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET,
  37. nPayStatus = BUSTHREEGRANDGIFT_PAY_NOGET
  38. }
  39. end
  40. end
  41. -- 重置DB
  42. local function BusThreeGrandGift_CheckAndResetDB(human)
  43. if not human.db.absAct[BUSTHREEGRANDGIFTABSID] or nil == _G.next(human.db.absAct[BUSTHREEGRANDGIFTABSID])
  44. or not human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo then
  45. BusThreeGrandGift_CreatDB(human)
  46. end
  47. local tStatus = human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo.tStatus
  48. if tStatus and #tStatus < #tGrandGiftConf then
  49. for i=#tStatus+1, #tGrandGiftConf do
  50. tStatus[i] = {
  51. nFreeStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET,
  52. nPayStatus = BUSTHREEGRANDGIFT_PAY_NOGET
  53. }
  54. end
  55. end
  56. end
  57. -- 获取当前远征次数
  58. local function BusThreeGrandGift_GetBuyNum(human)
  59. return human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo.nNum
  60. end
  61. -- 设置购买次数
  62. local function BusThreeGrandGift_SetBuyNum(human, nAddNum)
  63. human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo.nNum = human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo.nNum + nAddNum
  64. end
  65. -- 获取当前免费奖励状态
  66. local function BusThreeGrandGift_GetFreeStatus(human, nID)
  67. return human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo.tStatus[nID].nFreeStatus
  68. end
  69. -- 设置免费奖励状态
  70. local function BusThreeGrandGift_SetFreeStatus(human, nID, nValue)
  71. human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo.tStatus[nID].nFreeStatus = nValue
  72. end
  73. -- 获取当前付费奖励状态
  74. local function BusThreeGrandGift_GetPayStatus(human, nID)
  75. return human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo.tStatus[nID].nPayStatus
  76. end
  77. -- 设置付费奖励状态
  78. local function BusThreeGrandGift_SetPayStatus(human, nID, nValue)
  79. human.db.absAct[BUSTHREEGRANDGIFTABSID].tGiftInfo.tStatus[nID].nPayStatus = nValue
  80. end
  81. -----------------------------------客户端请求-----------------------------
  82. function BusThreeGrandGift_Query(human)
  83. BusThreeGrandGift_CheckAndResetDB(human)
  84. local tMsgData = Msg.gc.GC_NEW_BUSTHREEACT_GRANDGIFT_QUERY
  85. tMsgData.tList[0] = 0
  86. for nID, v in ipairs(tGrandGiftConf) do
  87. tMsgData.tList[0] = tMsgData.tList[0] + 1
  88. local tData = tMsgData.tList[tMsgData.tList[0]]
  89. tData.nID = nID
  90. tData.nFreeStatus = BusThreeGrandGift_GetFreeStatus(human, nID)
  91. local nPayStatus = BusThreeGrandGift_GetPayStatus(human, nID)
  92. tData.nPayStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET
  93. tData.bBuy = 0
  94. if nPayStatus == BUSTHREEGRANDGIFT_PAY_CANGET then
  95. tData.nPayStatus = CommonDefine.COMMON_PRIZE_STATE_CANGET
  96. elseif BUSTHREEGRANDGIFT_PAY_GET == nPayStatus then
  97. tData.nPayStatus = CommonDefine.COMMON_PRIZE_STATE_GET
  98. end
  99. if nPayStatus ~= BUSTHREEGRANDGIFT_PAY_NOGET and BUSTHREEGRANDGIFT_PAY_HUOYUE ~= nPayStatus then
  100. tData.bBuy = 1
  101. end
  102. tData.nFinishNum = BusThreeGrandGift_GetBuyNum(human)
  103. tData.nNeedNum = v.nNeedNum
  104. -- 购买项
  105. BuyLogic.fontBuyItem(human, tData.tBuyItem, v.nBuyID)
  106. tData.tFreePrize[0] = #v.FreePrize
  107. for i, tItem in ipairs(v.FreePrize) do
  108. local nGoodsID = tItem[1]
  109. local nGoodsNum = tItem[2]
  110. Grid.makeItem(tData.tFreePrize[i], nGoodsID, nGoodsNum)
  111. end
  112. tData.tPayPrize[0] = #v.PayPrize
  113. for i, tItem in ipairs(v.PayPrize) do
  114. local nGoodsID = tItem[1]
  115. local nGoodsNum = tItem[2]
  116. Grid.makeItem(tData.tPayPrize[i], nGoodsID, nGoodsNum)
  117. end
  118. end
  119. Msg.send(tMsgData, human.fd)
  120. end
  121. function BusThreeGrandGift_Get(human)
  122. local tGoods = {}
  123. for nID, v in ipairs(tGrandGiftConf) do
  124. local nFreeStatus = BusThreeGrandGift_GetFreeStatus(human, nID)
  125. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nFreeStatus then
  126. BusThreeGrandGift_SetFreeStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_GET)
  127. for _, tItem in ipairs(v.FreePrize) do
  128. local nGoodsID = tItem[1]
  129. local nGoodsNum = tItem[2]
  130. if not tGoods[nGoodsID] then
  131. tGoods[nGoodsID] = 0
  132. end
  133. tGoods[nGoodsID] = tGoods[nGoodsID] + nGoodsNum
  134. end
  135. end
  136. local nPayStatus = BusThreeGrandGift_GetPayStatus(human, nID)
  137. if BUSTHREEGRANDGIFT_PAY_CANGET == nPayStatus then
  138. BusThreeGrandGift_SetPayStatus(human, nID, BUSTHREEGRANDGIFT_PAY_GET)
  139. for _, tItem in ipairs(v.PayPrize) do
  140. local nGoodsID = tItem[1]
  141. local nGoodsNum = tItem[2]
  142. if not tGoods[nGoodsID] then
  143. tGoods[nGoodsID] = 0
  144. end
  145. tGoods[nGoodsID] = tGoods[nGoodsID] + nGoodsNum
  146. end
  147. end
  148. end
  149. if nil ~= _G.next(tGoods) then
  150. local tItem = {}
  151. for nGoodID, nGoodNum in pairs(tGoods) do
  152. table.insert(tItem, {nGoodID, nGoodNum})
  153. end
  154. BagLogic.addItemList(human, tItem, "BusThreeGrandGift")
  155. BusThreeGrandGift_Query(human)
  156. YunYingLogic.sendBanner(human)
  157. local config = AbsActExcel.absActivity[BUSTHREEGRANDGIFTABSID]
  158. YunYingLogic.sendGroupUpdate(YYInfo[BUSTHREEGRANDGIFTABSID], human, config.panelID)
  159. end
  160. end
  161. -----------------------------------外部调用-----------------------------
  162. function isOpen(human, YYInfo, funcConfig)
  163. -- print("[BusThreeGrandGift_isOpen] 进入判断")
  164. local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig and funcConfig.funcID or BUSTHREEGRANDGIFTABSID)
  165. if not state then
  166. print("[BusThreeGrandGift_isOpen] 当前活动未开启")
  167. return
  168. end
  169. -- print("[BusThreeGrandGift_isOpen] 进入判断 endTime = "..endTime.." startTime = "..startTime)
  170. return true, endTime, startTime
  171. end
  172. function isActive(human, YYInfo, funcConfig)
  173. return not isOpen(human, YYInfo, funcConfig)
  174. end
  175. function isRed(human, YYInfo, absActConfig)
  176. BusThreeGrandGift_CheckAndResetDB(human)
  177. for nID, v in ipairs(tGrandGiftConf) do
  178. local nFreeStatus = BusThreeGrandGift_GetFreeStatus(human, nID)
  179. local nPayStatus = BusThreeGrandGift_GetPayStatus(human, nID)
  180. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nFreeStatus or
  181. BUSTHREEGRANDGIFT_PAY_CANGET == nPayStatus then
  182. return true
  183. end
  184. end
  185. return false
  186. end
  187. function onCharge(human, price, funcID, buyID)
  188. -- print("[BusThreeGrandGift_onCharge] 进入购买 buyID = "..buyID)
  189. BusThreeGrandGift_CheckAndResetDB(human)
  190. for nID, v in ipairs(tGrandGiftConf) do
  191. if v.nBuyID == buyID then
  192. local nPayStatus = BusThreeGrandGift_GetPayStatus(human, nID)
  193. if BUSTHREEGRANDGIFT_PAY_NOGET == nPayStatus then
  194. BusThreeGrandGift_SetPayStatus(human, nID, BUSTHREEGRANDGIFT_PAY_BUY)
  195. elseif BUSTHREEGRANDGIFT_PAY_HUOYUE == nPayStatus then
  196. BusThreeGrandGift_SetPayStatus(human, nID, BUSTHREEGRANDGIFT_PAY_CANGET)
  197. end
  198. end
  199. end
  200. -- print("[BusThreeGrandGift_onCharge] 发送协议完成")
  201. BusThreeGrandGift_Query(human)
  202. -- BusOneActivityTask.BusOneTask_SendRed(human)
  203. end
  204. function BusThreeGrandGift_NumChange(human, nNum)
  205. if 0 >= nNum then
  206. return
  207. end
  208. BusThreeGrandGift_CheckAndResetDB(human)
  209. local nOldNum = BusThreeGrandGift_GetBuyNum(human)
  210. BusThreeGrandGift_SetBuyNum(human, nNum)
  211. local nNewNum = nOldNum + nNum
  212. local bSend = false
  213. for nID, v in ipairs(tGrandGiftConf) do
  214. if nNewNum >= v.nNeedNum then
  215. local nFreeStatus = BusThreeGrandGift_GetFreeStatus(human, nID)
  216. local nPayStatus = BusThreeGrandGift_GetPayStatus(human, nID)
  217. if nFreeStatus == CommonDefine.COMMON_PRIZE_STATE_NOGET then
  218. BusThreeGrandGift_SetFreeStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_CANGET)
  219. bSend = true
  220. end
  221. if BUSTHREEGRANDGIFT_PAY_NOGET == nPayStatus then
  222. BusThreeGrandGift_SetPayStatus(human, nID, BUSTHREEGRANDGIFT_PAY_HUOYUE)
  223. bSend = true
  224. elseif BUSTHREEGRANDGIFT_PAY_BUY == nPayStatus then
  225. BusThreeGrandGift_SetPayStatus(human, nID, BUSTHREEGRANDGIFT_PAY_CANGET)
  226. bSend = true
  227. end
  228. end
  229. end
  230. if true == bSend then
  231. YunYingLogic.sendBanner(human)
  232. -- BusThreeActivityTask.BusOneTask_SendRed(human)
  233. end
  234. end
  235. -- function GetRemainNum(human, nBuyID)
  236. -- for nID, v in ipairs(tGrandGiftConf) do
  237. -- if v.nBuyID == nBuyID then
  238. -- local nPayStatus = BusThreeGrandGift_GetPayStatus(human, nID)
  239. -- if nPayStatus == BUSTHREEGRANDGIFT_PAY_NOGET or BUSTHREEGRANDGIFT_PAY_HUOYUE == nPayStatus then
  240. -- return 1
  241. -- else
  242. -- return 0
  243. -- end
  244. -- end
  245. -- end
  246. -- end