0
0
Fork 0
mirror of https://github.com/Sanae6/SmoOnlineServer.git synced 2024-11-16 16:35:11 +00:00
SmoOnlineServer/Server/Settings.cs

90 lines
3 KiB
C#
Raw Normal View History

using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using Shared;
namespace Server;
public class Settings {
public static Settings Instance = new Settings();
private static readonly Logger Logger = new Logger("Settings");
public static Action? LoadHandler;
static Settings() {
LoadSettings();
}
public static void LoadSettings() {
if (File.Exists("settings.json")) {
string text = File.ReadAllText("settings.json");
try {
Instance = JsonConvert.DeserializeObject<Settings>(text, new StringEnumConverter(new CamelCaseNamingStrategy())) ?? Instance;
Logger.Info("Loaded settings from settings.json");
}
catch (Exception e) {
Logger.Warn($"Failed to load settings.json: {e}");
}
}
SaveSettings();
LoadHandler?.Invoke();
}
public static void SaveSettings(bool silent = false) {
try {
File.WriteAllText("settings.json", JsonConvert.SerializeObject(Instance, Formatting.Indented, new StringEnumConverter(new CamelCaseNamingStrategy())));
if (!silent) { Logger.Info("Saved settings to settings.json"); }
}
catch (Exception e) {
Logger.Error($"Failed to save settings.json {e}");
}
}
public ServerTable Server { get; set; } = new ServerTable();
public FlipTable Flip { get; set; } = new FlipTable();
public ScenarioTable Scenario { get; set; } = new ScenarioTable();
public BanListTable BanList { get; set; } = new BanListTable();
public DiscordTable Discord { get; set; } = new DiscordTable();
2022-08-21 05:31:31 +00:00
public ShineTable Shines { get; set; } = new ShineTable();
2022-07-22 16:39:41 +00:00
public PersistShinesTable PersistShines { get; set; } = new PersistShinesTable();
public class ServerTable {
public string Address { get; set; } = IPAddress.Any.ToString();
public ushort Port { get; set; } = 1027;
2022-05-08 22:04:57 +00:00
public ushort MaxPlayers { get; set; } = 8;
}
public class ScenarioTable {
public bool MergeEnabled { get; set; } = false;
}
public class BanListTable {
2022-03-15 21:02:27 +00:00
public bool Enabled { get; set; } = false;
2022-05-31 21:48:57 +00:00
public List<Guid> Players { get; set; } = new List<Guid>();
public List<string> IpAddresses { get; set; } = new List<string>();
2022-03-15 21:02:27 +00:00
}
public class FlipTable {
public bool Enabled { get; set; } = true;
2022-05-31 21:48:57 +00:00
public List<Guid> Players { get; set; } = new List<Guid>();
public FlipOptions Pov { get; set; } = FlipOptions.Both;
}
public class DiscordTable {
public string? Token { get; set; }
public string Prefix { get; set; } = "$";
public string? CommandChannel { get; set; }
public string? LogChannel { get; set; }
}
2022-07-22 16:39:41 +00:00
2022-08-21 05:31:31 +00:00
public class ShineTable {
public bool Enabled { get; set; } = true;
}
public class PersistShinesTable
{
public bool Enabled { get; set; } = false;
public string Filename { get; set; } = "./moons.json";
2022-07-22 16:39:41 +00:00
}
}