OpenSeverRecharge.lua 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. OpenSeverRecharge = {}
  2. OpenSeverRecharge.__index = OpenSeverRecharge
  3. local function _rechargeType()
  4. return "12"
  5. end
  6. local function _playerDbKey()
  7. return "T$open_sever_continuous_recharge"
  8. end
  9. function OpenSeverRecharge.get(actor)
  10. local obj = getplaydef(actor, _playerDbKey())
  11. return setmetatable(obj or {}, OpenSeverRecharge)
  12. end
  13. function OpenSeverRecharge:save(actor)
  14. setplaydef(actor, _playerDbKey(), self)
  15. end
  16. function OpenSeverRecharge:next()
  17. for i = 2, table.count(self.data), 1 do
  18. local before = self.data[i - 1]
  19. local next = self.data[i]
  20. if before.state == 3 and next then
  21. next.canUpdate = true
  22. end
  23. end
  24. end
  25. function OpenSeverRecharge.rechargeEvent(actor, cfg, count, amount, ext, outRewards)
  26. --[[ TODO 策划说活动没开始也要累计 ]]
  27. --local openCondition = ConfigDataManager.getTableValue("sub_mainRecharge", "showcondition", "id", "9")
  28. --if not ConditionManager.Check(actor, openCondition) then
  29. -- return
  30. --end
  31. local osr = OpenSeverRecharge.get(actor)
  32. if osr.data then
  33. local update = false
  34. for k, v in pairs(osr.data) do
  35. if v.canUpdate and v.state == 2 then
  36. v.count = v.count + amount
  37. if v.count >= v.goal then
  38. v.state = 1
  39. update = true
  40. end
  41. end
  42. end
  43. osr.totalMoney = osr.totalMoney + amount
  44. osr:save(actor)
  45. if update then
  46. OpenSeverRecharge.sendPanel(actor, _rechargeType(), "panel")
  47. end
  48. end
  49. end
  50. function OpenSeverRecharge.reqAction(actor, type, action, reqParameter)
  51. if action == "panel" then
  52. OpenSeverRecharge.sendPanel(actor, type, action)
  53. elseif action == "reward" then
  54. OpenSeverRecharge.gainReward(actor, reqParameter)
  55. end
  56. end
  57. function OpenSeverRecharge.gainReward(actor, reqParameter)
  58. local openCondition = ConfigDataManager.getTableValue("sub_mainRecharge", "showcondition", "id", "9")
  59. if not ConditionManager.Check(actor, openCondition) then
  60. return
  61. end
  62. local id = tonumber(reqParameter["id"])
  63. local osr = OpenSeverRecharge.get(actor)
  64. local carreer = getbaseinfo(actor, "getbasecareer")
  65. local task = osr.data[id]
  66. if task == nil then
  67. tipinfo(actor, "找不到该任务")
  68. return
  69. end
  70. if task.state ~= 1 then
  71. tipinfo(actor, "该任务未完成")
  72. return
  73. end
  74. task.state = 3
  75. osr:save(actor)
  76. --发奖励
  77. local rewardstr = ConfigDataManager.getTableValue("cfg_newServerGIft", "reward", "id", task.id)
  78. local rewards = string.toIntIntMap4Career(carreer, rewardstr, "#", "|")
  79. -- 发送奖励
  80. additemmaptobag(actor, rewards, 0, 9999, "开服连充")
  81. --奖励面板
  82. sendluamsg(actor, LuaMessageIdToClient.COMMON_REWARD_PANEL, rewards)
  83. OpenSeverRecharge.sendPanel(actor, _rechargeType(), "panel")
  84. end
  85. function OpenSeverRecharge.sendPanel(actor, type, action)
  86. local osr = OpenSeverRecharge.get(actor)
  87. if table.isNullOrEmpty(osr.data) then
  88. osr = OpenSeverRecharge.init(actor)
  89. end
  90. local openCondition = ConfigDataManager.getTableValue("sub_mainRecharge", "showcondition", "id", "9")
  91. if not ConditionManager.Check(actor, openCondition) then
  92. return
  93. end
  94. local res = {}
  95. res.data = {}
  96. for _, v in ipairs(osr.data) do
  97. table.insert(res.data, { id = v.id, state = v.state })
  98. end
  99. res.totalMoney = osr.totalMoney
  100. if not table.isNullOrEmpty(res.data) then
  101. jprint("开服连充任务面板", actor, res)
  102. Recharge.resAction(actor, type, action, res)
  103. end
  104. end
  105. function OpenSeverRecharge.init(actor)
  106. local osr = OpenSeverRecharge.get(actor)
  107. local data = {}
  108. local list = ConfigDataManager.getList("cfg_newServerGIft")
  109. for _, cfg in pairs(list) do
  110. if ConditionManager.Check(actor, cfg.condition) then
  111. -- 任务项
  112. local task = {}
  113. task.id = cfg.id
  114. task.state = 2
  115. task.count = 0
  116. task.goal = tonumber(cfg.needrecharge)
  117. task.canUpdate = cfg.id == "1" and true or false
  118. data[tonumber(cfg.id)] = task
  119. end
  120. end
  121. osr.data = data
  122. osr.totalMoney = 0
  123. osr.updateTime = getbaseinfo("nowsec")
  124. osr:save(actor)
  125. return osr
  126. end
  127. function OpenSeverRecharge.zeroCheckRewards(actor)
  128. local osr = OpenSeverRecharge.get(actor)
  129. local reward_items = {}
  130. local mailId = 0
  131. local carreer = getbaseinfo(actor, "getbasecareer")
  132. for index, task in pairs(osr.data) do
  133. if task.state == 1 then
  134. local cfg = ConfigDataManager.getById("cfg_newServerGIft", task.id)
  135. string.putIntIntMap4Career(reward_items, carreer, cfg.reward, "#", "|")
  136. mailId = cfg.mail
  137. task.state = 3
  138. end
  139. end
  140. osr:save(actor)
  141. if not table.isNullOrEmpty(reward_items) and mailId ~= 0 then
  142. sendconfigmailbyrid(actor, actor:toString(), mailId, reward_items, "", 1)
  143. end
  144. end
  145. function OpenSeverRecharge.zero(actor)
  146. local now = getbaseinfo("nowsec")
  147. local osr = OpenSeverRecharge.get(actor)
  148. if table.isNullOrEmpty(osr.data) then
  149. osr = OpenSeverRecharge.init(actor)
  150. end
  151. if not TimeUtil.isSameDay(now, osr.updateTime) then
  152. info("开服连充0点刷新", "玩家", actor)
  153. OpenSeverRecharge.zeroCheckRewards(actor)
  154. OpenSeverRecharge.refresh(actor, now)
  155. end
  156. -- OpenSeverRecharge.dataCheck(actor)
  157. OpenSeverRecharge.sendPanel(actor, _rechargeType(), "panel")
  158. end
  159. function OpenSeverRecharge.refresh(actor, now)
  160. local osr = OpenSeverRecharge.get(actor)
  161. osr.totalMoney = 0
  162. osr.updateTime = now
  163. osr:next()
  164. osr:save(actor)
  165. end
  166. function OpenSeverRecharge.login(actor)
  167. -- OpenSeverRecharge.sendPanel(actor, _rechargeType(), "panel")
  168. OpenSeverRecharge.zero(actor)
  169. end
  170. -- 临时处理后面删除 数据没刷新提前充钱了
  171. function OpenSeverRecharge.dataCheck(actor)
  172. local osr = OpenSeverRecharge.get(actor)
  173. local rechargeRecord = RechargeRecord.get(actor)
  174. local dailyRecharge = rechargeRecord:totalDailyMoney()
  175. if osr.data then
  176. local update = false
  177. for k, v in pairs(osr.data) do
  178. if v.canUpdate and v.state == 2 then
  179. if dailyRecharge >= v.goal then
  180. v.state = 1
  181. v.count = v.goal
  182. update = true
  183. end
  184. end
  185. end
  186. if osr.totalMoney == 0 then
  187. osr.totalMoney = dailyRecharge
  188. update = true
  189. end
  190. if update then
  191. osr:save(actor)
  192. end
  193. end
  194. end
  195. -- 注册请求消息监听
  196. EventListerTable.registerType("开服连充", _rechargeType(), _playerDbKey)
  197. ZeroEventListerTable:eventLister("0", "开服连充", OpenSeverRecharge.zero)
  198. LoginEventListerTable:eventLister("0", "开服连充", OpenSeverRecharge.login)
  199. RechargeMessageEventListerTable:eventLister(_rechargeType(), "开服连充", OpenSeverRecharge.reqAction)
  200. RechargeEventListerTable:eventLister("0", "开服连充", OpenSeverRecharge.rechargeEvent)