OpenServiceLevelRewardInfo.lua 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. ---@class OpenServiceLevelRewardInfo
  2. OpenServiceLevelRewardInfo = class()
  3. local this = OpenServiceLevelRewardInfo
  4. function this:ctor()
  5. end
  6. function this:Init()
  7. self.personInfo = {} --个人领取信息
  8. self.serverInfo = {} --全服限量信息
  9. self.levelRewardCfg = {}
  10. local cfgs = SL:GetConfigTable("cfg_activity_levelUp")
  11. for i,v in pairs(cfgs) do
  12. self.levelRewardCfg[v.id] = v
  13. end
  14. self.ShowTypeInfo = {}
  15. self.RedPointState = false
  16. self:InitData()
  17. self:RegistMessages()
  18. end
  19. function this:InitData()
  20. end
  21. function this:RegistMessages()
  22. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_PERSONAL_LEVEL_REWARD_INFO, self.RES_PERSONAL_LEVEL_REWARD_INFO, self)
  23. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_RECEIVE_LEVEL_REWARD, self.RES_RECEIVE_LEVEL_REWARD, self)
  24. SL:RegisterLUAEvent(LUA_EVENT_LEVELCHANGE, self.LUA_EVENT_LEVELCHANGE, self)
  25. SL:RegisterLUAEvent(LUA_EVENT_VIP_CHANGE, self.LUA_EVENT_VIP_CHANGE, self)
  26. end
  27. function this:RES_PERSONAL_LEVEL_REWARD_INFO(id, message)
  28. if not message then
  29. return
  30. end
  31. --个人领取
  32. self.personInfo = {}
  33. if message.personInfo then
  34. for idStr,data in pairs(message.personInfo) do
  35. local id = tonumber(idStr)
  36. self.personInfo[id] = {}
  37. self.personInfo[id].basicItem = data.basicItem == "true"
  38. self.personInfo[id].specialItem = data.specialItem == "true"
  39. end
  40. end
  41. --全服限量
  42. self.serverInfo = {}
  43. if message.serverInfo then
  44. for idStr,num in pairs(message.serverInfo) do
  45. self.serverInfo[tonumber(idStr)] = tonumber(num)
  46. end
  47. end
  48. self:RedDotCheck()
  49. SL:onLUAEvent(LUA_EVENT_OPENSERVICE_LEVEL_REWARD_CHANGE)
  50. end
  51. function this:RES_RECEIVE_LEVEL_REWARD(id, message)
  52. if not message then
  53. return
  54. end
  55. --个人领取
  56. for idStr,data in pairs(message) do
  57. local id = tonumber(idStr)
  58. self.personInfo[id] = {}
  59. self.personInfo[id].basicItem = data.basicItem == "true"
  60. self.personInfo[id].specialItem = data.specialItem == "true"
  61. end
  62. self:RedDotCheck()
  63. SL:onLUAEvent(LUA_EVENT_OPENSERVICE_LEVEL_REWARD_CHANGE)
  64. end
  65. function this:RedDotCheck()
  66. self.ShowTypeInfo = {}
  67. local playerLevel = SL:GetMetaValue(EMetaVarGetKey.LEVEL)
  68. --- @param cfg cfg_activity_levelUp_column
  69. for id,cfg in pairs(self.levelRewardCfg) do
  70. --1. 等级不够 无限量不显示,有限量显示限量
  71. --2. 等级足够 限量已到上限,判断是否已领取普通奖励:
  72. -- 1. 普通奖励未领取,显示限量
  73. -- 2. 普通奖励已领取,判断特殊奖励领取:
  74. -- 1. 特殊奖励已领取,显示已领取
  75. -- 2. 特殊奖励未领取,判断特殊条件,满足显示领取特殊奖励,不满足特殊条件显示特殊跳转
  76. --3. 等级足够(无限量或限量足够),判断特殊领取:
  77. -- 1. 特殊奖励已领取显示已领取
  78. -- 2. 特殊奖励未领取,判断特殊条件,满足显示领取特殊奖励,不满足特殊条件:
  79. -- 1. 普通奖励已领取,显示特殊跳转
  80. -- 2. 普通奖励未领取,显示领取普通奖励
  81. if playerLevel < cfg.level then
  82. if string.isNullOrEmpty(cfg.Places) then
  83. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.LevelNotEnough
  84. else
  85. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.ServerCount
  86. end
  87. elseif not string.isNullOrEmpty(cfg.Places) and self.serverInfo[id] and self.serverInfo[id] >= tonumber(cfg.Places) then
  88. if not self.personInfo[id] or not self.personInfo[id].basicItem then
  89. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.ServerCount
  90. else
  91. if self.personInfo[id].specialItem then
  92. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.HaveGotten
  93. elseif string.isNullOrEmpty(cfg.conditions) or ConditionManager.Check4D(cfg.conditions) then
  94. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.GetSpecialOnly
  95. else
  96. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.SpecialGoto
  97. end
  98. end
  99. else
  100. if self.personInfo[id] and self.personInfo[id].specialItem then
  101. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.HaveGotten
  102. else
  103. if string.isNullOrEmpty(cfg.conditions) or ConditionManager.Check4D(cfg.conditions) then
  104. if self.personInfo[id] and self.personInfo[id].basicItem then
  105. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.GetSpecialOnly
  106. else
  107. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.GetSpecial
  108. end
  109. else
  110. if self.personInfo[id] and self.personInfo[id].basicItem then
  111. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.SpecialGoto
  112. else
  113. self.ShowTypeInfo[id] = OpenServiceLevelReward_ShowType.GetNormal
  114. end
  115. end
  116. end
  117. end
  118. end
  119. self.RedPointState = false
  120. for id,state in pairs(self.ShowTypeInfo) do
  121. if state == OpenServiceLevelReward_ShowType.GetNormal or state == OpenServiceLevelReward_ShowType.GetSpecial or state == OpenServiceLevelReward_ShowType.GetSpecialOnly then
  122. self.RedPointState = true
  123. break
  124. end
  125. end
  126. InfoManager.mainActivityInfo:RefreshMainActivityRedPoint("tog_LevelReward", self.RedPointState)
  127. end
  128. ---@class OpenServiceLevelReward_ShowType
  129. OpenServiceLevelReward_ShowType = {
  130. GetNormal = enum(1), --领取普通奖励
  131. GetSpecial = enum(), --领取全部奖励
  132. GetSpecialOnly = enum(), --领取特殊奖励
  133. SpecialGoto = enum(), --不满足特殊条件 进行跳转
  134. HaveGotten = enum(), --已经领取
  135. ServerCount = enum(), --全服限量
  136. LevelNotEnough = enum(), --等级不够 不显示
  137. }
  138. function this:LUA_EVENT_LEVELCHANGE()
  139. --暂时每次升级都刷新
  140. self:RedDotCheck()
  141. SL:onLUAEvent(LUA_EVENT_OPENSERVICE_LEVEL_REWARD_CHANGE)
  142. end
  143. function this:LUA_EVENT_VIP_CHANGE()
  144. self:RedDotCheck()
  145. SL:onLUAEvent(LUA_EVENT_OPENSERVICE_LEVEL_REWARD_CHANGE)
  146. end
  147. function this:Reset()
  148. end