diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 629c483c..bb693c8b 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -16,22 +16,14 @@ namespace TShockAPI { public static TSPlayer[] players = new TSPlayer[Main.maxPlayers]; - public static long updateEpoch = 0; - - public static bool serverOutOfDate = false; - public static string saveDir = "./tshock/"; public static Version VersionNum = new Version(2, 0, 0, 1); public static string VersionCodename = "UnrealIRCd ftw (irc.shankshock.com #terraria)"; - public static bool notifiedAdminOfVersionCheck; - private static bool[] BlacklistTiles; - public static bool updateCmd; - public static BanManager Bans = new BanManager(Path.Combine(saveDir, "bans.txt")); public override Version Version @@ -479,7 +471,6 @@ namespace TShockAPI { StartInvasion(); } - ShowUpdateReminder(who); e.Handled = true; } @@ -584,11 +575,7 @@ namespace TShockAPI private void OnUpdate(GameTime time) { - long currentEpoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000)/10000000; - if (currentEpoch > updateEpoch) - { - CheckForUpdates(); - } + UpdateManager.UpdateProcedureCheck(); for (int i = 0; i < Main.maxPlayers; i++) { if (Main.player[i].active == false) @@ -623,74 +610,6 @@ namespace TShockAPI * Useful stuff: * */ - public static void CheckForUpdates() - { - if (serverOutOfDate) - return; - WebClient client = new WebClient(); - client.Headers.Add("user-agent", - "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"); - try - { - string updateString = client.DownloadString("http://shankshock.com/tshock-update.txt"); - string[] changes = updateString.Split(','); - Version updateVersion = new Version(Convert.ToInt32(changes[0]), Convert.ToInt32(changes[1]), - Convert.ToInt32(changes[2]), Convert.ToInt32(changes[3])); - if (VersionNum.CompareTo(updateVersion) < 0) - { - notifiedAdminOfVersionCheck = false; - Tools.Broadcast("A TShock update has been released. Tell an admin to join to see the full changelog."); - serverOutOfDate = true; - } - } - catch (Exception e) - { - FileTools.WriteError(e.Message); - } - notifiedAdminOfVersionCheck = true; - } - - public static void ShowUpdateReminder(int ply) - { - if (!notifiedAdminOfVersionCheck || serverOutOfDate) - { - if (players[ply].group.HasPermission("maintenance")) - { - updateEpoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000)/10000000 + 600; - WebClient client = new WebClient(); - client.Headers.Add("user-agent", - "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"); - try - { - string updateString = client.DownloadString("http://shankshock.com/tshock-update.txt"); - string[] changes = updateString.Split(','); - Version updateVersion = new Version(Convert.ToInt32(changes[0]), Convert.ToInt32(changes[1]), - Convert.ToInt32(changes[2]), Convert.ToInt32(changes[3])); - float[] color = { 255, 255, 000 }; - if (VersionNum.CompareTo(updateVersion) < 0) - { - Tools.SendMessage(ply, "This server is out of date, to update now type /updatenow"); - if (!updateCmd) - { - Commands.commands.Add(new Commands.Command("updatenow", "maintenance", Commands.UpdateNow)); - updateCmd = true; - serverOutOfDate = true; - } - for (int i = 4; i <= changes.Length; i++) - { - Tools.SendMessage(ply, changes[i], color); - } - } - } - catch (Exception e) - { - FileTools.WriteError(e.Message); - } - notifiedAdminOfVersionCheck = true; - } - } - } - public static void Teleport(int ply, int x, int y) { Main.player[ply].position.X = x; @@ -876,54 +795,54 @@ namespace TShockAPI static readonly Dictionary MsgNames = new Dictionary() { - {1, "Connect Request"}, - {2, "Disconnect"}, - {3, "Continue Connecting"}, - {4, "Player Info"}, - {5, "Player Slot"}, - {6, "Continue Connecting (2)"}, - {7, "World Info"}, - {8, "Tile Get Section"}, - {9, "Status"}, - {10, "Tile Send Section"}, - {11, "Tile Frame Section"}, - {12, "Player Spawn"}, - {13, "Player Update"}, - {14, "Player Active"}, - {15, "Sync Players"}, - {16, "Player HP"}, - {17, "Tile"}, - {18, "Time Set"}, - {19, "Door Use"}, - {20, "Tile Send Square"}, - {21, "Item Drop"}, - {22, "Item Owner"}, - {23, "Npc Update"}, - {24, "Npc Item Strike"}, - {25, "Chat Text"}, - {26, "Player Damage"}, - {27, "Projectile New"}, - {28, "Npc Strike"}, - {29, "Projectile Destroy"}, - {30, "Toggle PVP"}, - {31, "Chest Get Contents"}, - {32, "Chest Item"}, - {33, "Chest Open"}, - {34, "Tile Kill"}, - {35, "Effect Heal"}, - {36, "Zones"}, - {37, "Password Requied"}, - {38, "Password Send"}, - {39, "Item Unown"}, - {40, "Npc Talk"}, - {41, "Player Animation"}, - {42, "Player Mana"}, - {43, "Effect Mana"}, - {44, "Player Kill Me"}, - {45, "Player Team"}, - {46, "Sign Read"}, - {47, "Sign New"}, - {48, "Liquid Set"}, + {1, "Connect Request"}, + {2, "Disconnect"}, + {3, "Continue Connecting"}, + {4, "Player Info"}, + {5, "Player Slot"}, + {6, "Continue Connecting (2)"}, + {7, "World Info"}, + {8, "Tile Get Section"}, + {9, "Status"}, + {10, "Tile Send Section"}, + {11, "Tile Frame Section"}, + {12, "Player Spawn"}, + {13, "Player Update"}, + {14, "Player Active"}, + {15, "Sync Players"}, + {16, "Player HP"}, + {17, "Tile"}, + {18, "Time Set"}, + {19, "Door Use"}, + {20, "Tile Send Square"}, + {21, "Item Drop"}, + {22, "Item Owner"}, + {23, "Npc Update"}, + {24, "Npc Item Strike"}, + {25, "Chat Text"}, + {26, "Player Damage"}, + {27, "Projectile New"}, + {28, "Npc Strike"}, + {29, "Projectile Destroy"}, + {30, "Toggle PVP"}, + {31, "Chest Get Contents"}, + {32, "Chest Item"}, + {33, "Chest Open"}, + {34, "Tile Kill"}, + {35, "Effect Heal"}, + {36, "Zones"}, + {37, "Password Requied"}, + {38, "Password Send"}, + {39, "Item Unown"}, + {40, "Npc Talk"}, + {41, "Player Animation"}, + {42, "Player Mana"}, + {43, "Effect Mana"}, + {44, "Player Kill Me"}, + {45, "Player Team"}, + {46, "Sign Read"}, + {47, "Sign New"}, + {48, "Liquid Set"}, {49, "Player Spawn Self"}, }; } diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj index 902236d9..37111195 100644 --- a/TShockAPI/TShockAPI.csproj +++ b/TShockAPI/TShockAPI.csproj @@ -70,6 +70,7 @@ + diff --git a/TShockAPI/UpdateManager.cs b/TShockAPI/UpdateManager.cs new file mode 100644 index 00000000..29aa88d8 --- /dev/null +++ b/TShockAPI/UpdateManager.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; + +namespace TShockAPI +{ + class UpdateManager + { + static string updateUrl = "http://shankshock.com/tshock-update.txt"; + public static bool updateCmd; + public static long updateEpoch = 0; + public static string[] globalChanges = {}; + /// + /// Checks to see if the server is out of date. + /// + /// + public static bool ServerIsOutOfDate() + { + WebClient client = new WebClient(); + client.Headers.Add("user-agent", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"); + try + { + string updateString = client.DownloadString(updateUrl); + string[] changes = updateString.Split(','); + Version updateVersion = new Version(Convert.ToInt32(changes[0]), Convert.ToInt32(changes[1]), + Convert.ToInt32(changes[2]), Convert.ToInt32(changes[3])); + if (TShock.VersionNum.CompareTo(updateVersion) < 0) + { + globalChanges = changes; + return true; + } + } + catch (Exception e) + { + FileTools.WriteError(e.Message); + } + return false; + } + + public static void EnableUpdateCommand() + { + Commands.commands.Add(new Commands.Command("updatenow", "maintenance", Commands.UpdateNow)); + updateCmd = true; + } + + public static void NotifyAdministrators(string[] changes) + { + for (int i = 0; i < ConfigurationManager.maxSlots; i++) + { + if (Terraria.Main.player[i].active) + { + if (!TShock.players[i].group.HasPermission("maintenance")) + return; + Tools.SendMessage(i, "The server is out of date. To update, type /updatenow."); + for (int j = 4; j <= changes.Length; j++) + { + Tools.SendMessage(i, changes[i], new float[] { 255, 0, 0 }); + } + } + } + } + + public static void UpdateProcedureCheck() + { + long currentEpoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; + if (currentEpoch > UpdateManager.updateEpoch) + { + if (ServerIsOutOfDate()) + { + EnableUpdateCommand(); + NotifyAdministrators(globalChanges); + } + } + } + + } +}