KLUICreateRolePanel.lua 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. ---@class KLUICreateRolePanel:UIKmlLuaPanelBase
  2. ---@field view KLUICreateRolePanelView
  3. local KLUICreateRolePanel = class(UIKmlLuaPanelBase)
  4. local this =KLUICreateRolePanel
  5. ---创建时调用一次
  6. function this:Init()
  7. ---@type UICreateRolePanel
  8. local panel = self.args.uiCreateRolePanel
  9. panel:HideChooseRolePanel(_, { [2] = true })
  10. GUI:DataListInitData( self.view.att_list,function()
  11. return self:ItemCountFunc()
  12. end,function(realIndex)
  13. return self:ItemGetFunc(realIndex)
  14. end,function(realIndex, kmlcontrol)
  15. return self:ItemInitFunc(realIndex, kmlcontrol)
  16. end, function(realIndex, kmlcontrol)
  17. return self:ItemUpdateFunc(realIndex, kmlcontrol)
  18. end)
  19. end
  20. function this:ItemCountFunc()
  21. return #self.attrItemsData
  22. end
  23. function this:ItemGetFunc(realIndex)
  24. end
  25. function this:ItemInitFunc(realIndex, kmlcontrol)
  26. end
  27. function this:ItemUpdateFunc(realIndex, rectTrans)
  28. local attrData = self.attrItemsData[realIndex + 1]
  29. local cfg = SL:GetConfig("cfg_att_info", attrData)
  30. local attrKey = "att"..self.cfgId
  31. local attrValue = cfg[attrKey]
  32. local attrName = cfg.name
  33. local attName = GUI:GetChildControl(self.view.att_list,realIndex,'attName')
  34. GUI:Text_setString(attName,attrName)
  35. local attValue = GUI:GetChildControl(self.view.att_list,realIndex,'attValue')
  36. GUI:Text_setString(attValue,tostring(attrValue))
  37. end
  38. ---创建或者刷新界面数据时调用
  39. function this:Refresh()
  40. self.unlockList = self.args.unlockList
  41. ---@type cfg_character_create_column[]
  42. local createCfg = SL:GetConfigTable("cfg_character_create")
  43. self.createRoleData = {}
  44. for _, v in pairs(createCfg) do
  45. if v.isShow == 1 then
  46. ---@type KLCareerButtonItem
  47. local toggle = GUI:UIPanel_Open("dev/ui/CreateRole/Item/KLCareerButton/KLCareerButtonItem",self.view.createrole_layout,self,nil,true)
  48. if v.conditionLv ~= 0 then
  49. toggle:RefreshToggle("Atlas/Common.spriteatlas","button_interface_window22", "button_interface_window21")
  50. end
  51. toggle:RefreshToggleName(v.id, v.name)
  52. toggle:SetOnValueChange(self.ToggleChangeEvent, self)
  53. end
  54. end
  55. self:RefreshCreateRoleUI(1)
  56. self:OnClickRandomButton()
  57. end
  58. ---注册UI事件和服务器消息
  59. function this:RegistEvents()
  60. GUI:AddOnClickEvent(self.view.closeBtn,self,self.OnClickCloseButton)
  61. GUI:AddOnClickEvent(self.view.btn_createrole_unlock,self,self.OnClickUnlockButton)
  62. GUI:AddOnClickEvent(self.view.btn_createrole_random,self,self.OnClickRandomButton)
  63. GUI:AddOnClickEvent(self.view.btn_createrole_create,self,self.OnClickCreateButton)
  64. SL:RegisterLuaNetMsg(MessageDef.ResRandomRoleNameMessage,self.ResRandomRoleNameMessage,self)
  65. SL:RegisterLuaNetMsg(MessageDef.ResUnLockUserCareerMessage,self.ResUnLockUserCareerMessage,self)
  66. end
  67. function this:OnClickCloseButton()
  68. GUI:UIPanel_Close('dev/ui/CreateRole/Panel/KLUICreateRole/KLUICreateRolePanel')
  69. ---@type UICreateRolePanel
  70. local panel = self.args.uiCreateRolePanel
  71. panel:HideChooseRolePanel(_, { [2] = "true" })
  72. end
  73. function this:OnClickUnlockButton()
  74. local cfg = SL:GetConfig("cfg_character_create",self.cfgId)
  75. --GUI:UIPanel_Open("dev/ui/Common/Panel/KLUICommonTips/KLUICommonTipsPanel",nil,nil, { showTips = "是否花费<color=#1ADD1F>" .. cfg.price .. "</color>解锁该职业", callback = self.UnLockCareer, ui = self })
  76. SL:CommonTipsMessage({
  77. showTips = "是否花费<color=#1ADD1F>" .. cfg.price .. "</color>解锁该职业",
  78. callback = self.UnLockCareer,
  79. ui = self
  80. })
  81. end
  82. function this:OnClickRandomButton()
  83. SL.NetManager_Req:ReqRandomRoleNameMessage(self.cfgId or 0, self.randomName or "")
  84. end
  85. function this:OnClickCreateButton()
  86. local name = GUI:Text_getString(self.view.createrole_input)
  87. local message = {}
  88. if string.isNullOrEmpty(name) then
  89. message.msg = "名字不能为空"
  90. message.type = "error"
  91. SL:TipMessage( "名字不能为空", 1, NoticeType.NoticeMid )
  92. --UINoticeMgr.PopTips(message)
  93. elseif string.find(name,"%s") ~= nil then
  94. message.msg = "名字中不能包含空格"
  95. message.type = "error"
  96. SL:TipMessage( "名字中不能包含空格", 1, NoticeType.NoticeMid )
  97. --UINoticeMgr.PopTips(message)
  98. elseif self:GetStrLen(name) > 14 then
  99. message.msg = "名字过长"
  100. message.type = "error"
  101. SL:TipMessage( "名字过长", 1, NoticeType.NoticeMid )
  102. --UINoticeMgr.PopTips(message)
  103. else
  104. SL.NetManager_Req:ReqCreateRoleMessage(name,1,self.cfgId)
  105. end
  106. end
  107. function this:GetStrLen(inputstr)
  108. if not inputstr or type(inputstr) ~= "string" or #inputstr <= 0 then
  109. return nil
  110. end
  111. local length = 0 -- 字符的个数
  112. local i = 1
  113. while true do
  114. local lengthCount=1
  115. local curByte = string.byte(inputstr, i)
  116. local byteCount = 1
  117. if curByte > 239 then
  118. byteCount = 4 -- 4字节字符
  119. lengthCount=2
  120. elseif curByte > 223 then
  121. lengthCount=2
  122. byteCount = 3 -- 汉字
  123. elseif curByte > 128 then
  124. byteCount = 2 -- 双字节字符
  125. else
  126. byteCount = 1 -- 单字节字符
  127. end
  128. i = i + byteCount
  129. length = length + lengthCount
  130. if i > #inputstr then
  131. break
  132. end
  133. end
  134. return length
  135. end
  136. ---玩家随机名字返回
  137. ---@param message UserProtos.RandomRoleNameRes
  138. function this:ResRandomRoleNameMessage(_, message)
  139. self.randomName = message.roleName
  140. GUI:Text_setString(self.view.createrole_input, self.randomName)
  141. end
  142. ---职业解锁返回
  143. ---@param message UserProtos.UnLockUserCareerRes
  144. function this:ResUnLockUserCareerMessage(_, message)
  145. if message.ok then
  146. LoginManager:RefreshCareerUnlockList(self.cfgId)
  147. end
  148. self:RefreshCreateRoleUI(self.cfgId, true)
  149. end
  150. function this:ToggleChangeEvent(_,eventData)
  151. if eventData.data ~= self.cfgId then
  152. self:RefreshCreateRoleUI(eventData.data)
  153. end
  154. end
  155. ---职业解锁请求
  156. function this:UnLockCareer()
  157. SL.NetManager_Req:ReqUnLockUserCareerMessage(CS.GameInfo.UID,self.cfgId)
  158. end
  159. ---根据职业根id刷新界面显示
  160. function this:RefreshCreateRoleUI(id,refreshBtn)
  161. self.cfgId = id
  162. ---@type cfg_character_create_column
  163. local cfg = SL:GetConfig("cfg_character_create",id)
  164. if not refreshBtn then
  165. local scale = string.split(cfg.modelScale,'#')
  166. local pos = string.split(cfg.modelPosition,'#')
  167. local rotation = string.split(cfg.modelRotation,'#')
  168. 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])
  169. GUI:Text_setString(self.view.createrole_description, cfg.description)
  170. self.attrItemsData = cfg.attShow
  171. GUI:DataListUpdateData(self.view.att_list)
  172. end
  173. ---是否解锁职业
  174. if cfg.conditionLv == 0 then
  175. GUI:setVisible(self.view.btn_createrole_unlock, false)
  176. GUI:setVisible(self.view.text_createrole_unlock, false)
  177. GUI:setVisible(self.view.btn_createrole_create, true)
  178. else
  179. if LoginManager:GetCareerUnlockData(id) then
  180. GUI:setVisible(self.view.btn_createrole_unlock, false)
  181. GUI:setVisible(self.view.text_createrole_unlock, false)
  182. GUI:setVisible(self.view.btn_createrole_create, true)
  183. else
  184. GUI:setVisible(self.view.btn_createrole_unlock, true)
  185. GUI:Text_setString(self.view.text_createrole_unlock, cfg.conditionsText)
  186. GUI:setVisible(self.view.text_createrole_unlock, true)
  187. GUI:setVisible(self.view.btn_createrole_create, false)
  188. end
  189. end
  190. end
  191. function this:Close()
  192. end
  193. return this