RechargeStall.lua 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. --- 充值挡位功能
  2. --- Generated by EmmyLua(https://github.com/EmmyLua)
  3. --- Created by 無心道(15388152619).
  4. --- DateTime: 2024/11/4 19:16
  5. RechargeStall = {}
  6. RechargeStall.__index = RechargeStall
  7. local this = {}
  8. local function _rechargeType()
  9. return "1"
  10. end
  11. local function _playerDbKey()
  12. return "T$recharge_stall_first_data"
  13. end
  14. function RechargeStall.get(actor)
  15. local obj = getplaydef(actor, _playerDbKey())
  16. return setmetatable(obj or {}, RechargeStall)
  17. end
  18. function RechargeStall:save(actor)
  19. setplaydef(actor, _playerDbKey(), self);
  20. end
  21. ---获取某一个挡位信息
  22. function RechargeStall:stallData(cfgId)
  23. local var = self[cfgId]
  24. if not var then
  25. var = {}
  26. self[cfgId] = var;
  27. end
  28. return var
  29. end
  30. ---获取当前挡位充值次数
  31. function RechargeStall:rechargeTime(cfgId, nowSec)
  32. local data = self:stallData(cfgId)
  33. if nowSec then
  34. data.rtime = nowSec
  35. end
  36. return data.rtime or 0
  37. end
  38. ---充值事件触发
  39. function RechargeStall.rechargeEvent(actor, cfg_recharge, count, amount, ext, outRewards)
  40. local stallId = cfg_recharge.parameter
  41. local cfg_recharge_gear = ConfigDataManager.getById("cfg_recharge_gear", stallId)
  42. gameDebug.assertTrue(table.notNullOrEmpty(cfg_recharge_gear), "没有配置充值档位", stallId)
  43. local stallData = RechargeStall.get(actor)
  44. --起始时间,结束时间 是否是第一轮
  45. local startDayTime, endDayTime, firstGroup = this.recordTimes(actor)
  46. local cfgId = cfg_recharge_gear["id"]
  47. local rechargeTime = RechargeStall.rechargeTime(stallData, cfgId)
  48. --职业
  49. if rechargeTime < startDayTime or endDayTime < rechargeTime then
  50. local career = getbaseinfo(actor, "getbasecareer")
  51. -- 拥有首充额外奖励
  52. local reward_var = cfg_recharge_gear['firstreward']
  53. if firstGroup == false then
  54. reward_var = cfg_recharge_gear['resetreward']
  55. end
  56. string.putIntIntMap4Career(outRewards, career, reward_var, "#", "|")
  57. local nowSec = getbaseinfo("nowsec")
  58. stallData:rechargeTime(cfgId, nowSec)
  59. stallData:save(actor)
  60. end
  61. info(actor, "充值挡位", actor, cfgId, "奖励", outRewards)
  62. RechargeStall.sendPanel(actor, stallData)
  63. end
  64. function RechargeStall.reqAction(actor, type, action, reqParameter)
  65. if action == "panel" then
  66. local stallData = RechargeStall.get(actor)
  67. RechargeStall.sendPanel(actor, stallData)
  68. end
  69. end
  70. --- 请求充值档位信息
  71. ---@param reqParameter table 请求参数
  72. function RechargeStall.sendPanel(actor, stallData)
  73. local recharges = ConfigDataManager.getTable("cfg_recharge_gear")
  74. gameDebug.assertTrue(table.notNullOrEmpty(recharges), "没有配置充值档位")
  75. stallData = stallData or RechargeStall.get(actor)
  76. --起始时间,结束时间 是否是第一轮
  77. local startDayTime, endDayTime, firstGroup = this.recordTimes(actor)
  78. local stallList = {}
  79. for _, cfg in ipairs(recharges) do
  80. local info = {}
  81. local cfgId = cfg["id"]
  82. info.rechargeId = tonumber(cfgId)
  83. local rechargeTime = RechargeStall.rechargeTime(stallData, cfgId)
  84. if string.isNullOrEmpty(cfg["firstreward"]) then
  85. info.isShowFirst = false --没有配置首充奖励所以不需要展示
  86. info.isRewardFirst = false --没有配置首充奖励所以不需要展示
  87. else
  88. info.isShowFirst = rechargeTime < startDayTime or endDayTime < rechargeTime --true 表示要展示首充奖励
  89. info.isRewardFirst = firstGroup -- true 表示开服时间第一个周期内
  90. end
  91. table.insert(stallList, info)
  92. end
  93. --this:print("充值档位回包内容", rechargeStallInfo)
  94. local data = {}
  95. data["list"] = stallList
  96. data["endDayTime"] = endDayTime
  97. Recharge.resAction(actor, _rechargeType(), "panel", data)
  98. end
  99. -- 获取当前获取的开启和结束时间
  100. function this.recordTimes(actor)
  101. local recharges = ConfigDataManager.getTable("cfg_recharge_gear")
  102. local nowSec = getbaseinfo("nowsec")
  103. -- 开服天数
  104. local serverOpenDays = getbaseinfo(actor, "serveropendays")
  105. --通过开服时间计算当前最大购买次数
  106. local resetDay = tonumber(recharges[1]["resettime"])
  107. local maxFirstCount = math.ceil(serverOpenDays / resetDay)
  108. --计算到本轮结束还有多少天
  109. local endDay = maxFirstCount * resetDay - serverOpenDays + 1;
  110. local nowStartSec = TimeUtil.creteTimeDayStart4Sec(nowSec)
  111. --计算出结束时间
  112. local endDayTime = TimeUtil.addDay(nowStartSec, endDay) - 1
  113. --往前推计算出开始时间
  114. local startDayTime = TimeUtil.creteTimeDayStart4Sec(TimeUtil.addDay(endDayTime, -(resetDay - 1)))
  115. --获取开始时间那一天的00:00:00
  116. startDayTime = TimeUtil.creteTimeDayStart4Sec(startDayTime)
  117. print("充值首充判定", TimeUtil.timeFormat(startDayTime), TimeUtil.timeFormat(nowSec), TimeUtil.timeFormat(endDayTime),
  118. "openday", serverOpenDays, maxFirstCount,
  119. endDay, endDay
  120. )
  121. return startDayTime, endDayTime, serverOpenDays <= resetDay
  122. end
  123. --TODO 一定要放到文件最后
  124. EventListerTable.registerType("充值挡位", _rechargeType(), _playerDbKey())
  125. -- 注册事件
  126. RechargeEventListerTable:eventLister(_rechargeType(), "充值挡位", RechargeStall.rechargeEvent)
  127. -- 注册请求消息监听
  128. RechargeMessageEventListerTable:eventLister(_rechargeType(), "充值挡位", RechargeStall.reqAction)
  129. -- todo放到最后
  130. return RechargeStall