Add precise /tp, fixes #296

This commit is contained in:
UnknownShadow200 2017-10-22 16:21:30 +11:00
parent 3ba1b796e5
commit b062fbefa4
4 changed files with 29 additions and 20 deletions

View File

@ -105,7 +105,8 @@ namespace MCGalaxy.Commands {
} }
if (value < min || value > max) { if (value < min || value > max) {
Player.Message(p, "{0} must be between {1} and {2}", argName, min, max); Player.Message(p, "{0} must be between {1} and {2}", argName,
min.ToString("F4"), max.ToString("F4"));
return false; return false;
} }
result = value; return true; result = value; return true;

View File

@ -26,14 +26,20 @@ namespace MCGalaxy.Commands.Misc {
public override LevelPermission defaultRank { get { return LevelPermission.Guest; } } public override LevelPermission defaultRank { get { return LevelPermission.Guest; } }
public override bool SuperUseable { get { return false; } } public override bool SuperUseable { get { return false; } }
public override CommandAlias[] Aliases { public override CommandAlias[] Aliases {
get { return new [] { new CommandAlias("Teleport") }; } get { return new [] { new CommandAlias("Teleport"), new CommandAlias("TPP", "-precise") }; }
} }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
string[] args = message.SplitSpaces(); string[] args = message.SplitSpaces();
if (message.Length == 0 || args.Length > 3) { Help(p); return; } if (message.Length == 0 || args.Length > 4) { Help(p); return; }
if (args.Length == 3) { TeleportCoords(p, args); return; } if (args.Length == 3) { TeleportCoords(p, args); return; }
if (message.CaselessStarts("-precise ")) {
if (args.Length != 4) { Help(p); return; }
TeleportCoordsPrecise(p, args);
return;
}
Player target = null; Player target = null;
PlayerBot bot = null; PlayerBot bot = null;
if (args.Length == 1) { if (args.Length == 1) {
@ -73,6 +79,15 @@ namespace MCGalaxy.Commands.Misc {
PlayerActions.MoveCoords(p, P.X, P.Y, P.Z, p.Rot.RotY, p.Rot.HeadX); PlayerActions.MoveCoords(p, P.X, P.Y, P.Z, p.Rot.RotY, p.Rot.HeadX);
} }
static void TeleportCoordsPrecise(Player p, string[] args) {
Vec3S32 P = new Vec3S32(p.Pos.X, p.Pos.Y + Entities.CharacterHeight, p.Pos.Z);
if (!CommandParser.GetCoords(p, args, 1, ref P)) return;
SavePreTeleportState(p);
Position pos = new Position(P.X, P.Y - Entities.CharacterHeight, P.Z);
p.SendPos(Entities.SelfID, pos, p.Rot);
}
static void SavePreTeleportState(Player p) { static void SavePreTeleportState(Player p) {
p.PreTeleportMap = p.level.name; p.PreTeleportMap = p.level.name;
p.PreTeleportPos = p.Pos; p.PreTeleportPos = p.Pos;
@ -97,14 +112,15 @@ namespace MCGalaxy.Commands.Misc {
} }
public override void Help(Player p) { public override void Help(Player p) {
Player.Message(p, "%HUse ~ before a coordinate to move relative to current position");
Player.Message(p, "%T/TP [x y z]"); Player.Message(p, "%T/TP [x y z]");
Player.Message(p, "%HTeleports yourself to the given block coordinates."); Player.Message(p, "%HTeleports yourself to the given block coordinates.");
Player.Message(p, "%HUse ~ before a coordinate to move relative to current position"); Player.Message(p, "%T/TP -precise [x y z]");
Player.Message(p, "%HTeleports using precise units. (32 units = 1 block)");
Player.Message(p, "%T/TP [player]"); Player.Message(p, "%T/TP [player]");
Player.Message(p, "%HTeleports yourself to that player."); Player.Message(p, "%HTeleports yourself to that player.");
Player.Message(p, "%T/TP bot [name]"); Player.Message(p, "%T/TP bot [name]");
Player.Message(p, "%HTeleports yourself to that bot."); Player.Message(p, "%HTeleports yourself to that bot.");
Player.Message(p, "%H Use /p2p to teleport a given player to a different player.");
} }
} }
} }

View File

@ -138,21 +138,13 @@ namespace MCGalaxy {
static bool CheckFloat(Player p, string raw, string variable, static bool CheckFloat(Player p, string raw, string variable,
ref int modify, int scale, float min, float max) { ref int modify, int scale, float min, float max) {
float value; float value = 0;
min /= scale; max /= scale; min /= scale; max /= scale;
if (!CommandParser.GetReal(p, raw, variable, ref value, min, max)) return false;
if (!Utils.TryParseDecimal(raw, out value)) {
Player.Message(p, "Env: \"{0}\" is not a valid decimal.", value); modify = (int)(value * scale);
return false; Player.Message(p, "Set {0} for {1} %Sto {2}", variable, p.level.ColoredName, value.ToString("F4"));
} else if (value < min || value > max) { return true;
Player.Message(p, "Env: \"{0}\" must be between {1} and {2}.",
value, min.ToString("F4"), max.ToString("F4"));
return false;
} else {
modify = (int)(value * scale);
Player.Message(p, "Set {0} for {1} %Sto {2}", variable, p.level.ColoredName, value.ToString("F4"));
return true;
}
} }
static bool IsResetString(string value) { static bool IsResetString(string value) {

View File

@ -245,6 +245,6 @@ namespace MCGalaxy {
} }
public enum EntityProp : byte { public enum EntityProp : byte {
RotX = 0, RotY = 1, RotZ = 2, RotX = 0, RotY = 1, RotZ = 2, ScaleX = 3, ScaleY = 4, ScaleZ = 5,
} }
} }