UISkillSettingsCtr.lua 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. local UISkillSettingsCtr = class("UISkillSettingsCtr", require("UICtrBase"))
  2. local Last_Select_SkillId_Key = 'Last_Select_SkillId_Key'
  3. function UISkillSettingsCtr:Init(view)
  4. self.view = view
  5. end
  6. ---@param data integer 英雄ID
  7. function UISkillSettingsCtr:SetData(data)
  8. self.asyncIdx = 0
  9. self.data = data
  10. self:DisposeOwnedHeros()
  11. self:InitOwnedHeros()
  12. self:DisposeSkillData()
  13. self:InitSkillData()
  14. self:DisposeSlotData()
  15. self:InitSlotData()
  16. self:InitSkillEquipData()
  17. end
  18. function UISkillSettingsCtr:GetAsyncIdx()
  19. self.asyncIdx = self.asyncIdx + 1
  20. return self.asyncIdx
  21. end
  22. function UISkillSettingsCtr:GetData()
  23. return self.data
  24. end
  25. function UISkillSettingsCtr:OnDispose()
  26. self:DisposeOwnedHeros()
  27. self:DisposeSkillData()
  28. self:DisposeSlotData()
  29. self:DisposeSkillEquipData()
  30. self.data = nil
  31. self.view = nil
  32. end
  33. function UISkillSettingsCtr:ChangeHero(next)
  34. local num = #self.heroIds
  35. local newHeroId = nil
  36. for i = 1, num do
  37. if self.heroIds[i] == self.heroId then
  38. if next then
  39. newHeroId = self.heroIds[i + 1]
  40. else
  41. newHeroId = self.heroIds[i - 1]
  42. end
  43. break
  44. end
  45. end
  46. if not newHeroId then
  47. if next then
  48. newHeroId = self.heroIds[1]
  49. else
  50. newHeroId = self.heroIds[num]
  51. end
  52. end
  53. if newHeroId then
  54. self.heroId = newHeroId
  55. self:DisposeSkillData()
  56. self:InitSkillData()
  57. self:DisposeSlotData()
  58. self:InitSlotData()
  59. self:InitSkillEquipData()
  60. return true
  61. end
  62. return false
  63. end
  64. function UISkillSettingsCtr:GetHeroVaildNum()
  65. return #self.heroIds
  66. end
  67. function UISkillSettingsCtr:GetHeroId()
  68. return self.heroId
  69. end
  70. function UISkillSettingsCtr:GetHeroData()
  71. return ManagerContainer.DataMgr.UserData:GetHeroData(self:GetHeroId())
  72. end
  73. function UISkillSettingsCtr:GetHeroCfgData()
  74. local heroId = self:GetHeroId()
  75. if self:IsLeaderHero(self:GetHeroId(heroId)) then
  76. local roleCfgId = ManagerContainer.DataMgr.UserData:GetUserRoleId()
  77. return ManagerContainer.CfgMgr:GetRoleDataById(roleCfgId)
  78. else
  79. local heroCfgId = ManagerContainer.DataMgr.PartnerData:GetHeroCfgId(heroId)
  80. return ManagerContainer.CfgMgr:GetPartnerDataById(heroCfgId)
  81. end
  82. end
  83. function UISkillSettingsCtr:GetHeroLv()
  84. return ManagerContainer.DataMgr.UserData:GetHeroLv(self:GetHeroId())
  85. end
  86. function UISkillSettingsCtr:GetCurMapAndLevel()
  87. local curMapId, curLevelId = ManagerContainer.LuaBattleMgr:GetCurMapAndLevel()
  88. return ManagerContainer.CfgMgr:GetLevelDataByMapAndLevel(curMapId, curLevelId)
  89. end
  90. function UISkillSettingsCtr:IsLeaderHero()
  91. return ManagerContainer.DataMgr.UserData:IsLeaderHero(self:GetHeroId())
  92. end
  93. function UISkillSettingsCtr:GetIsUnlock(skillId)
  94. local skillData = ManagerContainer.DataMgr.UserData:GetSkillData(self:GetHeroId())
  95. return skillData and skillData:GetIsUnlock(skillId) or false
  96. end
  97. function UISkillSettingsCtr:GetIsCanUnlock(skillId)
  98. local errorCode = self:GetActiveSkillErrorCode(skillId)
  99. return errorCode == 0 or errorCode == 139
  100. end
  101. function UISkillSettingsCtr:GetSkilllv(skillId)
  102. local skillData = ManagerContainer.DataMgr.UserData:GetSkillData(self:GetHeroId())
  103. return skillData and skillData:GetSkillLv(skillId) or 0
  104. end
  105. function UISkillSettingsCtr:GetSkillMaxLv(skillId)
  106. local skillTreeCfgData = self:GetSkillTreeCfgData(skillId)
  107. local UpGradeLevel = ManagerContainer.CfgMgr:GetSkillDemandCfgUpGradeLevelById(skillTreeCfgData.OpenLevel)
  108. local UpGradeCost = ManagerContainer.CfgMgr:GetSkillDemandCfgUpGradeCostById(skillTreeCfgData.OpenLevel)
  109. if skillTreeCfgData then
  110. local maxLv = skillTreeCfgData.MaxLv or 0
  111. local upgradeLevelNum = UpGradeLevel and (#UpGradeLevel + 1) or 0
  112. if maxLv > upgradeLevelNum then maxLv = upgradeLevelNum end
  113. local upgradeCostNum = UpGradeCost and (#UpGradeCost + 1) or 0
  114. if maxLv > upgradeCostNum then maxLv = upgradeCostNum end
  115. return maxLv
  116. end
  117. return 0
  118. end
  119. function UISkillSettingsCtr:GetSkillIsAtSlot(skillId)
  120. local skillData = ManagerContainer.DataMgr.UserData:GetSkillData(self:GetHeroId())
  121. return skillData and skillData:GetSkillIsAtSlot(skillId) or false
  122. end
  123. function UISkillSettingsCtr:GetUnlockSlotNum()
  124. local skillData = ManagerContainer.DataMgr.UserData:GetSkillData(self:GetHeroId())
  125. return skillData and skillData:GetUnlockSlotNum() or 0
  126. end
  127. function UISkillSettingsCtr:GetSkillTreeCfgData(skillId)
  128. local skillTreeCfgData = nil
  129. if self:IsLeaderHero() then
  130. skillTreeCfgData = ManagerContainer.CfgMgr:GetSkillTreeCfgById(skillId)
  131. else
  132. skillTreeCfgData = ManagerContainer.CfgMgr:GetParterSkillTreeCfgById(skillId)
  133. end
  134. return skillTreeCfgData
  135. end
  136. function UISkillSettingsCtr:GetOwnResCountByItemId(itemCfgId)
  137. return CommonUtil.GetOwnResCountByItemId(itemCfgId)
  138. end
  139. function UISkillSettingsCtr:GetActiveSkillErrorCode(skillId)
  140. local heroId = self:GetHeroId()
  141. return self:CheckSkillCanUnlock(heroId, skillId)
  142. end
  143. --获取激活技能的进阶错误码返回
  144. function UISkillSettingsCtr:GetActiveSkillAvanceErrorCode(skillId)
  145. local heroId = self:GetHeroId()
  146. return self:CheckSkillCanAvance(heroId, skillId)
  147. end
  148. function UISkillSettingsCtr:SendActiveSkill(skillId)
  149. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ACTIVE_SKILL_REQ, {hero_id = self:GetHeroId(), skill_id=skillId})
  150. end
  151. function UISkillSettingsCtr:GetUpgradeSkillErrorCode(skillId)
  152. local heroData = self:GetHeroData()
  153. return CommonUtil.CheckSkillCanLvUp(heroData, skillId)
  154. end
  155. function UISkillSettingsCtr:SendUpgradeSkill(skillId)
  156. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_SKILL_LEVEL_UP_REQ, {hero_id = self:GetHeroId(), skill_id=skillId})
  157. end
  158. --- 检查技能是否能解锁
  159. ---@param heroId integer 英雄Id
  160. ---@param skillId integer 技能Id
  161. ---@return integer 0:能解锁;其它查看Error_Code文件
  162. function UISkillSettingsCtr:CheckSkillCanUnlock(heroId, skillId)
  163. local skillTreeCfgData = nil
  164. if ManagerContainer.DataMgr.UserData:IsLeaderHero(heroId) then
  165. skillTreeCfgData = ManagerContainer.CfgMgr:GetSkillTreeCfgById(skillId)
  166. else
  167. skillTreeCfgData = ManagerContainer.CfgMgr:GetParterSkillTreeCfgById(skillId)
  168. end
  169. if not skillTreeCfgData then
  170. return 133
  171. end
  172. local skillData = ManagerContainer.DataMgr.UserData:GetSkillData(heroId)
  173. if not skillData then
  174. return 133
  175. end
  176. if skillData:GetIsUnlock(skillId) then
  177. return 142
  178. end
  179. local openLevel = skillTreeCfgData.OpenLevel
  180. local openNeedCost = skillTreeCfgData.OpenNeedCost
  181. if openLevel and openLevel > 0 then
  182. if (ManagerContainer.DataMgr.UserData:GetHeroLv(heroId) < openLevel) then return 141 end
  183. end
  184. if openNeedCost then
  185. local openNeedCosts = nil
  186. if type(openNeedCost[1]) == 'number' then
  187. if #openNeedCost > 1 then
  188. openNeedCosts = {openNeedCost}
  189. end
  190. else
  191. openNeedCosts = openNeedCost
  192. end
  193. if openNeedCosts then
  194. for i = 1, #openNeedCosts do
  195. local itemCfgId = openNeedCosts[i][1]
  196. local itemNum = openNeedCosts[i][2]
  197. if CommonUtil.GetOwnResCountByItemId(itemCfgId) < itemNum then
  198. return 139, itemCfgId
  199. end
  200. end
  201. end
  202. end
  203. return 0
  204. end
  205. --------------------------------- 已有的影响列表 Start ----------------------------------
  206. function UISkillSettingsCtr:InitOwnedHeros()
  207. local partnerDatas = ManagerContainer.DataMgr.PartnerData:GetPartnerDatas()
  208. local sortedPartnerDatas = {}
  209. for _,v in pairs(partnerDatas) do
  210. if v.owned then
  211. sortedPartnerDatas[#sortedPartnerDatas + 1] = v
  212. end
  213. end
  214. table.sort(sortedPartnerDatas, function (a, b)
  215. return a.post < b.post
  216. end)
  217. local heroIds = {}
  218. heroIds[1] = ManagerContainer.DataMgr.UserData:GetId()
  219. for i = 1, #sortedPartnerDatas do
  220. heroIds[i + 1] = sortedPartnerDatas[i].id
  221. end
  222. self.heroIds = heroIds
  223. local vaildHeroId = nil
  224. for _, heroId in pairs(heroIds) do
  225. if self.data[1] == heroId then
  226. vaildHeroId = heroId
  227. end
  228. end
  229. if not vaildHeroId then
  230. vaildHeroId = self.heroIds[1]
  231. end
  232. if self.heroId == vaildHeroId then return false end
  233. self.heroId = vaildHeroId
  234. return true
  235. end
  236. function UISkillSettingsCtr:DisposeOwnedHeros()
  237. self.heroId = nil
  238. self.heroIds = nil
  239. end
  240. function UISkillSettingsCtr:RefreshOwnedHeros()
  241. self:DisposeOwnedHeros()
  242. if self:InitOwnedHeros() then
  243. self:DisposeSkillData()
  244. self:InitSkillData()
  245. self:DisposeSlotData()
  246. self:InitSlotData()
  247. self:InitSkillEquipData()
  248. return true
  249. end
  250. return false
  251. end
  252. --------------------------------- 已有的影响列表 End ----------------------------------
  253. --------------------------------- 技能列表 Start ----------------------------------
  254. function UISkillSettingsCtr:InitSkillData()
  255. self:ReadDefaultSelectSkillMap()
  256. self:RefreshSkillList(true)
  257. end
  258. function UISkillSettingsCtr:DisposeSkillData()
  259. self.skillList = nil
  260. self.selectSkillId = nil
  261. -- 默认选择的技能, 记录了上一次打开界面时选择的技能
  262. self.defaultSelectSkillMap = nil
  263. end
  264. function UISkillSettingsCtr:ReadDefaultSelectSkillMap()
  265. local valueStr = ManagerContainer.PlayerPrefsMgr:GetString(Last_Select_SkillId_Key, '')
  266. self.defaultSelectSkillMap = JSON:decode(valueStr)
  267. if not self.defaultSelectSkillMap then
  268. self.defaultSelectSkillMap = {}
  269. end
  270. end
  271. function UISkillSettingsCtr:WriteDefaultSelectSkillMap()
  272. local valueStr = JSON:encode(self.defaultSelectSkillMap)
  273. ManagerContainer.PlayerPrefsMgr:SetString(Last_Select_SkillId_Key, valueStr)
  274. end
  275. function UISkillSettingsCtr:RefreshSkillList(resetSelect)
  276. local skillList = {}
  277. local heroId = self:GetHeroId()
  278. local heroData = ManagerContainer.DataMgr.UserData:GetHeroData(heroId)
  279. local cfgId = heroData.configId
  280. if ManagerContainer.DataMgr.UserData:IsLeaderHero(heroId) then
  281. local curJobCfgData = ManagerContainer.CfgMgr:GetJobDataById(cfgId)
  282. if curJobCfgData then
  283. local jobs = ManagerContainer.CfgMgr:GetLastJobs(cfgId)
  284. table.insert(jobs, curJobCfgData)
  285. local jobNum = #jobs
  286. local job
  287. for i = 1, jobNum do
  288. job = jobs[i]
  289. local ls = ManagerContainer.CfgMgr:GetSkillTreeByFeature(job.JobType, job.JobBranch, job.JobStage)
  290. if ls then
  291. local len = #ls
  292. if len > 0 then
  293. for j = 1, len do
  294. local skilltreeData = self:IsAdvance(heroData,ls[j])
  295. table.insert(skillList, skilltreeData)
  296. end
  297. end
  298. end
  299. end
  300. end
  301. else
  302. local curJobCfgData = ManagerContainer.CfgMgr:GetPartnerDataById(cfgId)
  303. if curJobCfgData then
  304. local jobs = ManagerContainer.CfgMgr:GetParterLastJobs(cfgId)
  305. table.insert(jobs, curJobCfgData)
  306. local jobNum = #jobs
  307. local job
  308. for i = 1, jobNum do
  309. job = jobs[i]
  310. local ls = ManagerContainer.CfgMgr:GetParterSkillTreeByFeature(job.JobType, job.ParterId)
  311. if ls then
  312. local len = #ls
  313. if len > 0 then
  314. for j = 1, len do
  315. local skilltreeData = self:IsAdvance(heroData,ls[j])
  316. table.insert(skillList, skilltreeData)
  317. end
  318. end
  319. end
  320. end
  321. end
  322. end
  323. -- 排序
  324. table.sort(skillList, function(a, b)
  325. return a.Pos < b.Pos
  326. end)
  327. self.skillList = skillList
  328. if not resetSelect then return end
  329. local selectSkillId = nil
  330. if heroData and heroData.skillData then
  331. --神器标记跳转过来默认神器技能
  332. local artifactSkillId = self:GetDefaultSelectedSkillId()
  333. if artifactSkillId then
  334. selectSkillId = artifactSkillId
  335. else
  336. local validSlotNum = heroData.skillData:GetUnlockSlotNum()
  337. local lowerLv = nil
  338. local lv
  339. for i = 1, validSlotNum do
  340. local skillId = heroData.skillData:GetSlotSkillId(i)
  341. if CommonUtil.CheckSkillCanLvUp(heroData, skillId) == 0 then
  342. lv = heroData.skillData:GetSkillLv(skillId)
  343. if not lowerLv or lowerLv > lv then
  344. lowerLv = lv
  345. selectSkillId = skillId
  346. end
  347. end
  348. end
  349. end
  350. end
  351. if not selectSkillId then
  352. if self.defaultSelectSkillMap then
  353. selectSkillId = self.defaultSelectSkillMap[heroId]
  354. end
  355. end
  356. local vaildSelectSkillId = nil
  357. if selectSkillId then
  358. -- 是否技能还在
  359. for i = 1, #skillList do
  360. if selectSkillId == skillList[i].SkillId then
  361. vaildSelectSkillId = selectSkillId
  362. break
  363. end
  364. end
  365. end
  366. if vaildSelectSkillId then
  367. self.selectSkillId = vaildSelectSkillId
  368. else
  369. local skill = skillList[1]
  370. if skill then
  371. self.selectSkillId = skill.SkillId
  372. self.defaultSelectSkillMap[heroId] = self.selectSkillId
  373. self:WriteDefaultSelectSkillMap()
  374. end
  375. end
  376. end
  377. function UISkillSettingsCtr:IsAdvance(heroData,skilltreeData)
  378. if heroData and heroData.skillData then
  379. local skillId = skilltreeData.SkillId
  380. local unlockSkillMap = heroData.skillData:GetUnlockSkillMap()
  381. local cfgId = heroData.configId
  382. local curJobCfgData = ManagerContainer.CfgMgr:GetJobDataById(cfgId)
  383. if not curJobCfgData.JobBranch or curJobCfgData.JobBranch == 0 then
  384. return skilltreeData
  385. end
  386. local skilltreedata = skilltreeData
  387. while not unlockSkillMap[skillId] do
  388. local nextSkillIdList = skilltreedata.SuperSkill
  389. if nextSkillIdList then
  390. if #nextSkillIdList > 1 then
  391. skillId = nextSkillIdList[curJobCfgData.JobBranch][2]
  392. else
  393. skillId = nextSkillIdList[1][2]
  394. end
  395. skilltreedata = self:GetSkillTreeCfgData(skillId)
  396. if curJobCfgData.JobStage < skilltreedata.JobStage then
  397. break
  398. end
  399. if unlockSkillMap[skillId] then
  400. return skilltreedata
  401. end
  402. else
  403. break
  404. end
  405. end
  406. end
  407. return skilltreeData
  408. end
  409. function UISkillSettingsCtr:GetSelectSkillId()
  410. return self.selectSkillId
  411. end
  412. function UISkillSettingsCtr:SetSelectSkillId(skillId)
  413. if self.selectSkillId == skillId then
  414. return false
  415. end
  416. self.selectSkillId = skillId
  417. self.defaultSelectSkillMap[self:GetHeroId()] = skillId
  418. self:WriteDefaultSelectSkillMap()
  419. return true
  420. end
  421. function UISkillSettingsCtr:SetSkillList()
  422. return self.skillList
  423. end
  424. function UISkillSettingsCtr:GetSkillItemInfoByIndex(itemIndex)
  425. return self.skillList and self.skillList[itemIndex + 1] or nil
  426. end
  427. --获取当前技能列表是否有对应SKILLID数据
  428. function UISkillSettingsCtr:GetSkilldataByIndex(id)
  429. for i = 1, #self.skillList do
  430. if self.skillList[i].SkillId == id then
  431. return true
  432. end
  433. end
  434. return false
  435. end
  436. --------------------------------- 技能列表 End ----------------------------------
  437. ---------------------------------- 技能槽 Start -----------------------------------
  438. function UISkillSettingsCtr:GetSlotNum()
  439. return 4
  440. end
  441. function UISkillSettingsCtr:InitSlotData()
  442. local skillData = ManagerContainer.DataMgr.UserData:GetSkillData(self:GetHeroId())
  443. local slotIdxs = {}
  444. local slotSkillIds = {}
  445. local slotNum = self:GetSlotNum()
  446. for i = 1, slotNum do
  447. slotIdxs[i] = i
  448. slotSkillIds[i] = skillData:GetSlotSkillId(i)
  449. end
  450. self.slotIdxs = slotIdxs
  451. self.slotSkillIds = slotSkillIds
  452. end
  453. function UISkillSettingsCtr:DisposeSlotData()
  454. self.slotIdxs = nil
  455. self.slotSkillIds = nil
  456. end
  457. function UISkillSettingsCtr:UpdateSlotIdxs(newSlotIdxs)
  458. local slotNum = self:GetSlotNum()
  459. local slotIdxs = {}
  460. for i = 1, slotNum do
  461. slotIdxs[i] = newSlotIdxs[i]
  462. end
  463. self.slotIdxs = slotIdxs
  464. end
  465. function UISkillSettingsCtr:UpdateSlotSkills()
  466. local skillData = ManagerContainer.DataMgr.UserData:GetSkillData(self:GetHeroId())
  467. local slotNum = self:GetSlotNum()
  468. for i = 1, slotNum do
  469. self.slotSkillIds[self.slotIdxs[i]] = skillData:GetSlotSkillId(i)
  470. end
  471. end
  472. function UISkillSettingsCtr:GetSkillIdBySlotIdx(slotIdx)
  473. return self.slotSkillIds[slotIdx]
  474. end
  475. function UISkillSettingsCtr:GeSlotIdxById(id)
  476. return self.slotIdxs[id]
  477. end
  478. function UISkillSettingsCtr:GetSlotIdxByIdx(idx)
  479. local slotNum = self:GetSlotNum()
  480. for i = 1, slotNum do
  481. if self.slotIdxs[i] == idx then
  482. return i
  483. end
  484. end
  485. return nil
  486. end
  487. function UISkillSettingsCtr:GetSlotIsUnlock(idx)
  488. local skillData = ManagerContainer.DataMgr.UserData:GetSkillData(self:GetHeroId())
  489. return skillData and skillData:GetSlotIsUnlock(idx) or false
  490. end
  491. function UISkillSettingsCtr:GetSlotVaildSkillNum()
  492. local skillData = ManagerContainer.DataMgr.UserData:GetSkillData(self:GetHeroId())
  493. return skillData and skillData:GetSlotVaildSkillNum() or 0
  494. end
  495. function UISkillSettingsCtr:SendSlotSkillChange()
  496. local skillData = ManagerContainer.DataMgr.UserData:GetSkillData(self:GetHeroId())
  497. local slotNum = self:GetSlotNum()
  498. local newSkills = {}
  499. local isChanged = false
  500. for i = 1, slotNum do
  501. local itemIdx = self:GeSlotIdxById(i)
  502. local skillId = self:GetSkillIdBySlotIdx(itemIdx) or 0
  503. newSkills[i] = skillId
  504. if skillId ~= skillData:GetSlotSkillId(i) then
  505. isChanged = true
  506. end
  507. end
  508. if isChanged then
  509. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_SET_SKILL_LIST_REQ, {hero_id = self:GetHeroId(), skill_list = newSkills})
  510. end
  511. end
  512. ---------------------------------- 技能槽 End -----------------------------------
  513. function UISkillSettingsCtr:SendChangeSkill(skillId, slotIdx)
  514. local heroId = self:GetHeroId()
  515. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_REPLACE_SKILL_REQ, {hero_id = heroId, idx = slotIdx, skill_id = skillId})
  516. --后续添加到服务器回调
  517. ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
  518. end
  519. --重置技能消息
  520. function UISkillSettingsCtr:SendResetSkillLv(type)
  521. local heroId = self:GetHeroId()
  522. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_RESET_SKILL_LEVEL_REQ, {hero_id = heroId,is_advanced = type and type == 1 or false })
  523. end
  524. ------------------------------------- 神器标记 -----------------------------------------
  525. function UISkillSettingsCtr:GetDefaultSelectedSkillId()
  526. return self.data[2]
  527. end
  528. function UISkillSettingsCtr:InitSkillEquipData()
  529. local function IsTheJob(jobData, skillEquipCfgData)
  530. if not jobData then
  531. return false
  532. end
  533. return jobData.JobType == skillEquipCfgData.JobType and jobData.JobBranch == skillEquipCfgData.JobBranch and jobData.JobStage == skillEquipCfgData.JobStage
  534. end
  535. local heroId = self:GetHeroId()
  536. local heroData = CommonUtil.GetHeroLogicDataByUid(self:GetHeroId())
  537. local skillDataSlot = heroData.skillEquipSlot
  538. self.skillEquipData = (skillDataSlot and skillDataSlot.slotList) and skillDataSlot.slotList[1] or nil
  539. if self.skillEquipData then
  540. self.skillEquipCfgData = ManagerContainer.CfgMgr:GetArtifactCfgDataByCfgId(self.skillEquipData.cfgId)
  541. if self.skillEquipCfgData then
  542. local heroCfgId = heroData.configId
  543. local jobData
  544. if heroData then
  545. if heroId == 1 then
  546. jobData = ManagerContainer.CfgMgr:GetJobDataById(heroCfgId)
  547. else
  548. jobData = ManagerContainer.CfgMgr:GetPartnerDataById(heroCfgId)
  549. end
  550. end
  551. self.isCorrectJob = IsTheJob(jobData, self.skillEquipCfgData)
  552. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(self.skillEquipData.cfgId)
  553. self.skillEquipIcon = itemCfgData.Icon
  554. end
  555. end
  556. end
  557. function UISkillSettingsCtr:GetSkillInSkillEquipDataState(skillId)
  558. if not self.skillEquipData or not self.skillEquipCfgData then return 0 end
  559. local heroId = self:GetHeroId()
  560. if not self.isCorrectJob then return 0 end
  561. local isUnlock = self:GetIsUnlock(skillId)
  562. if not isUnlock then return 0 end
  563. local function IsInBeforeSkill(id)
  564. local skillTreeCfgData = self:GetSkillTreeCfgData(id)
  565. if not skillTreeCfgData then return false end
  566. local lastSkillId = skillTreeCfgData.beforeSkill
  567. if lastSkillId ~= skillId then
  568. return IsInBeforeSkill(lastSkillId)
  569. else
  570. return true
  571. end
  572. end
  573. local idx = 0
  574. local isOld = false
  575. local isNew = false
  576. local effectSkills = self.skillEquipCfgData.ArtifacFuncId
  577. for i = 1, #effectSkills do
  578. local data = effectSkills[i]
  579. local oldSkillId = heroId == 1 and data[2] or data[3]
  580. isNew = oldSkillId == skillId
  581. if not isNew and oldSkillId and oldSkillId ~= skillId then
  582. isOld = IsInBeforeSkill(oldSkillId)
  583. end
  584. idx = i
  585. if isOld or isNew then
  586. break
  587. end
  588. end
  589. if not isOld and not isNew then return 0 end
  590. if isOld then return 1, idx end
  591. local isEquip = self:GetSkillIsAtSlot(skillId)
  592. if not isOld and isNew and not isEquip then return 1, idx end
  593. if not isOld and isNew and isEquip and idx > self.skillEquipData.starLv then return 1, idx end
  594. if not isOld and isNew and isEquip then return 2, idx end
  595. return 0
  596. end
  597. function UISkillSettingsCtr:GetCurSkillEquipData()
  598. return self.skillEquipData
  599. end
  600. function UISkillSettingsCtr:GetSkillEquipIcon()
  601. return self.skillEquipIcon
  602. end
  603. function UISkillSettingsCtr:DisposeSkillEquipData()
  604. self.skillEquipData = nil
  605. self.skillEquipCfgData = nil
  606. self.skillEquipIcon = nil
  607. end
  608. --------------------------------- 神器标记 End ---------------------------------
  609. return UISkillSettingsCtr