From faef00024595dc83b7faeb9ca99dc6ce1cc43681 Mon Sep 17 00:00:00 2001 From: Brant Martin Date: Sat, 15 Dec 2018 20:16:44 -0500 Subject: [PATCH] Fix Family Share banning. --- .../Managers/MultiplayerManagerDedicated.cs | 11 ++++++-- .../MultiplayerManagerDedicatedPatchShim.cs | 28 +++++++++++++++++++ Torch.Server/Torch.Server.csproj | 1 + 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 Torch.Server/Managers/MultiplayerManagerDedicatedPatchShim.cs diff --git a/Torch.Server/Managers/MultiplayerManagerDedicated.cs b/Torch.Server/Managers/MultiplayerManagerDedicated.cs index b5cdcbe..ac8b67c 100644 --- a/Torch.Server/Managers/MultiplayerManagerDedicated.cs +++ b/Torch.Server/Managers/MultiplayerManagerDedicated.cs @@ -59,11 +59,18 @@ namespace Torch.Server.Managers Torch.Invoke(() => { MyMultiplayer.Static.BanClient(steamId, banned); - if (_gameOwnerIds.ContainsKey(steamId)) - MyMultiplayer.Static.BanClient(_gameOwnerIds[steamId], banned); }); } + internal void RaiseClientBanned(ulong user, bool banned) + { + Torch.Invoke(() => + { + if(_gameOwnerIds.TryGetValue(user, out ulong owner)) + MyMultiplayer.Static.BanClient(owner, banned); + }); + } + /// public bool IsBanned(ulong steamId) => _isClientBanned.Invoke(MyMultiplayer.Static, steamId) || MySandboxGame.ConfigDedicated.Banned.Contains(steamId); diff --git a/Torch.Server/Managers/MultiplayerManagerDedicatedPatchShim.cs b/Torch.Server/Managers/MultiplayerManagerDedicatedPatchShim.cs new file mode 100644 index 0000000..8034617 --- /dev/null +++ b/Torch.Server/Managers/MultiplayerManagerDedicatedPatchShim.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NLog; +using Sandbox.Engine.Multiplayer; +using Torch.Managers.PatchManager; +using Torch.API.Managers; + +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))); + } + + public static void BanPrefix(ulong userId, bool banned) + { + Log.Info($"Caught ban event for {userId}: {banned}"); + TorchBase.Instance.CurrentSession.Managers.GetManager().RaiseClientBanned(userId, banned); + } + } +} diff --git a/Torch.Server/Torch.Server.csproj b/Torch.Server/Torch.Server.csproj index 04e32f5..545f740 100644 --- a/Torch.Server/Torch.Server.csproj +++ b/Torch.Server/Torch.Server.csproj @@ -224,6 +224,7 @@ +