Added unban & unbanip commands (see #868)
This commit is contained in:
@@ -1522,6 +1522,16 @@ namespace Barotrauma.Networking
|
|||||||
client.SendMessage(msg, NetDeliveryMethod.ReliableUnordered);
|
client.SendMessage(msg, NetDeliveryMethod.ReliableUnordered);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void UnbanPlayer(string playerName, string playerIP)
|
||||||
|
{
|
||||||
|
NetOutgoingMessage msg = client.CreateMessage();
|
||||||
|
msg.Write((byte)ClientPacketHeader.SERVER_COMMAND);
|
||||||
|
msg.Write((byte)ClientPermissions.Unban);
|
||||||
|
msg.Write(string.IsNullOrEmpty(playerName) ? "" : playerName);
|
||||||
|
msg.Write(string.IsNullOrEmpty(playerIP) ? "" : playerIP);
|
||||||
|
client.SendMessage(msg, NetDeliveryMethod.ReliableUnordered);
|
||||||
|
}
|
||||||
|
|
||||||
public void SendCampaignState()
|
public void SendCampaignState()
|
||||||
{
|
{
|
||||||
MultiPlayerCampaign campaign = GameMain.GameSession.GameMode as MultiPlayerCampaign;
|
MultiPlayerCampaign campaign = GameMain.GameSession.GameMode as MultiPlayerCampaign;
|
||||||
|
|||||||
@@ -38,6 +38,8 @@
|
|||||||
<Command name="ban"/>
|
<Command name="ban"/>
|
||||||
<Command name="banid"/>
|
<Command name="banid"/>
|
||||||
<Command name="banip"/>
|
<Command name="banip"/>
|
||||||
|
<Command name="unban"/>
|
||||||
|
<Command name="unbanip"/>
|
||||||
<Command name="teleportcharacter"/>
|
<Command name="teleportcharacter"/>
|
||||||
<Command name="godmode"/>
|
<Command name="godmode"/>
|
||||||
<Command name="lockx"/>
|
<Command name="lockx"/>
|
||||||
|
|||||||
@@ -1079,6 +1079,37 @@ namespace Barotrauma
|
|||||||
};
|
};
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
commands.Add(new Command("unban", "unban [name]: Unban a specific client.", (string[] args) =>
|
||||||
|
{
|
||||||
|
if (GameMain.NetworkMember == null || args.Length == 0) return;
|
||||||
|
|
||||||
|
string clientName = string.Join(" ", args);
|
||||||
|
GameMain.NetworkMember.UnbanPlayer(clientName, "");
|
||||||
|
},
|
||||||
|
() =>
|
||||||
|
{
|
||||||
|
if (GameMain.Server == null) return null;
|
||||||
|
return new string[][]
|
||||||
|
{
|
||||||
|
GameMain.Server.BanList.BannedNames.Where(name => !string.IsNullOrEmpty(name)).ToArray()
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
|
||||||
|
commands.Add(new Command("unbanip", "unbanip [ip]: Unban a specific IP.", (string[] args) =>
|
||||||
|
{
|
||||||
|
if (GameMain.NetworkMember == null || args.Length == 0) return;
|
||||||
|
|
||||||
|
GameMain.NetworkMember.UnbanPlayer("", args[0]);
|
||||||
|
},
|
||||||
|
() =>
|
||||||
|
{
|
||||||
|
if (GameMain.Server == null) return null;
|
||||||
|
return new string[][]
|
||||||
|
{
|
||||||
|
GameMain.Server.BanList.BannedIPs.Where(ip => !string.IsNullOrEmpty(ip)).ToArray()
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
|
||||||
commands.Add(new Command("banid", "banid [id]: Kick and ban the player with the specified client ID from the server.", (string[] args) =>
|
commands.Add(new Command("banid", "banid [id]: Kick and ban the player with the specified client ID from the server.", (string[] args) =>
|
||||||
{
|
{
|
||||||
if (GameMain.NetworkMember == null || args.Length == 0) return;
|
if (GameMain.NetworkMember == null || args.Length == 0) return;
|
||||||
|
|||||||
@@ -41,6 +41,16 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
private List<BannedPlayer> bannedPlayers;
|
private List<BannedPlayer> bannedPlayers;
|
||||||
|
|
||||||
|
public IEnumerable<string> BannedNames
|
||||||
|
{
|
||||||
|
get { return bannedPlayers.Select(bp => bp.Name); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<string> BannedIPs
|
||||||
|
{
|
||||||
|
get { return bannedPlayers.Select(bp => bp.IP); }
|
||||||
|
}
|
||||||
|
|
||||||
public BanList()
|
public BanList()
|
||||||
{
|
{
|
||||||
bannedPlayers = new List<BannedPlayer>();
|
bannedPlayers = new List<BannedPlayer>();
|
||||||
@@ -106,6 +116,36 @@ namespace Barotrauma.Networking
|
|||||||
Save();
|
Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UnbanPlayer(string name)
|
||||||
|
{
|
||||||
|
var player = bannedPlayers.Find(bp => bp.Name == name);
|
||||||
|
if (player == null)
|
||||||
|
{
|
||||||
|
DebugConsole.Log("Could not unban player \""+name+"\". Matching player not found.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DebugConsole.Log("Unbanned \"" + name + ".");
|
||||||
|
bannedPlayers.Remove(player);
|
||||||
|
Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UnbanIP(string ip)
|
||||||
|
{
|
||||||
|
var player = bannedPlayers.Find(bp => bp.IP == ip);
|
||||||
|
if (player == null)
|
||||||
|
{
|
||||||
|
DebugConsole.Log("Could not unban IP \"" + ip + "\". Matching player not found.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DebugConsole.Log("Unbanned \"" + ip + ".");
|
||||||
|
bannedPlayers.Remove(player);
|
||||||
|
Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsBanned(string IP)
|
public bool IsBanned(string IP)
|
||||||
{
|
{
|
||||||
bannedPlayers.RemoveAll(bp => bp.ExpirationTime.HasValue && DateTime.Now > bp.ExpirationTime.Value);
|
bannedPlayers.RemoveAll(bp => bp.ExpirationTime.HasValue && DateTime.Now > bp.ExpirationTime.Value);
|
||||||
|
|||||||
@@ -16,16 +16,18 @@ namespace Barotrauma.Networking
|
|||||||
Kick = 2,
|
Kick = 2,
|
||||||
[Description("Ban")]
|
[Description("Ban")]
|
||||||
Ban = 4,
|
Ban = 4,
|
||||||
|
[Description("Revoke Ban")]
|
||||||
|
Unban = 8,
|
||||||
[Description("Select submarine")]
|
[Description("Select submarine")]
|
||||||
SelectSub = 8,
|
SelectSub = 16,
|
||||||
[Description("Select game mode")]
|
[Description("Select game mode")]
|
||||||
SelectMode = 16,
|
SelectMode = 32,
|
||||||
[Description("Manage campaign")]
|
[Description("Manage campaign")]
|
||||||
ManageCampaign = 32,
|
ManageCampaign = 64,
|
||||||
[Description("Console commands")]
|
[Description("Console commands")]
|
||||||
ConsoleCommands = 64,
|
ConsoleCommands = 128,
|
||||||
[Description("Access server log")]
|
[Description("Access server log")]
|
||||||
ServerLog = 128
|
ServerLog = 256
|
||||||
}
|
}
|
||||||
|
|
||||||
class PermissionPreset
|
class PermissionPreset
|
||||||
|
|||||||
@@ -872,6 +872,12 @@ namespace Barotrauma.Networking
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ClientPermissions.Unban:
|
||||||
|
string unbannedName = inc.ReadString().ToLowerInvariant();
|
||||||
|
string unbannedIP = inc.ReadString();
|
||||||
|
|
||||||
|
UnbanPlayer(unbannedIP, unbannedIP);
|
||||||
|
break;
|
||||||
case ClientPermissions.EndRound:
|
case ClientPermissions.EndRound:
|
||||||
if (gameStarted)
|
if (gameStarted)
|
||||||
{
|
{
|
||||||
@@ -1662,7 +1668,20 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
BanClient(client, reason, range, duration);
|
BanClient(client, reason, range, duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void UnbanPlayer(string playerName, string playerIP)
|
||||||
|
{
|
||||||
|
playerName = playerName.ToLowerInvariant();
|
||||||
|
if (!string.IsNullOrEmpty(playerIP))
|
||||||
|
{
|
||||||
|
banList.UnbanIP(playerIP);
|
||||||
|
}
|
||||||
|
else if (!string.IsNullOrEmpty(playerName))
|
||||||
|
{
|
||||||
|
banList.UnbanPlayer(playerName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void BanClient(Client client, string reason, bool range = false, TimeSpan? duration = null)
|
public void BanClient(Client client, string reason, bool range = false, TimeSpan? duration = null)
|
||||||
{
|
{
|
||||||
if (client == null) return;
|
if (client == null) return;
|
||||||
|
|||||||
@@ -216,6 +216,8 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
public virtual void BanPlayer(string kickedName, string reason, bool range = false, TimeSpan? duration = null) { }
|
public virtual void BanPlayer(string kickedName, string reason, bool range = false, TimeSpan? duration = null) { }
|
||||||
|
|
||||||
|
public virtual void UnbanPlayer(string playerName, string playerIP) { }
|
||||||
|
|
||||||
public virtual void Update(float deltaTime)
|
public virtual void Update(float deltaTime)
|
||||||
{
|
{
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
|
|||||||
Reference in New Issue
Block a user