From d847b5c708d88010156908759112a713b46f5dcc Mon Sep 17 00:00:00 2001 From: Mr-VIT Date: Mon, 30 Nov 2020 21:36:24 +0300 Subject: [PATCH] Upgrade OnPlayerReportedBodyEvent to OnPlayerStartMeetingEvent (#184) * upgrade PlayerReportedBodyEvent to PlayerStartMeetingEvent now triggers on host player actions as well * update OnPlayerReportedBodyEvent in plugin example --- ...dyEvent.cs => IPlayerStartMeetingEvent.cs} | 4 ++-- .../Handlers/PlayerEventListener.cs | 4 ++-- ...odyEvent.cs => PlayerStartMeetingEvent.cs} | 4 ++-- .../Net/Inner/Objects/InnerPlayerControl.cs | 23 ++++++++----------- 4 files changed, 15 insertions(+), 20 deletions(-) rename src/Impostor.Api/Events/Game/Player/{IPlayerReportedBodyEvent.cs => IPlayerStartMeetingEvent.cs} (50%) rename src/Impostor.Server/Events/Game/Player/{PlayerReportedBodyEvent.cs => PlayerStartMeetingEvent.cs} (82%) diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerReportedBodyEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs similarity index 50% rename from src/Impostor.Api/Events/Game/Player/IPlayerReportedBodyEvent.cs rename to src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs index bc45317..1a28115 100644 --- a/src/Impostor.Api/Events/Game/Player/IPlayerReportedBodyEvent.cs +++ b/src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs @@ -2,10 +2,10 @@ using Impostor.Api.Net.Inner.Objects; namespace Impostor.Api.Events.Player { - public interface IPlayerReportedBodyEvent : IPlayerEvent + public interface IPlayerStartMeetingEvent : IPlayerEvent { /// - /// Gets the player who's body got reported. + /// Gets the player who's body got reported. Is null when the meeting started by Emergency call button /// IInnerPlayerControl? Body { get; } } diff --git a/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs b/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs index 43691ef..0190d3b 100644 --- a/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs +++ b/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs @@ -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/PlayerStartMeetingEvent.cs similarity index 82% rename from src/Impostor.Server/Events/Game/Player/PlayerReportedBodyEvent.cs rename to src/Impostor.Server/Events/Game/Player/PlayerStartMeetingEvent.cs index 0db95b2..70cb0d8 100644 --- a/src/Impostor.Server/Events/Game/Player/PlayerReportedBodyEvent.cs +++ b/src/Impostor.Server/Events/Game/Player/PlayerStartMeetingEvent.cs @@ -5,9 +5,9 @@ using Impostor.Api.Net.Inner.Objects; namespace Impostor.Server.Events.Player { - public class PlayerReportedBodyEvent : IPlayerReportedBodyEvent + public class PlayerStartMeetingEvent : IPlayerStartMeetingEvent { - public PlayerReportedBodyEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl, IInnerPlayerControl? body) + public PlayerStartMeetingEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl, IInnerPlayerControl? body) { Game = game; ClientPlayer = clientPlayer; diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs index 4bfdfe4..b1867c8 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs @@ -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; } -- 2.39.5