From 3090cea768c65189df7ac94243450c381bcb3262 Mon Sep 17 00:00:00 2001 From: miniduikboot <5243971+miniduikboot@users.noreply.github.com> Date: Sun, 7 Mar 2021 16:36:37 +0100 Subject: [PATCH] Remove fake player joining (#341) --- src/Impostor.Server/Net/State/Game.Data.cs | 45 +-------------------- src/Impostor.Server/Net/State/Game.State.cs | 1 - 2 files changed, 1 insertion(+), 45 deletions(-) diff --git a/src/Impostor.Server/Net/State/Game.Data.cs b/src/Impostor.Server/Net/State/Game.Data.cs index cbe8d42..eda8986 100644 --- a/src/Impostor.Server/Net/State/Game.Data.cs +++ b/src/Impostor.Server/Net/State/Game.Data.cs @@ -49,7 +49,6 @@ namespace Impostor.Server.Net.State private readonly Dictionary _allObjectsFast = new Dictionary(); private int _gamedataInitialized; - private bool _gamedataFakeReceived; private async ValueTask OnSpawnAsync(InnerNetObject netObj) { @@ -156,38 +155,8 @@ namespace Impostor.Server.Net.State break; } - } - } - private async ValueTask InitGameDataAsync(ClientPlayer player) - { - if (Interlocked.Exchange(ref _gamedataInitialized, 1) != 0) - { - return; - } - /* - * The Among Us client on 20.9.22i spawns some components on the host side and - * only spawns these on other clients when someone else connects. This means that we can't - * parse data until someone connects because we don't know which component belongs to the NetId. - * - * We solve this by spawning a fake player and removing the player when the spawn GameData - * is received in HandleGameDataAsync. - */ - using (var message = MessageWriter.Get(MessageType.Reliable)) - { - // Spawn a fake player. - Message01JoinGameS2C.SerializeJoin(message, false, Code, FakeClientId, HostId); - - message.StartMessage(MessageFlags.GameData); - message.Write(Code); - message.StartMessage(GameDataTag.SceneChangeFlag); - message.WritePacked(FakeClientId); - message.Write("OnlineGame"); - message.EndMessage(); - message.EndMessage(); - - await player.Client.Connection.SendAsync(message); } } @@ -199,19 +168,7 @@ namespace Impostor.Server.Net.State if (toPlayer) { var targetId = parent.ReadPackedInt32(); - if (targetId == FakeClientId && !_gamedataFakeReceived && sender.IsHost) - { - _gamedataFakeReceived = true; - - // Remove the fake client, we received the data. - using (var message = MessageWriter.Get(MessageType.Reliable)) - { - WriteRemovePlayerMessage(message, false, FakeClientId, (byte)DisconnectReason.ExitGame); - - await sender.Client.Connection.SendAsync(message); - } - } - else if (!TryGetPlayer(targetId, out target)) + if (!TryGetPlayer(targetId, out target)) { _logger.LogWarning("Player {0} tried to send GameData to unknown player {1}.", sender.Client.Id, targetId); return false; diff --git a/src/Impostor.Server/Net/State/Game.State.cs b/src/Impostor.Server/Net/State/Game.State.cs index e24e798..927548e 100644 --- a/src/Impostor.Server/Net/State/Game.State.cs +++ b/src/Impostor.Server/Net/State/Game.State.cs @@ -25,7 +25,6 @@ namespace Impostor.Server.Net.State if (HostId == -1) { HostId = player.Client.Id; - await InitGameDataAsync(player); } await _eventManager.CallAsync(new GamePlayerJoinedEvent(this, player)); -- 2.39.5