From: js6pak Date: Tue, 6 Apr 2021 19:10:53 +0000 (+0200) Subject: Make PlayerVentEvent an actual PlayerVentEvent X-Git-Tag: v1.4.0~14^2~4 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=bfba4385fd96cadc885420acb441d7f433216482;p=rhonda%2Fimpostor.git Make PlayerVentEvent an actual PlayerVentEvent --- diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerEnterVentEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerEnterVentEvent.cs new file mode 100644 index 0000000..dddcb3b --- /dev/null +++ b/src/Impostor.Api/Events/Game/Player/IPlayerEnterVentEvent.cs @@ -0,0 +1,12 @@ +using Impostor.Api.Innersloth; + +namespace Impostor.Api.Events.Player +{ + public interface IPlayerEnterVentEvent : IPlayerEvent + { + /// + /// Gets get the id of the used vent. + /// + 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 index 0000000..516f80b --- /dev/null +++ b/src/Impostor.Api/Events/Game/Player/IPlayerExitVentEvent.cs @@ -0,0 +1,12 @@ +using Impostor.Api.Innersloth; + +namespace Impostor.Api.Events.Player +{ + public interface IPlayerExitVentEvent : IPlayerEvent + { + /// + /// Gets get the id of the used vent. + /// + public Vent Vent { get; } + } +} diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs index b1d6d8b..0ab202d 100644 --- a/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs +++ b/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs @@ -8,10 +8,5 @@ namespace Impostor.Api.Events.Player /// Gets get the id of the used vent. /// public Vent Vent { get; } - - /// - /// Gets a value indicating whether the vent was entered or exited. - /// - public bool VentEnter { get; } } } diff --git a/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs b/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs index a052fd7..fbef0f4 100644 --- a/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs +++ b/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs @@ -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 index 0000000..8e22eb6 --- /dev/null +++ b/src/Impostor.Server/Events/Game/Player/PlayerEnterVentEvent.cs @@ -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 index 0000000..93842b2 --- /dev/null +++ b/src/Impostor.Server/Events/Game/Player/PlayerExitVentEvent.cs @@ -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; } + } +} diff --git a/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs index e64cec0..82a99cd 100644 --- a/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs +++ b/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs @@ -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; } } } diff --git a/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs b/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs index 5df6b8a..0b52905 100644 --- a/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs +++ b/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs @@ -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 _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; } diff --git a/src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs b/src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs index b51c97a..edd7b1d 100644 --- a/src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs +++ b/src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs @@ -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: