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