ActMonthlyGrow.lua 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. -- 活动 - 月卡
  2. ActMonthlyGrow = {}
  3. ActMonthlyGrow.__index = ActMonthlyGrow
  4. local function _rechargeType()
  5. return "2"
  6. end
  7. local function _playerDbKey()
  8. return "T$act_monthly_grow_data"
  9. end
  10. -- 领取每日登陆奖励
  11. function ActMonthlyGrow.dailyLoginAward(actor)
  12. local data = ActMonthlyGrow.getData(actor)
  13. -- 未购买
  14. if data.payTime == 0 then
  15. return
  16. end
  17. local currTime = getbaseinfo("nowsec")
  18. -- 已领取当天
  19. if TimeUtil.isSameDay(currTime, data.lstTimeAward) then
  20. return
  21. end
  22. -- 发放当天在线奖励
  23. local reward = ConfigDataManager.getTableValue("cfg_Activity_monthlyGrow", "dayReward", "id", 1)
  24. local tmp = string.toIntIntMap(reward, "#", "|")
  25. if table.notNullOrEmpty(tmp) then
  26. local days = TimeUtil.diffDays(currTime, data.lstTimeAward)
  27. for k, v in pairs(tmp) do
  28. tmp[k] = v * days
  29. end
  30. --奖励进入背包
  31. Bag.sendRewards(actor, tmp, "月卡登录奖励")
  32. end
  33. data.lstTimeAward = currTime
  34. ActMonthlyGrow.saveData(data, actor)
  35. ActMonthlyGrow.sendPanel(actor, data)
  36. sendluamsg(
  37. actor,
  38. LuaMessageIdToClient.RES_ACT_FIRST_CHARGE_INFO,
  39. {payTime = data.payTime, rewardStatus = data.rewardStatus}
  40. )
  41. end
  42. -- 过期奖励
  43. function ActMonthlyGrow.overdueAward(actor)
  44. local data = ActMonthlyGrow.getData(actor)
  45. -- 未购买
  46. if data.payTime == 0 then
  47. return
  48. end
  49. local currTime = getbaseinfo("nowsec")
  50. -- 已领取当天
  51. if TimeUtil.isSameDay(currTime, data.lstTimeAward) then
  52. return
  53. end
  54. -- 发放当天在线奖励
  55. local reward = ConfigDataManager.getTableValue("cfg_Activity_monthlyGrow", "dayReward", "id", 1)
  56. local tmp = string.toIntIntMap(reward, "#", "|")
  57. if table.notNullOrEmpty(tmp) then
  58. local days = TimeUtil.diffDays(currTime, data.lstTimeAward)
  59. for k, v in pairs(tmp) do
  60. tmp[k] = v * days
  61. end
  62. -- 发放补充奖励邮件
  63. sendconfigmailbyrid(actor, getbaseinfo(actor, "rid"), MailConfig.MONTHLY_GROW_DAILY_REWARD, tmp, "")
  64. end
  65. data.lstTimeAward = currTime
  66. ActMonthlyGrow.saveData(data, actor)
  67. end
  68. -- 角色登录
  69. function ActMonthlyGrow.login(actor)
  70. -- TODO过期发放邮件
  71. ActMonthlyGrow.dailyLoginAward(actor)
  72. end
  73. -- 在线跨天
  74. function ActMonthlyGrow.midNightUpdate(actor)
  75. ActMonthlyGrow.dailyLoginAward(actor)
  76. end
  77. function ActMonthlyGrow.getData(actor)
  78. local var = getplaydef(actor, _playerDbKey())
  79. local data = setmetatable(var or {}, ActMonthlyGrow)
  80. -- 充值事件
  81. if not data.payTime then
  82. data.payTime = 0
  83. end
  84. -- 最后领取奖励时间戳
  85. if not data.lstTimeAward then
  86. data.lstTimeAward = 0
  87. end
  88. if not data.endTime then
  89. data.endTime = 0
  90. end
  91. return data
  92. end
  93. function ActMonthlyGrow:saveData(actor)
  94. setplaydef(actor, _playerDbKey(), self)
  95. end
  96. -- 获取月卡经验加成
  97. function ActMonthlyGrow.getExpAdd(actor)
  98. local data = ActMonthlyGrow.getData(actor)
  99. -- 未激活
  100. if data.payTime == 0 then
  101. return 0
  102. end
  103. local currTime = getbaseinfo("nowsec")
  104. -- 已过期
  105. if currTime > data.endTime then
  106. return 0
  107. end
  108. return ConfigDataManager.getTableValue("cfg_Activity_monthlyGrow", "expBuff", "id", 1) or 0
  109. end
  110. -- 获取月卡金币掉落加成
  111. function ActMonthlyGrow.getGoldAdd(actor)
  112. local data = ActMonthlyGrow.getData(actor)
  113. -- 未激活
  114. if data.payTime == 0 then
  115. return 0
  116. end
  117. local currTime = getbaseinfo("nowsec")
  118. -- 已过期
  119. if currTime > data.endTime then
  120. return 0
  121. end
  122. return ConfigDataManager.getTableValue("cfg_Activity_monthlyGrow", "goldBuff", "id", 1) or 0
  123. end
  124. -- 获取月卡挂机增加时长
  125. function ActMonthlyGrow.getAfkAddTime(actor)
  126. local data = ActMonthlyGrow.getData(actor)
  127. -- 未激活
  128. if data.payTime == 0 then
  129. return 0
  130. end
  131. local currTime = getbaseinfo("nowsec")
  132. -- 已过期
  133. if currTime > data.endTime then
  134. return 0
  135. end
  136. return ConfigDataManager.getTableValue("cfg_Activity_monthlyGrow", "afkAddMinutes", "id", 1) or 0
  137. end
  138. ---充值回调触发事件
  139. function ActMonthlyGrow.rechargeEvent(actor, cfg_recharge, count, amount, ext, outRewards)
  140. local data = ActMonthlyGrow.getData(actor)
  141. -- 已充值
  142. if data.payTime > 0 then
  143. return
  144. end
  145. local gid = ConfigDataManager.getTableValue("cfg_Activity_monthlyGrow", "gid", "id", 1)
  146. if not cfg_recharge["id"] == gid then
  147. return
  148. end
  149. data.payTime = getbaseinfo("nowsec")
  150. data.lstTimeAward = data.payTime
  151. data.endTime = TimeUtil.addDayEnd(data.payTime, 30)
  152. ActMonthlyGrow.saveData(data, actor)
  153. ActMonthlyGrow.sendPanel(actor, data)
  154. -- jprint("更新豪礼数据",data,config)
  155. -- 发放当天在线奖励
  156. local reward = ConfigDataManager.getTableValue("cfg_Activity_monthlyGrow", "dayReward", "id", 1)
  157. local tmp = string.toIntIntMap(reward, "#", "|")
  158. if table.notNullOrEmpty(tmp) then
  159. --奖励进入背包
  160. Bag.sendRewards(actor, tmp, "月卡登录奖励")
  161. end
  162. sendluamsg(
  163. actor,
  164. LuaMessageIdToClient.RES_ACT_FIRST_CHARGE_INFO,
  165. {payTime = data.payTime, rewardStatus = data.rewardStatus}
  166. )
  167. end
  168. ---统一的请求消息处理
  169. function ActMonthlyGrow.reqAction(actor, type, action, reqParameter)
  170. if action == "panel" then
  171. local data = ActMonthlyGrow.getData(actor)
  172. ActMonthlyGrow.sendPanel(actor, data)
  173. elseif action == "reward" then
  174. ActMonthlyGrow.gainReward(actor, reqParameter)
  175. end
  176. end
  177. function ActMonthlyGrow.gainReward(actor, reqParameter)
  178. local data = ActMonthlyGrow.getData(actor)
  179. -- 未充值
  180. if data.payTime == 0 then
  181. tipinfo(actor, "未充值")
  182. return
  183. end
  184. -- 已领取
  185. if data.rewardStatus > 0 then
  186. tipinfo(actor, "已领取")
  187. return
  188. end
  189. -- 发放奖励
  190. local reward = ConfigDataManager.getTableValue("cfg_Activity_firstRecharge", "reward", "id", 1)
  191. local tmp = string.toIntIntMap(reward, "#", "|")
  192. if table.notNullOrEmpty(tmp) then
  193. --奖励进入背包
  194. Bag.sendRewards(actor, tmp, "充值奖励")
  195. end
  196. -- 改变状态
  197. data.rewardStatus = 2
  198. ActMonthlyGrow.saveData(data, actor)
  199. -- 发送奖励
  200. ActMonthlyGrow.sendPanel(actor, data)
  201. -- jprint("领奖豪礼数据",data)
  202. sendluamsg(
  203. actor,
  204. LuaMessageIdToClient.RES_ACT_FIRST_CHARGE_INFO,
  205. {payTime = data.payTime, rewardStatus = data.rewardStatus}
  206. )
  207. end
  208. function ActMonthlyGrow.sendPanel(actor, data)
  209. Recharge.resAction(actor, _rechargeType(), "panel", data)
  210. end
  211. -- 获取活动信息
  212. function ActMonthlyGrow.getInfo(actor, msgData)
  213. local data = ActMonthlyGrow.getData(actor)
  214. sendluamsg(
  215. actor,
  216. LuaMessageIdToClient.RES_ACT_FIRST_CHARGE_INFO,
  217. {payTime = data.payTime, rewardStatus = data.rewardStatus}
  218. )
  219. end
  220. --TODO 一定要放到文件最后
  221. EventListerTable.registerType("月卡活动", _rechargeType(), _playerDbKey())
  222. --注册充值事件
  223. RechargeEventListerTable:eventLister(_rechargeType(), "首充活动", ActMonthlyGrow.rechargeEvent)
  224. -- 注册请求消息监听
  225. RechargeMessageEventListerTable:eventLister(_rechargeType(), "首充活动", ActMonthlyGrow.reqAction)