---@class KLUICreateRolePanel:UIKmlLuaPanelBase ---@field view KLUICreateRolePanelView local KLUICreateRolePanel = class(UIKmlLuaPanelBase) local this =KLUICreateRolePanel ---创建时调用一次 function this:Init() ---@type UICreateRolePanel local panel = self.args.uiCreateRolePanel panel:HideChooseRolePanel(_, { [2] = true }) GUI:DataListInitData( self.view.att_list,function() return self:ItemCountFunc() end,function(realIndex) return self:ItemGetFunc(realIndex) end,function(realIndex, kmlcontrol) return self:ItemInitFunc(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:ItemUpdateFunc(realIndex, kmlcontrol) end) end function this:ItemCountFunc() return #self.attrItemsData end function this:ItemGetFunc(realIndex) end function this:ItemInitFunc(realIndex, kmlcontrol) end function this:ItemUpdateFunc(realIndex, rectTrans) local attrData = self.attrItemsData[realIndex + 1] local cfg = SL:GetConfig("cfg_att_info", attrData) local attrKey = "att"..self.cfgId local attrValue = cfg[attrKey] local attrName = cfg.name local attName = GUI:GetChildControl(self.view.att_list,realIndex,'attName') GUI:Text_setString(attName,attrName) local attValue = GUI:GetChildControl(self.view.att_list,realIndex,'attValue') GUI:Text_setString(attValue,tostring(attrValue)) end ---创建或者刷新界面数据时调用 function this:Refresh() self.unlockList = self.args.unlockList ---@type cfg_character_create_column[] local createCfg = SL:GetConfigTable("cfg_character_create") self.createRoleData = {} for _, v in pairs(createCfg) do if v.isShow == 1 then ---@type KLCareerButtonItem local toggle = GUI:UIPanel_Open("dev/ui/CreateRole/Item/KLCareerButton/KLCareerButtonItem",self.view.createrole_layout,self,nil,true) if v.conditionLv ~= 0 then toggle:RefreshToggle("Atlas/Common.spriteatlas","button_interface_window22", "button_interface_window21") end toggle:RefreshToggleName(v.id, v.name) toggle:SetOnValueChange(self.ToggleChangeEvent, self) end end self:RefreshCreateRoleUI(1) self:OnClickRandomButton() end ---注册UI事件和服务器消息 function this:RegistEvents() GUI:AddOnClickEvent(self.view.closeBtn,self,self.OnClickCloseButton) GUI:AddOnClickEvent(self.view.btn_createrole_unlock,self,self.OnClickUnlockButton) GUI:AddOnClickEvent(self.view.btn_createrole_random,self,self.OnClickRandomButton) GUI:AddOnClickEvent(self.view.btn_createrole_create,self,self.OnClickCreateButton) SL:RegisterLuaNetMsg(MessageDef.ResRandomRoleNameMessage,self.ResRandomRoleNameMessage,self) SL:RegisterLuaNetMsg(MessageDef.ResUnLockUserCareerMessage,self.ResUnLockUserCareerMessage,self) end function this:OnClickCloseButton() GUI:UIPanel_Close('dev/ui/CreateRole/Panel/KLUICreateRole/KLUICreateRolePanel') ---@type UICreateRolePanel local panel = self.args.uiCreateRolePanel panel:HideChooseRolePanel(_, { [2] = "true" }) end function this:OnClickUnlockButton() local cfg = SL:GetConfig("cfg_character_create",self.cfgId) --GUI:UIPanel_Open("dev/ui/Common/Panel/KLUICommonTips/KLUICommonTipsPanel",nil,nil, { showTips = "是否花费" .. cfg.price .. "解锁该职业", callback = self.UnLockCareer, ui = self }) SL:CommonTipsMessage({ showTips = "是否花费" .. cfg.price .. "解锁该职业", callback = self.UnLockCareer, ui = self }) end function this:OnClickRandomButton() SL.NetManager_Req:ReqRandomRoleNameMessage(self.cfgId or 0, self.randomName or "") end function this:OnClickCreateButton() local name = GUI:Text_getString(self.view.createrole_input) local message = {} if string.isNullOrEmpty(name) then message.msg = "名字不能为空" message.type = "error" SL:TipMessage( "名字不能为空", 1, NoticeType.NoticeMid ) --UINoticeMgr.PopTips(message) elseif string.find(name,"%s") ~= nil then message.msg = "名字中不能包含空格" message.type = "error" SL:TipMessage( "名字中不能包含空格", 1, NoticeType.NoticeMid ) --UINoticeMgr.PopTips(message) elseif self:GetStrLen(name) > 14 then message.msg = "名字过长" message.type = "error" SL:TipMessage( "名字过长", 1, NoticeType.NoticeMid ) --UINoticeMgr.PopTips(message) else SL.NetManager_Req:ReqCreateRoleMessage(name,1,self.cfgId) end end function this:GetStrLen(inputstr) if not inputstr or type(inputstr) ~= "string" or #inputstr <= 0 then return nil end local length = 0 -- 字符的个数 local i = 1 while true do local lengthCount=1 local curByte = string.byte(inputstr, i) local byteCount = 1 if curByte > 239 then byteCount = 4 -- 4字节字符 lengthCount=2 elseif curByte > 223 then lengthCount=2 byteCount = 3 -- 汉字 elseif curByte > 128 then byteCount = 2 -- 双字节字符 else byteCount = 1 -- 单字节字符 end i = i + byteCount length = length + lengthCount if i > #inputstr then break end end return length end ---玩家随机名字返回 ---@param message UserProtos.RandomRoleNameRes function this:ResRandomRoleNameMessage(_, message) self.randomName = message.roleName GUI:Text_setString(self.view.createrole_input, self.randomName) end ---职业解锁返回 ---@param message UserProtos.UnLockUserCareerRes function this:ResUnLockUserCareerMessage(_, message) if message.ok then LoginManager:RefreshCareerUnlockList(self.cfgId) end self:RefreshCreateRoleUI(self.cfgId, true) end function this:ToggleChangeEvent(_,eventData) if eventData.data ~= self.cfgId then self:RefreshCreateRoleUI(eventData.data) end end ---职业解锁请求 function this:UnLockCareer() SL.NetManager_Req:ReqUnLockUserCareerMessage(CS.GameInfo.UID,self.cfgId) end ---根据职业根id刷新界面显示 function this:RefreshCreateRoleUI(id,refreshBtn) self.cfgId = id ---@type cfg_character_create_column local cfg = SL:GetConfig("cfg_character_create",id) if not refreshBtn then local scale = string.split(cfg.modelScale,'#') local pos = string.split(cfg.modelPosition,'#') local rotation = string.split(cfg.modelRotation,'#') GUI:Model_setSrc(self.view.createrole_model, cfg.path, scale[1]..","..scale[2]..","..scale[3], rotation[1]..","..rotation[2]..","..rotation[3], pos[1]..","..pos[2]..","..pos[3]) GUI:Text_setString(self.view.createrole_description, cfg.description) self.attrItemsData = cfg.attShow GUI:DataListUpdateData(self.view.att_list) end ---是否解锁职业 if cfg.conditionLv == 0 then GUI:setVisible(self.view.btn_createrole_unlock, false) GUI:setVisible(self.view.text_createrole_unlock, false) GUI:setVisible(self.view.btn_createrole_create, true) else if LoginManager:GetCareerUnlockData(id) then GUI:setVisible(self.view.btn_createrole_unlock, false) GUI:setVisible(self.view.text_createrole_unlock, false) GUI:setVisible(self.view.btn_createrole_create, true) else GUI:setVisible(self.view.btn_createrole_unlock, true) GUI:Text_setString(self.view.text_createrole_unlock, cfg.conditionsText) GUI:setVisible(self.view.text_createrole_unlock, true) GUI:setVisible(self.view.btn_createrole_create, false) end end end function this:Close() end return this