From e1cd87f4871b8a45637ec151bbe14c09b8d6b818 Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Fri, 22 Jul 2011 17:38:51 -0600 Subject: [PATCH] Fixed regions Added /convert --- TShockAPI/Commands.cs | 17 +++++++++++++++++ TShockAPI/DB/RegionManager.cs | 28 +++++++++++++++++++++++++--- TShockAPI/DB/WarpsManager.cs | 17 +++++++++++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index a8182db2..11e7fc32 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -167,6 +167,7 @@ namespace TShockAPI ChatCommands.Add(new Command("whisper", Whisper, "whisper", "w", "tell")); ChatCommands.Add(new Command("whisper", Reply, "reply", "r")); ChatCommands.Add(new Command("annoy", Annoy, "annoy")); + ChatCommands.Add(new Command("cfg", ConvertWaR, "convert")); if (TShock.Config.DistributationAgent != "terraria-online") { ChatCommands.Add(new Command("kill", Kill, "kill")); @@ -718,6 +719,22 @@ namespace TShockAPI #region Server Maintenence Commands + public static void ConvertWaR(CommandArgs args) + { + if (args.Parameters.Count < 1) + { + args.Player.SendMessage("This command will dump all users from both Regions and Warps."); + args.Player.SendMessage("This command will also change all Worlds to reference this WorldID."); + args.Player.SendMessage("You must manually fix multi-world configurations."); + args.Player.SendMessage("To confirm this: /convert yes"); + } else if (args.Parameters[0] == "yes") + { + TShock.Warps.ConvertDB(); + TShock.Regions.ConvertDB(); + args.Player.SendMessage("Convert complete. You need to re-allow users after they register."); + } + } + private static void Broadcast(CommandArgs args) { string message = ""; diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index a7910c43..f5d33d9d 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -151,7 +151,7 @@ namespace TShockAPI.DB if (ipstr != "") ipstr += ","; ipstr += TShock.Users.GetUserID(ips[i]); - } catch (Exception e) + } catch (Exception) { Log.Error("An IP address failed to import. It wasn't a user in the new user system."); } @@ -205,6 +205,28 @@ namespace TShockAPI.DB } } + public void ConvertDB() + { + try + { + using (var com = database.CreateCommand()) + { + com.CommandText = "UPDATE Regions SET WorldID=@worldid"; + com.AddParameter("@worldid", Main.worldID.ToString()); + com.ExecuteNonQuery(); + com.Parameters.Clear(); + com.CommandText = "UPDATE Regions SET UserIds=@UserIds"; + com.AddParameter("@UserIds", ""); + com.ExecuteNonQuery(); + ReloadAllRegions(); + } + } + catch (Exception ex) + { + Log.Error(ex.ToString()); + } + } + public void ReloadAllRegions() { try @@ -212,7 +234,7 @@ namespace TShockAPI.DB using (var com = database.CreateCommand()) { com.CommandText = "SELECT * FROM Regions WHERE WorldID=@worldid"; - com.AddParameter("@worldid", Main.worldName); + com.AddParameter("@worldid", Main.worldID.ToString()); using (var reader = com.ExecuteReader()) { Regions.Clear(); @@ -234,7 +256,7 @@ namespace TShockAPI.DB { for (int i = 0; i < SplitIDs.Length; i++) { - if (SplitIDs.Length == 0) + if (SplitIDs.Length == 1 && SplitIDs[0].Equals("")) { break; } diff --git a/TShockAPI/DB/WarpsManager.cs b/TShockAPI/DB/WarpsManager.cs index 993ca6dc..bbcafc8a 100644 --- a/TShockAPI/DB/WarpsManager.cs +++ b/TShockAPI/DB/WarpsManager.cs @@ -130,6 +130,23 @@ namespace TShockAPI.DB } } + public void ConvertDB() + { + try + { + using (var com = database.CreateCommand()) + { + com.CommandText = "UPDATE Warps SET WorldID=@worldid"; + com.AddParameter("@worldid", Main.worldID.ToString()); + com.ExecuteNonQuery(); + } + } + catch (Exception ex) + { + Log.Error(ex.ToString()); + } + } + public bool AddWarp(int x, int y, string name, string worldid) { try