BusThreeActGrandGift.lua 12 KB

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