BusOneActivityBuy.lua 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. --------------------------------
  2. -- 文件名 : BusOneActivityBuy.lua
  3. -- 文件说明 : 新商业活动-购买
  4. -- 创建时间 : 2025/08/05
  5. -- 创建人 : FC
  6. --------------------------------
  7. local tBuyConf = require("excel.BusoneActivity").Buy
  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 ObjHuman = require("core.ObjHuman")
  16. local BusOneActivityTask = require("absAct.BusOneActivityTask")
  17. local BUSONEBUYABSID = 7202 -- 对应ABS活动ID
  18. local BUSONEBUY_TYPE_MONEY = 2 -- 钱购买
  19. ----------------------------------------- 内部处理开始 -------------------------------------
  20. -- 创建DB
  21. local function BusOneBuy_CreatDB(human)
  22. if not human.db.absAct[BUSONEBUYABSID] then
  23. human.db.absAct[BUSONEBUYABSID] = {}
  24. end
  25. human.db.absAct[BUSONEBUYABSID].tBuyInfo = {}
  26. for nID, v in ipairs(tBuyConf) do
  27. human.db.absAct[BUSONEBUYABSID].tBuyInfo[nID] = {
  28. nBuyNum = 0,
  29. nStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET
  30. }
  31. end
  32. end
  33. -- 重置DB
  34. local function BusOneBuy_CheckAndResetDB(human)
  35. if not human.db.absAct[BUSONEBUYABSID] or nil == _G.next(human.db.absAct[BUSONEBUYABSID])
  36. or not human.db.absAct[BUSONEBUYABSID].tBuyInfo then
  37. BusOneBuy_CreatDB(human)
  38. end
  39. end
  40. -- 获取购买次数
  41. local function BusOneBuy_GetBuyNum(human, nID)
  42. return human.db.absAct[BUSONEBUYABSID].tBuyInfo[nID].nBuyNum
  43. end
  44. -- 设置购买次数
  45. local function BusOneBuy_SetBuyNum(human, nID, nAddNum)
  46. human.db.absAct[BUSONEBUYABSID].tBuyInfo[nID].nBuyNum = human.db.absAct[BUSONEBUYABSID].tBuyInfo[nID].nBuyNum + nAddNum
  47. end
  48. -- 获取购买状态
  49. local function BusOneBuy_GetBuyStatus(human, nID)
  50. return human.db.absAct[BUSONEBUYABSID].tBuyInfo[nID].nStatus
  51. end
  52. -- 设置购买状态
  53. local function BusOneBuy_SetBuyStatus(human, nID, nValue)
  54. human.db.absAct[BUSONEBUYABSID].tBuyInfo[nID].nStatus = nValue
  55. end
  56. -----------------------------------客户端请求-----------------------------
  57. function BusOneBuy_Query(human)
  58. BusOneBuy_CheckAndResetDB(human)
  59. local tMsgData = Msg.gc.GC_NEW_BUSONEACT_BUY_QUERY
  60. tMsgData.tList[0] = 0
  61. for nID, v in ipairs(tBuyConf) do
  62. tMsgData.tList[0] = tMsgData.tList[0] + 1
  63. local tData = tMsgData.tList[tMsgData.tList[0]]
  64. tData.nID = nID
  65. tData.nStatus = BusOneBuy_GetBuyStatus(human, nID)
  66. tData.nNowBuyNum = BusOneBuy_GetBuyNum(human, nID)
  67. tData.nBuyNum = v.nBuyNum
  68. tData.nType = v.nType
  69. BuyLogic.fontBuyItem(human, tData.tBuyItem, v.nBuyID)
  70. if v.nBuyID == 0 then
  71. tData.tBuyItem.cost = v.nPrize
  72. end
  73. tData.tPrize[0] = #v.tPrize
  74. for i, tItem in ipairs(v.tPrize) do
  75. Grid.makeItem(tData.tPrize[i], tItem[1], tItem[2])
  76. end
  77. end
  78. Msg.send(tMsgData, human.fd)
  79. end
  80. function BusOneBuy_Buy(human, nID)
  81. local tConf = tBuyConf[nID]
  82. if not tConf then
  83. print("[BusOneBuy_Buy] 不存在对应的配置 返回 nID = "..nID)
  84. return
  85. end
  86. if tConf.nType == BUSONEBUY_TYPE_MONEY then
  87. print("[BusOneBuy_Buy] 配置对应的类型不正确 返回 nID = "..nID.." nType = "..tConf.nType)
  88. return
  89. end
  90. local nNowBuyNum = BusOneBuy_GetBuyNum(human, nID)
  91. if nNowBuyNum >= tConf.nBuyNum then
  92. print("[BusOneBuy_Buy] 当前购买的次数大于可购买的次数 返回 nID = "..nID.." nType = "
  93. ..tConf.nType.." nNowBuyNum = "..nNowBuyNum)
  94. return
  95. end
  96. if not ObjHuman.checkRMB(human, tConf.nPrize) then
  97. print("[BusOneBuy_Buy] 当前购买的金币不足 返回 nID = "..nID.." nType = "
  98. ..tConf.nType.." nNowBuyNum = "..nNowBuyNum)
  99. return
  100. end
  101. -- 扣消耗
  102. ObjHuman.decZuanshi(human, -tConf.nPrize, "BusOneBuy")
  103. BusOneBuy_SetBuyNum(human, nID, 1)
  104. -- BusOneBuy_SetBuyStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_CANGET)
  105. BagLogic.addItemList(human, tConf.tPrize, "BusOneBuy")
  106. BusOneBuy_Query(human)
  107. end
  108. function BusOneBuy_Get(human)
  109. local tItem = {}
  110. for nID, v in pairs(tBuyConf) do
  111. local nStatus = BusOneBuy_GetBuyStatus(human, nID)
  112. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nStatus then
  113. for i, tData in ipairs(v.tPrize) do
  114. if not tItem[tData[1]] then
  115. tItem[tData[1]] = 0
  116. end
  117. tItem[tData[1]] = tItem[tData[1]] + tData[2]
  118. end
  119. local nNowBuyNum = BusOneBuy_GetBuyNum(human, nID)
  120. if nNowBuyNum >= v.nBuyNum then
  121. BusOneBuy_SetBuyStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_GET)
  122. else
  123. BusOneBuy_SetBuyStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_NOGET)
  124. end
  125. end
  126. end
  127. if nil ~= _G.next(tItem) then
  128. local tPrize = {}
  129. for nID, nNum in pairs(tItem) do
  130. table.insert(tPrize, {nID, nNum})
  131. end
  132. BagLogic.addItemList(human, tPrize, "BusOneBuy")
  133. BusOneBuy_Query(human)
  134. BusOneActivityTask.BusOneTask_SendRed(human)
  135. end
  136. end
  137. -----------------------------------外部调用-----------------------------
  138. function isOpen(human, YYInfo, funcConfig)
  139. print("[BusOneActivityBuy_isOpen] 进入判断")
  140. local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig and funcConfig.funcID or BUSONEBUYABSID)
  141. if not state then
  142. print("[BusOneActivityBuy_isOpen] 当前活动未开启")
  143. return
  144. end
  145. print("[BusOneActivityBuy_isOpen] 进入判断 endTime = "..endTime.." startTime = "..startTime)
  146. return true, endTime, startTime
  147. end
  148. function isActive(human, YYInfo, funcConfig)
  149. return not isOpen(human, YYInfo, funcConfig)
  150. end
  151. function isRed(human, YYInfo, absActConfig)
  152. BusOneBuy_CheckAndResetDB(human)
  153. for nID, v in pairs(tBuyConf) do
  154. local nStatus = BusOneBuy_GetBuyStatus(human, nID)
  155. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nStatus then
  156. return true
  157. end
  158. end
  159. return false
  160. end
  161. function onCharge(human, price, funcID, buyID)
  162. print("[BusOneActivityBuy_onCharge] 进入购买 buyID = "..buyID)
  163. local bRed = false
  164. for nID, v in pairs(tBuyConf) do
  165. if buyID == v.nBuyID then
  166. local nStatus = BusOneBuy_GetBuyStatus(human, nID)
  167. if nStatus == CommonDefine.COMMON_PRIZE_STATE_NOGET then
  168. BusOneBuy_SetBuyStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_CANGET)
  169. BusOneBuy_SetBuyNum(human, nID, 1)
  170. bRed = true
  171. end
  172. end
  173. end
  174. if true == bRed then
  175. print("[BusOneActivityBuy_onCharge] 进入发送数据 buyID = "..buyID)
  176. BusOneBuy_Get(human)
  177. BusOneActivityTask.BusOneTask_SendRed(human)
  178. end
  179. end