From: Mr-VIT Date: Mon, 30 Nov 2020 18:36:24 +0000 (+0300) Subject: Upgrade OnPlayerReportedBodyEvent to OnPlayerStartMeetingEvent (#184) X-Git-Tag: v1.2.2~8 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=d847b5c708d88010156908759112a713b46f5dcc;p=rhonda%2Fimpostor.git Upgrade OnPlayerReportedBodyEvent to OnPlayerStartMeetingEvent (#184) * upgrade PlayerReportedBodyEvent to PlayerStartMeetingEvent now triggers on host player actions as well * update OnPlayerReportedBodyEvent in plugin example --- diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerReportedBodyEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerReportedBodyEvent.cs deleted file mode 100644 index bc45317..0000000 --- a/src/Impostor.Api/Events/Game/Player/IPlayerReportedBodyEvent.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Impostor.Api.Net.Inner.Objects; - -namespace Impostor.Api.Events.Player -{ - public interface IPlayerReportedBodyEvent : IPlayerEvent - { - /// - /// Gets the player who's body got reported. - /// - 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 index 0000000..1a28115 --- /dev/null +++ b/src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs @@ -0,0 +1,12 @@ +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Events.Player +{ + public interface IPlayerStartMeetingEvent : IPlayerEvent + { + /// + /// 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/PlayerReportedBodyEvent.cs deleted file mode 100644 index 0db95b2..0000000 --- a/src/Impostor.Server/Events/Game/Player/PlayerReportedBodyEvent.cs +++ /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 index 0000000..70cb0d8 --- /dev/null +++ b/src/Impostor.Server/Events/Game/Player/PlayerStartMeetingEvent.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 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; } + } +} 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; }