]> git.deb.at Git - rhonda/impostor.git/commitdiff
Remove fake player joining (#341)
authorminiduikboot <5243971+miniduikboot@users.noreply.github.com>
Sun, 7 Mar 2021 15:36:37 +0000 (16:36 +0100)
committerGitHub <noreply@github.com>
Sun, 7 Mar 2021 15:36:37 +0000 (16:36 +0100)
src/Impostor.Server/Net/State/Game.Data.cs
src/Impostor.Server/Net/State/Game.State.cs

index cbe8d42e15bc575d6247993080bc6915bd8f323a..eda8986cb37c00bf25793f8d921cf8007e12bdfa 100644 (file)
@@ -49,7 +49,6 @@ namespace Impostor.Server.Net.State
         private readonly Dictionary<uint, InnerNetObject> _allObjectsFast = new Dictionary<uint, InnerNetObject>();
 
         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;
index e24e798a99be0eef94774389822008a0b034019a..927548e7299bd08f3c7c580d48ad775ecc0f22bb 100644 (file)
@@ -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));