123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- ---
- --- 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
|