BusOneActivityBuy.lua 7.6 KB

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