123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- ---@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
|