From 454f486f29d257c60b69b2b7a1ac723e3f96488a Mon Sep 17 00:00:00 2001 From: Saghetti0 <60995055+Saghetti0@users.noreply.github.com> Date: Tue, 27 Oct 2020 17:00:47 -0700 Subject: [PATCH] Add PlayerExileEvent and PlayerMurderEvent (#93) --- .../Events/Game/Player/IPlayerExileEvent.cs | 10 +++++++ .../Events/Game/Player/IPlayerMurderEvent.cs | 12 +++++++++ .../Events/Game/Player/PlayerExileEvent.cs | 23 ++++++++++++++++ .../Events/Game/Player/PlayerMurderEvent.cs | 26 +++++++++++++++++++ .../Net/Inner/Objects/InnerPlayerControl.cs | 5 +++- 5 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/Impostor.Api/Events/Game/Player/IPlayerExileEvent.cs create mode 100644 src/Impostor.Api/Events/Game/Player/IPlayerMurderEvent.cs create mode 100644 src/Impostor.Server/Events/Game/Player/PlayerExileEvent.cs create mode 100644 src/Impostor.Server/Events/Game/Player/PlayerMurderEvent.cs diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerExileEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerExileEvent.cs new file mode 100644 index 0000000..2f6fa1f --- /dev/null +++ b/src/Impostor.Api/Events/Game/Player/IPlayerExileEvent.cs @@ -0,0 +1,10 @@ +namespace Impostor.Api.Events.Player +{ + /// + /// Called whenever a player gets exiled (voted out) + /// Never actually gets called, for future use. + /// + public interface IPlayerExileEvent : IPlayerEvent + { + } +} diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerMurderEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerMurderEvent.cs new file mode 100644 index 0000000..c47c00b --- /dev/null +++ b/src/Impostor.Api/Events/Game/Player/IPlayerMurderEvent.cs @@ -0,0 +1,12 @@ +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Events.Player +{ + public interface IPlayerMurderEvent : IPlayerEvent + { + /// + /// Gets the player who got murdered. + /// + IInnerPlayerControl Victim { get; } + } +} diff --git a/src/Impostor.Server/Events/Game/Player/PlayerExileEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerExileEvent.cs new file mode 100644 index 0000000..a8660da --- /dev/null +++ b/src/Impostor.Server/Events/Game/Player/PlayerExileEvent.cs @@ -0,0 +1,23 @@ +using Impostor.Api.Events.Player; +using Impostor.Api.Games; +using Impostor.Api.Net; +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Server.Events.Player +{ + public class PlayerExileEvent : IPlayerExileEvent + { + public PlayerExileEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl) + { + Game = game; + ClientPlayer = clientPlayer; + PlayerControl = playerControl; + } + + public IGame Game { get; } + + public IClientPlayer ClientPlayer { get; } + + public IInnerPlayerControl PlayerControl { get; } + } +} diff --git a/src/Impostor.Server/Events/Game/Player/PlayerMurderEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerMurderEvent.cs new file mode 100644 index 0000000..ca64c35 --- /dev/null +++ b/src/Impostor.Server/Events/Game/Player/PlayerMurderEvent.cs @@ -0,0 +1,26 @@ +using Impostor.Api.Events.Player; +using Impostor.Api.Games; +using Impostor.Api.Net; +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Server.Events.Player +{ + public class PlayerMurderEvent : IPlayerMurderEvent + { + public PlayerMurderEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl, IInnerPlayerControl victim) + { + Game = game; + ClientPlayer = clientPlayer; + PlayerControl = playerControl; + Victim = victim; + } + + public IGame Game { get; } + + public IClientPlayer ClientPlayer { get; } + + public IInnerPlayerControl PlayerControl { get; } + + public IInnerPlayerControl Victim { get; } + } +} diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs index 74aa531..68add34 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs @@ -138,6 +138,8 @@ namespace Impostor.Server.Net.Inner.Objects // TODO: Not hit? Die(DeathReason.Exile); + + await _eventManager.CallAsync(new PlayerExileEvent(_game, sender, this)); break; } @@ -271,6 +273,7 @@ namespace Impostor.Server.Net.Inner.Objects if (!player.PlayerInfo.IsDead) { player.Die(DeathReason.Kill); + await _eventManager.CallAsync(new PlayerMurderEvent(_game, sender, this, player)); } break; @@ -418,4 +421,4 @@ namespace Impostor.Server.Net.Inner.Objects PlayerInfo.LastDeathReason = reason; } } -} \ No newline at end of file +} -- 2.39.5