123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- ---@class KLUIChallengeBossLineItem:UIKmlLuaPanelBase
- ---@field view KLUIChallengeBossLineItemView
- local KLUIChallengeBossLineItem = class(UIKmlLuaPanelBase)
- local this = KLUIChallengeBossLineItem
- ---创建时调用一次
- function this:Init()
- GUI:Text_setString(self.view.num,"")
- end
- ---创建或者刷新界面数据时调用
- function this:Refresh()
-
- end
- function this:RefreshItem(monsterid,map,move,panel,height,cfg_BOSS_challenge)
- self.isOpen = true
- self.panel = panel
- --SL:LogError(self.args.is_copy)
- ----@type cfg_BOSS_challenge_column
- self.cfg_BOSS_challenge = cfg_BOSS_challenge
- if self.args.is_copy and self.args.is_copy == 1 then
- self.mapId = monsterid
- self.data = map
- if height == 210 then
- else
- height = 230
- end
- self.monsterid = self.data[1]
- self.monster_num = self.data[2]
- self.x = self.data[3]
- self.y = self.data[4]
- self.range = self.data[5]
- local name = nil
- local level = nil
- local pos_tr = ""
- ----@type cfg_map_info_column
- local map_info = SL:GetConfig('cfg_map_info', self.mapId, 'id')
- if self.cfg_BOSS_challenge and self.cfg_BOSS_challenge.monsterType == EBossChallengeType.Sanctuary then
- ----@type cfg_mapMove_column
- local map_move = SL:GetConfig('cfg_mapMove',move, 'id')
- name = map_info.mapname
- level = map_move.level
- pos_tr = string.format("<color=#00FF00>[跨]</color>%s [%s线]",name, 1)
- self.line = 1
- self.monsterid = cfg_BOSS_challenge.monsterid
- self.monster_num = 1
- else
- local tab = SL:GetConfig('cfg_repfairyland', self.mapId, 'id')
- name = tab.name[1]
- level = tab.level
- pos_tr = string.format("%s(%s,%s)",name, self.x,self.y)
- end
-
- GUI:Text_setString(self.view.name,pos_tr)
- GUI:Text_setString(self.view.level,level.."级")
- local playerLevel = SL:GetMetaValue(EMetaVarGetKey.LEVEL)
- self.is_jion = false
- self.is_show_num = true
- if playerLevel < level then
- GUI:setVisible(self.view.level,true)
- GUI:setVisible(self.view.num,false)
- self.is_show_num = false
- else
- self.is_jion = true
- GUI:setVisible(self.view.level,false)
- GUI:setVisible(self.view.num,true)
- end
- GUI:Text_setString(self.view.num,"")
- local src = "button_interface_window17"
- if map_info.goldmap and map_info.goldmap == 1 then
- src = "img_boldboss_btn"
- GUI:setContentSize(self.view.btn,height,47)
- else
- GUI:setContentSize(self.view.btn,height,40)
- end
- GUI:Image_loadTexture(self.view.btn,src,"Atlas/UIChallengeBoss.spriteatlas")
- --self:GetCopyMonsterCount()
- else
- self.monsterid = monsterid
- self.mapId = map[1]
- self.line = map[2]
- self.moveId = move[1]
- local map_info = SL:GetConfig('cfg_map_info', self.mapId, 'id')
- local move_info = SL:GetConfig('cfg_mapMove', self.moveId, 'id')
- self.mapX = move_info.mapX
- self.mapY = move_info.mapY
- --local map_info = SL:FindConfigs("cfg_map_info","id",self.mapId)
- local name = map_info.mapname .. " ["..self.line.."线]"
- local level = move_info.level
- GUI:Text_setString(self.view.name,name)
- local level_str = level.."级"
- if self.args.is_copy and self.args.is_copy == 2 then
- local monster_level = SL:GetConfig('cfg_monster', self.monsterid, 'id').level
- level_str = monster_level.."级"
- end
- GUI:Text_setString(self.view.level,level_str)
- local playerLevel = SL:GetMetaValue(EMetaVarGetKey.LEVEL)
- self.is_jion = false
- self.is_show_num = true
- if playerLevel < level then
- GUI:setVisible(self.view.level,true)
- GUI:setVisible(self.view.num,false)
- self.is_show_num = false
- else
- self.is_jion = true
- GUI:setVisible(self.view.level,false)
- GUI:setVisible(self.view.num,true)
- end
- if height == 210 then
- else
- height = 230
- end
- GUI:Text_setString(self.view.num,"")
- GUI:Text_setString(self.view.num,"")
- local src = "button_interface_window17"
- if map_info.goldmap and map_info.goldmap == 1 then
- src = "img_boldboss_btn"
- GUI:setContentSize(self.view.btn,height,47)
- else
- GUI:setContentSize(self.view.btn,height,40)
- end
- GUI:Image_loadTexture(self.view.btn,src,"Atlas/UIChallengeBoss.spriteatlas")
- --self:GetMonsterCount()
- end
- end
- ---注册UI事件和服务器消息
- function this:RegistEvents()
- GUI:AddOnClickEvent(self.view.btn,self,self.OnclickIcon)
- --SL:RegisterLuaNetMsg(LuaMessageIdToClient.MONSTER_COUNT_RESULT,self.MonserCount,self)
- -- SL:RegisterLuaNetMsg(LuaMessageIdToClient.SEND_SECRET_REALM_MONSTER_COUNT,self.MonserCopyCount,self)
- end
- function this:OnclickIcon()
- 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
- ---@type cfg_map_info_column
- local map_info = SL:GetConfig('cfg_map_info', self.mapId)
- if map_info.goldmap == 1 and InfoManager.newVipInfo.vipLevel <= 0 then
- SL:CommonTipsMessage({ stringTblID=228, ui = self, sureBtnText = "确定", cancelBtnText = "取消",
- callback = function()
- GUI:UIPanel_Close("dev/outui/ChallengeBoss/Panel/KLChallengeBoss/KLChallengeBossPanel")
- SL.HideMainPanel()
- GUI:UIPanel_Open("dev/outui/VIP/Panel/KLNewVIPMain/KLNewVIPMainPanel")
- end })
- return
- end
- if not self.is_jion then
- SL:TipMessage( SL:GetConfig('cfg_string',249).text, 1, NoticeType.NoticeMid )--"等级不足",
- return
- end
- if self.cfg_BOSS_challenge and self.cfg_BOSS_challenge.monsterType == EBossChallengeType.Sanctuary then
- local IsSatisfy ,tipsStr = InfoManager.sanctuaryBossInfo:GetIsSatisfy()
- if IsSatisfy then
- SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_CROSS_MAP_TRANSFER_TO_NPC,{npcid = self.cfg_BOSS_challenge.npcInteraction})
- InfoManager.sanctuaryBossInfo.sanctuaryNpcId = self.cfg_BOSS_challenge.npcInteraction
- InfoManager.sanctuaryBossInfo.sanctuaryMapId= self.mapId
- GUI:UIPanel_Close("dev/outui/ChallengeBoss/Panel/KLChallengeBoss/KLChallengeBossPanel")
- SL.ShowMainPanel()
- else
- SL:TipMessage(tipsStr, 1, NoticeType.NoticeMid )--"次数不足",
- return
- end
- else
- if self.args.is_copy and self.args.is_copy == 1 then
- if not self.panel:isJoin() then
- SL:TipMessage( SL:GetConfig('cfg_string',256).text, 1, NoticeType.NoticeMid )--"次数不足",
- return
- end
- GUI:UIPanel_Close("dev/outui/ChallengeBoss/Panel/KLChallengeBoss/KLChallengeBossPanel")
- SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ENTER_SECRET_REALM, {repId=self.mapId})
- else
- self:GetMonsterPos()
- end
- end
-
- --GUI:UIPanel_Open("dev/outui/ChallengeBoss/Panel/KLChallengeBossPos/KLChallengeBossPosPanel")
- end
- function this:GoldBossBtnDataListItemCountFunc()
- return #self.allGoldLevel
- end
- function this:GoldBossBtnDataListItemGetFunc(realIndex)
- local data = self.allGoldLevel[realIndex + 1]
- local item = GUI:UIPanel_Open("dev/ui/ChallengeBoss/Item/KLUIChallengeBossBtnItem/KLUIChallengeBossBtnItem",self.view.gold_boss_level,self,{},true)
- self.glod_boss_level_btn_all_item[item.view.root] = item
- return item.view.root
- end
- function this:GoldBossBtnDataListItemInitFunc(realIndex, kmlcontrol)
- end
- function this:GoldBossBtnDataListItemUpdateFunc(realIndex, kmlcontrol)
- local data = self.allGoldLevel[realIndex + 1]
- self.glod_boss_level_btn_all_item[kmlcontrol]:RefreshItem(data,self.select_gold_level,self)
- if data == self.select_gold_level then
- self.GoldBossLevelBtn = self.glod_boss_level_btn_all_item[kmlcontrol]
- end
- end
- function this:GetMonsterCount()
- GUI:setGrey(self.view.btn,false)
- GUI:Text_setString(self.view.num,"")
- if not self.is_show_num then
- return
- end
- if not self.mapId or not self.line or not self.monsterid then
- return
- end
- SL:SendLuaNetMsg(LuaMessageIdToSever.GET_MOUNSTER_COUNT_BY_MAP, {mapCfgId=self.mapId,line=self.line,monsterCfgId=self.monsterid,state=1})
- end
- function this:MonserCount(id, message)
- --SL:LogError("MonserCount")
- if not message then
- return
- end
- if message.mapCfgId ~= self.mapId or message.line ~= self.line or message.monsterCfgId ~= self.monsterid then
- return
- end
- local monsterCount = message.monsterCount
- --SL:LogError(monsterCount)
- if not monsterCount then
- monsterCount = 0
- end
- if monsterCount <= 0 then
- GUI:setGrey(self.view.btn,true)
- GUI:Text_setString(self.view.num,"<color=#DCE1E5>"..monsterCount.."只".."</color>")
- else
- GUI:setGrey(self.view.btn,false)
- GUI:Text_setString(self.view.num,monsterCount.."只")
- end
- --GUI:Text_setString(self.view.num,monsterCount.."只")
- end
- --获得秘境副本怪物指定地图位置范围的怪物数量
- function this:GetCopyMonsterCount()
- if not self.isOpen then
- return
- end
- --SL:LogError("GetCopyMonsterCount")
- GUI:setGrey(self.view.btn,false)
- GUI:Text_setString(self.view.num,"")
- if not self.is_show_num then
- return
- end
- if not self.mapId or not self.monsterid then
- return
- end
- SL:SendLuaNetMsg(LuaMessageIdToSever.GET_SECRET_REALM_MONSTER_COUNT, {repId=self.mapId,monsterId=self.monsterid,x=self.x,y=self.y,range=self.range})
- end
- function this:MonserCopyCount(id, message)
- if not message then
- return
- end
- if message.repId ~= self.mapId or message.x ~= self.x or message.y ~= self.y or message.range ~= self.range then
- return
- end
- local monsterCount = message.count
- --SL:LogError(monsterCount)
- if not monsterCount then
- monsterCount = 0
- end
- local timeStr = message.time
- if monsterCount <= 0 then
- timeStr = tonumber(timeStr)
- local current_time = Time.GetServerTime()
- timeStr = math.ceil((timeStr-current_time)/1000)
- if timeStr > 0 then
- -- SL:ScheduleOnce(timeStr+0.5,function ()
- -- self:GetCopyMonsterCount()
- -- end)
- GUI:setGrey(self.view.btn,true)
- GUI:setGrey(self.view.btn,false)
- GUI:Text_setString(self.view.num,"")
- GUI:setVisible(self.view.end_time,true)
- GUI:SetControl_time(self.view.end_time,timeStr)
- else
- GUI:setVisible(self.view.end_time,false)
- GUI:setGrey(self.view.btn,false)
- GUI:Text_setString(self.view.num,monsterCount.."只")
- end
- else
- GUI:setVisible(self.view.end_time,false)
- GUI:setGrey(self.view.btn,false)
- GUI:Text_setString(self.view.num,monsterCount.."只")
- end
- --GUI:Text_setString(self.view.num,monsterCount.."只")
- end
- function this:GetMonsterPos()
- if not self.is_show_num then
- return
- end
- if not self.mapId or not self.line or not self.monsterid then
- return
- end
- local map_line = SL:GetMetaValue(EMetaVarGetKey.MAP_LINE)
- local map_id = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
- if map_id == self.mapId and self.line == map_line and SL:MeData_Check() then
- local me_x = SL:MeData_GetCoord().x
- local me_y = SL:MeData_GetCoord().z
- local all_monster = {}
- local all_status = SL:GetMapMonsterStatus()
- local one = 1
- for i, data in ipairs(all_status) do
- if data.configId == self.monsterid and data.status == one then
- table.insert(all_monster,{configId=data.configId,x=data.pointX,y=data.pointY})
- end
- end
- local num = 0
- local index = 0
- SL:OpenWaitingUI({ msg = "最佳线路寻怪中"})
- local current_index = 1
- local is_end = false
- self.wait = SL:Schedule(self.wait,0,Time.deltaTime,-1, function()
- if is_end then
- return
- end
- local current_time = Time.GetServerTime()
- if current_index <= #all_monster then
- local data = all_monster[current_index]
- local arrive, path = SL:SearchPath({x=me_x,z=me_y}, {x=data.x,z=data.y})
- if arrive then
- data.num = path.n
- if num == 0 then
- num = data.num
- index = current_index
- else
- if num > data.num then
- num = data.num
- index = current_index
- end
- end
- end
- if current_index <= #all_monster then
- current_index = current_index+1
- return
- end
- end
- if current_index >= #all_monster then
- is_end = true
- if index > 0 then
- local pos_data = all_monster[index]
- SL:onLUAEvent(LUA_EVENT_CHALLENGE_BOSS_MONSTER_POS,{mapCfgId=self.mapId,line=self.line,x= pos_data.x,y= pos_data.y,monsterCfgId=self.monsterid})
- else
- SL:SendLuaNetMsg(LuaMessageIdToSever.GET_NEAREST_MONSTER, {mapCfgId=self.mapId,line=self.line,monsterCfgId=self.monsterid,state=1,x=me_x,y=me_y})
- end
- SL:HideWaitingUI()
- SL:UnSchedule(self.wait)
- end
- end)
- else
- local msg = {mapCfgId=self.mapId,line=self.line,monsterCfgId=self.monsterid}
- local curMapId = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
- ---@type cfg_map_info_column
- local mapInfo = SL:GetConfig("cfg_map_info",curMapId)
- if mapInfo.nopositionmove == 1 then
- SL:MessageTip({id=116})
- return
- end
- SL:onLUAEvent(LUA_EVENT_CHALLENGE_BOSS_MONSTER_POS_AFTER,msg)
- SL:MapTransfer(self.mapId, self.line)
- end
- end
- function this:Close()
- self:UnRegistEvents()
- self.isOpen = false
- end
- return this
|