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