CommonActLoginGift.lua 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. -- 通用节日活动 - 登录豪礼
  2. -- db
  3. --[=[
  4. human.db.absAct[actId] = {
  5. getRecordData = {
  6. [gitftType] = {
  7. [day1] = true,
  8. [day3] = true,
  9. },
  10. },
  11. buyGiftType = nil, -- 已经购买的礼包类型
  12. }
  13. ]=]--
  14. local Msg = require("core.Msg")
  15. local Grid = require("bag.Grid")
  16. local BagLogic = require("bag.BagLogic")
  17. local AbsActLogic = require("absAct.AbsActLogic")
  18. local Broadcast = require("broadcast.Broadcast")
  19. local Lang = require("common.Lang")
  20. local LoginGiftConfig = require("excel.commonact").loginreward
  21. local CommonDefine = require("common.CommonDefine")
  22. local Util = require("common.Util")
  23. local YunYingLogic = require("yunying.YunYingLogic")
  24. local AbsActExcel = require("excel.absAct")
  25. local BuyLogic = require("topup.BuyLogic")
  26. local LOGTYPE = "CommonActLoginGift"
  27. local COMMONACT_LOGINGIFT_ID = 7505
  28. local function getActData(human)
  29. return human.db.absAct[COMMONACT_LOGINGIFT_ID]
  30. end
  31. local function updateGetRecordData(human, giftType, dayIdx)
  32. human.db.absAct[COMMONACT_LOGINGIFT_ID].getRecordData = human.db.absAct[COMMONACT_LOGINGIFT_ID].getRecordData or {}
  33. human.db.absAct[COMMONACT_LOGINGIFT_ID].getRecordData[giftType] = human.db.absAct[COMMONACT_LOGINGIFT_ID].getRecordData[giftType] or {}
  34. human.db.absAct[COMMONACT_LOGINGIFT_ID].getRecordData[giftType][dayIdx] = true
  35. end
  36. local function updateBuyGiftType(human, giftType)
  37. human.db.absAct[COMMONACT_LOGINGIFT_ID].buyGiftType = giftType
  38. end
  39. local function isOpenAct(human, funcID)
  40. return AbsActLogic.isStarted(human, funcID)
  41. end
  42. local function transformCfg()
  43. local tb = {}
  44. for _, giftCfg in ipairs(LoginGiftConfig) do
  45. if not tb[giftCfg.giftType] then
  46. tb[giftCfg.giftType] = {}
  47. end
  48. local t = tb[giftCfg.giftType]
  49. t[#t+1] = giftCfg
  50. end
  51. return tb
  52. end
  53. local function getAwardState(human, giftType, dayIdx)
  54. local actData = getActData(human)
  55. local diffDays = Util.diffDay(actData.realStartTime) + 1
  56. local getRecordData = actData and actData.getRecordData or {}
  57. local nowGiftTypeGetRecord = getRecordData[giftType] or {}
  58. local buyGiftType = actData and actData.buyGiftType
  59. local isBuy = true
  60. local state = CommonDefine.COMMON_PRIZE_STATE_CANGET
  61. if giftType ~= 1 and (not buyGiftType or buyGiftType ~= giftType) then -- 需要充值的礼包类型
  62. state = CommonDefine.COMMON_PRIZE_STATE_NOGET
  63. isBuy = false
  64. end
  65. if isBuy and diffDays >= dayIdx and nowGiftTypeGetRecord[dayIdx] then
  66. state = CommonDefine.COMMON_PRIZE_STATE_GET
  67. end
  68. return state
  69. end
  70. -- 检查是否有可领取的奖励
  71. local function isCanGet(human)
  72. local type_2_cfg = transformCfg()
  73. for giftType, giftCfgArr in pairs(type_2_cfg) do
  74. for _, giftCfg in ipairs(giftCfgArr) do
  75. local state = getAwardState(human, giftType, giftCfg.dayIdx)
  76. if state == CommonDefine.COMMON_PRIZE_STATE_CANGET then
  77. return true
  78. end
  79. end
  80. end
  81. return false
  82. end
  83. -- 填充协议结构
  84. local function populateGiftMsg(human, net, giftCfg, nowGiftType)
  85. net.reward[0] = #giftCfg.reward
  86. for i, itemInfo in ipairs(giftCfg.reward) do
  87. Grid.makeItem(net.reward[i], itemInfo[1], itemInfo[2])
  88. end
  89. net.reallyDays = giftCfg.dayIdx
  90. net.rewardState = getAwardState(human, nowGiftType, giftCfg.dayIdx)
  91. BuyLogic.fontBuyItem(human, net.buyMsg, giftCfg.buyId)
  92. net.giftType = nowGiftType
  93. end
  94. -- 主动刷新一次红点
  95. local function updateRedDot(human)
  96. YunYingLogic.sendBanner(human)
  97. local config = AbsActExcel.absActivity[COMMONACT_LOGINGIFT_ID]
  98. YunYingLogic.sendGroupUpdate(YYInfo[COMMONACT_LOGINGIFT_ID], human, config.panelID)
  99. end
  100. function isRed(human, funcConfig)
  101. local state = isOpenAct(human, funcConfig and funcConfig.funcID)
  102. if not state then
  103. return false
  104. end
  105. return isCanGet(human)
  106. end
  107. function isOpen(human, YYInfo, funcConfig)
  108. return isOpenAct(human, funcConfig and funcConfig.funcID)
  109. end
  110. function isActive(human, YYInfo, funcConfig)
  111. return not isOpen(human, YYInfo, funcConfig)
  112. end
  113. function onCharge(human, price, funcID, buyID, buyNum)
  114. local actData = getActData(human)
  115. local buyGiftType = actData and actData.buyGiftType
  116. if buyGiftType then
  117. return
  118. end
  119. local type_2_cfg = transformCfg()
  120. for giftType, giftCfgArr in pairs(type_2_cfg) do
  121. local singleCfg = giftCfgArr[1]
  122. if singleCfg.buyId == buyID then
  123. updateBuyGiftType(human, giftType)
  124. updateRedDot(human)
  125. CommonActLoginGift_Query(human)
  126. break
  127. end
  128. end
  129. end
  130. function updateDaily(human, funcID)
  131. if isOpenAct(human, COMMONACT_LOGINGIFT_ID) then
  132. return
  133. end
  134. updateRedDot(human)
  135. end
  136. -- 查询
  137. function CommonActLoginGift_Query(human)
  138. local msgRet = Msg.gc.GC_ABS_COMONACT_LOGINGIFT_QUERY
  139. msgRet.giftDatafree[0] = 0
  140. msgRet.giftData68[0] = 0
  141. msgRet.giftData128[0] = 0
  142. msgRet.giftData328[0] = 0
  143. msgRet.giftData648[0] = 0
  144. msgRet.isEnd = 0
  145. msgRet.isStart = 1
  146. local len, msgOnceLen = 0, 5
  147. local type_2_cfg = transformCfg()
  148. local configNum = type_2_cfg[1] and #type_2_cfg[1] or 0
  149. local num = configNum
  150. for i=1, configNum do
  151. len = len + 1
  152. if type_2_cfg[1] then
  153. msgRet.giftDatafree[0] = len
  154. populateGiftMsg(human, msgRet.giftDatafree[len], type_2_cfg[1][i], 1)
  155. end
  156. if type_2_cfg[2] then
  157. msgRet.giftData68[0] = len
  158. populateGiftMsg(human, msgRet.giftData68[len], type_2_cfg[2][i], 2)
  159. end
  160. if type_2_cfg[3] then
  161. msgRet.giftData128[0] = len
  162. populateGiftMsg(human, msgRet.giftData128[len], type_2_cfg[3][i], 3)
  163. end
  164. if type_2_cfg[4] then
  165. msgRet.giftData328[0] = len
  166. populateGiftMsg(human, msgRet.giftData328[len], type_2_cfg[4][i], 4)
  167. end
  168. if type_2_cfg[5] then
  169. msgRet.giftData648[0] = len
  170. populateGiftMsg(human, msgRet.giftData648[len], type_2_cfg[5][i], 5)
  171. end
  172. if len >= msgOnceLen then
  173. num = num - len
  174. if num <= 0 then
  175. msgRet.isEnd = 1
  176. return Msg.send(msgRet, human.fd)
  177. end
  178. Msg.send(msgRet, human.fd)
  179. len = 0
  180. msgRet.isStart = 0
  181. end
  182. end
  183. if len > 0 then
  184. msgRet.isEnd = 1
  185. Msg.send(msgRet, human.fd)
  186. end
  187. end
  188. -- 领取奖励
  189. function CommonActLoginGift_GetReward(human, targetGiftType)
  190. local type_2_cfg = transformCfg()
  191. local giftArr = type_2_cfg[targetGiftType]
  192. if not giftArr then
  193. return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
  194. end
  195. local actData = getActData(human)
  196. local buyGiftType = actData and actData.buyGiftType
  197. if targetGiftType ~= 1 and (not buyGiftType or buyGiftType ~= targetGiftType) then
  198. return Broadcast.sendErr(human, Lang.YUNYING_GET_ERR_CONDITION)
  199. end
  200. local itemArr = {}
  201. for _, giftCfg in ipairs(giftArr) do
  202. local state = getAwardState(human, targetGiftType, giftCfg.dayIdx)
  203. if state == CommonDefine.COMMON_PRIZE_STATE_CANGET then
  204. for _, itemInfo in ipairs(giftCfg.reward) do
  205. itemArr[#itemArr+1] = { itemInfo[1], itemInfo[2] }
  206. end
  207. -- 记录领取
  208. updateGetRecordData(human, targetGiftType, giftCfg.dayIdx)
  209. end
  210. end
  211. if #itemArr == 0 then
  212. return Broadcast.sendErr(human, Lang.HO_NO_CAN_GET)
  213. end
  214. -- 发放道具
  215. BagLogic.addItemList(human, itemArr, LOGTYPE)
  216. -- 更红点
  217. updateRedDot(human)
  218. -- 推送最新数给客户端
  219. CommonActLoginGift_Query(human)
  220. end