OpenSeverRecharge.lua 7.0 KB

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