]> git.deb.at Git - rhonda/impostor.git/commitdiff
Upgrade OnPlayerReportedBodyEvent to OnPlayerStartMeetingEvent (#184)
authorMr-VIT <vit@v1t.su>
Mon, 30 Nov 2020 18:36:24 +0000 (21:36 +0300)
committerGitHub <noreply@github.com>
Mon, 30 Nov 2020 18:36:24 +0000 (19:36 +0100)
* upgrade PlayerReportedBodyEvent to PlayerStartMeetingEvent

now triggers on host player actions as well

* update OnPlayerReportedBodyEvent in plugin example

src/Impostor.Api/Events/Game/Player/IPlayerReportedBodyEvent.cs [deleted file]
src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs [new file with mode: 0644]
src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs
src/Impostor.Server/Events/Game/Player/PlayerReportedBodyEvent.cs [deleted file]
src/Impostor.Server/Events/Game/Player/PlayerStartMeetingEvent.cs [new file with mode: 0644]
src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs

diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerReportedBodyEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerReportedBodyEvent.cs
deleted file mode 100644 (file)
index bc45317..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-using Impostor.Api.Net.Inner.Objects;
-
-namespace Impostor.Api.Events.Player
-{
-    public interface IPlayerReportedBodyEvent : IPlayerEvent
-    {
-        /// <summary>
-        ///     Gets the player who's body got reported.
-        /// </summary>
-        IInnerPlayerControl? Body { get; }
-    }
-}
diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs
new file mode 100644 (file)
index 0000000..1a28115
--- /dev/null
@@ -0,0 +1,12 @@
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Api.Events.Player
+{
+    public interface IPlayerStartMeetingEvent : IPlayerEvent
+    {
+        /// <summary>
+        ///     Gets the player who's body got reported. Is null when the meeting started by Emergency call button
+        /// </summary>
+        IInnerPlayerControl? Body { get; }
+    }
+}
index 43691ef15773fbfd97fb1280c45cb5e7d59e8811..0190d3b14b00c9a56fd0a8910397fbecf2e2b2a0 100644 (file)
@@ -92,9 +92,9 @@ namespace Impostor.Plugins.Example.Handlers
         }
 
         [EventListener]
-        public void OnPlayerReportedBodyEvent(IPlayerReportedBodyEvent e)
+        public void OnPlayerStartMeetingEvent(IPlayerStartMeetingEvent e)
         {
-            _logger.LogDebug("Player reported body");
+            _logger.LogDebug($"Player {e.PlayerControl.PlayerInfo.PlayerName} start meeting, reason: " + (e.Body==null ? "Emergency call button" : "Found the body of the player "+e.Body.PlayerInfo.PlayerName));
         }
     }
 }
diff --git a/src/Impostor.Server/Events/Game/Player/PlayerReportedBodyEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerReportedBodyEvent.cs
deleted file mode 100644 (file)
index 0db95b2..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-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 PlayerReportedBodyEvent : IPlayerReportedBodyEvent
-    {
-        public PlayerReportedBodyEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl, IInnerPlayerControl? body)
-        {
-            Game = game;
-            ClientPlayer = clientPlayer;
-            PlayerControl = playerControl;
-            Body = body;
-        }
-
-        public IGame Game { get; }
-
-        public IClientPlayer ClientPlayer { get; }
-
-        public IInnerPlayerControl PlayerControl { get; }
-
-        public IInnerPlayerControl? Body { get; }
-    }
-}
diff --git a/src/Impostor.Server/Events/Game/Player/PlayerStartMeetingEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerStartMeetingEvent.cs
new file mode 100644 (file)
index 0000000..70cb0d8
--- /dev/null
@@ -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 PlayerStartMeetingEvent : IPlayerStartMeetingEvent
+    {
+        public PlayerStartMeetingEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl, IInnerPlayerControl? body)
+        {
+            Game = game;
+            ClientPlayer = clientPlayer;
+            PlayerControl = playerControl;
+            Body = body;
+        }
+
+        public IGame Game { get; }
+
+        public IClientPlayer ClientPlayer { get; }
+
+        public IInnerPlayerControl PlayerControl { get; }
+
+        public IInnerPlayerControl? Body { get; }
+    }
+}
index 4bfdfe4220171f0da6a20ce162e16d62737ed19d..b1867c8799fef891252b319d36e2436e23d41ea9 100644 (file)
@@ -237,6 +237,7 @@ namespace Impostor.Server.Net.Inner.Objects
                 }
 
                 // TODO: (ANTICHEAT) Location check?
+                // only called by a non-host player on to start meeting
                 case RpcCalls.ReportDeadBody:
                 {
                     if (!sender.IsOwner(this))
@@ -249,19 +250,10 @@ namespace Impostor.Server.Net.Inner.Objects
                         throw new ImpostorCheatException($"Client sent {nameof(RpcCalls.ReportDeadBody)} to a specific player instead of broadcast");
                     }
 
-                    // deadBodyPlayerId can be byte.MaxValue.
-                    // It happens when internally PlayerInfo is null.
-                    var deadBodyPlayerId = reader.ReadByte();
-                    var deadPlayer = deadBodyPlayerId != byte.MaxValue
-                        ? _game.GameNet.GameData.GetPlayerById(deadBodyPlayerId)?.Controller
-                        : null;
 
-                    if (deadBodyPlayerId == byte.MaxValue)
-                    {
-                        _logger.LogWarning("deadBodyPlayerId was byte.MaxValue");
-                    }
+                    var deadBodyPlayerId = reader.ReadByte();
+                    // deadBodyPlayerId == byte.MaxValue -- means emergency call by button
 
-                    await _eventManager.CallAsync(new PlayerReportedBodyEvent(_game, sender, this, deadPlayer));
                     break;
                 }
 
@@ -330,10 +322,13 @@ namespace Impostor.Server.Net.Inner.Objects
                         throw new ImpostorCheatException($"Client sent {nameof(RpcCalls.StartMeeting)} to a specific player instead of broadcast");
                     }
 
-                    var playerId = reader.ReadByte();
-                    var player = _game.GameNet.GameData.GetPlayerById(playerId);
+                    // deadBodyPlayerId == byte.MaxValue -- means emergency call by button
+                    var deadBodyPlayerId = reader.ReadByte();
+                    var deadPlayer = deadBodyPlayerId != byte.MaxValue
+                        ? _game.GameNet.GameData.GetPlayerById(deadBodyPlayerId)?.Controller
+                        : null;
 
-                    // Meeting started by "player", can also be null.
+                    await _eventManager.CallAsync(new PlayerStartMeetingEvent(_game, _game.GetClientPlayer(this.OwnerId), this, deadPlayer));
                     break;
                 }