BusOneActivityYuanZheng.lua 10 KB

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