---@class KLBraveTrialsPanel:UIKmlLuaPanelBase
---@field view KLBraveTrialsPanelView
local KLBraveTrialsPanel = class(UIKmlLuaPanelBase)
local this =KLBraveTrialsPanel
---创建时调用一次
function this:Init()
self.braveType = 12001
---@type cfg_global_column
local global = SL:GetConfig("cfg_repGlobal", 12001001)
if global then
local trialsInfo = global.value
local trialsTbl = string.split(trialsInfo, '#')
self.firstLevel = tonumber(trialsTbl[1])
self.finalLevel = tonumber(trialsTbl[2])
self.totalLevel = self.finalLevel - self.firstLevel + 1
end
GUI:OSAScrollView_Initialized(self.view.osascroll_bravetrials,self.ItemGetFun,self.ItemUpdateFun,self)
GUI:OSAScrollView_SetItemSizeGetFun(self.view.osascroll_bravetrials,self.ItemSizeGetFun,self)
GUI:DataListInitData( self.view.list_pass_reward,function()
return self:ListItemCountFunc2()
end,function(realIndex)
return self:ListItemGetFunc2(realIndex)
end,function(realIndex, kmlcontrol)
return self:ListItemInitFunc2(realIndex, kmlcontrol)
end, function(realIndex, kmlcontrol)
return self:ListItemUpdateFunc2(realIndex, kmlcontrol)
end)
end
function this:ItemGetFun()
local item = GUI:UIPanel_Open("dev/outui/BraveTrials/Item/KLBraveTrials/KLBraveTrialsItem", self.view.list_brave_trials, self, { firstLevel = self.firstLevel, finalLevel = self.finalLevel }, true)
return item
end
---@param item KLBraveTrialsItem
function this:ItemUpdateFun(item, index)
---@type cfg_rep_column
local data = self.braveTrialsShowTbl[index + 1]
if data.id == self.player_challenge_select then
item:RefreshUI(data, true)
self.select_item = item
else
item:RefreshUI(data)
end
end
function this:ItemSizeGetFun(index)
if index == 0 then
return 443
elseif index == self.finalLevel - self.firstLevel then
return 280
else
return 125
end
end
function this:ListItemCountFunc2()
return #self.passReward
end
function this:ListItemGetFunc2(realIndex)
end
function this:ListItemInitFunc2(realIndex, kmlcontrol)
end
function this:ListItemUpdateFunc2(realIndex, kmlcontrol)
local reward = self.passReward[realIndex + 1]
local pass_reward = GUI:GetChildControl(self.view.list_pass_reward,realIndex,'pass_reward')
local img_pass_reward_click = GUI:GetChildControl(self.view.list_pass_reward,realIndex,'img_pass_reward_click')
GUI:Item_setItemId(pass_reward, reward[1])
GUI:Item_UpdataData(pass_reward, { itemcount = reward[2] })
GUI:AddOnClickEvent(img_pass_reward_click, self, self.ShowItemTips, { id = reward[1] })
end
function this:ShowItemTips(_, eventData)
SL:OpenTips(nil, eventData.id)
end
---注册UI事件和服务器消息
function this:RegistEvents()
GUI:AddOnClickEvent(self.view.btn_start_challenge, self, self.StartChallenge)
GUI:AddOnClickEvent(self.view.btn_close, self, self.CloseSelf)
GUI:AddOnClickEvent(self.view.img_reward_click, self, self.ReceiveFinalReward)
SL:RegisterLuaNetMsg(LuaMessageIdToClient.BRAVE_TEST_PANEL_INFO, self.BRAVE_TEST_PANEL_INFO, self)
SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_GET_ACTIVITY_COUNT, self.RES_GET_ACTIVITY_COUNT, self)
SL:RegisterLuaNetMsg(LuaMessageIdToClient.BRAVE_TEST_STAGE_REWARD, self.BRAVE_TEST_STAGE_REWARD, self)
end
---创建或者刷新界面数据时调用
function this:Refresh()
SL:HideMainPanel()
---@type cfg_rep_column[]
local tbl = SL:GetConfigTable("cfg_rep")
---@type cfg_rep_column[]
self.braveTrialsTbl = {}
self.braveTrialsShowTbl = {}
for i, v in ipairs(tbl) do
if v.type == self.braveType then
self.braveTrialsTbl[#self.braveTrialsTbl + 1] = v
end
end
table.sort(self.braveTrialsTbl, function(a, b)
return a.id > b.id
end)
self.select_control = nil
SL:SendLuaNetMsg(LuaMessageIdToSever.BRAVE_TEST_PANEL_INFO)
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_ACTIVITY_COUNT, self.braveType)
end
function this:RefreshLevelMainInfo(levelId, item)
---点击正好点到复用的item时,不隐藏点击背景
if self.select_item and self.select_item ~= item then
self.select_item:HideChoseBG()
end
self.select_item = item
---@type cfg_rep_column
local levelInfo = SL:GetConfig("cfg_rep", levelId)
self.player_challenge_select = levelInfo.id
---@type cfg_monster_column
local monster = SL:GetConfig("cfg_monster", levelInfo.monsterUI)
---@type cfg_model_monster_column
local monster_model = SL:GetConfig("cfg_model_monster", monster.appr)
GUI:Model_setSrc(self.view.model_show_monster, monster_model.path)
self.passReward = levelInfo.reward
GUI:DataListUpdateData(self.view.list_pass_reward)
GUI:Text_setString(self.view.text_current_level, levelInfo.name[1])
GUI:SetActive(self.view.btn_start_challenge, true)
local open_server_day = 0
if SL:GetEnterRoleRes() and SL:GetEnterRoleRes().openServerTime then
local defTime = os.time() - SL:GetEnterRoleRes().openServerTime / 1000
if defTime > 0 then
open_server_day = math.ceil(defTime / 86400)
end
end
local player_level = SL:GetMetaValue("LEVEL")
if open_server_day >= levelInfo.startDay then
if player_level >= levelInfo.level[1] and player_level <= levelInfo.level[2] then
GUI:Text_setString(self.view.text_challenge_tips, " ")
GUI:Button_setGrey(self.view.btn_start_challenge, false)
GUI:Button_setBright(self.view.btn_start_challenge, true)
else
GUI:Text_setString(self.view.text_challenge_tips, "开启等级:" .. levelInfo.level[1])
GUI:Button_setGrey(self.view.btn_start_challenge, true)
GUI:Button_setBright(self.view.btn_start_challenge, false)
end
else
GUI:Text_setString(self.view.text_challenge_tips, "开服第" .. levelInfo.startDay .. "天开启")
GUI:Button_setGrey(self.view.btn_start_challenge, true)
GUI:Button_setBright(self.view.btn_start_challenge, false)
end
if self.player_challenge_level ~= levelInfo.id or self.passLevel then
GUI:SetActive(self.view.btn_start_challenge, false)
end
self:RefreshChallengeTime()
end
function this:RefreshChallengeTime()
if self.player_challenge_time then
if self.player_challenge_time > 0 then
GUI:Text_setString(self.view.text_pass_times, "剩余通关次数:" .. self.player_challenge_time .. "")
else
GUI:Text_setString(self.view.text_pass_times, "剩余通关次数:" .. self.player_challenge_time .. "")
GUI:Button_setGrey(self.view.btn_start_challenge, true)
GUI:Button_setBright(self.view.btn_start_challenge, false)
end
end
end
function this:RefreshFinalReward()
---@type cfg_global_column
local global = SL:GetConfig("cfg_repGlobal", 12001002)
if global then
local src = string.split(global.value, '#')
self.finalReward = tonumber(src[2])
self.stageLevel = src[1]
GUI:Item_setItemId(self.view.item_stage_reward, self.finalReward)
---@type cfg_global_column
local img = SL:GetConfig("cfg_repGlobal", 12001003)
if img then
GUI:Image_loadTexture(self.view.img_stage_reward, string.split(img.value, '#')[2], "Atlas/KLBraveTrialsUI.spriteatlas")
end
end
end
function this:StartChallenge()
local map_id = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
local mapTab = SL:GetConfig("cfg_map_info",map_id)
if mapTab.nopositionmove and mapTab.nopositionmove == 1 then
SL:MessageTip({ id = 116 })--"副本中无法传送",
return
end
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ENTER_DUPLICATE, self.player_challenge_level)
self:CloseSelf()
end
function this:BRAVE_TEST_PANEL_INFO(_, message)
local info
if SL:HasConfigTwoKeys("cfg_rep", self.braveType, message.level, "type", "repLevel") then
---@type cfg_rep_column
info = SL:GetConfigTwoKeys("cfg_rep", self.braveType, message.level, "type", "repLevel")
end
if not info then
info = SL:GetConfig("cfg_rep", self.finalLevel)
self.passLevel = true
else
self.passLevel = false
end
self.getStageReward = message.stageReward
if self.getStageReward then
GUI:setVisible(self.view.text_receive_reward, true)
GUI:Image_setAlpha(self.view.img_reward_click, 1)
else
GUI:setVisible(self.view.text_receive_reward, false)
GUI:Image_setAlpha(self.view.img_reward_click, 0)
end
self.player_challenge_level = info.id
self:RefreshLevelMainInfo(self.player_challenge_level)
self:RefreshFinalReward()
self.braveTrialsShowTbl = {}
for i, v in ipairs(self.braveTrialsTbl) do
if v.id >= self.player_challenge_level then
self.braveTrialsShowTbl[#self.braveTrialsShowTbl + 1] = v
end
end
GUI:OSAScrollView_RefreshList(self.view.osascroll_bravetrials, #self.braveTrialsShowTbl)
local index = self.totalLevel - message.level
if index < 0 then
index = 0
end
GUI:OSAScrollView_ScrollTo(self.view.osascroll_bravetrials, #self.braveTrialsShowTbl - 1)
end
function this:RES_GET_ACTIVITY_COUNT(_, message)
if message["1"] == self.braveType then
self.player_challenge_time = message["2"]
self:RefreshChallengeTime()
end
end
function this:ReceiveFinalReward()
if self.passLevel and not self.getStageReward then
SL:SendLuaNetMsg(LuaMessageIdToSever.BRAVE_TEST_STAGE_REWARD)
elseif not self.passLevel then
SL:OpenTips(nil, self.finalReward)
end
end
function this:BRAVE_TEST_STAGE_REWARD(_,message)
local reward = {}
for i, v in pairs(message) do
reward[tonumber(i)] = tonumber(v)
end
SL:OpenRewardTips(reward,0)
GUI:setVisible(self.view.text_receive_reward, true)
GUI:Image_setAlpha(self.view.img_reward_click, 1)
end
function this:CloseSelf()
GUI:UIPanel_Close("dev/outui/BraveTrials/Panel/KLBraveTrials/KLBraveTrialsPanel")
end
function this:Close()
self.trialsItemList = {}
SL.ShowMainPanel()
end
return this