]> git.deb.at Git - rhonda/impostor.git/commitdiff
Make PlayerVentEvent an actual PlayerVentEvent
authorjs6pak <kubastaron@hotmail.com>
Tue, 6 Apr 2021 19:10:53 +0000 (21:10 +0200)
committerjs6pak <kubastaron@hotmail.com>
Tue, 6 Apr 2021 19:10:53 +0000 (21:10 +0200)
src/Impostor.Api/Events/Game/Player/IPlayerEnterVentEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/Player/IPlayerExitVentEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs
src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs
src/Impostor.Server/Events/Game/Player/PlayerEnterVentEvent.cs [new file with mode: 0644]
src/Impostor.Server/Events/Game/Player/PlayerExitVentEvent.cs [new file with mode: 0644]
src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs
src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs
src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs

diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerEnterVentEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerEnterVentEvent.cs
new file mode 100644 (file)
index 0000000..dddcb3b
--- /dev/null
@@ -0,0 +1,12 @@
+using Impostor.Api.Innersloth;
+
+namespace Impostor.Api.Events.Player
+{
+    public interface IPlayerEnterVentEvent : IPlayerEvent
+    {
+        /// <summary>
+        ///     Gets get the id of the used vent.
+        /// </summary>
+        public Vent Vent { get; }
+    }
+}
diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerExitVentEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerExitVentEvent.cs
new file mode 100644 (file)
index 0000000..516f80b
--- /dev/null
@@ -0,0 +1,12 @@
+using Impostor.Api.Innersloth;
+
+namespace Impostor.Api.Events.Player
+{
+    public interface IPlayerExitVentEvent : IPlayerEvent
+    {
+        /// <summary>
+        ///     Gets get the id of the used vent.
+        /// </summary>
+        public Vent Vent { get; }
+    }
+}
index b1d6d8bd21ee10a3c521dad84c583621be986728..0ab202d4171dd69e982db94e7c50ebbd6e41a67b 100644 (file)
@@ -8,10 +8,5 @@ namespace Impostor.Api.Events.Player
         ///     Gets get the id of the used vent.
         /// </summary>
         public Vent Vent { get; }
-
-        /// <summary>
-        ///     Gets a value indicating whether the vent was entered or exited.
-        /// </summary>
-        public bool VentEnter { get; }
     }
 }
index a052fd7124c88821d8e4aa0fee58d7f6390d629f..fbef0f40ba884612f169a5c942ac1a2e9c33107f 100644 (file)
@@ -94,10 +94,22 @@ namespace Impostor.Plugins.Example.Handlers
             _logger.LogInformation("Player {player} > started meeting, reason: {reason}", e.PlayerControl.PlayerInfo.PlayerName, e.Body == null ? "Emergency call button" : "Found the body of the player " + e.Body.PlayerInfo.PlayerName);
         }
 
+        [EventListener]
+        public void OnPlayerEnterVentEvent(IPlayerEnterVentEvent e)
+        {
+            _logger.LogInformation("Player {player} entered the vent in {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name);
+        }
+
+        [EventListener]
+        public void OnPlayerExitVentEvent(IPlayerExitVentEvent e)
+        {
+            _logger.LogInformation("Player {player} exit the vent in {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name);
+        }
+
         [EventListener]
         public void OnPlayerVentEvent(IPlayerVentEvent e)
         {
-            _logger.LogInformation("Player {player} " + (e.VentEnter ? "entered" : "exit") + " the vent in {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name);
+            _logger.LogInformation("Player {player} vented to {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name);
         }
     }
 }
diff --git a/src/Impostor.Server/Events/Game/Player/PlayerEnterVentEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerEnterVentEvent.cs
new file mode 100644 (file)
index 0000000..8e22eb6
--- /dev/null
@@ -0,0 +1,27 @@
+using Impostor.Api.Events.Player;
+using Impostor.Api.Games;
+using Impostor.Api.Innersloth;
+using Impostor.Api.Net;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Server.Events.Player
+{
+    public class PlayerEnterVentEvent : IPlayerEnterVentEvent
+    {
+        public PlayerEnterVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, Vent vent)
+        {
+            Game = game;
+            ClientPlayer = sender;
+            PlayerControl = innerPlayerPhysics;
+            Vent = vent;
+        }
+
+        public IGame Game { get; }
+
+        public IClientPlayer ClientPlayer { get; }
+
+        public IInnerPlayerControl PlayerControl { get; }
+
+        public Vent Vent { get; }
+    }
+}
diff --git a/src/Impostor.Server/Events/Game/Player/PlayerExitVentEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerExitVentEvent.cs
new file mode 100644 (file)
index 0000000..93842b2
--- /dev/null
@@ -0,0 +1,27 @@
+using Impostor.Api.Events.Player;
+using Impostor.Api.Games;
+using Impostor.Api.Innersloth;
+using Impostor.Api.Net;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Server.Events.Player
+{
+    public class PlayerExitVentEvent : IPlayerExitVentEvent
+    {
+        public PlayerExitVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, Vent vent)
+        {
+            Game = game;
+            ClientPlayer = sender;
+            PlayerControl = innerPlayerPhysics;
+            Vent = vent;
+        }
+
+        public IGame Game { get; }
+
+        public IClientPlayer ClientPlayer { get; }
+
+        public IInnerPlayerControl PlayerControl { get; }
+
+        public Vent Vent { get; }
+    }
+}
index e64cec0d9ceca2861fdfb8bfe0dc22550dc05c3f..82a99cdf66b5edabd9e48ff6b4f6e6c4d13594a7 100644 (file)
@@ -8,13 +8,12 @@ namespace Impostor.Server.Events.Player
 {
     public class PlayerVentEvent : IPlayerVentEvent
     {
-        public PlayerVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, Vent vent, bool ventEnter)
+        public PlayerVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, Vent vent)
         {
             Game = game;
             ClientPlayer = sender;
             PlayerControl = innerPlayerPhysics;
             Vent = vent;
-            VentEnter = ventEnter;
         }
 
         public IGame Game { get; }
@@ -24,7 +23,5 @@ namespace Impostor.Server.Events.Player
         public IInnerPlayerControl PlayerControl { get; }
 
         public Vent Vent { get; }
-
-        public bool VentEnter { get; }
     }
 }
index 5df6b8a98425aef3d712d5e721c8b2e183da8ecf..0b52905482f6b39efaca26c5e7d252693a46f679 100644 (file)
@@ -17,6 +17,8 @@ namespace Impostor.Server.Net.Inner.Objects.Components
 {
     internal partial class InnerCustomNetworkTransform : InnerNetObject
     {
+        private static readonly Vector2 ColliderOffset = new Vector2(0f, -0.4f);
+
         private readonly ILogger<InnerCustomNetworkTransform> _logger;
         private readonly InnerPlayerControl _playerControl;
         private readonly IEventManager _eventManager;
@@ -113,7 +115,22 @@ namespace Impostor.Server.Net.Inner.Objects.Components
                     return false;
                 }
 
-                // TODO validate vent location
+                var vents = Game.GameNet.ShipStatus!.Data.Vents.Values;
+
+                var vent = vents.SingleOrDefault(x => Approximately(x.Position, position + ColliderOffset));
+
+                if (vent == null)
+                {
+                    if (await sender.Client.ReportCheatAsync(call, "Failed vent position check"))
+                    {
+                        return false;
+                    }
+                }
+                else
+                {
+                    await _eventManager.CallAsync(new PlayerVentEvent(Game, sender, _playerControl, vent));
+                }
+
                 await SnapToAsync(sender, position, minSid);
                 return true;
             }
index b51c97a502dace8a384919776cbcf031b96f88a2..edd7b1de84233efdd258926dc277a8e36d41923a 100644 (file)
@@ -66,7 +66,18 @@ namespace Impostor.Server.Net.Inner.Objects.Components
                             throw new ArgumentOutOfRangeException(nameof(call), call, null);
                     }
 
-                    await _eventManager.CallAsync(new PlayerVentEvent(Game, sender, _playerControl, Game.GameNet.ShipStatus!.Data.Vents[ventId], call == RpcCalls.EnterVent));
+                    var vent = Game.GameNet.ShipStatus!.Data.Vents[ventId];
+
+                    switch (call)
+                    {
+                        case RpcCalls.EnterVent:
+                            await _eventManager.CallAsync(new PlayerEnterVentEvent(Game, sender, _playerControl, vent));
+                            break;
+                        case RpcCalls.ExitVent:
+                            await _eventManager.CallAsync(new PlayerExitVentEvent(Game, sender, _playerControl, vent));
+                            break;
+                    }
+
                     break;
 
                 case RpcCalls.ClimbLadder: