mirror of
https://github.com/Impostor/Impostor.git
synced 2026-10-20 01:46:11 +00:00
Make PlayerVentEvent an actual PlayerVentEvent
This commit is contained in:
1 parent
f03e72206e
commit
bfba4385fd
9 files changed
+122
-12
No files matched your search
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user