PlayerCareerTransfer.lua 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. ---
  2. --- Generated by EmmyLua(https://github.com/EmmyLua)
  3. --- Created by zhoutao.
  4. --- DateTime: 2025/4/10 17:41
  5. PlayerCareerTransfer = {}
  6. local this = {}
  7. this.logOpen = false
  8. --- 打印日志
  9. --- @param str string 日志信息
  10. function this.log(str, param)
  11. if this.logOpen then
  12. jprint(str, param)
  13. end
  14. end
  15. --- 使用转职道具
  16. --- @param actor table 角色
  17. --- @param cfgId number 转职道具id
  18. --- @param count number 数量
  19. function PlayerCareerTransfer.careerTransfer(actor, msgData)
  20. -- 要转换的职业id
  21. local careerChangeId = msgData["careerChangeId"]
  22. -- 加点方式(敏弓、智弓、力魔、法魔)
  23. local careerRec = msgData["careerRec"]
  24. local careerRank = tonumber(getbaseinfo(actor, "getcareerrank"))
  25. this.log("careerRank:", careerRank)
  26. local careerChange = ConfigDataManager.getTable("cfg_careerchange", "id", careerChangeId)
  27. if table.isNullOrEmpty(careerChange) then
  28. info(actor, "转职职业id传参错误,cfg_careerchange=id=>", careerChangeId)
  29. return
  30. end
  31. -- 判断道具是否充足
  32. local cfgId = ConfigDataManager.getTableValue("cfg_item", "id", "type", ItemType.TRIGGER, "subtype", TriggerSubType.CAREER_TRANSFER_CARD)
  33. this.log("转职消耗道具:", cfgId)
  34. if not Bag.checkCostMap(actor, { [cfgId] = 1 }) then
  35. noticeTip.noticeinfo(actor, StringIdConst.TEXT346)
  36. return
  37. end
  38. -- 替换角色装备
  39. PlayerCareerTransfer.replaceEquip(actor, careerChange[1]["equipname"])
  40. -- 替换角色任务
  41. PlayerCareerTransfer.replaceTask(actor, careerChange[1]["equipname"])
  42. -- 替换角色技能
  43. local sendItems = PlayerCareerTransfer.replaceSkill(actor)
  44. this.log("技能替换发放道具:", sendItems)
  45. -- 角色转职
  46. local baseCareer = tonumber(careerChange[1]["careerid"])
  47. this.log("baseCareer:", baseCareer)
  48. local id = ConfigDataManager.getTableValue("cfg_career", "id", "basecareer", baseCareer, "careerrank", careerRank)
  49. this.log("id:", id)
  50. while string.isNullOrEmpty(id) do
  51. careerRank = careerRank - 1
  52. if careerRank == 0 then
  53. info(actor, "转职失败,找不到对应转职信息")
  54. return
  55. end
  56. id = ConfigDataManager.getTableValue("cfg_career", "id", "basecareer", baseCareer, "careerrank", careerRank)
  57. end
  58. roletransfercareer(actor, tonumber(id))
  59. -- 重置加点
  60. resetattrpoint(actor, 1, 0)
  61. -- 设置角色加点类型
  62. if not table.isNullOrEmpty(careerRec) then
  63. setplaydef(actor, PlayerDefKey.player.CAREER_REC, tonumber(careerRec[1]))
  64. end
  65. -- 重置角色技能购买限制次数
  66. RoleCount.resetCareerLifeShopCount(actor, baseCareer)
  67. -- 消耗道具
  68. removeitemfrombag(actor, cfgId, 1, 0, 9999, ItemAction.CAREER_TRANSFER_COST)
  69. if not table.isNullOrEmpty(sendItems) then
  70. -- 发放技能道具
  71. additemmaptobag(actor, sendItems, 0, 9999, ItemAction.CAREER_TRANSFER_ITEM_SEND)
  72. end
  73. end
  74. --- 替换角色装备
  75. --- @param actor table 角色
  76. --- @param equipName string 转职装备转换名 cfg_careerchange表EquipName
  77. function PlayerCareerTransfer.replaceEquip(actor, equipName)
  78. local equipInfo = getputonequipinfo(actor)
  79. local replaceItem = {}
  80. if not table.isNullOrEmpty(equipInfo) then
  81. for _, v in pairs(equipInfo) do
  82. local cfgId = v["cfgid"]
  83. local equipIndex = v["equipindex"]
  84. -- 判断是否是副手武器
  85. local isOffHand = false
  86. local itemTableValue = ConfigDataManager.getTable("cfg_item", "id", cfgId)
  87. if not table.isNullOrEmpty(itemTableValue) then
  88. local strPart = itemTableValue[1]["strpart"]
  89. local wearBarId = itemTableValue[1]["wearbarid"]
  90. if not string.isNullOrEmpty(strPart) and string.contains(strPart, "#") then
  91. local strSplit = string.split(strPart, "#")
  92. local itemIndex = ItemUtil.calcIndex(wearBarId, strSplit[2])
  93. if equipIndex == itemIndex then
  94. isOffHand = true
  95. end
  96. end
  97. end
  98. -- 查表获得转职后要替换的装备id
  99. local id = "newid"
  100. local newItemId
  101. if isOffHand then
  102. newItemId = ConfigDataManager.getTableValue("cfg_equip_change", id .. equipName, "id", cfgId, "weapon", 1)
  103. else
  104. newItemId = ConfigDataManager.getTableValue("cfg_equip_change", id .. equipName, "id", cfgId)
  105. end
  106. if not string.isNullOrEmpty(newItemId) then
  107. replaceItem[equipIndex] = tonumber(newItemId)
  108. end
  109. end
  110. this.log("replaceEquip:", replaceItem)
  111. replaceequip(actor, replaceItem)
  112. end
  113. return replaceItem
  114. end
  115. --- 移除角色技能,并封装发放道具table
  116. --- @param actor table 角色
  117. --- @return table 转换后要发放的技能道具
  118. function PlayerCareerTransfer.replaceSkill(actor)
  119. local skillInfo = getplayskilllist(actor)
  120. if table.isNullOrEmpty(skillInfo) then
  121. return
  122. end
  123. local alreadyStudySkillIds = {}
  124. local sendItems = {}
  125. -- 循环封装已经学习的技能id集合与转换后要发放的技能道具
  126. for _, v in pairs(skillInfo) do
  127. local skillId = tonumber(v["id"])
  128. local skillLevel = tonumber(v["level"])
  129. table.insert(alreadyStudySkillIds, skillId)
  130. local items = ConfigDataManager.getTableValue("cfg_skill_info", "return", "skillid", skillId, "skilllevel", skillLevel)
  131. string.putIntIntMap(sendItems, items, "#", "|")
  132. end
  133. this.log("alreadyStudySkillIds:", alreadyStudySkillIds)
  134. removeskill(actor, alreadyStudySkillIds)
  135. return sendItems
  136. end
  137. --- 替换角色任务,由于基础职业变换,所以任务需要重新对应替换
  138. --- @param actor table 角色
  139. --- @param equipName string 转职任务转换名 cfg_careerchange表EquipName
  140. function PlayerCareerTransfer.replaceTask(actor, equipName)
  141. local taskList = gettasklist(actor)
  142. if table.isNullOrEmpty(taskList) then
  143. return
  144. end
  145. local replaceTask = {}
  146. for _, v in pairs(taskList) do
  147. local taskId = v["taskid"]
  148. local career = "career"
  149. local newTaskId = ConfigDataManager.getTableValue("cfg_task_change", career .. equipName, "id", taskId)
  150. if not string.isNullOrEmpty(newTaskId) then
  151. replaceTask[taskId] = tonumber(newTaskId)
  152. end
  153. end
  154. local completedTaskList = getcompletedtasklist(actor)
  155. if not table.isNullOrEmpty(completedTaskList) then
  156. for _, v in pairs(completedTaskList) do
  157. local taskId = v["taskid"]
  158. local career = "career"
  159. local newTaskId = ConfigDataManager.getTableValue("cfg_task_change", career .. equipName, "id", taskId)
  160. if not string.isNullOrEmpty(newTaskId) then
  161. replaceTask[taskId] = tonumber(newTaskId)
  162. end
  163. end
  164. end
  165. this.log("replaceTask:", replaceTask)
  166. replacetask(actor, replaceTask)
  167. end