ServerCommerceActCharge.lua 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. --------------------------------
  2. -- 文件名 : ServerCommerceActCharge.lua
  3. -- 文件说明 : 跨服商业-连充豪礼
  4. -- 创建时间 : 2025/03/31
  5. -- 创建人 : FC
  6. --------------------------------
  7. local Util = require("common.Util")
  8. local Msg = require("core.Msg")
  9. local Grid = require("bag.Grid")
  10. local BagLogic = require("bag.BagLogic")
  11. local CommonDefine = require("common.CommonDefine")
  12. local ServerCommerceConf = require("excel.ServerCommerce")
  13. local ServerCommerceManager = require("serverCommerce.ServerCommerceManager")
  14. ----------------------------------------- 内部处理开始 -------------------------------------
  15. -- 获取配置
  16. local function CommerceActCharge_GetCof()
  17. return ServerCommerceConf.CommerceCharge
  18. end
  19. -- 初始化DB数据()
  20. function CreatDB(human)
  21. if not human.db.ServerCommerce or not human.db.ServerCommerce.Charge then
  22. print("[CommerceActCharge_CreatDB] 初始化数据失败 name = "..human.db.name)
  23. return false
  24. end
  25. local tConf = CommerceActCharge_GetCof()
  26. for _, v in ipairs(tConf) do
  27. if not human.db.ServerCommerce.Charge[v.nMoney] then
  28. human.db.ServerCommerce.Charge[v.nMoney] = {}
  29. end
  30. if not human.db.ServerCommerce.Charge[v.nMoney][v.nDay] then
  31. human.db.ServerCommerce.Charge[v.nMoney][v.nDay] = {
  32. nBuyTime = 0,
  33. nStatus = CommonDefine.COMMON_PRIZE_STATE_NOGET,
  34. nAllMoney = 0,
  35. }
  36. else
  37. print("[CommerceActCharge_CreateDB] 配置了重复的数据")
  38. return false
  39. end
  40. end
  41. return true
  42. end
  43. -- 获取天数数据
  44. local function CommerceActCharge_GetDBByDay(human, nMoney, nDay)
  45. if not human.db.ServerCommerce.Charge[nMoney] then
  46. return nil
  47. end
  48. if not human.db.ServerCommerce.Charge[nMoney][nDay] then
  49. return nil
  50. end
  51. return human.db.ServerCommerce.Charge[nMoney][nDay]
  52. end
  53. -- 获取金钱对应数据
  54. local function CommerceActCharge_GetDBByMoney(human, nMoney)
  55. if not human.db.ServerCommerce.Charge[nMoney] then
  56. return nil
  57. end
  58. return human.db.ServerCommerce.Charge[nMoney]
  59. end
  60. -- 设置天数数据
  61. local function CommerceActCharge_SetDBByDay(human, nMoney, nDay, nTime)
  62. human.db.ServerCommerce.Charge[nMoney][nDay].nBuyTime = nTime
  63. end
  64. -- 设置奖励状态
  65. local function CommerceActCharge_SetDBPrizeByDay(human, nMoney, nDay, nStatus)
  66. human.db.ServerCommerce.Charge[nMoney][nDay].nStatus = nStatus
  67. end
  68. -- 设置天数数据
  69. local function CommerceActCharge_SetDBAllMoneyByDay(human, nMoney, nDay, nAddMoney)
  70. human.db.ServerCommerce.Charge[nMoney][nDay].nAllMoney = human.db.ServerCommerce.Charge[nMoney][nDay].nAllMoney + nAddMoney
  71. end
  72. ----------------------------------------- 客户端请求处理开始 -------------------------------------
  73. -- 请求数据
  74. function CommerceActCharge_Query(human, nMoney)
  75. local tConf = CommerceActCharge_GetCof()
  76. local tMsgData = Msg.gc.GC_SERVEERCOMMERCE_ACT_CHARGEQUERY
  77. tMsgData.nMoney = nMoney
  78. local nChargeDay, nLen = 0, 0
  79. for nID, v in ipairs(tConf) do
  80. if v.nMoney == nMoney then
  81. local tDayData = CommerceActCharge_GetDBByDay(human, nMoney, v.nDay)
  82. if nil == tDayData then
  83. print("[CommerceActCharge_Query] 不存在对应的数据")
  84. else
  85. nChargeDay = tDayData.nBuyTime ~= 0 and nChargeDay + 1 or nChargeDay
  86. nLen = nLen + 1
  87. tMsgData.list[0] = nLen
  88. local tPrizeData = tMsgData.list[nLen]
  89. tPrizeData.nID = nID
  90. tPrizeData.nState = tDayData.nStatus
  91. tPrizeData.nDay = v.nDay
  92. tPrizeData.nAllMoney = tDayData.nAllMoney
  93. tPrizeData.item[0] = #v.Prize
  94. for nIndex, tItem in ipairs(v.Prize) do
  95. local nGoodsID = tItem[1]
  96. local nGoodsNum = tItem[2]
  97. Grid.makeItem(tPrizeData.item[nIndex], nGoodsID, nGoodsNum)
  98. end
  99. end
  100. end
  101. end
  102. tMsgData.nChargeDay = nChargeDay
  103. Msg.send(tMsgData, human.fd)
  104. end
  105. -- 请求领取奖励
  106. function CommerceActCharge_GetPrize(human, nMoney)
  107. local tConf = CommerceActCharge_GetCof()
  108. local tItem = {}
  109. for nID, v in ipairs(tConf) do
  110. if v.nMoney == nMoney then
  111. local tDayData = CommerceActCharge_GetDBByDay(human, nMoney, v.nDay)
  112. if tDayData then
  113. if CommonDefine.COMMON_PRIZE_STATE_CANGET == tDayData.nState then
  114. CommerceActCharge_SetDBPrizeByDay(human, nMoney, v.nDay, CommonDefine.COMMON_PRIZE_STATE_GET)
  115. for _, tPrize in ipairs(v.Prize) do
  116. if not tItem[tPrize[1]] then
  117. tItem[tPrize[1]] = 0
  118. end
  119. tItem[tPrize[1]] = tItem[tPrize[1]] + tPrize[2]
  120. end
  121. end
  122. end
  123. end
  124. end
  125. local tPrize = {}
  126. for nID, nNum in pairs(tItem) do
  127. table.insert(tPrize, {nID, nNum})
  128. end
  129. BagLogic.addItemList(human, tPrize, "servercommerce")
  130. CommerceActCharge_Query(human, nMoney)
  131. end
  132. ----------------------------------------- 外部调用 -------------------------------------
  133. function isRed(human)
  134. if not human.db.ServerCommerce or not human.db.ServerCommerce.Charge then
  135. return false
  136. end
  137. local tConf = CommerceActCharge_GetCof()
  138. for _, v in ipairs(tConf) do
  139. local tDayData = CommerceActCharge_GetDBByDay(human, v.nMoney, v.nDay)
  140. if tDayData and tDayData.nStatus == CommonDefine.COMMON_PRIZE_STATE_CANGET then
  141. return true
  142. end
  143. end
  144. return false
  145. end
  146. function onCharge(human, price, funcID, buyID)
  147. local tConf = CommerceActCharge_GetCof()
  148. local nNowTime = os.time()
  149. local bQuery = false
  150. for _, v in ipairs(tConf) do
  151. local nDay = v.nDay
  152. local tDayData = CommerceActCharge_GetDBByDay(human, v.nMoney, nDay)
  153. if v.nMoney == price then
  154. if tDayData then
  155. if tDayData.nBuyTime == 0 then
  156. CommerceActCharge_SetDBByDay(human, v.nMoney, nDay, nNowTime)
  157. CommerceActCharge_SetDBPrizeByDay(human, v.nMoney, nDay, CommonDefine.COMMON_PRIZE_STATE_CANGET)
  158. bQuery = true
  159. break
  160. else
  161. if true == Util.isSameDayByTimes(tDayData.nBuyTime, nNowTime) then
  162. bQuery = true
  163. CommerceActCharge_SetDBAllMoneyByDay(human, v.nMoney, nDay, price)
  164. break
  165. end
  166. end
  167. else
  168. print("[onCharge] 跨服商业活动充值获取不到DB数据 name = "..human.db.name.." price = "..price)
  169. end
  170. end
  171. if tDayData and true == Util.isSameDayByTimes(tDayData.nBuyTime, nNowTime) then
  172. bQuery = true
  173. CommerceActCharge_SetDBAllMoneyByDay(human, v.nMoney, nDay, price)
  174. end
  175. end
  176. if true == bQuery then
  177. CommerceActCharge_Query(human, price)
  178. end
  179. end