Cleanup /tp and /p2p to have actually somewhat sane code. /tp can no longer be used to teleport two players to each other, use /p2p for that./p2p should not allow you to teleport hidden players either.

This commit is contained in:
UnknownShadow200 2016-02-23 15:06:22 +11:00
parent b27ca19f31
commit a4f87e3d88
2 changed files with 85 additions and 178 deletions

View File

@ -1,96 +1,54 @@
/* /*
* Written by Jack1312 * Written by Jack1312
* *
Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy) Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy)
Dual-licensed under the Educational Community License, Version 2.0 and Dual-licensed under the Educational Community License, Version 2.0 and
the GNU General Public License, Version 3 (the "Licenses"); you may the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses.
*/
namespace MCGalaxy.Commands {
public sealed class CmdP2P : Command {
Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses.
*/
namespace MCGalaxy.Commands
{
public sealed class CmdP2P : Command
{
public override string name { get { return "p2p"; } } public override string name { get { return "p2p"; } }
public override string shortcut { get { return ""; } } public override string shortcut { get { return ""; } }
public override string type { get { return CommandTypes.Moderation; } } public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return false; } } public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } } public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public CmdP2P() { }
public override void Help(Player p) public override void Use(Player p, string message) {
{ if (message == "") { Help(p); return; }
Player.SendMessage(p, "/p2p [Player1] [Player2] - Teleports player 1 to player 2."); string[] args = message.Split(' ');
if (args.Length > 2) { Help(p); return; }
if (args.Length == 1) { Player.SendMessage(p, "You did not specify the target player."); return; }
Player source = PlayerInfo.Find(args[0]), target = PlayerInfo.Find(args[1]);
if ((source == null || source.hidden) && (target == null || target.hidden)) {
Player.SendMessage(p, "Neither of the players specified are online."); return;
}
if (source == null || source.hidden) { Player.SendMessage(p, "The source player is not online."); return; }
if (target == null || target.hidden) { Player.SendMessage(p, "The target player is not online."); return; }
if (p.group.Permission < source.group.Permission) {
Player.SendMessage(p, "You cannot force a player of higher rank to tp to another player."); return;
}
Player.SendMessage(p, "Attempting to teleport " + source.name + " to " + target.name + ".");
Command.all.Find("tp").Use(source, target.name);
} }
public override void Use(Player p, string message) public override void Help(Player p) {
{ Player.SendMessage(p, "/p2p [source] [target] - Teleports the source player to the target player.");
if (message == "") { Help(p); return; }
int number = message.Split(' ').Length;
if (number > 2) { Help(p); return; }
if (number == 2)
{
int pos = message.IndexOf(' ');
string t = message.Substring(0, pos).ToLower();
string s = message.Substring(pos + 1).ToLower();
Player who = PlayerInfo.Find(t);
Player who2 = PlayerInfo.Find(s);
if (who == null)
{
if (who2 == null)
{
Player.SendMessage(p, "Neither of the players you specified, can be found or exist!");
return;
}
Player.SendMessage(p, "Player 1 is not online or does not exist!");
return;
}
if (who2 == null)
{
Player.SendMessage(p, "Player 2 is not online or does not exist!");
return;
}
if (who == p)
{
if (who2 == p)
{
Player.SendMessage(p, "Why are you trying to teleport yourself to yourself? =S");
return;
}
Player.SendMessage(p, "Why not, just use /tp " + who2.name + "!");
}
if (who2 == p)
{
Player.SendMessage(p, "Why not, just use /summon " + who.name + "!");
}
if (p.group.Permission < who.group.Permission)
{
Player.SendMessage(p, "You cannot force a player of higher rank to tp to another player!");
return;
}
if (s == "")
{
Player.SendMessage(p, "You did not specify player 2!");
return;
}
Command.all.Find("tp").Use(who, who2.name);
Player.SendMessage(p, who.name + " has been successfully teleported to " + who2.name + "!");
}
if (number == 1)
{
Player.SendMessage(p, "You did not specify player 2!");
return;
}
} }
} }
} }

View File

@ -1,110 +1,59 @@
/* /*
Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy) Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy)
Dual-licensed under the Educational Community License, Version 2.0 and Dual-licensed under the Educational Community License, Version 2.0 and
the GNU General Public License, Version 3 (the "Licenses"); you may the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at obtain a copy of the Licenses at
http://www.osedu.org/licenses/ECL-2.0 http://www.osedu.org/licenses/ECL-2.0
http://www.gnu.org/licenses/gpl-3.0.html http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses.
*/
namespace MCGalaxy.Commands {
public sealed class CmdTp : Command {
Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses.
*/
namespace MCGalaxy.Commands
{
public sealed class CmdTp : Command
{
public override string name { get { return "tp"; } } public override string name { get { return "tp"; } }
public override string shortcut { get { return ""; } } public override string shortcut { get { return ""; } }
public override string type { get { return CommandTypes.Other; } } public override string type { get { return CommandTypes.Other; } }
public override bool museumUsable { get { return true; } } public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Builder; } } public override LevelPermission defaultRank { get { return LevelPermission.Builder; } }
public CmdTp() { }
public override void Use(Player p, string message) public override void Use(Player p, string message) {
{ string[] args = message.Split(' ');
if (message == "") if (args.Length > 1) { Help(p); return; }
{
Command.all.Find("spawn"); Player target = PlayerInfo.Find(message);
return; if (target == null || target.hidden) { Player.SendMessage(p, "There is no player \"" + message + "\"."); return; }
if (target.level.name.Contains("cMuseum")) {
Player.SendMessage(p, "Player \"" + message + "\" is in a museum!"); return;
} }
int number = message.Split(' ').Length;
if (number > 2) { Help(p); return; } if (!Server.higherranktp && p.group.Permission < target.group.Permission) {
if (number == 2) Player.SendMessage(p, "You cannot teleport to a player of higher rank!"); return;
{
if (!p.group.CanExecute(Command.all.Find("P2P")))
{
Player.SendMessage(p, "You cannot teleport others!");
return;
}
Command.all.Find("P2P").Use(p, message);
} }
if (number == 1) p.beforeTeleportMap = p.level.name;
{ p.beforeTeleportPos = p.pos;
Player who = PlayerInfo.Find(message);
if (who == null || (who.hidden && p.group.Permission < LevelPermission.Admin)) { Player.SendMessage(p, "There is no player \"" + message + "\"!"); return; } if (p.level != target.level)
if (p.level != who.level) Command.all.Find("goto").Use(p, target.level.name);
{ if (target.Loading) {
if (who.level.name.Contains("cMuseum")) Player.SendMessage(p, "Waiting for " + target.color + target.DisplayName + Server.DefaultColor + " to spawn...");
{ target.BlockUntilLoad(10);
Player.SendMessage(p, "Player \"" + message + "\" is in a museum!");
return;
}
else
{
if (Server.higherranktp == false)
{
if (p.group.Permission < who.group.Permission)
{
Player.SendMessage(p, "You cannot teleport to a player of higher rank!");
return;
}
}
p.beforeTeleportMap = p.level.name;
p.beforeTeleportPos = p.pos;
Command.all.Find("goto").Use(p, who.level.name);
if (who.Loading)
{
Player.SendMessage(p, "Waiting for " + who.color + who.DisplayName + Server.DefaultColor + " to spawn...");
who.BlockUntilLoad(10);
}
p.BlockUntilLoad(10); //Wait for player to spawn in new map
p.SendPos(0xFF, who.pos[0], who.pos[1], who.pos[2], who.rot[0], 0);
}
return;
}
if (p.level == who.level)
{
if (Server.higherranktp == false)
{
if (p.group.Permission < who.group.Permission)
{
Player.SendMessage(p, "You cannot teleport to a player of higher rank!");
return;
}
}
p.beforeTeleportMap = p.level.name;
p.beforeTeleportPos = p.pos;
if (who.Loading)
{
Player.SendMessage(p, "Waiting for " + who.color + who.DisplayName + Server.DefaultColor + " to spawn...");
who.BlockUntilLoad(10);
}
p.BlockUntilLoad(10); //Wait for player to spawn in new map
p.SendPos(0xFF, who.pos[0], who.pos[1], who.pos[2], who.rot[0], 0);
}
} }
p.BlockUntilLoad(10); //Wait for player to spawn in new map
p.SendPos(0xFF, target.pos[0], target.pos[1], target.pos[2], target.rot[0], 0);
} }
public override void Help(Player p)
{ public override void Help(Player p) {
Player.SendMessage(p, "/tp <player1> [player2] - Teleports yourself to a player."); Player.SendMessage(p, "/tp [target] - Teleports yourself to that player.");
Player.SendMessage(p, "[player2] is optional but if present will act like /p2p."); Player.SendMessage(p, "Use /p2p to teleport a given player to a different player.");
Player.SendMessage(p, "If <player1> is blank, /spawn is used.");
} }
} }
} }