Server either console can now kick and ban players regardless of the players immune permissions which fixes #391

Refactored Utils ForceKick to call Kick so we have one core method with all the logic in
Added missing params to docs for Kick and Ban
This commit is contained in:
stevenh 2012-02-21 01:07:41 +00:00
parent aeab6d9e45
commit 988bc4198b
2 changed files with 23 additions and 26 deletions

View file

@ -786,7 +786,7 @@ namespace TShockAPI
string reason = args.Parameters.Count > 1 string reason = args.Parameters.Count > 1
? String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)) ? String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1))
: "Misbehaviour."; : "Misbehaviour.";
if (!TShock.Utils.Kick(players[0], reason)) if (!TShock.Utils.Kick(players[0], reason, !args.Player.RealPlayer, false, args.Player.Name))
{ {
args.Player.SendMessage("You can't kick another admin!", Color.Red); args.Player.SendMessage("You can't kick another admin!", Color.Red);
} }
@ -833,7 +833,7 @@ namespace TShockAPI
string reason = args.Parameters.Count > 1 string reason = args.Parameters.Count > 1
? String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)) ? String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1))
: "Misbehaviour."; : "Misbehaviour.";
if (!TShock.Utils.Ban(players[0], reason)) if (!TShock.Utils.Ban(players[0], reason, !args.Player.RealPlayer, args.Player.Name))
{ {
args.Player.SendMessage("You can't ban another admin!", Color.Red); args.Player.SendMessage("You can't ban another admin!", Color.Red);
} }

View file

@ -535,21 +535,10 @@ namespace TShockAPI
/// </summary> /// </summary>
/// <param name="ply">int player</param> /// <param name="ply">int player</param>
/// <param name="reason">string reason</param> /// <param name="reason">string reason</param>
public void ForceKick(TSPlayer player, string reason) /// <param name="silent">bool silent (default: false)</param>
public void ForceKick(TSPlayer player, string reason, bool silent = false)
{ {
if (!player.ConnectionAlive) Kick(player, reason, true, silent);
return;
player.Disconnect(reason);
Log.ConsoleInfo(string.Format("{0} was force kicked for : {1}", player.IP, reason));
}
public void ForceKick(TSPlayer player, string reason, bool silent)
{
player.SilentKickInProgress = true;
if (!player.ConnectionAlive)
return;
player.Disconnect(reason);
Log.ConsoleInfo(string.Format("{0} was force kicked for : {1}", player.IP, reason));
} }
/// <summary> /// <summary>
@ -557,19 +546,24 @@ namespace TShockAPI
/// </summary> /// </summary>
/// <param name="ply">int player</param> /// <param name="ply">int player</param>
/// <param name="reason">string reason</param> /// <param name="reason">string reason</param>
public bool Kick(TSPlayer player, string reason, string adminUserName = "") /// <param name="force">bool force (default: false)</param>
/// <param name="silent">bool silent (default: false)</param>
/// <param name="adminUserName">bool silent (default: null)</param>
public bool Kick(TSPlayer player, string reason, bool force = false, bool silent = false, string adminUserName = null)
{ {
if (!player.ConnectionAlive) if (!player.ConnectionAlive)
return true; return true;
if (!player.Group.HasPermission(Permissions.immunetokick)) if (force || !player.Group.HasPermission(Permissions.immunetokick))
{ {
string playerName = player.Name; string playerName = player.Name;
player.SilentKickInProgress = silent;
player.Disconnect(string.Format("Kicked: {0}", reason)); player.Disconnect(string.Format("Kicked: {0}", reason));
Log.ConsoleInfo(string.Format("Kicked {0} for : {1}", playerName, reason)); Log.ConsoleInfo(string.Format("Kicked {0} for : {1}", playerName, reason));
if (adminUserName.Length == 0) string verb = force ? "force " : "";
Broadcast(string.Format("{0} was kicked for {1}", playerName, reason.ToLower())); if (string.IsNullOrWhiteSpace(adminUserName))
Broadcast(string.Format("{0} was {1}kicked for {2}", playerName, verb, reason.ToLower()));
else else
Broadcast(string.Format("{0} kicked {1} for {2}", adminUserName, playerName, reason.ToLower())); Broadcast(string.Format("{0} {1}kicked {2} for {3}", adminUserName, verb, playerName, reason.ToLower()));
return true; return true;
} }
return false; return false;
@ -580,21 +574,24 @@ namespace TShockAPI
/// </summary> /// </summary>
/// <param name="ply">int player</param> /// <param name="ply">int player</param>
/// <param name="reason">string reason</param> /// <param name="reason">string reason</param>
public bool Ban(TSPlayer player, string reason, string adminUserName = "") /// <param name="force">bool force (default: false)</param>
/// <param name="adminUserName">bool silent (default: null)</param>
public bool Ban(TSPlayer player, string reason, bool force = false, string adminUserName = null)
{ {
if (!player.ConnectionAlive) if (!player.ConnectionAlive)
return true; return true;
if (!player.Group.HasPermission(Permissions.immunetoban)) if (force || !player.Group.HasPermission(Permissions.immunetoban))
{ {
string ip = player.IP; string ip = player.IP;
string playerName = player.Name; string playerName = player.Name;
TShock.Bans.AddBan(ip, playerName, reason); TShock.Bans.AddBan(ip, playerName, reason);
player.Disconnect(string.Format("Banned: {0}", reason)); player.Disconnect(string.Format("Banned: {0}", reason));
Log.ConsoleInfo(string.Format("Banned {0} for : {1}", playerName, reason)); Log.ConsoleInfo(string.Format("Banned {0} for : {1}", playerName, reason));
if (adminUserName.Length == 0) string verb = force ? "force " : "";
Broadcast(string.Format("{0} was banned for {1}", playerName, reason.ToLower())); if (string.IsNullOrWhiteSpace(adminUserName))
Broadcast(string.Format("{0} was {1}banned for {1}", playerName, verb, reason.ToLower()));
else else
Broadcast(string.Format("{0} banned {1} for {2}", adminUserName, playerName, reason.ToLower())); Broadcast(string.Format("{0} {1}banned {1} for {2}", adminUserName, verb, playerName, reason.ToLower()));
return true; return true;
} }
return false; return false;