123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- ---@class KLLoranSiegeCopyTaskPanel:UIKmlLuaPanelBase
- ---@field view KLLoranSiegeCopyTaskPanelView
- local KLLoranSiegeCopyTaskPanel = class(UIKmlLuaPanelBase)
- local this =KLLoranSiegeCopyTaskPanel
- function this:AsyncLoadUI()
- end
- ---创建时调用一次
- function this:Init()
- InfoManager.loranSiegeInfo.isInCopy = true
- SL:KeepOpenPanel("KLLoranSiegeCopyTaskPanel",true)
- self.nowCount = nil
- self.loadingCount = nil
- self.nowUnion = nil
- end
- function this:UnScheduleTimer()
- if self.countDown then
- SL:UnSchedule(self.countDown)
- end
- self.countDown = nil
- end
- ---注册UI事件和服务器消息
- function this:RegistEvents()
- GUI:AddOnClickEvent(self.view.exitBtn,self,self.Exit)
- GUI:AddOnClickEvent(self.view.TaskButton,self,self.TaskButtonOnClick)
- SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_QUIT_DUPLICATE,self.RES_QUIT_SUCCESS,self)
- GUI:AddOnClickEvent(self.view.HelpButton, self, self.OnClickHelpButton)
- SL:RegisterLUAEvent(LUA_EVENT_LOGIN_MAP, self.LUA_EVENT_LOGIN_MAP, self) --登录进入地图
- SL:RegisterLUAEvent(LUA_EVENT_ROLAND_SIEGE_STATE_INFO_CHANGE, self.LUA_EVENT_ROLAND_SIEGE_STATE_INFO_CHANGE , self)
- SL:RegisterLUAEvent(LUA_EVENT_ROLAND_SIEGE_TASK_INFO_CHANGE, self.LUA_EVENT_ROLAND_SIEGE_TASK_INFO_CHANGE , self)
- SL:RegisterLUAEvent(LUA_EVENT_ROLAND_SIEGE_ROLAND_PROGRESS_INFO_CHANGE, self.LUA_EVENT_ROLAND_SIEGE_ROLAND_PROGRESS_INFO_CHANGE , self)
- SL:RegisterLUAEvent(LUA_EVENT_ROLAND_SIEGE_ROLAND_MONSTER_LIST_CHANGE, self.LUA_EVENT_ROLAND_SIEGE_ROLAND_MONSTER_LIST_CHANGE , self)
- end
- ---任务按钮点击寻路
- function this:TaskButtonOnClick()
- if self.repTaskConfig then
- this.pos_monster_id = self.repTaskConfig.param[1]
- local x = self.repTaskConfig.moveTo[1]
- local y = self.repTaskConfig.moveTo[2]
- this.map_id = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
- this.map_line = SL:GetMetaValue(EMetaVarGetKey.MAP_LINE)
- SL:Pathfinding(this.map_id, this.map_line, x, y,this.MonserPosEnd,this.pos_monster_id)
- end
- end
- function this:MonserPosEnd(pos)
- if pos and pos.x and pos.z then
- this.scheduleId = SL:ScheduleOnce(0.1, function()
- SL:Pathfinding(this.map_id, this.map_line, pos.x, pos.z,this.BossPointOnHook)
- end)
- else
- SL:StartOnHook(true,true,this.pos_monster_id)
- end
- end
- function this:BossPointOnHook()
- SL:StartOnHook(true,true,this.pos_monster_id)
- end
- function this:Exit()
- SL:CommonTipsMessage({ stringTblID=211, ui = self, sureBtnText = "确定", cancelBtnText = "取消",
- callback = self.ExitSure})
- end
- function this:ExitSure()
- InfoManager.copActivityInfo.hideTask = false
- SL:onLUAEvent(LUA_EVENT_SHOW_TASK)
- SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_QUIT_DUPLICATE,self.configId)
- GUI:UIPanel_Close("dev/outui/LoranSiege/Panel/KLLoranSiegeCopyTask/KLLoranSiegeCopyTaskPanel")
- end
- function this:RES_QUIT_SUCCESS(id,message)
- ---@type cfg_rep_column
- local tbl = SL:GetConfig("cfg_rep",message,"id")
- if tbl.type == self.configId then
- InfoManager.copActivityInfo.hideTask = false
- GUI:UIPanel_Close("dev/outui/LoranSiege/Panel/KLLoranSiegeCopyTask/KLLoranSiegeCopyTaskPanel")
- SL.ShowMainPanel()
- end
- end
- --帮助页面
- function this:OnClickHelpButton()
- local helpCfg=SL:GetConfig("cfg_rule_text",16005)
- if helpCfg then
- SL:CommonStrTipsMessage({title =helpCfg.menutxt,str=helpCfg.location})
- end
- end
- function this:LUA_EVENT_LOGIN_MAP()
- local map_id = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
- local is_has = SL:HasConfigTwoKeys("cfg_rep",map_id,"type","mapId")
- if not is_has then
- self:ExitSure()
- end
- end
- ---罗兰攻城战副本状态改变
- function this:LUA_EVENT_ROLAND_SIEGE_STATE_INFO_CHANGE()
- local stateInfo = InfoManager.loranSiegeInfo.siegeStateInfo
- if not stateInfo then
- return
- end
- local state = stateInfo["2"]
- ---是否是准备阶段
- local ifPrepare = state == EDuplicateState.PREPARE
- if ifPrepare then
- GUI:Text_setString(self.view.openDesTxt,"")
- else
- GUI:Text_setString(self.view.end_time,"")
- end
- GUI:setVisible(self.view.task_root,not ifPrepare)
- GUI:setVisible(self.view.begin_root,ifPrepare)
- GUI:setVisible(self.view.text_countdown_tips, state == EDuplicateState.FINISH)
- self.configId = tonumber(stateInfo["1"])
- local name_str = SL:GetConfig("cfg_rep",self.configId).name[1]
- GUI:Text_setString(self.view.ActivityName,name_str)
- self:UnScheduleTimer()
- if state ~= EDuplicateState.CLOSED then
- local time = tonumber(stateInfo["3"])
- local count = (time - tonumber(SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME))) * 0.001 + 1
- local func = function()
- local now = tonumber(SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME))
- local deltaTime = time - now
- if state == EDuplicateState.PREPARE then
- GUI:Text_setString(self.view.openDesTxt,Time.ShowFormatTimeMS(deltaTime).."后开启副本")
- elseif state == EDuplicateState.FINISH then
- GUI:Text_setString(self.view.text_countdown_tips_text,Time.ShowFormatTimeMS(deltaTime).."秒")
- else
- GUI:Text_setString(self.view.end_time,Time.ShowFormatTimeMS(deltaTime))
- end
- if deltaTime <= 0 then
- if state == EDuplicateState.PREPARE then
- GUI:Text_setString(self.view.openDesTxt,"")
- elseif state == EDuplicateState.FINISH then
- GUI:setVisible(self.view.text_countdown_tips, false)
- else
- GUI:Text_setString(self.view.end_time,"")
- end
- self:UnScheduleTimer()
- end
- end
- func()
- self.countDown = SL:Schedule(self.countDown, 0, 1, count, func)
- end
- end
- ---罗兰攻城战任务信息改变
- function this:LUA_EVENT_ROLAND_SIEGE_TASK_INFO_CHANGE()
- GUI:setVisible(self.view.loading,false)
- local taskInfo = InfoManager.loranSiegeInfo.siegeTaskInfo
- if not taskInfo or not taskInfo.taskId then
- return
- end
- local iconStr = taskInfo.camp == 1 and "icon_attack" or "icon_guard"
- local color = taskInfo.nowCount >= taskInfo.totalCount and "#1add1f" or "#ff2323"
- local title = "(血量<color="..color..">"..tostring(taskInfo.nowCount).."</color>/"..tostring(taskInfo.totalCount)..")"
- ---@type cfg_repTask_column
- self.repTaskConfig = SL:GetConfig("cfg_repTask",taskInfo.taskId)
- --最后一阶段
- if not self.repTaskConfig.nextID or self.repTaskConfig.nextID == 0 then
- self:LUA_EVENT_ROLAND_SIEGE_ROLAND_PROGRESS_INFO_CHANGE()
- title = "(<color="..color..">"..tostring(taskInfo.nowCount).."</color>/"..tostring(taskInfo.totalCount)..")"
- --防守方最后一阶段任务不显示进度
- if taskInfo.camp == 2 then
- title = ""
- end
- else
- --守方提示
- if taskInfo.camp == 2 and not self.timer1 then
- if not self.nowCount then
- self.nowCount = taskInfo.nowCount
- end
- --血量变化了
- if taskInfo.nowCount < taskInfo.totalCount then
- if self.nowCount ~= taskInfo.nowCount then
- self.nowCount = taskInfo.nowCount
- ---@type cfg_monster_column
- local monsterCfg = SL:GetConfig("cfg_monster",self.repTaskConfig.param[1])
- ---@type cfg_string_column
- local tbl = SL:GetConfig("cfg_string", 16010, "id")
- local HorseRaceLampData = {
- id = 16010,
- content = string.format(tbl.text,monsterCfg.name),
- }
- SL:MessageTip(HorseRaceLampData)
- self.timer1 = SL:Schedule(self.timer1,10,10,-1,function()
- if self.timer1 then
- SL:UnSchedule(self.timer1)
- end
- self.timer1 = nil
- end)
- end
- end
- end
- end
-
- local unionName = "无"
- local unionRank = "0"
- local selfRank = "0"
- local selfScore = "0"
- if taskInfo.unionName then
- unionName = taskInfo.unionName
- end
- if taskInfo.unionRank then
- unionRank = taskInfo.unionRank
- end
- if taskInfo.selfRank then
- selfRank = taskInfo.selfRank
- end
- if taskInfo.selfScore then
- selfScore = taskInfo.selfScore
- end
- GUI:Text_setString(self.view.nowOccupyingPartyName,tostring(unionName))
- GUI:Text_setString(self.view.unionRankText,tostring(unionRank))
- GUI:Text_setString(self.view.myRankText,tostring(selfRank))
- GUI:Text_setString(self.view.myPointsText,tostring(selfScore))
- GUI:Image_loadTexture(self.view.taskIcon,iconStr,"Atlas/KLSiegePanel.spriteatlas")
- GUI:Text_setString(self.view.stateName,tostring(self.repTaskConfig.name))
- GUI:Text_setString(self.view.taskName,tostring(self.repTaskConfig.UItext))
- GUI:Text_setString(self.view.taskProgress,title)
- end
- ---攻城战进度信息变动
- function this:LUA_EVENT_ROLAND_SIEGE_ROLAND_PROGRESS_INFO_CHANGE()
- GUI:setVisible(self.view.loading,false)
- local info = InfoManager.loranSiegeInfo.rolandProgressInfo
- local unionName = ""
- local loadNum = 0
- local now = 0
- local max = 0
- if info and info.unionName then
- unionName = "<color=#1ADE1FFF>"..info.unionName.."</color>占领中"
- end
- if unionName ~= "" then
- GUI:setVisible(self.view.loading,true)
- self.loadingCount = info.now
- if self.nowUnion ~= info.unionId and self.loadingCount == info.max and not self.timer2 then
- self.nowUnion = info.unionId
- local id = 16011
- local content = ""
- if info.unionId == SL:MeData_GetUnionId() then
- ---@type cfg_string_column
- local tbl = SL:GetConfig("cfg_string", 16011, "id")
- content = string.format(tbl.text,info.unionName)
- else
- id = 16012
- ---@type cfg_string_column
- local tbl = SL:GetConfig("cfg_string", 16012, "id")
- content = string.format(tbl.text,info.unionName)
- end
- local HorseRaceLampData = {
- id = id,
- content = content,
- }
- SL:MessageTip(HorseRaceLampData)
- self.timer2 = SL:Schedule(self.timer2,10,10,-1,function()
- if self.timer2 then
- SL:UnSchedule(self.timer2)
- end
- self.timer2 = nil
- end)
- end
- else
- return
- end
- if info and info.now then
- now = info.now
- end
- if info and info.max then
- max = info.max
- end
- loadNum = Mathf.Ceil(now/max*100)
- GUI:Text_setString(self.view.loadingText,unionName)
- GUI:SetLoadingbar_startper(self.view.loading,loadNum)
- GUI:Text_setString(self.view.loadingNumText,now.."/"..max)
- end
- ---攻城战怪物信息变动
- function this:LUA_EVENT_ROLAND_SIEGE_ROLAND_MONSTER_LIST_CHANGE()
- self:SetResistancePoint()
- end
- ---设置阻挡点
- function this:SetResistancePoint()
- local taskInfo = InfoManager.loranSiegeInfo.siegeTaskInfo
- if taskInfo.camp == 1 then
- ---@type cfg_repGlobal_column
- local tbl = SL:GetConfig("cfg_repGlobal",16001009,"id")
- local strList = string.split(tbl.value,"|")
- for i, v in pairs(strList) do
- local strs = string.split(v,"#")
- local index = 1
- local isAdd = self:IsMonsterLive(strs[1],strs[2])
- for z = 1, table.count(strs) / 2 do
- if strs[index] then
- SL:SetResistancePoint(tonumber(strs[index]),tonumber(strs[index+1]),isAdd)
- end
- index = index + 2
- end
- end
- end
- end
- ---怪物是否存活
- function this:IsMonsterLive(x,y)
- local monsterInfo = InfoManager.loranSiegeInfo.monsterList
- for i, v in pairs(monsterInfo) do
- if v.x == tonumber(x) and v.y == tonumber(y) then
- return true
- end
- end
- return false
- end
- ---取消所有阻挡点
- function this:CancelAllResistancePoint()
- ---@type cfg_repGlobal_column
- local tbl = SL:GetConfig("cfg_repGlobal",16001009,"id")
- local strList = string.split(tbl.value,"|")
- for i, v in pairs(strList) do
- local strs = string.split(v,"#")
- local index = 1
- for z = 1, table.count(strs) / 2 do
- if strs[index] then
- SL:SetResistancePoint(tonumber(strs[index]),tonumber(strs[index+1]),false)
- end
- index = index + 2
- end
- end
- end
- function this:CreateModel()
- ---@type cfg_repGlobal_column
- local cfg = SL:GetConfig("cfg_repGlobal",16001011)
- local strList = string.split(cfg.value,'|')
- local pos = string.split(strList[2],'#')
- SL:CreateSceneItemModel(strList[1],function(res)
- self.Model = res
- if not IsNil(res) then
- res:SetLocalEulerAngles(0, 0, 0)
- res.localScale = Vector3 (tonumber(pos[4]),tonumber(pos[4]),tonumber(pos[4]))
- res:SetLocalPosition(tonumber(pos[1]),tonumber(pos[2]),tonumber(pos[3]))
- end
- end)
- end
- ---界面显示时调用一次
- function this:Show()
- end
- ---创建或者刷新界面数据时调用
- function this:Refresh()
- self:LUA_EVENT_ROLAND_SIEGE_STATE_INFO_CHANGE()
- self:LUA_EVENT_ROLAND_SIEGE_TASK_INFO_CHANGE()
- self:CreateModel()
- end
- function this:SetVisible(isVisible)
- GUI:setVisible(self.view.root,isVisible)
- end
- function this:Hide()
- end
- function this:Close()
- self:UnScheduleTimer()
- if this.scheduleId then
- SL:UnSchedule(this.scheduleId)
- end
- this.scheduleId = nil
-
- if self.timer1 then
- SL:UnSchedule(self.timer1)
- end
- self.timer1 = nil
-
- if self.timer2 then
- SL:UnSchedule(self.timer2)
- end
- self.timer2 = nil
-
- if SL:MeData_Check() then
- InfoManager.loranSiegeInfo:SetRoleHeadIcon(SL:MeData_GetId(),nil,SL:MeData_GetRoleExtInfo().roleInfoExtData.position)
- end
- if self.Model then
- SL:RecycleSceneItemModel(self.Model)
- end
- self.Model = nil
- self:CancelAllResistancePoint()
- SL:SetMetaValue(EMetaVarSetKey.SET_ISNOTCHANGEPKMODE,false)
- SL:SetMetaValue(EMetaVarSetKey.SET_PKMODE,EPKMode.Union)
- InfoManager.loranSiegeInfo.isInCopy = false
- end
- return this
|