diff --git a/Torch.API/Managers/IMultiplayerManagerServer.cs b/Torch.API/Managers/IMultiplayerManagerServer.cs
index 31dadcd..d2670c6 100644
--- a/Torch.API/Managers/IMultiplayerManagerServer.cs
+++ b/Torch.API/Managers/IMultiplayerManagerServer.cs
@@ -32,5 +32,15 @@ namespace Torch.API.Managers
/// The SteamID of the player.
/// True if the player is banned; otherwise false.
bool IsBanned(ulong steamId);
+
+ ///
+ /// Raised when a player is kicked. Passes with SteamID of kicked player.
+ ///
+ event Action PlayerKicked;
+
+ ///
+ /// Raised when a player is banned or unbanned. Passes SteamID of player, and true if banned, false if unbanned.
+ ///
+ event Action PlayerBanned;
}
}
diff --git a/Torch.Client/Manager/MultiplayerManagerLobby.cs b/Torch.Client/Manager/MultiplayerManagerLobby.cs
index 1ef3e3f..731f00e 100644
--- a/Torch.Client/Manager/MultiplayerManagerLobby.cs
+++ b/Torch.Client/Manager/MultiplayerManagerLobby.cs
@@ -27,6 +27,20 @@ namespace Torch.Client.Manager
///
public bool IsBanned(ulong steamId) => false;
+ ///
+ public event Action PlayerKicked
+ {
+ add => throw new NotImplementedException();
+ remove => throw new NotImplementedException();
+ }
+
+ ///
+ public event Action PlayerBanned
+ {
+ add => throw new NotImplementedException();
+ remove => throw new NotImplementedException();
+ }
+
///
public override void Attach()
{
diff --git a/Torch.Server/Managers/MultiplayerManagerDedicated.cs b/Torch.Server/Managers/MultiplayerManagerDedicated.cs
index ac8b67c..4a704bd 100644
--- a/Torch.Server/Managers/MultiplayerManagerDedicated.cs
+++ b/Torch.Server/Managers/MultiplayerManagerDedicated.cs
@@ -64,6 +64,7 @@ namespace Torch.Server.Managers
internal void RaiseClientBanned(ulong user, bool banned)
{
+ PlayerBanned?.Invoke(user, banned);
Torch.Invoke(() =>
{
if(_gameOwnerIds.TryGetValue(user, out ulong owner))
@@ -71,10 +72,21 @@ namespace Torch.Server.Managers
});
}
+ internal void RaiseClientKicked(ulong user)
+ {
+ PlayerKicked?.Invoke(user);
+ }
+
///
public bool IsBanned(ulong steamId) => _isClientBanned.Invoke(MyMultiplayer.Static, steamId) ||
MySandboxGame.ConfigDedicated.Banned.Contains(steamId);
+ ///
+ public event Action PlayerKicked;
+
+ ///
+ public event Action PlayerBanned;
+
///
public override void Attach()
{
diff --git a/Torch.Server/Managers/MultiplayerManagerDedicatedPatchShim.cs b/Torch.Server/Managers/MultiplayerManagerDedicatedPatchShim.cs
index 8034617..d6ddded 100644
--- a/Torch.Server/Managers/MultiplayerManagerDedicatedPatchShim.cs
+++ b/Torch.Server/Managers/MultiplayerManagerDedicatedPatchShim.cs
@@ -13,16 +13,20 @@ namespace Torch.Server.Managers
[PatchShim]
internal static class MultiplayerManagerDedicatedPatchShim
{
- private static Logger Log = LogManager.GetCurrentClassLogger();
public static void Patch(PatchContext ctx)
{
ctx.GetPattern(typeof(MyDedicatedServerBase).GetMethod(nameof(MyDedicatedServerBase.BanClient))).Prefixes.Add(typeof(MultiplayerManagerDedicatedPatchShim).GetMethod(nameof(BanPrefix)));
+ ctx.GetPattern(typeof(MyDedicatedServerBase).GetMethod(nameof(MyDedicatedServerBase.KickClient))).Prefixes.Add(typeof(MultiplayerManagerDedicatedPatchShim).GetMethod(nameof(KickPrefix)));
}
public static void BanPrefix(ulong userId, bool banned)
{
- Log.Info($"Caught ban event for {userId}: {banned}");
TorchBase.Instance.CurrentSession.Managers.GetManager().RaiseClientBanned(userId, banned);
}
+
+ public static void KickPrefix(ulong userId)
+ {
+ TorchBase.Instance.CurrentSession.Managers.GetManager().RaiseClientKicked(userId);
+ }
}
}