From 33fdd69e15a9225dfa31b11b7d03cb0a59af57fc Mon Sep 17 00:00:00 2001 From: TheUbMunster <66451362+TheUbMunster@users.noreply.github.com> Date: Wed, 27 Jul 2022 14:52:33 -0600 Subject: [PATCH] readded persisten shinies --- Server/Program.cs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/Server/Program.cs b/Server/Program.cs index ecf595c..6f85072 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -2,6 +2,7 @@ using System.Net; using System.Numerics; using System.Text; +using System.Text.Json; using Server; using Shared; using Shared.Packet.Packets; @@ -15,6 +16,47 @@ Logger consoleLogger = new Logger("Console"); DiscordBot bot = new DiscordBot(); await bot.Run(); +async Task PersistShines() +{ + if (!Settings.Instance.PersistShines.Enabled) + { + return; + } + + try + { + string shineJson = JsonSerializer.Serialize(shineBag); + await File.WriteAllTextAsync(Settings.Instance.PersistShines.Filename, shineJson); + } + catch (Exception ex) + { + consoleLogger.Error(ex); + } +} + +async Task LoadShines() +{ + if (!Settings.Instance.PersistShines.Enabled) + { + return; + } + + try + { + string shineJson = await File.ReadAllTextAsync(Settings.Instance.PersistShines.Filename); + var loadedShines = JsonSerializer.Deserialize>(shineJson); + + if (loadedShines is not null) shineBag = loadedShines; + } + catch (Exception ex) + { + consoleLogger.Error(ex); + } +} + +// Load shines table from file +await LoadShines(); + server.ClientJoined += (c, _) => { if (Settings.Instance.BanList.Enabled && (Settings.Instance.BanList.Players.Contains(c.Id) @@ -52,6 +94,7 @@ async Task ClientSyncShineBag(Client client) { async void SyncShineBag() { try { + await PersistShines(); await Parallel.ForEachAsync(server.Clients.ToArray(), async (client, _) => await ClientSyncShineBag(client)); } catch { // errors that can happen shines change will crash the server :) @@ -78,6 +121,9 @@ server.PacketHandler = (c, p) => { c.Metadata["speedrun"] = true; ((ConcurrentBag) (c.Metadata["shineSync"] ??= new ConcurrentBag())).Clear(); shineBag.Clear(); + Task.Run(async () => { + await PersistShines(); + }); c.Logger.Info("Entered Cap on new save, preventing moon sync until Cascade"); break; case "WaterfallWorldHomeStage":