ServerCommerceActCharge.lua 8.0 KB

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