From bb282dd6a310d9c183f1d55637402e8f23cb6876 Mon Sep 17 00:00:00 2001 From: timerix Date: Sat, 4 Feb 2023 03:15:06 +0600 Subject: [PATCH] refactoring --- .gitignore | 2 + Clear.cs | 71 +++++++++ Diff.cs | 76 ++++++++++ Localisation.cs | 26 ++++ Merge.cs | 24 +++ ParadoxModMerger.cs | 217 ---------------------------- ParadoxRusLocalisationGen.cs | 45 ------ Program.cs | 72 +++++++++ paradox-mod-merger.csproj | 42 ++---- paradox-mod-merger.sln | 32 +--- paradox-rus-localisation-gen.csproj | 6 - 11 files changed, 287 insertions(+), 326 deletions(-) create mode 100644 Clear.cs create mode 100644 Diff.cs create mode 100644 Localisation.cs create mode 100644 Merge.cs delete mode 100644 ParadoxModMerger.cs delete mode 100644 ParadoxRusLocalisationGen.cs create mode 100644 Program.cs diff --git a/.gitignore b/.gitignore index 72b2586..7278ef1 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ #backups .old*/ + +nuget.config diff --git a/Clear.cs b/Clear.cs new file mode 100644 index 0000000..963114a --- /dev/null +++ b/Clear.cs @@ -0,0 +1,71 @@ +namespace ParadoxModMerger; + +static class Clear +{ + + static ConsoleLogger logger = new($"logs", "clear"); + static void Log(params string[] msg) => logger.Log(msg); + + public static void ClearWorkshop(string workshopDir, string outDir) + { + string[] moddirs = Directory.GetDirectories(workshopDir); + Log("b", $"found {moddirs.Length} mod dirs"); + for (int i = 0; i < moddirs.Length; i++) + { + string modarch = ""; + if (Directory.GetFiles(moddirs[i], "*.zip").Length != 0) + modarch = Directory.GetFiles(moddirs[i], "*.zip")[0]; + if (modarch.Length != 0) + { + Log("y", $"archive found: {modarch}"); + var pr = new Process(); + pr.StartInfo.CreateNoWindow = true; + pr.StartInfo.UseShellExecute = false; + pr.StartInfo.FileName = Path.Concat("7z", "7z.exe"); + pr.StartInfo.Arguments = $"x -y -o _UNZIP \"{modarch}\""; + pr.Start(); + pr.WaitForExit(); + moddirs[i] = "_UNZIP"; + Log("g", "\tfiles extracted"); + } + + string modname = File.ReadAllText(Path.Concat(moddirs[i], "descriptor.mod")); + modname = modname.Remove(0, modname.IndexOf("name=\"", StringComparison.Ordinal) + 6); + modname = Path.CorrectString(modname.Remove(modname.IndexOf("\"", StringComparison.Ordinal))); + Log("b", $"[{i + 1}/{moddirs.Length}] copying mod ", "c", $"{modname}"); + string[] subdirs = Directory.GetDirectories(moddirs[i]); + for (sbyte n = 0; n < subdirs.Length; n++) + { + subdirs[n] = subdirs[n].Remove(0, subdirs[n].LastIndexOf(Path.Sep) + 1); + switch (subdirs[n]) + { + // stellaris + case "common": + case "events": + case "flags": + case "fonts": + case "gfx": + case "interface": + case "localisation": + case "localisation_synced": + case "map": + case "music": + case "prescripted_countries": + case "sound": + // hoi4 + case "history": + case "portraits": + { + Directory.Copy(Path.Concat(moddirs[i], subdirs[n]), + Path.Concat(outDir, modname, subdirs[n]), + out List _conflicts, true); + Program.LogConflicts(_conflicts); + break; + } + } + } + + if (Directory.Exists("_UNZIP")) Directory.Delete("_UNZIP"); + } + } +} \ No newline at end of file diff --git a/Diff.cs b/Diff.cs new file mode 100644 index 0000000..9fd665c --- /dev/null +++ b/Diff.cs @@ -0,0 +1,76 @@ +namespace ParadoxModMerger; + +static class Diff +{ + static ConsoleLogger logger = new($"logs", "diff"); + static void Log(params string[] msg) => logger.Log(msg); + + public static void DiffMods(string connectedPathes) + { + string[] split = connectedPathes.Split(';'); + DiffMods(split[0], split[1]); + } + + public static void DiffMods(string moddir0, string moddir1) + { + var hasher = new Hasher(); + var diff = new Dictionary(); + // добавление файлов из первой папки + List files = Directory.GetAllFiles(moddir0); + var mods = new List(); + for (short i = 0; i < files.Count; i++) + { + byte[] hash = hasher.HashFile(files[i]); + files[i] = files[i].Replace(moddir0, ""); + diff.Add(files[i], hash); + AddMod(files[i]); + } + + // убирание совпадающих файлов + files = Directory.GetAllFiles(moddir1); + for (short i = 0; i < files.Count; i++) + { + byte[] hash = hasher.HashFile(files[i]); + files[i] = files[i].Replace(moddir1, ""); + if (diff.ContainsKey(files[i]) && diff[files[i]].HashToString() == hash.HashToString()) + diff.Remove(files[i]); + else + { + diff.Add(moddir1 + files[i], hash); + AddMod(files[i]); + } + } + + void AddMod(string mod) + { + mod = mod.Remove(0, 1); + mod = mod.Remove(mod.IndexOf(Path.Sep)); + if (!mods.Contains(mod)) mods.Add(mod); + } + + // вывод результата + StringBuilder output = new StringBuilder(); + output.Append($"[{DateTime.Now}]\n\n"); + foreach (string mod in mods) + { + output.Append('\n').Append(mod).Append("\n{\n"); + foreach (string file in diff.Keys) + { + if (file.Contains(mod)) + { + output.Append('\t'); + if (!file.Contains(moddir1)) output.Append(moddir0).Append(file).Append('\n'); + output.Append(file).Append('\n'); + } + } + + output.Append("}\n"); + // не убирать, это полезное + if (output[output.Length - 4] == '{') + output.Remove(output.Length - mod.Length - 5, mod.Length + 5); + } + + var _outStr = output.ToString(); + Log("w", _outStr); + } +} \ No newline at end of file diff --git a/Localisation.cs b/Localisation.cs new file mode 100644 index 0000000..b76de27 --- /dev/null +++ b/Localisation.cs @@ -0,0 +1,26 @@ +namespace ParadoxModMerger; + +static class Localisation +{ + static ConsoleLogger logger = new($"logs", "autoloc"); + static void Log(params string[] msg) => logger.Log(msg); + + public static void GenerateRussian(string engDir, string rusDir) + { + foreach (string enfFileName in Directory.GetAllFiles(engDir)) + { + string rusFileName = enfFileName + .Replace(engDir, rusDir) + .Replace("l_english", "l_russian"); + if (!File.Exists(rusFileName)) + { + string text = File.ReadAllText(enfFileName) + .Replace("l_english:", "l_russian: "); + byte[] bytes = StringConverter.UTF8BOM.GetBytes(text); + File.WriteAllBytes(rusFileName, bytes); + Log("g", $"file {rusFileName} created"); + } + else Log("y", $"file {rusFileName} already exists"); + } + } +} \ No newline at end of file diff --git a/Merge.cs b/Merge.cs new file mode 100644 index 0000000..d9d5f33 --- /dev/null +++ b/Merge.cs @@ -0,0 +1,24 @@ +namespace ParadoxModMerger; + +static class Merge +{ + static ConsoleLogger logger = new($"logs", "merge"); + static void Log(params string[] msg) => logger.Log(msg); + + public static void MergeAll(string[] moddirs, string outDir) + { + Log("b", $"found {moddirs.Length} mod dirs"); + for (short i = 0; i < moddirs.Length; i++) + { + Log("b", $"[{i + 1}/{moddirs.Length}] merging mod ", "c", $"{moddirs[i]}"); + Directory.Copy(moddirs[i], outDir, out List _conflicts, true); + Program.LogConflicts(_conflicts); + } + } + + public static void MergeSingle(string moddir, string outDir) + { + Directory.Copy(moddir, outDir, out List _conflicts, true); + Program.LogConflicts(_conflicts); + } +} \ No newline at end of file diff --git a/ParadoxModMerger.cs b/ParadoxModMerger.cs deleted file mode 100644 index f15a167..0000000 --- a/ParadoxModMerger.cs +++ /dev/null @@ -1,217 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Text; -using DTLib; -using DTLib.Filesystem; -using DTLib.Logging; -using DTLib.Extensions; - -static class ParadoxModMerger -{ - - // вывод лога в консоль и файл - static ConsoleLogger logger = new ConsoleLogger("merger-logs", "merger"); - static void Log(params string[] msg) => logger.Log(msg); - - static void Main(string[] args) - { - try - { - PublicLog.LogEvent += Log; - - // хелп - if (args.Length == 0 || args[0] == "/?" || args[0] == "-h") - { - Log( - "b", "paradox mod merger help:\n", - "c", "-clear \"steamworkshop dir\" -out \"utput dir\" ", - "b", "clear mod files and put them into separate dirs in output dir\n", - "c", "-merge \"dir with mods\" -out \"output dir\" ", - "b", "merge mods and show conflicts\n", - "c", "-merge-single \"dir with mod\" -out \"output dir\" ", - "b", "copy single mod files and show conflicts\n", - "c", "-diff \"dir with mods\" \"another dir with mods\" -out \"output file\" ", - "b", "compare mod files hashes for finding different files"); - Console.ResetColor(); - return; - } - - string srcdir = ""; - string srcdir2 = ""; - string outdir = ""; - int mode = -1; - // определение всех аргументов - for (sbyte i = 0; i < args.Length; i++) - { - switch (args[i]) - { - case "-clear": - srcdir = args[++i].Replace("\"", "").ИсправитьРазд(); - mode = 0; - break; - case "-merge": - srcdir = args[++i].Replace("\"", "").ИсправитьРазд(); - mode = 1; - break; - case "-diff": - srcdir = args[++i].Replace("\"", "").ИсправитьРазд(); - srcdir2 = args[++i].Replace("\"", "").ИсправитьРазд(); - mode = 2; - break; - case "-merge-single": - srcdir = args[++i].Replace("\"", "").ИсправитьРазд(); - mode = 3; - break; - case "-out": - outdir = args[++i].Replace("\"", "").ИсправитьРазд(); - break; - default: - throw new Exception($"invalid argument: <{args[i]}>"); - } - } - - var conflicts = new List(); - string[] moddirs = Directory.GetDirectories(srcdir); - switch (mode) - { - case 0: - Log("b", $"found {moddirs.Length} mod dirs"); - for (int i = 0; i < moddirs.Length; i++) - { - string modarch = ""; - if (Directory.GetFiles(moddirs[i], "*.zip").Length != 0) modarch = Directory.GetFiles(moddirs[i], "*.zip")[0]; - if (modarch.Length != 0) - { - Log("y", $"archive found: {modarch}"); - var pr = new Process(); - pr.StartInfo.CreateNoWindow = true; - pr.StartInfo.UseShellExecute = false; - pr.StartInfo.FileName = "7z{Путь.Разд}7z.exe"; - pr.StartInfo.Arguments = $"x -y -o_TEMP \"{modarch}\""; - pr.Start(); - pr.WaitForExit(); - moddirs[i] = "_TEMP"; - Log("g", "\tfiles extracted"); - } - string modname = File.ReadAllText($"{moddirs[i]}{Путь.Разд}descriptor.mod"); - modname = modname.Remove(0, modname.IndexOf("name=\"") + 6); - modname = modname.Remove(modname.IndexOf("\"")) - .Replace($"{Путь.Разд}", "").Replace(":", "").Replace("?", "").Replace("\"", "").Replace("/", "") - .Replace("\'", "").Replace("|", "").Replace("<", "").Replace(">", "").Replace("*", ""); - Log("b", $"[{i + 1}/{moddirs.Length}] copying mod ", "c", $"{modname}"); - string[] subdirs = Directory.GetDirectories(moddirs[i]); - for (sbyte n = 0; n < subdirs.Length; n++) - { - subdirs[n] = subdirs[n].Remove(0, subdirs[n].LastIndexOf(Путь.Разд) + 1); - switch (subdirs[n]) - { - // stellaris - case "common": - case "events": - case "flags": - case "fonts": - case "gfx": - case "interface": - case "localisation": - case "localisation_synced": - case "map": - case "music": - case "prescripted_countries": - case "sound": - // hoi4 - case "history": - case "portraits": - Directory.Copy($"{moddirs[i]}{Путь.Разд}{{subdirs[n]}}", - $"{outdir}{Путь.Разд}{{modname}}{Путь.Разд}{{subdirs[n]}}", out List _conflicts, true); - conflicts.AddRange(_conflicts); - break; - } - } - if (Directory.Exists("_TEMP")) Directory.Delete("_TEMP"); - } - break; - case 1: - Log("b", $"found {moddirs.Length} mod dirs"); - for (short i = 0; i < moddirs.Length; i++) - { - Log("b", $"[{i + 1}/{moddirs.Length}] merging mod ", "c", $"{moddirs[i]}"); - Directory.Copy(moddirs[i], outdir, out List _conflicts, true); - conflicts.AddRange(_conflicts); - } - break; - case 2: - var hasher = new Hasher(); - var diff = new Dictionary(); - // добавление файлов из первой папки - List files = Directory.GetAllFiles(srcdir); - var mods = new List(); - for (short i = 0; i < files.Count; i++) - { - byte[] hash = hasher.HashFile(files[i]); - files[i] = files[i].Replace(srcdir, ""); - diff.Add(files[i], hash); - AddMod(files[i]); - } - // убирание совпадающих файлов - files = Directory.GetAllFiles(srcdir2); - for (short i = 0; i < files.Count; i++) - { - byte[] hash = hasher.HashFile(files[i]); - files[i] = files[i].Replace(srcdir2, ""); - if (diff.ContainsKey(files[i]) && diff[files[i]].HashToString() == hash.HashToString()) diff.Remove(files[i]); - else - { - diff.Add(srcdir2 + files[i], hash); - AddMod(files[i]); - } - } - void AddMod(string mod) - { - mod = mod.Remove(0, 1); - mod = mod.Remove(mod.IndexOf(Путь.Разд)); - if (!mods.Contains(mod)) mods.Add(mod); - } - // вывод результата - StringBuilder output = new StringBuilder(); - output.Append($"[{DateTime.Now}]\n\n"); - foreach (string mod in mods) - { - output.Append('\n').Append(mod).Append("\n{\n"); - foreach (string file in diff.Keys) - { - if (file.Contains(mod)) - { - output.Append('\t'); - if (!file.Contains(srcdir2)) output.Append(srcdir).Append(file).Append('\n'); - output.Append(file).Append('\n'); - } - } - output.Append("}\n"); - // не убирать, это полезное - if (output[output.Length - 4] == '{') output.Remove(output.Length - mod.Length - 5, mod.Length + 5); - } - // хоть называется outdir, в данном случае это путь к файлу - var _outStr = output.ToString(); - File.WriteAllText(outdir, _outStr); - Log("g", $"output written to {outdir}"); - break; - case 3: - Directory.Copy(srcdir, outdir, out List __conflicts, true); - conflicts.AddRange(__conflicts); - break; - } - // вывод конфликтующих файлов при -merge и -clear если такие есть - if (conflicts.Count > 0) - { - Log("r", $"found {conflicts.Count} conflicts:\n", - "m", conflicts.MergeToString("\n")); - } - } - catch (Exception ex) - { - Log("r", $"{ex.Message}\n{ex.StackTrace}"); - } - Console.ResetColor(); - } -} \ No newline at end of file diff --git a/ParadoxRusLocalisationGen.cs b/ParadoxRusLocalisationGen.cs deleted file mode 100644 index d8717bd..0000000 --- a/ParadoxRusLocalisationGen.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using DTLib; -using DTLib.Extensions; -using DTLib.Filesystem; -using DTLib.Logging; - -static class ParadoxRusLocalisationGen -{ - static ConsoleLogger logger = new ConsoleLogger("autoloc-logs", "merger"); - - static void Main(string[] args) - { - try - { - if (args.Length != 2 || args[0] == "/?" || args[0] == "help" || args[0] == "--help") - { - Console.WriteLine("[dir with eng localisation] [dir with rus localisation]"); - return; - } - - string engDir = args[0]; - string rusir = args[1]; - foreach (string enfFileName in Directory.GetAllFiles(engDir)) - { - string rusFileName = enfFileName - .Replace(engDir, rusir) - .Replace("l_english", "l_russian"); - if (!File.Exists(rusFileName)) - { - string text = File.ReadAllText(enfFileName) - .Replace("l_english:", "l_russian: "); - byte[] bytes = StringConverter.UTF8BOM.GetBytes(text); - File.WriteAllBytes(rusFileName, bytes); - logger.Log("g", $"file {rusFileName} created"); - } - else logger.Log("y", $"file {rusFileName} already exists"); - } - } - catch (Exception ex) - { - logger.Log("r", $"{ex.Message}\n{ex.StackTrace}"); - } - Console.ResetColor(); - } -} \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..c957f22 --- /dev/null +++ b/Program.cs @@ -0,0 +1,72 @@ +global using System; +global using System.Collections.Generic; +global using System.Diagnostics; +global using System.Text; +global using DTLib; +global using DTLib.Extensions; +global using DTLib.Filesystem; +global using DTLib.Logging; +using DTLib.Console; + +namespace ParadoxModMerger; + +public static class Program +{ + static ConsoleLogger logger = new($"logs", "main"); + static void Log(params string[] msg) => logger.Log(msg); + + static void Main(string[] args) + { + try + { + string outPath = "" ; + + new LaunchArgumentParser( + new LaunchArgument(new []{"o", "out"}, + "sets output path", + p => outPath=p, + "out_path", + 0), + new LaunchArgument(new []{"clear"}, + "Clear mod files and put them into separate dirs in output dir. Requires -o", + wdir=>Clear.ClearWorkshop(wdir, outPath), + "workshop_dir", + 1), + new LaunchArgument(new []{"diff"}, + "Compare mod files by hash", + p=>Diff.DiffMods(p), + "first_mod_directory;second_mod_directory", 1), + new LaunchArgument(new []{"merge-subdirs"}, + "Merge mods and show conflicts. Requires -o", + d => Merge.MergeAll(Directory.GetDirectories(d), outPath), + "dir_with_mods", + 1), + new LaunchArgument(new []{"merge-single"}, + "Merges one mod into output dir and shows conflicts. Requires -o", + mod=>Merge.MergeSingle(mod, outPath), + "mod_dir", + 1), + new LaunchArgument(new []{"gen-rus-locale"}, + "Creates l_russian copy of english locale in output directory. Requires -o", + eng=>Localisation.GenerateRussian(eng, outPath), + "english_locale_path", 1) + ).ParseAndHandle(args); + } + catch (LaunchArgumentParser.ExitAfterHelpException) + { } + catch (Exception ex) + { + Log("r", DTLib.Ben.Demystifier.ExceptionExtensions.ToStringDemystified(ex)); + } + Console.ResetColor(); + } + + + // вывод конфликтующих файлов при -merge и -clear если такие есть + public static void LogConflicts(List conflicts) + { + Log("w", $"found {conflicts.Count}"); + if(conflicts.Count>0) + Log("w","conflicts:\n", "m", conflicts.MergeToString("\n")); + } +} \ No newline at end of file diff --git a/paradox-mod-merger.csproj b/paradox-mod-merger.csproj index 25d93cf..28aa5b0 100644 --- a/paradox-mod-merger.csproj +++ b/paradox-mod-merger.csproj @@ -1,43 +1,19 @@  - - + - Debug - AnyCPU - {076BFCFF-1D3E-44FB-B434-73716B79A135} Exe - v4.8 + net7.0 + ParadoxModMerger + paradox-mod-merger 10 - - AnyCPU - none - true - bin\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - {e22e3abf-b364-46a0-814e-48e1035697cb} - DTLib - - - Always + PreserveNewest + + + + \ No newline at end of file diff --git a/paradox-mod-merger.sln b/paradox-mod-merger.sln index b42d3cf..a1c6954 100644 --- a/paradox-mod-merger.sln +++ b/paradox-mod-merger.sln @@ -5,40 +5,22 @@ VisualStudioVersion = 16.0.30907.101 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "paradox-mod-merger", "paradox-mod-merger.csproj", "{076BFCFF-1D3E-44FB-B434-73716B79A135}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib", "..\DTLib\DTLib\DTLib.csproj", "{E22E3ABF-B364-46A0-814E-48E1035697CB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "paradox-rus-localisation-gen", "paradox-rus-localisation-gen.csproj", "{839133EF-6481-498A-B70D-878404BB78A4}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution_files", "solution_files", "{8B5F0B90-06A8-48B6-897A-19A0A3474F51}" ProjectSection(SolutionItems) = preProject .gitignore = .gitignore + nuget.config = nuget.config EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Build|Any CPU = Build|Any CPU - Build|x64 = Build|x64 - Build|x86 = Build|x86 + Release|Any CPU = Release|Any CPU + Debug|Any CPU = Debug|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|Any CPU.ActiveCfg = Build|Any CPU - {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|Any CPU.Build.0 = Build|Any CPU - {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|x64.ActiveCfg = Build|Any CPU - {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|x64.Build.0 = Build|Any CPU - {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|x86.ActiveCfg = Build|Any CPU - {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|x86.Build.0 = Build|Any CPU - {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|Any CPU.ActiveCfg = Debug|Any CPU - {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|Any CPU.Build.0 = Debug|Any CPU - {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|x64.ActiveCfg = Debug|Any CPU - {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|x64.Build.0 = Debug|Any CPU - {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|x86.ActiveCfg = Debug|Any CPU - {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|x86.Build.0 = Debug|Any CPU - {839133EF-6481-498A-B70D-878404BB78A4}.Build|Any CPU.ActiveCfg = Build|Any CPU - {839133EF-6481-498A-B70D-878404BB78A4}.Build|Any CPU.Build.0 = Build|Any CPU - {839133EF-6481-498A-B70D-878404BB78A4}.Build|x64.ActiveCfg = Build|Any CPU - {839133EF-6481-498A-B70D-878404BB78A4}.Build|x64.Build.0 = Build|Any CPU - {839133EF-6481-498A-B70D-878404BB78A4}.Build|x86.ActiveCfg = Build|Any CPU - {839133EF-6481-498A-B70D-878404BB78A4}.Build|x86.Build.0 = Build|Any CPU + {076BFCFF-1D3E-44FB-B434-73716B79A135}.Release|Any CPU.ActiveCfg = Release|Any CPU + {076BFCFF-1D3E-44FB-B434-73716B79A135}.Release|Any CPU.Build.0 = Release|Any CPU + {076BFCFF-1D3E-44FB-B434-73716B79A135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {076BFCFF-1D3E-44FB-B434-73716B79A135}.Debug|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/paradox-rus-localisation-gen.csproj b/paradox-rus-localisation-gen.csproj index 38bcc6e..8ad7c2f 100644 --- a/paradox-rus-localisation-gen.csproj +++ b/paradox-rus-localisation-gen.csproj @@ -28,10 +28,4 @@ - - - {e22e3abf-b364-46a0-814e-48e1035697cb} - DTLib - - \ No newline at end of file