local DivineWeaponForgeSoul_Model = {} local private = {} local EventSystem = require('Event/EventSystem') function DivineWeaponForgeSoul_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageWeaponSoulLevelUp, private.WeaponSoulLevelUpResp) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, private.OnEnterWorldPostprocess) --heroId与weaponId相同 private.weaponForgeSoulInfo = {} --[heroId = [skillId, level]] 技能id索引等级 private.weaponForgeIsActive = {} --[heroId = isActive] 是否激活 private.weaponForgeSkillsLv = {} --[heroId, {skillLv}] 四个技能等级有序列表 private.cachedLastSkillsLv = {} --缓存升级前等级 end function private.OnEnterWorldPostprocess() if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.WeaponForgeSoul) then -- 纳灵系统刷新 MDL.Reborn.SyncRFMaterialDic(MDL.Reborn.RFMaterialType.ForgeWeapon) end end --天命是否激活 function DivineWeaponForgeSoul_Model.IsWeaponSoulActive(heroId) if not private.weaponForgeIsActive[heroId] then return false end return private.weaponForgeIsActive[heroId] end --获取神兵之魂总等级 function DivineWeaponForgeSoul_Model.GetWeaponForgeSoulLv(heroId) if not private.weaponForgeIsActive[heroId] then return 0 end local soulLv = 0 for _, skillLv in pairs(private.weaponForgeSoulInfo[heroId]) do soulLv = soulLv + skillLv end return soulLv end --获取某技能等级 function DivineWeaponForgeSoul_Model.GetWeaponForgeSoulSkillLv(heroId, skillId) if not private.weaponForgeIsActive[heroId] then return 0 end return private.weaponForgeSoulInfo[heroId][skillId] end --获取英雄技能数据 function DivineWeaponForgeSoul_Model.GetWeaponForgeSoulInfo(heroId) return private.weaponForgeSoulInfo[heroId] end --获取英雄有序的四个技能等级 function DivineWeaponForgeSoul_Model.GetWeaponForgeSoulSkillsLv(heroId) return private.weaponForgeSkillsLv[heroId] end function DivineWeaponForgeSoul_Model.GetWeaponForgeSoulLastSkillsLv() return private.cachedLastSkillsLv end function DivineWeaponForgeSoul_Model.SetWeaponForgeSoulLastSkillsLv(heroId) local forgeSoulSkill = DataSheetManager.MagicWeaponForgeSoulData:GetDataByMagicWeaponID(heroId).ForgeSoulSkill table.clear(private.cachedLastSkillsLv) for _, skillId in ipairs(forgeSoulSkill) do table.insert(private.cachedLastSkillsLv, DivineWeaponForgeSoul_Model.GetWeaponForgeSoulSkillLv(heroId, skillId)) end end --enterWorld function DivineWeaponForgeSoul_Model.SyncWeaponForgeSoulInfo(soulInfo) if IsProtoDataNotNil(soulInfo) then for _, info in ipairs(soulInfo.soulInfo) do local skillData = {} for _, v in ipairs(info.skillInfo) do skillData[v.skillId] = v.level end private.weaponForgeSoulInfo[info.weaponId] = skillData private.weaponForgeIsActive[info.weaponId] = info.isActivate private.SetWeaponForgeSoulSkillsLv(info.weaponId) end end end --playerchange增量 function DivineWeaponForgeSoul_Model.UpdateWeaponForgeSoulInfo(soulInfo) if IsProtoDataNotNil(soulInfo) then for _, info in ipairs(soulInfo.soulInfo) do if not IsProtoDataNotNil(info.skillInfo) then private.weaponForgeSoulInfo[info.weaponId] = nil else local skillData = {} for _, v in ipairs(info.skillInfo) do skillData[v.skillId] = v.level end private.weaponForgeSoulInfo[info.weaponId] = skillData end private.weaponForgeIsActive[info.weaponId] = info.isActivate private.SetWeaponForgeSoulSkillsLv(info.weaponId) end EventSystem.Dispatch(EventID.UI_DivineWeapon_ForgeSoul_Update) MDL.Reborn.SyncRFMaterialDic(MDL.Reborn.RFMaterialType.ForgeWeapon) end end function private.SetWeaponForgeSoulSkillsLv(heroId) local forgeSoulSkill = DataSheetManager.MagicWeaponForgeSoulData:GetDataByMagicWeaponID(heroId).ForgeSoulSkill local skillsLv = {} for _, skillId in ipairs(forgeSoulSkill) do table.insert(skillsLv, DivineWeaponForgeSoul_Model.GetWeaponForgeSoulSkillLv(heroId, skillId)) end private.weaponForgeSkillsLv[heroId] = skillsLv end function DivineWeaponForgeSoul_Model.WeaponSoulLevelUpReq(weaponId, skillId) local msg = NetManager.GetPB("foundry_pb").WeaponSoulLevelUpReq() msg.weaponId = weaponId msg.skillId = skillId DivineWeaponForgeSoul_Model.SetWeaponForgeSoulLastSkillsLv(weaponId) NetManager.SendMessage(MessageEnums.MessageWeaponSoulLevelUp, msg) end function private.WeaponSoulLevelUpResp(msgResp) if msgResp.Resp.Code == 0 then UIManager.OpenView(Const_UI_Lua.UIEnum.UIWeaponForgeSoulSkillUp, {skillId = msgResp.skillId, weaponId = msgResp.weaponId}, Const_UI_Lua.UIEnum.UIHorseSoulBreakSuccess) end end return DivineWeaponForgeSoul_Model