From 05a4e025f7831c6163daa8fbdb1c9436e61aa45e Mon Sep 17 00:00:00 2001 From: ProfessorXZ Date: Tue, 30 Aug 2016 09:16:01 +0200 Subject: [PATCH] Added the Registered property to REST's players/read endpoints --- CHANGELOG.md | 1 + TShockAPI/Commands.cs | 529 +++++++++++++++++----------------- TShockAPI/Rest/RestManager.cs | 4 +- 3 files changed, 272 insertions(+), 262 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb2270dd..0f2ff579 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * API: Fixed chat line breaks when using chat tags and long strings of text (@ProfessorXZ) * API: Added ItemForceIntoChest hook (@WhiteXZ) +* API: Included the player's registration date in REST's players/read endpoints (@ProfessorXZ) * The setdungeon command correctly uses tshock.world.setdungeon as its permission (@OnsenManju) * Fixed clients being able to "Catch" and remove NPCs (@ProfessorXZ) * Fixed clients being able to remove other players' portals (@ProfessorXZ) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 4fb24eb5..4a455b73 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -83,10 +83,10 @@ namespace TShockAPI /// Gets or sets the help text of this command. /// public string HelpText { get; set; } - /// - /// Gets or sets an extended description of this command. - /// - public string[] HelpDesc { get; set; } + /// + /// Gets or sets an extended description of this command. + /// + public string[] HelpDesc { get; set; } /// /// Gets the name of the command. /// @@ -111,7 +111,7 @@ namespace TShockAPI commandDelegate = value; } - } + } public Command(List permissions, CommandDelegate cmd, params string[] names) : this(cmd, names) @@ -136,7 +136,7 @@ namespace TShockAPI CommandDelegate = cmd; DoLog = true; HelpText = "No help available."; - HelpDesc = null; + HelpDesc = null; Names = new List(names); Permissions = new List(); } @@ -202,7 +202,7 @@ namespace TShockAPI public static void InitCommands() { List tshockCommands = new List(100); - Action add = (cmd) => + Action add = (cmd) => { tshockCommands.Add(cmd); ChatCommands.Add(cmd); @@ -270,10 +270,10 @@ namespace TShockAPI { HelpText = "Manages item bans." }); - add(new Command(Permissions.manageprojectile, ProjectileBan, "projban") - { - HelpText = "Manages projectile bans." - }); + add(new Command(Permissions.manageprojectile, ProjectileBan, "projban") + { + HelpText = "Manages projectile bans." + }); add(new Command(Permissions.managetile, TileBan, "tileban") { HelpText = "Manages tile bans." @@ -355,7 +355,7 @@ namespace TShockAPI HelpText = "Shows the TShock version." }); /* Does nothing atm. - * + * * add(new Command(Permissions.updateplugins, UpdatePlugins, "updateplugins") { });*/ @@ -456,7 +456,7 @@ namespace TShockAPI #region World Commands add(new Command(Permissions.toggleexpert, ToggleExpert, "expert", "expertmode") { - HelpText = "Toggles expert mode." + HelpText = "Toggles expert mode." }); add(new Command(Permissions.antibuild, ToggleAntiBuild, "antibuild") { @@ -746,7 +746,7 @@ namespace TShockAPI args.Player.SendErrorMessage("You are already logged in, and cannot login again."); return; } - + User user = TShock.Users.GetUserByName(args.Player.Name); string password = ""; bool usingUUID = false; @@ -829,7 +829,7 @@ namespace TShockAPI if (TShock.RememberedPos.GetLeavePos(args.Player.Name, args.Player.IP) != Vector2.Zero) { Vector2 pos = TShock.RememberedPos.GetLeavePos(args.Player.Name, args.Player.IP); - args.Player.Teleport((int) pos.X*16, (int) pos.Y*16); + args.Player.Teleport((int)pos.X * 16, (int)pos.Y * 16); } args.Player.LoginHarassed = false; @@ -911,7 +911,7 @@ namespace TShockAPI args.Player.SendSuccessMessage("You changed your password!"); TShock.Users.SetUserPassword(args.Player.User, args.Parameters[1]); // SetUserPassword will hash it for you. TShock.Log.ConsoleInfo(args.Player.IP + " named " + args.Player.Name + " changed the password of account " + - args.Player.User.Name + "."); + args.Player.User.Name + "."); } catch (ArgumentOutOfRangeException) { @@ -922,7 +922,7 @@ namespace TShockAPI { args.Player.SendErrorMessage("You failed to change your password!"); TShock.Log.ConsoleError(args.Player.IP + " named " + args.Player.Name + " failed to change password for account: " + - args.Player.User.Name + "."); + args.Player.User.Name + "."); } } else @@ -980,7 +980,7 @@ namespace TShockAPI user.Group = TShock.Config.DefaultRegistrationGroupName; // FIXME -- we should get this from the DB. --Why? user.UUID = args.Player.UUID; - if (TShock.Users.GetUserByName(user.Name) == null && user.Name != TSServerPlayer.AccountName) // Cheap way of checking for existance of a user + if (TShock.Users.GetUserByName(user.Name) == null && user.Name != TSServerPlayer.AccountName) // Cheap way of checking for existance of a user { args.Player.SendSuccessMessage("Account \"{0}\" has been registered.", user.Name); args.Player.SendSuccessMessage("Your password is {0}.", echoPassword); @@ -1012,7 +1012,7 @@ namespace TShockAPI string subcmd = args.Parameters[0]; // Add requires a username, password, and a group specified. - if (subcmd == "add" && args.Parameters.Count == 4) + if (subcmd == "add" && args.Parameters.Count == 4) { var user = new User(); @@ -1027,7 +1027,7 @@ namespace TShockAPI return; } user.Group = args.Parameters[3]; - + try { TShock.Users.AddUser(user); @@ -1048,7 +1048,7 @@ namespace TShockAPI TShock.Log.ConsoleError(e.ToString()); } } - // User deletion requires a username + // User deletion requires a username else if (subcmd == "del" && args.Parameters.Count == 2) { var user = new User(); @@ -1070,7 +1070,7 @@ namespace TShockAPI TShock.Log.ConsoleError(ex.ToString()); } } - + // Password changing requires a username, and a new password to set else if (subcmd == "password" && args.Parameters.Count == 3) { @@ -1404,7 +1404,7 @@ namespace TShockAPI } else { - if (args.Silent) + if (args.Silent) { args.Player.SendSuccessMessage("{0}banned {1} for '{2}'", verb, players[0].Name, reason); } @@ -1482,8 +1482,8 @@ namespace TShockAPI "delip - Unbans an IP.", "list [page] - Lists all player bans.", "listip [page] - Lists all IP bans." - }; - + }; + PaginationTools.SendPage(args.Player, pageNumber, lines, new PaginationTools.Settings { @@ -1590,7 +1590,7 @@ namespace TShockAPI args.Player.SendErrorMessage("Server Side Characters is disabled."); return; } - if( args.Parameters.Count < 1 ) + if (args.Parameters.Count < 1) { args.Player.SendErrorMessage("Correct usage: {0}overridessc|{0}ossc ", Specifier); return; @@ -1598,12 +1598,12 @@ namespace TShockAPI string playerNameToMatch = string.Join(" ", args.Parameters); var matchedPlayers = TShock.Utils.FindPlayer(playerNameToMatch); - if( matchedPlayers.Count < 1 ) + if (matchedPlayers.Count < 1) { args.Player.SendErrorMessage("No players matched \"{0}\".", playerNameToMatch); return; } - else if( matchedPlayers.Count > 1 ) + else if (matchedPlayers.Count > 1) { TShock.Utils.SendMultipleMatchError(args.Player, matchedPlayers.Select(p => p.Name)); return; @@ -1634,7 +1634,7 @@ namespace TShockAPI { TShock.Config.ForceHalloween = !TShock.Config.ForceHalloween; Main.checkHalloween(); - if (args.Silent) + if (args.Silent) args.Player.SendInfoMessage("{0}abled halloween mode!", (TShock.Config.ForceHalloween ? "en" : "dis")); else TSPlayer.All.SendInfoMessage("{0} {1}abled halloween mode!", args.Player.Name, (TShock.Config.ForceHalloween ? "en" : "dis")); @@ -1719,8 +1719,8 @@ namespace TShockAPI string message = string.Join(" ", args.Parameters); TShock.Utils.Broadcast( - "(Server Broadcast) " + message, - Convert.ToByte(TShock.Config.BroadcastRGB[0]), Convert.ToByte(TShock.Config.BroadcastRGB[1]), + "(Server Broadcast) " + message, + Convert.ToByte(TShock.Config.BroadcastRGB[0]), Convert.ToByte(TShock.Config.BroadcastRGB[1]), Convert.ToByte(TShock.Config.BroadcastRGB[2])); } @@ -1741,7 +1741,7 @@ namespace TShockAPI string reason = ((args.Parameters.Count > 0) ? "Server shutting down: " + String.Join(" ", args.Parameters) : "Server shutting down!"); TShock.Utils.StopServer(true, reason); } - + private static void Restart(CommandArgs args) { if (TShock.NoRestart) @@ -1787,55 +1787,56 @@ namespace TShockAPI if (args.Parameters.Count > 0) subCommand = args.Parameters[0]; - switch(subCommand.ToLower()) + switch (subCommand.ToLower()) { case "listusers": - { - int pageNumber; - if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) - return; - - Dictionary restUsersTokens = new Dictionary(); - foreach (Rests.SecureRest.TokenData tokenData in TShock.RestApi.Tokens.Values) { - if (restUsersTokens.ContainsKey(tokenData.Username)) - restUsersTokens[tokenData.Username]++; - else - restUsersTokens.Add(tokenData.Username, 1); - } + int pageNumber; + if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) + return; - List restUsers = new List( - restUsersTokens.Select(ut => string.Format("{0} ({1} tokens)", ut.Key, ut.Value))); - - PaginationTools.SendPage( - args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(restUsers), new PaginationTools.Settings { - NothingToDisplayString = "There are currently no active REST users.", - HeaderFormat = "Active REST Users ({0}/{1}):", - FooterFormat = "Type {0}rest listusers {{0}} for more.".SFormat(Specifier) + Dictionary restUsersTokens = new Dictionary(); + foreach (Rests.SecureRest.TokenData tokenData in TShock.RestApi.Tokens.Values) + { + if (restUsersTokens.ContainsKey(tokenData.Username)) + restUsersTokens[tokenData.Username]++; + else + restUsersTokens.Add(tokenData.Username, 1); } - ); - break; - } + List restUsers = new List( + restUsersTokens.Select(ut => string.Format("{0} ({1} tokens)", ut.Key, ut.Value))); + + PaginationTools.SendPage( + args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(restUsers), new PaginationTools.Settings + { + NothingToDisplayString = "There are currently no active REST users.", + HeaderFormat = "Active REST Users ({0}/{1}):", + FooterFormat = "Type {0}rest listusers {{0}} for more.".SFormat(Specifier) + } + ); + + break; + } case "destroytokens": - { - TShock.RestApi.Tokens.Clear(); - args.Player.SendSuccessMessage("All REST tokens have been destroyed."); - break; - } + { + TShock.RestApi.Tokens.Clear(); + args.Player.SendSuccessMessage("All REST tokens have been destroyed."); + break; + } default: - { - args.Player.SendInfoMessage("Available REST Sub-Commands:"); - args.Player.SendMessage("listusers - Lists all REST users and their current active tokens.", Color.White); - args.Player.SendMessage("destroytokens - Destroys all current REST tokens.", Color.White); - break; - } + { + args.Player.SendInfoMessage("Available REST Sub-Commands:"); + args.Player.SendMessage("listusers - Lists all REST users and their current active tokens.", Color.White); + args.Player.SendMessage("destroytokens - Destroys all current REST tokens.", Color.White); + break; + } } } #endregion Server Maintenence Commands - #region Cause Events and Spawn Monsters Commands + #region Cause Events and Spawn Monsters Commands private static void DropMeteor(CommandArgs args) { @@ -1979,7 +1980,7 @@ namespace TShockAPI if (result > 0) { args.Player.SendSuccessMessage("Removed {0} players from the angler quest completion list for today.", result); - foreach (TSPlayer ply in TShock.Players.Where(p => p!= null && p.Active && p.TPlayer.name.ToLower().Equals(args.Parameters[0].ToLower()))) + foreach (TSPlayer ply in TShock.Players.Where(p => p != null && p.Active && p.TPlayer.name.ToLower().Equals(args.Parameters[0].ToLower()))) { //this will always tell the client that they have not done the quest today. ply.SendData((PacketTypes)74, ""); @@ -2236,7 +2237,7 @@ namespace TShockAPI private static void Spawn(CommandArgs args) { - if (args.Player.Teleport(Main.spawnTileX*16, (Main.spawnTileY*16) -48)) + if (args.Player.Teleport(Main.spawnTileX * 16, (Main.spawnTileY * 16) - 48)) args.Player.SendSuccessMessage("Teleported to the map's spawnpoint."); } @@ -2501,34 +2502,34 @@ namespace TShockAPI if (!args.Player.TPAllow) args.Player.SendSuccessMessage("You have removed your teleportation protection."); if (args.Player.TPAllow) - args.Player.SendSuccessMessage("You have enabled teleportation protection."); + args.Player.SendSuccessMessage("You have enabled teleportation protection."); args.Player.TPAllow = !args.Player.TPAllow; } private static void Warp(CommandArgs args) { - bool hasManageWarpPermission = args.Player.HasPermission(Permissions.managewarp); - if (args.Parameters.Count < 1) - { - if (hasManageWarpPermission) - { - args.Player.SendInfoMessage("Invalid syntax! Proper syntax: {0}warp [command] [arguments]", Specifier); - args.Player.SendInfoMessage("Commands: add, del, hide, list, send, [warpname]"); - args.Player.SendInfoMessage("Arguments: add [warp name], del [warp name], list [page]"); - args.Player.SendInfoMessage("Arguments: send [player] [warp name], hide [warp name] [Enable(true/false)]"); - args.Player.SendInfoMessage("Examples: {0}warp add foobar, {0}warp hide foobar true, {0}warp foobar", Specifier); - return; - } - else - { - args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp [name] or {0}warp list ", Specifier); - return; - } - } + bool hasManageWarpPermission = args.Player.HasPermission(Permissions.managewarp); + if (args.Parameters.Count < 1) + { + if (hasManageWarpPermission) + { + args.Player.SendInfoMessage("Invalid syntax! Proper syntax: {0}warp [command] [arguments]", Specifier); + args.Player.SendInfoMessage("Commands: add, del, hide, list, send, [warpname]"); + args.Player.SendInfoMessage("Arguments: add [warp name], del [warp name], list [page]"); + args.Player.SendInfoMessage("Arguments: send [player] [warp name], hide [warp name] [Enable(true/false)]"); + args.Player.SendInfoMessage("Examples: {0}warp add foobar, {0}warp hide foobar true, {0}warp foobar", Specifier); + return; + } + else + { + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp [name] or {0}warp list ", Specifier); + return; + } + } if (args.Parameters[0].Equals("list")) - { - #region List warps + { + #region List warps int pageNumber; if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) return; @@ -2542,98 +2543,98 @@ namespace TShockAPI FooterFormat = "Type {0}warp list {{0}} for more.".SFormat(Specifier), NothingToDisplayString = "There are currently no warps defined." }); - #endregion - } - else if (args.Parameters[0].ToLower() == "add" && hasManageWarpPermission) - { - #region Add warp - if (args.Parameters.Count == 2) - { - string warpName = args.Parameters[1]; - if (warpName == "list" || warpName == "hide" || warpName == "del" || warpName == "add") - { - args.Player.SendErrorMessage("Name reserved, use a different name."); - } - else if (TShock.Warps.Add(args.Player.TileX, args.Player.TileY, warpName)) - { - args.Player.SendSuccessMessage("Warp added: " + warpName); - } - else - { - args.Player.SendErrorMessage("Warp " + warpName + " already exists."); - } - } - else - args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp add [name]", Specifier); - #endregion - } - else if (args.Parameters[0].ToLower() == "del" && hasManageWarpPermission) - { - #region Del warp - if (args.Parameters.Count == 2) - { - string warpName = args.Parameters[1]; + #endregion + } + else if (args.Parameters[0].ToLower() == "add" && hasManageWarpPermission) + { + #region Add warp + if (args.Parameters.Count == 2) + { + string warpName = args.Parameters[1]; + if (warpName == "list" || warpName == "hide" || warpName == "del" || warpName == "add") + { + args.Player.SendErrorMessage("Name reserved, use a different name."); + } + else if (TShock.Warps.Add(args.Player.TileX, args.Player.TileY, warpName)) + { + args.Player.SendSuccessMessage("Warp added: " + warpName); + } + else + { + args.Player.SendErrorMessage("Warp " + warpName + " already exists."); + } + } + else + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp add [name]", Specifier); + #endregion + } + else if (args.Parameters[0].ToLower() == "del" && hasManageWarpPermission) + { + #region Del warp + if (args.Parameters.Count == 2) + { + string warpName = args.Parameters[1]; if (TShock.Warps.Remove(warpName)) { args.Player.SendSuccessMessage("Warp deleted: " + warpName); } else args.Player.SendErrorMessage("Could not find the specified warp."); - } - else - args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp del [name]", Specifier); - #endregion - } - else if (args.Parameters[0].ToLower() == "hide" && hasManageWarpPermission) - { - #region Hide warp - if (args.Parameters.Count == 3) - { - string warpName = args.Parameters[1]; - bool state = false; - if (Boolean.TryParse(args.Parameters[2], out state)) - { - if (TShock.Warps.Hide(args.Parameters[1], state)) - { - if (state) - args.Player.SendSuccessMessage("Warp " + warpName + " is now private."); - else - args.Player.SendSuccessMessage("Warp " + warpName + " is now public."); - } - else - args.Player.SendErrorMessage("Could not find specified warp."); - } - else - args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp hide [name] ", Specifier); - } - else - args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp hide [name] ", Specifier); - #endregion - } - else if (args.Parameters[0].ToLower() == "send" && args.Player.HasPermission(Permissions.tpothers)) - { - #region Warp send - if (args.Parameters.Count < 3) - { - args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp send [player] [warpname]", Specifier); - return; - } + } + else + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp del [name]", Specifier); + #endregion + } + else if (args.Parameters[0].ToLower() == "hide" && hasManageWarpPermission) + { + #region Hide warp + if (args.Parameters.Count == 3) + { + string warpName = args.Parameters[1]; + bool state = false; + if (Boolean.TryParse(args.Parameters[2], out state)) + { + if (TShock.Warps.Hide(args.Parameters[1], state)) + { + if (state) + args.Player.SendSuccessMessage("Warp " + warpName + " is now private."); + else + args.Player.SendSuccessMessage("Warp " + warpName + " is now public."); + } + else + args.Player.SendErrorMessage("Could not find specified warp."); + } + else + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp hide [name] ", Specifier); + } + else + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp hide [name] ", Specifier); + #endregion + } + else if (args.Parameters[0].ToLower() == "send" && args.Player.HasPermission(Permissions.tpothers)) + { + #region Warp send + if (args.Parameters.Count < 3) + { + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp send [player] [warpname]", Specifier); + return; + } - var foundplr = TShock.Utils.FindPlayer(args.Parameters[1]); - if (foundplr.Count == 0) - { - args.Player.SendErrorMessage("Invalid player!"); - return; - } - else if (foundplr.Count > 1) - { + var foundplr = TShock.Utils.FindPlayer(args.Parameters[1]); + if (foundplr.Count == 0) + { + args.Player.SendErrorMessage("Invalid player!"); + return; + } + else if (foundplr.Count > 1) + { TShock.Utils.SendMultipleMatchError(args.Player, foundplr.Select(p => p.Name)); - return; - } + return; + } - string warpName = args.Parameters[2]; - var warp = TShock.Warps.Find(warpName); - var plr = foundplr[0]; + string warpName = args.Parameters[2]; + var warp = TShock.Warps.Find(warpName); + var plr = foundplr[0]; if (warp.Position != Point.Zero) { if (plr.Teleport(warp.Position.X * 16, warp.Position.Y * 16)) @@ -2646,22 +2647,22 @@ namespace TShockAPI { args.Player.SendErrorMessage("Specified warp not found."); } - #endregion - } - else - { - string warpName = String.Join(" ", args.Parameters); - var warp = TShock.Warps.Find(warpName); - if (warp != null) - { + #endregion + } + else + { + string warpName = String.Join(" ", args.Parameters); + var warp = TShock.Warps.Find(warpName); + if (warp != null) + { if (args.Player.Teleport(warp.Position.X * 16, warp.Position.Y * 16)) - args.Player.SendSuccessMessage("Warped to " + warpName + "."); - } - else - { - args.Player.SendErrorMessage("The specified warp was not found."); - } - } + args.Player.SendSuccessMessage("Warped to " + warpName + "."); + } + else + { + args.Player.SendErrorMessage("The specified warp was not found."); + } + } } #endregion Teleport Commands @@ -2758,7 +2759,7 @@ namespace TShockAPI "parent - Changes a group's parent group.", "prefix - Changes a group's prefix.", "suffix - Changes a group's suffix." - }; + }; PaginationTools.SendPage(args.Player, pageNumber, lines, new PaginationTools.Settings @@ -3234,7 +3235,7 @@ namespace TShockAPI "del - Deletes an item ban.", "disallow - Disallows a group from using an item.", "list [page] - Lists all item bans." - }; + }; PaginationTools.SendPage(args.Player, pageNumber, lines, new PaginationTools.Settings @@ -3404,7 +3405,7 @@ namespace TShockAPI "del - Deletes an projectile ban.", "disallow - Disallows a group from using a projectile.", "list [page] - Lists all projectile bans." - }; + }; PaginationTools.SendPage(args.Player, pageNumber, lines, new PaginationTools.Settings @@ -3573,7 +3574,7 @@ namespace TShockAPI "del - Deletes a tile ban.", "disallow - Disallows a group from place a tile.", "list [page] - Lists all tile bans." - }; + }; PaginationTools.SendPage(args.Player, pageNumber, lines, new PaginationTools.Settings @@ -3592,7 +3593,7 @@ namespace TShockAPI if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) return; IEnumerable tileIds = from tileBan in TShock.TileBans.TileBans - select tileBan.ID; + select tileBan.ID; PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(tileIds), new PaginationTools.Settings { @@ -3677,11 +3678,12 @@ namespace TShockAPI if (String.Equals(args.Parameters[0], "default", StringComparison.CurrentCultureIgnoreCase)) { TShock.Config.DefaultMaximumSpawns = NPC.defaultMaxSpawns = 5; - if (args.Silent) + if (args.Silent) { args.Player.SendInfoMessage("Changed the maximum spawns to 5."); } - else { + else + { TSPlayer.All.SendInfoMessage("{0} changed the maximum spawns to 5.", args.Player.Name); } return; @@ -3699,7 +3701,8 @@ namespace TShockAPI { args.Player.SendInfoMessage("Changed the maximum spawns to {0}.", maxSpawns); } - else { + else + { TSPlayer.All.SendInfoMessage("{0} changed the maximum spawns to {1}.", args.Player.Name, maxSpawns); } } @@ -3715,11 +3718,12 @@ namespace TShockAPI if (String.Equals(args.Parameters[0], "default", StringComparison.CurrentCultureIgnoreCase)) { TShock.Config.DefaultSpawnRate = NPC.defaultSpawnRate = 600; - if (args.Silent) + if (args.Silent) { args.Player.SendInfoMessage("Changed the spawn rate to 600."); } - else { + else + { TSPlayer.All.SendInfoMessage("{0} changed the spawn rate to 600.", args.Player.Name); } return; @@ -3732,11 +3736,12 @@ namespace TShockAPI return; } TShock.Config.DefaultSpawnRate = NPC.defaultSpawnRate = spawnRate; - if (args.Silent) + if (args.Silent) { args.Player.SendInfoMessage("Changed the spawn rate to {0}.", spawnRate); } - else { + else + { TSPlayer.All.SendInfoMessage("{0} changed the spawn rate to {1}.", args.Player.Name, spawnRate); } } @@ -3757,7 +3762,7 @@ namespace TShockAPI args.Player.SendInfoMessage("The current time is {0}:{1:D2}.", (int)Math.Floor(time), (int)Math.Round((time % 1.0) * 60.0)); return; } - + switch (args.Parameters[0].ToLower()) { case "day": @@ -3911,8 +3916,8 @@ namespace TShockAPI return; } - float speed; - if (!float.TryParse(args.Parameters[0], out speed)) + int speed; + if (!int.TryParse(args.Parameters[0], out speed)) { args.Player.SendErrorMessage("Invalid wind speed!"); return; @@ -3927,7 +3932,7 @@ namespace TShockAPI #endregion Time/PvpFun Commands - #region Region Commands + #region Region Commands private static void Region(CommandArgs args) { @@ -4230,11 +4235,11 @@ namespace TShockAPI break; List lines = new List - { - string.Format("X: {0}; Y: {1}; W: {2}; H: {3}, Z: {4}", region.Area.X, region.Area.Y, region.Area.Width, region.Area.Height, region.Z), - string.Concat("Owner: ", region.Owner), - string.Concat("Protected: ", region.DisableBuild.ToString()), - }; + { + string.Format("X: {0}; Y: {1}; W: {2}; H: {3}, Z: {4}", region.Area.X, region.Area.Y, region.Area.Width, region.Area.Height, region.Z), + string.Concat("Owner: ", region.Owner), + string.Concat("Protected: ", region.DisableBuild.ToString()), + }; if (region.AllowedIDs.Count > 0) { @@ -4282,8 +4287,8 @@ namespace TShockAPI // Preferring dotted lines as those should easily be distinguishable from actual wires. if ((boundaryPoint.X + boundaryPoint.Y & 1) == 0) { - // Could be improved by sending raw tile data to the client instead but not really - // worth the effort as chances are very low that overwriting the wire for a few + // Could be improved by sending raw tile data to the client instead but not really + // worth the effort as chances are very low that overwriting the wire for a few // nanoseconds will cause much trouble. Tile tile = Main.tile[boundaryPoint.X, boundaryPoint.Y]; bool oldWireState = tile.wire(); @@ -4423,21 +4428,21 @@ namespace TShockAPI return; List lines = new List { - "set <1/2> - Sets the temporary region points.", - "clear - Clears the temporary region points.", - "define - Defines the region with the given name.", - "delete - Deletes the given region.", - "name [-u][-z][-p] - Shows the name of the region at the given point.", - "list - Lists all regions.", - "resize - Resizes a region.", - "allow - Allows a user to a region.", - "remove - Removes a user from a region.", - "allowg - Allows a user group to a region.", - "removeg - Removes a user group from a region.", - "info [-d] - Displays several information about the given region.", - "protect - Sets whether the tiles inside the region are protected or not.", - "z <#> - Sets the z-order of the region.", - }; + "set <1/2> - Sets the temporary region points.", + "clear - Clears the temporary region points.", + "define - Defines the region with the given name.", + "delete - Deletes the given region.", + "name [-u][-z][-p] - Shows the name of the region at the given point.", + "list - Lists all regions.", + "resize - Resizes a region.", + "allow - Allows a user to a region.", + "remove - Removes a user from a region.", + "allowg - Allows a user group to a region.", + "removeg - Removes a user group from a region.", + "info [-d] - Displays several information about the given region.", + "protect - Sets whether the tiles inside the region are protected or not.", + "z <#> - Sets the z-order of the region.", + }; if (args.Player.HasPermission(Permissions.tp)) lines.Add("tp - Teleports you to the given region's center."); @@ -4454,7 +4459,7 @@ namespace TShockAPI } } - #endregion Region Commands + #endregion Region Commands #region World Protection Commands @@ -4522,15 +4527,15 @@ namespace TShockAPI } args.Player.SendSuccessMessage("{0}{1} help: ", Specifier, command.Name); - if (command.HelpDesc == null) - { - args.Player.SendInfoMessage(command.HelpText); - return; - } - foreach (string line in command.HelpDesc) - { - args.Player.SendInfoMessage(line); - } + if (command.HelpDesc == null) + { + args.Player.SendInfoMessage(command.HelpText); + return; + } + foreach (string line in command.HelpDesc) + { + args.Player.SendInfoMessage(line); + } } } @@ -4545,7 +4550,7 @@ namespace TShockAPI bool displayIdsRequested = false; int pageNumber = 1; - if (!invalidUsage) + if (!invalidUsage) { foreach (string parameter in args.Parameters) { @@ -4575,8 +4580,8 @@ namespace TShockAPI args.Player.SendSuccessMessage("Online Players ({0}/{1})", TShock.Utils.ActivePlayers(), TShock.Config.MaxSlots); PaginationTools.SendPage( - args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(TShock.Utils.GetPlayers(displayIdsRequested)), - new PaginationTools.Settings + args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(TShock.Utils.GetPlayers(displayIdsRequested)), + new PaginationTools.Settings { IncludeHeader = false, FooterFormat = string.Format("Type {0}who {1}{{0}} for more.", Specifier, displayIdsRequested ? "-i " : string.Empty) @@ -4890,9 +4895,10 @@ namespace TShockAPI args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}aliases ", Specifier); return; } - + string givenCommandName = string.Join(" ", args.Parameters); - if (string.IsNullOrWhiteSpace(givenCommandName)) { + if (string.IsNullOrWhiteSpace(givenCommandName)) + { args.Player.SendErrorMessage("Please enter a proper command name or alias."); return; } @@ -4904,10 +4910,11 @@ namespace TShockAPI commandName = givenCommandName; bool didMatch = false; - foreach (Command matchingCommand in ChatCommands.Where(cmd => cmd.Names.IndexOf(commandName) != -1)) { + foreach (Command matchingCommand in ChatCommands.Where(cmd => cmd.Names.IndexOf(commandName) != -1)) + { if (matchingCommand.Names.Count > 1) args.Player.SendInfoMessage( - "Aliases of {0}{1}: {0}{2}", Specifier, matchingCommand.Name, string.Join(", {0}".SFormat(Specifier), matchingCommand.Names.Skip(1))); + "Aliases of {0}{1}: {0}{2}", Specifier, matchingCommand.Name, string.Join(", {0}".SFormat(Specifier), matchingCommand.Names.Skip(1))); else args.Player.SendInfoMessage("{0}{1} defines no aliases.", Specifier, matchingCommand.Name); @@ -5069,13 +5076,13 @@ namespace TShockAPI { if (Main.npc[i].active && ((npcId == 0 && !Main.npc[i].townNPC && Main.npc[i].netID != NPCID.TargetDummy) || Main.npc[i].netID == npcId)) { - TSPlayer.Server.StrikeNPC(i, (int)(Main.npc[i].life + (Main.npc[i].defense*0.5)), 0, 0); + TSPlayer.Server.StrikeNPC(i, (int)(Main.npc[i].life + (Main.npc[i].defense * 0.5)), 0, 0); kills++; } } TSPlayer.All.SendInfoMessage("{0} butchered {1} NPCs.", args.Player.Name, kills); } - + private static void Item(CommandArgs args) { if (args.Parameters.Count < 1) @@ -5138,12 +5145,12 @@ namespace TShockAPI else if (!item.accessory && prefixIds.Contains(42)) prefixIds.Remove(76); - if (prefixIds.Count > 1) + if (prefixIds.Count > 1) { TShock.Utils.SendMultipleMatchError(args.Player, prefixIds.Select(p => p.ToString())); return; } - else if (prefixIds.Count == 0) + else if (prefixIds.Count == 0) { args.Player.SendErrorMessage("No prefix matched \"{0}\".", prefixidOrName); return; @@ -5174,7 +5181,7 @@ namespace TShockAPI args.Player.SendErrorMessage("Your inventory seems full."); } } - + private static void RenameNPC(CommandArgs args) { if (args.Parameters.Count != 2) @@ -5196,7 +5203,7 @@ namespace TShockAPI TShock.Utils.SendMultipleMatchError(args.Player, npcs.Select(n => n.name)); return; } - else if (args.Parameters[1].Length >200) + else if (args.Parameters[1].Length > 200) { args.Player.SendErrorMessage("New name is too large!"); return; @@ -5206,26 +5213,26 @@ namespace TShockAPI npcId = npcs[0].netID; } } - int done=0; + int done = 0; for (int i = 0; i < Main.npc.Length; i++) { if (Main.npc[i].active && ((npcId == 0 && !Main.npc[i].townNPC) || (Main.npc[i].netID == npcId && Main.npc[i].townNPC))) { - Main.npc[i].displayName= args.Parameters[1]; - NetMessage.SendData(56, -1, -1, args.Parameters[1], i, 0f, 0f, 0f, 0); - done++; + Main.npc[i].displayName = args.Parameters[1]; + NetMessage.SendData(56, -1, -1, args.Parameters[1], i, 0f, 0f, 0f, 0); + done++; } } - if (done >0 ) + if (done > 0) { - TSPlayer.All.SendInfoMessage("{0} renamed the {1}.", args.Player.Name, args.Parameters[0]); + TSPlayer.All.SendInfoMessage("{0} renamed the {1}.", args.Player.Name, args.Parameters[0]); } else { - args.Player.SendErrorMessage("Could not rename {0}!", args.Parameters[0]); + args.Player.SendErrorMessage("Could not rename {0}!", args.Parameters[0]); } } - + private static void Give(CommandArgs args) { if (args.Parameters.Count < 2) @@ -5307,7 +5314,7 @@ namespace TShockAPI { args.Player.SendErrorMessage("You cannot spawn banned items."); } - + } else { @@ -5396,7 +5403,7 @@ namespace TShockAPI { if (time < 0 || time > short.MaxValue) time = 60; - args.Player.SetBuff(id, time*60); + args.Player.SetBuff(id, time * 60); args.Player.SendSuccessMessage(string.Format("You have buffed yourself with {0}({1}) for {2} seconds!", TShock.Utils.GetBuffName(id), TShock.Utils.GetBuffDescription(id), (time))); } @@ -5447,7 +5454,7 @@ namespace TShockAPI { if (time < 0 || time > short.MaxValue) time = 60; - foundplr[0].SetBuff(id, time*60); + foundplr[0].SetBuff(id, time * 60); args.Player.SendSuccessMessage(string.Format("You have buffed {0} with {1}({2}) for {3} seconds!", foundplr[0].Name, TShock.Utils.GetBuffName(id), TShock.Utils.GetBuffDescription(id), (time))); diff --git a/TShockAPI/Rest/RestManager.cs b/TShockAPI/Rest/RestManager.cs index 445da0c8..03c6692a 100644 --- a/TShockAPI/Rest/RestManager.cs +++ b/TShockAPI/Rest/RestManager.cs @@ -258,7 +258,7 @@ namespace TShockAPI private object ServerReload(RestRequestArgs args) { TShock.Utils.Reload(new TSRestPlayer(args.TokenData.Username, TShock.Groups.GetGroupByName(args.TokenData.UserGroupName))); - + return RestResponse("Configuration, permissions, and regions reload complete. Some changes may require a server restart."); } @@ -810,6 +810,7 @@ namespace TShockAPI {"username", null == player.User ? "" : player.User.Name}, {"ip", player.IP}, {"group", player.Group.Name}, + {"registered", null == player.User ? "" : player.User.Registered}, {"position", player.TileX + "," + player.TileY}, {"inventory", string.Join(", ", activeItems.Select(p => (p.name + ":" + p.stack)))}, {"buffs", string.Join(", ", player.TPlayer.buffType)} @@ -837,6 +838,7 @@ namespace TShockAPI {"username", null == player.User ? "" : player.User.Name}, {"ip", player.IP}, {"group", player.Group.Name}, + {"registered", null == player.User ? "" : player.User.Registered}, {"position", player.TileX + "," + player.TileY}, {"inventory", string.Join(", ", inventory.Select(p => (p.name + ":" + p.stack)))}, {"armor", string.Join(", ", equipment.Select(p => (p.netID + ":" + p.prefix)))},