---@class KLUIOpenServiceArchangelWelfarePanel:UIKmlLuaPanelBase ---@field view KLUIOpenServiceArchangelWelfarePanelView ---@field WelfareRewardConfig cfg_angleBenefitReward_column[] ---@field WelfareTaskConfig cfg_angleBenefitTask_column[] ---@field TopRewardItems KLUIArchangelRewardItem[] ---@field WelfareTaskItems KLUIArchangelWelfareItem[] ---@field WelfareTaskDatas {cfg:cfg_angleBenefitTask_column,info:OpenServiceArchangelWelfareProtos.TaskInfo}[] local KLUIOpenServiceArchangelWelfarePanel = class(UIKmlLuaPanelBase) local this = KLUIOpenServiceArchangelWelfarePanel function this:AsyncLoadUI() end ---创建时调用一次 function this:Init() self.ScheduleInfo = {} --进度 self.ScheduleTemplates = {} self.ScheduleUseNumInfo = {} --进度使用次数 self.AwardsGetid = {} --进度已领取 self.WelfareTaskDatas = {} --任务数据 self.TopRewardItems = {} self.WelfareTaskItems = {} self.curgoal = 0 --积分 self.curlimit = 0 --次数 self.MaxScheduleValue = 100 self.WelfareRewardConfig = SL:GetConfigTable("cfg_angleBenefitReward") self.WelfareTaskConfig = {} local cfgs = SL:GetConfigTable("cfg_angleBenefitTask") for i, v in ipairs(cfgs) do self.WelfareTaskConfig[v.id] = v end self.IntegralId = self.WelfareRewardConfig[1].rewardPoint[1] for i, v in ipairs(self.WelfareRewardConfig) do self.MaxScheduleValue = math.max(self.MaxScheduleValue, v.rewardPoint[2]) end self:InitScheduleList() self:InitWelfList() end function this:InitScheduleList() GUI:DataListInitData(self.view.DataScheduleRewardList, function() return self:ScheduleRewardItemCountFunc() end, function(realIndex) return self:ScheduleRewardItemGetFunc(realIndex) end, function(realIndex, kmlcontrol) return self:ScheduleRewardItemInitFunc(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:ScheduleRewardItemUpdateFunc(realIndex, kmlcontrol) end) end function this:ScheduleRewardItemCountFunc() return table.count(self.ScheduleInfo) end function this:ScheduleRewardItemGetFunc(realIndex) ---@type KLUIArchangelRewardItem local item = GUI:UIPanel_Open("dev/outui/OpenServiceArchangelWelfare/Item/KLUIArchangelReward/KLUIArchangelRewardItem", self.view.DataScheduleRewardList, self, nil, true,function(_item) self.TopRewardItems[_item.view.root] = _item self.isScheduleRewarddEnd = true self:ScheduleRewardItemUpdateFunc(realIndex,_item.view.root) end) local kmlCtrl = item.view.root self.TopRewardItems[kmlCtrl] = item return kmlCtrl end function this:ScheduleRewardItemInitFunc(realIndex, kmlcontrol) end function this:ScheduleRewardItemUpdateFunc(realIndex, kmlcontrol) if not self.isScheduleRewarddEnd then return end local item = self.TopRewardItems[kmlcontrol] local luaIndex = realIndex + 1 local dt = self.ScheduleInfo[luaIndex] item:InitData(dt) end function this:InitWelfList() GUI:DataListInitData(self.view.DataWelfRewardList, function() return self:WelfRewardItemCountFunc() end, function(realIndex) return self:WelfRewardItemGetFunc(realIndex) end, function(realIndex, kmlcontrol) return self:WelfRewardItemInitFunc(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:WelfRewardItemUpdateFunc(realIndex, kmlcontrol) end) end function this:WelfRewardItemCountFunc() return table.count(self.WelfareTaskDatas) end function this:WelfRewardItemGetFunc(realIndex) -----@type KLUIArchangelRewardItem local item = GUI:UIPanel_Open("dev/outui/OpenServiceArchangelWelfare/Item/KLUIArchangelWelfare/KLUIArchangelWelfareItem", self.view.DataWelfRewardList, self, nil, true,function(_item) self.WelfareTaskItems[_item.view.root] = _item self.isWelfRewardEnd = true self:WelfRewardItemUpdateFunc(realIndex,_item.view.root) end) local kmlCtrl = item.view.root self.WelfareTaskItems[kmlCtrl] = item return kmlCtrl end function this:WelfRewardItemInitFunc(realIndex, kmlcontrol) end function this:WelfRewardItemUpdateFunc(realIndex, kmlCtrl) if not self.isWelfRewardEnd then return end local item = self.WelfareTaskItems[kmlCtrl] local luaIndex = realIndex + 1 local dt = self.WelfareTaskDatas[luaIndex] item:InitData(dt) item:RefreshUI() end ---注册UI事件和服务器消息 function this:RegistEvents() SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ANGLE_BENEFIT_INFO, self.ResAngelWelfareRewardInfoMessage, self) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_RECEIVE_ANGLE_BENEFIT_REWARD, self.RES_RECEIVE_ANGLE_BENEFIT_REWARD, self) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_SUBMIT_ANGLE_BENEFIT_TASK, self.RES_SUBMIT_ANGLE_BENEFIT_TASK, self) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ANGLE_BENEFIT_TASK_CHANGE, self.RES_ANGLE_BENEFIT_TASK_CHANGE, self) SL:RegisterLUAEvent(LUA_EVENT_MONEYCHANGE, self.CoinInfo_Change, self) end -- 下任务状态改变: 只用于刷新任务状态,进度 function this:CoinInfo_Change(_, message) self.curgoal = SL:GetBagItemCount(self.IntegralId) -- 个人积分 self:SetScheduleInfo() GUI:Text_setString(self.view.num, tostring(self.curgoal)) -- 当前花费 --GUI:Text_setString(self.view.num, "99") -- 当前花费 GUI:Image_setFillAmount(self.view.progress_attach, self.curgoal / self.MaxScheduleValue) end -- 下任务状态改变: 只用于刷新任务状态,进度 function this:ResRoleTaskChangeMessage(_, message) self:SetTaskInfo() end -- 上进度状态改变: ---@param message OpenServiceArchangelWelfareProtos.AngelWelfareRewardInfoRes function this:ResAngelWelfareRewardInfoMessage(_, message) self.AwardsGetid = message.awards -- 是否已领取[] self.ScheduleUseNumInfo = message.serverReward -- 已消耗次数[] self.curgoal = SL:GetBagItemCount(self.IntegralId) -- 个人积分 self.taskInfo = message.taskInfo self:SetScheduleInfo() self:SetTaskInfo(message.taskInfo) GUI:Text_setString(self.view.num, tostring(self.curgoal)) -- 当前花费 --GUI:Text_setString(self.view.num, "99") -- 当前花费 GUI:Image_setFillAmount(self.view.progress_attach, self.curgoal / self.MaxScheduleValue) end ---@param message number[] function this:RES_RECEIVE_ANGLE_BENEFIT_REWARD(_, message) self.AwardsGetid = message -- 是否已领取[] self:SetScheduleInfo() end ---@param message number[] function this:RES_SUBMIT_ANGLE_BENEFIT_TASK(_, message) if not self.taskInfo then self.taskInfo = {} end local typeList = {} if not table.isNullOrEmpty(self.taskInfo) then for i, v in pairs(self.taskInfo) do typeList[self.WelfareTaskConfig[tonumber(i)].type] = i end end for i, v in pairs(message) do if typeList[self.WelfareTaskConfig[tonumber(i)].type] ~= nil then self.taskInfo[typeList[self.WelfareTaskConfig[tonumber(i)].type]] = nil self.taskInfo[i] = v end end self:SetTaskInfo(self.taskInfo) end ---@param message number[] function this:RES_ANGLE_BENEFIT_TASK_CHANGE(_, message) self.taskInfo = message self:SetTaskInfo(self.taskInfo) end -- 奖励和任务都完成关闭入口 function this:CloseAngelWelfareReward() end ---界面显示时调用一次 function this:Show() end ---创建或者刷新界面数据时调用 function this:Refresh() ----大天使信息 --self:ResAngelWelfareRewardInfoMessage(_,{ -- awards = {1,2}, -- serverRewardInfo={{id="1",count="4"}}, -- taskInfo = {["201"]={nowCount=10,status="2"},["101"]={nowCount=0,status="1"}} --}) SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ANGLE_BENEFIT_INFO) GUI:setVisible(self.view.EndText, false) GUI:Text_setString(self.view.num, tostring(self.curgoal)) --当前花费 GUI:Image_setFillAmount(self.view.progress_attach, self.curgoal / self.MaxScheduleValue) end function this:SetScheduleInfo() ---@type cfg_angleBenefitReward_column[] self.ScheduleInfo = self.WelfareRewardConfig --进度节点,表结构修改适配 local lastbuyid = 0 local lastgetnumid = 0 local isGet = false local usenum = 0 local diffTime = 0 local falseTimestbl = {} --假数据全服数量 for k, Info in ipairs(self.ScheduleInfo) do Info.reqid = Info.id --请求求购买id Info.buyid = Info.payConsume[1] --消耗道具 Info.buynum = Info.payConsume[2] isGet = self:GetAwardsIsGet(Info.id) Info.isGet = isGet --是否已领取 usenum, diffTime = self:GetUseNum(Info.id, Info.limitTime) Info.usenum = usenum --消耗次数 Info.diffTime = diffTime --持续时间差值 Info.curgoal = self.curgoal --积分 Info.falseTimes = falseTimestbl[k + 1] --假数据全服数量 local count = Info.limitNum - usenum -- 剩余全服数量 --local showTime = endTime - Time.GetServerTime() local integraldiff = self.curgoal < Info.rewardPoint[2] if not isGet then if lastbuyid == 0 then if diffTime < 0 or count < 0 then lastbuyid = Info.id --最新的购买id end end if lastgetnumid == 0 then if diffTime > 0 and count > 0 and integraldiff then lastgetnumid = Info.id --最新的全服限量 end end end Info.lastbuyid = lastbuyid Info.lastgetnumid = lastgetnumid end --GUI:LoopScrollViewUpdateData() GUI:DataListUpdateData(self.view.DataScheduleRewardList) end -- 是否已领取 function this:GetAwardsIsGet(id) local isGet = false if not table.isNullOrEmpty(self.AwardsGetid) then for k, v in pairs(self.AwardsGetid) do if k == tostring(id) then isGet = true end end end return isGet end -- 消耗次数 function this:GetUseNum(id, day) local ONE_DAY_MILLISECOND = 86400000 local useNum = 0 local isbeforerefresh, differenceTime = SL:GetServerOpendifferenceTime() local serverTime = Time.GetServerTime() local endTime = (day) * ONE_DAY_MILLISECOND + SL:GetEnterRoleRes().openServerTime local diffTime = endTime - serverTime - differenceTime * 1000 if not table.isNullOrEmpty(self.ScheduleUseNumInfo) then for k, v in pairs(self.ScheduleUseNumInfo) do if k == tostring(id) then useNum = tonumber(v) break end end end return useNum, diffTime end ---@param allTasks number[] function this:SetTaskInfo(allTasks) table.clear(self.WelfareTaskDatas) if not table.isNullOrEmpty(allTasks) then for k, info in pairs(allTasks) do if info.status ~= "3" then local cfg = self.WelfareTaskConfig[tonumber(k)] table.insert(self.WelfareTaskDatas, { cfg = cfg, info = info }) end end end if table.count(self.WelfareTaskDatas) > 1 then table.sort(self.WelfareTaskDatas, function(a, b) return a.cfg.type < b.cfg.type end) end if table.count(self.WelfareTaskDatas) <= 0 then GUI:setVisible(self.view.EndText, true) end GUI:DataListUpdateData(self.view.DataWelfRewardList) end function this:Close() end return this