Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaClient/ClientSource/LuaCs/LuaCsUpdateChecker.cs
2022-04-29 14:00:53 -03:00

80 lines
3.1 KiB
C#

using System;
using System.IO;
using System.Linq;
namespace Barotrauma
{
static class LuaCsUpdateChecker
{
public static void Check()
{
if (!File.Exists(LuaCsSetup.VERSION_FILE)) { return; }
ContentPackage luaPackage = LuaCsSetup.GetPackage("Lua For Barotrauma");
string luaCsPath = Path.GetDirectoryName(luaPackage.Path);
if (luaPackage == null) { return; }
string clientVersion = File.ReadAllText(LuaCsSetup.VERSION_FILE);
string workshopVersion = luaPackage.ModVersion;
if (clientVersion == workshopVersion) { return; }
string additional = LuaCsSetup.GetPackage("CsForBarotrauma", false, true) == null ? "" : "Cs";
var msg = new GUIMessageBox($"Lua{additional} Update", $"Your Lua{additional} client version is different from the version found in the Lua{additional}ForBarotrauma workshop files. Do you want to update?\n\n Client Version: {clientVersion}\n Workshop Version: {workshopVersion}",
new LocalizedString[2] { TextManager.Get("Yes"), TextManager.Get("Cancel") });
msg.Buttons[0].OnClicked = (GUIButton button, object obj) =>
{
string[] filesToUpdate = new string[]
{
"Barotrauma.dll", "Barotrauma.deps.json",
"0harmony.dll", "Mono.Cecil.dll",
"Mono.Cecil.Mdb.dll", "Mono.Cecil.Pdb.dll",
"Mono.Cecil.Rocks.dll", "MonoMod.Common.dll",
"MoonSharp.Interpreter.dll",
"Microsoft.CodeAnalysis.dll", "Microsoft.CodeAnalysis.CSharp.dll",
"Microsoft.CodeAnalysis.CSharp.Scripting.dll", "Microsoft.CodeAnalysis.Scripting.dll",
"System.Reflection.Metadata.dll", "System.Collections.Immutable.dll",
"System.Runtime.CompilerServices.Unsafe.dll"
};
filesToUpdate = filesToUpdate.Concat(Directory.EnumerateFiles(luaCsPath, "*.dll", SearchOption.AllDirectories)
.Where(s => s.Contains("mscordaccore_amd64_amd64_4.")).Select(s => Path.GetFileName(s))).ToArray();
try
{
foreach (string file in filesToUpdate)
{
File.Move(file, file + ".todelete", true);
File.Copy(Path.Combine(luaCsPath, "Binary", file), file, true);
}
File.WriteAllText(LuaCsSetup.VERSION_FILE, workshopVersion);
}
catch (Exception e)
{
new GUIMessageBox("Failed", $"Failed to update, error: {e}");
msg.Close();
return true;
}
new GUIMessageBox("Restart", $"Lua{additional} updated! Restart your game to apply the changes.");
msg.Close();
return true;
};
msg.Buttons[1].OnClicked = (GUIButton button, object obj) =>
{
msg.Close();
return true;
};
}
}
}