DailyRecharge.lua 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. DailyRecharge = {}
  2. DailyRecharge.__index = DailyRecharge
  3. local function _rechargeType()
  4. return "11"
  5. end
  6. local function _playerDbKey()
  7. return "T$daily_recharge"
  8. end
  9. function DailyRecharge.get(actor)
  10. local obj = getplaydef(actor, _playerDbKey())
  11. return setmetatable(obj or {}, DailyRecharge)
  12. end
  13. function DailyRecharge:save(actor)
  14. setplaydef(actor, _playerDbKey(), self)
  15. end
  16. function DailyRecharge.rechargeEvent(actor, cfg, count, amount, ext, outRewards)
  17. local dailyRecharge = DailyRecharge.get(actor)
  18. local update = false
  19. for _, task in pairs(dailyRecharge.data) do
  20. local goal = ConfigDataManager.getTableValue("cfg_dailyRecharge", "goal", "id", task.id)
  21. local rechargeRecord = RechargeRecord.get(actor)
  22. if task.state == 2 and rechargeRecord:totalDailyMoney() >= tonumber(goal) then
  23. task.state = 1
  24. update = true
  25. end
  26. end
  27. if update then
  28. dailyRecharge:save(actor)
  29. DailyRecharge.sendPanel(actor, _rechargeType(), "panel")
  30. end
  31. end
  32. function DailyRecharge.reqAction(actor, type, action, reqParameter)
  33. if action == "panel" then
  34. DailyRecharge.sendPanel(actor, type, action)
  35. elseif action == "reward" then
  36. DailyRecharge.gainReward(actor, reqParameter)
  37. end
  38. end
  39. function DailyRecharge.gainReward(actor, reqParameter)
  40. local id = tostring(reqParameter["id"])
  41. local dailyRecharge = DailyRecharge.get(actor)
  42. local task = dailyRecharge.data[id]
  43. if task == nil then
  44. tipinfo(actor, "找不到该任务")
  45. return
  46. end
  47. if task.state ~= 1 then
  48. tipinfo(actor, "该任务未完成")
  49. return
  50. end
  51. task.state = 3
  52. dailyRecharge:save(actor)
  53. --发奖励
  54. local rewardstr = ConfigDataManager.getTableValue("cfg_dailyRecharge", "reward", "id", task.id)
  55. local rewards = string.toStringIntMap(rewardstr, "#", "|")
  56. -- 发送奖励
  57. additemmaptobag(actor, rewards, 0, 9999, "每日累充")
  58. --奖励面板
  59. sendluamsg(actor, LuaMessageIdToClient.COMMON_REWARD_PANEL, rewards)
  60. DailyRecharge.sendPanel(actor, _rechargeType(), "panel")
  61. end
  62. function DailyRecharge.sendPanel(actor, type, action)
  63. local data = {}
  64. local dailyRecharge = DailyRecharge.get(actor)
  65. if table.isNullOrEmpty(dailyRecharge.data) then
  66. dailyRecharge = DailyRecharge.refreshData(actor)
  67. end
  68. for _, v in pairs(dailyRecharge.data) do
  69. table.insert(data, { dailyRechargeId = v.id, giftState = v.state })
  70. end
  71. if not table.isNullOrEmpty(data) then
  72. jprint("每日累充任务面板", data)
  73. Recharge.resAction(actor, type, action, data)
  74. end
  75. end
  76. function DailyRecharge.zeroCheckRewards(actor)
  77. local dailyRecharge = DailyRecharge.get(actor)
  78. local reward_items = {}
  79. local mailId = 0
  80. if dailyRecharge.data then
  81. for _, task in pairs(dailyRecharge.data) do
  82. if task.state == 1 then
  83. local cfg = ConfigDataManager.getById("cfg_dailyRecharge", task.id)
  84. string.putIntIntMap(reward_items, cfg.reward, "#", "|")
  85. mailId = cfg.mail
  86. end
  87. end
  88. end
  89. if not table.isNullOrEmpty(reward_items) and mailId ~= 0 then
  90. sendconfigmailbyrid(actor, actor:toString(), mailId, reward_items, "", 1)
  91. end
  92. end
  93. function DailyRecharge.refreshData(actor)
  94. local dailyRecharge = DailyRecharge.get(actor)
  95. local data = {}
  96. local list = ConfigDataManager.getList("cfg_dailyRecharge")
  97. for _, cfg in pairs(list) do
  98. if ConditionManager.Check(actor, cfg.condition) then
  99. -- 充值项
  100. local task = {}
  101. task.id = cfg.id
  102. task.state = tonumber(cfg.goal) == 0 and 1 or 2
  103. data[cfg.id] = task
  104. end
  105. end
  106. dailyRecharge.data = data
  107. dailyRecharge.updateTime = getbaseinfo("nowsec")
  108. dailyRecharge:save(actor)
  109. return dailyRecharge
  110. end
  111. function DailyRecharge.zero(actor)
  112. local now = getbaseinfo("nowsec")
  113. local dailyRecharge = DailyRecharge.get(actor)
  114. if table.isNullOrEmpty(dailyRecharge.data) then
  115. dailyRecharge = DailyRecharge.refreshData(actor)
  116. end
  117. -- 线上数据未初始化
  118. dailyRecharge.updateTime = dailyRecharge.updateTime and dailyRecharge.updateTime or 0
  119. if not TimeUtil.isSameDay(now, dailyRecharge.updateTime) then
  120. info("每日累充0点刷新", "玩家", actor)
  121. DailyRecharge.zeroCheckRewards(actor)
  122. DailyRecharge.refreshData(actor)
  123. end
  124. -- DailyRecharge.dataCheck(actor)
  125. DailyRecharge.sendPanel(actor, _rechargeType(), "panel")
  126. end
  127. function DailyRecharge.login(actor)
  128. -- DailyRecharge.sendPanel(actor, _rechargeType(), "panel")
  129. DailyRecharge.zero(actor)
  130. end
  131. -- 临时处理后面删除 数据没刷新提前充钱了
  132. function DailyRecharge.dataCheck(actor)
  133. local dailyRecharge = DailyRecharge.get(actor)
  134. local update = false
  135. if dailyRecharge.data then
  136. for _, task in pairs(dailyRecharge.data) do
  137. local goal = ConfigDataManager.getTableValue("cfg_dailyRecharge", "goal", "id", task.id)
  138. local rechargeRecord = RechargeRecord.get(actor)
  139. if task.state == 2 and rechargeRecord:totalDailyMoney() >= tonumber(goal) then
  140. task.state = 1
  141. update = true
  142. end
  143. end
  144. end
  145. if update then
  146. dailyRecharge:save(actor)
  147. end
  148. end
  149. -- 注册请求消息监听
  150. EventListerTable.registerType("每日累充", _rechargeType(), _playerDbKey)
  151. ZeroEventListerTable:eventLister("0", "每日累充", DailyRecharge.zero)
  152. LoginEventListerTable:eventLister("0", "每日累充", DailyRecharge.login)
  153. RechargeMessageEventListerTable:eventLister(_rechargeType(), "每日累充", DailyRecharge.reqAction)
  154. RechargeEventListerTable:eventLister("0", "每日累充", DailyRecharge.rechargeEvent)