Fixed ban not working with quotes around player name. Kick now also supports reason

This commit is contained in:
ricky 2011-06-07 18:33:54 +10:00
parent cc92a38e40
commit 78d0480512
2 changed files with 54 additions and 27 deletions

View file

@ -179,49 +179,76 @@ namespace TShockAPI
public static void Kick(CommandArgs args) public static void Kick(CommandArgs args)
{ {
string plStr = args.Message.Remove(0, 5).Trim().TrimEnd('"').TrimStart('"'); string input = args.Message.Remove(0, 5).Trim();
int ply = args.PlayerID; string plStr = "";
int player = Tools.FindPlayer(plStr); string reason = "";
if (!(player == -1 || player == -2 || plStr == "")) int splitIndex = input.StartsWith("\"") ? splitIndex = input.IndexOf('"', 1) : splitIndex = input.IndexOf(' ', 0);
if (splitIndex == -1)
{ {
if (!Tools.Kick(player, "Misbehaviour.")) plStr = input;
}
else
{
plStr = input.Substring(0, splitIndex).Trim().TrimEnd('"').TrimStart('"');
reason = input.Substring(splitIndex + 1).Trim().TrimEnd('"').TrimStart('"');
}
Log.Debug("plStr : '" + plStr + "', reason : '" + reason + "'");
int ply = args.PlayerID;
if (plStr.Length != 0)
{
int player = Tools.FindPlayer(plStr);
if (player == -1)
Tools.SendMessage(ply, "Invalid player!", new[] { 255f, 0f, 0f });
else if (player == -2)
Tools.SendMessage(ply, "More than one player matched!", new[] { 255f, 0f, 0f });
else
{ {
Tools.SendMessage(ply, "You can't kick another admin!", new[] {255f, 0f, 0f}); if (!Tools.Kick(player, reason.Length != 0 ? reason : "Misbehaviour."))
{
Tools.SendMessage(ply, "You can't kick another admin!", new[] { 255f, 0f, 0f });
}
} }
} }
else if (Tools.FindPlayer(plStr) == -2)
Tools.SendMessage(ply, "More than one player matched!", new[] {255f, 0f, 0f});
else else
Tools.SendMessage(ply, "Invalid player!", new[] {255f, 0f, 0f}); Tools.SendMessage(ply, "Invalid syntax! Proper syntax: /kick <player> [reason]",
new[] { 255f, 0f, 0f });
} }
public static void Ban(CommandArgs args) public static void Ban(CommandArgs args)
{ {
string plStr = args.Message.Remove(0, 4).Trim().TrimEnd('"').TrimStart('"').Split(' ')[0]; string input = args.Message.Remove(0, 4).Trim();
string[] reason = plStr.Split(' '); string plStr = "";
string banReason = ""; string reason = "";
for (int i = 0; i < reason.Length; i++) int splitIndex = input.StartsWith("\"") ? splitIndex = input.IndexOf('"', 1) : splitIndex = input.IndexOf(' ', 0);
if (splitIndex == -1)
{ {
if (reason[i].Contains("\"")) plStr = input;
reason[i] = "";
} }
for (int i = 0; i < reason.Length; i++) else
{ {
banReason += reason[i]; plStr = input.Substring(0, splitIndex).Trim().TrimEnd('"').TrimStart('"');
reason = input.Substring(splitIndex + 1).Trim().TrimEnd('"').TrimStart('"');
} }
int adminplr = args.PlayerID; Log.Debug("plStr : '" + plStr + "', reason : '" + reason + "'");
int player = Tools.FindPlayer(plStr); int ply = args.PlayerID;
if (!(player == -1 || player == -2 || plStr == "")) if (plStr.Length != 0)
{ {
if (!Tools.Ban(player, banReason.Equals("") ? "Misbehaviour." : banReason, Tools.FindPlayer(adminplr))) int player = Tools.FindPlayer(plStr);
if (player == -1)
Tools.SendMessage(ply, "Invalid player!", new[] { 255f, 0f, 0f });
else if (player == -2)
Tools.SendMessage(ply, "More than one player matched!", new[] { 255f, 0f, 0f });
else
{ {
Tools.SendMessage(adminplr, "You can't ban another admin!", new[] {255f, 0f, 0f}); if (!Tools.Ban(player, reason.Length != 0 ? reason : "Misbehaviour."))
{
Tools.SendMessage(ply, "You can't ban another admin!", new[] { 255f, 0f, 0f });
}
} }
} }
else if (Tools.FindPlayer(plStr) == -2)
Tools.SendMessage(adminplr, "More than one player matched!", new[] {255f, 0f, 0f});
else else
Tools.SendMessage(adminplr, "Invalid player!", new[] {255f, 0f, 0f}); Tools.SendMessage(ply, "Invalid syntax! Proper syntax: /ban <player> [reason]",
new[] { 255f, 0f, 0f });
} }
public static void Off(CommandArgs args) public static void Off(CommandArgs args)

View file

@ -232,7 +232,7 @@ namespace TShockAPI
string playerName = Main.player[ply].name; string playerName = Main.player[ply].name;
NetMessage.SendData(0x2, ply, -1, "Kicked: " + reason, 0x0, 0f, 0f, 0f); NetMessage.SendData(0x2, ply, -1, "Kicked: " + reason, 0x0, 0f, 0f, 0f);
Log.Info("Kicked " + playerName + " for : " + reason); Log.Info("Kicked " + playerName + " for : " + reason);
if (adminUserName.Equals("")) if (adminUserName.Length == 0)
Broadcast(playerName + " was kicked for " + reason.ToLower()); Broadcast(playerName + " was kicked for " + reason.ToLower());
else else
Tools.Broadcast(adminUserName + " kicked " + playerName + " for " + reason.ToLower()); Tools.Broadcast(adminUserName + " kicked " + playerName + " for " + reason.ToLower());
@ -255,7 +255,7 @@ namespace TShockAPI
TShock.Bans.AddBan(ip, playerName, reason); TShock.Bans.AddBan(ip, playerName, reason);
NetMessage.SendData(0x2, plr, -1, "Banned: " + reason, 0x0, 0f, 0f, 0f); NetMessage.SendData(0x2, plr, -1, "Banned: " + reason, 0x0, 0f, 0f, 0f);
Log.Info("Banned " + playerName + " for : " + reason); Log.Info("Banned " + playerName + " for : " + reason);
if (adminUserName.Equals("")) if (adminUserName.Length == 0)
Broadcast(playerName + " was banned for " + reason.ToLower()); Broadcast(playerName + " was banned for " + reason.ToLower());
else else
Tools.Broadcast(adminUserName + " banned " + playerName + " for " + reason.ToLower()); Tools.Broadcast(adminUserName + " banned " + playerName + " for " + reason.ToLower());