BusOneActivityBuy.lua 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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, itemMul)
  110. itemMul = itemMul or 1
  111. local tItem = {}
  112. for nID, v in pairs(tBuyConf) do
  113. local nStatus = BusOneBuy_GetBuyStatus(human, nID)
  114. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nStatus then
  115. for i, tData in ipairs(v.tPrize) do
  116. if not tItem[tData[1]] then
  117. tItem[tData[1]] = 0
  118. end
  119. tItem[tData[1]] = tItem[tData[1]] + tData[2] * itemMul
  120. end
  121. local nNowBuyNum = BusOneBuy_GetBuyNum(human, nID)
  122. if nNowBuyNum >= v.nBuyNum then
  123. BusOneBuy_SetBuyStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_GET)
  124. else
  125. BusOneBuy_SetBuyStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_NOGET)
  126. end
  127. end
  128. end
  129. if nil ~= _G.next(tItem) then
  130. local tPrize = {}
  131. for nID, nNum in pairs(tItem) do
  132. table.insert(tPrize, {nID, nNum})
  133. end
  134. BagLogic.addItemList(human, tPrize, "BusOneBuy")
  135. BusOneBuy_Query(human)
  136. BusOneActivityTask.BusOneTask_SendRed(human)
  137. end
  138. end
  139. -----------------------------------外部调用-----------------------------
  140. function isOpen(human, YYInfo, funcConfig)
  141. -- print("[BusOneActivityBuy_isOpen] 进入判断")
  142. local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig and funcConfig.funcID or BUSONEBUYABSID)
  143. if not state then
  144. print("[BusOneActivityBuy_isOpen] 当前活动未开启")
  145. return
  146. end
  147. -- print("[BusOneActivityBuy_isOpen] 进入判断 endTime = "..endTime.." startTime = "..startTime)
  148. return true, endTime, startTime
  149. end
  150. function isActive(human, YYInfo, funcConfig)
  151. return not isOpen(human, YYInfo, funcConfig)
  152. end
  153. function isRed(human, YYInfo, absActConfig)
  154. BusOneBuy_CheckAndResetDB(human)
  155. for nID, v in pairs(tBuyConf) do
  156. local nStatus = BusOneBuy_GetBuyStatus(human, nID)
  157. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nStatus then
  158. return true
  159. end
  160. end
  161. return false
  162. end
  163. function onCharge(human, price, funcID, buyID, buyNum)
  164. -- print("[BusOneActivityBuy_onCharge] 进入购买 buyID = "..buyID)
  165. local bRed = false
  166. for nID, v in pairs(tBuyConf) do
  167. if buyID == v.nBuyID then
  168. local nStatus = BusOneBuy_GetBuyStatus(human, nID)
  169. if nStatus == CommonDefine.COMMON_PRIZE_STATE_NOGET then
  170. BusOneBuy_SetBuyStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_CANGET)
  171. -- BusOneBuy_SetBuyNum(human, nID, 1)
  172. BusOneBuy_SetBuyNum(human, nID, buyNum)
  173. bRed = true
  174. end
  175. end
  176. end
  177. if true == bRed then
  178. -- print("[BusOneActivityBuy_onCharge] 进入发送数据 buyID = "..buyID)
  179. BusOneBuy_Get(human, buyNum)
  180. YunYingLogic.sendBanner(human)
  181. BusOneActivityTask.BusOneTask_SendRed(human)
  182. end
  183. end
  184. function GetRemainNum(human, nBuyID)
  185. for nID, v in pairs(tBuyConf) do
  186. if nBuyID == v.nBuyID then
  187. local nBuyNum = BusOneBuy_GetBuyNum(human, nID)
  188. if v.nBuyNum > nBuyNum then
  189. -- return 1
  190. return v.nBuyNum - nBuyNum
  191. else
  192. return 0
  193. end
  194. end
  195. end
  196. return 0
  197. end