PlayerCareerTransfer.lua 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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 =
  33. ConfigDataManager.getTableValue(
  34. "cfg_item",
  35. "id",
  36. "type",
  37. ItemType.TRIGGER,
  38. "subtype",
  39. TriggerSubType.CAREER_TRANSFER_CARD
  40. )
  41. this.log("转职消耗道具:", cfgId)
  42. if not Bag.checkCostMap(actor, {[cfgId] = 1}) then
  43. noticeTip.noticeinfo(actor, StringIdConst.TEXT346)
  44. return
  45. end
  46. -- 替换角色装备
  47. PlayerCareerTransfer.replaceEquip(actor, careerChange[1]["equipname"])
  48. -- 替换角色任务
  49. PlayerCareerTransfer.replaceTask(actor, careerChange[1]["equipname"])
  50. -- 替换角色技能
  51. local sendItems = PlayerCareerTransfer.replaceSkill(actor)
  52. this.log("技能替换发放道具:", sendItems)
  53. -- 角色转职
  54. local baseCareer = tonumber(careerChange[1]["careerid"])
  55. this.log("baseCareer:", baseCareer)
  56. local id = ConfigDataManager.getTableValue("cfg_career", "id", "basecareer", baseCareer, "careerrank", careerRank)
  57. this.log("id:", id)
  58. while string.isNullOrEmpty(id) do
  59. careerRank = careerRank - 1
  60. if careerRank == 0 then
  61. info(actor, "转职失败,找不到对应转职信息")
  62. return
  63. end
  64. id = ConfigDataManager.getTableValue("cfg_career", "id", "basecareer", baseCareer, "careerrank", careerRank)
  65. end
  66. roletransfercareer(actor, tonumber(id))
  67. -- 重置加点
  68. resetattrpoint(actor, 1, 0)
  69. -- 设置角色加点类型
  70. if not table.isNullOrEmpty(careerRec) then
  71. setplaydef(actor, PlayerDefKey.player.CAREER_REC, tonumber(careerRec[1]))
  72. end
  73. -- 重置角色技能购买限制次数
  74. RoleCount.resetCareerLifeShopCount(actor, baseCareer)
  75. -- 消耗道具
  76. removeitemfrombag(actor, cfgId, 1, 0, 9999, ItemAction.CAREER_TRANSFER_COST)
  77. if not table.isNullOrEmpty(sendItems) then
  78. -- 发放技能道具
  79. Bag.addItemMapToBag(actor, sendItems, 0, 9999, ItemAction.CAREER_TRANSFER_ITEM_SEND)
  80. end
  81. end
  82. --- 替换角色装备
  83. --- @param actor table 角色
  84. --- @param equipName string 转职装备转换名 cfg_careerchange表EquipName
  85. function PlayerCareerTransfer.replaceEquip(actor, equipName)
  86. local equipInfo = getputonequipinfo(actor)
  87. local replaceItem = {}
  88. if not table.isNullOrEmpty(equipInfo) then
  89. for _, v in pairs(equipInfo) do
  90. local cfgId = v["cfgid"]
  91. local equipIndex = v["equipindex"]
  92. -- 判断是否是副手武器
  93. local isOffHand = false
  94. local itemTableValue = ConfigDataManager.getTable("cfg_item", "id", cfgId)
  95. if not table.isNullOrEmpty(itemTableValue) then
  96. local strPart = itemTableValue[1]["strpart"]
  97. local wearBarId = itemTableValue[1]["wearbarid"]
  98. if not string.isNullOrEmpty(strPart) and string.contains(strPart, "#") then
  99. local strSplit = string.split(strPart, "#")
  100. local itemIndex = ItemUtil.calcIndex(wearBarId, strSplit[2])
  101. if equipIndex == itemIndex then
  102. isOffHand = true
  103. end
  104. end
  105. end
  106. -- 查表获得转职后要替换的装备id
  107. local id = "newid"
  108. local newItemId
  109. if isOffHand then
  110. newItemId =
  111. ConfigDataManager.getTableValue("cfg_equip_change", id .. equipName, "id", cfgId, "weapon", 1)
  112. else
  113. newItemId = ConfigDataManager.getTableValue("cfg_equip_change", id .. equipName, "id", cfgId)
  114. end
  115. if not string.isNullOrEmpty(newItemId) then
  116. replaceItem[equipIndex] = tonumber(newItemId)
  117. end
  118. end
  119. this.log("replaceEquip:", replaceItem)
  120. replaceequip(actor, replaceItem)
  121. end
  122. return replaceItem
  123. end
  124. --- 移除角色技能,并封装发放道具table
  125. --- @param actor table 角色
  126. --- @return table 转换后要发放的技能道具
  127. function PlayerCareerTransfer.replaceSkill(actor)
  128. local skillInfo = getplayskilllist(actor)
  129. if table.isNullOrEmpty(skillInfo) then
  130. return
  131. end
  132. local alreadyStudySkillIds = {}
  133. local sendItems = {}
  134. -- 循环封装已经学习的技能id集合与转换后要发放的技能道具
  135. for _, v in pairs(skillInfo) do
  136. local skillId = tonumber(v["id"])
  137. local skillLevel = tonumber(v["level"])
  138. table.insert(alreadyStudySkillIds, skillId)
  139. local items =
  140. ConfigDataManager.getTableValue("cfg_skill_info", "return", "skillid", skillId, "skilllevel", skillLevel)
  141. string.putIntIntMap(sendItems, items, "#", "|")
  142. end
  143. this.log("alreadyStudySkillIds:", alreadyStudySkillIds)
  144. removeskill(actor, alreadyStudySkillIds)
  145. return sendItems
  146. end
  147. --- 替换角色任务,由于基础职业变换,所以任务需要重新对应替换
  148. --- @param actor table 角色
  149. --- @param equipName string 转职任务转换名 cfg_careerchange表EquipName
  150. function PlayerCareerTransfer.replaceTask(actor, equipName)
  151. local taskList = gettasklist(actor)
  152. if table.isNullOrEmpty(taskList) then
  153. return
  154. end
  155. local replaceTask = {}
  156. for _, v in pairs(taskList) 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. local completedTaskList = getcompletedtasklist(actor)
  165. if not table.isNullOrEmpty(completedTaskList) then
  166. for _, v in pairs(completedTaskList) do
  167. local taskId = v["taskid"]
  168. local career = "career"
  169. local newTaskId = ConfigDataManager.getTableValue("cfg_task_change", career .. equipName, "id", taskId)
  170. if not string.isNullOrEmpty(newTaskId) then
  171. replaceTask[taskId] = tonumber(newTaskId)
  172. end
  173. end
  174. end
  175. this.log("replaceTask:", replaceTask)
  176. replacetask(actor, replaceTask)
  177. end