AbsLoginRewardLogic.lua 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. --新商业化活动——登录豪礼
  2. --db
  3. --[=[
  4. human.db.absAct[id] = {
  5. loginDay = nil, --活动期间登录的天数
  6. getRewardRecord = nil, {1,3,2,6} --已领取的奖励记录, 记录的是第几天
  7. }
  8. ]=]--
  9. local Msg = require("core.Msg")
  10. local Grid = require("bag.Grid")
  11. local BagLogic = require("bag.BagLogic")
  12. local AbsActLogic = require("absAct.AbsActLogic")
  13. local Broadcast = require("broadcast.Broadcast")
  14. local Lang = require("common.Lang")
  15. local AbsActExcel = require("excel.absAct")
  16. local YunYingLogic = require("yunying.YunYingLogic")
  17. local Util = require("common.Util")
  18. local CycleActivityLogic = require("yunying.CycleActivity")
  19. local LOGTAG = "AbsLoginReward" --日志标识
  20. local function check(tbl, day)
  21. if not tbl or not day then
  22. return false
  23. end
  24. for _, v in ipairs(tbl) do
  25. if v == day then
  26. return true
  27. end
  28. end
  29. return false
  30. end
  31. function isOpen(human, YYInfo, funcConfig)
  32. -- local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
  33. local state, endTime, startTime = CycleActivityLogic.isStarted(human, funcConfig.funcID)
  34. return state, endTime, startTime
  35. end
  36. function isActive(human, YYInfo, funcConfig)
  37. local state = isOpen(human, YYInfo, funcConfig)
  38. return not state
  39. end
  40. --红点判断
  41. function isRed(human, YYInfo, funcConfig)
  42. local actData = human.db.absAct[funcConfig.funcID]
  43. if not actData then
  44. return false
  45. end
  46. -- local loginDay = actData.loginDay
  47. -- if not loginDay then
  48. -- return false
  49. -- end
  50. -- local _, _, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
  51. local _, _, startTime = CycleActivityLogic.isStarted(human, funcConfig.funcID)
  52. local config = AbsActExcel.AbsLoginReward
  53. local getRewardRecord = actData.getRewardRecord
  54. if getRewardRecord and #getRewardRecord >= #config then
  55. return false
  56. end
  57. local loginDay = Util.diffDay(startTime) + 1
  58. if getRewardRecord and #getRewardRecord >= loginDay then
  59. return false
  60. end
  61. return true
  62. end
  63. function onLogin(human, id)
  64. -- local state, _, realStartTime = AbsActLogic.isStarted(human, id)
  65. local state, _, realStartTime = CycleActivityLogic.isStarted(human, id)
  66. if not state then
  67. return
  68. end
  69. local actData = human.db.absAct[id]
  70. if not actData then
  71. return
  72. end
  73. --处理活动更到线上前,玩家当天已经登录,没有记录当天登录的情况
  74. -- if not actData.loginDay then
  75. -- actData.loginDay = 1
  76. -- --红点刷新
  77. -- YunYingLogic.sendBanner(human)
  78. -- local config = AbsActExcel.absActivity[id]
  79. -- YunYingLogic.sendGroupUpdate(YYInfo[id], human, config.panelID)
  80. -- end
  81. local loginDay = Util.diffDay(realStartTime) + 1
  82. local getRewardRecord = actData.getRewardRecord
  83. local config = AbsActExcel.AbsLoginReward
  84. if not getRewardRecord or (#getRewardRecord <= loginDay and #getRewardRecord <= #config) then
  85. --红点刷新
  86. YunYingLogic.sendBanner(human)
  87. local otherConfig = AbsActExcel.absActivity[id]
  88. YunYingLogic.sendGroupUpdate(YYInfo[id], human, otherConfig.panelID)
  89. end
  90. end
  91. --跨天函数
  92. function updateDaily(human, id)
  93. -- local state = AbsActLogic.isStarted(human, id)
  94. local state = CycleActivityLogic.isStarted(human, id)
  95. if not state then
  96. return
  97. end
  98. local actData = human.db.absAct[id]
  99. if not actData then
  100. return
  101. end
  102. -- actData.loginDay =( actData.loginDay or 0) + 1
  103. --红点刷新
  104. YunYingLogic.sendBanner(human)
  105. local config = AbsActExcel.absActivity[id]
  106. YunYingLogic.sendGroupUpdate(YYInfo[id], human, config.panelID)
  107. end
  108. --查询
  109. function Query(human, id)
  110. -- local state, _, realStartTime = AbsActLogic.isStarted(human, id)
  111. local state, _, realStartTime = CycleActivityLogic.isStarted(human, id)
  112. if not state then
  113. return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
  114. end
  115. local actData = human.db.absAct[id]
  116. if not actData then
  117. return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
  118. end
  119. local msgRet = Msg.gc.GC_LOGINREWARD_QUERY
  120. local dayRewardData = msgRet.dayRewardData
  121. local config = AbsActExcel.AbsLoginReward
  122. dayRewardData[0] = #config
  123. --local loginDay = actData.loginDay
  124. local loginDay = Util.diffDay(realStartTime) + 1
  125. local getRewardRecord = actData.getRewardRecord
  126. for day, cfg in ipairs(config) do
  127. dayRewardData[day].day = day
  128. dayRewardData[day].state = 0
  129. local isGet = check(getRewardRecord, day)
  130. if loginDay and loginDay >= day and isGet then
  131. dayRewardData[day].state = 2
  132. elseif loginDay and loginDay >= day and not isGet then
  133. dayRewardData[day].state = 1
  134. end
  135. local rewardInfo = dayRewardData[day].rewardInfo
  136. rewardInfo[0] = #cfg.item
  137. for idx, itemInfo in ipairs(cfg.item) do
  138. Grid.makeItem(rewardInfo[idx], itemInfo[1], itemInfo[2])
  139. end
  140. end
  141. Msg.send(msgRet, human.fd)
  142. end
  143. --领奖
  144. function GetReward(human, id, dayIndex)
  145. -- local state, _, realStartTime = AbsActLogic.isStarted(human, id)
  146. local state, _, realStartTime = CycleActivityLogic.isStarted(human, id)
  147. if not state then
  148. return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
  149. end
  150. local actData = human.db.absAct[id]
  151. if not actData then
  152. return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
  153. end
  154. if dayIndex <= 0 then
  155. return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
  156. end
  157. --local loginDay = actData.loginDay
  158. local loginDay = Util.diffDay(realStartTime) + 1
  159. if not loginDay or dayIndex > loginDay then
  160. return Broadcast.sendErr(human, Lang.COMMON_TIME_NOT_ENOUGH)
  161. end
  162. local getRewardRecord = actData.getRewardRecord
  163. if getRewardRecord then
  164. if check(getRewardRecord, dayIndex) then
  165. return Broadcast.sendErr(human, Lang.YUNYING_GET_ERR_HADGET)
  166. end
  167. end
  168. local config = AbsActExcel.AbsLoginReward
  169. if dayIndex > #config then
  170. return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
  171. end
  172. --更新db
  173. getRewardRecord = getRewardRecord or {}
  174. table.insert(getRewardRecord, dayIndex)
  175. actData.getRewardRecord = getRewardRecord
  176. --发放奖励
  177. local targetDayReward = config[dayIndex].item
  178. BagLogic.addItemList(human, targetDayReward, LOGTAG)
  179. --发下客户端更新数据
  180. Query(human, id) --暂定使用查询协议更新数据
  181. --更新红点
  182. if #getRewardRecord >= loginDay or #getRewardRecord >= #config then
  183. YunYingLogic.sendBanner(human)
  184. local config = AbsActExcel.absActivity[id]
  185. YunYingLogic.sendGroupUpdate(YYInfo[id], human, config.panelID)
  186. end
  187. end