From 41121b84123b36eb40b59b4dad7bb209415f3e39 Mon Sep 17 00:00:00 2001 From: MarioE Date: Fri, 1 Nov 2013 23:55:31 -0400 Subject: [PATCH] Re-do warps --- TShockAPI/Commands.cs | 44 +++++---- TShockAPI/DB/RegionManager.cs | 24 +---- TShockAPI/DB/WarpsManager.cs | 174 ++++++++++++++++++---------------- TShockAPI/GetDataHandlers.cs | 10 +- TShockAPI/TSPlayer.cs | 8 +- 5 files changed, 125 insertions(+), 135 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 6f0ff309..0b03f305 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -2032,8 +2032,9 @@ namespace TShockAPI int pageNumber; if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) return; - IEnumerable warpNames = from warp in TShock.Warps.ListAllPublicWarps(Main.worldID.ToString()) - select warp.WarpName; + IEnumerable warpNames = from warp in TShock.Warps.Warps + where !warp.IsPrivate + select warp.Name; PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(warpNames), new PaginationTools.Settings { @@ -2053,13 +2054,13 @@ namespace TShockAPI { args.Player.SendErrorMessage("Name reserved, use a different name."); } - else if (TShock.Warps.AddWarp(args.Player.TileX, args.Player.TileY, warpName, Main.worldID.ToString())) + else if (TShock.Warps.Add(args.Player.TileX, args.Player.TileY, warpName)) { args.Player.SendSuccessMessage("Warp added: " + warpName); foreach (TSPlayer tsplr in TShock.Players) { if (tsplr != null && tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.managewarp)) - tsplr.SendRaptorWarp(TShock.Warps.FindWarp(warpName)); + tsplr.SendRaptorWarp(TShock.Warps.Find(warpName)); } } else @@ -2077,7 +2078,7 @@ namespace TShockAPI if (args.Parameters.Count == 2) { string warpName = args.Parameters[1]; - if (TShock.Warps.RemoveWarp(warpName)) + if (TShock.Warps.Remove(warpName)) { args.Player.SendSuccessMessage("Warp deleted: " + warpName); foreach (TSPlayer tsplr in TShock.Players) @@ -2139,30 +2140,31 @@ namespace TShockAPI TShock.Utils.SendMultipleMatchError(args.Player, foundplr.Select(p => p.Name)); return; } + string warpName = args.Parameters[2]; - var warp = TShock.Warps.FindWarp(warpName); + var warp = TShock.Warps.Find(warpName); var plr = foundplr[0]; - if (warp.WarpPos != Vector2.Zero) - { - if (plr.Teleport((int)warp.WarpPos.X*16, (int)warp.WarpPos.Y*16 )) - { - plr.SendSuccessMessage(string.Format("{0} warped you to {1}.", args.Player.Name, warpName)); - args.Player.SendSuccessMessage(string.Format("You warped {0} to {1}.", plr.Name, warpName)); - } - } - else - { - args.Player.SendErrorMessage("Specified warp not found."); - } + if (warp.Position != Point.Zero) + { + if (plr.Teleport(warp.Position.X * 16, warp.Position.Y * 16)) + { + plr.SendSuccessMessage(String.Format("{0} warped you to {1}.", args.Player.Name, warpName)); + args.Player.SendSuccessMessage(String.Format("You warped {0} to {1}.", plr.Name, warpName)); + } + } + else + { + args.Player.SendErrorMessage("Specified warp not found."); + } #endregion } else { string warpName = String.Join(" ", args.Parameters); - var warp = TShock.Warps.FindWarp(warpName); - if (warp.WarpPos != Vector2.Zero) + var warp = TShock.Warps.Find(warpName); + if (warp.Position != Point.Zero) { - if (args.Player.Teleport((int)warp.WarpPos.X*16, (int)warp.WarpPos.Y*16 )) + if (args.Player.Teleport(warp.Position.X * 16, warp.Position.Y * 16)) args.Player.SendSuccessMessage("Warped to " + warpName + "."); } else diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index 5fc97387..be366c02 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -432,6 +432,9 @@ namespace TShockAPI.DB { try { + Region region = Regions.First(r => String.Equals(regionName, r.Name, StringComparison.OrdinalIgnoreCase)); + region.Area = new Rectangle(x, y, width, height); + if (database.Query("UPDATE Regions SET X1 = @0, Y1 = @1, width = @2, height = @3 WHERE RegionName = @4 AND WorldID = @5", x, y, width, height, regionName, Main.worldID.ToString()) > 0) return true; @@ -442,27 +445,6 @@ namespace TShockAPI.DB } return false; } - /// - /// Offsets a region. - /// - /// The region name. - /// The X offset. - /// The Y offset. - /// Whether the operation succeeded. - public bool OffsetRegion(string regionName, int x, int y) - { - try - { - if (database.Query("UPDATE Regions SET X1 = X1 + @0, Y1 = Y1 + @1 WHERE RegionName = @2 AND WorldID = @3", - x, y, regionName, Main.worldID.ToString()) > 0) - return true; - } - catch (Exception ex) - { - Log.Error(ex.ToString()); - } - return false; - } /// /// Gets all the regions names from world diff --git a/TShockAPI/DB/WarpsManager.cs b/TShockAPI/DB/WarpsManager.cs index bf66deb6..f7ccd8c3 100644 --- a/TShockAPI/DB/WarpsManager.cs +++ b/TShockAPI/DB/WarpsManager.cs @@ -20,6 +20,7 @@ using System; using System.Collections.Generic; using System.Data; using System.Diagnostics.CodeAnalysis; +using System.Linq; using MySql.Data.MySqlClient; using Terraria; @@ -50,90 +51,86 @@ namespace TShockAPI.DB ? (IQueryBuilder) new SqliteQueryCreator() : new MysqlQueryCreator()); creator.EnsureExists(table); - } - public bool AddWarp(int x, int y, string name, string worldid) - { - try - { - database.Query("INSERT INTO Warps (X, Y, WarpName, WorldID) VALUES (@0, @1, @2, @3);", x, y, name, worldid); - Warps.Add(new Warp(new Vector2(x, y), name, worldid, "0")); - return true; - } - catch (Exception ex) - { - Log.Error(ex.ToString()); - } - return false; - } - - public bool RemoveWarp(string name) - { - try - { - database.Query("DELETE FROM Warps WHERE WarpName=@0 AND WorldID=@1", name, Main.worldID.ToString()); - Warps.RemoveAll(w => w.WarpName == name); - return true; - } - catch (Exception ex) - { - Log.Error(ex.ToString()); - } - return false; - } - - public Warp FindWarp(string name) - { - try - { - using ( - var reader = database.QueryReader("SELECT * FROM Warps WHERE WarpName=@0 AND WorldID=@1", name, - Main.worldID.ToString())) - { - if (reader.Read()) - { - try - { - return new Warp(new Vector2(reader.Get("X"), reader.Get("Y")), reader.Get("WarpName"), - reader.Get("WorldID"), reader.Get("Private")); - } - catch - { - return new Warp(new Vector2(reader.Get("X"), reader.Get("Y")), reader.Get("WarpName"), - reader.Get("WorldID"), "0"); - } - } - } - } - catch (Exception ex) - { - Log.Error(ex.ToString()); - } - return new Warp(); + ReloadWarps(); } /// - /// Gets all the warps names from world + /// Adds a warp. /// - /// World name to get warps from - /// List of warps with only their names - public List ListAllPublicWarps(string worldid) + /// The X position. + /// The Y position. + /// The name. + /// Whether the opration succeeded. + public bool Add(int x, int y, string name) { - var warps = new List(); try { - using (var reader = database.QueryReader("SELECT * FROM Warps WHERE Private = @0 AND WorldID = @1", - "0", worldid)) + if (database.Query("INSERT INTO Warps (X, Y, WarpName, WorldID) VALUES (@0, @1, @2, @3);", + x, y, name, Main.worldID.ToString()) > 0) { - while (reader.Read()) - warps.Add(new Warp {WarpName = reader.Get("WarpName")}); + Warps.Add(new Warp(new Point(x, y), name)); + return true; } } catch (Exception ex) { Log.Error(ex.ToString()); } - return warps; + return false; + } + + /// + /// Reloads all warps. + /// + public void ReloadWarps() + { + Warps.Clear(); + + using (var reader = database.QueryReader("SELECT * FROM Warps WHERE WorldID = @0", + Main.worldID.ToString())) + { + while (reader.Read()) + { + Warps.Add(new Warp( + new Point(reader.Get("X"), reader.Get("Y")), + reader.Get("WarpName"), + reader.Get("Private") != "0")); + } + } + } + + /// + /// Removes a warp. + /// + /// The warp name. + /// Whether the operation succeeded. + public bool Remove(string warpName) + { + try + { + if (database.Query("DELETE FROM Warps WHERE WarpName = @0 AND WorldID = @1", + warpName, Main.worldID.ToString()) > 0) + { + Warps.RemoveAll(w => String.Equals(w.Name, warpName, StringComparison.OrdinalIgnoreCase)); + return true; + } + } + catch (Exception ex) + { + Log.Error(ex.ToString()); + } + return false; + } + + /// + /// Finds the warp with the given name. + /// + /// The name. + /// The warp, if it exists, or else null. + public Warp Find(string warpName) + { + return Warps.FirstOrDefault(w => String.Equals(w.Name, warpName, StringComparison.OrdinalIgnoreCase)); } /// @@ -150,7 +147,7 @@ namespace TShockAPI.DB if (database.Query("UPDATE Warps SET X = @0, Y = @1 WHERE WarpName = @2 AND WorldID = @3", x, y, warpName, Main.worldID.ToString()) > 0) { - Warps.Find(w => w.WarpName == warpName).WarpPos = new Vector2(x, y); + Warps.Find(w => String.Equals(w.Name, warpName, StringComparison.OrdinalIgnoreCase)).Position = new Point(x, y); return true; } } @@ -174,7 +171,7 @@ namespace TShockAPI.DB if (database.Query("UPDATE Warps SET Private = @0 WHERE WarpName = @1 AND WorldID = @2", state ? "1" : "0", warpName, Main.worldID.ToString()) > 0) { - Warps.Find(w => w.WarpName == warpName).Private = state ? "1" : "0"; + Warps.Find(w => String.Equals(w.Name, warpName, StringComparison.OrdinalIgnoreCase)).IsPrivate = state; return true; } } @@ -186,27 +183,36 @@ namespace TShockAPI.DB } } + /// + /// Represents a warp. + /// public class Warp { - public Vector2 WarpPos { get; set; } - public string WarpName { get; set; } - public string WorldWarpID { get; set; } - public string Private { get; set; } + /// + /// Gets or sets the name. + /// + public string Name { get; set; } + /// + /// Gets or sets the warp's privacy state. + /// + public bool IsPrivate { get; set; } + /// + /// Gets or sets the position. + /// + public Point Position { get; set; } - public Warp(Vector2 warppos, string name, string worldid, string hidden) + public Warp(Point position, string name, bool isPrivate = false) { - WarpPos = warppos; - WarpName = name; - WorldWarpID = worldid; - Private = hidden; + Name = name; + Position = position; + IsPrivate = isPrivate; } public Warp() { - WarpPos = Vector2.Zero; - WarpName = null; - WorldWarpID = string.Empty; - Private = "0"; + Position = Point.Zero; + Name = ""; + IsPrivate = false; } } } \ No newline at end of file diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 20406c39..b9c24487 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -3454,14 +3454,14 @@ namespace TShockAPI bool isHidden = args.Data.ReadBoolean(); string warpName = args.Data.ReadString(); - Warp warp = TShock.Warps.FindWarp(warpName); - if (warp.WarpPos == Vector2.Zero) + Warp warp = TShock.Warps.Find(warpName); + if (warp == null) { - TShock.Warps.AddWarp(x, y, warpName, Main.worldID.ToString()); + TShock.Warps.Add(x, y, warpName); foreach (TSPlayer tsplr in TShock.Players) { if (tsplr != null && tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.managewarp) && tsplr != args.Player) - tsplr.SendRaptorWarp(TShock.Warps.FindWarp(warpName)); + tsplr.SendRaptorWarp(TShock.Warps.Find(warpName)); } Log.Info("{0} added warp \"{1}\".", args.Player.UserAccountName, warpName); } @@ -3481,7 +3481,7 @@ namespace TShockAPI if (args.Player.Group.HasPermission(Permissions.managewarp)) { string warpName = args.Data.ReadString(); - TShock.Warps.RemoveWarp(warpName); + TShock.Warps.Remove(warpName); foreach (TSPlayer tsplr in TShock.Players) { if (tsplr != null && tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.managewarp) && tsplr != args.Player) diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 9d504156..90bfb3d2 100755 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -1013,10 +1013,10 @@ namespace TShockAPI writer.Write((byte)PacketTypes.Placeholder); writer.Write((byte)RaptorPacketTypes.Warp); - writer.Write(warp.WarpPos.X); - writer.Write(warp.WarpPos.Y); - writer.Write(warp.Private != "0"); - writer.Write(warp.WarpName); + writer.Write(warp.Position.X); + writer.Write(warp.Position.Y); + writer.Write(warp.IsPrivate); + writer.Write(warp.Name); length = (int)writer.BaseStream.Position; writer.BaseStream.Position = 0;