--- --- Generated by EmmyLua(https://github.com/EmmyLua) --- Created by zhoutao. --- DateTime: 2025/4/10 17:41 PlayerCareerTransfer = {} local this = {} this.logOpen = false --- 打印日志 --- @param str string 日志信息 function this.log(str, param) if this.logOpen then jprint(str, param) end end --- 使用转职道具 --- @param actor table 角色 --- @param cfgId number 转职道具id --- @param count number 数量 function PlayerCareerTransfer.careerTransfer(actor, msgData) -- 要转换的职业id local careerChangeId = msgData["careerChangeId"] -- 加点方式(敏弓、智弓、力魔、法魔) local careerRec = msgData["careerRec"] local careerRank = tonumber(getbaseinfo(actor, "getcareerrank")) this.log("careerRank:", careerRank) local careerChange = ConfigDataManager.getTable("cfg_careerchange", "id", careerChangeId) if table.isNullOrEmpty(careerChange) then info(actor, "转职职业id传参错误,cfg_careerchange=id=>", careerChangeId) return end -- 判断道具是否充足 local cfgId = ConfigDataManager.getTableValue("cfg_item", "id", "type", ItemType.TRIGGER, "subtype", TriggerSubType.CAREER_TRANSFER_CARD) this.log("转职消耗道具:", cfgId) if not Bag.checkCostMap(actor, { [cfgId] = 1 }) then noticeTip.noticeinfo(actor, StringIdConst.TEXT346) return end -- 替换角色装备 PlayerCareerTransfer.replaceEquip(actor, careerChange[1]["equipname"]) -- 替换角色任务 PlayerCareerTransfer.replaceTask(actor, careerChange[1]["equipname"]) -- 替换角色技能 local sendItems = PlayerCareerTransfer.replaceSkill(actor) this.log("技能替换发放道具:", sendItems) -- 角色转职 local baseCareer = tonumber(careerChange[1]["careerid"]) this.log("baseCareer:", baseCareer) local id = ConfigDataManager.getTableValue("cfg_career", "id", "basecareer", baseCareer, "careerrank", careerRank) this.log("id:", id) while string.isNullOrEmpty(id) do careerRank = careerRank - 1 if careerRank == 0 then info(actor, "转职失败,找不到对应转职信息") return end id = ConfigDataManager.getTableValue("cfg_career", "id", "basecareer", baseCareer, "careerrank", careerRank) end roletransfercareer(actor, tonumber(id)) -- 重置加点 resetattrpoint(actor, 1, 0) -- 设置角色加点类型 if not table.isNullOrEmpty(careerRec) then setplaydef(actor, PlayerDefKey.player.CAREER_REC, tonumber(careerRec[1])) end -- 重置角色技能购买限制次数 RoleCount.resetCareerLifeShopCount(actor, baseCareer) -- 消耗道具 removeitemfrombag(actor, cfgId, 1, 0, 9999, ItemAction.CAREER_TRANSFER_COST) if not table.isNullOrEmpty(sendItems) then -- 发放技能道具 additemmaptobag(actor, sendItems, 0, 9999, ItemAction.CAREER_TRANSFER_ITEM_SEND) end end --- 替换角色装备 --- @param actor table 角色 --- @param equipName string 转职装备转换名 cfg_careerchange表EquipName function PlayerCareerTransfer.replaceEquip(actor, equipName) local equipInfo = getputonequipinfo(actor) local replaceItem = {} if not table.isNullOrEmpty(equipInfo) then for _, v in pairs(equipInfo) do local cfgId = v["cfgid"] local equipIndex = v["equipindex"] -- 判断是否是副手武器 local isOffHand = false local itemTableValue = ConfigDataManager.getTable("cfg_item", "id", cfgId) if not table.isNullOrEmpty(itemTableValue) then local strPart = itemTableValue[1]["strpart"] local wearBarId = itemTableValue[1]["wearbarid"] if not string.isNullOrEmpty(strPart) and string.contains(strPart, "#") then local strSplit = string.split(strPart, "#") local itemIndex = ItemUtil.calcIndex(wearBarId, strSplit[2]) if equipIndex == itemIndex then isOffHand = true end end end -- 查表获得转职后要替换的装备id local id = "newid" local newItemId if isOffHand then newItemId = ConfigDataManager.getTableValue("cfg_equip_change", id .. equipName, "id", cfgId, "weapon", 1) else newItemId = ConfigDataManager.getTableValue("cfg_equip_change", id .. equipName, "id", cfgId) end if not string.isNullOrEmpty(newItemId) then replaceItem[equipIndex] = tonumber(newItemId) end end this.log("replaceEquip:", replaceItem) replaceequip(actor, replaceItem) end return replaceItem end --- 移除角色技能,并封装发放道具table --- @param actor table 角色 --- @return table 转换后要发放的技能道具 function PlayerCareerTransfer.replaceSkill(actor) local skillInfo = getplayskilllist(actor) if table.isNullOrEmpty(skillInfo) then return end local alreadyStudySkillIds = {} local sendItems = {} -- 循环封装已经学习的技能id集合与转换后要发放的技能道具 for _, v in pairs(skillInfo) do local skillId = tonumber(v["id"]) local skillLevel = tonumber(v["level"]) table.insert(alreadyStudySkillIds, skillId) local items = ConfigDataManager.getTableValue("cfg_skill_info", "return", "skillid", skillId, "skilllevel", skillLevel) string.putIntIntMap(sendItems, items, "#", "|") end this.log("alreadyStudySkillIds:", alreadyStudySkillIds) removeskill(actor, alreadyStudySkillIds) return sendItems end --- 替换角色任务,由于基础职业变换,所以任务需要重新对应替换 --- @param actor table 角色 --- @param equipName string 转职任务转换名 cfg_careerchange表EquipName function PlayerCareerTransfer.replaceTask(actor, equipName) local taskList = gettasklist(actor) if table.isNullOrEmpty(taskList) then return end local replaceTask = {} for _, v in pairs(taskList) do local taskId = v["taskid"] local career = "career" local newTaskId = ConfigDataManager.getTableValue("cfg_task_change", career .. equipName, "id", taskId) if not string.isNullOrEmpty(newTaskId) then replaceTask[taskId] = tonumber(newTaskId) end end local completedTaskList = getcompletedtasklist(actor) if not table.isNullOrEmpty(completedTaskList) then for _, v in pairs(completedTaskList) do local taskId = v["taskid"] local career = "career" local newTaskId = ConfigDataManager.getTableValue("cfg_task_change", career .. equipName, "id", taskId) if not string.isNullOrEmpty(newTaskId) then replaceTask[taskId] = tonumber(newTaskId) end end end this.log("replaceTask:", replaceTask) replacetask(actor, replaceTask) end