KLUIOpenServiceArchangelWelfarePanel.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. ---@class KLUIOpenServiceArchangelWelfarePanel:UIKmlLuaPanelBase
  2. ---@field view KLUIOpenServiceArchangelWelfarePanelView
  3. ---@field WelfareRewardConfig cfg_angleBenefitReward_column[]
  4. ---@field WelfareTaskConfig cfg_angleBenefitTask_column[]
  5. ---@field TopRewardItems KLUIArchangelRewardItem[]
  6. ---@field WelfareTaskItems KLUIArchangelWelfareItem[]
  7. ---@field WelfareTaskDatas {cfg:cfg_angleBenefitTask_column,info:OpenServiceArchangelWelfareProtos.TaskInfo}[]
  8. local KLUIOpenServiceArchangelWelfarePanel = class(UIKmlLuaPanelBase)
  9. local this = KLUIOpenServiceArchangelWelfarePanel
  10. function this:AsyncLoadUI()
  11. end
  12. ---创建时调用一次
  13. function this:Init()
  14. self.ScheduleInfo = {} --进度
  15. self.ScheduleTemplates = {}
  16. self.ScheduleUseNumInfo = {} --进度使用次数
  17. self.AwardsGetid = {} --进度已领取
  18. self.WelfareTaskDatas = {} --任务数据
  19. self.TopRewardItems = {}
  20. self.WelfareTaskItems = {}
  21. self.curgoal = 0 --积分
  22. self.curlimit = 0 --次数
  23. self.MaxScheduleValue = 100
  24. self.WelfareRewardConfig = SL:GetConfigTable("cfg_angleBenefitReward")
  25. self.WelfareTaskConfig = {}
  26. local cfgs = SL:GetConfigTable("cfg_angleBenefitTask")
  27. for i, v in ipairs(cfgs) do
  28. self.WelfareTaskConfig[v.id] = v
  29. end
  30. self.IntegralId = self.WelfareRewardConfig[1].rewardPoint[1]
  31. for i, v in ipairs(self.WelfareRewardConfig) do
  32. self.MaxScheduleValue = math.max(self.MaxScheduleValue, v.rewardPoint[2])
  33. end
  34. self:InitScheduleList()
  35. self:InitWelfList()
  36. end
  37. function this:InitScheduleList()
  38. GUI:DataListInitData(self.view.DataScheduleRewardList, function()
  39. return self:ScheduleRewardItemCountFunc()
  40. end, function(realIndex)
  41. return self:ScheduleRewardItemGetFunc(realIndex)
  42. end, function(realIndex, kmlcontrol)
  43. return self:ScheduleRewardItemInitFunc(realIndex, kmlcontrol)
  44. end, function(realIndex, kmlcontrol)
  45. return self:ScheduleRewardItemUpdateFunc(realIndex, kmlcontrol)
  46. end)
  47. end
  48. function this:ScheduleRewardItemCountFunc()
  49. return table.count(self.ScheduleInfo)
  50. end
  51. function this:ScheduleRewardItemGetFunc(realIndex)
  52. ---@type KLUIArchangelRewardItem
  53. local item = GUI:UIPanel_Open("dev/outui/OpenServiceArchangelWelfare/Item/KLUIArchangelReward/KLUIArchangelRewardItem", self.view.DataScheduleRewardList, self, nil, true,function(_item)
  54. self.TopRewardItems[_item.view.root] = _item
  55. self.isScheduleRewarddEnd = true
  56. self:ScheduleRewardItemUpdateFunc(realIndex,_item.view.root)
  57. end)
  58. local kmlCtrl = item.view.root
  59. self.TopRewardItems[kmlCtrl] = item
  60. return kmlCtrl
  61. end
  62. function this:ScheduleRewardItemInitFunc(realIndex, kmlcontrol)
  63. end
  64. function this:ScheduleRewardItemUpdateFunc(realIndex, kmlcontrol)
  65. if not self.isScheduleRewarddEnd then
  66. return
  67. end
  68. local item = self.TopRewardItems[kmlcontrol]
  69. local luaIndex = realIndex + 1
  70. local dt = self.ScheduleInfo[luaIndex]
  71. item:InitData(dt)
  72. end
  73. function this:InitWelfList()
  74. GUI:DataListInitData(self.view.DataWelfRewardList, function()
  75. return self:WelfRewardItemCountFunc()
  76. end, function(realIndex)
  77. return self:WelfRewardItemGetFunc(realIndex)
  78. end, function(realIndex, kmlcontrol)
  79. return self:WelfRewardItemInitFunc(realIndex, kmlcontrol)
  80. end, function(realIndex, kmlcontrol)
  81. return self:WelfRewardItemUpdateFunc(realIndex, kmlcontrol)
  82. end)
  83. end
  84. function this:WelfRewardItemCountFunc()
  85. return table.count(self.WelfareTaskDatas)
  86. end
  87. function this:WelfRewardItemGetFunc(realIndex)
  88. -----@type KLUIArchangelRewardItem
  89. local item = GUI:UIPanel_Open("dev/outui/OpenServiceArchangelWelfare/Item/KLUIArchangelWelfare/KLUIArchangelWelfareItem", self.view.DataWelfRewardList, self, nil, true,function(_item)
  90. self.WelfareTaskItems[_item.view.root] = _item
  91. self.isWelfRewardEnd = true
  92. self:WelfRewardItemUpdateFunc(realIndex,_item.view.root)
  93. end)
  94. local kmlCtrl = item.view.root
  95. self.WelfareTaskItems[kmlCtrl] = item
  96. return kmlCtrl
  97. end
  98. function this:WelfRewardItemInitFunc(realIndex, kmlcontrol)
  99. end
  100. function this:WelfRewardItemUpdateFunc(realIndex, kmlCtrl)
  101. if not self.isWelfRewardEnd then
  102. return
  103. end
  104. local item = self.WelfareTaskItems[kmlCtrl]
  105. local luaIndex = realIndex + 1
  106. local dt = self.WelfareTaskDatas[luaIndex]
  107. item:InitData(dt)
  108. item:RefreshUI()
  109. end
  110. ---注册UI事件和服务器消息
  111. function this:RegistEvents()
  112. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ANGLE_BENEFIT_INFO, self.ResAngelWelfareRewardInfoMessage, self)
  113. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_RECEIVE_ANGLE_BENEFIT_REWARD, self.RES_RECEIVE_ANGLE_BENEFIT_REWARD, self)
  114. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_SUBMIT_ANGLE_BENEFIT_TASK, self.RES_SUBMIT_ANGLE_BENEFIT_TASK, self)
  115. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ANGLE_BENEFIT_TASK_CHANGE, self.RES_ANGLE_BENEFIT_TASK_CHANGE, self)
  116. SL:RegisterLUAEvent(LUA_EVENT_MONEYCHANGE, self.CoinInfo_Change, self)
  117. end
  118. -- 下任务状态改变: 只用于刷新任务状态,进度
  119. function this:CoinInfo_Change(_, message)
  120. self.curgoal = SL:GetBagItemCount(self.IntegralId) -- 个人积分
  121. self:SetScheduleInfo()
  122. GUI:Text_setString(self.view.num, tostring(self.curgoal)) -- 当前花费
  123. --GUI:Text_setString(self.view.num, "99") -- 当前花费
  124. GUI:Image_setFillAmount(self.view.progress_attach, self.curgoal / self.MaxScheduleValue)
  125. end
  126. -- 下任务状态改变: 只用于刷新任务状态,进度
  127. function this:ResRoleTaskChangeMessage(_, message)
  128. self:SetTaskInfo()
  129. end
  130. -- 上进度状态改变:
  131. ---@param message OpenServiceArchangelWelfareProtos.AngelWelfareRewardInfoRes
  132. function this:ResAngelWelfareRewardInfoMessage(_, message)
  133. self.AwardsGetid = message.awards -- 是否已领取[]
  134. self.ScheduleUseNumInfo = message.serverReward -- 已消耗次数[]
  135. self.curgoal = SL:GetBagItemCount(self.IntegralId) -- 个人积分
  136. self.taskInfo = message.taskInfo
  137. self:SetScheduleInfo()
  138. self:SetTaskInfo(message.taskInfo)
  139. GUI:Text_setString(self.view.num, tostring(self.curgoal)) -- 当前花费
  140. --GUI:Text_setString(self.view.num, "99") -- 当前花费
  141. GUI:Image_setFillAmount(self.view.progress_attach, self.curgoal / self.MaxScheduleValue)
  142. end
  143. ---@param message number[]
  144. function this:RES_RECEIVE_ANGLE_BENEFIT_REWARD(_, message)
  145. self.AwardsGetid = message -- 是否已领取[]
  146. self:SetScheduleInfo()
  147. end
  148. ---@param message number[]
  149. function this:RES_SUBMIT_ANGLE_BENEFIT_TASK(_, message)
  150. if not self.taskInfo then
  151. self.taskInfo = {}
  152. end
  153. local typeList = {}
  154. if not table.isNullOrEmpty(self.taskInfo) then
  155. for i, v in pairs(self.taskInfo) do
  156. typeList[self.WelfareTaskConfig[tonumber(i)].type] = i
  157. end
  158. end
  159. for i, v in pairs(message) do
  160. if typeList[self.WelfareTaskConfig[tonumber(i)].type] ~= nil then
  161. self.taskInfo[typeList[self.WelfareTaskConfig[tonumber(i)].type]] = nil
  162. self.taskInfo[i] = v
  163. end
  164. end
  165. self:SetTaskInfo(self.taskInfo)
  166. end
  167. ---@param message number[]
  168. function this:RES_ANGLE_BENEFIT_TASK_CHANGE(_, message)
  169. self.taskInfo = message
  170. self:SetTaskInfo(self.taskInfo)
  171. end
  172. -- 奖励和任务都完成关闭入口
  173. function this:CloseAngelWelfareReward()
  174. end
  175. ---界面显示时调用一次
  176. function this:Show()
  177. end
  178. ---创建或者刷新界面数据时调用
  179. function this:Refresh()
  180. ----大天使信息
  181. --self:ResAngelWelfareRewardInfoMessage(_,{
  182. -- awards = {1,2},
  183. -- serverRewardInfo={{id="1",count="4"}},
  184. -- taskInfo = {["201"]={nowCount=10,status="2"},["101"]={nowCount=0,status="1"}}
  185. --})
  186. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ANGLE_BENEFIT_INFO)
  187. GUI:setVisible(self.view.EndText, false)
  188. GUI:Text_setString(self.view.num, tostring(self.curgoal)) --当前花费
  189. GUI:Image_setFillAmount(self.view.progress_attach, self.curgoal / self.MaxScheduleValue)
  190. end
  191. function this:SetScheduleInfo()
  192. ---@type cfg_angleBenefitReward_column[]
  193. self.ScheduleInfo = self.WelfareRewardConfig --进度节点,表结构修改适配
  194. local lastbuyid = 0
  195. local lastgetnumid = 0
  196. local isGet = false
  197. local usenum = 0
  198. local diffTime = 0
  199. local falseTimestbl = {} --假数据全服数量
  200. for k, Info in ipairs(self.ScheduleInfo) do
  201. Info.reqid = Info.id --请求求购买id
  202. Info.buyid = Info.payConsume[1] --消耗道具
  203. Info.buynum = Info.payConsume[2]
  204. isGet = self:GetAwardsIsGet(Info.id)
  205. Info.isGet = isGet --是否已领取
  206. usenum, diffTime = self:GetUseNum(Info.id, Info.limitTime)
  207. Info.usenum = usenum --消耗次数
  208. Info.diffTime = diffTime --持续时间差值
  209. Info.curgoal = self.curgoal --积分
  210. Info.falseTimes = falseTimestbl[k + 1] --假数据全服数量
  211. local count = Info.limitNum - usenum -- 剩余全服数量
  212. --local showTime = endTime - Time.GetServerTime()
  213. local integraldiff = self.curgoal < Info.rewardPoint[2]
  214. if not isGet then
  215. if lastbuyid == 0 then
  216. if diffTime < 0 or count < 0 then
  217. lastbuyid = Info.id --最新的购买id
  218. end
  219. end
  220. if lastgetnumid == 0 then
  221. if diffTime > 0 and count > 0 and integraldiff then
  222. lastgetnumid = Info.id --最新的全服限量
  223. end
  224. end
  225. end
  226. Info.lastbuyid = lastbuyid
  227. Info.lastgetnumid = lastgetnumid
  228. end
  229. --GUI:LoopScrollViewUpdateData()
  230. GUI:DataListUpdateData(self.view.DataScheduleRewardList)
  231. end
  232. -- 是否已领取
  233. function this:GetAwardsIsGet(id)
  234. local isGet = false
  235. if not table.isNullOrEmpty(self.AwardsGetid) then
  236. for k, v in pairs(self.AwardsGetid) do
  237. if k == tostring(id) then
  238. isGet = true
  239. end
  240. end
  241. end
  242. return isGet
  243. end
  244. -- 消耗次数
  245. function this:GetUseNum(id, day)
  246. local ONE_DAY_MILLISECOND = 86400000
  247. local useNum = 0
  248. local isbeforerefresh, differenceTime = SL:GetServerOpendifferenceTime()
  249. local serverTime = Time.GetServerTime()
  250. local endTime = (day) * ONE_DAY_MILLISECOND + SL:GetEnterRoleRes().openServerTime
  251. local diffTime = endTime - serverTime - differenceTime * 1000
  252. if not table.isNullOrEmpty(self.ScheduleUseNumInfo) then
  253. for k, v in pairs(self.ScheduleUseNumInfo) do
  254. if k == tostring(id) then
  255. useNum = tonumber(v)
  256. break
  257. end
  258. end
  259. end
  260. return useNum, diffTime
  261. end
  262. ---@param allTasks number[]
  263. function this:SetTaskInfo(allTasks)
  264. table.clear(self.WelfareTaskDatas)
  265. if not table.isNullOrEmpty(allTasks) then
  266. for k, info in pairs(allTasks) do
  267. if info.status ~= "3" then
  268. local cfg = self.WelfareTaskConfig[tonumber(k)]
  269. table.insert(self.WelfareTaskDatas, { cfg = cfg, info = info })
  270. end
  271. end
  272. end
  273. if table.count(self.WelfareTaskDatas) > 1 then
  274. table.sort(self.WelfareTaskDatas, function(a, b)
  275. return a.cfg.type < b.cfg.type
  276. end)
  277. end
  278. if table.count(self.WelfareTaskDatas) <= 0 then
  279. GUI:setVisible(self.view.EndText, true)
  280. end
  281. GUI:DataListUpdateData(self.view.DataWelfRewardList)
  282. end
  283. function this:Close()
  284. end
  285. return this