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); + } } }