local LuaEditorDataGetter = {} require("Common/Utils") rawset(_G,'class', require('Infrast/Class')) rawset(_G, 'FP', require('Common/fixedpoint')) rawset(_G, "DataSheetManager", require("Main/DataSheetManager")) rawset(_G, "LuaConst", require("Battle/Logic/LuaConst")) rawset(_G, "ConstAssetPathConfig", require ("Common/ConstAssetPathConfig")) local Task_Model = require("Modules/Task/Task_Model") local ActivityGacha_Model = require("Modules/ActivityGacha/ActivityGacha_Model") local ExpEntity = require("Battle/Expression/ExpEntity/ExpEntity") local LuaEditorDynamicDependencyProvider = require("Tools/LuaEditorDynamicDependencyProvider") local STAGE_REMOVE = -1 --明确不进包的stage local STAGE_UNKNOWN = -999 --不确定调用源的资源用该stage将资源引用进包,最终该stage会设置为199,即进入分包1 local STAGE_PACK_299 = 299 --分包2的stage,能确定分包1之前不用到的资源可以直接使用该stage local STAGE_PACK_129 = 129 local STAGE_PACK_399 = 399 local STAGE_PACK_500 = 500 local SCENE_FORMAT_PATH = "Assets/Scenes/GameScenes/%s.unity"; local TIMELINE_PATH = "Assets/TimeLine/Prefabs/StagePlay/%s.prefab" --一些代码调用的timeline资源,不走任务表、layout等配置 --stage需要找策划确定 local timelineStageCfg = { ["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_001.prefab"] = 120, ["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_010.prefab"] = 120, ["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_01_001.prefab"] = 500, ["Assets/TimeLine/Prefabs/Interlude/3V3_shengli.prefab"] = 400, ["Assets/TimeLine/Prefabs/Interlude/3V3_shibai.prefab"] = 400, ["Assets/TimeLine/Prefabs/Interlude/Plot_99_01_022.prefab"] = 200, ["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_005.prefab"] = 0, ["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_006.prefab"] = 0, ["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_007.prefab"] = 0, ["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_008.prefab"] = 0, ["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_009.prefab"] = 0, [DataSheetManager.ConstData:GetDataByID("SiegeCityFirstStageAttackerTimeLine").StringValue] = 500, [DataSheetManager.ConstData:GetDataByID("SiegeCityFirstStageDefenderTimeLine").StringValue] = 500, [DataSheetManager.ConstData:GetDataByID("SiegeCitySecondStageAttackerTimeLine").StringValue] = 500, [DataSheetManager.ConstData:GetDataByID("SiegeCitySecondStageDefenderTimeLine").StringValue] = 500, } local UnHumanType = { AncientGodbeast = 3, Horse = 4, Treasure = 5, Pet = 6, } LuaEditorDataGetter.ProcessedBuffDataDict = {} --已经处理过的buff列表,防止循环依赖卡死 --通过关卡表获取场景及对应的分包 function LuaEditorDataGetter.GetStageScenes() local result = {} for _, v in DataSheetManager.LevelInfoData:GetEnumerator() do local path = string.format(SCENE_FORMAT_PATH, v.ScenePath) local stage = result[path] or STAGE_REMOVE --同个场景,同时配了不进包和分包,此时应该取进包的最小stage,而不是不进包 if v.PackStage >= 0 and stage >= 0 then if stage > v.PackStage then result[path] = v.PackStage end elseif v.PackStage >= 0 and stage < 0 then result[path] = v.PackStage elseif v.PackStage < 0 and stage >= 0 then result[path] = stage elseif v.PackStage < 0 and stage < 0 then result[path] = STAGE_REMOVE end end return result end --获取layout的动态依赖资源,以及关卡小地图 function LuaEditorDataGetter.CollectLayoutDependency() local layoutDependency = {} for _, levelInfo in DataSheetManager.LevelInfoData:GetEnumerator() do if levelInfo.PackStage >= 0 then local ret, layout = pcall(require, "Battle/Logic/Level/LevelItemAndEventData/LevelLayoutData" .. levelInfo.LevelID) if ret and layout and layout.LevelItemList then for i, v in ipairs(layout.LevelItemList) do --场景物件,全路径 if v.ObjectPath and v.ObjectPath ~= "" then LuaEditorDataGetter.UpdateTabStage(layoutDependency, v.ObjectPath, levelInfo.PackStage) end if v.WalkShows then for _, walkShow in pairs(v.WalkShows) do if walkShow.ObjectPath and walkShow.ObjectPath ~= "" then LuaEditorDataGetter.UpdateTabStage(layoutDependency, walkShow.ObjectPath, levelInfo.PackStage) end end end --WaitingZone if v.Object and v.Object ~= "" then LuaEditorDataGetter.UpdateTabStage(layoutDependency, v.Object, levelInfo.PackStage) end if v.Effect and v.Effect ~= "" then if string.match(v.Effect, "Assets/") then LuaEditorDataGetter.UpdateTabStage(layoutDependency, v.Effect, levelInfo.PackStage) else LuaEditorDataGetter.UpdateTabStage(layoutDependency, "Assets/PsEffect/Projects/Public/SceneEffect/" .. v.Effect, levelInfo.PackStage) end end LuaEditorDataGetter.HandleLayoutDependModel(v, layoutDependency, levelInfo) end for i, v in ipairs(layout.LevelEventList) do for j, eventAction in ipairs(v.Actions) do if eventAction.Type == LuaConst.LevelActionType.Global_PlayDialogue then local __, dialogueDataList = DataSheetManager.DialogueData:TryGetDataByTaskDialoID_SubID(eventAction.Param1) if dialogueDataList then for i,dialogueDataCfg in DataSheetManager.DialogueData:GetDataByTaskDialoID_SubID(eventAction.Param1) do if not string.isNilOrEmpty(dialogueDataCfg.Texture) then LuaEditorDataGetter.UpdateTabStage(layoutDependency, string.format("Assets/UI/Dynamic/UI_HeroHeadSquare/%s.png", dialogueDataCfg.Texture), levelInfo.PackStage) end end end end end end end --小地图也在这里处理了,不用在FileStageConfig里一直加特殊处理 local mapID = levelInfo.SceneMapID if mapID then local success, miniMapData = DataSheetManager.MiniMapData:TryGetDataByID(mapID) if success then local miniMapPath = string.format("Assets/UI/Dynamic/MapTexture/%s.png", miniMapData.SceneMap) LuaEditorDataGetter.UpdateTabStage(layoutDependency,miniMapPath, levelInfo.PackStage) end end end end return layoutDependency end --处理layout依赖的model资源 function LuaEditorDataGetter.HandleLayoutDependModel(levelItem, layoutDependency, levelInfo) local levelStage = levelInfo.PackStage local typ = levelItem.LevelItemType if typ == LuaConst.LevelItemType.Npc then local _, npcData = DataSheetManager.NpcData:TryGetDataByID(levelItem.NpcID) if npcData and npcData.TaskBorn == false then --任务依赖的NPC不跟随layout的分包,因为可能会被提前引用 LuaEditorDataGetter.ProcessModelDependency(npcData.ModelID, layoutDependency, levelStage) end elseif typ == LuaConst.LevelItemType.SpawnNpcPoint then if levelItem.NormalNpcPointList then for _, v in ipairs(levelItem.NormalNpcPointList) do local _, npcData = DataSheetManager.NpcData:TryGetDataByID(v.NpcID) if npcData then LuaEditorDataGetter.ProcessModelDependency(npcData.ModelID, layoutDependency, levelStage) end end end if levelItem.EliteNpcPointList then for _, v in ipairs(levelItem.EliteNpcPointList) do local _, npcData = DataSheetManager.NpcData:TryGetDataByID(v.NpcID) if npcData then LuaEditorDataGetter.ProcessModelDependency(npcData.ModelID, layoutDependency, levelStage) end end end elseif typ == LuaConst.LevelItemType.RandomPool then if levelItem.WeightList then for i, v in ipairs(levelItem.WeightList) do LuaEditorDataGetter.ProcessMonsterDependency(v.Value, layoutDependency, levelStage) end end elseif typ == LuaConst.LevelItemType.Monster then if levelItem.WeightMonsterIDList then for i, v in ipairs(levelItem.WeightMonsterIDList) do LuaEditorDataGetter.ProcessMonsterDependency(v.MonsterID, layoutDependency, levelStage) end end elseif typ == LuaConst.LevelItemType.Trigger then if levelItem.MonsterID then LuaEditorDataGetter.ProcessMonsterDependency(levelItem.MonsterID, layoutDependency, levelStage) end elseif typ == LuaConst.LevelItemType.Collection then local _, collectionData = DataSheetManager.CollectionData:TryGetDataByID(levelItem.CollectionID) if collectionData then --采集物不用layout的分包,应该使用任务的分包 local taskId = collectionData.ActiveTaskID local _, taskData = DataSheetManager.TaskChildData:TryGetDataByTaskLineID_TaskChildID(taskId, 1) if taskData then LuaEditorDataGetter.ProcessModelDependency(collectionData.ModelID, layoutDependency, taskData.PackStage) if collectionData.ModelEffects ~= "" then LuaEditorDataGetter.UpdateTabStage(layoutDependency, collectionData.ModelEffects, taskData.PackStage) end end end elseif typ == LuaConst.LevelItemType.SceneActor then LuaEditorDataGetter.ProcessModelDependency(levelItem.MonsterModelID, layoutDependency, levelStage) end --镖车 if levelInfo.LevelType == LuaConst.LevelType.SyncPlanesEscort then for i, v in DataSheetManager.GuildEscortData:GetEnumerator() do local _, npcData = DataSheetManager.NpcData:TryGetDataByID(v.CarNPCID) if npcData then LuaEditorDataGetter.ProcessModelDependency(npcData.ModelID, layoutDependency, levelStage) end end end --长安植物 for i, v in DataSheetManager.CollectServerData:GetEnumerator() do if v.MapID == levelInfo.LevelID then local _, npcData = DataSheetManager.NpcData:TryGetDataByID(v.NPCID) if npcData then LuaEditorDataGetter.ProcessModelDependency(npcData.ModelID, layoutDependency, levelStage) end end end end --处理Model依赖 function LuaEditorDataGetter.ProcessModelDependency(modelID, result, stage) local _, modelData = DataSheetManager.MonsterModelData:TryGetDataByID(modelID) if modelData then LuaEditorDataGetter.CollectModelDependency(modelData, result, stage) end end --处理Monster依赖 function LuaEditorDataGetter.ProcessMonsterDependency(monsterID, result, stage) local _, monsterData = DataSheetManager.MonsterData:TryGetDataByID(monsterID) if monsterData then --monster自身的Model LuaEditorDataGetter.ProcessModelDependency(monsterData.ModelID, result, stage) --monster的技能 LuaEditorDataGetter.ProcessSkillModel(monsterData.SkillIDData_Table, result, stage) --monster的变身 --monster的技能特效 LuaEditorDataGetter.ProcessSkillEffect(monsterData.SkillIDData_Table, result, stage) --monster的buff特效 LuaEditorDataGetter.ProcessBornBuffs(monsterData.BornBuffs, result, stage) if #monsterData.ChangeMonsterList > 0 then for _, monsterId in ipairs(monsterData.ChangeMonsterList) do LuaEditorDataGetter.ProcessMonsterDependency(monsterId, result, stage) end end end end function LuaEditorDataGetter.ProcessSkillEffect(skillIds, result, stage) for _, skill in ipairs(skillIds) do local _, skillData = DataSheetManager.SkillData:TryGetDataByID(skill.ID) if skillData then local skillResource = skillData.SkillResource LuaEditorDataGetter.UpdatePsEffectStage(skillData.SkillResource, result, stage) for i, v in ipairs(skillData.SkillEvent_Table) do if v.EventType == 1 then LuaEditorDataGetter.ProcessCallBulletData(v.EventIntParam, result, stage) end end end end end function LuaEditorDataGetter.UpdatePsEffectStage(path, result, stage) if not string.isNilOrEmpty(path) then LuaEditorDataGetter.UpdateTabStage(result, string.format("Assets/PsEffect/Projects/%s.prefab", path), stage) end end function LuaEditorDataGetter.ProcessBornBuffs(bornBuffs, result, stage) for _, id in ipairs(bornBuffs) do LuaEditorDataGetter.ProcessBuffEffect(id, result, stage) end end function LuaEditorDataGetter.ProcessBuffEffect(id, result, stage) LuaEditorDataGetter.ProcessedBuffDataDict[id] = true local _, buffData = DataSheetManager.BuffData:TryGetDataByBuffID(id) if buffData then LuaEditorDataGetter.UpdatePsEffectStage(buffData.BuffResource, result, stage) LuaEditorDataGetter.UpdatePsEffectStage(buffData.QueueResource, result, stage) local _, buffTriggerData = DataSheetManager.BuffTriggerData:TryGetDataByBuffID(id) if buffTriggerData then for _, triggerData in ipairs(buffTriggerData.TriggerBuffData_Table) do if triggerData.ActionType == LuaConst.EBuffTriggerActionType.AddBuff then if not LuaEditorDataGetter.ProcessedBuffDataDict[triggerData.ActionParamInt1] then LuaEditorDataGetter.ProcessBuffEffect(triggerData.ActionParamInt1, result, stage) end elseif triggerData.ActionType == LuaConst.EBuffTriggerActionType.CallMissile then LuaEditorDataGetter.ProcessCallBulletData(triggerData.ActionParamInt1, result, stage) end end end for _, battleEffectId in ipairs(buffData.StartEffects) do local _, battleEffectCfg = DataSheetManager.BattleEffectData:TryGetDataByID(battleEffectId) if battleEffectCfg then if battleEffectCfg.funcName == "AddBuffSkill" then local _, buffSkillData = DataSheetManager.BuffSkillData:TryGetDataByID(battleEffectCfg.intParams[1]) if buffSkillData then if not LuaEditorDataGetter.ProcessedBuffDataDict[buffSkillData.BuffID] then LuaEditorDataGetter.ProcessBuffEffect(buffSkillData.BuffID, result, stage) end end elseif battleEffectCfg.funcName == "CallByBuffSkill" then LuaEditorDataGetter.ProcessCallBulletData(battleEffectCfg.intParams[2], result, stage) end end end end end function LuaEditorDataGetter.ProcessSkillModel(skillIds, result, stage) for _, skill in ipairs(skillIds) do local _, skillData = DataSheetManager.SkillData:TryGetDataByID(skill.ID) if skillData then for key, skillEvent in pairs(skillData.SkillEvent_Table) do if skillEvent.EventType == LuaConst.SkillEventType.CallBullet then LuaEditorDataGetter.ProcessCallBulletData(skillEvent.EventIntParam, result, stage) elseif skillEvent.EventType == LuaConst.SkillEventType.ChangeModel then LuaEditorDataGetter.ProcessModelDependency(skillEvent.EventIntParam, result, stage) end end end end end --处理call表资源 function LuaEditorDataGetter.ProcessCallBulletData(callId, result, stage) local _, callBulletData = DataSheetManager.CallBulletData:TryGetDataByID(callId) if callBulletData then if callBulletData.MonsterID > 0 then LuaEditorDataGetter.ProcessMonsterDependency(callBulletData.MonsterID, result, stage) end local bulletID, trackerID = callBulletData.BulletID, callBulletData.TrackerID local _, missileData = DataSheetManager.MissileData:TryGetDataByID(bulletID) local _, trackerData = DataSheetManager.TrackerData:TryGetDataByID(trackerID) if missileData then LuaEditorDataGetter.UpdatePsEffectStage(missileData.PSMissileResource, result, stage) LuaEditorDataGetter.UpdatePsEffectStage(missileData.HitResource, result, stage) LuaEditorDataGetter.UpdatePsEffectStage(missileData.HitScreenResource, result, stage) end if trackerData then LuaEditorDataGetter.UpdatePsEffectStage(trackerData.PSMissileResource, result, stage) LuaEditorDataGetter.UpdatePsEffectStage(trackerData.HitResource, result, stage) LuaEditorDataGetter.UpdatePsEffectStage(trackerData.HitScreenResource, result, stage) end end end function LuaEditorDataGetter.UpdateTabStage(tab, path, tarStage) if tarStage == nil then return end local oriStage = tab[path] or STAGE_REMOVE if oriStage == STAGE_REMOVE and tarStage == STAGE_REMOVE then tab[path] = STAGE_REMOVE elseif oriStage == STAGE_REMOVE and tarStage ~= STAGE_REMOVE then tab[path] = tarStage elseif oriStage ~= STAGE_REMOVE and tarStage == STAGE_REMOVE then tab[path] = oriStage elseif oriStage ~= STAGE_REMOVE and tarStage ~= STAGE_REMOVE then if oriStage == STAGE_UNKNOWN and tarStage == STAGE_UNKNOWN then tab[path] = STAGE_UNKNOWN elseif oriStage == STAGE_UNKNOWN and tarStage ~= STAGE_UNKNOWN then tab[path] = tarStage elseif oriStage ~= STAGE_UNKNOWN and tarStage == STAGE_UNKNOWN then tab[path] = oriStage elseif oriStage ~= STAGE_UNKNOWN and tarStage ~= STAGE_UNKNOWN then tab[path] = math.min(oriStage, tarStage) end end end function LuaEditorDataGetter.AddTimeline(path, stage) LuaEditorDataGetter.UpdateTabStage(timelineStageCfg, path, stage) end --所有tl路径 function LuaEditorDataGetter.GetConfigTimeline(isIncludeNotInPkg, smallApk) --layout for _, levelInfo in DataSheetManager.LevelInfoData:GetEnumerator() do if isIncludeNotInPkg or levelInfo.PackStage >= 0 then local ret, layout = pcall(require, "Battle/Logic/Level/LevelItemAndEventData/LevelLayoutData" .. levelInfo.LevelID) if ret and layout and layout.LevelItemList then for _, v in ipairs(layout.LevelEventList) do if v.Actions then for _, action in ipairs(v.Actions) do if action.Type == LuaConst.LevelActionType.Global_PlayTimeLine then for _, param in ipairs(action.Param1) do LuaEditorDataGetter.AddTimeline(param.Path, levelInfo.PackStage) end end end end if v.Conditions then for _, condition in ipairs(v.Conditions) do if condition.Type == LuaConst.LevelConditionType.Global_TimeLineEnd then LuaEditorDataGetter.AddTimeline(condition.Param1, levelInfo.PackStage) end end end end end end end --任务表 for _, v in DataSheetManager.TaskChildData:GetEnumerator() do if v.ActionType == Task_Model.Enum_ActionType.Show or v.ActionType == Task_Model.Enum_ActionType.AutoComplete or v.ActionType == Task_Model.Enum_ActionType.Consistent then if isIncludeNotInPkg or v.PackStage >= 0 then local path = string.format(TIMELINE_PATH, v.Factor) LuaEditorDataGetter.AddTimeline(path, v.PackStage) end end end if smallApk then timelineStageCfg["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_005.prefab"] = 201 timelineStageCfg["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_006.prefab"] = 201 timelineStageCfg["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_007.prefab"] = 201 timelineStageCfg["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_008.prefab"] = 201 timelineStageCfg["Assets/TimeLine/Prefabs/StagePlay/StagePlay_99_99_009.prefab"] = 0 end return timelineStageCfg end function LuaEditorDataGetter.IsArrayContainsValue(array, value) for _, item in ipairs(array) do if item == value then return true end end return false end --获取音效分包 function LuaEditorDataGetter.GetSoundStage() local soundStageDict = {} for _, levelInfo in DataSheetManager.LevelInfoData:GetEnumerator() do if levelInfo.PackStage >= 0 then --layout的音效 local ret, layout = pcall(require, "Battle/Logic/Level/LevelItemAndEventData/LevelLayoutData" .. levelInfo.LevelID) if ret and layout and layout.LevelItemList then for _, v in ipairs(layout.LevelEventList) do if v.Actions then for _, action in ipairs(v.Actions) do if action.Type == LuaConst.LevelActionType.Global_PlaySound then LuaEditorDataGetter.UpdateTabStage(soundStageDict, action.Param1, levelInfo.PackStage) end end end end end --关卡的音效 LuaEditorDataGetter.UpdateTabStage(soundStageDict, levelInfo.LevelSound, levelInfo.PackStage) end end return soundStageDict end --武将分包配置 function LuaEditorDataGetter.GetSortedHeroStageList() local heroList = {} for i,v in DataSheetManager.StageHero:GetEnumerator() do if v.StageType == 1 or v.StageType == 2 then local info = { ID = v.ID, Rank = -999, StageType = v.StageType, ShowStage = v.ShowStage, NormalStage = v.NormalStage, PvpStage = v.PvpStage, HeroWord = v.HeroPath, } if v.StageType == 1 then local isSuccess, heroNum = DataSheetManager.HeroNum:TryGetDataByID(v.ID) if isSuccess then info.Rank = heroNum.HeroQuality end end table.insert(heroList, info) end end table.sort(heroList, function(a,b) if a.StageType == b.StageType then if a.Rank == b.Rank then return a.ID > b.ID else return a.Rank > b.Rank end else return a.StageType < b.StageType end end) return heroList end function LuaEditorDataGetter.HandleAppearanceReplace(replaceId, stage, result) local replaceData = DataSheetManager.SkinReplaceData:GetDataByID(replaceId) if #replaceData.ReplaceCallMonsterModel > 0 then for _, model in ipairs(replaceData.ReplaceCallMonsterModel) do LuaEditorDataGetter.ProcessModelDependency(model, result, stage) end end end function LuaEditorDataGetter.GetHeroDependContainer() local result = {} for _, v in DataSheetManager.StageHero:GetEnumerator() do local templateID = 0 if v.StageType == 1 then --武将本体 local _, heroData = DataSheetManager.HeroData:TryGetDataByID(v.ID) if heroData then LuaEditorDataGetter.ProcessSkillModel(heroData.SkillIDData_Table, result, v.NormalStage) LuaEditorDataGetter.ProcessSkillEffect(heroData.SkillIDData_Table, result, v.NormalStage) LuaEditorDataGetter.ProcessBornBuffs(heroData.BornBuffs, result, v.NormalStage) local _, magicData = DataSheetManager.MagicWeaponData:TryGetDataByMagicWeaponID(v.ID) if magicData then templateID = magicData.MagicWeaponFoundry end local _, heroNum = DataSheetManager.HeroNum:TryGetDataByID(v.ID) if heroNum then result[heroNum.PreviewTimeline] = v.ShowStage end end elseif v.StageType == 2 then --武将时装 local _, heroAppearance = DataSheetManager.HeroAppearance:TryGetDataByID(v.ID) if heroAppearance then if heroAppearance.SkinPsReplaceID > 0 then LuaEditorDataGetter.HandleAppearanceReplace(heroAppearance.SkinPsReplaceID, v.NormalStage, result) end local _, appearanceData = DataSheetManager.WeaponAppearance:TryGetDataByID(heroAppearance.WeaponAppearanceID) if appearanceData then if appearanceData.SkinPsReplaceID > 0 then LuaEditorDataGetter.HandleAppearanceReplace(appearanceData.SkinPsReplaceID, v.NormalStage, result) end templateID = appearanceData.MagicWeaponFoundry end result[heroAppearance.PreviewTimeline] = v.ShowStage local controllerPath = string.gsub(heroAppearance.PreviewTimeline, ".prefab", ".controller") result[controllerPath] = v.ShowStage --染色配置 local _, dyeCfg = DataSheetManager.CollectionAP:TryGetDataByID(v.ID) if dyeCfg then result[dyeCfg.ShowConfig] = v.ShowStage result[dyeCfg.BattleConfig] = v.NormalStage result[dyeCfg.PVPConfig] = v.PvpStage end end end if templateID > 0 then for _, foundry in DataSheetManager.MagicWeaponFoundry:GetDataByID_PointID(templateID) do for _, id in ipairs(foundry.BuffIDs) do LuaEditorDataGetter.ProcessBuffEffect(id, result, v.NormalStage) end end end end return result end --整合所有视频资源的分包,目前只有两个来源 --1、各类配置 --2、Timeline文件的依赖 --该方法仅返回的1中各个配置的视频资源,2在分析Timeline依赖的步骤中处理了 function LuaEditorDataGetter.GetMovieStage(type) local result = {} --key:path,value:stage --CG 分包为0 local cgCN_1 = "Assets/StreamingAssets/Movie/" .. DataSheetManager.ConstData:GetDataByID("GameOpeningLoopCG_CN").StringValue local cgCN_2 = "Assets/StreamingAssets/Movie/" .. DataSheetManager.ConstData:GetDataByID("GameOpeningCG_CN").StringValue local cgJP_1 = "Assets/StreamingAssets/Movie/" .. DataSheetManager.ConstData:GetDataByID("GameOpeningLoopCG_JP").StringValue local cgJP_2 = "Assets/StreamingAssets/Movie/" .. DataSheetManager.ConstData:GetDataByID("GameOpeningCG_JP").StringValue local cgHMT_1 = "Assets/StreamingAssets/Movie/" .. DataSheetManager.ConstData:GetDataByID("GameOpeningLoopCG_HMT").StringValue local cgHMT_2 = "Assets/StreamingAssets/Movie/" .. DataSheetManager.ConstData:GetDataByID("GameOpeningCG_HMT").StringValue local cgVN_1 = "Assets/StreamingAssets/Movie/" .. DataSheetManager.ConstData:GetDataByID("GameOpeningLoopCG_VN").StringValue local cgVN_2 = "Assets/StreamingAssets/Movie/" .. DataSheetManager.ConstData:GetDataByID("GameOpeningCG_VN").StringValue if type == "hmt" then LuaEditorDataGetter.UpdateTabStage(result, cgCN_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgCN_2, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgJP_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgJP_2, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgHMT_1, 0) LuaEditorDataGetter.UpdateTabStage(result, cgHMT_2, STAGE_PACK_399) LuaEditorDataGetter.UpdateTabStage(result, cgVN_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgVN_2, STAGE_REMOVE) elseif type == "jp" then LuaEditorDataGetter.UpdateTabStage(result, cgCN_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgCN_2, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgJP_1, 0) LuaEditorDataGetter.UpdateTabStage(result, cgJP_2, STAGE_PACK_399) LuaEditorDataGetter.UpdateTabStage(result, cgHMT_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgHMT_2, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgVN_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgVN_2, STAGE_REMOVE) elseif type == "cn" or type == "gs" then LuaEditorDataGetter.UpdateTabStage(result, cgCN_1, 0) LuaEditorDataGetter.UpdateTabStage(result, cgCN_2, STAGE_PACK_399) LuaEditorDataGetter.UpdateTabStage(result, cgJP_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgJP_2, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgHMT_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgHMT_2, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgVN_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgVN_2, STAGE_REMOVE) elseif type == "vn" then LuaEditorDataGetter.UpdateTabStage(result, cgCN_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgCN_2, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgJP_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgJP_2, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgHMT_1, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgHMT_2, STAGE_REMOVE) LuaEditorDataGetter.UpdateTabStage(result, cgVN_1, 0) LuaEditorDataGetter.UpdateTabStage(result, cgVN_2, STAGE_PACK_399) end --layout中也配置了视频,视频分包跟随关卡分包 for _, levelInfo in DataSheetManager.LevelInfoData:GetEnumerator() do if levelInfo.PackStage >= 0 then local ret, layout = pcall(require, "Battle/Logic/Level/LevelItemAndEventData/LevelLayoutData" .. levelInfo.LevelID) if ret and layout and layout.LevelItemList then for _, v in ipairs(layout.LevelEventList) do if v.Actions then for _, action in ipairs(v.Actions) do if action.Type == LuaConst.LevelActionType.Global_PlayMovie then LuaEditorDataGetter.UpdateTabStage(result, "Assets/StreamingAssets/Movie/" .. action.Param1[1], levelInfo.PackStage) end end end end end end end --任务配置 for _, v in DataSheetManager.TaskChildData:GetEnumerator() do if v.ActionType == Task_Model.Enum_ActionType.PlayMovie then local params = string.split(v.Factor,';') LuaEditorDataGetter.UpdateTabStage(result, "Assets/StreamingAssets/Movie/" .. params[1], v.PackStage) end end --没有特殊需求,其他配置里的视频目前都分配到分包2 for i,v in DataSheetManager.SuperGoldActivityModeData:GetEnumerator() do LuaEditorDataGetter.UpdateTabStage(result, "Assets/StreamingAssets/Movie/" .. v.OpeningCG, STAGE_PACK_399) end for i, v in DataSheetManager.PlotReviewData:GetEnumerator() do if v.PlotType == 3 then LuaEditorDataGetter.UpdateTabStage(result, "Assets/StreamingAssets/Movie/" .. v.CGName, STAGE_PACK_399) end end for i, v in DataSheetManager.FunctionPredictionData:GetEnumerator() do if v.FunctionDisplayType == 2 then LuaEditorDataGetter.UpdateTabStage(result, "Assets/StreamingAssets/Movie/" .. v.DisplayID, STAGE_PACK_399) end end LuaEditorDataGetter.UpdateTabStage(result, "Assets/StreamingAssets/Movie/" .. ActivityGacha_Model.MovieName.GoldenHero, STAGE_PACK_399) LuaEditorDataGetter.UpdateTabStage(result, "Assets/StreamingAssets/Movie/" .. ActivityGacha_Model.MovieName.SuperGold, STAGE_PACK_399) for i, v in DataSheetManager.FunctionUpdateNoticeChild:GetEnumerator() do if v.ChildType == 1 then LuaEditorDataGetter.UpdateTabStage(result, "Assets/StreamingAssets/" .. v.Movie, STAGE_PACK_299) end end return result end function LuaEditorDataGetter.GetLayoutAndTerrainInfoStage() local result = {} --key:path,value:stage for _, levelInfo in DataSheetManager.LevelInfoData:GetEnumerator() do --主城不进包,但是LevelLayoutData 寻路需要用 所以LevelLayoutData进包 local packageStage = levelInfo.LevelType == 100 and 0 or levelInfo.PackStage local layoutPath = "Assets/StreamingAssets/LuaScripts/Battle/Logic/Level/LevelItemAndEventData/LevelLayoutData" .. levelInfo.LevelID .. ".lua" LuaEditorDataGetter.UpdateTabStage(result, layoutPath, packageStage) local walkPlaneName = levelInfo.WalkPlane~="" and levelInfo.WalkPlane or levelInfo.ScenePath local terrainInfoPath = "Assets/StreamingAssets/TerrainInfo/" .. walkPlaneName .. ".bytes" LuaEditorDataGetter.UpdateTabStage(result, terrainInfoPath, levelInfo.PackStage) end return result end function LuaEditorDataGetter.CollectModelDependency(modelData, result, tarStage) if modelData.Path ~= "" then LuaEditorDataGetter.UpdateTabStage(result, modelData.Path, tarStage) end if modelData.CombinePath ~= "" then LuaEditorDataGetter.UpdateTabStage(result, modelData.CombinePath, tarStage) end if modelData.AnimAppend ~= "" then LuaEditorDataGetter.UpdateTabStage(result, modelData.AnimAppend, tarStage) end if modelData.AnimCtlPath ~= "" then LuaEditorDataGetter.UpdateTabStage(result, modelData.AnimCtlPath, tarStage) end if modelData.ModelPsEffect ~= "" then LuaEditorDataGetter.UpdatePsEffectStage(modelData.ModelPsEffect, result, tarStage) end --关联controller路径 LuaEditorDataGetter.ProcessActorCtrlPath(result, ExpEntity.GetCtrlPath(modelData, ExpEntity.ModelCtrlType_PVP), tarStage) LuaEditorDataGetter.ProcessActorCtrlPath(result, ExpEntity.GetCtrlPath(modelData, ExpEntity.ModelCtrlType_ZhuCheng), tarStage) LuaEditorDataGetter.ProcessActorCtrlPath(result, ExpEntity.GetCtrlPath(modelData, ExpEntity.ModelCtrlType_Statue), tarStage) LuaEditorDataGetter.ProcessActorCtrlPath(result, ExpEntity.GetCtrlPath(modelData, ExpEntity.ModelCtrlType_SceneQuiz, 1), tarStage) LuaEditorDataGetter.ProcessActorCtrlPath(result, ExpEntity.GetCtrlPath(modelData, ExpEntity.ModelCtrlType_SceneQuiz, 2), tarStage) LuaEditorDataGetter.ProcessActorCtrlPath(result, ExpEntity.GetCtrlPath(modelData, ExpEntity.ModelCtrlType_InBattle, 1), tarStage) LuaEditorDataGetter.ProcessActorCtrlPath(result, ExpEntity.GetCtrlPath(modelData, ExpEntity.ModelCtrlType_InBattle, 2), tarStage) LuaEditorDataGetter.ProcessActorCtrlPath(result, ExpEntity.GetAnimatorCtrlPathByModelData(modelData), tarStage) if modelData.EquipmentID ~= "" then local isSuccess, equipData = DataSheetManager.EquipPartsData:TryGetDataByID(modelData.EquipmentID) if isSuccess then for i, v in ipairs(equipData.EquipPart_Table) do LuaEditorDataGetter.UpdateTabStage(result, v.Prefeb, tarStage) end end end end function LuaEditorDataGetter.ProcessActorCtrlPath(result, ctrlPath, tarStage) if ctrlPath ~= "" then LuaEditorDataGetter.UpdateTabStage(result, ctrlPath, tarStage) local path1, path2 = EditorExt.GetGPUSkinningAssetPath(ctrlPath) LuaEditorDataGetter.UpdateTabStage(result, path1, tarStage) LuaEditorDataGetter.UpdateTabStage(result, path2, tarStage) --击飞数据是跟Controller路径绑定的,也需要加进来 local assetPath, match = string.gsub(ctrlPath, ".controller", "/FlyAnimationCurve.asset") if match > 0 then LuaEditorDataGetter.UpdateTabStage(result, assetPath, tarStage) end end end --从配置找到可能调用的路径,防止被误删 function LuaEditorDataGetter.GetActorAssetStage() local result = {} --Monster表和Model表存在太多未知调用源又不好清理的数据,直接遍历这两个表来做保底会造成太多实际没用的资源进包 --目前改成技能表和Call表来做保底,虽然也存在着没调用导致冗余的情况,不过这个数量级要比上边的方案低不少 --TODO:其实技能表和Call表也是作为BattleEffect的中间节点驱动的,等后续整理好BattleEffectData的调用来源,就可以不用这两个来做保底了 for i, skillData in DataSheetManager.SkillData:GetEnumerator() do for key, skillEvent in pairs(skillData.SkillEvent_Table) do if skillEvent.EventType == LuaConst.SkillEventType.ChangeModel then LuaEditorDataGetter.ProcessModelDependency(skillEvent.EventIntParam, result, STAGE_UNKNOWN) end end end for i, callBulletData in DataSheetManager.CallBulletData:GetEnumerator() do LuaEditorDataGetter.ProcessCallBulletData(callBulletData.ID, result, STAGE_UNKNOWN) end for i, v in DataSheetManager.BattleEffectData:GetEnumerator() do if v.funcName == "ChangeModel" then if v.intParams[1] > 0 then LuaEditorDataGetter.ProcessModelDependency(v.ID, result, STAGE_UNKNOWN) end end end for i, v in DataSheetManager.RogueMonsterBornPill:GetEnumerator() do LuaEditorDataGetter.ProcessMonsterDependency(v.MonsterID, result, STAGE_PACK_500) LuaEditorDataGetter.ProcessMonsterDependency(v.DropPill, result, STAGE_PACK_500) end for i, v in DataSheetManager.EquipPartsData:GetEnumerator() do for _, equip in ipairs(v.EquipPart_Table) do if equip.Prefeb ~= "" then LuaEditorDataGetter.UpdateTabStage(result, equip.Prefeb, STAGE_UNKNOWN) end end end for i, v in DataSheetManager.PersonalBoss:GetEnumerator() do if v.BossShow ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.BossShow, STAGE_PACK_299) end if v.ModelLight ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.ModelLight, STAGE_PACK_299) end end for i, v in DataSheetManager.WorldBoss:GetEnumerator() do if v.BossShow ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.BossShow, STAGE_PACK_299) end if v.ModelLight ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.ModelLight, STAGE_PACK_299) end end for i, v in DataSheetManager.ActivityBossFightData:GetEnumerator() do if v.BossShow ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.BossShow, STAGE_PACK_299) end if v.BossActor ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.BossActor, STAGE_PACK_299) end if v.ModelLight ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.ModelLight, STAGE_PACK_299) end end --legend立绘资源 for i, v in DataSheetManager.GoldHeroActivityModeData:GetEnumerator() do if v.MainPrefabHero ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.MainPrefabHero, STAGE_PACK_299) end end for i, v in DataSheetManager.NewYearPrefabData:GetEnumerator() do if v.UINewYearMainLive2D ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.UINewYearMainLive2D, STAGE_PACK_299) end end for i, v in DataSheetManager.SuperGoldActivityModeData:GetEnumerator() do if v.HeroBackground ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.HeroBackground, STAGE_PACK_299) end if v.MainPrefabHero ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.MainPrefabHero, STAGE_PACK_299) end if v.DrawCardMainPrefabHero ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.DrawCardMainPrefabHero, STAGE_PACK_299) end end --任务引用的NPC for _, v in DataSheetManager.TaskChildData:GetEnumerator() do for i = 1, #v.NPCID do local _, npcData = DataSheetManager.NpcData:TryGetDataByID(v.NPCID[i]) LuaEditorDataGetter.ProcessModelDependency(npcData.ModelID, result, v.PackStage) end end --PsEffect LuaEditorDataGetter.CollectEffect(result) for _, v in DataSheetManager.IAP:GetEnumerator() do if v.Icon ~= "" then LuaEditorDataGetter.UpdateTabStage(result, v.Icon, STAGE_PACK_129) end end --常量表引用的Monster for _, monsterId in ipairs(DataSheetManager.ConstData:GetDataByID("GuildWarResDropBoxId").IntListValue) do LuaEditorDataGetter.ProcessMonsterDependency(monsterId, result, STAGE_PACK_299) end return result end function LuaEditorDataGetter.CollectEffect(result) --StratagemEffect for _, data in DataSheetManager.StratagemData:GetEnumerator() do if data.StratagemPicture ~= "" then LuaEditorDataGetter.UpdateTabStage(result, data.StratagemPicture, STAGE_PACK_299) end end --SceneEffect for _, v in DataSheetManager.PointEffect:GetEnumerator() do LuaEditorDataGetter.UpdateTabStage(result, v.EffectPatch, STAGE_PACK_299) end --AppearanceEffect for _, v in DataSheetManager.LightEffect:GetEnumerator() do LuaEditorDataGetter.UpdateTabStage(result, string.format("Assets/PsEffect/Projects/%s.prefab", v.EffectName), STAGE_PACK_299) end end function LuaEditorDataGetter.GetUnHumanDeps(type) local result = {} for i,v in DataSheetManager.StageHero:GetEnumerator() do if v.StageType == type then if type == UnHumanType.AncientGodbeast then LuaEditorDataGetter.CollectAncientGodbeastDeps(result, v) elseif type == UnHumanType.Horse then LuaEditorDataGetter.CollectHorseDeps(result, v) elseif type == UnHumanType.Treasure then LuaEditorDataGetter.CollectTreasureDeps(result, v) elseif type == UnHumanType.Pet then LuaEditorDataGetter.CollectPetDeps(result, v) end end end return result end function LuaEditorDataGetter.ProcessDevelopEffect(id, result, stage) local _, devEffect = DataSheetManager.DevelopEffectData:TryGetDataByID(id) if devEffect then for _, buff in ipairs(devEffect.BuffIDs) do LuaEditorDataGetter.ProcessBuffEffect(buff, result, stage) end end end function LuaEditorDataGetter.CollectAncientGodbeastDeps(result, stageCfg) local data = DataSheetManager.GodBeastData:GetDataByID(stageCfg.ID) --神兽模型、灯光、动作 LuaEditorDataGetter.UpdateTabStage(result, data.GodBeastParadiseLiveImage, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, data.GodBeastPreviewModelLight, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, data.ModelIdleAnim, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, data.ModelIdleShowAnim, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, data.GodBeastShowEffect, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, data.GodBeastShowEffect2, stageCfg.ShowStage) --神兽技能 LuaEditorDataGetter.ProcessModelDependency(data.GodBeastModelID, result, stageCfg.NormalStage) LuaEditorDataGetter.ProcessDevelopEffect(data.GodBeastSkill, result, stageCfg.NormalStage) end function LuaEditorDataGetter.CollectHorseDeps(result, stageCfg) local _, horseCfg = DataSheetManager.HorseData:TryGetDataByHorseID(stageCfg.ID) if horseCfg == nil then horseCfg = DataSheetManager.HorseAppearance:GetDataByID(stageCfg.ID) end --坐骑模型、灯光、动作 LuaEditorDataGetter.UpdateTabStage(result, horseCfg.HorsePreviewModelLight, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, horseCfg.ModelShowAnim, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, horseCfg.ModelIdleAnim, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, horseCfg.ModelIdleShowAnim, stageCfg.ShowStage) local horseModelCfg = DataSheetManager.HorseModelData:GetDataByHorseModelID(horseCfg.HorseModelID) LuaEditorDataGetter.UpdateTabStage(result, horseModelCfg.HorseModel, stageCfg.NormalStage) LuaEditorDataGetter.UpdateTabStage(result, horseModelCfg.HorseEffect, stageCfg.NormalStage) if horseModelCfg.HorseShowEffect ~= "" then LuaEditorDataGetter.UpdateTabStage(result, horseModelCfg.HorseShowEffect, stageCfg.ShowStage) end if horseModelCfg.HorseModelHigh ~= "" then LuaEditorDataGetter.UpdateTabStage(result, horseModelCfg.HorseModelHigh, stageCfg.ShowStage) end if horseModelCfg.HorseShowEffectHigh ~= "" then LuaEditorDataGetter.UpdateTabStage(result, horseModelCfg.HorseShowEffectHigh, stageCfg.ShowStage) end --坐骑羁绊技能 for _, relation in DataSheetManager.HorseRelation:GetEnumerator() do if relation.HorseID == stageCfg.ID then for _, v in ipairs(relation.Relation_Table) do local _, skillData = DataSheetManager.HorseSkillData:TryGetDataByHorseSkill(v.RelationSkill) if skillData then LuaEditorDataGetter.ProcessDevelopEffect(skillData.HorseDevelopEffectID, result, stageCfg.NormalStage) end end end end end function LuaEditorDataGetter.CollectTreasureDeps(result, stageCfg) local data = DataSheetManager.TreasureData:GetDataByTreasureID(stageCfg.ID) --宝物模型、灯光 LuaEditorDataGetter.UpdateTabStage(result, data.TreasureMode, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, data.TreasureAnim, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, data.TreasurePreviewModelLight, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, data.TreasureShowEffect, stageCfg.ShowStage) --宝物技能 local _, skillData = DataSheetManager.TreasureSkillData:TryGetDataByTreasureSkill(data.TreasureSkill) if skillData then LuaEditorDataGetter.ProcessDevelopEffect(skillData.DevelopEffectID, result, stageCfg.NormalStage) end --宝物羁绊技能 for _, relation in DataSheetManager.TreasureRelation:GetEnumerator() do if relation.TreasureID == stageCfg.ID then for _, tab in ipairs(relation.Relation_Table) do local _, skillData = DataSheetManager.TreasureSkillData:TryGetDataByTreasureSkill(tab.RelationSkill) if skillData then LuaEditorDataGetter.ProcessDevelopEffect(skillData.DevelopEffectID, result, stageCfg.NormalStage) end end end end end function LuaEditorDataGetter.CollectPetDeps(result, stageCfg) --宠物的系统表由于是多主键,和策划规定分包表用宠物配置的PetModelID作为ID local petCfg for i, data in DataSheetManager.PetData:GetEnumerator() do if data.PetModelID == stageCfg.ID then petCfg = data break end end if petCfg then --宠物模型、动作、灯光 LuaEditorDataGetter.UpdateTabStage(result, petCfg.PetModelLight, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, petCfg.ModelIdleAnim, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, petCfg.ModelIdleShowAnim, stageCfg.ShowStage) LuaEditorDataGetter.UpdateTabStage(result, petCfg.PetShowEffect, stageCfg.ShowStage) LuaEditorDataGetter.ProcessModelDependency(petCfg.PetModelID, result, stageCfg.ShowStage) --宠物技能 for _, v in ipairs(petCfg.TalentSkill) do LuaEditorDataGetter.ProcessPetSkill(v, result, stageCfg.NormalStage) end for _, v in ipairs(petCfg.ChildTalentSkill) do LuaEditorDataGetter.ProcessPetSkill(v, result, stageCfg.NormalStage) end --宠物战斗数据 for _, v in DataSheetManager.PetBattleData:GetDataByID_Stage(petCfg.ID) do LuaEditorDataGetter.ProcessModelDependency(v.ModelID, result, stageCfg.NormalStage) --宠物的PVP模型 local _, modelData = DataSheetManager.MonsterModelData:TryGetDataByID(v.ModelID) if modelData then local dir, actorDir, prefab = string.match(modelData.Path, "(%S*)/(%S*)/(%S*)") local newPrefab = string.gsub(prefab, actorDir, actorDir .. "_PVP") LuaEditorDataGetter.UpdateTabStage(result, string.gsub(modelData.Path, prefab, newPrefab), stageCfg.PvpStage) end local _, missileData = DataSheetManager.MissileData:TryGetDataByID(v.NormalMissileID) if missileData then LuaEditorDataGetter.UpdatePsEffectStage(missileData.PSMissileResource, result, stageCfg.NormalStage) LuaEditorDataGetter.UpdatePsEffectStage(missileData.HitResource, result, stageCfg.NormalStage) LuaEditorDataGetter.UpdatePsEffectStage(missileData.HitScreenResource, result, stageCfg.NormalStage) end LuaEditorDataGetter.UpdatePsEffectStage(v.NormalEffect, result, stageCfg.NormalStage) end end end function LuaEditorDataGetter.ProcessPetSkill(petSkill, result, stage) local _, talentCfg = DataSheetManager.PetTalentSkill:TryGetDataByID(petSkill) if talentCfg then LuaEditorDataGetter.ProcessDevelopEffect(talentCfg.PetTalentSkill, result, stage) end local _, skillCfg = DataSheetManager.PetSkillData:TryGetDataByID(petSkill) if skillCfg then local _, missileData = DataSheetManager.MissileData:TryGetDataByID(skillCfg.MissileID) if missileData then LuaEditorDataGetter.UpdatePsEffectStage(missileData.PSMissileResource, result, stage) LuaEditorDataGetter.UpdatePsEffectStage(missileData.HitResource, result, stage) LuaEditorDataGetter.UpdatePsEffectStage(missileData.HitScreenResource, result, stage) end for _, buff in ipairs(skillCfg.BuffList) do LuaEditorDataGetter.ProcessBuffEffect(buff, result, stage) end LuaEditorDataGetter.UpdatePsEffectStage(skillCfg.SkillEffect, result, stage) end end function LuaEditorDataGetter.GetSkillPsEffectResource() local result = {} for _, v in DataSheetManager.MissileData:GetEnumerator() do local path = string.format("Assets/PsEffect/Projects/%s.prefab", v.PSMissileResource) table.insert(result, path) end for _, v in DataSheetManager.TrackerData:GetEnumerator() do local path = string.format("Assets/PsEffect/Projects/%s.prefab", v.PSMissileResource) table.insert(result, path) end for _, v in DataSheetManager.BuffData:GetEnumerator() do local path = string.format("Assets/PsEffect/Projects/%s.prefab", v.BuffResource) table.insert(result, path) end return result end function LuaEditorDataGetter.GetLuaAssetStageList() return LuaEditorDynamicDependencyProvider.GetDynamicDependencies(LuaEditorDataGetter.UpdateTabStage, LuaEditorDataGetter.ProcessModelDependency) end return LuaEditorDataGetter