123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- ---@class KLServerSelectionPanel:UIKmlLuaPanelBase
- ---@field view KLServerSelectionPanelView
- local KLServerSelectionPanel = class(UIKmlLuaPanelBase)
- local this = KLServerSelectionPanel
- function this:AsyncLoadUI()
- end
- ---创建时调用一次
- function this:Init()
- self.atlas = "Atlas/PCPlatform_UI.spriteatlas"
- self.ServerGroupItems = {}
- self.ServerSelectionItems = {}
- ---@type ServerStruct[]
- self.loginedList = {}
- self.hadRoleServers = false
- self.showHalfYearTitle = false
- self.ServerData = {}--所有服务器的数据
- ---@type ServerStruct[]
- self.CurServerSelectionData = {} --当前选中的服务器组数据
- self.CurServerGroupIndex = 1--当前选中的服务器组序号
- GUI:SetActive(self.view.sv_haveRoles, false)
- --[[
- self.view.serverGroup --服务器组
- self.view.SelectServer --服务器选择
- self.view.sv_haveRoles --最近登录
- --]]
- end
- ---注册UI事件和服务器消息
- function this:RegistEvents()
- GUI:AddOnClickEvent(self.view.btn_closeSelectServer, self, self.CloseEvent)
- end
- ---界面显示时调用一次
- function this:Show()
- end
- ---创建或者刷新界面数据时调用
- function this:Refresh()
- table.clear(self.ServerGroupItems)
- table.clear(self.ServerSelectionItems)
- self.hadRoleServers = false
- self.ServerData = self:GetServerData()
- self:InitServerGroupList()
- GUI:DataListUpdateData(self.view.serverGroup)
- GUI:Toggle_setIsOn(self.ServerGroupItems[self.CurServerGroupIndex], true)
- GUI:SetActive(self.view.halfYearTitle, self.showHalfYearTitle)
- end
- function this:Hide()
- end
- function this:Close()
- end
- function this:CloseEvent()
- GUI:UIPanel_Close("dev/outui/PCPlatform/Panel/KLServerSelection/KLServerSelectionPanel")
- end
- function this:GetServerData()
- local dataTable = {}
- local spacing = 10
- local index = 0
- local serverIndex = 0
- table.clear(self.loginedList)
- for k, v in pairs(SL:GetRecentServer()) do
- if v.state ~= EServerState.NotShow then
- table.insert(self.loginedList, v.sid)
- end
- end
- local haveRole = SL:GetServerRoleList() or {}
- local serverHadRole = {}
- for i, v in pairs(haveRole) do
- local value = SL:GetServerInfoByRole(v.sid)
- ---清服时玩家已有角色未清空,找不到角色报错,此处加个容错
- if value then
- local server = this.CopyTableValue(value)
- server.roleInfo = v
- serverHadRole[#serverHadRole + 1] = server
- table.insert(self.loginedList, server.sid)
- end
- end
- local serverCount = table.count(serverHadRole)
- if serverCount > 0 then
- table.insert(dataTable, { server = serverHadRole, name = "最近登录" })
- self.hadRoleServers = true
- end
- ---if LoginManager.serverStruct.group_list then
- if SL:GetServerStruct().group_list then
- local spacingSv = {}
- local bigAreas = {}
- for i, v in ipairs(SL:GetServerList()) do
- --LoginManager.serverList) do
- if v.state ~= EServerState.NotShow then
- index = index + 1
- if not bigAreas[v.bigAreaName] then
- bigAreas[v.bigAreaName] = {}
- end
- table.insert(bigAreas[v.bigAreaName], v)
- end
- end
- ---@param a ServerStruct
- ---@param b ServerStruct
- table.sort(bigAreas, function(a, b)
- return a.bigAreaName < b.bigAreaName
- end)
- for k, v in pairs(bigAreas) do
- ---@param v2 {id:number,name:string,displayTime:number}
- ---@type {id:number,name:string,displayTime:number}
- local t, data = table.find(SL:GetServerStruct().group_list, function(_, _, k2, v2)
- if v2.id == k then
- return true
- end
- return false
- end)
- table.insert(dataTable, { server = v, name = data and data.name or "未知分组" })
- end
- else
- --每spacing个服务器为一组划分
- ---@type ServerStruct[]
- local spacingSv = {}
- for i, v in pairs(SL:GetServerList()) do
- if v.state ~= EServerState.NotShow then
- index = index + 1
- if index > spacing then
- serverIndex = serverIndex + 1
- serverCount = table.count(spacingSv) + serverCount
- table.insert(dataTable, { server = spacingSv, name = "服务器组" .. serverIndex })
- index = 1
- spacingSv = {}
- end
- table.insert(spacingSv, v)
- end
- end
- --不够spacing服务器一个组
- if next(spacingSv) then
- serverIndex = serverIndex + 1
- table.insert(dataTable, { server = spacingSv, name = "服务器组" .. serverIndex })
- serverCount = table.count(spacingSv) + serverCount
- end
- end
- return dataTable
- end
- function this.CopyTableValue(tb)
- local copy = {}
- for k, v in pairs(tb) do
- copy[k] = v
- end
- return copy
- end
- ---服务器组列表
- function this:InitServerGroupList()
- GUI:DataListInitData(self.view.serverGroup, function()
- return table.count(self.ServerData)
- end, function()
- end, function()
- end, function(realIndex)
- self:ServerGroupItem(realIndex)
- end)
- end
- ---服务器组列表
- function this:ServerGroupItem(realIndex)
- local index = realIndex + 1
- self.ServerGroupItems[index] = GUI:GetChildControl(self.view.serverGroup, realIndex, 'btn_serverGroup')
- local text = GUI:GetChildById(self.ServerGroupItems[index], "ServerGroupName")
- GUI:Text_setString(text, self.ServerData[index].name)
- GUI:SetToggleOnValueChange(self.ServerGroupItems[index], self, self.ServerGroupItemEvent, index)
- end
- ---服务器组列表
- function this:ServerGroupItemEvent(control, realIndex)
- local isOn = GUI:Toggle_getIsOn(control)
- if isOn == "1" then
- self.showHalfYearTitle = false
- if realIndex == 1 and self.hadRoleServers then
- self.CurServerGroupIndex = realIndex
- self.CurServerSelectionData = self.ServerData[realIndex].server
- self:InitHadRoleList()
- GUI:DataListUpdateData(self.view.haveRoles)
- GUI:SetActive(self.view.sv_haveRoles, true)
- GUI:SetActive(self.view.sv_selectServers, false)
- self.showHalfYearTitle = true
- else
- self.CurServerGroupIndex = realIndex
- self.CurServerSelectionData = self.ServerData[realIndex].server
- self:InitServerSelectionList()
- GUI:DataListUpdateData(self.view.SelectServer)
- GUI:SetActive(self.view.sv_selectServers, true)
- GUI:SetActive(self.view.sv_haveRoles, false)
- end
- GUI:SetActive(self.view.halfYearTitle, self.showHalfYearTitle)
- end
- end
- ---服务器选择
- function this:InitServerSelectionList()
- GUI:DataListInitData(self.view.SelectServer, function()
- return table.count(self.CurServerSelectionData)
- end, function()
- end, function()
- end, function(realIndex)
- self:ServerSelectionItem(realIndex)
- end)
- end
- ---服务器选择
- function this:ServerSelectionItem(realIndex)
- local index = realIndex + 1
- local control = GUI:GetChildControl(self.view.SelectServer, realIndex, 'selectItem')
- ---@type ServerStruct
- local serverInfo = self.CurServerSelectionData[index]
- self.ServerSelectionItems[index] = control
- GUI:AddOnClickEvent(control, self, self.ServerSelectionItemEvent, { server = serverInfo })
- local newServerIcon = GUI:GetChildControl(control, 1, 'NewServerIcon')
- local serverStateImg = GUI:GetChildControl(control, 2, 'ServerState')
- local Servername = GUI:GetChildControl(control, 3, 'ServerName')
- local roleEditIcon = GUI:GetChildControl(control, 4, 'RoleEditIcon')
- GUI:Text_setString(Servername, serverInfo.name)
- ---1新服,2畅通,3爆满,4维护,5隐藏
- local serverState = serverInfo.state
- GUI:SetActive(newServerIcon, serverState == 1)
- GUI:SetActive(serverStateImg, serverState ~= 1)
- if serverState == 2 then
- GUI:Image_loadTexture(serverStateImg, "ServerStateIcon_Flumency", self.atlas)
- elseif serverState == 3 then
- GUI:Image_loadTexture(serverStateImg, "ServerStateIcon_Hot", self.atlas)
- elseif serverState == 4 then
- GUI:Image_loadTexture(serverStateImg, "ServerStateIcon_Maintenance", self.atlas)
- end
- GUI:SetActive(roleEditIcon, table.contains(self.loginedList, serverInfo.sid))
- end
- function this:InitHadRoleList()
- GUI:DataListInitData(self.view.haveRoles, function()
- return table.count(self.CurServerSelectionData)
- end, function()
- end, function()
- end, function(realIndex)
- self:HadRoleItem(realIndex)
- end)
- end
- ---服务器选择
- function this:HadRoleItem(realIndex)
- local index = realIndex + 1
- local control = GUI:GetChildControl(self.view.haveRoles, realIndex, 'UIServerItem')
- ---@type ServerStruct
- local serverInfo = self.CurServerSelectionData[index]
- self.ServerSelectionItems[index] = control
- GUI:AddOnClickEvent(control, self, self.ServerSelectionItemEvent, { server = serverInfo })
- local roleHead = GUI:GetChildControl(control, 1, 'RoleHead')
- local ServerName02 = GUI:GetChildControl(control, 2, 'ServerName02')
- local ServerState02 = GUI:GetChildControl(control, 3, 'ServerState02')
- local Rank = GUI:GetChildControl(control, 4, 'Rank')
- local Occu = GUI:GetChildControl(control, 5, 'Occu')
- local RoleName = GUI:GetChildControl(control, 6, 'RoleName')
- local NewServer = GUI:GetChildControl(control, 7, 'NewServer')
- GUI:Text_setString(ServerName02, serverInfo.name)
- local atlas, src = SL.GetAtlas2CareerHead(serverInfo.roleInfo.rBaseCareer)
- GUI:Image_loadTexture(roleHead, src, atlas)
- ---1新服,2畅通,3爆满,4维护,5隐藏
- local serverState = serverInfo.state
- GUI:SetActive(NewServer, serverState == 1)
- GUI:SetActive(ServerState02, serverState ~= 1)
- if serverState == 2 then
- GUI:Image_loadTexture(ServerState02, "ServerStateIcon_Flumency", self.atlas)
- elseif serverState == 3 then
- GUI:Image_loadTexture(ServerState02, "ServerStateIcon_Hot", self.atlas)
- elseif serverState == 4 then
- GUI:Image_loadTexture(ServerState02, "ServerStateIcon_Maintenance", self.atlas)
- end
- GUI:Text_setString(Rank, "Lv" .. serverInfo.roleInfo.rLevel)
- local careerName = SL:CfgCareerPost_GetCfgCareerName(serverInfo.roleInfo.rBaseCareer)
- GUI:Text_setString(Occu, careerName)
- GUI:Text_setString(RoleName, serverInfo.roleInfo.rName)
- end
- ---服务器选择
- function this:ServerSelectionItemEvent(control, eventData)
- self:CloseEvent()
- SL:DispatchSelectServer(eventData.server)
- end
- return this
|