Added the Registered property to REST's players/read endpoints

This commit is contained in:
ProfessorXZ 2016-08-30 09:16:01 +02:00
parent 66f5f9f540
commit 05a4e025f7
3 changed files with 272 additions and 262 deletions

View file

@ -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: Fixed chat line breaks when using chat tags and long strings of text (@ProfessorXZ)
* API: Added ItemForceIntoChest hook (@WhiteXZ) * 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) * 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 "Catch" and remove NPCs (@ProfessorXZ)
* Fixed clients being able to remove other players' portals (@ProfessorXZ) * Fixed clients being able to remove other players' portals (@ProfessorXZ)

View file

@ -83,10 +83,10 @@ namespace TShockAPI
/// Gets or sets the help text of this command. /// Gets or sets the help text of this command.
/// </summary> /// </summary>
public string HelpText { get; set; } public string HelpText { get; set; }
/// <summary> /// <summary>
/// Gets or sets an extended description of this command. /// Gets or sets an extended description of this command.
/// </summary> /// </summary>
public string[] HelpDesc { get; set; } public string[] HelpDesc { get; set; }
/// <summary> /// <summary>
/// Gets the name of the command. /// Gets the name of the command.
/// </summary> /// </summary>
@ -111,7 +111,7 @@ namespace TShockAPI
commandDelegate = value; commandDelegate = value;
} }
} }
public Command(List<string> permissions, CommandDelegate cmd, params string[] names) public Command(List<string> permissions, CommandDelegate cmd, params string[] names)
: this(cmd, names) : this(cmd, names)
@ -136,7 +136,7 @@ namespace TShockAPI
CommandDelegate = cmd; CommandDelegate = cmd;
DoLog = true; DoLog = true;
HelpText = "No help available."; HelpText = "No help available.";
HelpDesc = null; HelpDesc = null;
Names = new List<string>(names); Names = new List<string>(names);
Permissions = new List<string>(); Permissions = new List<string>();
} }
@ -202,7 +202,7 @@ namespace TShockAPI
public static void InitCommands() public static void InitCommands()
{ {
List<Command> tshockCommands = new List<Command>(100); List<Command> tshockCommands = new List<Command>(100);
Action<Command> add = (cmd) => Action<Command> add = (cmd) =>
{ {
tshockCommands.Add(cmd); tshockCommands.Add(cmd);
ChatCommands.Add(cmd); ChatCommands.Add(cmd);
@ -270,10 +270,10 @@ namespace TShockAPI
{ {
HelpText = "Manages item bans." HelpText = "Manages item bans."
}); });
add(new Command(Permissions.manageprojectile, ProjectileBan, "projban") add(new Command(Permissions.manageprojectile, ProjectileBan, "projban")
{ {
HelpText = "Manages projectile bans." HelpText = "Manages projectile bans."
}); });
add(new Command(Permissions.managetile, TileBan, "tileban") add(new Command(Permissions.managetile, TileBan, "tileban")
{ {
HelpText = "Manages tile bans." HelpText = "Manages tile bans."
@ -355,7 +355,7 @@ namespace TShockAPI
HelpText = "Shows the TShock version." HelpText = "Shows the TShock version."
}); });
/* Does nothing atm. /* Does nothing atm.
* *
* add(new Command(Permissions.updateplugins, UpdatePlugins, "updateplugins") * add(new Command(Permissions.updateplugins, UpdatePlugins, "updateplugins")
{ {
});*/ });*/
@ -456,7 +456,7 @@ namespace TShockAPI
#region World Commands #region World Commands
add(new Command(Permissions.toggleexpert, ToggleExpert, "expert", "expertmode") add(new Command(Permissions.toggleexpert, ToggleExpert, "expert", "expertmode")
{ {
HelpText = "Toggles expert mode." HelpText = "Toggles expert mode."
}); });
add(new Command(Permissions.antibuild, ToggleAntiBuild, "antibuild") 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."); args.Player.SendErrorMessage("You are already logged in, and cannot login again.");
return; return;
} }
User user = TShock.Users.GetUserByName(args.Player.Name); User user = TShock.Users.GetUserByName(args.Player.Name);
string password = ""; string password = "";
bool usingUUID = false; bool usingUUID = false;
@ -829,7 +829,7 @@ namespace TShockAPI
if (TShock.RememberedPos.GetLeavePos(args.Player.Name, args.Player.IP) != Vector2.Zero) if (TShock.RememberedPos.GetLeavePos(args.Player.Name, args.Player.IP) != Vector2.Zero)
{ {
Vector2 pos = TShock.RememberedPos.GetLeavePos(args.Player.Name, args.Player.IP); 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; args.Player.LoginHarassed = false;
@ -911,7 +911,7 @@ namespace TShockAPI
args.Player.SendSuccessMessage("You changed your password!"); args.Player.SendSuccessMessage("You changed your password!");
TShock.Users.SetUserPassword(args.Player.User, args.Parameters[1]); // SetUserPassword will hash it for you. 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 " + 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) catch (ArgumentOutOfRangeException)
{ {
@ -922,7 +922,7 @@ namespace TShockAPI
{ {
args.Player.SendErrorMessage("You failed to change your password!"); 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: " + 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 else
@ -980,7 +980,7 @@ namespace TShockAPI
user.Group = TShock.Config.DefaultRegistrationGroupName; // FIXME -- we should get this from the DB. --Why? user.Group = TShock.Config.DefaultRegistrationGroupName; // FIXME -- we should get this from the DB. --Why?
user.UUID = args.Player.UUID; 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("Account \"{0}\" has been registered.", user.Name);
args.Player.SendSuccessMessage("Your password is {0}.", echoPassword); args.Player.SendSuccessMessage("Your password is {0}.", echoPassword);
@ -1012,7 +1012,7 @@ namespace TShockAPI
string subcmd = args.Parameters[0]; string subcmd = args.Parameters[0];
// Add requires a username, password, and a group specified. // 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(); var user = new User();
@ -1027,7 +1027,7 @@ namespace TShockAPI
return; return;
} }
user.Group = args.Parameters[3]; user.Group = args.Parameters[3];
try try
{ {
TShock.Users.AddUser(user); TShock.Users.AddUser(user);
@ -1048,7 +1048,7 @@ namespace TShockAPI
TShock.Log.ConsoleError(e.ToString()); TShock.Log.ConsoleError(e.ToString());
} }
} }
// User deletion requires a username // User deletion requires a username
else if (subcmd == "del" && args.Parameters.Count == 2) else if (subcmd == "del" && args.Parameters.Count == 2)
{ {
var user = new User(); var user = new User();
@ -1070,7 +1070,7 @@ namespace TShockAPI
TShock.Log.ConsoleError(ex.ToString()); TShock.Log.ConsoleError(ex.ToString());
} }
} }
// Password changing requires a username, and a new password to set // Password changing requires a username, and a new password to set
else if (subcmd == "password" && args.Parameters.Count == 3) else if (subcmd == "password" && args.Parameters.Count == 3)
{ {
@ -1404,7 +1404,7 @@ namespace TShockAPI
} }
else else
{ {
if (args.Silent) if (args.Silent)
{ {
args.Player.SendSuccessMessage("{0}banned {1} for '{2}'", verb, players[0].Name, reason); args.Player.SendSuccessMessage("{0}banned {1} for '{2}'", verb, players[0].Name, reason);
} }
@ -1482,8 +1482,8 @@ namespace TShockAPI
"delip <ip> - Unbans an IP.", "delip <ip> - Unbans an IP.",
"list [page] - Lists all player bans.", "list [page] - Lists all player bans.",
"listip [page] - Lists all IP bans." "listip [page] - Lists all IP bans."
}; };
PaginationTools.SendPage(args.Player, pageNumber, lines, PaginationTools.SendPage(args.Player, pageNumber, lines,
new PaginationTools.Settings new PaginationTools.Settings
{ {
@ -1590,7 +1590,7 @@ namespace TShockAPI
args.Player.SendErrorMessage("Server Side Characters is disabled."); args.Player.SendErrorMessage("Server Side Characters is disabled.");
return; return;
} }
if( args.Parameters.Count < 1 ) if (args.Parameters.Count < 1)
{ {
args.Player.SendErrorMessage("Correct usage: {0}overridessc|{0}ossc <player name>", Specifier); args.Player.SendErrorMessage("Correct usage: {0}overridessc|{0}ossc <player name>", Specifier);
return; return;
@ -1598,12 +1598,12 @@ namespace TShockAPI
string playerNameToMatch = string.Join(" ", args.Parameters); string playerNameToMatch = string.Join(" ", args.Parameters);
var matchedPlayers = TShock.Utils.FindPlayer(playerNameToMatch); var matchedPlayers = TShock.Utils.FindPlayer(playerNameToMatch);
if( matchedPlayers.Count < 1 ) if (matchedPlayers.Count < 1)
{ {
args.Player.SendErrorMessage("No players matched \"{0}\".", playerNameToMatch); args.Player.SendErrorMessage("No players matched \"{0}\".", playerNameToMatch);
return; return;
} }
else if( matchedPlayers.Count > 1 ) else if (matchedPlayers.Count > 1)
{ {
TShock.Utils.SendMultipleMatchError(args.Player, matchedPlayers.Select(p => p.Name)); TShock.Utils.SendMultipleMatchError(args.Player, matchedPlayers.Select(p => p.Name));
return; return;
@ -1634,7 +1634,7 @@ namespace TShockAPI
{ {
TShock.Config.ForceHalloween = !TShock.Config.ForceHalloween; TShock.Config.ForceHalloween = !TShock.Config.ForceHalloween;
Main.checkHalloween(); Main.checkHalloween();
if (args.Silent) if (args.Silent)
args.Player.SendInfoMessage("{0}abled halloween mode!", (TShock.Config.ForceHalloween ? "en" : "dis")); args.Player.SendInfoMessage("{0}abled halloween mode!", (TShock.Config.ForceHalloween ? "en" : "dis"));
else else
TSPlayer.All.SendInfoMessage("{0} {1}abled halloween mode!", args.Player.Name, (TShock.Config.ForceHalloween ? "en" : "dis")); 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); string message = string.Join(" ", args.Parameters);
TShock.Utils.Broadcast( TShock.Utils.Broadcast(
"(Server Broadcast) " + message, "(Server Broadcast) " + message,
Convert.ToByte(TShock.Config.BroadcastRGB[0]), Convert.ToByte(TShock.Config.BroadcastRGB[1]), Convert.ToByte(TShock.Config.BroadcastRGB[0]), Convert.ToByte(TShock.Config.BroadcastRGB[1]),
Convert.ToByte(TShock.Config.BroadcastRGB[2])); 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!"); string reason = ((args.Parameters.Count > 0) ? "Server shutting down: " + String.Join(" ", args.Parameters) : "Server shutting down!");
TShock.Utils.StopServer(true, reason); TShock.Utils.StopServer(true, reason);
} }
private static void Restart(CommandArgs args) private static void Restart(CommandArgs args)
{ {
if (TShock.NoRestart) if (TShock.NoRestart)
@ -1787,55 +1787,56 @@ namespace TShockAPI
if (args.Parameters.Count > 0) if (args.Parameters.Count > 0)
subCommand = args.Parameters[0]; subCommand = args.Parameters[0];
switch(subCommand.ToLower()) switch (subCommand.ToLower())
{ {
case "listusers": case "listusers":
{
int pageNumber;
if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
return;
Dictionary<string,int> restUsersTokens = new Dictionary<string,int>();
foreach (Rests.SecureRest.TokenData tokenData in TShock.RestApi.Tokens.Values)
{ {
if (restUsersTokens.ContainsKey(tokenData.Username)) int pageNumber;
restUsersTokens[tokenData.Username]++; if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
else return;
restUsersTokens.Add(tokenData.Username, 1);
}
List<string> restUsers = new List<string>( Dictionary<string, int> restUsersTokens = new Dictionary<string, int>();
restUsersTokens.Select(ut => string.Format("{0} ({1} tokens)", ut.Key, ut.Value))); foreach (Rests.SecureRest.TokenData tokenData in TShock.RestApi.Tokens.Values)
{
PaginationTools.SendPage( if (restUsersTokens.ContainsKey(tokenData.Username))
args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(restUsers), new PaginationTools.Settings { restUsersTokens[tokenData.Username]++;
NothingToDisplayString = "There are currently no active REST users.", else
HeaderFormat = "Active REST Users ({0}/{1}):", restUsersTokens.Add(tokenData.Username, 1);
FooterFormat = "Type {0}rest listusers {{0}} for more.".SFormat(Specifier)
} }
);
break; List<string> restUsers = new List<string>(
} 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": case "destroytokens":
{ {
TShock.RestApi.Tokens.Clear(); TShock.RestApi.Tokens.Clear();
args.Player.SendSuccessMessage("All REST tokens have been destroyed."); args.Player.SendSuccessMessage("All REST tokens have been destroyed.");
break; break;
} }
default: default:
{ {
args.Player.SendInfoMessage("Available REST Sub-Commands:"); 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("listusers - Lists all REST users and their current active tokens.", Color.White);
args.Player.SendMessage("destroytokens - Destroys all current REST tokens.", Color.White); args.Player.SendMessage("destroytokens - Destroys all current REST tokens.", Color.White);
break; break;
} }
} }
} }
#endregion Server Maintenence Commands #endregion Server Maintenence Commands
#region Cause Events and Spawn Monsters Commands #region Cause Events and Spawn Monsters Commands
private static void DropMeteor(CommandArgs args) private static void DropMeteor(CommandArgs args)
{ {
@ -1979,7 +1980,7 @@ namespace TShockAPI
if (result > 0) if (result > 0)
{ {
args.Player.SendSuccessMessage("Removed {0} players from the angler quest completion list for today.", result); 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. //this will always tell the client that they have not done the quest today.
ply.SendData((PacketTypes)74, ""); ply.SendData((PacketTypes)74, "");
@ -2236,7 +2237,7 @@ namespace TShockAPI
private static void Spawn(CommandArgs args) 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."); args.Player.SendSuccessMessage("Teleported to the map's spawnpoint.");
} }
@ -2501,34 +2502,34 @@ namespace TShockAPI
if (!args.Player.TPAllow) if (!args.Player.TPAllow)
args.Player.SendSuccessMessage("You have removed your teleportation protection."); args.Player.SendSuccessMessage("You have removed your teleportation protection.");
if (args.Player.TPAllow) 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; args.Player.TPAllow = !args.Player.TPAllow;
} }
private static void Warp(CommandArgs args) private static void Warp(CommandArgs args)
{ {
bool hasManageWarpPermission = args.Player.HasPermission(Permissions.managewarp); bool hasManageWarpPermission = args.Player.HasPermission(Permissions.managewarp);
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
if (hasManageWarpPermission) if (hasManageWarpPermission)
{ {
args.Player.SendInfoMessage("Invalid syntax! Proper syntax: {0}warp [command] [arguments]", Specifier); 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("Commands: add, del, hide, list, send, [warpname]");
args.Player.SendInfoMessage("Arguments: add [warp name], del [warp name], list [page]"); 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("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); args.Player.SendInfoMessage("Examples: {0}warp add foobar, {0}warp hide foobar true, {0}warp foobar", Specifier);
return; return;
} }
else else
{ {
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp [name] or {0}warp list <page>", Specifier); args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp [name] or {0}warp list <page>", Specifier);
return; return;
} }
} }
if (args.Parameters[0].Equals("list")) if (args.Parameters[0].Equals("list"))
{ {
#region List warps #region List warps
int pageNumber; int pageNumber;
if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
return; return;
@ -2542,98 +2543,98 @@ namespace TShockAPI
FooterFormat = "Type {0}warp list {{0}} for more.".SFormat(Specifier), FooterFormat = "Type {0}warp list {{0}} for more.".SFormat(Specifier),
NothingToDisplayString = "There are currently no warps defined." NothingToDisplayString = "There are currently no warps defined."
}); });
#endregion #endregion
} }
else if (args.Parameters[0].ToLower() == "add" && hasManageWarpPermission) else if (args.Parameters[0].ToLower() == "add" && hasManageWarpPermission)
{ {
#region Add warp #region Add warp
if (args.Parameters.Count == 2) if (args.Parameters.Count == 2)
{ {
string warpName = args.Parameters[1]; string warpName = args.Parameters[1];
if (warpName == "list" || warpName == "hide" || warpName == "del" || warpName == "add") if (warpName == "list" || warpName == "hide" || warpName == "del" || warpName == "add")
{ {
args.Player.SendErrorMessage("Name reserved, use a different name."); args.Player.SendErrorMessage("Name reserved, use a different name.");
} }
else if (TShock.Warps.Add(args.Player.TileX, args.Player.TileY, warpName)) else if (TShock.Warps.Add(args.Player.TileX, args.Player.TileY, warpName))
{ {
args.Player.SendSuccessMessage("Warp added: " + warpName); args.Player.SendSuccessMessage("Warp added: " + warpName);
} }
else else
{ {
args.Player.SendErrorMessage("Warp " + warpName + " already exists."); args.Player.SendErrorMessage("Warp " + warpName + " already exists.");
} }
} }
else else
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp add [name]", Specifier); args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp add [name]", Specifier);
#endregion #endregion
} }
else if (args.Parameters[0].ToLower() == "del" && hasManageWarpPermission) else if (args.Parameters[0].ToLower() == "del" && hasManageWarpPermission)
{ {
#region Del warp #region Del warp
if (args.Parameters.Count == 2) if (args.Parameters.Count == 2)
{ {
string warpName = args.Parameters[1]; string warpName = args.Parameters[1];
if (TShock.Warps.Remove(warpName)) if (TShock.Warps.Remove(warpName))
{ {
args.Player.SendSuccessMessage("Warp deleted: " + warpName); args.Player.SendSuccessMessage("Warp deleted: " + warpName);
} }
else else
args.Player.SendErrorMessage("Could not find the specified warp."); args.Player.SendErrorMessage("Could not find the specified warp.");
} }
else else
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp del [name]", Specifier); args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp del [name]", Specifier);
#endregion #endregion
} }
else if (args.Parameters[0].ToLower() == "hide" && hasManageWarpPermission) else if (args.Parameters[0].ToLower() == "hide" && hasManageWarpPermission)
{ {
#region Hide warp #region Hide warp
if (args.Parameters.Count == 3) if (args.Parameters.Count == 3)
{ {
string warpName = args.Parameters[1]; string warpName = args.Parameters[1];
bool state = false; bool state = false;
if (Boolean.TryParse(args.Parameters[2], out state)) if (Boolean.TryParse(args.Parameters[2], out state))
{ {
if (TShock.Warps.Hide(args.Parameters[1], state)) if (TShock.Warps.Hide(args.Parameters[1], state))
{ {
if (state) if (state)
args.Player.SendSuccessMessage("Warp " + warpName + " is now private."); args.Player.SendSuccessMessage("Warp " + warpName + " is now private.");
else else
args.Player.SendSuccessMessage("Warp " + warpName + " is now public."); args.Player.SendSuccessMessage("Warp " + warpName + " is now public.");
} }
else else
args.Player.SendErrorMessage("Could not find specified warp."); args.Player.SendErrorMessage("Could not find specified warp.");
} }
else else
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp hide [name] <true/false>", Specifier); args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp hide [name] <true/false>", Specifier);
} }
else else
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp hide [name] <true/false>", Specifier); args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp hide [name] <true/false>", Specifier);
#endregion #endregion
} }
else if (args.Parameters[0].ToLower() == "send" && args.Player.HasPermission(Permissions.tpothers)) else if (args.Parameters[0].ToLower() == "send" && args.Player.HasPermission(Permissions.tpothers))
{ {
#region Warp send #region Warp send
if (args.Parameters.Count < 3) if (args.Parameters.Count < 3)
{ {
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp send [player] [warpname]", Specifier); args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp send [player] [warpname]", Specifier);
return; return;
} }
var foundplr = TShock.Utils.FindPlayer(args.Parameters[1]); var foundplr = TShock.Utils.FindPlayer(args.Parameters[1]);
if (foundplr.Count == 0) if (foundplr.Count == 0)
{ {
args.Player.SendErrorMessage("Invalid player!"); args.Player.SendErrorMessage("Invalid player!");
return; return;
} }
else if (foundplr.Count > 1) else if (foundplr.Count > 1)
{ {
TShock.Utils.SendMultipleMatchError(args.Player, foundplr.Select(p => p.Name)); TShock.Utils.SendMultipleMatchError(args.Player, foundplr.Select(p => p.Name));
return; return;
} }
string warpName = args.Parameters[2]; string warpName = args.Parameters[2];
var warp = TShock.Warps.Find(warpName); var warp = TShock.Warps.Find(warpName);
var plr = foundplr[0]; var plr = foundplr[0];
if (warp.Position != Point.Zero) if (warp.Position != Point.Zero)
{ {
if (plr.Teleport(warp.Position.X * 16, warp.Position.Y * 16)) if (plr.Teleport(warp.Position.X * 16, warp.Position.Y * 16))
@ -2646,22 +2647,22 @@ namespace TShockAPI
{ {
args.Player.SendErrorMessage("Specified warp not found."); args.Player.SendErrorMessage("Specified warp not found.");
} }
#endregion #endregion
} }
else else
{ {
string warpName = String.Join(" ", args.Parameters); string warpName = String.Join(" ", args.Parameters);
var warp = TShock.Warps.Find(warpName); var warp = TShock.Warps.Find(warpName);
if (warp != null) if (warp != null)
{ {
if (args.Player.Teleport(warp.Position.X * 16, warp.Position.Y * 16)) if (args.Player.Teleport(warp.Position.X * 16, warp.Position.Y * 16))
args.Player.SendSuccessMessage("Warped to " + warpName + "."); args.Player.SendSuccessMessage("Warped to " + warpName + ".");
} }
else else
{ {
args.Player.SendErrorMessage("The specified warp was not found."); args.Player.SendErrorMessage("The specified warp was not found.");
} }
} }
} }
#endregion Teleport Commands #endregion Teleport Commands
@ -2758,7 +2759,7 @@ namespace TShockAPI
"parent <group> <parent group> - Changes a group's parent group.", "parent <group> <parent group> - Changes a group's parent group.",
"prefix <group> <prefix> - Changes a group's prefix.", "prefix <group> <prefix> - Changes a group's prefix.",
"suffix <group> <suffix> - Changes a group's suffix." "suffix <group> <suffix> - Changes a group's suffix."
}; };
PaginationTools.SendPage(args.Player, pageNumber, lines, PaginationTools.SendPage(args.Player, pageNumber, lines,
new PaginationTools.Settings new PaginationTools.Settings
@ -3234,7 +3235,7 @@ namespace TShockAPI
"del <item> - Deletes an item ban.", "del <item> - Deletes an item ban.",
"disallow <item> <group> - Disallows a group from using an item.", "disallow <item> <group> - Disallows a group from using an item.",
"list [page] - Lists all item bans." "list [page] - Lists all item bans."
}; };
PaginationTools.SendPage(args.Player, pageNumber, lines, PaginationTools.SendPage(args.Player, pageNumber, lines,
new PaginationTools.Settings new PaginationTools.Settings
@ -3404,7 +3405,7 @@ namespace TShockAPI
"del <projectile ID> - Deletes an projectile ban.", "del <projectile ID> - Deletes an projectile ban.",
"disallow <projectile ID> <group> - Disallows a group from using a projectile.", "disallow <projectile ID> <group> - Disallows a group from using a projectile.",
"list [page] - Lists all projectile bans." "list [page] - Lists all projectile bans."
}; };
PaginationTools.SendPage(args.Player, pageNumber, lines, PaginationTools.SendPage(args.Player, pageNumber, lines,
new PaginationTools.Settings new PaginationTools.Settings
@ -3573,7 +3574,7 @@ namespace TShockAPI
"del <tile ID> - Deletes a tile ban.", "del <tile ID> - Deletes a tile ban.",
"disallow <tile ID> <group> - Disallows a group from place a tile.", "disallow <tile ID> <group> - Disallows a group from place a tile.",
"list [page] - Lists all tile bans." "list [page] - Lists all tile bans."
}; };
PaginationTools.SendPage(args.Player, pageNumber, lines, PaginationTools.SendPage(args.Player, pageNumber, lines,
new PaginationTools.Settings new PaginationTools.Settings
@ -3592,7 +3593,7 @@ namespace TShockAPI
if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
return; return;
IEnumerable<Int16> tileIds = from tileBan in TShock.TileBans.TileBans IEnumerable<Int16> tileIds = from tileBan in TShock.TileBans.TileBans
select tileBan.ID; select tileBan.ID;
PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(tileIds), PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(tileIds),
new PaginationTools.Settings new PaginationTools.Settings
{ {
@ -3677,11 +3678,12 @@ namespace TShockAPI
if (String.Equals(args.Parameters[0], "default", StringComparison.CurrentCultureIgnoreCase)) if (String.Equals(args.Parameters[0], "default", StringComparison.CurrentCultureIgnoreCase))
{ {
TShock.Config.DefaultMaximumSpawns = NPC.defaultMaxSpawns = 5; TShock.Config.DefaultMaximumSpawns = NPC.defaultMaxSpawns = 5;
if (args.Silent) if (args.Silent)
{ {
args.Player.SendInfoMessage("Changed the maximum spawns to 5."); args.Player.SendInfoMessage("Changed the maximum spawns to 5.");
} }
else { else
{
TSPlayer.All.SendInfoMessage("{0} changed the maximum spawns to 5.", args.Player.Name); TSPlayer.All.SendInfoMessage("{0} changed the maximum spawns to 5.", args.Player.Name);
} }
return; return;
@ -3699,7 +3701,8 @@ namespace TShockAPI
{ {
args.Player.SendInfoMessage("Changed the maximum spawns to {0}.", maxSpawns); 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); 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)) if (String.Equals(args.Parameters[0], "default", StringComparison.CurrentCultureIgnoreCase))
{ {
TShock.Config.DefaultSpawnRate = NPC.defaultSpawnRate = 600; TShock.Config.DefaultSpawnRate = NPC.defaultSpawnRate = 600;
if (args.Silent) if (args.Silent)
{ {
args.Player.SendInfoMessage("Changed the spawn rate to 600."); args.Player.SendInfoMessage("Changed the spawn rate to 600.");
} }
else { else
{
TSPlayer.All.SendInfoMessage("{0} changed the spawn rate to 600.", args.Player.Name); TSPlayer.All.SendInfoMessage("{0} changed the spawn rate to 600.", args.Player.Name);
} }
return; return;
@ -3732,11 +3736,12 @@ namespace TShockAPI
return; return;
} }
TShock.Config.DefaultSpawnRate = NPC.defaultSpawnRate = spawnRate; TShock.Config.DefaultSpawnRate = NPC.defaultSpawnRate = spawnRate;
if (args.Silent) if (args.Silent)
{ {
args.Player.SendInfoMessage("Changed the spawn rate to {0}.", spawnRate); 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); 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)); args.Player.SendInfoMessage("The current time is {0}:{1:D2}.", (int)Math.Floor(time), (int)Math.Round((time % 1.0) * 60.0));
return; return;
} }
switch (args.Parameters[0].ToLower()) switch (args.Parameters[0].ToLower())
{ {
case "day": case "day":
@ -3911,8 +3916,8 @@ namespace TShockAPI
return; return;
} }
float speed; int speed;
if (!float.TryParse(args.Parameters[0], out speed)) if (!int.TryParse(args.Parameters[0], out speed))
{ {
args.Player.SendErrorMessage("Invalid wind speed!"); args.Player.SendErrorMessage("Invalid wind speed!");
return; return;
@ -3927,7 +3932,7 @@ namespace TShockAPI
#endregion Time/PvpFun Commands #endregion Time/PvpFun Commands
#region Region Commands #region Region Commands
private static void Region(CommandArgs args) private static void Region(CommandArgs args)
{ {
@ -4230,11 +4235,11 @@ namespace TShockAPI
break; break;
List<string> lines = new List<string> List<string> lines = new List<string>
{ {
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.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("Owner: ", region.Owner),
string.Concat("Protected: ", region.DisableBuild.ToString()), string.Concat("Protected: ", region.DisableBuild.ToString()),
}; };
if (region.AllowedIDs.Count > 0) if (region.AllowedIDs.Count > 0)
{ {
@ -4282,8 +4287,8 @@ namespace TShockAPI
// Preferring dotted lines as those should easily be distinguishable from actual wires. // Preferring dotted lines as those should easily be distinguishable from actual wires.
if ((boundaryPoint.X + boundaryPoint.Y & 1) == 0) if ((boundaryPoint.X + boundaryPoint.Y & 1) == 0)
{ {
// Could be improved by sending raw tile data to the client instead but not really // 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 // worth the effort as chances are very low that overwriting the wire for a few
// nanoseconds will cause much trouble. // nanoseconds will cause much trouble.
Tile tile = Main.tile[boundaryPoint.X, boundaryPoint.Y]; Tile tile = Main.tile[boundaryPoint.X, boundaryPoint.Y];
bool oldWireState = tile.wire(); bool oldWireState = tile.wire();
@ -4423,21 +4428,21 @@ namespace TShockAPI
return; return;
List<string> lines = new List<string> { List<string> lines = new List<string> {
"set <1/2> - Sets the temporary region points.", "set <1/2> - Sets the temporary region points.",
"clear - Clears the temporary region points.", "clear - Clears the temporary region points.",
"define <name> - Defines the region with the given name.", "define <name> - Defines the region with the given name.",
"delete <name> - Deletes the given region.", "delete <name> - Deletes the given region.",
"name [-u][-z][-p] - Shows the name of the region at the given point.", "name [-u][-z][-p] - Shows the name of the region at the given point.",
"list - Lists all regions.", "list - Lists all regions.",
"resize <region> <u/d/l/r> <amount> - Resizes a region.", "resize <region> <u/d/l/r> <amount> - Resizes a region.",
"allow <user> <region> - Allows a user to a region.", "allow <user> <region> - Allows a user to a region.",
"remove <user> <region> - Removes a user from a region.", "remove <user> <region> - Removes a user from a region.",
"allowg <group> <region> - Allows a user group to a region.", "allowg <group> <region> - Allows a user group to a region.",
"removeg <group> <region> - Removes a user group from a region.", "removeg <group> <region> - Removes a user group from a region.",
"info <region> [-d] - Displays several information about the given region.", "info <region> [-d] - Displays several information about the given region.",
"protect <name> <true/false> - Sets whether the tiles inside the region are protected or not.", "protect <name> <true/false> - Sets whether the tiles inside the region are protected or not.",
"z <name> <#> - Sets the z-order of the region.", "z <name> <#> - Sets the z-order of the region.",
}; };
if (args.Player.HasPermission(Permissions.tp)) if (args.Player.HasPermission(Permissions.tp))
lines.Add("tp <region> - Teleports you to the given region's center."); lines.Add("tp <region> - Teleports you to the given region's center.");
@ -4454,7 +4459,7 @@ namespace TShockAPI
} }
} }
#endregion Region Commands #endregion Region Commands
#region World Protection Commands #region World Protection Commands
@ -4522,15 +4527,15 @@ namespace TShockAPI
} }
args.Player.SendSuccessMessage("{0}{1} help: ", Specifier, command.Name); args.Player.SendSuccessMessage("{0}{1} help: ", Specifier, command.Name);
if (command.HelpDesc == null) if (command.HelpDesc == null)
{ {
args.Player.SendInfoMessage(command.HelpText); args.Player.SendInfoMessage(command.HelpText);
return; return;
} }
foreach (string line in command.HelpDesc) foreach (string line in command.HelpDesc)
{ {
args.Player.SendInfoMessage(line); args.Player.SendInfoMessage(line);
} }
} }
} }
@ -4545,7 +4550,7 @@ namespace TShockAPI
bool displayIdsRequested = false; bool displayIdsRequested = false;
int pageNumber = 1; int pageNumber = 1;
if (!invalidUsage) if (!invalidUsage)
{ {
foreach (string parameter in args.Parameters) 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); args.Player.SendSuccessMessage("Online Players ({0}/{1})", TShock.Utils.ActivePlayers(), TShock.Config.MaxSlots);
PaginationTools.SendPage( PaginationTools.SendPage(
args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(TShock.Utils.GetPlayers(displayIdsRequested)), args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(TShock.Utils.GetPlayers(displayIdsRequested)),
new PaginationTools.Settings new PaginationTools.Settings
{ {
IncludeHeader = false, IncludeHeader = false,
FooterFormat = string.Format("Type {0}who {1}{{0}} for more.", Specifier, displayIdsRequested ? "-i " : string.Empty) 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 <command or alias>", Specifier); args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}aliases <command or alias>", Specifier);
return; return;
} }
string givenCommandName = string.Join(" ", args.Parameters); 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."); args.Player.SendErrorMessage("Please enter a proper command name or alias.");
return; return;
} }
@ -4904,10 +4910,11 @@ namespace TShockAPI
commandName = givenCommandName; commandName = givenCommandName;
bool didMatch = false; 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) if (matchingCommand.Names.Count > 1)
args.Player.SendInfoMessage( 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 else
args.Player.SendInfoMessage("{0}{1} defines no aliases.", Specifier, matchingCommand.Name); 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)) 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++; kills++;
} }
} }
TSPlayer.All.SendInfoMessage("{0} butchered {1} NPCs.", args.Player.Name, kills); TSPlayer.All.SendInfoMessage("{0} butchered {1} NPCs.", args.Player.Name, kills);
} }
private static void Item(CommandArgs args) private static void Item(CommandArgs args)
{ {
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
@ -5138,12 +5145,12 @@ namespace TShockAPI
else if (!item.accessory && prefixIds.Contains(42)) else if (!item.accessory && prefixIds.Contains(42))
prefixIds.Remove(76); prefixIds.Remove(76);
if (prefixIds.Count > 1) if (prefixIds.Count > 1)
{ {
TShock.Utils.SendMultipleMatchError(args.Player, prefixIds.Select(p => p.ToString())); TShock.Utils.SendMultipleMatchError(args.Player, prefixIds.Select(p => p.ToString()));
return; return;
} }
else if (prefixIds.Count == 0) else if (prefixIds.Count == 0)
{ {
args.Player.SendErrorMessage("No prefix matched \"{0}\".", prefixidOrName); args.Player.SendErrorMessage("No prefix matched \"{0}\".", prefixidOrName);
return; return;
@ -5174,7 +5181,7 @@ namespace TShockAPI
args.Player.SendErrorMessage("Your inventory seems full."); args.Player.SendErrorMessage("Your inventory seems full.");
} }
} }
private static void RenameNPC(CommandArgs args) private static void RenameNPC(CommandArgs args)
{ {
if (args.Parameters.Count != 2) if (args.Parameters.Count != 2)
@ -5196,7 +5203,7 @@ namespace TShockAPI
TShock.Utils.SendMultipleMatchError(args.Player, npcs.Select(n => n.name)); TShock.Utils.SendMultipleMatchError(args.Player, npcs.Select(n => n.name));
return; return;
} }
else if (args.Parameters[1].Length >200) else if (args.Parameters[1].Length > 200)
{ {
args.Player.SendErrorMessage("New name is too large!"); args.Player.SendErrorMessage("New name is too large!");
return; return;
@ -5206,26 +5213,26 @@ namespace TShockAPI
npcId = npcs[0].netID; npcId = npcs[0].netID;
} }
} }
int done=0; int done = 0;
for (int i = 0; i < Main.npc.Length; i++) 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))) 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]; Main.npc[i].displayName = args.Parameters[1];
NetMessage.SendData(56, -1, -1, args.Parameters[1], i, 0f, 0f, 0f, 0); NetMessage.SendData(56, -1, -1, args.Parameters[1], i, 0f, 0f, 0f, 0);
done++; 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 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) private static void Give(CommandArgs args)
{ {
if (args.Parameters.Count < 2) if (args.Parameters.Count < 2)
@ -5307,7 +5314,7 @@ namespace TShockAPI
{ {
args.Player.SendErrorMessage("You cannot spawn banned items."); args.Player.SendErrorMessage("You cannot spawn banned items.");
} }
} }
else else
{ {
@ -5396,7 +5403,7 @@ namespace TShockAPI
{ {
if (time < 0 || time > short.MaxValue) if (time < 0 || time > short.MaxValue)
time = 60; 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!", args.Player.SendSuccessMessage(string.Format("You have buffed yourself with {0}({1}) for {2} seconds!",
TShock.Utils.GetBuffName(id), TShock.Utils.GetBuffDescription(id), (time))); TShock.Utils.GetBuffName(id), TShock.Utils.GetBuffDescription(id), (time)));
} }
@ -5447,7 +5454,7 @@ namespace TShockAPI
{ {
if (time < 0 || time > short.MaxValue) if (time < 0 || time > short.MaxValue)
time = 60; 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!", args.Player.SendSuccessMessage(string.Format("You have buffed {0} with {1}({2}) for {3} seconds!",
foundplr[0].Name, TShock.Utils.GetBuffName(id), foundplr[0].Name, TShock.Utils.GetBuffName(id),
TShock.Utils.GetBuffDescription(id), (time))); TShock.Utils.GetBuffDescription(id), (time)));

View file

@ -258,7 +258,7 @@ namespace TShockAPI
private object ServerReload(RestRequestArgs args) private object ServerReload(RestRequestArgs args)
{ {
TShock.Utils.Reload(new TSRestPlayer(args.TokenData.Username, TShock.Groups.GetGroupByName(args.TokenData.UserGroupName))); 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."); 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}, {"username", null == player.User ? "" : player.User.Name},
{"ip", player.IP}, {"ip", player.IP},
{"group", player.Group.Name}, {"group", player.Group.Name},
{"registered", null == player.User ? "" : player.User.Registered},
{"position", player.TileX + "," + player.TileY}, {"position", player.TileX + "," + player.TileY},
{"inventory", string.Join(", ", activeItems.Select(p => (p.name + ":" + p.stack)))}, {"inventory", string.Join(", ", activeItems.Select(p => (p.name + ":" + p.stack)))},
{"buffs", string.Join(", ", player.TPlayer.buffType)} {"buffs", string.Join(", ", player.TPlayer.buffType)}
@ -837,6 +838,7 @@ namespace TShockAPI
{"username", null == player.User ? "" : player.User.Name}, {"username", null == player.User ? "" : player.User.Name},
{"ip", player.IP}, {"ip", player.IP},
{"group", player.Group.Name}, {"group", player.Group.Name},
{"registered", null == player.User ? "" : player.User.Registered},
{"position", player.TileX + "," + player.TileY}, {"position", player.TileX + "," + player.TileY},
{"inventory", string.Join(", ", inventory.Select(p => (p.name + ":" + p.stack)))}, {"inventory", string.Join(", ", inventory.Select(p => (p.name + ":" + p.stack)))},
{"armor", string.Join(", ", equipment.Select(p => (p.netID + ":" + p.prefix)))}, {"armor", string.Join(", ", equipment.Select(p => (p.netID + ":" + p.prefix)))},