]> git.deb.at Git - rhonda/impostor.git/commitdiff
Drop the RpcSnapTo anticheat
authorjs6pak <me@6pak.dev>
Tue, 21 Nov 2023 18:14:58 +0000 (19:14 +0100)
committerjs6pak <me@6pak.dev>
Sat, 16 Dec 2023 22:55:58 +0000 (23:55 +0100)
src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs
src/Impostor.Server/Net/State/Game.Data.cs
src/Impostor.Server/Net/State/Game.cs

index 294e17ade930d2a39ebfa8312b161b78f25b360a..f7b145d4dfceee8266ab297a4e3c2f8e0a0330e0 100644 (file)
@@ -8,7 +8,6 @@ using Impostor.Api.Net.Custom;
 using Impostor.Api.Net.Inner;
 using Impostor.Api.Net.Messages.Rpcs;
 using Impostor.Server.Events.Player;
-using Impostor.Server.Net.Inner.Objects.ShipStatus;
 using Impostor.Server.Net.State;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.ObjectPool;
@@ -25,7 +24,6 @@ namespace Impostor.Server.Net.Inner.Objects.Components
         private readonly ObjectPool<PlayerMovementEvent> _pool;
 
         private ushort _lastSequenceId;
-        private AirshipSpawnState _spawnState;
 
         public InnerCustomNetworkTransform(ICustomMessageManager<ICustomRpc> customMessageManager, Game game, ILogger<InnerCustomNetworkTransform> logger, InnerPlayerControl playerControl, IEventManager eventManager, ObjectPool<PlayerMovementEvent> pool) : base(customMessageManager, game)
         {
@@ -103,51 +101,19 @@ namespace Impostor.Server.Net.Inner.Objects.Components
 
                 Rpc21SnapTo.Deserialize(reader, out var position, out var minSid);
 
-                if (Game.GameNet.ShipStatus is InnerAirshipStatus airshipStatus)
+                if (Game.GameNet.ShipStatus is { } shipStatus)
                 {
-                    // As part of airship spawning, clients are sending snap to -25 40 to move themself out of view
-                    if (_spawnState == AirshipSpawnState.PreSpawn && Approximately(position, airshipStatus.PreSpawnLocation))
-                    {
-                        _spawnState = AirshipSpawnState.SelectingSpawn;
-                        return true;
-                    }
-
-                    // Once the spawn has been selected, the client sends a second snap to the select spawn location
-                    if (_spawnState == AirshipSpawnState.SelectingSpawn && airshipStatus.SpawnLocations.Any(location => Approximately(position, location)))
-                    {
-                        _spawnState = AirshipSpawnState.Spawned;
-                        return true;
-                    }
-                }
-
-                if (!await ValidateCanVent(call, sender, _playerControl.PlayerInfo))
-                {
-                    return false;
-                }
-
-                if (Game.GameNet.ShipStatus == null)
-                {
-                    // Cannot perform vent position check on unknown ship statuses
-                    if (await sender.Client.ReportCheatAsync(call, "Failed vent position check on unknown map"))
-                    {
-                        return false;
-                    }
-                }
-                else
-                {
-                    var vents = Game.GameNet.ShipStatus!.Data.Vents.Values;
+                    var vents = shipStatus.Data.Vents.Values;
 
                     var vent = vents.SingleOrDefault(x => Approximately(x.Position, position + ColliderOffset));
 
-                    if (vent == null)
+                    if (vent != null)
                     {
-                        if (await sender.Client.ReportCheatAsync(call, "Failed vent position check"))
+                        if (!await ValidateCanVent(call, sender, _playerControl.PlayerInfo))
                         {
                             return false;
                         }
-                    }
-                    else
-                    {
+
                         await _eventManager.CallAsync(new PlayerVentEvent(Game, sender, _playerControl, vent));
                     }
                 }
@@ -169,11 +135,6 @@ namespace Impostor.Server.Net.Inner.Objects.Components
             _pool.Return(playerMovementEvent);
         }
 
-        internal void OnPlayerSpawn()
-        {
-            _spawnState = AirshipSpawnState.PreSpawn;
-        }
-
         private static bool SidGreaterThan(ushort newSid, ushort prevSid)
         {
             var num = (ushort)(prevSid + (uint)short.MaxValue);
index 000ffd15d90da7d50ee0a8e2450cb9efc5e09c5d..2761893d40defb61f7044c4d6484f2e535f55c9d 100644 (file)
@@ -355,7 +355,10 @@ namespace Impostor.Server.Net.State
                 {
                     foreach (var player in _players.Values)
                     {
-                        player.Character?.NetworkTransform.OnPlayerSpawn();
+                        if (GameNet.ShipStatus != null)
+                        {
+                            await player.Character!.NetworkTransform.SetPositionAsync(player, GameNet.ShipStatus.GetSpawnLocation(player.Character, PlayerCount, false));
+                        }
                     }
 
                     await _eventManager.CallAsync(new MeetingStartedEvent(this, meetingHud));
index dc75cc867210b5baf01ecfaf21c688a1794bd8ba..918294a71bd46813ac31e4d4ee1308423db461a1 100644 (file)
@@ -119,8 +119,6 @@ namespace Impostor.Server.Net.State
             {
                 foreach (var player in _players.Values)
                 {
-                    player.Character?.NetworkTransform.OnPlayerSpawn();
-
                     if (GameNet.ShipStatus != null)
                     {
                         await player.Character!.NetworkTransform.SetPositionAsync(player, GameNet.ShipStatus.GetSpawnLocation(player.Character, PlayerCount, true));