From e8934029ae0cbb35d611bbfd7349ff83dbbe0d7b Mon Sep 17 00:00:00 2001 From: CWX Date: Thu, 19 May 2022 14:41:44 +0100 Subject: [PATCH] installer update bump --- Aki.Core/Program.cs | 174 ++++++++---------- Aki.Helper/FileHelper.cs | 145 +++------------ Aki.Helper/LogHelper.cs | 3 +- Aki.Helper/PreCheckHelper.cs | 76 ++++---- Aki.Helper/ProcessHelper.cs | 94 +++++++++- Aki.Helper/SpectreHelper.cs | 13 +- Aki.Helper/StringHelper.cs | 18 -- Aki.Helper/ZipHelper.cs | 11 +- Aki.Locales/CN.json | 3 + Aki.Locales/DE.json | 3 + Aki.Locales/EN.json | 3 + Aki.Locales/FR.json | 3 + Aki.Locales/KR.json | 3 + Aki.Locales/RU.json | 3 + .../PublishProfiles/FolderProfile.pubxml.user | 2 +- SPT_AKI Installer.csproj | 4 - 16 files changed, 250 insertions(+), 308 deletions(-) delete mode 100644 Aki.Helper/StringHelper.cs create mode 100644 Aki.Locales/CN.json create mode 100644 Aki.Locales/DE.json create mode 100644 Aki.Locales/EN.json create mode 100644 Aki.Locales/FR.json create mode 100644 Aki.Locales/KR.json create mode 100644 Aki.Locales/RU.json diff --git a/Aki.Core/Program.cs b/Aki.Core/Program.cs index bfc5b42..cfbbc30 100644 --- a/Aki.Core/Program.cs +++ b/Aki.Core/Program.cs @@ -1,97 +1,81 @@ -using System.IO; -using System; -using System.Diagnostics; -using System.Threading; +using Spectre.Console; using SPT_AKI_Installer.Aki.Helper; -using Spectre.Console; +using System; +using System.IO; namespace SPT_AKI_Installer.Aki.Core { //TODO: - // delete patcher zip and aki zip // locales, language selection - // PreCheckHelper.AkiCheck is currently hardcoded for 2.3.1 - // get waffle to add exit code on patcher - // remove all user input other than errors - - //comments: - // static: FileHelper, ZipHelper, LogHelper - // nonStatic: ProcessHelper, PreCheckHelper, StringHelper + // make the installer download relevant version of patcher and aki based on game version if possible public static class SPTinstaller { - static void Main(string[] args) + static void Main() { - SpectreHelper spectreHelper = new SpectreHelper(); - spectreHelper.Figlet("SPT-AKI INSTALLER"); - string targetPath = Environment.CurrentDirectory; - PreCheckHelper preCheckHelper = new(); -//#if DEBUG +#if DEBUG targetPath = @"D:\install"; -//#endif - preCheckHelper.GameCheck(out string gamePath); +#endif + SpectreHelper.Figlet("SPT-AKI INSTALLER", Color.Yellow); + PreCheckHelper.GameCheck(out string originalGamePath); - if (preCheckHelper.PatcherCheck(gamePath,targetPath, out string patchRef)) + if (originalGamePath == targetPath) { - LogHelper.Info($"Correct Zip for Patcher Present: {patchRef}"); - } - else - { - LogHelper.Error("Patcher zip is Incorrect or missing"); - LogHelper.Error("Press enter to close the app"); - Console.ReadKey(); - Environment.Exit(0); + CloseApp("Installer is located in EFT's original directory! \n Please move the installer to a seperate folder as per the guide!"); } - if (preCheckHelper.AkiCheck(targetPath,out string akiRef)) + var checkForExistingFiles = FileHelper.FindFile(targetPath, "EscapeFromTarkov.exe"); + //Console.WriteLine(checkForExistingFiles ?? "null"); + if (checkForExistingFiles != null) { - LogHelper.Info($"Correct Zip for SPT-AKI Present: {akiRef}"); + CloseApp("Installer is located in a Folder that has existing Game Files \n Please make sure the installer is in a fresh folder as per the guide"); } - else + //Console.ReadKey(); + + PreCheckHelper.PatcherZipCheck(originalGamePath, targetPath, out string patcherZipPath); + PreCheckHelper.AkiZipCheck(targetPath, out string akiZipPath); + + if (patcherZipPath == null && PreCheckHelper.PatcherNeededCheck()) { - LogHelper.Error("SPT-AKI zip is Incorrect or missing"); - LogHelper.Error("Press enter to close the app"); - Console.ReadKey(); - Environment.Exit(0); + CloseApp("Game Version needs to be patched to match Aki Version \n but Patcher is missing or the wrong version \n Press enter to close the app"); } - // checks for input to copy game files - LogHelper.User("PLEASE PRESS ENTER TO COPY GAME FILES!"); - Console.ReadKey(); + if (akiZipPath == null) + { + CloseApp("Aki's Zip could not be found \n Press enter to close the app"); + } - GameCopy(gamePath, targetPath,patchRef, akiRef); + if (PreCheckHelper.PatcherNeededCheck() && !PreCheckHelper.PatcherAkiCheck()) + { + CloseApp("Patcher does not match downgraded version that Aki Requires \n Press enter to close the app"); + } + + LogHelper.Info("Copying game files"); + + GameCopy(originalGamePath, targetPath); + if (PreCheckHelper.PatcherNeededCheck()) + { + PatcherCopy(targetPath, patcherZipPath); + PatcherProcess(targetPath); + } + + AkiInstall(targetPath, akiZipPath); + DeleteZip(patcherZipPath, akiZipPath); } - /// - /// copies and pastes EFT to AKI installer test folder - /// - /// - /// - static void GameCopy(string gamePath, string targetPath, string patchRef, string akiRef) + static void GameCopy(string originalGamePath, string targetPath) { -//#if !DEBUG - FileHelper.CopyDirectory(gamePath, targetPath, true); -//#endif - LogHelper.User("GAME HAS BEEN COPIED, PRESS ENTER TO EXTRACT PATCHER!"); - Console.ReadKey(); - - PatcherCopy(gamePath, targetPath,patchRef, akiRef); + FileHelper.CopyDirectory(originalGamePath, targetPath, true); + LogHelper.Info("Game has been copied, Extracting patcher"); } - /// - /// extracts patcher and moves out inner folders - /// - /// - /// - /// - /// - static void PatcherCopy(string gamePath, string targetPath, string patchRef, string akiRef) + static void PatcherCopy(string targetPath, string patcherZipPath) { -//#if !DEBUG - ZipHelper.Decompress(patchRef, targetPath); - FileHelper.FindFolder(patchRef, targetPath, out DirectoryInfo dir); + ZipHelper.Decompress(patcherZipPath, targetPath); + FileHelper.FindFolder(patcherZipPath, targetPath, out DirectoryInfo dir); FileHelper.CopyDirectory(dir.FullName, targetPath, true); + if (dir.Exists) { dir.Delete(true); @@ -102,47 +86,39 @@ namespace SPT_AKI_Installer.Aki.Core LogHelper.Error($"please delete folder called {dir.FullName}"); } } -//#endif - PatcherProcessStart(targetPath, akiRef); } - /// - /// starts patcher and checks for user input to exit patcher and proceed - /// - /// - /// - static void PatcherProcessStart(string targetPath, string akiRef) + static void PatcherProcess(string targetPath) { -//#if !DEBUG - LogHelper.Info("PATCHER HAS BEEN EXTRACTED, STARTING PATCHER!"); + LogHelper.Info("patcher has been extracted, starting patcher"); ProcessHelper patcherProcess = new(); patcherProcess.StartProcess(Path.Join(targetPath + "/patcher.exe"), targetPath); -//#endif - LogHelper.User("PATCHER HAS BEEN STARTED, TYPE YES ONCE THE PATCHER IS COMPLETE!"); - var complete = Console.ReadLine(); - // waiting for user to enter "yes", if something else is entered do while loop - while (!string.Equals(complete, "yes", StringComparison.OrdinalIgnoreCase)) - { - LogHelper.Warning("YOU DIDNT TYPE YES, IF SOMETHING WENT WRONG MAKE A SUPPORT THREAD AND CLOSE THIS APP"); - LogHelper.User("IF IT DID FINISH TYPE YES NOW"); - complete = Console.ReadLine(); - } + FileHelper.DeleteFiles(Path.Join(targetPath, "/patcher.exe")); + } - // if user input "yes" kill patcher process, delete patcher.exe, extract aki zip - if (string.Equals(complete, "yes", StringComparison.OrdinalIgnoreCase)) - { -//#if !DEBUG - patcherProcess.EndProcess(); - Thread.Sleep(1000); - FileHelper.DeleteFile("file", targetPath + "/patcher.exe"); - ZipHelper.Decompress(akiRef, targetPath); -//#endif - LogHelper.Info("AKI HAS BEEN EXTRACTED, RUN THE SERVER AND WAIT TILL YOU SEE HAPPY SERVER THEN LAUNCHER AND ENJOY!"); - LogHelper.User("PRESS ENTER TO CLOSE THE APP"); - Console.ReadKey(); - Environment.Exit(0); - } + static void AkiInstall(string targetPath, string akiZipPath) + { + ZipHelper.Decompress(akiZipPath, targetPath); + LogHelper.Info("Aki has been extracted"); + } + + static void DeleteZip(string patcherZipPath, string akiZipPath) + { + FileHelper.DeleteFiles(patcherZipPath, false); + FileHelper.DeleteFiles(akiZipPath, false); + + LogHelper.User("Removed Zips, Press enter to close the installer, you can then delete the installer"); + LogHelper.User("ENJOY SPT-AKI!"); + Console.ReadKey(); + Environment.Exit(0); + } + + static void CloseApp(string text) + { + LogHelper.Warning(text); + Console.ReadKey(); + Environment.Exit(0); } } } \ No newline at end of file diff --git a/Aki.Helper/FileHelper.cs b/Aki.Helper/FileHelper.cs index 9f9c2df..d4caeec 100644 --- a/Aki.Helper/FileHelper.cs +++ b/Aki.Helper/FileHelper.cs @@ -1,143 +1,50 @@ using System; using System.IO; using Spectre.Console; -using System.Threading; namespace SPT_AKI_Installer.Aki.Helper { public static class FileHelper { - public static int totalFiles; - /// - /// CopyDirectory will use old path and copy to new path and - /// asks if inner files/folders should be included - /// - /// - public static void CopyDirectory(string oldDir, string newDir, bool recursive) + public static void CopyDirectory(string oldDir, string newDir, bool overwrite) { + int totalFiles = Directory.GetFiles(oldDir, "*.*", SearchOption.AllDirectories).Length; + AnsiConsole.Progress().Columns( + new PercentageColumn(), new TaskDescriptionColumn(), - new SpinnerColumn(), - new ElapsedTimeColumn() + new ProgressBarColumn(), + new ElapsedTimeColumn(), + new SpinnerColumn() ).Start((ProgressContext context) => { - var dir = new DirectoryInfo(oldDir); + var task = context.AddTask("Copying Files", true, totalFiles); - if (!dir.Exists) - throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}"); - - DirectoryInfo[] dirs = dir.GetDirectories(); - - foreach (FileInfo f in dir.GetFiles()) + foreach (string dirPath in Directory.GetDirectories(oldDir, "*", SearchOption.AllDirectories)) { - totalFiles++; - } - foreach (DirectoryInfo subD in dirs) - { - foreach (FileInfo f in subD.GetFiles()) - { - totalFiles++; - } + Directory.CreateDirectory(dirPath.Replace(oldDir, newDir)); } - var task = context.AddTask("Copying files: ", true, totalFiles); - Directory.CreateDirectory(newDir); - - foreach (FileInfo file in dir.GetFiles()) + foreach (string newPath in Directory.GetFiles(oldDir, "*.*", SearchOption.AllDirectories)) { - string targetFilePath = Path.Combine(newDir, file.Name); - file.CopyTo(targetFilePath, true); - } - - if (recursive) - { - foreach (DirectoryInfo subDir in dirs) - { - string newDestinationDir = Path.Combine(newDir, subDir.Name); - AltCopyDirectory(subDir.FullName, newDestinationDir, true); - } + File.Copy(newPath, newPath.Replace(oldDir, newDir), overwrite); + task.Increment(1); } }); - - //var dir = new DirectoryInfo(oldDir); - - //if (!dir.Exists) - // throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}"); - - //DirectoryInfo[] dirs = dir.GetDirectories(); - - //Directory.CreateDirectory(newDir); - - //foreach (FileInfo file in dir.GetFiles()) - //{ - // string targetFilePath = Path.Combine(newDir, file.Name); - // file.CopyTo(targetFilePath, true); - //} - - //if (recursive) - //{ - // foreach (DirectoryInfo subDir in dirs) - // { - // string newDestinationDir = Path.Combine(newDir, subDir.Name); - // CopyDirectory(subDir.FullName, newDestinationDir, true); - // } - //} } - public static void AltCopyDirectory(string oldDir, string newDir, bool recursive) + public static void DeleteFiles(string filePath, bool allFolders = false) { - var dir = new DirectoryInfo(oldDir); - - if (!dir.Exists) - throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}"); - - DirectoryInfo[] dirs = dir.GetDirectories(); - - Directory.CreateDirectory(newDir); - - foreach (FileInfo file in dir.GetFiles()) - { - string targetFilePath = Path.Combine(newDir, file.Name); - file.CopyTo(targetFilePath, true); - } - - if (recursive) - { - foreach (DirectoryInfo subDir in dirs) - { - string newDestinationDir = Path.Combine(newDir, subDir.Name); - AltCopyDirectory(subDir.FullName, newDestinationDir, true); - } - } - } - - /// - /// DeleteFiles will use a type to look for, the path - /// and if all inner files/folders should be included - /// - /// - /// Types are "file" or "folder" as a string - /// - public static void DeleteFile(string type, string filePath, bool allFolders = false) - { - // type = "file" or "folder" - if (string.Equals(type, "file", StringComparison.OrdinalIgnoreCase)) + if (filePath.Contains('.')) { File.Delete(filePath); } - - if (string.Equals(type, "folder", StringComparison.OrdinalIgnoreCase)) + else { Directory.Delete(filePath, allFolders); } } - /// - /// finds file based on Path and File name - /// - /// - /// - /// String or null public static string FindFile(string path, string name) { string[] filePaths = Directory.GetFiles(path); @@ -151,12 +58,20 @@ namespace SPT_AKI_Installer.Aki.Helper return null; } - /// - /// Finds folder with name supplied, out = directory for extracted patch folder - /// - /// - /// - /// bool + public static string FindFile(string path, string name, string altName) + { + string[] filePaths = Directory.GetFiles(path); + foreach (string file in filePaths) + { + if (file.Contains(name, StringComparison.OrdinalIgnoreCase) && + file.Contains(altName, StringComparison.OrdinalIgnoreCase)) + { + return file; + } + } + return null; + } + public static bool FindFolder(string patchRef, string targetPath, out DirectoryInfo dir) { var patchInfo = new FileInfo(patchRef); diff --git a/Aki.Helper/LogHelper.cs b/Aki.Helper/LogHelper.cs index 7bf6bff..2749774 100644 --- a/Aki.Helper/LogHelper.cs +++ b/Aki.Helper/LogHelper.cs @@ -1,5 +1,4 @@ -using System; -using Spectre.Console; +using Spectre.Console; namespace SPT_AKI_Installer.Aki.Helper { diff --git a/Aki.Helper/PreCheckHelper.cs b/Aki.Helper/PreCheckHelper.cs index dff0f9a..30f461d 100644 --- a/Aki.Helper/PreCheckHelper.cs +++ b/Aki.Helper/PreCheckHelper.cs @@ -6,15 +6,16 @@ using System.Diagnostics; namespace SPT_AKI_Installer.Aki.Helper { - public class PreCheckHelper + public static class PreCheckHelper { private const string registryInstall = @"Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\EscapeFromTarkov"; + private static string gameVersion; + private static string patchZip; + private static string patchToVersion; + private static string akiZip; + private static string akiVersion; - /// - /// gets the original EFT game path - /// - /// Path or null - public string DetectOriginalGamePath() + public static string DetectOriginalGamePath() { // We can't detect the installed path on non-Windows if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) @@ -26,11 +27,7 @@ namespace SPT_AKI_Installer.Aki.Helper return info?.DirectoryName; } - /// - /// checks path is not null, out = gamePath - /// - /// - public void GameCheck(out string gamePath) + public static void GameCheck(out string gamePath) { string Path = DetectOriginalGamePath(); @@ -44,48 +41,39 @@ namespace SPT_AKI_Installer.Aki.Helper gamePath = Path; } - /// - /// Checks version of EFT installed, Then checks that matches the Zip, out = patch version number 0.12.12.*here* - /// - /// - /// - /// - /// bool - public bool PatcherCheck(string gamePath,string targetPath, out string patchRef) + public static void PatcherZipCheck(string gamePath, string targetPath, out string patcherZipPath) { - StringHelper stringHelper = new StringHelper(); - FileVersionInfo version = FileVersionInfo.GetVersionInfo(Path.Join(gamePath + "/EscapeFromTarkov.exe")); + // example patch name - Patcher.12.12.15.17861.to.12.12.15.17349.zip + gameVersion = FileVersionInfo.GetVersionInfo(Path.Join(gamePath + "/EscapeFromTarkov.exe")).ProductVersion.Replace('-', '.').Split('.')[^2]; + patchZip = FileHelper.FindFile(targetPath, gameVersion, "Patcher"); + patchToVersion = patchZip?.Split('.')[^2]; + patcherZipPath = patchZip; + } - string versionCheck = stringHelper.Splitter(version.ProductVersion, '-', '.', 2); - LogHelper.Info($"GAME VERSION IS: {version.ProductVersion}"); - string patcherRef = FileHelper.FindFile(targetPath, versionCheck); - - if (patcherRef != null) - { - patchRef = patcherRef; - return true; - } - patchRef = null; - return false; + public static void AkiZipCheck(string targetPath, out string akiZipPath) + { + // example aki name - RELEASE-SPT-2.3.1-17349.zip + akiZip = FileHelper.FindFile(targetPath, "SPT", "RELEASE"); + akiVersion = akiZip?.Replace('-', '.').Split('.')[^2]; + akiZipPath = akiZip; } /// - /// Checks Aki Zip is 2.3.1 currently + /// will return true if Patcher version at the end of the zip matches aki zip version /// - /// - /// /// bool - public bool AkiCheck(string targetPath,out string akiRef) + public static bool PatcherAkiCheck() { - string aki = FileHelper.FindFile(targetPath, "2.3.1"); + return patchToVersion == akiVersion; + } - if (aki != null) - { - akiRef = aki; - return true; - } - akiRef = null; - return false; + /// + /// will return true if game version is not equal to aki zip version (patcher is needed) + /// + /// bool + public static bool PatcherNeededCheck() + { + return gameVersion != akiVersion; } } } diff --git a/Aki.Helper/ProcessHelper.cs b/Aki.Helper/ProcessHelper.cs index 7a27993..3832519 100644 --- a/Aki.Helper/ProcessHelper.cs +++ b/Aki.Helper/ProcessHelper.cs @@ -1,29 +1,105 @@ using System.Diagnostics; +using System.Threading; +using System; namespace SPT_AKI_Installer.Aki.Helper { public class ProcessHelper { private Process _process; + private string _exeDir; + private string _workingDir; - /// - /// Starts process with path and file name including include .exe, - /// sets working directory too - /// public void StartProcess(string exeDir, string workingDir) { + _exeDir = exeDir; + _workingDir = workingDir; _process = new Process(); _process.StartInfo.FileName = exeDir; _process.StartInfo.WorkingDirectory = workingDir; + _process.EnableRaisingEvents = true; + _process.StartInfo.Arguments = "autoclose"; _process.Start(); + + _process.WaitForExit(); + ExitCodeCheck(_process.ExitCode); } - /// - /// Kills the Process - /// - public void EndProcess() + public void ExitCodeCheck(int exitCode) { - _process.Kill(); + /* + public enum PatcherExitCode + { + ProgramClosed = 0, + Success = 10, + EftExeNotFound = 11, + NoPatchFolder = 12, + MissingFile = 13, + MissingDir = 14 + } + */ + + switch (exitCode) + { + case 0: + LogHelper.Warning("Patcher was closed before completing!"); + LogHelper.Warning("If you need to start the patcher again, type RETRY"); + LogHelper.Warning("If you want to close the installer, type CLOSE"); + var response = Console.ReadLine(); + + while (!string.Equals(response, "retry", StringComparison.OrdinalIgnoreCase) || + !string.Equals(response, "close", StringComparison.OrdinalIgnoreCase)) + { + LogHelper.Warning("answer needs to be retry or close"); + LogHelper.Warning("Try Again!"); + } + if (string.Equals(response, "retry", StringComparison.OrdinalIgnoreCase)) + { + StartProcess(_exeDir, _workingDir); + break; + } + if (string.Equals(response, "close", StringComparison.OrdinalIgnoreCase)) + { + Environment.Exit(0); + break; + } + break; + + case 10: + LogHelper.User("Patcher Finished Successfully, extracting Aki"); + break; + + case 11: + LogHelper.Error("EscapeFromTarkov.exe is missing from the install Path"); + LogHelper.Warning("Check your game files in their original location are complete!"); + LogHelper.Warning("Closing the installer in 20 seconds"); + Thread.Sleep(20000); + Environment.Exit(0); + break; + + case 12: + LogHelper.Error("Patchers Folder called 'Aki_Patches' missing"); + LogHelper.Warning("Closing the installer in 20 seconds"); + Thread.Sleep(20000); + Environment.Exit(0); + break; + + case 13: + LogHelper.Error("EFT files was missing a Vital file to continue"); + LogHelper.Warning("please reinstall EFT through the BSG launcher"); + LogHelper.Warning("Closing the installer in 20 seconds"); + Thread.Sleep(20000); + Environment.Exit(0); + break; + + case 14: + LogHelper.Error("Patcher Reported Missing Folder"); + // check with Waffle what this one is + LogHelper.Warning("Closing the installer in 20 seconds"); + Thread.Sleep(20000); + Environment.Exit(0); + break; + } } } } diff --git a/Aki.Helper/SpectreHelper.cs b/Aki.Helper/SpectreHelper.cs index 6d74f03..152cbe9 100644 --- a/Aki.Helper/SpectreHelper.cs +++ b/Aki.Helper/SpectreHelper.cs @@ -1,20 +1,15 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Spectre.Console; +using Spectre.Console; namespace SPT_AKI_Installer.Aki.Helper { - public class SpectreHelper + public static class SpectreHelper { - public void Figlet(string text) + public static void Figlet(string text, Color color) { AnsiConsole.Write( new FigletText(text) .Centered() - .Color(Color.Yellow)); + .Color(color)); } } } diff --git a/Aki.Helper/StringHelper.cs b/Aki.Helper/StringHelper.cs deleted file mode 100644 index d2f0873..0000000 --- a/Aki.Helper/StringHelper.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace SPT_AKI_Installer.Aki.Helper -{ - public class StringHelper - { - /// - /// string to split, changes oldChar to newChar - /// - /// - /// - /// - /// - /// returns the string at a position using amount - public string Splitter(string toSplit, char oldChar, char newChar, int amount) - { - return toSplit.Replace(oldChar, newChar).Split(newChar)[^amount]; - } - } -} diff --git a/Aki.Helper/ZipHelper.cs b/Aki.Helper/ZipHelper.cs index da13856..b7a0eed 100644 --- a/Aki.Helper/ZipHelper.cs +++ b/Aki.Helper/ZipHelper.cs @@ -8,22 +8,19 @@ namespace SPT_AKI_Installer.Aki.Helper { public static class ZipHelper { - /// - /// will extract Zips in LZMA compression format, using Zips path - /// to new path - /// public static void Decompress(string ArchivePath, string OutputFolderPath) { AnsiConsole.Progress().Columns( - new PercentageColumn(), + new PercentageColumn(), new TaskDescriptionColumn(), new ProgressBarColumn(), - new ElapsedTimeColumn() + new ElapsedTimeColumn(), + new SpinnerColumn() ).Start((ProgressContext context) => { using var archive = ZipArchive.Open(ArchivePath); var entries = archive.Entries.Where(entry => !entry.IsDirectory); - var task = context.AddTask("Extracting", true, entries.Count()); + var task = context.AddTask("Extracting Files", true, entries.Count()); foreach (var entry in entries) { diff --git a/Aki.Locales/CN.json b/Aki.Locales/CN.json new file mode 100644 index 0000000..077404a --- /dev/null +++ b/Aki.Locales/CN.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/Aki.Locales/DE.json b/Aki.Locales/DE.json new file mode 100644 index 0000000..077404a --- /dev/null +++ b/Aki.Locales/DE.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/Aki.Locales/EN.json b/Aki.Locales/EN.json new file mode 100644 index 0000000..0e0dcd2 --- /dev/null +++ b/Aki.Locales/EN.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/Aki.Locales/FR.json b/Aki.Locales/FR.json new file mode 100644 index 0000000..077404a --- /dev/null +++ b/Aki.Locales/FR.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/Aki.Locales/KR.json b/Aki.Locales/KR.json new file mode 100644 index 0000000..077404a --- /dev/null +++ b/Aki.Locales/KR.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/Aki.Locales/RU.json b/Aki.Locales/RU.json new file mode 100644 index 0000000..077404a --- /dev/null +++ b/Aki.Locales/RU.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/Properties/PublishProfiles/FolderProfile.pubxml.user b/Properties/PublishProfiles/FolderProfile.pubxml.user index 7f2a7cd..95a17bc 100644 --- a/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -4,6 +4,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - True|2022-05-14T00:56:09.8410037Z;True|2022-05-14T00:54:24.0683990+01:00;True|2022-05-14T00:53:04.7105427+01:00;True|2022-05-14T00:51:00.6280767+01:00;True|2022-05-14T00:49:19.4630888+01:00;True|2022-05-14T00:47:59.2166156+01:00; + True|2022-05-17T00:06:33.6758525Z;True|2022-05-14T01:56:09.8410037+01:00;True|2022-05-14T00:54:24.0683990+01:00;True|2022-05-14T00:53:04.7105427+01:00;True|2022-05-14T00:51:00.6280767+01:00;True|2022-05-14T00:49:19.4630888+01:00;True|2022-05-14T00:47:59.2166156+01:00; \ No newline at end of file diff --git a/SPT_AKI Installer.csproj b/SPT_AKI Installer.csproj index 39bb286..0c22f2b 100644 --- a/SPT_AKI Installer.csproj +++ b/SPT_AKI Installer.csproj @@ -11,10 +11,6 @@ - - - -