---@class KLActivityComboPanel:UIKmlLuaPanelBase
---@field view KLActivityComboPanelView
local KLActivityComboPanel = class(UIKmlLuaPanelBase)
local this =KLActivityComboPanel
function this:AsyncLoadUI()
end
---创建时调用一次
function this:Init()
self.activityType = 24001
self.activityCfg = {}
self.levelData_all_item = {}
self.player_challenge_time = 0
GUI:DataListInitData(self.view.levelList, function()
return self:LevelDataListItemCountFunc()
end, function(realIndex)
return self:LevelDataListItemGetFunc(realIndex)
end, function(realIndex, kmlCtrl)
return self:LevelDataListItemInitFunc(realIndex, kmlCtrl)
end, function(realIndex, kmlCtrl)
return self:LevelDataListItemUpdateFunc(realIndex, kmlCtrl)
end)
self.reward_all_item = {}
GUI:DataListInitData(self.view.rewardList, function()
return self:RewardDataListItemCountFunc()
end, function(realIndex)
return self:RewardDataListItemGetFunc(realIndex)
end, function(realIndex, kmlCtrl)
return self:RewardDataListItemInitFunc(realIndex, kmlCtrl)
end, function(realIndex, kmlCtrl)
return self:RewardDataListItemUpdateFunc(realIndex, kmlCtrl)
end)
--SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_BLOODY_CASTLE_PANEL, tbl.id)
end
--region levelList
function this:LevelDataListItemCountFunc()
return #self.levelData
end
function this:LevelDataListItemGetFunc(realIndex)
end
function this:LevelDataListItemInitFunc(realIndex, kmlcontrol)
end
function this:LevelDataListItemUpdateFunc(realIndex, kmlCtrl)
---@type cfg_rep_column
local data = self.levelData[realIndex + 1]
local KLLevel = GUI:GetChildControl(self.view.levelList, realIndex, "KLLevel")
local noClick = GUI:GetChildControl(self.view.levelList, realIndex, "noClick")
local levelName = GUI:GetChildControl(self.view.levelList, realIndex, "levelName")
if #data.skill == 0 then
GUI:Text_setString(levelName, data.name[1])
GUI:setVisible(noClick, false)
GUI:setSwallowTouches(KLLevel,false)
elseif self.comboSkillLevel >= data.skill[1][3] then
GUI:Text_setString(levelName, data.name[1] .. " 连击技Lv." .. data.skill[1][3])
GUI:setVisible(noClick, false)
GUI:setSwallowTouches(KLLevel,false)
else
GUI:Text_setString(levelName, "连击技Lv." .. data.skill[1][3] .. "开启")
GUI:setVisible(noClick, true)
GUI:setSwallowTouches(KLLevel,true)
end
GUI:SetIsOnWithoutNotify(KLLevel, data.id == self.nowSelectLevelId)
GUI:SetToggleOnValueChange(KLLevel, self, self.LevelOnToggleValueChange, data.id)
end
function this:LevelOnToggleValueChange(_, data, eventData)
self:RefreshLevelMainInfo(data)
end
--endregion
--region rewardList
function this:RewardDataListItemCountFunc()
return #self.rewardData
end
function this:RewardDataListItemGetFunc(realIndex)
end
function this:RewardDataListItemInitFunc(realIndex, kmlcontrol)
end
function this:RewardDataListItemUpdateFunc(realIndex, kmlcontrol)
local reward = self.rewardData[realIndex + 1]
local pass_reward = GUI:GetChildControl(self.view.rewardList, realIndex, 'pass_reward')
local img_pass_reward_click = GUI:GetChildControl(self.view.rewardList, 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, reward[1])
end
function this:ShowItemTips(_, id)
SL:OpenTips(nil, id)
end
--endregion
---注册UI事件和服务器消息
function this:RegistEvents()
GUI:AddOnClickEvent(self.view.addCountBtn, self, self.OnClickAddCountBtn)
GUI:AddOnClickEvent(self.view.enterBtn, self, self.OnClickEnterBtn)
GUI:AddOnClickEvent(self.view.sweepBtn, self, self.OnClickSweepBtn)
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)
GUI:AddOnClickEvent(self.view.ClickMask, self, self.ClickMaskOnClick)
GUI:AddOnClickEvent(self.view.BtnBuy, self, self.BtnBuyOnClick)
GUI:Input_SetOnEndEdit(self.view.InputFieldLevel, self, self.InputFieldLevelOnEndEdit)
GUI:AddOnClickEvent(self.view.BtnLevelAdd, self, self.BtnLevelAddOnClick)
GUI:AddOnClickEvent(self.view.BtnLevelMinus, self, self.BtnLevelMinusOnClick)
SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_GET_ACTIVITY_COUNT, self.RES_GET_ACTIVITY_COUNT, self)
SL:RegisterLuaNetMsg(LuaMessageIdToClient.COMBO_TEST_PANEL_INFO, self.RES_COMBO_TEST_PANEL_INFO, self)
SL:RegisterLUAEvent(LUA_EVENT_MONEYCHANGE, self.LUA_EVENT_BAG_CHANGE_AFTER, self)
end
---界面显示时调用一次
function this:Show()
end
---创建或者刷新界面数据时调用
function this:Refresh()
SL.HideMainPanel()
GUI:setVisible(self.view.TextTotalPrice, false)
GUI:setVisible(self.view.TotalPrice, false)
GUI:Text_setString(self.view.BtnText, "扫荡")
GUI:setVisible(self.view.sweep_panel, false)
self.comboSkillLevel = InfoManager.dragonSoulSkillInfo.comboSkillLevel and InfoManager.dragonSoulSkillInfo.comboSkillLevel or 0
self:RefreshLevelList()
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_ACTIVITY_COUNT, self.activityType)
SL:SendLuaNetMsg(LuaMessageIdToSever.COMBO_TEST_PANEL_INFO)
end
function this:RefreshLevelList()
local tblList = SL:GetConfigTable("cfg_rep")
self.levelData = {}
---@param v cfg_rep_column
for i, v in pairs(tblList) do
if self.activityType == v.type then
self.activityCfg[v.id] = v
self.levelData[v.repLevel] = v
end
end
GUI:setContentSize(self.view.levelLayout,165,53 * #self.levelData)
end
function this:RefreshLevelMainInfo(id)
self.nowSelectLevelId = id
---@type cfg_rep_column
local data = self.activityCfg[id]
self.nowSelectLevel = data.repLevel
if #data.skill > 0 then
GUI:Text_setString(self.view.level, data.repLevel .. "级(连击技能Lv." .. data.skill[1][3] .. ")")
else
GUI:Text_setString(self.view.level, data.repLevel .. "级")
end
--local defense = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", data.recommend[1])
--local isMeet = defense >= data.recommend[2]
--local color = isMeet and "#28E529" or "#ff2323"
--local recommend = isMeet and data.recommend[2] or data.recommend[2] .. "(您的防御值低于推荐值)"
local isMeet = data.repLevel <= self.comboSkillLevel
local color = isMeet and "#28E529" or "#ff2323"
local recommend = data.repLevel .. "级"
recommend = GUIUtil.GetColorText(recommend, color)
GUI:Text_setString(self.view.defense, recommend)
self:RefreshItemCount()
self.rewardData = data.UIreward
GUI:DataListUpdateData(self.view.rewardList)
if self.nowSelectLevel > self.nowMaxLevel + 1 then
GUI:setVisible(self.view.enterBtn, false)
GUI:setVisible(self.view.text_btnTips, true)
else
GUI:setVisible(self.view.enterBtn, true)
GUI:setVisible(self.view.text_btnTips, false)
end
if self.nowSelectLevelId <= self.nowMaxLevelId then
GUI:setVisible(self.view.sweepBtn, true)
else
GUI:setVisible(self.view.sweepBtn, false)
end
end
function this:RefreshItemCount()
local data = self.activityCfg[self.nowSelectLevelId]
local cost = SL:GetBagItemCount(data.itemId[1])
local text
if cost >= data.itemId[2] then
text = "" .. cost .. ""
else
text = "" .. cost .. ""
end
GUI:Text_setString(self.view.ticketCount, text .. "/" .. data.itemId[2])
GUI:Item_setItemId(self.view.ticketItem, data.itemId[1])
end
function this:OnClickAddCountBtn()
---@type cfg_rep_column
local tbl = SL:GetConfigMultiKeys("cfg_rep", self.activityType, self.nowSelectLevel, "type", "repLevel")
SL:CommonItemGetPath(nil, tbl.itemId[1])
end
function this:OnClickEnterBtn()
local isInTeam = SL:GetMetaValue(EMetaVarGetKey.TEAM_IS_IN)
if isInTeam then
return
end
---@type cfg_rep_column
local tbl = self.activityCfg[self.nowSelectLevelId]
if not tbl then
return
end
local ownerTicket = SL:GetBagItemCount(tbl.itemId[1])
local tip
if ownerTicket < tbl.itemId[2] then
tip = "门票不足"
---@type cfg_rep_column
SL:CommonItemGetPath(nil, tbl.itemId[1])
elseif self.player_challenge_time <= 0 then
tip = "今日次数不足"
end
if not tip then
---进入副本
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ENTER_DUPLICATE, tbl.id)
self:OnClickCloseBtn()
else
SL:TipMessage(tip, 1, NoticeType.NoticeMid)
end
end
function this:OnClickSweepBtn()
if PrivilegeCardManager.isSaoDangOpen() then
if self.player_challenge_time > 0 then
GUI:setVisible(self.view.sweep_panel, true)
GUI:Text_setString(self.view.InputFieldLevel, "1")
GUI:Text_setString(self.view.sweepCount, "剩余次数:" .. self.player_challenge_time)
else
SL:TipMessage( SL:GetConfig('cfg_string',493).text, 1, NoticeType.NoticeMid )
end
else
SL:CommonTipsMessage({ stringTblID = 492, showTips = "", ui = self, sureBtnText = "确定", cancelBtnText = "取消",
callback = self.OpenFirsh })
end
end
function this:OpenFirsh()
GUI:UIPanel_Close("dev/outui/Activity/Panel/KLActivityCombo/KLActivityComboPanel")
GUI:UIPanel_Open("dev/outui/ShopMain/Panel/KLShopMain/KLShopMainPanel",nil,nil,{2} )
end
function this:OnClickDesBtn()
local helpCfg = SL:GetConfig("cfg_rule_text", 202)
if helpCfg then
SL:CommonStrTipsMessage({ title = helpCfg.menutxt, str = helpCfg.location })
end
end
function this:OnClickCloseBtn()
GUI:UIPanel_Close("dev/outui/Activity/Panel/KLActivityCombo/KLActivityComboPanel")
end
function this:OnClickTicketBtn()
---@type cfg_rep_column
local tbl = SL:GetConfigMultiKeys("cfg_rep", self.activityType, self.nowSelectLevel, "type", "repLevel")
SL:OpenTips(nil, tbl.itemId[1])
end
function this:BtnBuyOnClick()
local count = tonumber(GUI:Text_getString(self.view.InputFieldLevel))
if self.player_challenge_time > 0 and count > 0 then
---@type cfg_rep_column
local tbl = self.activityCfg[self.nowSelectLevelId]
local ownerTicket = SL:GetBagItemCount(tbl.itemId[1])
if ownerTicket < tbl.itemId[2] * count then
SL:TipMessage("门票不足", 1, NoticeType.NoticeMid)
else
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_SWEEP_THROUGH_DUNGEONS, { self.nowSelectLevelId, count })
GUI:setVisible(self.view.sweep_panel, false)
end
end
end
function this:InputFieldLevelOnEndEdit(_, _, eventData)
local text = eventData[1]
GUI:Text_setString(self.view.InputFieldLevel, tostring(text))
self:CheckInput()
end
function this:BtnLevelAddOnClick()
local inputNum = tonumber(GUI:Text_getString(self.view.InputFieldLevel))
GUI:Text_setString(self.view.InputFieldLevel, tostring(inputNum + 1))
self:CheckInput()
end
function this:BtnLevelMinusOnClick()
local inputNum = tonumber(GUI:Text_getString(self.view.InputFieldLevel))
inputNum = inputNum - 1
GUI:Text_setString(self.view.InputFieldLevel, tostring(inputNum))
self:CheckInput()
end
function this:CheckInput()
local inputStr = GUI:Text_getString(self.view.InputFieldLevel)
local inputNum = tonumber(inputStr)
if not inputNum then
GUI:Text_setString(self.view.InputFieldLevel, "1")
return
end
if inputNum >= self.player_challenge_time then
GUI:Text_setString(self.view.InputFieldLevel, tostring(self.player_challenge_time))
return
end
if inputNum <= 0 then
GUI:Text_setString(self.view.InputFieldLevel, "0")
return
end
end
function this:ClickMaskOnClick()
GUI:setVisible(self.view.sweep_panel, false)
end
function this:RES_GET_ACTIVITY_COUNT(_, message)
if tonumber(message["1"]) == self.activityType then
self.player_challenge_time = message["2"]
if self.maxCount then
self:RefreshChallengeTime()
end
end
end
function this:RES_COMBO_TEST_PANEL_INFO(_, message)
self.nowMaxLevelId = message.id
self.nowMaxLevel = message.level
self.maxCount = message.count
self:GetNowCanChallengeLevel()
self:RefreshLevelMainInfo(self.nowSelectLevelId)
GUI:DataListUpdateData(self.view.levelList)
if self.nowMaxLevel ~= 0 then
---刷新滚动条位置
if #self.levelData - self.nowMaxLevel < 7 then
local offset = 53 * #self.levelData - 395
if offset < 0 then
offset = 0
end
GUI:setPositionY(self.view.levelLayout, offset)
else
GUI:setPositionY(self.view.levelLayout, (self.nowMaxLevel - 1) * 53)
end
end
if self.player_challenge_time then
self:RefreshChallengeTime()
end
end
function this:GetNowCanChallengeLevel()
---@type cfg_rep_column
local data = self.levelData[self.nowMaxLevel + 1]
if data and (#data.skill == 0 or data.skill[1][3] <= self.comboSkillLevel) then
self.nowSelectLevelId = data.id
else
self.nowSelectLevelId = self.nowMaxLevelId
end
end
function this:LUA_EVENT_BAG_CHANGE_AFTER()
if self.timer then
SL:UnSchedule(self.timer)
end
self.timer = SL:ScheduleOnce(0.1, function()
self:RefreshItemCount()
end)
end
function this:RefreshChallengeTime()
local text
if self.player_challenge_time <= 0 then
text = "" .. 0 .. ""
else
text = self.player_challenge_time
end
GUI:Text_setString(self.view.countTxt, text .. "/" .. self.maxCount .. "次")
end
function this:Hide()
end
function this:Close()
if self.timer then
SL:UnSchedule(self.timer)
self.timer = nil
end
GUI:setVisible(self.view.TextTotalPrice, true)
GUI:setVisible(self.view.TotalPrice, true)
GUI:Text_setString(self.view.BtnText, "购买")
SL.ShowMainPanel()
end
return this