ServerCommerceActCharge.lua 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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. human.db.ServerCommerce.Charge =
  26. {
  27. nChargeTime = 0,
  28. tPrizeData = {}
  29. }
  30. local tPrizeData = human.db.ServerCommerce.Charge.tPrizeData
  31. local tConf = CommerceActCharge_GetCof()
  32. for _, v in ipairs(tConf) do
  33. if not tPrizeData[v.nDay] then
  34. tPrizeData[v.nDay] = {
  35. nChargeMoney = 0,
  36. tMoney = {}
  37. }
  38. end
  39. local tNodeData = tPrizeData[v.nDay].tMoney
  40. if not tNodeData[v.nMoney] then
  41. tNodeData[v.nMoney] = CommonDefine.COMMON_PRIZE_STATE_NOGET
  42. else
  43. print("[CommerceActCharge_CreateDB] 配置了重复的数据")
  44. return false
  45. end
  46. end
  47. return true
  48. end
  49. -- 获取第一次充值的时间
  50. local function CommerceActCharge_GetChargeTime(human)
  51. return human.db.ServerCommerce.Charge.nChargeTime
  52. end
  53. -- 设置充值时间
  54. local function CommerceActCharge_SetChargeTime(human, nTime)
  55. human.db.ServerCommerce.Charge.nChargeTime = nTime
  56. end
  57. -- 获取DB奖励数据
  58. local function CommerceActCharge_GetDBPrizeData(human)
  59. return human.db.ServerCommerce.Charge.tPrizeData
  60. end
  61. -- 获取DB奖励状态
  62. local function CommerceActCharge_GetDBPrizeStatus(human, nDay, nMoney)
  63. local tPrizeData = CommerceActCharge_GetDBPrizeData(human)
  64. if not tPrizeData[nDay] or not tPrizeData[nDay].tMoney[nMoney] then
  65. return CommonDefine.COMMON_PRIZE_STATE_NOGET
  66. end
  67. return tPrizeData[nDay].tMoney[nMoney]
  68. end
  69. -- 设置DB奖励状态
  70. local function CommerceActCharge_SetDBPrizeStatus(human, nDay, nMoney, nStatus)
  71. local tPrizeData = CommerceActCharge_GetDBPrizeData(human)
  72. tPrizeData[nDay].tMoney[nMoney] = nStatus
  73. end
  74. -- 获取DB天数充值金额
  75. local function CommerceActCharge_GetDBDayCharge(human, nDay)
  76. local tPrizeData = CommerceActCharge_GetDBPrizeData(human)
  77. if not tPrizeData[nDay] then
  78. return 0
  79. end
  80. return tPrizeData[nDay].nChargeMoney
  81. end
  82. -- 设置DB天数充值金额
  83. local function CommerceActCharge_SetDBDayCharge(human, nDay, nMoney)
  84. local tPrizeData = CommerceActCharge_GetDBPrizeData(human)
  85. tPrizeData[nDay].nChargeMoney = tPrizeData[nDay].nChargeMoney + nMoney
  86. end
  87. ----------------------------------------- 客户端请求处理开始 -------------------------------------
  88. -- 请求数据
  89. function CommerceActCharge_Query(human, nMoney)
  90. local tConf = CommerceActCharge_GetCof()
  91. local tMsgData = Msg.gc.GC_SERVEERCOMMERCE_ACT_CHARGEQUERY
  92. tMsgData.nMoney = nMoney
  93. local nChargeDay, nLen = 0, 0
  94. for nID, v in ipairs(tConf) do
  95. if v.nMoney == nMoney then
  96. nLen = nLen + 1
  97. tMsgData.list[0] = nLen
  98. local tPrizeData = tMsgData.list[nLen]
  99. tPrizeData.nID = nID
  100. tPrizeData.nState = CommerceActCharge_GetDBPrizeStatus(human, v.nDay, nMoney)
  101. if tPrizeData.nState ~= CommonDefine.COMMON_PRIZE_STATE_NOGET then
  102. nChargeDay = nChargeDay + 1
  103. end
  104. tPrizeData.nDay = v.nDay
  105. tPrizeData.nAllMoney = CommerceActCharge_GetDBDayCharge(human, v.nDay)
  106. tPrizeData.item[0] = #v.Prize
  107. for nIndex, tItem in ipairs(v.Prize) do
  108. local nGoodsID = tItem[1]
  109. local nGoodsNum = tItem[2]
  110. Grid.makeItem(tPrizeData.item[nIndex], nGoodsID, nGoodsNum)
  111. end
  112. end
  113. end
  114. tMsgData.nChargeDay = nChargeDay
  115. Msg.send(tMsgData, human.fd)
  116. end
  117. -- 请求领取奖励
  118. function CommerceActCharge_GetPrize(human, nMoney)
  119. local tConf = CommerceActCharge_GetCof()
  120. local tItem = {}
  121. for nID, v in ipairs(tConf) do
  122. if v.nMoney == nMoney then
  123. local nState = CommerceActCharge_GetDBPrizeStatus(human, v.nDay, v.nMoney)
  124. if CommonDefine.COMMON_PRIZE_STATE_CANGET == nState then
  125. CommerceActCharge_SetDBPrizeStatus(human, v.nDay, nMoney, CommonDefine.COMMON_PRIZE_STATE_GET)
  126. for _, tPrize in ipairs(v.Prize) do
  127. if not tItem[tPrize[1]] then
  128. tItem[tPrize[1]] = 0
  129. end
  130. tItem[tPrize[1]] = tItem[tPrize[1]] + tPrize[2]
  131. end
  132. end
  133. end
  134. end
  135. local tPrize = {}
  136. for nID, nNum in pairs(tItem) do
  137. table.insert(tPrize, {nID, nNum})
  138. end
  139. BagLogic.addItemList(human, tPrize, "servercommerce")
  140. CommerceActCharge_Query(human, nMoney)
  141. end
  142. ----------------------------------------- 外部调用 -------------------------------------
  143. function isRed(human)
  144. if not human.db.ServerCommerce or not human.db.ServerCommerce.Charge then
  145. return false
  146. end
  147. local tConf = CommerceActCharge_GetCof()
  148. for _, v in ipairs(tConf) do
  149. local nState = CommerceActCharge_GetDBPrizeStatus(human, v.nDay, v.nMoney)
  150. if nState == CommonDefine.COMMON_PRIZE_STATE_CANGET then
  151. return true
  152. end
  153. end
  154. return false
  155. end
  156. function onCharge(human, price, funcID, buyID)
  157. local nBuyTime = CommerceActCharge_GetChargeTime(human)
  158. if 0 == nBuyTime then
  159. nBuyTime = os.time()
  160. CommerceActCharge_SetChargeTime(human, nBuyTime)
  161. end
  162. local nDiffDay = Util.diffDay(nBuyTime) + 1
  163. local tConf = CommerceActCharge_GetCof()
  164. local bQuery = false
  165. local nNewChareNum = CommerceActCharge_GetDBDayCharge(human, nDiffDay)
  166. nNewChareNum = nNewChareNum + price
  167. for _, v in ipairs(tConf) do
  168. if v.nDay == nDiffDay then
  169. local nStatus = CommerceActCharge_GetDBPrizeStatus(human, v.nDay, v.nMoney)
  170. if nStatus == CommonDefine.COMMON_PRIZE_STATE_NOGET and nNewChareNum >= v.nMoney then
  171. CommerceActCharge_SetDBPrizeStatus(human, v.nDay, v.nMoney, CommonDefine.COMMON_PRIZE_STATE_CANGET)
  172. bQuery = true
  173. end
  174. end
  175. end
  176. CommerceActCharge_SetDBDayCharge(human, nDiffDay, price)
  177. if true == bQuery then
  178. CommerceActCharge_Query(human, price)
  179. end
  180. end