diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index fbf800ae..73112d6e 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -209,6 +209,7 @@ namespace TShockAPI add(Permissions.cfg, WorldInfo, "world"); add(Permissions.savessi, SaveSSI, "savessi"); add(Permissions.savessi, OverrideSSI, "overridessi", "ossi"); + add(Permissions.xmas, ForceXmas, "forcexmas"); //add(null, TestCallbackCommand, "test"); } @@ -1140,6 +1141,38 @@ namespace TShockAPI } } + private static void ForceXmas(CommandArgs args) + { + if(args.Parameters.Count == 0) + { + args.Player.SendErrorMessage("Usage: /forcexmas [true/false]"); + args.Player.SendInfoMessage( + String.Format("The server is currently {0} force Christmas mode.", + (TShock.Config.ForceXmas ? "in" : "not in"))); + return; + } + + if(args.Parameters[0].ToLower() == "true") + { + TShock.Config.ForceXmas = true; + Main.checkXMas(); + } + else if(args.Parameters[0].ToLower() == "false") + { + TShock.Config.ForceXmas = false; + Main.checkXMas(); + } + else + { + args.Player.SendErrorMessage("Usage: /forcexmas [true/false]"); + return; + } + + args.Player.SendInfoMessage( + String.Format("The server is currently {0} force Christmas mode.", + (TShock.Config.ForceXmas ? "in" : "not in"))); + } + #endregion Player Management Commands #region Server Maintenence Commands diff --git a/TShockAPI/ConfigFile.cs b/TShockAPI/ConfigFile.cs index d7b8063d..8ad3a8d4 100644 --- a/TShockAPI/ConfigFile.cs +++ b/TShockAPI/ConfigFile.cs @@ -243,6 +243,8 @@ namespace TShockAPI [Description("Hide stat tracker console messages.")] public bool HideStatTrackerDebugMessages = true; + [Description("Force Christmas only events to occur all year.")] public bool ForceXmas = false; + /// /// Reads a configuration file from a given path /// diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs index f80ed598..f7c1b2f1 100644 --- a/TShockAPI/Permissions.cs +++ b/TShockAPI/Permissions.cs @@ -169,6 +169,8 @@ namespace TShockAPI [Description("User can use rest api calls.")] public static readonly string restapi; + [Description("User can force the server to Christmas mode.")] public static readonly string xmas; + static Permissions() { foreach (var field in typeof (Permissions).GetFields()) diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 5a370f1c..d1ccc3c4 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -223,6 +223,7 @@ namespace TShockAPI ProjectileHooks.SetDefaults += OnProjectileSetDefaults; WorldHooks.StartHardMode += OnStartHardMode; WorldHooks.SaveWorld += SaveManager.Instance.OnSaveWorld; + WorldHooks.ChristmasCheck += OnXmasCheck; NetHooks.NameCollision += NetHooks_NameCollision; GetDataHandlers.InitGetDataHandler(); @@ -323,6 +324,7 @@ namespace TShockAPI ProjectileHooks.SetDefaults -= OnProjectileSetDefaults; WorldHooks.StartHardMode -= OnStartHardMode; WorldHooks.SaveWorld -= SaveManager.Instance.OnSaveWorld; + WorldHooks.ChristmasCheck -= OnXmasCheck; NetHooks.NameCollision -= NetHooks_NameCollision; if (File.Exists(Path.Combine(SavePath, "tshock.pid"))) @@ -367,6 +369,17 @@ namespace TShockAPI return; } + void OnXmasCheck(ChristmasCheckEventArgs args) + { + if (args.Handled) + return; + + if(Config.ForceXmas) + { + args.Xmas = true; + args.Handled = true; + } + } /// /// Handles exceptions that we didn't catch or that Red fucked up /// diff --git a/TerrariaServerBins/TerrariaServer.exe b/TerrariaServerBins/TerrariaServer.exe index 49910fb8..8bd9ba49 100644 Binary files a/TerrariaServerBins/TerrariaServer.exe and b/TerrariaServerBins/TerrariaServer.exe differ