--- /dev/null
+using Impostor.Api.Innersloth;
+
+namespace Impostor.Api.Events.Player
+{
+ public interface IPlayerCompletedTaskEvent : IPlayerEvent
+ {
+ TaskTypes Task { get; }
+ }
+}
\ No newline at end of file
--- /dev/null
+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
-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; }
}
--- /dev/null
+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
-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
{
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();
}
}
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;
foreach (var taskId in taskTypeIds.ToArray())
{
- player.Tasks.Add(new TaskInfo { Id = taskId });
+ player.Tasks.Add(new TaskInfo { Type = (TaskTypes)taskId });
}
}
}
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;
}
public DoorsSystemType(IGame game)
{
- // TODO: Check
var doorCount = game.Options.Map switch
{
MapTypes.Skeld => 13,