KLAttrPanel.lua 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273
  1. ---@class KLAttrPanel:UIKmlLuaPanelBase
  2. ---@field view KLAttrPanelView
  3. local KLAttrPanel = class(UIKmlLuaPanelBase)
  4. local this = KLAttrPanel
  5. ---创建时调用一次
  6. function KLAttrPanel:Init()
  7. self.freePoint = SL:GetMetaValue("REMAIN_ATTR_POINT") or 0
  8. self.add_strength = 0
  9. self.add_agility = 0
  10. self.add_intelligence = 0
  11. self.add_spirit = 0
  12. self.add_lead = 0
  13. self.calcShowPoint = SL:GetConfig('cfg_global', 270) and tonumber(SL:GetConfig('cfg_global', 270).value) or 20
  14. --cfg_att_info_post.InitOnUse()
  15. self:InitFirstAttr()
  16. self.strength_item = {}
  17. self.agility_item = {}
  18. self.intelligence_item = {}
  19. self.spirit_item = {}
  20. self.lead_item = {}
  21. self.special_item = {}
  22. self:InitSecondAttr()
  23. -- 这个布局在webgl平台下会不正常,这里单独设置下
  24. if SL:GetIsWebGL() then
  25. local attrEffectRect = GUI:GetRectTransform(self.view.AttrEffect)
  26. attrEffectRect.sizeDelta = Vector2.New(attrEffectRect.sizeDelta.x, 0)
  27. end
  28. end
  29. function this:InitFirstAttr()
  30. local cfgTable = SL:GetConfigTable("cfg_att_info")
  31. for k, v in pairs(cfgTable) do
  32. if v.base == 1 then
  33. local isShow = this.CheckSpecialAttrIdIsShow(v.id)
  34. if v.id == EMUCharacterAttrType.strength then
  35. GUI:setVisible(self.view.attInfoContent_dc, isShow)
  36. elseif v.id == EMUCharacterAttrType.agility then
  37. GUI:setVisible(self.view.attInfoContent_agility, isShow)
  38. elseif v.id == EMUCharacterAttrType.lead then
  39. GUI:setVisible(self.view.attInfoContent_command, isShow)
  40. elseif v.id == EMUCharacterAttrType.intelligence then
  41. GUI:setVisible(self.view.attInfoContent_intelligence, isShow)
  42. elseif v.id == EMUCharacterAttrType.spirit then
  43. GUI:setVisible(self.view.attInfoContent_stamina, isShow)
  44. end
  45. end
  46. end
  47. end
  48. function this:InitSecondAttr()
  49. local secondAttrTbl = this.GetBaseTwoAttrById(EMUCharacterAttrType.strength)
  50. for _, second_info in pairs(secondAttrTbl) do
  51. if second_info.id ~= EMUCharacterAttrType.maxDC then
  52. table.insert(self.strength_item, second_info.id)
  53. end
  54. end
  55. GUI:DataListInitData( self.view.attInfoContent_dc_content,function()
  56. return self:DataListDcItemCountFunc()
  57. end,function(realIndex)
  58. return self:DataListDcItemGetFunc(realIndex)
  59. end,function(realIndex, kmlcontrol)
  60. return self:DataListDcItemInitFunc(realIndex, kmlcontrol)
  61. end, function(realIndex, kmlcontrol)
  62. return self:DataListDcItemUpdateFunc(realIndex, kmlcontrol)
  63. end)
  64. secondAttrTbl = this.GetBaseTwoAttrById(EMUCharacterAttrType.agility)
  65. for _, second_info in pairs(secondAttrTbl) do
  66. if second_info.id ~= EMUCharacterAttrType.maxDC then
  67. table.insert(self.agility_item, second_info.id)
  68. end
  69. end
  70. GUI:DataListInitData( self.view.attInfoContent_agility_content,function()
  71. return self:DataListAgItemCountFunc()
  72. end,function(realIndex)
  73. return self:DataListAgItemGetFunc(realIndex)
  74. end,function(realIndex, kmlcontrol)
  75. return self:DataListAgItemInitFunc(realIndex, kmlcontrol)
  76. end, function(realIndex, kmlcontrol)
  77. return self:DataListAgItemUpdateFunc(realIndex, kmlcontrol)
  78. end)
  79. secondAttrTbl = this.GetBaseTwoAttrById(EMUCharacterAttrType.spirit)
  80. for _, second_info in pairs(secondAttrTbl) do
  81. if second_info.id ~= EMUCharacterAttrType.maxDC then
  82. table.insert(self.spirit_item, second_info.id)
  83. end
  84. end
  85. GUI:DataListInitData( self.view.attInfoContent_stamina_content,function()
  86. return self:DataListStItemCountFunc()
  87. end,function(realIndex)
  88. return self:DataListStItemGetFunc(realIndex)
  89. end,function(realIndex, kmlcontrol)
  90. return self:DataListStItemInitFunc(realIndex, kmlcontrol)
  91. end, function(realIndex, kmlcontrol)
  92. return self:DataListStItemUpdateFunc(realIndex, kmlcontrol)
  93. end)
  94. secondAttrTbl = this.GetBaseTwoAttrById(EMUCharacterAttrType.intelligence)
  95. for _, second_info in pairs(secondAttrTbl) do
  96. if second_info.id ~= EMUCharacterAttrType.maxDC and second_info.id ~= EMUCharacterAttrType.maxMC and second_info.id ~= EMUCharacterAttrType.maxZuZhou then
  97. table.insert(self.intelligence_item, second_info.id)
  98. end
  99. end
  100. GUI:DataListInitData( self.view.attInfoContent_intelligence_content,function()
  101. return self:DataListInItemCountFunc()
  102. end,function(realIndex)
  103. return self:DataListInItemGetFunc(realIndex)
  104. end,function(realIndex, kmlcontrol)
  105. return self:DataListInItemInitFunc(realIndex, kmlcontrol)
  106. end, function(realIndex, kmlcontrol)
  107. return self:DataListInItemUpdateFunc(realIndex, kmlcontrol)
  108. end)
  109. secondAttrTbl = this.GetBaseTwoAttrById(EMUCharacterAttrType.lead)
  110. for _, second_info in pairs(secondAttrTbl) do
  111. if second_info.id ~= EMUCharacterAttrType.maxDC then
  112. table.insert(self.lead_item, second_info.id)
  113. end
  114. end
  115. GUI:DataListInitData( self.view.attInfoContent_command_content,function()
  116. return self:DataListLeItemCountFunc()
  117. end,function(realIndex)
  118. return self:DataListLeItemGetFunc(realIndex)
  119. end,function(realIndex, kmlcontrol)
  120. return self:DataListLeItemInitFunc(realIndex, kmlcontrol)
  121. end, function(realIndex, kmlcontrol)
  122. return self:DataListLeItemUpdateFunc(realIndex, kmlcontrol)
  123. end)
  124. end
  125. function this.GetRightTwoAttr()
  126. local secondAttrTbl = {}
  127. local cfgTable = SL:GetConfigTable('cfg_att_info')
  128. for k, v in pairs(cfgTable) do
  129. if v.base == 3 or v.base == 5 then
  130. local isShow = this.CheckSpecialAttrIdIsShow(v.id)
  131. if isShow then
  132. table.insert(secondAttrTbl, v)
  133. end
  134. end
  135. end
  136. -- 同级属性排列顺序读表cfg_att_info的sort字段
  137. table.sort(secondAttrTbl, function(a, b) return a.sort < b.sort end)
  138. return secondAttrTbl
  139. end
  140. function this.GetBaseTwoAttrById(id)
  141. local attInfo = SL:GetConfig('cfg_att_info', id)
  142. local attributeName = attInfo.attribute
  143. local showSecondAttrTbl = {}
  144. --for _, baseTwoInfo in pairs(cfg_att_info_post.cfgBaseTbl[2]) do
  145. for _, baseTwoInfo in pairs(SL:CfgAttInfoPost_GetCfgBaseTbl()[2]) do
  146. if this.CheckSpecialAttrIdIsShow(baseTwoInfo.id) then
  147. local baseTwoName = baseTwoInfo.attribute
  148. ---@type cfg_att_conversion_column
  149. --local conversionInfo = MeData.GetAttConversionInfoByCareer(SL:MeData_GetCareer())[baseTwoName]
  150. local conversionInfo = SL.RoleAtt:GetAttConversionInfoByCareer(SL:MeData_GetCareer())[baseTwoName]
  151. -- 如果该1级属性加点后会影响该2级属性, 则表示它们是关联的, 需要显示在一级属性下面
  152. --if conversionInfo ~= nil and conversionInfo[attributeName] ~= 0 then
  153. if conversionInfo then
  154. if conversionInfo.display == id then
  155. -- 该1级属性影响到的2级属性, 先放table里, 后面还要按sort排序显示出来
  156. table.insert(showSecondAttrTbl, baseTwoInfo)
  157. end
  158. end
  159. end
  160. end
  161. table.sort(showSecondAttrTbl, function(a, b) return a.sort < b.sort end)
  162. return showSecondAttrTbl
  163. end
  164. function this.CheckSpecialAttrIdIsShow(attrId)
  165. local cfgInfo = SL:GetConfig("cfg_att_info", attrId)
  166. if cfgInfo == nil then
  167. logError("cfg_att_info id:" .. attrId .. "not exist!!!")
  168. return false
  169. else
  170. local isShow = cfgInfo.isshow
  171. if isShow[1] == 0 then
  172. return false
  173. elseif isShow[1] == 1 then
  174. return true
  175. elseif isShow[1] == 2 then
  176. for index=2, #isShow do
  177. local baseCareer = isShow[index]
  178. if baseCareer == SL:MeData_GetCareer().baseCareer then
  179. return true
  180. end
  181. end
  182. return false
  183. end
  184. end
  185. end
  186. function this:DataListDcItemCountFunc()
  187. return table.count(self.strength_item)
  188. end
  189. function this:DataListDcItemGetFunc(realIndex)
  190. end
  191. function this:DataListDcItemInitFunc(realIndex, kmlcontrol)
  192. --local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
  193. --GUI:Text_setString(strength_info,"攻击力:100~1000")
  194. end
  195. function this:DataListDcItemUpdateFunc(realIndex, kmlcontrol)
  196. local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
  197. local strength_add = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'dc_add')
  198. local attr_id = self.strength_item[realIndex+1]
  199. local attrName
  200. local attrValue
  201. local attrAddText = ""
  202. local attrAddValue
  203. if attr_id == EMUCharacterAttrType.minDC then
  204. attrName = "物 理 攻 击 力 "
  205. attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minDC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxDC))
  206. local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minDC)
  207. local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxDC)
  208. if minValue > 0 or maxValue > 0 then
  209. attrAddText = string.format("+ %s ~ %s", minValue, maxValue)
  210. end
  211. else
  212. attrName = SL:GetConfig('cfg_att_info', attr_id).showname
  213. local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
  214. if attrRemark == EAttrRemarkType.Number then
  215. attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
  216. attrAddValue = self:GetSpecialAttrAdd(attr_id)
  217. if attrAddValue > 0 then
  218. attrAddText = string.format("+%s", attrAddValue)
  219. end
  220. else
  221. attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
  222. attrAddValue = self:GetSpecialAttrAdd(attr_id)
  223. if attrAddValue > 0 then
  224. attrAddText = string.format("+%s%%", self:GetSpecialAttrAdd(attr_id))
  225. end
  226. end
  227. end
  228. GUI:Text_setString(strength_info,string.format("%s:%s", attrName, attrValue))
  229. GUI:Text_setString(strength_add,string.format("%s",attrAddText))
  230. end
  231. --敏捷
  232. function this:DataListAgItemCountFunc()
  233. return table.count(self.agility_item)
  234. end
  235. function this:DataListAgItemGetFunc(realIndex)
  236. end
  237. function this:DataListAgItemInitFunc(realIndex, kmlcontrol)
  238. --local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
  239. --GUI:Text_setString(strength_info,"攻击力:100~1000")
  240. end
  241. function this:DataListAgItemUpdateFunc(realIndex, kmlcontrol)
  242. local strength_info = GUI:GetChildControl(self.view.attInfoContent_agility_content,realIndex,'ag_info')
  243. local ag_add = GUI:GetChildControl(self.view.attInfoContent_agility_content,realIndex,'ag_add')
  244. local attr_id = self.agility_item[realIndex+1]
  245. local attrName
  246. local attrValue
  247. local attrAddText = ""
  248. local attrAddValue
  249. if attr_id == EMUCharacterAttrType.minDC then
  250. attrName = "物 理 攻 击 力 "
  251. attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minDC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxDC))
  252. local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minDC)
  253. local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxDC)
  254. if minValue > 0 or maxValue > 0 then
  255. attrAddText = string.format("+ %s ~ %s", minValue, maxValue)
  256. end
  257. else
  258. attrName = SL:GetConfig('cfg_att_info', attr_id).showname
  259. local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
  260. if attrRemark == EAttrRemarkType.Number then
  261. attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
  262. attrAddValue = self:GetSpecialAttrAdd(attr_id)
  263. if attrAddValue > 0 then
  264. attrAddText = string.format("+%s", attrAddValue)
  265. end
  266. else
  267. attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
  268. attrAddValue = self:GetSpecialAttrAdd(attr_id)
  269. if attrAddValue > 0 then
  270. attrAddText = string.format("+%s%%", self:GetSpecialAttrAdd(attr_id))
  271. end
  272. end
  273. end
  274. GUI:Text_setString(strength_info,string.format("%s:%s", attrName, attrValue))
  275. GUI:Text_setString(ag_add,string.format("%s",attrAddText))
  276. end
  277. -- 智力
  278. function this:DataListInItemCountFunc()
  279. return table.count(self.intelligence_item)
  280. end
  281. function this:DataListInItemGetFunc(realIndex)
  282. end
  283. function this:DataListInItemInitFunc(realIndex, kmlcontrol)
  284. --local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
  285. --GUI:Text_setString(strength_info,"攻击力:100~1000")
  286. end
  287. function this:DataListInItemUpdateFunc(realIndex, kmlcontrol)
  288. local strength_info = GUI:GetChildControl(self.view.attInfoContent_intelligence_content,realIndex,'in_info')
  289. local in_add = GUI:GetChildControl(self.view.attInfoContent_intelligence_content,realIndex,'in_add')
  290. local attr_id = self.intelligence_item[realIndex+1]
  291. local attrName
  292. local attrValue
  293. local attrAddText = ""
  294. local attrAddValue
  295. if attr_id == EMUCharacterAttrType.minDC then
  296. attrName = "物 理 攻 击 力 "
  297. attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minDC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxDC))
  298. local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minDC)
  299. local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxDC)
  300. if minValue > 0 or maxValue > 0 then
  301. attrAddText = string.format("+ %s ~ %s", minValue, maxValue)
  302. end
  303. elseif attr_id == EMUCharacterAttrType.minMC then
  304. attrName = "魔 法 攻 击 力 "
  305. attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minMC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxMC))
  306. local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minMC)
  307. local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxMC)
  308. if minValue > 0 or maxValue > 0 then
  309. attrAddText = string.format("+ %s ~ %s",minValue, maxValue)
  310. end
  311. elseif attr_id == EMUCharacterAttrType.minZuZhou then
  312. attrName = "诅 咒 攻 击 力 "
  313. attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minZuZhou),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxZuZhou))
  314. local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minZuZhou)
  315. local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxZuZhou)
  316. if minValue > 0 or maxValue > 0 then
  317. attrAddText = string.format("+ %s ~ %s",minValue, maxValue)
  318. end
  319. else
  320. attrName = SL:GetConfig('cfg_att_info', attr_id).showname
  321. local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
  322. if attrRemark == EAttrRemarkType.Number then
  323. attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
  324. attrAddValue = self:GetSpecialAttrAdd(attr_id)
  325. if attrAddValue > 0 then
  326. attrAddText = string.format("+%s", attrAddValue)
  327. end
  328. else
  329. attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
  330. attrAddValue = self:GetSpecialAttrAdd(attr_id)
  331. if attrAddValue > 0 then
  332. attrAddText = string.format("+%s%%", self:GetSpecialAttrAdd(attr_id))
  333. end
  334. end
  335. end
  336. GUI:Text_setString(strength_info,string.format("%s:%s", attrName, attrValue))
  337. GUI:Text_setString(in_add,string.format("%s",attrAddText))
  338. end
  339. -- 体力
  340. function this:DataListStItemCountFunc()
  341. return table.count(self.spirit_item)
  342. end
  343. function this:DataListStItemGetFunc(realIndex)
  344. end
  345. function this:DataListStItemInitFunc(realIndex, kmlcontrol)
  346. --local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
  347. --GUI:Text_setString(strength_info,"攻击力:100~1000")
  348. end
  349. function this:DataListStItemUpdateFunc(realIndex, kmlcontrol)
  350. local strength_info = GUI:GetChildControl(self.view.attInfoContent_stamina_content,realIndex,'st_info')
  351. local st_add = GUI:GetChildControl(self.view.attInfoContent_stamina_content,realIndex,'st_add')
  352. local attr_id = self.spirit_item[realIndex+1]
  353. local attrName
  354. local attrValue
  355. local attrAddText = ""
  356. local attrAddValue
  357. if attr_id == EMUCharacterAttrType.minDC then
  358. attrName = "物 理 攻 击 力 "
  359. attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minDC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxDC))
  360. local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minDC)
  361. local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxDC)
  362. if minValue > 0 or maxValue > 0 then
  363. attrAddText = string.format("+ %s ~ %s", minValue, maxValue)
  364. end
  365. else
  366. attrName = SL:GetConfig('cfg_att_info', attr_id).showname
  367. local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
  368. if attrRemark == EAttrRemarkType.Number then
  369. attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
  370. attrAddValue = self:GetSpecialAttrAdd(attr_id)
  371. if attrAddValue > 0 then
  372. attrAddText = string.format("+%s", attrAddValue)
  373. end
  374. else
  375. attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
  376. attrAddValue = self:GetSpecialAttrAdd(attr_id)
  377. if attrAddValue > 0 then
  378. attrAddText = string.format("+%s%%", self:GetSpecialAttrAdd(attr_id))
  379. end
  380. end
  381. end
  382. GUI:Text_setString(strength_info,string.format("%s:%s", attrName, attrValue))
  383. GUI:Text_setString(st_add,string.format("%s",attrAddText))
  384. end
  385. -- 统帅
  386. function this:DataListLeItemCountFunc()
  387. return table.count(self.lead_item)
  388. end
  389. function this:DataListLeItemGetFunc(realIndex)
  390. end
  391. function this:DataListLeItemInitFunc(realIndex, kmlcontrol)
  392. --local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
  393. --GUI:Text_setString(strength_info,"攻击力:100~1000")
  394. end
  395. function this:DataListLeItemUpdateFunc(realIndex, kmlcontrol)
  396. local strength_info = GUI:GetChildControl(self.view.attInfoContent_command_content,realIndex,'le_info')
  397. local le_add = GUI:GetChildControl(self.view.attInfoContent_command_content,realIndex,'le_add')
  398. local attr_id = self.lead_item[realIndex+1]
  399. local attrName
  400. local attrValue
  401. local attrAddText = ""
  402. local attrAddValue
  403. if attr_id == EMUCharacterAttrType.minDC then
  404. attrName = "物 理 攻 击 力 "
  405. attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minDC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxDC))
  406. local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minDC)
  407. local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxDC)
  408. if minValue > 0 or maxValue > 0 then
  409. attrAddText = string.format("+ %s ~ %s", minValue, maxValue)
  410. end
  411. else
  412. attrName = SL:GetConfig('cfg_att_info', attr_id).showname
  413. local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
  414. if attrRemark == EAttrRemarkType.Number then
  415. attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
  416. attrAddValue = self:GetSpecialAttrAdd(attr_id)
  417. if attrAddValue > 0 then
  418. attrAddText = string.format("+%s", attrAddValue)
  419. end
  420. else
  421. attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
  422. attrAddValue = self:GetSpecialAttrAdd(attr_id)
  423. if attrAddValue > 0 then
  424. attrAddText = string.format("+%s%%", self:GetSpecialAttrAdd(attr_id))
  425. end
  426. end
  427. end
  428. GUI:Text_setString(strength_info,string.format("%s:%s", attrName, attrValue))
  429. GUI:Text_setString(le_add,string.format("%s",attrAddText))
  430. end
  431. -- 特殊
  432. function this:DataListSpItemCountFunc()
  433. return table.count(self.special_item)
  434. end
  435. function this:DataListSpItemGetFunc(realIndex)
  436. end
  437. function this:DataListSpItemInitFunc(realIndex, kmlcontrol)
  438. --local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
  439. --GUI:Text_setString(strength_info,"攻击力:100~1000")
  440. end
  441. function this:DataListSpItemUpdateFunc(realIndex, kmlcontrol)
  442. local strength_panel = GUI:GetChildControl(self.view.attr_data_list,realIndex,'special_panel')
  443. local strength_info = GUI:GetChildControl(self.view.attr_data_list,realIndex,'special_attr_name')
  444. local strength_value = GUI:GetChildControl(self.view.attr_data_list,realIndex,'special_value')
  445. local attr_id = self.special_item[realIndex+1]
  446. local attrName = SL:GetConfig('cfg_att_info', attr_id).name
  447. local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
  448. local attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
  449. if attrValue == nil or attrValue == 0 then
  450. GUI:setVisible(strength_panel, false)
  451. return
  452. end
  453. GUI:setVisible(strength_panel, true)
  454. if attrRemark == EAttrRemarkType.Dimi then
  455. attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
  456. end
  457. GUI:Text_setString(strength_info,attrName)
  458. GUI:Text_setString(strength_value,tostring(attrValue))
  459. end
  460. function this:RefreshRightAttr()
  461. self.special_item = {}
  462. local secondAttrTbl = this.GetRightTwoAttr()
  463. for _, second_info in pairs(secondAttrTbl) do
  464. local attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", second_info.id)
  465. if attrValue ~= nil and attrValue ~= 0 then
  466. table.insert(self.special_item, second_info.id)
  467. end
  468. end
  469. GUI:DataListInitData( self.view.attr_data_list,function()
  470. return self:DataListSpItemCountFunc()
  471. end,function(realIndex)
  472. return self:DataListSpItemGetFunc(realIndex)
  473. end,function(realIndex, kmlcontrol)
  474. return self:DataListSpItemInitFunc(realIndex, kmlcontrol)
  475. end, function(realIndex, kmlcontrol)
  476. return self:DataListSpItemUpdateFunc(realIndex, kmlcontrol)
  477. end)
  478. GUI:DataListUpdateData(self.view.attr_data_list)
  479. end
  480. ---创建或者刷新界面数据时调用
  481. function KLAttrPanel:Refresh()
  482. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_ROLE_ATT_ADD_WAY)
  483. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_ROLE_ATTR_POINT_PROGRAMME)
  484. --GUI:DataListUpdateData(self.view.attInfoContent_dc_content)
  485. --GUI:DataListUpdateData(self.view.attInfoContent_intelligence_content)
  486. --GUI:DataListUpdateData(self.view.attInfoContent_command_content)
  487. --GUI:DataListUpdateData(self.view.attInfoContent_stamina_content)
  488. --GUI:DataListUpdateData(self.view.attInfoContent_agility_content)
  489. self:RefreshRightAttr()
  490. --设置名字
  491. GUI:Text_setString(self.view.name, SL:GetMetaValue(EMetaVarGetKey.USER_NAME))
  492. --设置职业
  493. --local careerId = cfg_career_post.Get_cfg_career_id(SL:MeData_GetCareer())
  494. local careerId = SL:CfgCareerPost_GetCfgCareerId(SL:MeData_GetCareer())
  495. --local careerName = cfg_career_post.Get_cfg_career_name(careerId) or "未定义职业"
  496. local careerName = SL:CfgCareerPost_GetCfgCareerName(careerId) or "未定义职业"
  497. local serverName = SL:GetCurServerName()
  498. GUI:Text_setString(self.view.regionAndCareer, string.format("[%s-%s]", serverName, careerName))
  499. --等级
  500. local level = SL:MeData_GetLevel()
  501. GUI:Text_setString(self.view.levelText, "等级:" .. level)
  502. --剩余点数
  503. self:SetFreePoint()
  504. --经验
  505. self:RefreshExpText()
  506. --力量等属性
  507. self:SetAddNumInfo()
  508. self:SetAddSubBtnState()
  509. self:ShowFruitButton()
  510. self:ShowFruitPanel(self.args and self.args.isShowFruit)
  511. SL.HideMainPanel()
  512. self:SetFreeSwitchAttrPoint(true)
  513. end
  514. function this:SetFreeSwitchAttrPoint(isShow)
  515. if isShow then
  516. GUI:setVisible(self.view.btn_exchange_point, PrivilegeCardManager.GetFreeSwitchAttrPoint())
  517. else
  518. GUI:setVisible(self.view.btn_exchange_point,false)
  519. end
  520. end
  521. function this:ShowFruitButton()
  522. ---@type cfg_global_column
  523. local cfg = SL:GetConfig("cfg_global",3003)
  524. ---果实是否开放
  525. self.isFruitOpen = SL:MeData_GetLevel() >= tonumber(cfg.value)
  526. GUI:SetActive(self.view.appleButton,self.isFruitOpen)
  527. SL:RefreshPanelALLRedPoint("KLAttrPanel")
  528. end
  529. ---注册UI事件和服务器消息
  530. function KLAttrPanel:RegistEvents()
  531. SL:RegisterLUAEvent(LUA_EVENT_EXPCHANGE,self.LUA_EVENT_EXPCHANGE,self)
  532. SL:RegisterLUAEvent(LUA_EVENT_ROLE_PROPERTY_CHANGE,self.LUA_EVENT_ROLE_PROPERTY_CHANGE,self)
  533. SL:RegisterLUAEvent(LUA_EVENT_SURE_ATTR_PLAN,self.LUA_EVENT_SURE_ATTR_PLAN,self)
  534. SL:RegisterLUAEvent(LUA_EVENT_RESET_POINT,self.LUA_EVENT_RESET_POINT,self)
  535. SL:RegisterLUAEvent(LUA_EVENT_FRUIT_PANEL_CLOSE, self.CloseFruitPanel, self)
  536. --SL:RegisterLuaNetMsg(MessageDef.ResRoleDeployAttrPointMessage,self.ResRoleDeployAttrPointMessage,self)
  537. --SL:RegisterLuaNetMsg(MessageDef.ResAttAddWayMessage,self.ResAttAddWayMessage,self)
  538. GUI:AddOnClickEvent(self.view.attrCloseButton,self,self.OnClickCloseButton)
  539. GUI:AddOnClickEvent(self.view.CloseButton,self,self.OnClickCloseButton)
  540. GUI:AddOnClickEvent(self.view.plusButton_dc,self,self.plusButton_dc)
  541. GUI:AddOnClickEvent(self.view.plusButton_stamina,self,self.plusButton_stamina)
  542. GUI:AddOnClickEvent(self.view.plusButton_intelligence,self,self.plusButton_intelligence)
  543. GUI:AddOnClickEvent(self.view.plusButton_command,self,self.plusButton_command)
  544. GUI:AddOnClickEvent(self.view.plusButton_agility,self,self.plusButton_agility)
  545. GUI:AddOnClickEvent(self.view.minusButton_dc,self,self.minusButton_dc)
  546. GUI:AddOnClickEvent(self.view.minusButton_stamina,self,self.minusButton_stamina)
  547. GUI:AddOnClickEvent(self.view.minusButton_intelligence,self,self.minusButton_intelligence)
  548. GUI:AddOnClickEvent(self.view.minusButton_command,self,self.minusButton_command)
  549. GUI:AddOnClickEvent(self.view.minusButton_agility,self,self.minusButton_agility)
  550. GUI:AddOnClickEvent(self.view.sureButton,self,self.sureButton)
  551. GUI:AddOnClickEvent(self.view.commandButton,self,self.commandButton)
  552. GUI:AddOnClickEvent(self.view.resetPointButton,self,self.resetPointButton)
  553. GUI:AddOnClickEvent(self.view.appleButton,self,self.OnClickApple)
  554. GUI:AddOnClickEvent(self.view.btn_exchange_point,self,self.btn_exchange_point)
  555. end
  556. ---果实按钮
  557. function this:OnClickApple()
  558. self:ShowFruitPanel(not self.isShowFruitUI)
  559. end
  560. function this:CloseFruitPanel()
  561. self:ShowFruitPanel(false)
  562. end
  563. ---显示果实界面
  564. function this:ShowFruitPanel(isShow)
  565. self.isShowFruitUI = isShow
  566. GUI:SetActive(self.view.AttrEffect,not isShow)
  567. if isShow then
  568. GUI:setPosition(self.view.root,-90,0)
  569. GUI:UIPanel_Open("dev/outui/UIFruit/Panel/KLUIFruit/KLUIFruitPanel")
  570. else
  571. GUI:setPosition(self.view.root,5,0)
  572. GUI:UIPanel_Close("dev/outui/UIFruit/Panel/KLUIFruit/KLUIFruitPanel")
  573. end
  574. end
  575. function this:btn_exchange_point()
  576. GUI:UIPanel_Open("dev/outui/Role/Panel/KLChangeAttrScheme/KLChangeAttrSchemePanel")
  577. end
  578. function this:resetPointButton()
  579. GUI:UIPanel_Open("dev/ui/Role/Item/KLResetPoint/KLResetPointItem",nil,self)
  580. end
  581. function this:commandButton()
  582. local attAddWay = SL:MeData_GetRoleExtInfo().attAddWay
  583. --local attAddWay = 0
  584. if attAddWay == -1 then
  585. ---@type cfg_career_column
  586. local tbl = SL:GetMetaValue(EMetaVarGetKey.ME_CAREER_TAB_COLUMN)
  587. GUI:UIPanel_Open("dev/outui/Role/Panel/KLAttPointSuitChoice/KLAttPointSuitChoicePanel",nil,nil,{curCareer=tbl.id})
  588. return
  589. end
  590. local tbl = SL:GetConfigMultiKeys('cfg_career', SL:MeData_GetCareer().baseCareer, SL:MeData_GetCareer().careerRank, 'baseCareer', 'careerRank')
  591. commandAdd = tbl.careerRec
  592. if commandAdd == nil or not next(commandAdd) then
  593. logError("推荐加点方案为空")
  594. return
  595. end
  596. commandAdd = commandAdd[attAddWay+1]
  597. -- 每个属性分配点数: 可用点数/(力量+敏捷+体力+智力+统帅) 除后的商 乘以具体的属性值 余数加到职业对应优势属性上
  598. local totalCount = 0
  599. for _, attrCount in pairs(commandAdd) do
  600. totalCount = totalCount + attrCount
  601. end
  602. -- 除数为0, 不执行推荐加点逻辑。
  603. if totalCount == 0 then
  604. return
  605. end
  606. local addCount = self.freePoint // totalCount
  607. self.add_strength = self.add_strength + commandAdd[1] * addCount
  608. self.add_spirit = self.add_spirit + commandAdd[3] * addCount
  609. self.add_intelligence = self.add_intelligence + commandAdd[4] * addCount
  610. self.add_lead = self.add_lead + commandAdd[5] * addCount
  611. self.add_agility = self.add_agility + commandAdd[2] * addCount
  612. self.freePoint = self.freePoint - addCount * totalCount
  613. -- 余数加到职业对应优势属性上
  614. -- 优势属性:推荐加点中比例最大的属性,如果存在同比例的属性,则按照力量>敏捷>体力>智力>统帅来(按照commandAdd的最先最大的.)
  615. if self.freePoint > 0 then
  616. local maxCount = -1
  617. local selectIndex= -1
  618. for attrIndex, count in pairs(commandAdd) do
  619. if maxCount < count then
  620. maxCount = count
  621. selectIndex = attrIndex
  622. end
  623. end
  624. if selectIndex == 1 then
  625. self.add_strength = self.add_strength + self.freePoint
  626. elseif selectIndex == 2 then
  627. self.add_agility = self.add_agility + self.freePoint
  628. elseif selectIndex == 3 then
  629. self.add_spirit = self.add_spirit + self.freePoint
  630. elseif selectIndex == 4 then
  631. self.add_intelligence = self.add_intelligence + self.freePoint
  632. elseif selectIndex == 5 then
  633. self.add_lead = self.add_lead + self.freePoint
  634. end
  635. self.freePoint = 0
  636. end
  637. self:SetFreePoint()
  638. self:SetAddNumInfo()
  639. self:SetAddSubBtnState()
  640. end
  641. function this:ResRoleDeployAttrPointMessage()
  642. --剩余点数
  643. --local freePoint = SL:MeData_GetRoleExtInfo().remainAttrPoint or 0
  644. --GUI:Text_setString(self.view.remainPointText, tostring(freePoint))
  645. --力量等属性
  646. self:SetAddNumInfo()
  647. end
  648. function this:sureButton()
  649. local sendData = {}
  650. if self.add_strength > 0 then
  651. table.insert(sendData, { type = EMUCharacterAttrType.strength, num = self.add_strength })
  652. end
  653. if self.add_agility > 0 then
  654. table.insert(sendData, { type = EMUCharacterAttrType.agility, num = self.add_agility })
  655. end
  656. if self.add_lead > 0 then
  657. table.insert(sendData, { type = EMUCharacterAttrType.lead, num = self.add_lead })
  658. end
  659. if self.add_intelligence > 0 then
  660. table.insert(sendData, { type = EMUCharacterAttrType.intelligence, num = self.add_intelligence })
  661. end
  662. if self.add_spirit > 0 then
  663. table.insert(sendData, { type = EMUCharacterAttrType.spirit, num = self.add_spirit })
  664. end
  665. SL.RoleAtt:ReqDeployAttrPoint(sendData,1)
  666. self:SaveEachPlanAttrPoint(sendData)
  667. self:Reset()
  668. end
  669. function this:SaveEachPlanAttrPoint(data)
  670. local sendData = {}
  671. local tempData = {}
  672. local oldData = PrivilegeCardManager.GetCurrentAttrPointPlan()
  673. if oldData then
  674. for i, v in pairs(oldData) do
  675. tempData[v.type] = v.num
  676. end
  677. for i, v in pairs(data) do
  678. if tempData[v.type] then
  679. tempData[v.type] = tempData[v.type] + v.num
  680. else
  681. tempData[v.type] = v.num
  682. end
  683. end
  684. for i, v in pairs(tempData) do
  685. local tbl = {}
  686. tbl.type = i
  687. tbl.num = v
  688. sendData[#sendData + 1] = tbl
  689. end
  690. else
  691. sendData = data
  692. end
  693. PrivilegeCardManager.SendMessageSetFreeAttrInfo(nil, sendData, nil)
  694. end
  695. function this:Reset()
  696. self.add_strength = 0
  697. self.add_agility = 0
  698. self.add_lead = 0
  699. self.add_intelligence = 0
  700. self.add_spirit = 0
  701. self:SetAddNumInfo()
  702. self:SetAddSubBtnState()
  703. end
  704. function this:plusButton_dc()
  705. if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
  706. GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {x=-278, maxNum=self.freePoint, callback=self.plus_dc, ins=self, intro="增加点数"})
  707. return
  708. end
  709. if self.freePoint > 0 then
  710. self.freePoint = self.freePoint - 1
  711. self.add_strength = self.add_strength + 1
  712. self:SetAddSubBtnState()
  713. self:SetFreePoint()
  714. self:SetAddNumInfo()
  715. end
  716. end
  717. function this:plus_dc(addValue)
  718. self.freePoint = self.freePoint - addValue
  719. self.add_strength = self.add_strength + addValue
  720. self:SetAddSubBtnState()
  721. self:SetFreePoint()
  722. self:SetAddNumInfo()
  723. end
  724. function this:plusButton_stamina()
  725. if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
  726. GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.freePoint, callback=self.plus_sta, ins=self, intro="增加点数"})
  727. return
  728. end
  729. if self.freePoint > 0 then
  730. self.freePoint = self.freePoint - 1
  731. self.add_spirit = self.add_spirit + 1
  732. self:SetAddSubBtnState()
  733. self:SetFreePoint()
  734. self:SetAddNumInfo()
  735. end
  736. end
  737. function this:plus_sta(addValue)
  738. self.freePoint = self.freePoint - addValue
  739. self.add_spirit = self.add_spirit + addValue
  740. self:SetAddSubBtnState()
  741. self:SetFreePoint()
  742. self:SetAddNumInfo()
  743. end
  744. function this:plusButton_intelligence()
  745. if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
  746. GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.freePoint, callback=self.plus_intel, ins=self, intro="增加点数"})
  747. return
  748. end
  749. if self.freePoint > 0 then
  750. self.freePoint = self.freePoint - 1
  751. self.add_intelligence = self.add_intelligence + 1
  752. self:SetAddSubBtnState()
  753. self:SetFreePoint()
  754. self:SetAddNumInfo()
  755. end
  756. end
  757. function this:plus_intel(addValue)
  758. self.freePoint = self.freePoint - addValue
  759. self.add_intelligence = self.add_intelligence + addValue
  760. self:SetAddSubBtnState()
  761. self:SetFreePoint()
  762. self:SetAddNumInfo()
  763. end
  764. function this:plusButton_command()
  765. if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
  766. GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.freePoint, callback=self.plus_lead, ins=self, intro="增加点数"})
  767. return
  768. end
  769. if self.freePoint > 0 then
  770. self.freePoint = self.freePoint - 1
  771. self.add_lead = self.add_lead + 1
  772. self:SetAddSubBtnState()
  773. self:SetFreePoint()
  774. self:SetAddNumInfo()
  775. end
  776. end
  777. function this:plus_lead(addValue)
  778. self.freePoint = self.freePoint - addValue
  779. self.add_lead = self.add_lead + addValue
  780. self:SetAddSubBtnState()
  781. self:SetFreePoint()
  782. self:SetAddNumInfo()
  783. end
  784. function this:plusButton_agility()
  785. if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
  786. GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.freePoint, callback=self.plus_ag, ins=self, intro="增加点数"})
  787. return
  788. end
  789. if self.freePoint > 0 then
  790. self.freePoint = self.freePoint - 1
  791. self.add_agility = self.add_agility + 1
  792. self:SetAddSubBtnState()
  793. self:SetFreePoint()
  794. self:SetAddNumInfo()
  795. end
  796. end
  797. function this:plus_ag(addValue)
  798. self.freePoint = self.freePoint - addValue
  799. self.add_agility = self.add_agility + addValue
  800. self:SetAddSubBtnState()
  801. self:SetFreePoint()
  802. self:SetAddNumInfo()
  803. end
  804. function this:minusButton_agility()
  805. if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
  806. GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.add_agility, callback=self.minus_ag, ins=self, intro="减少点数"})
  807. return
  808. end
  809. if self.add_agility > 0 then
  810. self.freePoint = self.freePoint + 1
  811. self.add_agility = self.add_agility - 1
  812. self:SetAddSubBtnState()
  813. self:SetFreePoint()
  814. self:SetAddNumInfo()
  815. end
  816. end
  817. function this:minus_ag(addValue)
  818. self.freePoint = self.freePoint + addValue
  819. self.add_agility = self.add_agility - addValue
  820. self:SetAddSubBtnState()
  821. self:SetFreePoint()
  822. self:SetAddNumInfo()
  823. end
  824. function this:minusButton_dc()
  825. if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
  826. GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.add_strength, callback=self.minus_dc, ins=self, intro="减少点数"})
  827. return
  828. end
  829. if self.add_strength > 0 then
  830. self.freePoint = self.freePoint + 1
  831. self.add_strength = self.add_strength - 1
  832. self:SetAddSubBtnState()
  833. self:SetFreePoint()
  834. self:SetAddNumInfo()
  835. end
  836. end
  837. function this:minus_dc(addValue)
  838. self.freePoint = self.freePoint + addValue
  839. self.add_strength = self.add_strength - addValue
  840. self:SetAddSubBtnState()
  841. self:SetFreePoint()
  842. self:SetAddNumInfo()
  843. end
  844. function this:minusButton_stamina()
  845. if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
  846. GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.add_spirit, callback=self.minus_sta, ins=self, intro="减少点数"})
  847. return
  848. end
  849. if self.add_spirit > 0 then
  850. self.freePoint = self.freePoint + 1
  851. self.add_spirit = self.add_spirit - 1
  852. self:SetAddSubBtnState()
  853. self:SetFreePoint()
  854. self:SetAddNumInfo()
  855. end
  856. end
  857. function this:minus_sta(addValue)
  858. self.freePoint = self.freePoint + addValue
  859. self.add_spirit = self.add_spirit - addValue
  860. self:SetAddSubBtnState()
  861. self:SetFreePoint()
  862. self:SetAddNumInfo()
  863. end
  864. function this:minusButton_intelligence()
  865. if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
  866. GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.add_intelligence, callback=self.minus_intel, ins=self, intro="减少点数"})
  867. return
  868. end
  869. if self.add_intelligence > 0 then
  870. self.freePoint = self.freePoint + 1
  871. self.add_intelligence = self.add_intelligence - 1
  872. self:SetAddSubBtnState()
  873. self:SetFreePoint()
  874. self:SetAddNumInfo()
  875. end
  876. end
  877. function this:minus_intel(addValue)
  878. self.freePoint = self.freePoint + addValue
  879. self.add_intelligence = self.add_intelligence - addValue
  880. self:SetAddSubBtnState()
  881. self:SetFreePoint()
  882. self:SetAddNumInfo()
  883. end
  884. function this:minusButton_command()
  885. if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
  886. GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.add_lead, callback=self.minus_le, ins=self, intro="减少点数"})
  887. return
  888. end
  889. if self.add_lead > 0 then
  890. self.freePoint = self.freePoint + 1
  891. self.add_lead = self.add_lead - 1
  892. self:SetAddSubBtnState()
  893. self:SetFreePoint()
  894. self:SetAddNumInfo()
  895. end
  896. end
  897. function this:minus_le(addValue)
  898. self.freePoint = self.freePoint + addValue
  899. self.add_lead = self.add_lead - addValue
  900. self:SetAddSubBtnState()
  901. self:SetFreePoint()
  902. self:SetAddNumInfo()
  903. end
  904. function this:OnClickCloseButton()
  905. GUI:UIPanel_Close("dev/ui/Role/Panel/KLAttr/KLAttrPanel")
  906. GUI:UIPanel_Close("dev/ui/Common/Panel/KLCalc/KLCalcPanel")
  907. SL.ShowMainPanel()
  908. end
  909. function this:Close()
  910. self:ShowFruitPanel(false)
  911. end
  912. function this:LUA_EVENT_EXPCHANGE()
  913. self:RefreshExpText()
  914. end
  915. function this:LUA_EVENT_ROLE_PROPERTY_CHANGE()
  916. SL:RefreshPanelALLRedStateKmlByCondition("checkUnusedAbility")
  917. self:SetAddNumInfo()
  918. self:RefreshRightAttr()
  919. if PrivilegeCardManager.attrNeedRefresh then
  920. SL:ScheduleOnce(0.1, function()
  921. PrivilegeCardManager.attrNeedRefresh = false
  922. self:ResetUi()
  923. end)
  924. end
  925. end
  926. ---@param message RoleProtos.DeployResult
  927. function this:LUA_EVENT_RESET_POINT(id, message)
  928. self:ResetUi()
  929. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_ROLE_ATT_ADD_WAY)
  930. end
  931. ---@param message UserProtos.SetRoleAttAddWay
  932. function this:LUA_EVENT_SURE_ATTR_PLAN(id, message)
  933. self:SetFreePoint()
  934. --self:commandButton()
  935. end
  936. function this:ResetUi()
  937. self.freePoint = SL:MeData_GetRoleExtInfo().RemainAttrPoint
  938. self:SetFreePoint()
  939. self.add_strength = 0
  940. self.add_agility = 0
  941. self.add_intelligence = 0
  942. self.add_spirit = 0
  943. self.add_lead = 0
  944. self:SetAddNumInfo()
  945. self:SetAddSubBtnState()
  946. end
  947. function this:RefreshExpText()
  948. local nowExp = SL:MeData_GetRoleExtInfo().exp + SL:MeData_GetRoleExtInfo().expandExp
  949. local needExp = SL:GetConfig("cfg_level", SL:MeData_GetLevel()).exp
  950. if needExp == 0 then
  951. if SL:HasConfig("cfg_level", SL:MeData_GetLevel() + 1) then
  952. needExp = SL:GetConfig("cfg_level", SL:MeData_GetLevel() + 1).exp
  953. end
  954. end
  955. GUI:Text_setString(self.view.expText, string.format("经验值:%s/%s", Misc.GetSampleNumberString(nowExp), Misc.GetSampleNumberString(needExp)))
  956. end
  957. -- 分配点数按钮显隐
  958. function this:SetAddSubBtnState()
  959. if self.freePoint == 0 then
  960. GUI:setVisible(self.view.plusButton_dc, false)
  961. GUI:setVisible(self.view.plusButton_agility, false)
  962. GUI:setVisible(self.view.plusButton_command, false)
  963. GUI:setVisible(self.view.plusButton_intelligence, false)
  964. GUI:setVisible(self.view.plusButton_stamina, false)
  965. else
  966. GUI:setVisible(self.view.plusButton_dc, true)
  967. GUI:setVisible(self.view.plusButton_agility, true)
  968. GUI:setVisible(self.view.plusButton_command, true)
  969. GUI:setVisible(self.view.plusButton_intelligence, true)
  970. GUI:setVisible(self.view.plusButton_stamina, true)
  971. end
  972. GUI:setVisible(self.view.minusButton_agility, self.add_agility > 0 and true or false)
  973. GUI:setVisible(self.view.minusButton_intelligence, self.add_intelligence > 0 and true or false)
  974. GUI:setVisible(self.view.minusButton_command, self.add_lead > 0 and true or false)
  975. GUI:setVisible(self.view.minusButton_stamina, self.add_spirit > 0 and true or false)
  976. GUI:setVisible(self.view.minusButton_dc, self.add_strength > 0 and true or false)
  977. if self.add_spirit | self.add_intelligence | self.add_lead + self.add_agility | self.add_strength > 0 then
  978. GUI:setVisible(self.view.sureButton, true)
  979. GUI:setVisible(self.view.light_btn1, true)
  980. GUI:SetActive(self.view.appleButton,false)
  981. self:SetFreeSwitchAttrPoint(false)
  982. else
  983. GUI:setVisible(self.view.sureButton, false)
  984. GUI:setVisible(self.view.light_btn1, false)
  985. if self.isFruitOpen then
  986. GUI:SetActive(self.view.appleButton,true)
  987. end
  988. self:SetFreeSwitchAttrPoint(true)
  989. end
  990. end
  991. function this:SetFreePoint()
  992. GUI:Text_setString(self.view.remainPointText, tostring(self.freePoint))
  993. if self.freePoint > 0 then
  994. GUI:setVisible(self.view.commandButton, true)
  995. GUI:setVisible(self.view.light_btn, true)
  996. else
  997. GUI:setVisible(self.view.commandButton, false)
  998. GUI:setVisible(self.view.light_btn, false)
  999. end
  1000. if SL:MeData_GetRoleExtInfo().attAddWay == -1 then
  1001. GUI:Text_setString(self.view.commandButton_text, "职业切换")
  1002. else
  1003. GUI:Text_setString(self.view.commandButton_text, "推荐加点")
  1004. end
  1005. --GUI:Text_setString(self.view.commandButton_text, "推荐加点")
  1006. end
  1007. function this:SetAddNumInfo()
  1008. local strength = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.strength)
  1009. if self.add_strength > 0 then
  1010. GUI:Text_setString(self.view.num_dc, string.format("%s<color=\"#4CC5FE\"> + %s</color>", strength, self.add_strength))
  1011. else
  1012. GUI:Text_setString(self.view.num_dc, tostring(strength))
  1013. end
  1014. local agility = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.agility)
  1015. if self.add_agility > 0 then
  1016. GUI:Text_setString(self.view.num_agility, string.format("%s<color=\"#4CC5FE\"> + %s</color>", agility, self.add_agility))
  1017. else
  1018. GUI:Text_setString(self.view.num_agility, tostring(agility))
  1019. end
  1020. local intelligence = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.intelligence)
  1021. if self.add_intelligence > 0 then
  1022. GUI:Text_setString(self.view.num_intelligence, string.format("%s<color=\"#4CC5FE\"> + %s</color>", intelligence, self.add_intelligence))
  1023. else
  1024. GUI:Text_setString(self.view.num_intelligence, tostring(intelligence))
  1025. end
  1026. local spirit = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.spirit)
  1027. if self.add_spirit > 0 then
  1028. GUI:Text_setString(self.view.num_stamina, string.format("%s<color=\"#4CC5FE\"> + %s</color>", spirit, self.add_spirit))
  1029. else
  1030. GUI:Text_setString(self.view.num_stamina, tostring(spirit))
  1031. end
  1032. local lead = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.lead)
  1033. if self.add_lead > 0 then
  1034. GUI:Text_setString(self.view.num_command, string.format("%s<color=\"#4CC5FE\"> + %s</color>", lead, self.add_lead))
  1035. else
  1036. GUI:Text_setString(self.view.num_command, tostring(lead))
  1037. end
  1038. GUI:DataListUpdateData(self.view.attInfoContent_dc_content)
  1039. GUI:DataListUpdateData(self.view.attInfoContent_intelligence_content)
  1040. GUI:DataListUpdateData(self.view.attInfoContent_command_content)
  1041. GUI:DataListUpdateData(self.view.attInfoContent_stamina_content)
  1042. GUI:DataListUpdateData(self.view.attInfoContent_agility_content)
  1043. end
  1044. function this:GetSpecialAttrAdd(addAttrId)
  1045. if not SL:HasConfig("cfg_att_info", addAttrId) then
  1046. logError("改属性id不存在")
  1047. return 0
  1048. end
  1049. local cfgInfo = SL:GetConfig("cfg_att_info", addAttrId)
  1050. local addInfo = SL:GetMetaValue(EMetaVarGetKey.GET_ADD_PER,cfgInfo.attribute)
  1051. -- 获取当前二级属性的属性值, 因为服务端发的是整数(抹去小数点), 数值减差值前要对差值/10000进行处理.
  1052. -- 属性类型是数值的处理:1.5+1.6=3.1 要显示+2, 因为是从1->3, 所以计算方式为抹小数点的结果减去抹小数点的起始值 3-1=2
  1053. -- 是万分比的话 15.25%-> 20.00%, (2000-1525) / 100 = 4.75
  1054. local nowAttr = 0
  1055. local attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.strength).attribute
  1056. local nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.strength)
  1057. nowAttr = nowAttr + addInfo[attrName] * nowAttrPoint
  1058. attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.agility).attribute
  1059. nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.agility)
  1060. nowAttr = nowAttr + addInfo[attrName] * nowAttrPoint
  1061. attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.spirit).attribute
  1062. nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.spirit)
  1063. nowAttr = nowAttr + addInfo[attrName] * nowAttrPoint
  1064. attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.intelligence).attribute
  1065. nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.intelligence)
  1066. nowAttr = nowAttr + addInfo[attrName] * nowAttrPoint
  1067. attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.lead).attribute
  1068. nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.lead)
  1069. nowAttr = nowAttr + addInfo[attrName] * nowAttrPoint
  1070. local addTotalAttr = 0
  1071. attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.strength).attribute
  1072. nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.strength)
  1073. addTotalAttr = addTotalAttr + addInfo[attrName] * (nowAttrPoint + self.add_strength)
  1074. attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.agility).attribute
  1075. nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.agility)
  1076. addTotalAttr = addTotalAttr + addInfo[attrName] * (nowAttrPoint + self.add_agility)
  1077. attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.spirit).attribute
  1078. nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.spirit)
  1079. addTotalAttr = addTotalAttr + addInfo[attrName] * (nowAttrPoint + self.add_spirit)
  1080. attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.intelligence).attribute
  1081. nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.intelligence)
  1082. addTotalAttr = addTotalAttr + addInfo[attrName] * (nowAttrPoint + self.add_intelligence)
  1083. attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.lead).attribute
  1084. nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.lead)
  1085. addTotalAttr = addTotalAttr + addInfo[attrName] * (nowAttrPoint + self.add_lead)
  1086. -- 数值的
  1087. if cfgInfo.remarks == EAttrRemarkType.Number then
  1088. return addTotalAttr // 10000 - nowAttr // 10000
  1089. elseif cfgInfo.remarks == EAttrRemarkType.Dimi then
  1090. return (addTotalAttr - nowAttr) / 100
  1091. else
  1092. logError("属性数值类型非数值或万分比,需要策划告知处理规则, attrId = " .. addAttrId)
  1093. return 0
  1094. end
  1095. end
  1096. return KLAttrPanel