Added the Registered property to REST's players/read endpoints
This commit is contained in:
parent
66f5f9f540
commit
05a4e025f7
3 changed files with 272 additions and 262 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -83,10 +83,10 @@ namespace TShockAPI
|
|||
/// Gets or sets the help text of this command.
|
||||
/// </summary>
|
||||
public string HelpText { get; set; }
|
||||
/// <summary>
|
||||
/// Gets or sets an extended description of this command.
|
||||
/// </summary>
|
||||
public string[] HelpDesc { get; set; }
|
||||
/// <summary>
|
||||
/// Gets or sets an extended description of this command.
|
||||
/// </summary>
|
||||
public string[] HelpDesc { get; set; }
|
||||
/// <summary>
|
||||
/// Gets the name of the command.
|
||||
/// </summary>
|
||||
|
|
@ -111,7 +111,7 @@ namespace TShockAPI
|
|||
|
||||
commandDelegate = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Command(List<string> 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<string>(names);
|
||||
Permissions = new List<string>();
|
||||
}
|
||||
|
|
@ -202,7 +202,7 @@ namespace TShockAPI
|
|||
public static void InitCommands()
|
||||
{
|
||||
List<Command> tshockCommands = new List<Command>(100);
|
||||
Action<Command> add = (cmd) =>
|
||||
Action<Command> 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 <ip> - 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 <player name>", 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<string,int> restUsersTokens = new Dictionary<string,int>();
|
||||
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<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)
|
||||
Dictionary<string, int> restUsersTokens = new Dictionary<string, int>();
|
||||
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<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":
|
||||
{
|
||||
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 <page>", 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 <page>", 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] <true/false>", Specifier);
|
||||
}
|
||||
else
|
||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp hide [name] <true/false>", 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] <true/false>", Specifier);
|
||||
}
|
||||
else
|
||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}warp hide [name] <true/false>", 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 <group> <parent group> - Changes a group's parent group.",
|
||||
"prefix <group> <prefix> - Changes a group's prefix.",
|
||||
"suffix <group> <suffix> - Changes a group's suffix."
|
||||
};
|
||||
};
|
||||
|
||||
PaginationTools.SendPage(args.Player, pageNumber, lines,
|
||||
new PaginationTools.Settings
|
||||
|
|
@ -3234,7 +3235,7 @@ namespace TShockAPI
|
|||
"del <item> - Deletes an item ban.",
|
||||
"disallow <item> <group> - 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 <projectile ID> - Deletes an projectile ban.",
|
||||
"disallow <projectile ID> <group> - 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 <tile ID> - Deletes a tile ban.",
|
||||
"disallow <tile ID> <group> - 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<Int16> 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<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.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<string> lines = new List<string> {
|
||||
"set <1/2> - Sets the temporary region points.",
|
||||
"clear - Clears the temporary region points.",
|
||||
"define <name> - Defines the region with the given name.",
|
||||
"delete <name> - Deletes the given region.",
|
||||
"name [-u][-z][-p] - Shows the name of the region at the given point.",
|
||||
"list - Lists all regions.",
|
||||
"resize <region> <u/d/l/r> <amount> - Resizes a region.",
|
||||
"allow <user> <region> - Allows a user to a region.",
|
||||
"remove <user> <region> - Removes a user from a region.",
|
||||
"allowg <group> <region> - Allows a user group to a region.",
|
||||
"removeg <group> <region> - Removes a user group from a 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.",
|
||||
"z <name> <#> - Sets the z-order of the region.",
|
||||
};
|
||||
"set <1/2> - Sets the temporary region points.",
|
||||
"clear - Clears the temporary region points.",
|
||||
"define <name> - Defines the region with the given name.",
|
||||
"delete <name> - Deletes the given region.",
|
||||
"name [-u][-z][-p] - Shows the name of the region at the given point.",
|
||||
"list - Lists all regions.",
|
||||
"resize <region> <u/d/l/r> <amount> - Resizes a region.",
|
||||
"allow <user> <region> - Allows a user to a region.",
|
||||
"remove <user> <region> - Removes a user from a region.",
|
||||
"allowg <group> <region> - Allows a user group to a region.",
|
||||
"removeg <group> <region> - Removes a user group from a 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.",
|
||||
"z <name> <#> - Sets the z-order of the region.",
|
||||
};
|
||||
if (args.Player.HasPermission(Permissions.tp))
|
||||
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
|
||||
|
||||
|
|
@ -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 <command or alias>", 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)));
|
||||
|
|
|
|||
|
|
@ -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)))},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue