---@class KLActivityDetailPanel:UIKmlLuaPanelBase ---@field view KLActivityDetailPanelView local KLActivityDetailPanel = class(UIKmlLuaPanelBase) local this =KLActivityDetailPanel ---创建时调用一次 function this:Init() self.levelData_all_item = {} GUI:DataListInitData(self.view.levelList,function() return self:LevelDataListItemCountFunc() end,function(realIndex) return self:LevelDataListItemGetFunc(realIndex) end,function(realIndex, kmlcontrol) return self:LevelDataListItemInitFunc(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:LevelDataListItemUpdateFunc(realIndex, kmlcontrol) end) self.reward_all_item = {} GUI:DataListInitData(self.view.rewardList,function() return self:RewardDataListItemCountFunc() end,function(realIndex) return self:RewardDataListItemGetFunc(realIndex) end,function(realIndex, kmlcontrol) return self:RewardDataListItemInitFunc(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:RewardDataListItemUpdateFunc(realIndex, kmlcontrol) end) end ---创建或者刷新界面数据时调用 function this:Refresh() self.args = tonumber(self.args) SL.HideMainPanel() self:RefreshLevelList() end ---注册UI事件和服务器消息 function this:RegistEvents() SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_DEVIL_SQUARE_PANEL,self.RES_DEVIL_SQUARE_PANEL,self) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_BLOODY_CASTLE_PANEL,self.RES_BLOODY_CASTLE_PANEL,self) SL:RegisterLUAEvent(SELECT_LEVEL_STAGE,self.SELECT_LEVEL_STAGE,self) SL:RegisterLUAEvent(LUA_EVENT_BAG_CHANGE_AFTER,self.LUA_EVENT_BAG_CHANGE_AFTER,self) GUI:AddOnClickEvent(self.view.addCountBtn,self,self.OnCliCkAddCountBtn) GUI:AddOnClickEvent(self.view.enterBtn,self,self.OnCliCkEnterBtn) GUI:AddOnClickEvent(self.view.desBtn,self,self.OnCliCkDesBtn) GUI:AddOnClickEvent(self.view.closeBtn,self,self.OnCliCkCloseBtn) GUI:AddOnClickEvent(self.view.bgClose,self,self.OnCliCkCloseBtn) GUI:AddOnClickEvent(self.view.ticketBtn,self,self.OnCliCkTicketBtn) end function this:RefreshLevelList() GUI:setVisible(self.view.bloodTitle,self.args == EActivityType.BloodyCastle) GUI:setVisible(self.view.devilTitle,self.args == EActivityType.DevilSquare) GUI:setVisible(self.view.bloodTitleicon,self.args == EActivityType.BloodyCastle) GUI:setVisible(self.view.devilTitleicon,self.args == EActivityType.DevilSquare) local scale = self.args == EActivityType.BloodyCastle and 0.6 or 1 local y = self.args == EActivityType.BloodyCastle and -11 or 0 GUI:setScale(self.view.ticketModel,scale) GUI:setScale(self.view.ticketModel,scale) GUI:setPositionY(self.view.ticketModel,y) local tblList = SL:GetConfigTable("cfg_rep") self.levelData = {} self.curSelectLevelStage = 1 local index = 0 local level = SL:GetMetaValue(EMetaVarGetKey.LEVEL) ---@param v cfg_rep_column for i, v in pairs(tblList) do if self.args == v.type then local isMeet = level >= v.level[1] and level <= v.level[2] if isMeet and self.curSelectLevelStage < v.repLevel then self.curSelectLevelStage = v.repLevel index = #self.levelData + 1 end table.insert(self.levelData,v) end end local h = #self.levelData*53 GUI:setContentSize(self.view.levelLayout,165,h) ---@type cfg_rep_column local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel") if self.args == EActivityType.DevilSquare then SL:SendLuaNetMsg(LuaMessageIdToSever.GET_DEVIL_SQUARE_PANEL,tbl.id) else SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_BLOODY_CASTLE_PANEL,tbl.id) end GUI:DataListUpdateData(self.view.levelList) GUI:setPositionY(self.view.levelLayout,index>7 and -67+ (index-8)*53+25 or -67) end function this:LevelDataListItemCountFunc() return #self.levelData end function this:LevelDataListItemGetFunc(realIndex) local data = self.levelData[realIndex + 1] local item = GUI:UIPanel_Open("dev/outui/Activity/Item/KLLevel/KLLevelItem",self.view.levelList,self,data,true) self.levelData_all_item[item.view.root] = item return item.view.root end function this:LevelDataListItemInitFunc(realIndex, kmlcontrol) end function this:LevelDataListItemUpdateFunc(realIndex, kmlcontrol) local data = self.levelData[realIndex + 1] self.levelData_all_item[kmlcontrol]:RefreshItem(data) end function this:RES_BLOODY_CASTLE_PANEL(id,message) self:RefreshCopyInfo(self.curSelectLevelStage,message["2"],message["3"],tonumber(message["4"])) end function this:RES_DEVIL_SQUARE_PANEL(id,message) self:RefreshCopyInfo(self.curSelectLevelStage,message["2"],message["3"],tonumber(message["4"])) end ---@param data cfg_rep_column function this:SELECT_LEVEL_STAGE(_,data) if self.curSelectLevelStage ~= data.repLevel then self.curSelectLevelStage = data.repLevel ---@type cfg_rep_column local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel") SL:SendLuaNetMsg(LuaMessageIdToSever.GET_DEVIL_SQUARE_PANEL,tbl.id) end end function this:LUA_EVENT_BAG_CHANGE_AFTER() self:RefreshCostItem() end function this:RefreshCopyInfo(levelStage,leftCount,isOpen,time) self.leftCount = leftCount self.isOpen = isOpen if SL:HasConfigTwoKeys("cfg_rep",self.args,levelStage,"type","repLevel") then ---@type cfg_rep_column local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,levelStage,"type","repLevel") local levelStr = string.split(tbl.name[1]," ") GUI:Text_setString(self.view.level,levelStage.."级(".. levelStr[2] ..")") local definse = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", tbl.recommend[1]) local isMeet = definse >= tbl.recommend[2] local color = isMeet and "#28E529" or "#ff2323" local recommend = isMeet and tbl.recommend[2] or tbl.recommend[2] .. "(您的防御值低于推荐值)" recommend = GUIUtil.GetColorText(recommend,color) GUI:Text_setString(self.view.defense,recommend) ---@type cfg_activity_rule_column local activityTbl = SL:GetConfigMultiKeys("cfg_activity_rule",self.args,"id") if not isOpen then local countdown = time-SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME) countdown = math.floor(countdown/1000) GUI:SetControl_time(self.view.nextOpenTime,countdown) end GUI:Text_setString(self.view.openTime,activityTbl.timeText) GUI:setVisible(self.view.nextOpenTime,not isOpen) GUI:setVisible(self.view.openTxt,isOpen) self:RefreshCostItem() self:RefreshReward() isMeet = leftCount > 0 color = isMeet and "#28E529" or "#ff2323" GUI:Text_setString(self.view.leftcount,GUIUtil.GetColorText(leftCount.."次",color)) end end function this:RefreshCostItem() ---@type cfg_rep_column local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel") local ownerTicket = SL:GetBagItemCount(tbl.itemId[1]) isMeet = tbl.itemId[2] <= ownerTicket color = isMeet and "#28E529" or "#ff2323" GUI:Text_setString(self.view.ticketCount,GUIUtil.GetColorText(ownerTicket.."/"..tbl.itemId[2],color)) ---@type cfg_item_column local itemTbl = SL:GetConfig("cfg_item",tbl.itemId[1],"id") ---@type cfg_model_charactor_column local modelTbl = SL:GetConfig("cfg_model_charactor",itemTbl.shape[1],"id") GUI:Model_setSrc(self.view.ticketModel,modelTbl.path) end function this:RefreshReward() ---@type cfg_rep_column local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel") self.rewardData = tbl.UIreward GUI:DataListUpdateData(self.view.rewardList) end function this:RewardDataListItemCountFunc() return #self.rewardData end function this:RewardDataListItemGetFunc(realIndex) local data = self.rewardData[realIndex + 1] local message = {cfgId = data[1],count="",width = 70,height=70} local item = GUI:UIPanel_Open("dev/outui/Activity/Item/KLItem/KLItemItem",self.view.rewardList,self,message,true) self.reward_all_item[item.view.root] = item return item.view.root end function this:RewardDataListItemInitFunc(realIndex, kmlcontrol) end function this:RewardDataListItemUpdateFunc(realIndex, kmlcontrol) local data = self.rewardData[realIndex + 1] self.reward_all_item[kmlcontrol]:RefreshItem(data[1],"") end function this:OnCliCkAddCountBtn() ---@type cfg_rep_column local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel") SL:CommonItemGetPath(nil,tbl.itemId[1]) end function this:OnCliCkEnterBtn() local isInTeam = SL:GetMetaValue(EMetaVarGetKey.TEAM_IS_IN) if isInTeam then local isNoLeader = SL:GetMetaValue(EMetaVarGetKey.TEAM_IS_TEAM_LEADER) if not isNoLeader then SL:TipMessage("您不是队长",1,NoticeType.NoticeMid) return end end ---@type cfg_rep_column local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel") local ownerTicket = SL:GetBagItemCount(tbl.itemId[1]) local tip if not self.isOpen then tip = "副本未开启" elseif ownerTicket < tbl.itemId[2] then tip = "门票不足" ---@type cfg_rep_column SL:CommonItemGetPath(nil,tbl.itemId[1]) elseif self.leftCount <= 0 then tip = "今日次数不足" end if not tip then ---进入副本 SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ENTER_DUPLICATE,tbl.id) else SL:TipMessage(tip,1,NoticeType.NoticeMid) end end function this:OnCliCkDesBtn() local des = "" local title = "" if self.args == EActivityType.DevilSquare then des = "1、开启时间:从1:00开始,每2小时开启一场一天总开启12场。\n2、不同等级可进入不同层恶魔广场,每次进入恶魔广场需消耗对应数量的恶魔通行证。\n3、恶魔广场内怪物密集、刷新频率高、击杀怪物经验多,此副本内挂机打怪可获得大量经验。\n4.恶魔广场可组队进入,击杀怪物均分经验。\n5.组队进入恶魔广场后,击杀怪物可获得积分,结算时根据积分可获得额外奖励。\n6.根据积分数量对组队成员进行排名,恶魔广场结算时根据排名前三名可获得额外奖励。" title = "恶魔广场" elseif self.args == EActivityType.BloodyCastle then des = "1、开启时间:从1:00开始,每2小时开启一场一天总开启12场。\n2、不同等级可进入不同层血色城堡,每次进入血色城堡需消耗1个透明披风。\n3、血色城堡内怪物密集、刷新频率高、击杀怪物经验多,此副本内挂机打怪可获得大量经验\n4、完成血色城堡任务:攻破城门、打开水晶棺交还大天使之武器后,可额外获得奖励。\n5、血色城堡可组队一起进入,击杀怪物经验平分。队伍内人数越多,经验加成越高,2人+20%,3人队+40%,4人队+60%,5人队+80%,怪物经验共享有效范围为20码。\n6、为保证队伍其他成员收益,此副本内限制组队玩家对金币/白装的拾取设置,单人进入不限制。" title = "血色城堡" end GUI:UIPanel_Open("dev/outui/Activity/Panel/KLDescribeDetail/KLDescribeDetailPanel",nil,nil,{title=title,content=des}) end function this:OnCliCkCloseBtn() GUI:UIPanel_Close("dev/outui/Activity/Panel/KLActivityDetail/KLActivityDetailPanel") SL.ShowMainPanel() end function this:OnCliCkTicketBtn() ---@type cfg_rep_column local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel") SL:OpenTips(nil, tbl.itemId[1]) end function this:Close() SL.ShowMainPanel() end return this