]> git.deb.at Git - rhonda/impostor.git/commitdiff
Fix KeyNotFoundException for nonexistent vents (#413)
authorminiduikboot <mini@duikbo.at>
Mon, 17 May 2021 17:13:54 +0000 (19:13 +0200)
committerGitHub <noreply@github.com>
Mon, 17 May 2021 17:13:54 +0000 (17:13 +0000)
Some mods add extra vents that don't yet exist, this commit checks if a
given vent exists and if it doesn't, throw an AC violation instead of
disconnecting the player

One downside is that the Enter/ExitVent events are no longer called, but
this would require the vent in that event to become nullable

src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs

index 053fbf384f41d428fac89ce658594df029c689cd..7ce286082acb2cc332c961b76b30a1627cdbcef2 100644 (file)
@@ -1,6 +1,7 @@
 using System;
 using System.Threading.Tasks;
 using Impostor.Api.Events.Managers;
+using Impostor.Api.Innersloth;
 using Impostor.Api.Net;
 using Impostor.Api.Net.Custom;
 using Impostor.Api.Net.Inner;
@@ -65,7 +66,15 @@ namespace Impostor.Server.Net.Inner.Objects.Components
                             throw new ArgumentOutOfRangeException(nameof(call), call, null);
                     }
 
-                    var vent = Game.GameNet.ShipStatus!.Data.Vents[ventId];
+                    if (!Game.GameNet.ShipStatus!.Data.Vents.TryGetValue(ventId, out var vent))
+                    {
+                        if (await sender.Client.ReportCheatAsync(call, "Client interacted with nonexistent vent"))
+                        {
+                            return false;
+                        }
+
+                        break;
+                    }
 
                     switch (call)
                     {