diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 714e06b0..1b409db4 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -137,6 +137,7 @@ namespace TShockAPI ChatCommands.Add(new Command("warp", UseWarp, "warp")); ChatCommands.Add(new Command("managewarp", SetWarp, "setwarp")); ChatCommands.Add(new Command("managewarp", DeleteWarp, "delwarp")); + ChatCommands.Add(new Command("managewarp", HideWarp, "hidewarp")); ChatCommands.Add(new Command("managegroup", AddGroup, "addGroup")); ChatCommands.Add(new Command("managegroup", DeleteGroup, "delGroup")); ChatCommands.Add(new Command("managegroup", ModifyGroup, "modGroup")); @@ -1217,6 +1218,31 @@ namespace TShockAPI args.Player.SendMessage("Invalid syntax! Proper syntax: /delwarp [name]", Color.Red); } + private static void HideWarp(CommandArgs args) + { + if (args.Parameters.Count > 1) + { + string warpName = String.Join(" ", args.Parameters); + bool state = false; + if (Boolean.TryParse(args.Parameters[1], out state)) + { + if (TShock.Warps.HideWarp(args.Parameters[0], state)) + { + if (state) + args.Player.SendMessage("Made warp " + warpName + " private", Color.Yellow); + else + args.Player.SendMessage("Made warp " + warpName + " public", Color.Yellow); + } + else + args.Player.SendMessage("Could not find specified warp", Color.Red); + } + else + args.Player.SendMessage("Invalid syntax! Proper syntax: /hidewarp [name] ", Color.Red); + } + else + args.Player.SendMessage("Invalid syntax! Proper syntax: /hidewarp [name] ", Color.Red); + } + private static void UseWarp(CommandArgs args) { if (args.Parameters.Count < 1) @@ -1245,7 +1271,7 @@ namespace TShockAPI page--; //Substract 1 as pages are parsed starting at 1 and not 0 } - var warps = TShock.Warps.ListAllWarps(Main.worldID.ToString()); + var warps = TShock.Warps.ListAllPublicWarps(Main.worldID.ToString()); //Check if they are trying to access a page that doesn't exist. int pagecount = warps.Count / pagelimit; diff --git a/TShockAPI/DB/WarpsManager.cs b/TShockAPI/DB/WarpsManager.cs index e15d630f..71f374b0 100644 --- a/TShockAPI/DB/WarpsManager.cs +++ b/TShockAPI/DB/WarpsManager.cs @@ -38,6 +38,11 @@ namespace TShockAPI.DB "CREATE TABLE IF NOT EXISTS 'Warps' ('X' NUMERIC, 'Y' NUMERIC, 'WarpName' TEXT PRIMARY KEY, 'WorldID' TEXT);" : "CREATE TABLE IF NOT EXISTS Warps (X INT(11), Y INT(11), WarpName VARCHAR(255) PRIMARY, WorldID VARCHAR(255));"; + if (TShock.Config.StorageType.ToLower() == "sqlite") + db.Query("ALTER TABLE 'Warps' ADD COLUMN 'Private' TEXT"); + else + db.Query("ALTER TABLE Warps ADD COLUMN Private VARCHAR(255)"); + database.Query(query); String file = Path.Combine(TShock.SavePath, "warps.xml"); @@ -167,7 +172,14 @@ namespace TShockAPI.DB { if (reader.Read()) { - return new Warp(new Vector2(reader.Get("X"), reader.Get("Y")), reader.Get("WarpName"), reader.Get("WorldID")); + 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"); + } } } } @@ -183,15 +195,25 @@ namespace TShockAPI.DB /// /// World name to get warps from /// List of warps with only their names - public List ListAllWarps(string worldid) + public List ListAllPublicWarps(string worldid) { var warps = new List(); try { - using (var reader = database.QueryReader("SELECT WarpName FROM Warps WHERE WorldID=@0", worldid)) + using (var reader = database.QueryReader("SELECT * FROM Warps WHERE WorldID=@0", worldid)) { while (reader.Read()) - warps.Add(new Warp { WarpName = reader.Get("WarpName") }); + { + try + { + if (reader.Get("Private") == "0" || reader.Get("Private") == null) + warps.Add(new Warp { WarpName = reader.Get("WarpName") }); + } + catch + { + warps.Add(new Warp { WarpName = reader.Get("WarpName") }); + } + } } } catch (Exception ex) @@ -200,6 +222,28 @@ namespace TShockAPI.DB } return warps; } + + /// + /// Gets all the warps names from world + /// + /// World name to get warps from + /// List of warps with only their names + public bool HideWarp(string warp, bool state) + { + try + { + string query = "UPDATE Warps SET Private=@0 WHERE WarpName=@1 AND WorldID=@2"; + + database.Query(query, state ? "1" : "0", warp, Main.worldID.ToString()); + + return true; + } + catch (Exception ex) + { + Log.Error(ex.ToString()); + return false; + } + } } public class Warp @@ -207,12 +251,14 @@ namespace TShockAPI.DB public Vector2 WarpPos { get; set; } public string WarpName { get; set; } public string WorldWarpID { get; set; } + public string Private { get; set; } - public Warp(Vector2 warppos, string name, string worldname) + public Warp(Vector2 warppos, string name, string worldid, string hidden) { WarpPos = warppos; WarpName = name; - WorldWarpID = worldname; + WorldWarpID = worldid; + Private = hidden; } public Warp() @@ -220,6 +266,7 @@ namespace TShockAPI.DB WarpPos = Vector2.Zero; WarpName = null; WorldWarpID = string.Empty; + Private = "0"; } } } diff --git a/TShockAPI/Tools.cs b/TShockAPI/Tools.cs index 63dfc8e1..241ca1a3 100755 --- a/TShockAPI/Tools.cs +++ b/TShockAPI/Tools.cs @@ -25,6 +25,7 @@ using System.Security.Cryptography; using System.Text; using Microsoft.Xna.Framework; using Terraria; +using TerrariaAPI; namespace TShockAPI {