All greif related checks now respect ignoregreifdetection and ban/kick greif flags.

Refactored common ban/kick logic into helper method in tools.
Added ForceKick for when wanting to disallow players to join when sever is full or name is too long or not on whitelist etc.
Updated OnJoin to set e.Handled when players are force kicked during join.
Logging all players that successfully join the server.
This commit is contained in:
ricky 2011-06-07 14:36:59 +10:00
parent bdce73f0dc
commit 1ad261a562
3 changed files with 127 additions and 133 deletions

View file

@ -208,19 +208,96 @@ namespace TShockAPI
}
}
/// <summary>
/// Kicks a player from the server without checking for immunetokick permission.
/// </summary>
/// <param name="ply">int player</param>
/// <param name="reason">string reason</param>
public static void ForceKick(int ply, string reason)
{
string ip = GetPlayerIP(ply);
NetMessage.SendData(0x2, ply, -1, reason, 0x0, 0f, 0f, 0f);
Log.Info(ip + " was force kicked for : " + reason);
}
/// <summary>
/// Kicks a player from the server.
/// </summary>
/// <param name="ply">int player</param>
/// <param name="reason">string reason</param>
public static void Kick(int ply, string reason)
public static bool Kick(int ply, string reason, string adminUserName = "")
{
if (!TShock.players[ply].group.HasPermission("immunetokick") || reason.Contains("Banned: "))
if (!TShock.players[ply].group.HasPermission("immunetokick"))
{
string displayName = FindPlayer(ply).Equals("") ? GetPlayerIP(ply) : FindPlayer(ply);
NetMessage.SendData(0x2, ply, -1, reason, 0x0, 0f, 0f, 0f);
Log.Info("Kicked " + displayName + " for : " + reason);
string playerName = Main.player[ply].name;
NetMessage.SendData(0x2, ply, -1, "Kicked: " + reason, 0x0, 0f, 0f, 0f);
Log.Info("Kicked " + playerName + " for : " + reason);
if (adminUserName.Equals(""))
Broadcast(playerName + " was kicked for " + reason.ToLower());
else
Tools.Broadcast(adminUserName + " kicked " + playerName + " for " + reason.ToLower());
return true;
}
return false;
}
/// <summary>
/// Bans and kicks a player from the server.
/// </summary>
/// <param name="ply">int player</param>
/// <param name="reason">string reason</param>
public static bool Ban(int plr, string reason, string adminUserName = "")
{
if (!TShock.players[plr].group.HasPermission("immunetoban"))
{
string ip = GetPlayerIP(plr);
string playerName = Main.player[plr].name;
TShock.Bans.AddBan(ip, playerName, reason);
NetMessage.SendData(0x2, plr, -1, "Banned: " + reason, 0x0, 0f, 0f, 0f);
Log.Info("Banned " + playerName + " for : " + reason);
if (adminUserName.Equals(""))
Broadcast(playerName + " was banned for " + reason.ToLower());
else
Tools.Broadcast(adminUserName + " banned " + playerName + " for " + reason.ToLower());
return true;
}
return false;
}
public static bool HandleCheater(int ply, string reason)
{
return HandleBadPlayer(ply, "ignorecheatdetection", ConfigurationManager.banCheater, ConfigurationManager.kickCheater, reason);
}
public static bool HandleGriefer(int ply, string reason)
{
return HandleBadPlayer(ply, "ignoregriefdetection", ConfigurationManager.banGriefer, ConfigurationManager.kickGriefer, reason);
}
public static bool HandleTntUser(int ply, string reason)
{
return HandleBadPlayer(ply, "ignoregriefdetection", ConfigurationManager.banTnt, ConfigurationManager.kickTnt, reason);
}
public static bool HandleExplosivesUser(int ply, string reason)
{
return HandleBadPlayer(ply, "ignoregriefdetection", ConfigurationManager.banBoom, ConfigurationManager.kickBoom, reason);
}
private static bool HandleBadPlayer(int ply, string overridePermission, bool ban, bool kick, string reason)
{
if (!TShock.players[ply].group.HasPermission(overridePermission))
{
if (ban)
{
return Ban(ply, reason);
}
else if (kick)
{
return Kick(ply, reason);
}
}
return false;
}
/// <summary>