static int Run(Options opt) { if (!opt.Validate()) { return(1); } Setting setting = LoadSetting(); if (!setting.Validate()) { return(1); } setting.MergeOptions(opt); AviUtlProject?project = Utils.ReadAup(opt.Filename); if (project == null) { return(1); } ExEditProject?exedit = null; for (int i = 0; i < project.FilterProjects.Count; i++) { if (project.FilterProjects[i] is RawFilterProject filter && filter.Name == "拡張編集") { exedit = new ExEditProject(filter); break; } } if (exedit == null) { Console.Error.WriteLine("拡張編集のデータが見つかりません"); return(1); } var usedScripts = ExtractScript(exedit, setting); var sorted = SortScript(usedScripts, setting); if (string.IsNullOrEmpty(opt.OutputPath)) { opt.OutputPath = Path.Combine( Path.GetDirectoryName(opt.Filename) ?? string.Empty, $"{Path.GetFileNameWithoutExtension(opt.Filename)}_scripts.csv"); } if (!OutputCsv(opt.OutputPath, sorted, setting)) { return(1); } return(0); }
/// <summary> /// 拡張編集で使ったスクリプトを抽出する /// </summary> /// <param name="exedit">拡張編集のデータ</param> /// <param name="setting">アプリの設定</param> /// <returns></returns> static List <ScriptData> ExtractScript(ExEditProject exedit, Setting setting) { var knownScripts = setting.GetScripts(); var usedScripts = new Dictionary <UsedScriptKey, ScriptData>(); foreach (var obj in exedit.Objects) { if (obj.Chain) { continue; } foreach (var effect in obj.Effects) { ScriptType type = ScriptType.Other; string scriptName = ""; switch (effect) { case AnimationEffect anm: type = ScriptType.Anm; scriptName = string.IsNullOrEmpty(anm.Name) ? AnimationEffect.Defaults[anm.ScriptId] : anm.Name; break; case CustomObjectEffect coe: type = ScriptType.Obj; scriptName = string.IsNullOrEmpty(coe.Name) ? CustomObjectEffect.Defaults[coe.ScriptId] : coe.Name; break; case CameraEffect cam: type = ScriptType.Cam; scriptName = string.IsNullOrEmpty(cam.Name) ? CameraEffect.Defaults[cam.ScriptId] : cam.Name; break; case SceneChangeEffect scn when scn.Params != null: type = ScriptType.Scn; scriptName = scn.Name; break; } if (!string.IsNullOrEmpty(scriptName)) { AddUsedScript(knownScripts, usedScripts, scriptName, type); } foreach (var trackbar in effect.Trackbars) { if (trackbar.Type == TrackbarType.Script) { scriptName = exedit.TrackbarScripts[trackbar.ScriptIndex].Name; AddUsedScript(knownScripts, usedScripts, scriptName, ScriptType.Tra); } } } } return(usedScripts.Values.ToList()); }