From d590da0d27388e5b95db9c7bc7ba3558b1a57135 Mon Sep 17 00:00:00 2001 From: AlexejheroYTB Date: Mon, 16 Nov 2020 00:40:38 +0200 Subject: [PATCH] Add TaskTypes enum, PlayerCompletedTaskEvent, and updated ITaskInfo to use TaskTypes (#144) --- .../Game/Player/IPlayerCompletedTaskEvent.cs | 9 ++++ src/Impostor.Api/Innersloth/TaskTypes.cs | 49 +++++++++++++++++++ .../Net/Inner/Objects/ITaskInfo.cs | 5 +- .../Game/Player/PlayerCompletedTaskEvent.cs | 27 ++++++++++ .../Inner/Objects/InnerGameData.TaskInfo.cs | 9 ++-- .../Net/Inner/Objects/InnerGameData.cs | 3 +- .../Net/Inner/Objects/InnerPlayerControl.cs | 3 +- .../Systems/ShipStatus/DoorsSystemType.cs | 1 - 8 files changed, 97 insertions(+), 9 deletions(-) create mode 100644 src/Impostor.Api/Events/Game/Player/IPlayerCompletedTaskEvent.cs create mode 100644 src/Impostor.Api/Innersloth/TaskTypes.cs create mode 100644 src/Impostor.Server/Events/Game/Player/PlayerCompletedTaskEvent.cs diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerCompletedTaskEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerCompletedTaskEvent.cs new file mode 100644 index 0000000..593c53d --- /dev/null +++ b/src/Impostor.Api/Events/Game/Player/IPlayerCompletedTaskEvent.cs @@ -0,0 +1,9 @@ +using Impostor.Api.Innersloth; + +namespace Impostor.Api.Events.Player +{ + public interface IPlayerCompletedTaskEvent : IPlayerEvent + { + TaskTypes Task { get; } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/TaskTypes.cs b/src/Impostor.Api/Innersloth/TaskTypes.cs new file mode 100644 index 0000000..8b15354 --- /dev/null +++ b/src/Impostor.Api/Innersloth/TaskTypes.cs @@ -0,0 +1,49 @@ +namespace Impostor.Api.Innersloth +{ + public enum TaskTypes : uint + { + SubmitScan = 0, + PrimeShields = 1, + FuelEngines = 2, + ChartCourse = 3, + StartReactor = 4, + SwipeCard = 5, + ClearAsteroids = 6, + UploadData = 7, + InspectSample = 8, + EmptyChute = 9, + EmptyGarbage = 10, + AlignEngineOutput = 11, + FixWiring = 12, + CalibrateDistributor = 13, + DivertPower = 14, + UnlockManifolds = 15, + ResetReactor = 16, + FixLights = 17, + Filter = 18, + FixComms = 19, + RestoreOxy = 20, + StabilizeSteering = 21, + AssembleArtifact = 22, + SortSamples = 23, + MeasureWeather = 24, + EnterIdCode = 25, + BuyBeverage = 26, + ProcessData = 27, + RunDiagnostics = 28, + WaterPlants = 29, + MonitorOxygen = 30, + StoreArtifact = 31, + FillCanisters = 32, + ActivateWeatherNodes = 33, + InsertKeys = 34, + ResetSeismic = 35, + ScanBoardingPass = 36, + OpenWaterways = 37, + ReplaceWaterJug = 38, + RepairDrill = 39, + AlignTelescope = 40, + RecordTemperature = 41, + RebootWifi = 42, + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Inner/Objects/ITaskInfo.cs b/src/Impostor.Api/Net/Inner/Objects/ITaskInfo.cs index c80ee07..3a6f075 100644 --- a/src/Impostor.Api/Net/Inner/Objects/ITaskInfo.cs +++ b/src/Impostor.Api/Net/Inner/Objects/ITaskInfo.cs @@ -1,10 +1,11 @@ -using Impostor.Api.Net.Messages; +using Impostor.Api.Innersloth; +using Impostor.Api.Net.Messages; namespace Impostor.Api.Net.Inner.Objects { public interface ITaskInfo { - uint Id { get; } + TaskTypes Type { get; } bool Complete { get; } } diff --git a/src/Impostor.Server/Events/Game/Player/PlayerCompletedTaskEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerCompletedTaskEvent.cs new file mode 100644 index 0000000..f0f6ab7 --- /dev/null +++ b/src/Impostor.Server/Events/Game/Player/PlayerCompletedTaskEvent.cs @@ -0,0 +1,27 @@ +using Impostor.Api.Events.Player; +using Impostor.Api.Games; +using Impostor.Api.Innersloth; +using Impostor.Api.Net; +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Server.Events.Player +{ + public class PlayerCompletedTaskEvent : IPlayerCompletedTaskEvent + { + public PlayerCompletedTaskEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl, uint taskID) + { + Game = game; + ClientPlayer = clientPlayer; + PlayerControl = playerControl; + Task = (TaskTypes)taskID; + } + + public IGame Game { get; } + + public IClientPlayer ClientPlayer { get; } + + public IInnerPlayerControl PlayerControl { get; } + + public TaskTypes Task { get; } + } +} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerGameData.TaskInfo.cs b/src/Impostor.Server/Net/Inner/Objects/InnerGameData.TaskInfo.cs index 40fcbb4..b4aa46a 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerGameData.TaskInfo.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerGameData.TaskInfo.cs @@ -1,4 +1,5 @@ -using Impostor.Api.Net.Inner.Objects; +using Impostor.Api.Innersloth; +using Impostor.Api.Net.Inner.Objects; using Impostor.Api.Net.Messages; namespace Impostor.Server.Net.Inner.Objects @@ -7,19 +8,19 @@ namespace Impostor.Server.Net.Inner.Objects { public class TaskInfo : ITaskInfo { - public uint Id { get; internal set; } + public TaskTypes Type { get; internal set; } public bool Complete { get; internal set; } public void Serialize(IMessageWriter writer) { - writer.WritePacked(Id); + writer.WritePacked((uint)Type); writer.Write(Complete); } public void Deserialize(IMessageReader reader) { - this.Id = reader.ReadPackedUInt32(); + this.Type = (TaskTypes)reader.ReadPackedUInt32(); this.Complete = reader.ReadBoolean(); } } diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerGameData.cs b/src/Impostor.Server/Net/Inner/Objects/InnerGameData.cs index ca3d9e0..af650e3 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerGameData.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerGameData.cs @@ -3,6 +3,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading.Tasks; using Impostor.Api; +using Impostor.Api.Innersloth; using Impostor.Api.Net; using Impostor.Api.Net.Inner.Objects; using Impostor.Api.Net.Messages; @@ -176,7 +177,7 @@ namespace Impostor.Server.Net.Inner.Objects foreach (var taskId in taskTypeIds.ToArray()) { - player.Tasks.Add(new TaskInfo { Id = taskId }); + player.Tasks.Add(new TaskInfo { Type = (TaskTypes)taskId }); } } } diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs index 14b2687..4bfdfe4 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs @@ -80,7 +80,8 @@ namespace Impostor.Server.Net.Inner.Objects throw new ImpostorCheatException($"Client sent {nameof(RpcCalls.CompleteTask)} to a specific player instead of broadcast"); } - var index = reader.ReadPackedUInt32(); + var taskId = reader.ReadPackedUInt32(); + await _eventManager.CallAsync(new PlayerCompletedTaskEvent(_game, sender, this, taskId)); break; } diff --git a/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/DoorsSystemType.cs b/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/DoorsSystemType.cs index 712b00a..64b1f5f 100644 --- a/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/DoorsSystemType.cs +++ b/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/DoorsSystemType.cs @@ -13,7 +13,6 @@ namespace Impostor.Server.Net.Inner.Objects.Systems.ShipStatus public DoorsSystemType(IGame game) { - // TODO: Check var doorCount = game.Options.Map switch { MapTypes.Skeld => 13, -- 2.39.5