Merge /tphere into /tp, add /tppos

This commit is contained in:
MarioE 2014-06-27 21:53:01 -04:00
parent 69529fad38
commit 66b0f3899c
3 changed files with 126 additions and 81 deletions

View file

@ -388,6 +388,11 @@ namespace TShockAPI
HelpText = "Sends you to the world's spawn point."
});
add(new Command(Permissions.tp, TP, "tp")
{
AllowServer = false,
HelpText = "Teleports a player to another player."
});
add(new Command(Permissions.tppos, TPPos, "tppos")
{
AllowServer = false,
HelpText = "Teleports you to another player or a coordinate."
@ -395,12 +400,7 @@ namespace TShockAPI
add(new Command(Permissions.tpallow, TPAllow, "tpallow")
{
AllowServer = false,
HelpText = "Toggles whether other people can teleport to you."
});
add(new Command(Permissions.tphere, TPHere, "tphere")
{
AllowServer = false,
HelpText = "Teleports another player to you."
HelpText = "Toggles whether other people can teleport you."
});
#endregion
#region World Commands
@ -1922,104 +1922,146 @@ namespace TShockAPI
private static void TP(CommandArgs args)
{
if (args.Parameters.Count < 1)
if (args.Parameters.Count != 1 && args.Parameters.Count != 2)
{
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /tp <player>");
args.Player.SendErrorMessage(" /tp <x> <y>");
if (args.Player.Group.HasPermission(Permissions.tpothers))
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /tp <player> [player 2]");
else
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /tp <player>");
return;
}
if(args.Parameters.Count == 2)
if (args.Parameters.Count == 1)
{
float x, y;
if (float.TryParse(args.Parameters[0], out x) && float.TryParse(args.Parameters[1], out y))
var players = TShock.Utils.FindPlayer(args.Parameters[0]);
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.Teleport(x, y);
args.Player.SendSuccessMessage("Teleported!");
var target = players[0];
if (!target.TPAllow && !args.Player.Group.HasPermission(Permissions.tpoverride))
{
args.Player.SendErrorMessage("{0} has disabled players from teleporting.", target.Name);
return;
}
if (args.Player.Teleport(target.TPlayer.position.X, target.TPlayer.position.Y))
{
args.Player.SendSuccessMessage("Teleported to {0}.", target.Name);
if (!args.Player.Group.HasPermission(Permissions.tpsilent))
target.SendInfoMessage("{0} teleported to you.", args.Player.Name);
}
}
}
else
{
string plStr = String.Join(" ", args.Parameters);
var players = TShock.Utils.FindPlayer(plStr);
if (players.Count == 0)
if (!args.Player.Group.HasPermission(Permissions.tpothers))
{
args.Player.SendErrorMessage("Invalid user name.");
args.Player.SendErrorMessage("Proper syntax: /tp <player>");
args.Player.SendErrorMessage(" /tp <x> <y>");
args.Player.SendErrorMessage("You do not have access to this command.");
return;
}
else if (players.Count > 1)
TShock.Utils.SendMultipleMatchError(args.Player, players.Select(p => p.Name));
else if (!players[0].TPAllow && !args.Player.Group.HasPermission(Permissions.tpall))
var players1 = TShock.Utils.FindPlayer(args.Parameters[0]);
var players2 = TShock.Utils.FindPlayer(args.Parameters[1]);
if (players2.Count == 0)
args.Player.SendErrorMessage("Invalid player!");
else if (players2.Count > 1)
TShock.Utils.SendMultipleMatchError(args.Player, players2.Select(p => p.Name));
else if (players1.Count == 0)
{
var plr = players[0];
args.Player.SendErrorMessage(plr.Name + " has prevented users from teleporting to them.");
plr.SendInfoMessage(args.Player.Name + " attempted to teleport to you.");
}
else
{
var plr = players[0];
if (args.Player.Teleport(plr.TPlayer.position.X, plr.TPlayer.position.Y))
if (args.Parameters[0] == "*")
{
args.Player.SendSuccessMessage(string.Format("Teleported to {0}.", plr.Name));
if (!args.Player.Group.HasPermission(Permissions.tphide))
plr.SendInfoMessage(args.Player.Name + " teleported to you.");
if (!args.Player.Group.HasPermission(Permissions.tpallothers))
{
args.Player.SendErrorMessage("You do not have access to this command.");
return;
}
var target = players2[0];
foreach (var source in TShock.Players.Where(p => p != null && p != args.Player))
{
if (!target.TPAllow && !args.Player.Group.HasPermission(Permissions.tpoverride))
continue;
if (source.Teleport(target.TPlayer.position.X, target.TPlayer.position.Y))
{
if (args.Player != source)
{
if (args.Player.Group.HasPermission(Permissions.tpsilent))
source.SendSuccessMessage("You were teleported to {0}.", target.Name);
else
source.SendSuccessMessage("{0} teleported you to {1}.", args.Player.Name, target.Name);
}
if (args.Player != target)
{
if (args.Player.Group.HasPermission(Permissions.tpsilent))
target.SendInfoMessage("{0} was teleported to you.", source.Name);
if (!args.Player.Group.HasPermission(Permissions.tpsilent))
target.SendInfoMessage("{0} teleported {1} to you.", args.Player.Name, source.Name);
}
}
}
args.Player.SendSuccessMessage("Teleported everyone to {0}.", target.Name);
}
else
args.Player.SendErrorMessage("Invalid player!");
}
}
}
private static void TPHere(CommandArgs args)
{
if (args.Parameters.Count < 1)
{
if (args.Player.Group.HasPermission(Permissions.tpallothers))
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /tphere <player|*>");
else if (players1.Count > 1)
TShock.Utils.SendMultipleMatchError(args.Player, players1.Select(p => p.Name));
else
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /tphere <player>");
return;
}
string playerName = String.Join(" ", args.Parameters);
var players = TShock.Utils.FindPlayer(playerName);
if (players.Count == 0)
{
if (playerName == "*")
{
if (!args.Player.Group.HasPermission(Permissions.tpallothers))
var source = players1[0];
if (!source.TPAllow && !args.Player.Group.HasPermission(Permissions.tpoverride))
{
args.Player.SendErrorMessage("You do not have permission to use this command.");
args.Player.SendErrorMessage("{0} has disabled players from teleporting.", source.Name);
return;
}
args.Player.SendInfoMessage(string.Format("You teleported everyone here."));
for (int i = 0; i < Main.maxPlayers; i++)
var target = players2[0];
if (!target.TPAllow && !args.Player.Group.HasPermission(Permissions.tpoverride))
{
if (Main.player[i].active && (Main.player[i] != args.TPlayer))
args.Player.SendErrorMessage("{0} has disabled players from teleporting.", target.Name);
return;
}
args.Player.SendSuccessMessage("Teleported {0} to {1}.", source.Name, target.Name);
if (source.Teleport(target.TPlayer.position.X, target.TPlayer.position.Y))
{
if (args.Player != source)
{
if (TShock.Players[i].Teleport(args.TPlayer.position.X, args.TPlayer.position.Y))
TShock.Players[i].SendSuccessMessage(String.Format("You were teleported to {0}.", args.Player.Name));
if (args.Player.Group.HasPermission(Permissions.tpsilent))
source.SendSuccessMessage("You were teleported to {0}.", target.Name);
else
source.SendSuccessMessage("{0} teleported you to {1}.", args.Player.Name, target.Name);
}
if (args.Player != target)
{
if (args.Player.Group.HasPermission(Permissions.tpsilent))
target.SendInfoMessage("{0} was teleported to you.", source.Name);
if (!args.Player.Group.HasPermission(Permissions.tpsilent))
target.SendInfoMessage("{0} teleported {1} to you.", args.Player.Name, source.Name);
}
}
}
else
args.Player.SendErrorMessage("Invalid player!");
}
else if (players.Count > 1)
}
private static void TPPos(CommandArgs args)
{
if (args.Parameters.Count != 2)
{
TShock.Utils.SendMultipleMatchError(args.Player, players.Select(p => p.Name));
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /tppos <tile x> <tile y>");
return;
}
else
int x, y;
if (!int.TryParse(args.Parameters[0], out x) || !int.TryParse(args.Parameters[1], out y)
|| x < 0 || y < 0 || x >= Main.maxTilesX || y >= Main.maxTilesY)
{
var plr = players[0];
if (plr.Teleport(args.TPlayer.position.X, args.TPlayer.position.Y))
{
plr.SendInfoMessage("You were teleported to {0}.", args.Player.Name);
args.Player.SendSuccessMessage("You teleported {0} here.", plr.Name);
}
args.Player.SendErrorMessage("Invalid tile positions!");
return;
}
args.Player.Teleport(16 * x, 16 * y);
args.Player.SendSuccessMessage("Teleported to {0}, {1}!", x, y);
}
private static void TPAllow(CommandArgs args)
@ -2136,7 +2178,7 @@ namespace TShockAPI
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /warp hide [name] <true/false>");
#endregion
}
else if (args.Parameters[0].ToLower() == "send" && args.Player.Group.HasPermission(Permissions.tphere))
else if (args.Parameters[0].ToLower() == "send" && args.Player.Group.HasPermission(Permissions.tpothers))
{
#region Warp send
if (args.Parameters.Count < 3)

View file

@ -67,7 +67,7 @@ namespace TShockAPI.DB
string.Join(",", Permissions.ban, Permissions.whitelist, "tshock.world.time.*", Permissions.spawnboss,
Permissions.spawnmob, Permissions.managewarp, Permissions.time, Permissions.tp, Permissions.slap,
Permissions.kill, Permissions.logs,
Permissions.immunetokick, Permissions.tphere));
Permissions.immunetokick, Permissions.tpothers));
AddDefaultGroup("trustedadmin", "admin",
string.Join(",", Permissions.maintenance, "tshock.cfg.*", "tshock.world.*", Permissions.butcher, Permissions.item,

View file

@ -207,17 +207,20 @@ namespace TShockAPI
[Description("User can teleport to others.")]
public static readonly string tp = "tshock.tp.self";
[Description("User can teleport people to them.")]
public static readonly string tphere = "tshock.tp.others";
[Description("User can teleport other people.")]
public static readonly string tpothers = "tshock.tp.others";
[Description("Users can stop people from teleporting to them")]
[Description("User can teleport to tile positions.")]
public static readonly string tppos = "tshock.tp.pos";
[Description("Users can stop people from teleporting.")]
public static readonly string tpallow = "tshock.tp.block";
[Description("Users can tp to anyone")]
public static readonly string tpall = "tshock.tp.toall";
[Description("Users can override teleport blocks.")]
public static readonly string tpoverride = "tshock.tp.override";
[Description("Users can tp to people without showing a notice")]
public static readonly string tphide = "tshock.tp.silent";
[Description("Users can teleport to people without showing a notice")]
public static readonly string tpsilent = "tshock.tp.silent";
[Description("User can use /home.")]
public static readonly string home = "tshock.tp.home";