Add logout command and pos command. Closes #872 and Closes #887

This commit is contained in:
Zack Piispanen 2015-03-25 21:17:11 -04:00
parent 42a505e18f
commit 015cf61b77
3 changed files with 83 additions and 0 deletions

View file

@ -28,6 +28,7 @@ using System.Threading;
using Terraria; using Terraria;
using TShockAPI.DB; using TShockAPI.DB;
using TerrariaApi.Server; using TerrariaApi.Server;
using TShockAPI.Hooks;
namespace TShockAPI namespace TShockAPI
{ {
@ -228,6 +229,12 @@ namespace TShockAPI
DoLog = false, DoLog = false,
HelpText = "Logs you into an account." HelpText = "Logs you into an account."
}); });
add(new Command(Permissions.canlogout, Logout, "logout")
{
AllowServer = false,
DoLog = false,
HelpText = "Logs you out of your current account."
});
add(new Command(Permissions.canchangepassword, PasswordUser, "password") add(new Command(Permissions.canchangepassword, PasswordUser, "password")
{ {
AllowServer = false, AllowServer = false,
@ -442,6 +449,11 @@ namespace TShockAPI
AllowServer = false, AllowServer = false,
HelpText = "Teleports you to tile coordinates." HelpText = "Teleports you to tile coordinates."
}); });
add(new Command(Permissions.getpos, GetPos, "pos")
{
AllowServer = false,
HelpText = "Returns the user's or specified user's current position."
});
add(new Command(Permissions.tpallow, TPAllow, "tpallow") add(new Command(Permissions.tpallow, TPAllow, "tpallow")
{ {
AllowServer = false, AllowServer = false,
@ -845,6 +857,26 @@ namespace TShockAPI
} }
} }
private static void Logout(CommandArgs args)
{
if (!args.Player.IsLoggedIn)
{
args.Player.SendErrorMessage("You are not logged in.");
return;
}
PlayerHooks.OnPlayerLogout(args.Player);
args.Player.PlayerData = new PlayerData(args.Player);
args.Player.Group = null;
args.Player.tempGroup = TShockAPI.Group.DefaultGroup;
args.Player.UserAccountName = null;
args.Player.UserID = -1;
args.Player.IsLoggedIn = false;
args.Player.SendSuccessMessage("You have been successfully logged out of your account.");
}
private static void PasswordUser(CommandArgs args) private static void PasswordUser(CommandArgs args)
{ {
try try
@ -2324,6 +2356,29 @@ namespace TShockAPI
args.Player.SendSuccessMessage("Teleported to the '{0}'.", target.name); args.Player.SendSuccessMessage("Teleported to the '{0}'.", target.name);
} }
private static void GetPos(CommandArgs args)
{
var player = args.Player.Name;
if (args.Parameters.Count > 0)
{
player = String.Join(" ", args.Parameters);
}
var players = TShock.Utils.FindPlayer(player);
if (players.Count == 0)
{
args.Player.SendErrorMessage("Invalid player!");
}
else if (players.Count > 1)
{
TShock.Utils.SendMultipleMatchError(args.Player, players.Select(p => p.Name));
}
else
{
args.Player.SendSuccessMessage("Location of {0} is ({1}, {2}).", players[0].Name, players[0].TileX, players[0].TileY);
}
}
private static void TPPos(CommandArgs args) private static void TPPos(CommandArgs args)
{ {
if (args.Parameters.Count != 2) if (args.Parameters.Count != 2)

View file

@ -37,6 +37,16 @@ namespace TShockAPI.Hooks
public string Password { get; set; } public string Password { get; set; }
} }
public class PlayerLogoutEventArgs
{
public TSPlayer Player { get; set; }
public PlayerLogoutEventArgs(TSPlayer player)
{
Player = player;
}
}
public class PlayerCommandEventArgs : HandledEventArgs public class PlayerCommandEventArgs : HandledEventArgs
{ {
public TSPlayer Player { get; set; } public TSPlayer Player { get; set; }
@ -62,6 +72,9 @@ namespace TShockAPI.Hooks
public delegate void PlayerPreLoginD(PlayerPreLoginEventArgs e); public delegate void PlayerPreLoginD(PlayerPreLoginEventArgs e);
public static event PlayerPreLoginD PlayerPreLogin; public static event PlayerPreLoginD PlayerPreLogin;
public delegate void PlayerLogoutD(PlayerLogoutEventArgs e);
public static event PlayerLogoutD PlayerLogout;
public delegate void PlayerCommandD(PlayerCommandEventArgs e); public delegate void PlayerCommandD(PlayerCommandEventArgs e);
public static event PlayerCommandD PlayerCommand; public static event PlayerCommandD PlayerCommand;
@ -108,6 +121,15 @@ namespace TShockAPI.Hooks
return args.Handled; return args.Handled;
} }
public static void OnPlayerLogout(TSPlayer ply)
{
if (PlayerLogout == null)
return;
var args = new PlayerLogoutEventArgs(ply);
PlayerLogout(args);
}
public static void OnPlayerChat(TSPlayer ply, string rawtext, ref string tshockText) public static void OnPlayerChat(TSPlayer ply, string rawtext, ref string tshockText)
{ {
if (PlayerChat == null) if (PlayerChat == null)

View file

@ -35,6 +35,9 @@ namespace TShockAPI
[Description("User can login in game")] [Description("User can login in game")]
public static readonly string canlogin = "tshock.account.login"; public static readonly string canlogin = "tshock.account.login";
[Description("User can logout in game")]
public static readonly string canlogout = "tshock.account.logout";
[Description("User can change password in game")] [Description("User can change password in game")]
public static readonly string canchangepassword = "tshock.account.changepassword"; public static readonly string canchangepassword = "tshock.account.changepassword";
@ -225,6 +228,9 @@ namespace TShockAPI
[Description("User can teleport to tile positions.")] [Description("User can teleport to tile positions.")]
public static readonly string tppos = "tshock.tp.pos"; public static readonly string tppos = "tshock.tp.pos";
[Description("User can get the position of players.")]
public static readonly string getpos = "tshock.tp.getpos";
[Description("User can teleport to an NPC.")] [Description("User can teleport to an NPC.")]
public static readonly string tpnpc = "tshock.tp.npc"; public static readonly string tpnpc = "tshock.tp.npc";