From 9b58f2b36db6711b582b7de50eac0ad358996026 Mon Sep 17 00:00:00 2001 From: js6pak Date: Sat, 16 Dec 2023 23:36:02 +0100 Subject: [PATCH] Source generate map data and enums (#548) --- Dockerfile | 2 + .../Extensions.cs | 30 + .../Generators/BaseGenerator.cs | 22 + .../Generators/EnumGenerator.cs | 39 + .../Generators/MapDataGenerator.cs | 210 +++ .../Impostor.Api.Innersloth.Generator.csproj | 38 + .../Properties/launchSettings.json | 9 + .../SourceGenerator.cs | 98 ++ .../Vector2Converter.cs | 42 + .../packages.lock.json | 156 ++ .../Game/Player/IPlayerEnterVentEvent.cs | 4 +- .../Game/Player/IPlayerExitVentEvent.cs | 4 +- .../Events/Game/Player/IPlayerVentEvent.cs | 4 +- src/Impostor.Api/Impostor.Api.csproj | 3 + .../Innersloth/Customization/ColorType.cs | 24 - .../Innersloth/Data/SpawnableObjects.json | 14 + .../Innersloth/Data/enums/ColorType.json | 20 + .../Data/enums/DisconnectReasons.json | 46 + .../Innersloth/Data/enums/GameKeywords.json | 22 + .../Innersloth/Data/enums/GameOverReason.json | 11 + .../Innersloth/Data/enums/Platforms.json | 13 + .../Innersloth/Data/enums/RoleTypes.json | 10 + .../Innersloth/Data/enums/RpcCalls.json | 59 + .../Innersloth/Data/enums/StringNames.json | 1399 +++++++++++++++++ .../Innersloth/Data/enums/SupportedLangs.json | 18 + .../Innersloth/Data/enums/SystemTypes.json | 61 + .../Innersloth/Data/enums/TaskTypes.json | 84 + src/Impostor.Api/Innersloth/Data/info.json | 5 + .../Innersloth/Data/maps/Airship/doors.json | 149 ++ .../Innersloth/Data/maps/Airship/spawn.json | 15 + .../Innersloth/Data/maps/Airship/systems.json | 13 + .../Innersloth/Data/maps/Airship/tasks.json | 1131 +++++++++++++ .../Innersloth/Data/maps/Airship/vents.json | 122 ++ .../Innersloth/Data/maps/April/doors.json | 93 ++ .../Innersloth/Data/maps/April/spawn.json | 15 + .../Innersloth/Data/maps/April/systems.json | 11 + .../Innersloth/Data/maps/April/tasks.json | 480 ++++++ .../Innersloth/Data/maps/April/vents.json | 142 ++ .../Innersloth/Data/maps/Fungle/doors.json | 58 + .../Innersloth/Data/maps/Fungle/spawn.json | 15 + .../Innersloth/Data/maps/Fungle/systems.json | 8 + .../Innersloth/Data/maps/Fungle/tasks.json | 520 ++++++ .../Innersloth/Data/maps/Fungle/vents.json | 102 ++ .../Innersloth/Data/maps/Mira/doors.json | 1 + .../Innersloth/Data/maps/Mira/spawn.json | 15 + .../Innersloth/Data/maps/Mira/systems.json | 9 + .../Innersloth/Data/maps/Mira/tasks.json | 520 ++++++ .../Innersloth/Data/maps/Mira/vents.json | 112 ++ .../Innersloth/Data/maps/Polus/doors.json | 114 ++ .../Innersloth/Data/maps/Polus/spawn.json | 15 + .../Innersloth/Data/maps/Polus/systems.json | 10 + .../Innersloth/Data/maps/Polus/tasks.json | 851 ++++++++++ .../Innersloth/Data/maps/Polus/vents.json | 122 ++ .../Innersloth/Data/maps/Skeld/doors.json | 93 ++ .../Innersloth/Data/maps/Skeld/spawn.json | 15 + .../Innersloth/Data/maps/Skeld/systems.json | 11 + .../Innersloth/Data/maps/Skeld/tasks.json | 613 ++++++++ .../Innersloth/Data/maps/Skeld/vents.json | 142 ++ .../Innersloth/DisconnectReason.cs | 68 - src/Impostor.Api/Innersloth/GameKeywords.cs | 29 - src/Impostor.Api/Innersloth/GameOverReason.cs | 13 - src/Impostor.Api/Innersloth/ITask.cs | 15 - src/Impostor.Api/Innersloth/IVent.cs | 19 - src/Impostor.Api/Innersloth/Language.cs | 19 - src/Impostor.Api/Innersloth/MapFlags.cs | 12 +- src/Impostor.Api/Innersloth/MapTypes.cs | 2 + .../Innersloth/Maps/AirshipData.cs | 94 -- src/Impostor.Api/Innersloth/Maps/DoorData.cs | 19 + src/Impostor.Api/Innersloth/Maps/IMapData.cs | 19 - src/Impostor.Api/Innersloth/Maps/MapData.cs | 34 + src/Impostor.Api/Innersloth/Maps/MiraData.cs | 77 - src/Impostor.Api/Innersloth/Maps/PolusData.cs | 84 - src/Impostor.Api/Innersloth/Maps/SkeldData.cs | 83 - src/Impostor.Api/Innersloth/Maps/TaskData.cs | 23 + .../Innersloth/Maps/Tasks/AirshipTask.cs | 73 - .../Innersloth/Maps/Tasks/MiraTask.cs | 57 - .../Innersloth/Maps/Tasks/PolusTask.cs | 63 - .../Innersloth/Maps/Tasks/SkeldTask.cs | 60 - src/Impostor.Api/Innersloth/Maps/VentData.cs | 36 + .../Innersloth/Maps/Vents/AirshipVent.cs | 61 - .../Innersloth/Maps/Vents/MiraVent.cs | 60 - .../Innersloth/Maps/Vents/PolusVent.cs | 61 - .../Innersloth/Maps/Vents/SkeldVent.cs | 63 - src/Impostor.Api/Innersloth/Platforms.cs | 17 - src/Impostor.Api/Innersloth/RoleTypes.cs | 14 - src/Impostor.Api/Innersloth/SystemTypes.cs | 101 -- src/Impostor.Api/Innersloth/TaskTypes.cs | 67 - .../Net/Inner/Objects/ITaskInfo.cs | 4 +- src/Impostor.Api/Net/Inner/RpcCalls.cs | 51 - .../Net/Messages/Rpcs/Rpc38SetLevel.cs | 15 + .../{Rpc39SetHat.cs => Rpc39SetHatStr.cs} | 2 +- .../{Rpc40SetSkin.cs => Rpc40SetSkinStr.cs} | 2 +- .../{Rpc41SetPet.cs => Rpc41SetPetStr.cs} | 2 +- .../Net/Messages/Rpcs/Rpc42SetVisorStr.cs | 15 + .../Net/Messages/Rpcs/Rpc43SetNamePlateStr.cs | 15 + .../Handlers/GameEventListener.cs | 2 - .../Handlers/PlayerEventListener.cs | 6 +- .../Game/Player/PlayerEnterVentEvent.cs | 6 +- .../Events/Game/Player/PlayerExitVentEvent.cs | 6 +- .../Events/Game/Player/PlayerVentEvent.cs | 6 +- src/Impostor.Server/Net/Client.cs | 4 +- .../Inner/Objects/InnerGameData.TaskInfo.cs | 6 +- .../Net/Inner/Objects/InnerMeetingHud.cs | 2 +- .../Inner/Objects/InnerPlayerControl.Api.cs | 6 +- .../Net/Inner/Objects/InnerPlayerControl.cs | 22 +- .../Objects/ShipStatus/InnerAirshipStatus.cs | 14 +- .../ShipStatus/InnerFungleShipStatus.cs | 26 + .../Objects/ShipStatus/InnerMiraShipStatus.cs | 14 +- .../ShipStatus/InnerPolusShipStatus.cs | 19 +- .../Objects/ShipStatus/InnerShipStatus.cs | 20 +- .../ShipStatus/InnerSkeldShipStatus.cs | 14 +- src/Impostor.Server/Net/State/Game.Data.cs | 29 +- src/Impostor.sln | 10 + 113 files changed, 8203 insertions(+), 1422 deletions(-) create mode 100644 src/Impostor.Api.Innersloth.Generator/Extensions.cs create mode 100644 src/Impostor.Api.Innersloth.Generator/Generators/BaseGenerator.cs create mode 100644 src/Impostor.Api.Innersloth.Generator/Generators/EnumGenerator.cs create mode 100644 src/Impostor.Api.Innersloth.Generator/Generators/MapDataGenerator.cs create mode 100644 src/Impostor.Api.Innersloth.Generator/Impostor.Api.Innersloth.Generator.csproj create mode 100644 src/Impostor.Api.Innersloth.Generator/Properties/launchSettings.json create mode 100644 src/Impostor.Api.Innersloth.Generator/SourceGenerator.cs create mode 100644 src/Impostor.Api.Innersloth.Generator/Vector2Converter.cs create mode 100644 src/Impostor.Api.Innersloth.Generator/packages.lock.json delete mode 100644 src/Impostor.Api/Innersloth/Customization/ColorType.cs create mode 100644 src/Impostor.Api/Innersloth/Data/SpawnableObjects.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/ColorType.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/DisconnectReasons.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/GameKeywords.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/GameOverReason.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/Platforms.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/RpcCalls.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/StringNames.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/SupportedLangs.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/SystemTypes.json create mode 100644 src/Impostor.Api/Innersloth/Data/enums/TaskTypes.json create mode 100644 src/Impostor.Api/Innersloth/Data/info.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Airship/doors.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Airship/spawn.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Airship/systems.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Airship/tasks.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Airship/vents.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/April/doors.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/April/spawn.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/April/systems.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/April/tasks.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/April/vents.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Fungle/doors.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Fungle/spawn.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Fungle/systems.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Fungle/tasks.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Fungle/vents.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Mira/doors.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Mira/spawn.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Mira/systems.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Mira/tasks.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Mira/vents.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Polus/doors.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Polus/spawn.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Polus/systems.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Polus/tasks.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Polus/vents.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Skeld/doors.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Skeld/spawn.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Skeld/systems.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Skeld/tasks.json create mode 100644 src/Impostor.Api/Innersloth/Data/maps/Skeld/vents.json delete mode 100644 src/Impostor.Api/Innersloth/DisconnectReason.cs delete mode 100644 src/Impostor.Api/Innersloth/GameKeywords.cs delete mode 100644 src/Impostor.Api/Innersloth/GameOverReason.cs delete mode 100644 src/Impostor.Api/Innersloth/ITask.cs delete mode 100644 src/Impostor.Api/Innersloth/IVent.cs delete mode 100644 src/Impostor.Api/Innersloth/Language.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/AirshipData.cs create mode 100644 src/Impostor.Api/Innersloth/Maps/DoorData.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/IMapData.cs create mode 100644 src/Impostor.Api/Innersloth/Maps/MapData.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/MiraData.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/PolusData.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/SkeldData.cs create mode 100644 src/Impostor.Api/Innersloth/Maps/TaskData.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/Tasks/AirshipTask.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/Tasks/MiraTask.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/Tasks/PolusTask.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/Tasks/SkeldTask.cs create mode 100644 src/Impostor.Api/Innersloth/Maps/VentData.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/Vents/AirshipVent.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/Vents/MiraVent.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/Vents/PolusVent.cs delete mode 100644 src/Impostor.Api/Innersloth/Maps/Vents/SkeldVent.cs delete mode 100644 src/Impostor.Api/Innersloth/Platforms.cs delete mode 100644 src/Impostor.Api/Innersloth/RoleTypes.cs delete mode 100644 src/Impostor.Api/Innersloth/SystemTypes.cs delete mode 100644 src/Impostor.Api/Innersloth/TaskTypes.cs delete mode 100644 src/Impostor.Api/Net/Inner/RpcCalls.cs create mode 100644 src/Impostor.Api/Net/Messages/Rpcs/Rpc38SetLevel.cs rename src/Impostor.Api/Net/Messages/Rpcs/{Rpc39SetHat.cs => Rpc39SetHatStr.cs} (89%) rename src/Impostor.Api/Net/Messages/Rpcs/{Rpc40SetSkin.cs => Rpc40SetSkinStr.cs} (88%) rename src/Impostor.Api/Net/Messages/Rpcs/{Rpc41SetPet.cs => Rpc41SetPetStr.cs} (89%) create mode 100644 src/Impostor.Api/Net/Messages/Rpcs/Rpc42SetVisorStr.cs create mode 100644 src/Impostor.Api/Net/Messages/Rpcs/Rpc43SetNamePlateStr.cs create mode 100644 src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerFungleShipStatus.cs diff --git a/Dockerfile b/Dockerfile index e9c3886..7490b1c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,7 @@ WORKDIR /source # Copy csproj and restore. COPY src/Impostor.Server/Impostor.Server.csproj ./src/Impostor.Server/Impostor.Server.csproj +COPY src/Impostor.Api.Innersloth.Generator/Impostor.Api.Innersloth.Generator.csproj ./src/Impostor.Api.Innersloth.Generator/Impostor.Api.Innersloth.Generator.csproj COPY src/Impostor.Api/Impostor.Api.csproj ./src/Impostor.Api/Impostor.Api.csproj COPY src/Directory.Build.props ./src/Directory.Build.props @@ -20,6 +21,7 @@ RUN case "$TARGETARCH" in \ *) echo "unsupported architecture"; exit 1 ;; \ esac && \ dotnet restore -r "$NETCORE_PLATFORM" ./src/Impostor.Server/Impostor.Server.csproj && \ + dotnet restore -r "$NETCORE_PLATFORM" ./src/Impostor.Api.Innersloth.Generator/Impostor.Api.Innersloth.Generator.csproj && \ dotnet restore -r "$NETCORE_PLATFORM" ./src/Impostor.Api/Impostor.Api.csproj # Copy everything else. diff --git a/src/Impostor.Api.Innersloth.Generator/Extensions.cs b/src/Impostor.Api.Innersloth.Generator/Extensions.cs new file mode 100644 index 0000000..942d5cc --- /dev/null +++ b/src/Impostor.Api.Innersloth.Generator/Extensions.cs @@ -0,0 +1,30 @@ +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.Numerics; + +namespace Impostor.Api.Innersloth.Generator; + +internal static class Extensions +{ + public static string NormalizePath(this string path) + { + return path.Replace("\\", "/"); + } + + public static bool TryTrimStart(this string text, string value, [NotNullWhen(true)] out string? result) + { + if (text.StartsWith(value)) + { + result = text[value.Length..]; + return true; + } + + result = null; + return false; + } + + public static string ToCSharpString(this Vector2 value) + { + return $"new Vector2({value.X.ToString(CultureInfo.InvariantCulture)}f, {value.Y.ToString(CultureInfo.InvariantCulture)}f)"; + } +} diff --git a/src/Impostor.Api.Innersloth.Generator/Generators/BaseGenerator.cs b/src/Impostor.Api.Innersloth.Generator/Generators/BaseGenerator.cs new file mode 100644 index 0000000..1582ddb --- /dev/null +++ b/src/Impostor.Api.Innersloth.Generator/Generators/BaseGenerator.cs @@ -0,0 +1,22 @@ +using System.Collections.Immutable; +using System.Linq; +using Microsoft.CodeAnalysis; + +namespace Impostor.Api.Innersloth.Generator.Generators; + +public abstract class BaseGenerator +{ + protected SourceProductionContext _sourceProductionContext; + protected ImmutableArray<(string RelativePath, string Content)> _files; + + protected BaseGenerator(SourceProductionContext sourceProductionContext, ImmutableArray<(string RelativePath, string Content)> files) + { + _sourceProductionContext = sourceProductionContext; + _files = files; + } + + protected string GetFileContent(string path) + { + return _files.Single(x => x.RelativePath == path).Content; + } +} diff --git a/src/Impostor.Api.Innersloth.Generator/Generators/EnumGenerator.cs b/src/Impostor.Api.Innersloth.Generator/Generators/EnumGenerator.cs new file mode 100644 index 0000000..aa5bbf2 --- /dev/null +++ b/src/Impostor.Api.Innersloth.Generator/Generators/EnumGenerator.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Text.Json; +using CSharpPoet; +using Microsoft.CodeAnalysis; + +namespace Impostor.Api.Innersloth.Generator.Generators; + +public sealed class EnumGenerator : BaseGenerator +{ + public EnumGenerator(SourceProductionContext sourceProductionContext, ImmutableArray<(string RelativePath, string Content)> files) : base(sourceProductionContext, files) + { + } + + public void Generate(string name, string? @namespace = null, string? sourceName = null, bool flags = false, CSharpEnumUnderlyingType underlyingType = CSharpEnumUnderlyingType.Int) + { + var dictionary = JsonSerializer.Deserialize>(GetFileContent($"enums/{sourceName ?? name}.json"))!; + + var @enum = new CSharpEnum(name, underlyingType); + + foreach (var pair in dictionary) + { + var value = flags && pair.Value > 0 + ? $"1 << {Math.Log(pair.Value, 2)}" + : pair.Value.ToString(); + + @enum.Members.Add(new CSharpEnum.Member(pair.Key, value)); + } + + if (flags) + { + @enum.Attributes.Add(new CSharpAttribute("System.FlagsAttribute")); + } + + var source = new CSharpFile(@namespace ?? "Impostor.Api.Innersloth") { @enum }.ToString(); + _sourceProductionContext.AddSource(name, source); + } +} diff --git a/src/Impostor.Api.Innersloth.Generator/Generators/MapDataGenerator.cs b/src/Impostor.Api.Innersloth.Generator/Generators/MapDataGenerator.cs new file mode 100644 index 0000000..b13144a --- /dev/null +++ b/src/Impostor.Api.Innersloth.Generator/Generators/MapDataGenerator.cs @@ -0,0 +1,210 @@ +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Globalization; +using System.Numerics; +using System.Text.Json; +using CSharpPoet; +using Microsoft.CodeAnalysis; + +namespace Impostor.Api.Innersloth.Generator.Generators; + +public sealed class MapDataGenerator : BaseGenerator +{ + public MapDataGenerator(SourceProductionContext sourceProductionContext, ImmutableArray<(string RelativePath, string Content)> files) : base(sourceProductionContext, files) + { + } + + private T? Deserialize(string name, string fileName) + { + return JsonSerializer.Deserialize( + GetFileContent($"maps/{name}/{fileName}.json"), + new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + Converters = + { + new Vector2Converter(), + }, + } + ); + } + + public void Generate(string name) + { + var className = name + "Data"; + + var spawnInfo = Deserialize(name, "spawn")!; + var tasks = Deserialize>(name, "tasks")!; + var vents = Deserialize>(name, "vents")!; + var doors = Deserialize>(name, "doors")!; + + var ventsData = new DictionaryData("VentData", "Vents", writer => + { + foreach (var pair in vents) + { + var id = pair.Key; + var vent = pair.Value; + + var connections = ""; + if (vent.Left != null) connections += ", left: " + vent.Left.Value; + if (vent.Center != null) connections += ", center: " + vent.Center.Value; + if (vent.Right != null) connections += ", right: " + vent.Right.Value; + + writer.WriteLine($"[{id}] = new(this, {id}, \"{vent.Name}\", {vent.Position.ToCSharpString()}{connections}),"); + } + }); + + var tasksData = new DictionaryData("TaskData", "Tasks", writer => + { + foreach (var pair in tasks) + { + var id = pair.Key; + var task = pair.Value; + + writer.WriteLine($"[{id}] = new({id}, TaskTypes.{task.TaskType}, TaskCategories.{task.Length}Task),"); + } + }); + + var doorsData = new DictionaryData("DoorData", "Doors", writer => + { + foreach (var pair in doors) + { + var id = pair.Key; + var door = pair.Value; + + writer.WriteLine($"[{id}] = new({id}, SystemTypes.{door.Room}, {door.Position.ToCSharpString()}),"); + } + }); + + var constructor = new CSharpMethod(Visibility.Internal, className, ".ctor") + { + Body = writer => + { + ventsData.WriteInitializer(writer); + writer.WriteLine(); + tasksData.WriteInitializer(writer); + writer.WriteLine(); + doorsData.WriteInitializer(writer); + }, + }; + + var @class = new CSharpClass(className) + { + IsSealed = true, + Extends = { "MapData" }, + Members = + { + constructor, + + ventsData.CreateProperty(), + tasksData.CreateProperty(), + doorsData.CreateProperty(), + + new CSharpBlankLine(), + + CreateSimpleProperty("float", "SpawnRadius", spawnInfo.SpawnRadius.ToString(CultureInfo.InvariantCulture) + "f"), + CreateSimpleProperty("Vector2", "InitialSpawnCenter", spawnInfo.InitialSpawnCenter.ToCSharpString()), + CreateSimpleProperty("Vector2", "MeetingSpawnCenter", spawnInfo.MeetingSpawnCenter.ToCSharpString()), + CreateSimpleProperty("Vector2", "MeetingSpawnCenter2", spawnInfo.MeetingSpawnCenter2.ToCSharpString()), + }, + }; + + var source = new CSharpFile("Impostor.Api.Innersloth.Maps") + { + Usings = { "System.Collections.Generic", "System.Numerics" }, + Members = { @class }, + }.ToString(); + _sourceProductionContext.AddSource(className, source); + } + + private static CSharpProperty CreateSimpleProperty(string type, string name, string value) + { + return new CSharpProperty(type, name) + { + Getter = new CSharpProperty.Accessor { Body = writer => writer.Write(value + ";") }, + IsOverride = true, + }; + } + + private sealed class DictionaryData + { + private readonly string _keyType; + private readonly string _valueType; + private readonly string _name; + private readonly Action _body; + + public DictionaryData(string keyType, string valueType, string name, Action body) + { + _keyType = keyType; + _valueType = valueType; + _name = name; + _body = body; + } + + public DictionaryData(string valueType, string name, Action body) : this("int", valueType, name, body) + { + } + + public void WriteInitializer(CodeWriter writer) + { + writer.WriteLine($"{_name} = new Dictionary<{_keyType}, {_valueType}>"); + writer.WriteLine("{"); + + using (writer.Indent()) + { + _body(writer); + } + + writer.WriteLine("}.AsReadOnly();"); + } + + public CSharpProperty CreateProperty() + { + return new CSharpProperty($"IReadOnlyDictionary<{_keyType}, {_valueType}>", _name) + { + Getter = new CSharpProperty.Accessor(), + IsOverride = true, + }; + } + } + + public sealed class SpawnInfo + { + public required Vector2 InitialSpawnCenter { get; init; } + public required Vector2 MeetingSpawnCenter { get; init; } + public required Vector2 MeetingSpawnCenter2 { get; init; } + public required float SpawnRadius { get; init; } + } + + public sealed class TaskInfo + { + public required string Type { get; init; } + public required string TaskType { get; init; } + public required string Length { get; init; } + public required TaskConsole[] Consoles { get; init; } + } + + public sealed class TaskConsole + { + public required int Id { get; init; } + public required string Room { get; init; } + public required Vector2 Position { get; init; } + public required float UsableDistance { get; init; } + } + + public sealed class VentInfo + { + public required string Name { get; init; } + public required Vector2 Position { get; init; } + public required int? Left { get; init; } + public required int? Center { get; init; } + public required int? Right { get; init; } + } + + public sealed class DoorInfo + { + public required string Room { get; init; } + public required Vector2 Position { get; init; } + } +} diff --git a/src/Impostor.Api.Innersloth.Generator/Impostor.Api.Innersloth.Generator.csproj b/src/Impostor.Api.Innersloth.Generator/Impostor.Api.Innersloth.Generator.csproj new file mode 100644 index 0000000..269c3dd --- /dev/null +++ b/src/Impostor.Api.Innersloth.Generator/Impostor.Api.Innersloth.Generator.csproj @@ -0,0 +1,38 @@ + + + + netstandard2.0 + latest + embedded + enable + true + true + + + + + + + + + + + + + + + + $(GetTargetPathDependsOn);GetDependencyTargetPaths + + + + + + + + + + + + + diff --git a/src/Impostor.Api.Innersloth.Generator/Properties/launchSettings.json b/src/Impostor.Api.Innersloth.Generator/Properties/launchSettings.json new file mode 100644 index 0000000..776975f --- /dev/null +++ b/src/Impostor.Api.Innersloth.Generator/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "Generator": { + "commandName": "DebugRoslynComponent", + "targetProject": "../Impostor.Api/Impostor.Api.csproj" + } + } +} diff --git a/src/Impostor.Api.Innersloth.Generator/SourceGenerator.cs b/src/Impostor.Api.Innersloth.Generator/SourceGenerator.cs new file mode 100644 index 0000000..bf7f005 --- /dev/null +++ b/src/Impostor.Api.Innersloth.Generator/SourceGenerator.cs @@ -0,0 +1,98 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using CSharpPoet; +using Impostor.Api.Innersloth.Generator.Generators; +using Microsoft.CodeAnalysis; + +namespace Impostor.Api.Innersloth.Generator; + +[Generator(LanguageNames.CSharp)] +public sealed class SourceGenerator : IIncrementalGenerator +{ + private const string DataPath = "Innersloth/Data/"; + + private readonly record struct Options(string ProjectDirectory) + { + public bool TryGetRelativePath(string path, [NotNullWhen(true)] out string? relativePath) + { + if ( + path.NormalizePath().TryTrimStart(ProjectDirectory, out relativePath) && + relativePath.TryTrimStart(DataPath, out relativePath) + ) + { + return true; + } + + relativePath = null; + return false; + } + } + + public void Initialize(IncrementalGeneratorInitializationContext context) + { + var optionsProvider = context.AnalyzerConfigOptionsProvider + .Select((analyzerConfigOptions, _) => + { + if (!analyzerConfigOptions.GlobalOptions.TryGetValue("build_property.projectdir", out var projectDirectory)) + { + throw new Exception("Couldn't get project directory"); + } + + return new Options(projectDirectory.NormalizePath()); + }); + + var filesProvider = context.AdditionalTextsProvider.Combine(optionsProvider) + .Where(static pair => + { + var (file, options) = pair; + return options.TryGetRelativePath(file.Path, out var relativePath) && relativePath.EndsWith(".json"); + }) + .Select(static (pair, cancellationToken) => + { + var (file, options) = pair; + + if (!options.TryGetRelativePath(file.Path, out var relativePath)) + { + throw new InvalidOperationException(); + } + + return ( + RelativePath: relativePath, + Content: file.GetText(cancellationToken)!.ToString() + ); + }) + .Collect(); + + context.RegisterSourceOutput(filesProvider, (spc, files) => + { + if (files.IsEmpty) + { + throw new InvalidOperationException($"No json files found in Impostor.Api/{DataPath}"); + } + + var enumGenerator = new EnumGenerator(spc, files); + + enumGenerator.Generate("ColorType", "Impostor.Api.Innersloth.Customization"); + + enumGenerator.Generate("DisconnectReason", sourceName: "DisconnectReasons"); + enumGenerator.Generate("GameKeywords", flags: true, underlyingType: CSharpEnumUnderlyingType.UnsignedInt); + enumGenerator.Generate("GameOverReason", underlyingType: CSharpEnumUnderlyingType.Byte); + enumGenerator.Generate("Platforms"); + enumGenerator.Generate("RoleTypes", underlyingType: CSharpEnumUnderlyingType.UnsignedShort); + enumGenerator.Generate("StringNames"); + enumGenerator.Generate("SystemTypes", underlyingType: CSharpEnumUnderlyingType.Byte); + enumGenerator.Generate("Language", sourceName: "SupportedLangs"); + enumGenerator.Generate("TaskTypes"); + + enumGenerator.Generate("RpcCalls", "Impostor.Api.Net.Inner", underlyingType: CSharpEnumUnderlyingType.Byte); + + var mapDataGenerator = new MapDataGenerator(spc, files); + + var mapNames = new[] { "Skeld", "Mira", "April", "Polus", "Airship", "Fungle" }; + foreach (var mapName in mapNames) + { + mapDataGenerator.Generate(mapName); + } + }); + } +} diff --git a/src/Impostor.Api.Innersloth.Generator/Vector2Converter.cs b/src/Impostor.Api.Innersloth.Generator/Vector2Converter.cs new file mode 100644 index 0000000..7eeb1cc --- /dev/null +++ b/src/Impostor.Api.Innersloth.Generator/Vector2Converter.cs @@ -0,0 +1,42 @@ +using System; +using System.Numerics; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Impostor.Api.Innersloth.Generator; + +public class Vector2Converter : JsonConverter +{ + public override Vector2 Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); + + float x = 0; + float y = 0; + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) break; + + switch (reader.GetString()) + { + case "x": + reader.Read(); + x = reader.GetSingle(); + break; + + case "y": + reader.Read(); + y = reader.GetSingle(); + break; + } + } + + return new Vector2(x, y); + } + + public override void Write(Utf8JsonWriter writer, Vector2 value, JsonSerializerOptions options) + { + throw new NotSupportedException(); + } +} diff --git a/src/Impostor.Api.Innersloth.Generator/packages.lock.json b/src/Impostor.Api.Innersloth.Generator/packages.lock.json new file mode 100644 index 0000000..3a890d8 --- /dev/null +++ b/src/Impostor.Api.Innersloth.Generator/packages.lock.json @@ -0,0 +1,156 @@ +{ + "version": 1, + "dependencies": { + ".NETStandard,Version=v2.0": { + "CSharpPoet": { + "type": "Direct", + "requested": "[0.3.0, )", + "resolved": "0.3.0", + "contentHash": "3QDh9rMuiNhMtNWOLj0FItiZruON7lj3zD0CXC9IHq4JWpF5OjbaZ2s1X0u6gftE73KCoTezXIgKvxacps78Fw==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.CodeAnalysis.Analyzers": { + "type": "Direct", + "requested": "[3.3.4, )", + "resolved": "3.3.4", + "contentHash": "AxkxcPR+rheX0SmvpLVIGLhOUXAKG56a64kV9VQZ4y9gR9ZmPXnqZvHJnmwLSwzrEP6junUF11vuc+aqo5r68g==" + }, + "Microsoft.CodeAnalysis.CSharp": { + "type": "Direct", + "requested": "[4.7.0, )", + "resolved": "4.7.0", + "contentHash": "JHCP2L6lB0oJ3tQoHkC67SFZxW+KbJVOnAo+6L01K5r/NlBlSUhTk5nUAldWhTVwGdzqNeHqGtnEqpsCmGSwQA==", + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[4.7.0]" + } + }, + "NETStandard.Library": { + "type": "Direct", + "requested": "[2.0.3, )", + "resolved": "2.0.3", + "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.0, )", + "resolved": "1.14.0", + "contentHash": "3K6beiIeVO0hOlHCHv2jgGW7UH3OXsOIiEW60CHpqGvbrHyy4iQfGkCOBtI92PDCaA8XC4ZM3+02g2qenRnHOA==" + }, + "System.Text.Encodings.Web": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Text.Json": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "System.Buffers": "4.5.1", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "8.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.CodeAnalysis.Common": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pD5S14xMUebSGYe75kt0q/aaS/ftvktSo/pEv7aX7hNPHfdZS+SZeXvkvcffGxWkunYOyRF9m1oN7zzSdYj9dQ==", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.3.4", + "System.Collections.Immutable": "7.0.0", + "System.Memory": "4.5.5", + "System.Reflection.Metadata": "7.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encoding.CodePages": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" + }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.5", + "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "MclTG61lsD9sYdpNz9xsKBzjsmsfCtcMZYXz/IUr2zlhaTaABonlr1ESeompTgM+Xk+IwtGYU7/voh3YWB/fWw==", + "dependencies": { + "System.Collections.Immutable": "7.0.0", + "System.Memory": "4.5.5" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + }, + "System.Text.Encoding.CodePages": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "LSyCblMpvOe0N3E+8e0skHcrIhgV2huaNcjUUEa8hRtgEAm36aGkRoC8Jxlb6Ra6GSfF29ftduPNywin8XolzQ==", + "dependencies": { + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + } + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerEnterVentEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerEnterVentEvent.cs index fac832b..2413401 100644 --- a/src/Impostor.Api/Events/Game/Player/IPlayerEnterVentEvent.cs +++ b/src/Impostor.Api/Events/Game/Player/IPlayerEnterVentEvent.cs @@ -1,4 +1,4 @@ -using Impostor.Api.Innersloth; +using Impostor.Api.Innersloth.Maps; namespace Impostor.Api.Events.Player { @@ -10,6 +10,6 @@ namespace Impostor.Api.Events.Player /// /// Gets the entered vent. /// - public IVent Vent { get; } + public VentData Vent { get; } } } diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerExitVentEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerExitVentEvent.cs index 84dc1af..65c3dce 100644 --- a/src/Impostor.Api/Events/Game/Player/IPlayerExitVentEvent.cs +++ b/src/Impostor.Api/Events/Game/Player/IPlayerExitVentEvent.cs @@ -1,4 +1,4 @@ -using Impostor.Api.Innersloth; +using Impostor.Api.Innersloth.Maps; namespace Impostor.Api.Events.Player { @@ -10,6 +10,6 @@ namespace Impostor.Api.Events.Player /// /// Gets the exited vent. /// - public IVent Vent { get; } + public VentData Vent { get; } } } diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs index 959e753..cf60c57 100644 --- a/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs +++ b/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs @@ -1,4 +1,4 @@ -using Impostor.Api.Innersloth; +using Impostor.Api.Innersloth.Maps; namespace Impostor.Api.Events.Player { @@ -10,6 +10,6 @@ namespace Impostor.Api.Events.Player /// /// Gets the vent player moved to. /// - public IVent NewVent { get; } + public VentData NewVent { get; } } } diff --git a/src/Impostor.Api/Impostor.Api.csproj b/src/Impostor.Api/Impostor.Api.csproj index f3a79c7..0b3ab69 100644 --- a/src/Impostor.Api/Impostor.Api.csproj +++ b/src/Impostor.Api/Impostor.Api.csproj @@ -29,6 +29,9 @@ + + + diff --git a/src/Impostor.Api/Innersloth/Customization/ColorType.cs b/src/Impostor.Api/Innersloth/Customization/ColorType.cs deleted file mode 100644 index 570071c..0000000 --- a/src/Impostor.Api/Innersloth/Customization/ColorType.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace Impostor.Api.Innersloth.Customization -{ - public enum ColorType - { - Red = 0, - Blue = 1, - Green = 2, - Pink = 3, - Orange = 4, - Yellow = 5, - Black = 6, - White = 7, - Purple = 8, - Brown = 9, - Cyan = 10, - Lime = 11, - Maroon = 12, - Rose = 13, - Banana = 14, - Gray = 15, - Tan = 16, - Coral = 17, - } -} diff --git a/src/Impostor.Api/Innersloth/Data/SpawnableObjects.json b/src/Impostor.Api/Innersloth/Data/SpawnableObjects.json new file mode 100644 index 0000000..f2b7f74 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/SpawnableObjects.json @@ -0,0 +1,14 @@ +{ + "0": "SkeldShipStatus", + "1": "MeetingHud", + "2": "LobbyBehaviour", + "3": "GameData", + "4": "PlayerControl", + "5": "MiraShipStatus", + "6": "PolusShipStatus", + "7": "ShipStatus", + "8": "AirshipStatus", + "9": "HideAndSeekManager", + "10": "NormalGameManager", + "13": "FungleShipStatus" +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/ColorType.json b/src/Impostor.Api/Innersloth/Data/enums/ColorType.json new file mode 100644 index 0000000..ca4f7f4 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/ColorType.json @@ -0,0 +1,20 @@ +{ + "Red": 0, + "Blue": 1, + "Green": 2, + "Pink": 3, + "Orange": 4, + "Yellow": 5, + "Black": 6, + "White": 7, + "Purple": 8, + "Brown": 9, + "Cyan": 10, + "Lime": 11, + "Maroon": 12, + "Rose": 13, + "Banana": 14, + "Gray": 15, + "Tan": 16, + "Coral": 17 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/DisconnectReasons.json b/src/Impostor.Api/Innersloth/Data/enums/DisconnectReasons.json new file mode 100644 index 0000000..fd9f2e3 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/DisconnectReasons.json @@ -0,0 +1,46 @@ +{ + "ExitGame": 0, + "GameFull": 1, + "GameStarted": 2, + "GameNotFound": 3, + "IncorrectVersion": 5, + "Banned": 6, + "Kicked": 7, + "Custom": 8, + "InvalidName": 9, + "Hacking": 10, + "NotAuthorized": 11, + "ConnectionLimit": 12, + "Destroy": 16, + "Error": 17, + "IncorrectGame": 18, + "ServerRequest": 19, + "ServerFull": 20, + "InternalPlayerMissing": 100, + "InternalNonceFailure": 101, + "InternalConnectionToken": 102, + "PlatformLock": 103, + "LobbyInactivity": 104, + "MatchmakerInactivity": 105, + "InvalidGameOptions": 106, + "NoServersAvailable": 107, + "QuickmatchDisabled": 108, + "TooManyGames": 109, + "QuickchatLock": 110, + "MatchmakerFull": 111, + "Sanctions": 112, + "ServerError": 113, + "SelfPlatformLock": 114, + "DuplicateConnectionDetected": 115, + "TooManyRequests": 116, + "FocusLostBackground": 207, + "IntentionalLeaving": 208, + "FocusLost": 209, + "NewConnection": 210, + "PlatformParentalControlsBlock": 211, + "PlatformUserBlock": 212, + "PlatformFailedToGetUserBlock": 213, + "ServerNotFound": 214, + "ClientTimeout": 215, + "Unknown": 255 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/GameKeywords.json b/src/Impostor.Api/Innersloth/Data/enums/GameKeywords.json new file mode 100644 index 0000000..767b75a --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/GameKeywords.json @@ -0,0 +1,22 @@ +{ + "All": 0, + "Other": 1, + "SpanishLA": 2, + "Korean": 4, + "Russian": 8, + "Portuguese": 16, + "Arabic": 32, + "Filipino": 64, + "Polish": 128, + "English": 256, + "Japanese": 512, + "SpanishEU": 1024, + "Brazilian": 2048, + "Dutch": 4096, + "French": 8192, + "German": 16384, + "Italian": 32768, + "SChinese": 65536, + "TChinese": 131072, + "Irish": 262144 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/GameOverReason.json b/src/Impostor.Api/Innersloth/Data/enums/GameOverReason.json new file mode 100644 index 0000000..e0fbc2a --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/GameOverReason.json @@ -0,0 +1,11 @@ +{ + "HumansByVote": 0, + "HumansByTask": 1, + "ImpostorByVote": 2, + "ImpostorByKill": 3, + "ImpostorBySabotage": 4, + "ImpostorDisconnect": 5, + "HumansDisconnect": 6, + "HideAndSeek_ByTimer": 7, + "HideAndSeek_ByKills": 8 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/Platforms.json b/src/Impostor.Api/Innersloth/Data/enums/Platforms.json new file mode 100644 index 0000000..08f0bcc --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/Platforms.json @@ -0,0 +1,13 @@ +{ + "Unknown": 0, + "StandaloneEpicPC": 1, + "StandaloneSteamPC": 2, + "StandaloneMac": 3, + "StandaloneWin10": 4, + "StandaloneItch": 5, + "IPhone": 6, + "Android": 7, + "Switch": 8, + "Xbox": 9, + "Playstation": 10 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json b/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json new file mode 100644 index 0000000..c29784f --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/RoleTypes.json @@ -0,0 +1,10 @@ +{ + "Crewmate": 0, + "Impostor": 1, + "Scientist": 2, + "Engineer": 3, + "GuardianAngel": 4, + "Shapeshifter": 5, + "CrewmateGhost": 6, + "ImpostorGhost": 7 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/RpcCalls.json b/src/Impostor.Api/Innersloth/Data/enums/RpcCalls.json new file mode 100644 index 0000000..eabc4fa --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/RpcCalls.json @@ -0,0 +1,59 @@ +{ + "PlayAnimation": 0, + "CompleteTask": 1, + "SyncSettings": 2, + "SetInfected": 3, + "Exiled": 4, + "CheckName": 5, + "SetName": 6, + "CheckColor": 7, + "SetColor": 8, + "SetHat": 9, + "SetSkin": 10, + "ReportDeadBody": 11, + "MurderPlayer": 12, + "SendChat": 13, + "StartMeeting": 14, + "SetScanner": 15, + "SendChatNote": 16, + "SetPet": 17, + "SetStartCounter": 18, + "EnterVent": 19, + "ExitVent": 20, + "SnapTo": 21, + "CloseMeeting": 22, + "VotingComplete": 23, + "CastVote": 24, + "ClearVote": 25, + "AddVote": 26, + "CloseDoorsOfType": 27, + "SetTasks": 29, + "ClimbLadder": 31, + "UsePlatform": 32, + "SendQuickChat": 33, + "BootFromVent": 34, + "UpdateSystem": 35, + "SetVisor": 36, + "SetNamePlate": 37, + "SetLevel": 38, + "SetHatStr": 39, + "SetSkinStr": 40, + "SetPetStr": 41, + "SetVisorStr": 42, + "SetNamePlateStr": 43, + "SetRole": 44, + "ProtectPlayer": 45, + "Shapeshift": 46, + "CheckMurder": 47, + "CheckProtect": 48, + "Pet": 49, + "CancelPet": 50, + "CheckZipline": 51, + "UseZipline": 52, + "TriggerSpores": 53, + "CheckSpore": 54, + "CheckShapeshift": 55, + "RejectShapeshift": 56, + "LobbyTimeExpiring": 60, + "ExtendLobbyTimer": 61 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/StringNames.json b/src/Impostor.Api/Innersloth/Data/enums/StringNames.json new file mode 100644 index 0000000..ead88c2 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/StringNames.json @@ -0,0 +1,1399 @@ +{ + "None": 0, + "BackButton": 1, + "AvailableGamesLabel": 2, + "CreateGameButton": 3, + "FindGameButton": 4, + "EnterCode": 5, + "GhostIgnoreTasks": 6, + "GhostDoTasks": 7, + "GhostImpostor": 8, + "ImpostorTask": 9, + "FakeTasks": 10, + "TaskComplete": 11, + "ExileTextSP": 12, + "ExileTextSN": 13, + "ExileTextPP": 14, + "ExileTextPN": 15, + "NoExileSkip": 16, + "NoExileTie": 17, + "ImpostorsRemainS": 18, + "ImpostorsRemainP": 19, + "Hallway": 20, + "Storage": 21, + "Cafeteria": 22, + "Reactor": 23, + "UpperEngine": 24, + "Nav": 25, + "Admin": 26, + "Electrical": 27, + "LifeSupp": 28, + "Shields": 29, + "MedBay": 30, + "Security": 31, + "Weapons": 32, + "LowerEngine": 33, + "Comms": 34, + "Decontamination": 35, + "Launchpad": 36, + "LockerRoom": 37, + "Laboratory": 38, + "Balcony": 39, + "Office": 40, + "Greenhouse": 41, + "DivertPowerTo": 42, + "AcceptDivertedPower": 43, + "SubmitScan": 44, + "PrimeShields": 45, + "FuelEngines": 46, + "ChartCourse": 47, + "StartReactor": 48, + "SwipeCard": 49, + "ClearAsteroids": 50, + "UploadData": 51, + "DownloadData": 52, + "InspectSample": 53, + "EmptyChute": 54, + "EmptyGarbage": 55, + "AlignEngineOutput": 56, + "FixWiring": 57, + "CalibrateDistributor": 58, + "UnlockManifolds": 59, + "ResetReactor": 60, + "FixLights": 61, + "FixComms": 62, + "RestoreOxy": 63, + "CleanO2Filter": 64, + "StabilizeSteering": 65, + "AssembleArtifact": 66, + "SortSamples": 67, + "MeasureWeather": 68, + "EnterIdCode": 69, + "HowToPlayText1": 70, + "HowToPlayText2": 71, + "HowToPlayText5": 72, + "HowToPlayText6": 73, + "HowToPlayText7": 74, + "HowToPlayText81": 75, + "HowToPlayText82": 76, + "NumImpostorsS": 77, + "NumImpostorsP": 78, + "Crewmate": 79, + "Impostor": 80, + "Victory": 81, + "Defeat": 82, + "CrewmatesDisconnected": 83, + "ImpostorDisconnected": 84, + "HowToPlayText41": 85, + "HowToPlayText42": 86, + "HowToPlayText43": 87, + "HowToPlayText44": 88, + "HowToPlayTextMap": 89, + "HowToPlayTextCrew1": 90, + "HowToPlayTextCrew2": 91, + "HowToPlayTextCrew3": 92, + "HowToPlayTextCrew4": 93, + "HowToPlayTextCrew5": 94, + "HowToPlayTextCrew6": 95, + "HowToPlayTextImp1": 96, + "HowToPlayTextImp2": 97, + "HowToPlayTextImp3": 98, + "HowToPlayTextImp4": 99, + "HowToPlayTextImp5": 100, + "HowToPlayTextImp6": 101, + "HowToPlayTextImp7": 102, + "SettingsGeneral": 103, + "SettingsControls": 104, + "SettingsSound": 105, + "SettingsGraphics": 106, + "SettingsData": 107, + "SettingsCensorChat": 108, + "SettingsMusic": 109, + "SettingsSFX": 110, + "SettingsOn": 111, + "SettingsOff": 112, + "SettingsSendTelemetry": 113, + "SettingsControlMode": 114, + "SettingsTouchMode": 115, + "SettingsJoystickMode": 116, + "SettingsKeyboardMode": 117, + "SettingsFullscreen": 118, + "SettingsResolution": 119, + "SettingsApply": 120, + "SettingsPersonalizeAds": 121, + "SettingsLanguage": 122, + "SettingsJoystickSize": 123, + "SettingsMouseMode": 124, + "PlayerColor": 125, + "PlayerHat": 126, + "PlayerSkin": 127, + "PlayerPet": 128, + "GameSettings": 129, + "GameRecommendedSettings": 130, + "GameCustomSettings": 131, + "GameMapName": 132, + "GameNumImpostors": 133, + "GameNumMeetings": 134, + "GameDiscussTime": 135, + "GameVotingTime": 136, + "GamePlayerSpeed": 137, + "GameCrewLight": 138, + "GameImpostorLight": 139, + "GameKillCooldown": 140, + "GameKillDistance": 141, + "GameCommonTasks": 142, + "GameLongTasks": 143, + "GameShortTasks": 144, + "MatchMapName": 145, + "MatchLanguage": 146, + "MatchImpostors": 147, + "MatchMaxPlayers": 148, + "Cancel": 149, + "Confirm": 150, + "Limit": 151, + "RoomCode": 152, + "LeaveGame": 153, + "ReturnToGame": 154, + "LocalHelp": 155, + "OnlineHelp": 156, + "SettingsVSync": 157, + "EmergencyCount": 158, + "EmergencyNotReady": 159, + "EmergencyDuringCrisis": 160, + "EmergencyRequested": 161, + "GameEmergencyCooldown": 162, + "BuyBeverage": 163, + "WeatherEta": 164, + "WeatherComplete": 165, + "ProcessData": 166, + "RunDiagnostics": 167, + "WaterPlants": 168, + "PickAnomaly": 169, + "WaterPlantsGetCan": 170, + "AuthOfficeOkay": 171, + "AuthCommsOkay": 172, + "AuthOfficeActive": 173, + "AuthCommsActive": 174, + "AuthOfficeNotActive": 175, + "AuthCommsNotActive": 176, + "SecLogEntry": 177, + "EnterName": 178, + "SwipeCardPleaseSwipe": 179, + "SwipeCardBadRead": 180, + "SwipeCardTooFast": 181, + "SwipeCardTooSlow": 182, + "SwipeCardAccepted": 183, + "ReactorHoldToStop": 184, + "ReactorWaiting": 185, + "ReactorNominal": 186, + "MeetingWhoIsTitle": 187, + "MeetingVotingBegins": 188, + "MeetingVotingEnds": 189, + "MeetingVotingResults": 190, + "MeetingProceeds": 191, + "MeetingHasVoted": 192, + "DataPolicyTitle": 193, + "DataPolicyText": 194, + "DataPolicyWhat": 195, + "AdPolicyTitle": 196, + "AdPolicyText": 197, + "Accept": 198, + "RemoveAds": 199, + "SwipeCardPleaseInsert": 200, + "LogNorth": 201, + "LogSouthEast": 202, + "LogSouthWest": 203, + "SettingShort": 204, + "SettingMedium": 205, + "SettingLong": 206, + "SamplesPress": 207, + "SamplesAdding": 208, + "SamplesSelect": 209, + "SamplesThanks": 210, + "SamplesComplete": 211, + "AstDestroyed": 212, + "TaskTestTitle": 213, + "BeginDiagnostics": 214, + "UserLeftGame": 215, + "GameStarting": 216, + "Tasks": 217, + "StatsTitle": 218, + "StatsBodiesReported": 219, + "StatsEmergenciesCalled": 220, + "StatsTasksCompleted": 221, + "StatsAllTasksCompleted": 222, + "StatsSabotagesFixed": 223, + "StatsImpostorKills": 224, + "StatsTimesMurdered": 225, + "StatsTimesEjected": 226, + "StatsCrewmateStreak": 227, + "StatsGamesImpostor": 228, + "StatsGamesCrewmate": 229, + "StatsGamesStarted": 230, + "StatsGamesFinished": 231, + "StatsImpostorVoteWins": 232, + "StatsImpostorKillsWins": 233, + "StatsImpostorSabotageWins": 234, + "StatsCrewmateVoteWins": 235, + "StatsCrewmateTaskWins": 236, + "MedscanRequested": 237, + "MedscanWaitingFor": 238, + "MedscanCompleted": 239, + "MedscanCompleteIn": 240, + "MonitorOxygen": 241, + "StoreArtifacts": 242, + "FillCanisters": 243, + "FixWeatherNode": 244, + "InsertKeys": 245, + "ResetSeismic": 246, + "SeismicHoldToStop": 247, + "SeismicNominal": 248, + "ScanBoardingPass": 249, + "OpenWaterways": 250, + "ReplaceWaterJug": 251, + "RepairDrill": 252, + "AlignTelescope": 253, + "RecordTemperature": 254, + "RebootWifi": 255, + "WifiRebootRequired": 256, + "WifiPleasePowerOn": 257, + "WifiPleaseWait": 258, + "WifiPleaseReturnIn": 259, + "WifiRebootComplete": 260, + "Outside": 261, + "GameSecondsAbbrev": 262, + "Engines": 263, + "Dropship": 264, + "Decontamination2": 265, + "Specimens": 266, + "BoilerRoom": 267, + "GameOverImpostorDead": 268, + "GameOverImpostorKills": 269, + "GameOverTaskWin": 270, + "GameOverSabotage": 271, + "GameConfirmImpostor": 272, + "GameVisualTasks": 273, + "ExileTextNonConfirm": 274, + "GameAnonymousVotes": 275, + "GameTaskBarMode": 276, + "SettingNormalTaskMode": 277, + "SettingMeetingTaskMode": 278, + "SettingInvisibleTaskMode": 279, + "PlainYes": 280, + "PlainNo": 281, + "PrivacyPolicyTitle": 282, + "PrivacyPolicyText": 283, + "ManageDataButton": 284, + "UnderstandButton": 285, + "HowToPlayText2Switch": 286, + "ChatRateLimit": 287, + "TotalTasksCompleted": 288, + "ServerNA": 289, + "ServerEU": 290, + "ServerAS": 291, + "ServerSA": 292, + "LangEnglish": 293, + "LangFrench": 294, + "LangItalian": 295, + "LangGerman": 296, + "LangSpanish": 297, + "LangSpanishLATAM": 298, + "LangBrazPort": 299, + "LangPort": 300, + "LangRussian": 301, + "LangJapanese": 302, + "LangKorean": 303, + "LangDutch": 304, + "LangFilipino": 305, + "PlayerName": 306, + "MyTablet": 307, + "Download": 308, + "DownloadComplete": 309, + "DownloadTestEstTimeS": 310, + "DownloadTestEstTimeMS": 311, + "DownloadTestEstTimeHMS": 312, + "DownloadTestEstTimeDHMS": 313, + "Upload": 314, + "Headquarters": 315, + "GrabCoffee": 316, + "TakeBreak": 317, + "DontNeedWait": 318, + "DoSomethingElse": 319, + "NodeTB": 320, + "NodeIRO": 321, + "NodeGI": 322, + "NodePD": 323, + "NodeCA": 324, + "NodeMLG": 325, + "Vending": 326, + "OtherLanguage": 327, + "ImposterAmtAny": 328, + "VitalsORGN": 329, + "VitalsBLUE": 330, + "VitalsRED": 331, + "VitalsBRWN": 332, + "VitalsGRN": 333, + "VitalsPINK": 334, + "VitalsWHTE": 335, + "VitalsYLOW": 336, + "VitalsBLAK": 337, + "VitalsPURP": 338, + "VitalsCYAN": 339, + "VitalsLIME": 340, + "VitalsOK": 341, + "VitalsDEAD": 342, + "VitalsDC": 343, + "ColorOrange": 344, + "ColorBlue": 345, + "ColorRed": 346, + "ColorBrown": 347, + "ColorGreen": 348, + "ColorPink": 349, + "ColorWhite": 350, + "ColorYellow": 351, + "ColorBlack": 352, + "ColorPurple": 353, + "ColorCyan": 354, + "ColorLime": 355, + "MedID": 356, + "MedC": 357, + "MedHT": 358, + "MedBT": 359, + "MedWT": 360, + "MedETA": 361, + "MedHello": 362, + "PetFailFetchData": 363, + "BadResult": 364, + "More": 365, + "Processing": 366, + "ExitGame": 367, + "WaitingForHost": 368, + "LeftGameError": 369, + "PlayerWasBannedBy": 370, + "PlayerWasKickedBy": 371, + "CamEast": 372, + "CamCentral": 373, + "CamNortheast": 374, + "CamSouth": 375, + "CamSouthwest": 376, + "CamNorthwest": 377, + "LoadingFailed": 378, + "LobbySizeWarning": 379, + "Okay": 380, + "OkayDontShow": 381, + "Nevermind": 382, + "Dummy": 383, + "Bad": 384, + "Status": 385, + "Fine": 386, + "OK": 387, + "PetTryOn": 388, + "SecondsAbbv": 389, + "SecurityLogsSystem": 390, + "SecurityCamsSystem": 391, + "AdminMapSystem": 392, + "VitalsSystem": 393, + "BanButton": 394, + "KickButton": 395, + "ReportButton": 396, + "ReportConfirmation": 397, + "ReportBadName": 398, + "ReportBadChat": 399, + "ReportHacking": 400, + "ReportHarassment": 401, + "ReportWhy": 402, + "Visor": 403, + "NamePlate": 404, + "Visors": 405, + "NamePlates": 406, + "Cosmicube": 407, + "Cosmicubes": 408, + "Activate": 409, + "Deactivate": 410, + "Owned": 411, + "Purchase": 412, + "CosmicubeProgression": 413, + "ViewCube": 414, + "ConfirmPurchaseHeader": 415, + "ConfirmPurchaseText": 416, + "DeactivateCube": 417, + "ActivateCube": 418, + "Bundles": 419, + "Stars": 420, + "PurchasingLabel": 421, + "MouseMovement": 422, + "KeyboardOptions": 423, + "RemapBindings": 424, + "KeyboardBindingsHeader": 425, + "ExitButton": 426, + "PolishRuby": 500, + "ResetBreakers": 501, + "Decontaminate": 502, + "MakeBurger": 503, + "UnlockSafe": 504, + "SortRecords": 505, + "PutAwayPistols": 506, + "FixShower": 507, + "CleanToilet": 508, + "DressMannequin": 509, + "PickUpTowels": 510, + "RewindTapes": 511, + "StartFans": 512, + "DevelopPhotos": 513, + "GetBiggolSword": 514, + "PutAwayRifles": 515, + "StopCharles": 516, + "AuthLeftOkay": 517, + "AuthRightOkay": 518, + "AuthLeftActive": 519, + "AuthRightActive": 520, + "AuthLeftNotActive": 521, + "AuthRightNotActive": 522, + "LobbyTimerExpiringTitle": 523, + "LobbyTimerExpiringMsg": 524, + "LobbyTimerExpiringOk": 525, + "LobbyTimerExpiringNo": 526, + "LobbyTimerExpiringUnit": 527, + "LobbyTimerExpiringMsg2": 528, + "LobbyTimerExpiringHud": 529, + "VaultRoom": 550, + "Cockpit": 551, + "Armory": 552, + "Kitchen": 553, + "ViewingDeck": 554, + "HallOfPortraits": 555, + "Medical": 556, + "CargoBay": 557, + "Ventilation": 558, + "Showers": 559, + "Engine": 560, + "Brig": 561, + "MeetingRoom": 562, + "Records": 563, + "Lounge": 564, + "GapRoom": 565, + "MainHall": 566, + "RevealCode": 567, + "DirtyHeader": 568, + "ErrorServerOverload": 700, + "ErrorIntentionalLeaving": 701, + "ErrorFocusLost": 702, + "ErrorBanned": 703, + "ErrorKicked": 704, + "ErrorBannedNoCode": 705, + "ErrorKickedNoCode": 706, + "ErrorHacking": 707, + "ErrorFullGame": 708, + "ErrorStartedGame": 709, + "ErrorNotFoundGame": 710, + "ErrorInactivity": 711, + "ErrorGenericOnlineDisconnect": 712, + "ErrorGenericLocalDisconnect": 713, + "ErrorInvalidName": 714, + "ErrorUnknown": 715, + "ErrorIncorrectVersion": 716, + "ErrorNotAuthenticated": 717, + "ErrorInternalServer": 718, + "ErrorPlatformLock": 719, + "ErrorLobbyInactivity": 720, + "ErrorMatchmakerInactivity": 721, + "ErrorInvalidGameOptions": 722, + "ErrorNoServersAvailable": 723, + "ErrorQuickmatchDisabled": 724, + "ErrorTooManyGames": 725, + "ErrorDuplicateConnection": 726, + "ErrorTooManyRequests": 727, + "ErrorSanction": 728, + "ErrorClientTimeout": 729, + "ErrorClientTimeoutConsole": 730, + "VentDirection": 1000, + "VentMove": 1001, + "MenuNavigate": 1002, + "NoTranslation": 1003, + "NsoError": 1004, + "Roles": 1499, + "RolesSettings": 1500, + "ScientistRole": 1501, + "EngineerRole": 1502, + "GuardianAngelRole": 1503, + "ShapeshifterRole": 1504, + "ScientistBlurb": 1505, + "EngineerBlurb": 1506, + "GuardianAngelBlurb": 1507, + "ShapeshifterBlurb": 1508, + "CrewmateBlurb": 1509, + "ImpostorBlurb": 1510, + "YourRoleIs": 1511, + "ShapeshiftAbility": 1512, + "VentAbility": 1513, + "VitalsAbility": 1514, + "ProtectAbility": 1515, + "ShapeshiftAbilityUndo": 1516, + "RoleChanceAndQuantity": 1517, + "ProtectedRecently": 1518, + "ShapeshifterDuration": 1519, + "ShapeshifterCooldown": 1520, + "ShapeshifterLeaveSkin": 1521, + "ScientistCooldown": 1522, + "GuardianAngelCooldown": 1523, + "EngineerCooldown": 1524, + "ScientistBlurbMed": 1525, + "ScientistBlurbLong": 1526, + "EngineerBlurbMed": 1527, + "EngineerBlurbLong": 1528, + "GuardianAngelBlurbMed": 1529, + "GuardianAngelBlurbLong": 1530, + "ShapeshifterBlurbMed": 1531, + "ShapeshifterBlurbLong": 1532, + "RoleHint": 1533, + "EngineerInVentCooldown": 1534, + "ScientistBatteryCharge": 1535, + "GuardianAngelDuration": 1536, + "GuardianAngelImpostorSeeProtect": 1537, + "StatsRoleWins": 1538, + "StatsEngineerVents": 1539, + "StatsScientistChargesGained": 1540, + "StatsGuardianAngelCrewmatesProtected": 1541, + "StatsShapeshifterShiftedKills": 1542, + "CrewmateGhostRole": 1543, + "ImpostorGhostRole": 1544, + "HauntAbilityName": 1545, + "SeekButton": 1546, + "RolesHelp_CrewmateRole": 1547, + "RolesHelp_ImpostorRole": 1548, + "RolesHelpIntro_01": 1549, + "RolesHelpIntro_02": 1550, + "RolesHelp_Scientist_01": 1560, + "RolesHelp_Scientist_02": 1561, + "RolesHelp_Engineer_01": 1562, + "RolesHelp_Engineer_02": 1563, + "RolesHelp_GuardianAngel_01": 1564, + "RolesHelp_GuardianAngel_02": 1565, + "RolesHelp_Shapeshifter_01": 1600, + "RolesHelp_Shapeshifter_02": 1601, + "RolesHelpOutro_01": 1650, + "RolesHelpOutro_02": 1651, + "SanctionDuration": 1700, + "SanctionPermanent": 1701, + "SanctionConduct": 1702, + "SanctionImpersonationCeleb": 1703, + "SanctionSpamming": 1704, + "SanctionInappropriateNameUnsportsmanlike": 1705, + "SanctionUnsportsmanlikeConduct": 1706, + "SanctionImpersonationDevelopers": 1707, + "SanctionInappropriateChatPersonalInfo": 1708, + "SanctionInappropriateNameDerogatory": 1709, + "SanctionInappropriateNameNsfw": 1710, + "SanctionBullying": 1711, + "SanctionCheatingHacking": 1712, + "SanctionInappropriateChatDating": 1713, + "SanctionWeaponizingRules": 1714, + "SanctionRepeatOffender3": 1715, + "SanctionSexualMisconduct": 1716, + "SanctionDoxing": 1717, + "SanctionIllegalActivity": 1718, + "SanctionHarassment": 1719, + "SanctionSelfHarmPromotion": 1720, + "SanctionRepeatOffender10": 1721, + "SanctionUnknown": 1722, + "ScreenShakeOption": 1900, + "FeaturedItems": 1901, + "FeaturedBundles": 1902, + "FeaturedCubes": 1903, + "BugReportPopUpAttachScreenshotDesc": 1904, + "UserIdTokenError": 1905, + "NewGameMode": 1906, + "NewModeInfo": 1907, + "HideSeekHowToPlayTitleOne": 1908, + "HideSeekHowToPlayCaptionOne": 1909, + "HideSeekHowToPlayCaptionTwo": 1910, + "HideSeekHowToPlayCaptionThree": 1911, + "HideSeekHowToPlayPageOne": 1912, + "HideSeekHowToPlayImpostorOne": 1913, + "HideSeekHowToPlaySubtextOne": 1914, + "HideSeekHowToPlayCrewmateInfoOne": 1915, + "HideSeekHowToPlayCrewmateInfoTwo": 1916, + "HideSeekHowToPlayImpostorInfoOne": 1917, + "HideSeekHowToPlayFlashlightDefault": 1918, + "HideSeekHowToPlayFinalHide": 1919, + "HideSeekHowToPlayFlashlightMobile": 1920, + "HideSeekHowToPlayFlashlightSwitch": 1921, + "HideSeekHowToPlayFlashlightConsoles": 1922, + "HideSeekHowToPlayFlashlightPlayStation": 1923, + "QCInputSelf": 1925, + "QCInputFavorite": 1926, + "QCCrewMyself": 1950, + "QCTagSelf": 1951, + "QCTagFavorites": 1952, + "QCBuilderHeader": 1953, + "QCRemarks": 1954, + "QCCrewDead": 1955, + "QCSelfVoted": 1956, + "QCSelfReportedBody": 1957, + "QCSelfCams": 1958, + "QCCrewReportedBody": 1959, + "QCCrewCams": 1960, + "QCSelfWasProtected": 1961, + "QCCrewWasProtected": 1962, + "QCSelfWasntMe": 1963, + "QCWhoWasAt": 1964, + "QCSelfDoingTask": 1965, + "QCWhoIsRole": 1966, + "QCSelfFixedSystem": 1967, + "QCCrewFixedSystem": 1968, + "QCSelfAccAtLocation": 1969, + "QCSelfDidTaskAtLocation": 1970, + "QCCrewDidTaskAtLocation": 1971, + "QCSelfSawCrewVentAtLocation": 1972, + "QCSelfDidntVent": 1973, + "QCFollowMe": 1974, + "QCItsNotMe": 1975, + "QCSelfDoneWithTasks": 1976, + "QCGhostsDoYourTasks": 1977, + "QCSelfNotTheImpostor": 1978, + "QCHello": 1979, + "QCThanks": 1980, + "QCSorry": 1981, + "QCGG": 1982, + "QCBye": 1983, + "QCWhereWasTheBody": 1984, + "QCSelfReady": 1985, + "QCSelfWasRole": 1986, + "QCWhoWasRole": 1987, + "QCCoolOutfitCrew": 1988, + "QCSelfWasUsingBinoculars": 1989, + "QCSelfSawThroughBinoculars": 1990, + "QCInTheSporeCloud": 1991, + "QCHiddenBySporeCloud": 1992, + "CQCrewKilledDeadInSporeCloud": 1993, + "QCSelfUsingZipline": 1994, + "QCSelfSawWhileUsingZipline": 1995, + "QCCrewWasUsingZipline": 1996, + "QCDuringMushroomMixup": 1997, + "QCLocationLaptop": 2000, + "QCSystemsStart": 2004, + "QCSystemsKick": 2005, + "QCCrewI": 2006, + "QCCrewMe": 2007, + "QCCrewNoOne": 2008, + "QCAccAKilledB": 2009, + "QCAccAKilledBNeg": 2010, + "QCAccAIsSuspicious": 2011, + "QCAccAIsSuspiciousNeg": 2012, + "QCAccASawBVent": 2013, + "QCAccASawBVentNeg": 2014, + "QCAccAWasChasingB": 2015, + "QCAccAWasChasingBNeg": 2016, + "QCAccAIsLying": 2017, + "QCAccAIsLyingNeg": 2018, + "QCAccVoteA": 2019, + "QCAccVoteANeg": 2020, + "QCAccADidntReport": 2021, + "QCResYes": 2022, + "QCResNo": 2023, + "QCResDontKnow": 2024, + "QCResDontKnowNeg": 2025, + "QCResAWas": 2026, + "QCResAWasNeg": 2027, + "QCResADid": 2028, + "QCResADidNeg": 2029, + "QCResVote": 2030, + "QCResVoteNeg": 2031, + "QCResAWasAtB": 2032, + "QCResAWasAtBNeg": 2033, + "QCResRip": 2034, + "QCResRipNeg": 2035, + "QCResLies": 2036, + "QCResLiesNeg": 2037, + "QCQstWhere": 2038, + "QCQstWho": 2039, + "QCQstWhoWasWith": 2040, + "QCQstWhatWasADoing": 2041, + "QCQstWhoDidTask": 2042, + "QCQstWhereWasA": 2043, + "QCQstBodyOrMeeting": 2044, + "QCStaASawB": 2045, + "QCStaAWasWithB": 2046, + "QCStaADidB": 2047, + "QCStaASelfReported": 2048, + "QCStaDoubleKill": 2049, + "QCStaWasSelfReport": 2050, + "QCStaPleaseDoTasks": 2051, + "QCStaBodyWasInA": 2052, + "QCStaACalledMeeting": 2053, + "QCLocation": 2054, + "QCSystems": 2055, + "QCCrew": 2056, + "QCAccusation": 2057, + "QCResponse": 2058, + "QCQuestion": 2059, + "QCStatements": 2060, + "ANY": 2061, + "ChatType": 2062, + "QuickChatOnly": 2063, + "FreeChatOnly": 2064, + "FreeOrQuickChat": 2065, + "DateOfBirth": 2066, + "DateOfBirthEnter": 2067, + "Month": 2068, + "Day": 2069, + "Year": 2070, + "January": 2071, + "February": 2072, + "March": 2073, + "April": 2074, + "May": 2075, + "June": 2076, + "July": 2077, + "August": 2078, + "September": 2079, + "October": 2080, + "November": 2081, + "December": 2082, + "Submit": 2083, + "QCMore": 2084, + "Success": 2085, + "Failed": 2086, + "ErrorCreate": 2087, + "SuccessCreate": 2088, + "Close": 2089, + "ErrorLogIn": 2090, + "SuccessLogIn": 2091, + "AccountInfo": 2092, + "Account": 2093, + "UserName": 2094, + "Height": 2095, + "Weight": 2096, + "SignIn": 2097, + "CreateAccount": 2098, + "RequestPermission": 2099, + "RandomizeName": 2100, + "AccountLinking": 2101, + "ChangeName": 2102, + "LogOut": 2103, + "GuardianWait": 2104, + "EmailEdit": 2105, + "EmailResend": 2106, + "GuestContinue": 2107, + "GuardianEmailSent": 2108, + "GuardianCheckEmail": 2109, + "EditName": 2110, + "Name": 2111, + "CreateAccountQuestion": 2112, + "DoYouWantCreate": 2113, + "PermissionRequired": 2114, + "NeedPermissionText": 2115, + "GuardianEmailTitle": 2116, + "Send": 2117, + "NewEmail": 2118, + "ConfirmEmail": 2119, + "EditEmail": 2120, + "Loading": 2121, + "Welcome": 2122, + "DLLNotFoundAccountError": 2123, + "ContinueOffline": 2124, + "CreateTryAgain": 2125, + "WantToLogIn": 2126, + "GoOffline": 2127, + "PlayAsGuest": 2128, + "LogInTitle": 2129, + "LogInInfoText": 2130, + "ShowAccountSupportID5": 2131, + "ShowAccountSupportID4": 2132, + "ShowAccountSupportID3": 2133, + "ShowAccountSupportID2": 2134, + "ShowAccountSupportID1": 2135, + "YouAreNotOnline": 2136, + "SaveGameOutOfSpaceMessage": 2137, + "SaveGameOutOfSpaceConfirm": 2138, + "SaveGameOutOfSpaceCancel": 2139, + "EngagementScreen": 2140, + "EngagementScreenSignIn": 2141, + "FollowUs": 2142, + "ColorMaroon": 2143, + "ColorRose": 2144, + "ColorBanana": 2145, + "ColorGray": 2146, + "ColorTan": 2147, + "ColorSunset": 2148, + "QuickChatInstructionsStart": 2149, + "QuickChatInstructionsChild": 2150, + "QuickChatInstructionsGuest": 2151, + "QuickChatInstructionsFull": 2152, + "SwitchEShopBrowseAll": 2153, + "ColorCoral": 2154, + "GuardianEmail": 2155, + "LocalButton": 2156, + "OnlineButton": 2157, + "HowToPlayButton": 2158, + "FreePlayButton": 2159, + "PublicHeader": 2160, + "PrivateHeader": 2161, + "HostHeader": 2162, + "EmergencyMeeting": 2163, + "BodyReported": 2164, + "PlayAgain": 2165, + "QuitLabel": 2166, + "DownloadLabel": 2167, + "UploadLabel": 2168, + "TimeRemaining": 2169, + "AnnouncementLabel": 2170, + "StartLabel": 2171, + "UseLabel": 2172, + "KillLabel": 2173, + "SabotageLabel": 2174, + "VentLabel": 2175, + "OptionsLabel": 2176, + "ReportLabel": 2177, + "CO2Label": 2178, + "NutriLabel": 2179, + "RADLabel": 2180, + "WaterLabel": 2181, + "DiscussLabel": 2182, + "DeadLabel": 2183, + "SkippedVoting": 2184, + "ProceedLabel": 2185, + "HolidayHatLabel": 2186, + "HatLabel": 2187, + "PetLabel": 2188, + "SkinLabel": 2189, + "DoorlogLabel": 2190, + "VitalsLabel": 2191, + "InsufficientStorageError": 2192, + "NetworkError": 2193, + "OtherDownloadError": 2194, + "DownloadingLabel": 2195, + "DownloadSizeLabel": 2196, + "SkipVoteLabel": 2197, + "LogInInfoTextSwitch": 2198, + "WeatherDataDownload": 2199, + "BeginLabel": 2200, + "QuietLabel": 2201, + "LogLabel": 2202, + "ReadingLabel": 2203, + "UploadingLabel": 2204, + "ConnectionLabel": 2205, + "GoodLabel": 2206, + "PoorLabel": 2207, + "NoneLabel": 2208, + "ProgressLabel": 2209, + "PerfectLabel": 2210, + "NoDeadBodiesFound": 2211, + "AirshipBundle": 2212, + "PolusBundle": 2213, + "PolusSkinBundle": 2214, + "MiraBundle": 2215, + "MiraSkinBundle": 2216, + "PetAlien2": 2217, + "PetAlien1": 2218, + "PetAnimal": 2219, + "PetCrewmate": 2220, + "PetStickmin": 2221, + "PrisonerSkin": 2222, + "Cyborg_RHM": 2223, + "CCC_Officer": 2224, + "VentCleaning": 2225, + "CleanUp": 2226, + "ControllerDisconnectedMessage": 2227, + "TermsOfUseTitle": 2228, + "PPAndToUTitle": 2229, + "ComePlayDiscord": 2230, + "SupportEmail": 2231, + "SupportIDLabel": 2232, + "pk05_davehat": 2233, + "pk05_Ellie": 2234, + "pk05_Svenhat": 2235, + "pk05_Burthat": 2236, + "pk05_Ellryhat": 2237, + "pk05_monocles": 2238, + "pk05_cheesetoppat": 2239, + "pk05_Macbethhat": 2240, + "pk05_HenryToppat": 2241, + "pk05_EllieToppat": 2242, + "pk05_GeoffreyToppat": 2243, + "InviteFriends": 2244, + "Continue": 2245, + "GameComplete": 2246, + "XpGained": 2247, + "PodsEarned": 2248, + "CosmicubeNodeUnlocked": 2249, + "LevelShorthand": 2250, + "PrestigeLevelShorthand": 2251, + "MaxLevel": 2252, + "EquipLabel": 2253, + "XpGainedValue": 2254, + "PSNErrorSessionFailed": 2255, + "PSNErrorSessionJoinFailed": 2256, + "PSNErrorSessionGetInfoFailed": 2257, + "PSNErrorPSNConnectionLost": 2258, + "PSNErrorUserSignedOut": 2259, + "CrossPlayTitle": 2260, + "CrossPlayAllPlatforms": 2261, + "CrossPlaySamePlatform": 2262, + "QuickChat": 2263, + "TimeOutText": 2264, + "RetryText": 2265, + "PlayerLevel": 2266, + "PlayerXp": 2267, + "PlayerLevelExtremeShorthand": 2268, + "Max": 2269, + "Wardrobe": 2270, + "CopiedText": 2271, + "LinkAccount": 2272, + "CreateNewAccount": 2273, + "LinkExistingAccount": 2274, + "LinkAccountExplanation": 2275, + "LinkAccountCode": 2276, + "ErrorLink": 2277, + "UnlinkAccount": 2278, + "ConfirmUnlinkAccount": 2279, + "UnlinkAccountExplain": 2280, + "UnlinkAccountExplainConfirm": 2281, + "UnlinkError": 2282, + "UnlinkSuccess": 2283, + "ConfirmLinkExistingAccount": 2284, + "LinkExistingAccountExplain": 2285, + "LinkExistingAccountExplainConfirm": 2286, + "ResetAccount": 2287, + "CrossPlayEnabledWarning": 2288, + "StoreComingSoon": 2289, + "Locked": 2290, + "FailPurchase": 2291, + "FailPurchaseUnknown": 2292, + "FailPurchaseAlreadyOwn": 2293, + "FailPurchaseCurrency": 2294, + "FailPurchaseCubeOwn": 2295, + "ErrorPlatformParentalControlsBlock": 2296, + "Crewmates": 2297, + "Colors": 2298, + "Active": 2299, + "Equipped": 2300, + "XboxShopBrowseAll": 2302, + "PSShopBrowseAll": 2303, + "SteamNotInitialized": 2304, + "LoggedInErrorStarPurchase": 2305, + "StarDisclaimer": 2306, + "HowToPlayText_Consoles": 2307, + "ErrorQuickChatMode": 2308, + "ErrorLobbyUsersBlocked": 2309, + "ItchNoStars": 2310, + "CheckingPurchasesLabel": 2311, + "RedeemPurchasedItemsTitle": 2312, + "RedeemPurcahsedItemsExplain": 2313, + "RedeemProceed": 2314, + "RedeemNotYet": 2315, + "AccountIDDisplay": 2316, + "RedeemNever": 2317, + "AvailableFor": 2318, + "GuestProgressionWarning": 2319, + "ErrorSelfPlatformLock": 2320, + "ErrorCrossPlat": 2321, + "SettingsStreamerMode": 2322, + "RoomCodeInfo": 2323, + "AbbreviatedDay": 2324, + "AbbreviatedHour": 2325, + "AbbreviatedMinute": 2326, + "AbbreviatedSecond": 2327, + "StreamingTwitch": 2328, + "MapNameSkeld": 2600, + "MapNameMira": 2601, + "MapNamePolus": 2602, + "MapNameAirship": 2603, + "MapNameFungle": 2604, + "MaxVentUses": 2700, + "MaxTimeInVent": 2701, + "MinCrewmatesForVitals": 2702, + "EscapeTime": 2703, + "AllTasksComplete": 2704, + "EscapePrompt": 2705, + "CrewmateFlashlightSize": 2706, + "ImpostorFlashlightSize": 2707, + "CrewmateLeadTime": 2708, + "CrewmadeHideBlurb": 2709, + "ImpostorKillBlurb": 2710, + "HideCountdown": 2711, + "ScaryMusicDistance": 2712, + "ShortTaskTimeValue": 2713, + "LongTaskTimeValue": 2714, + "CommonTaskTimeValue": 2715, + "UseFlashlight": 2716, + "FinalEscapeTime": 2717, + "VeryScaryMusicDistance": 2718, + "SeekerFinalSpeed": 2719, + "SeekerFinalVents": 2720, + "SeekerFinalMap": 2721, + "CrewmateVentCooldown": 2722, + "SeekerPings": 2723, + "MaxPingTime": 2724, + "ShowPingTime": 2725, + "MinPingTime": 2726, + "ShowCrewmateNames": 2727, + "ShowImpostorNames": 2728, + "HideActionButton": 2729, + "RuleOneCrewmates": 2730, + "RuleTwoCrewmates": 2731, + "RuleThreeCrewmates": 2732, + "RuleOneImpostor": 2733, + "RuleTwoImpostor": 2734, + "RuleThreeImpostor": 2735, + "RuleOneCrewmatesTitle": 2736, + "RuleTwoCrewmatesTitle": 2737, + "RuleThreeCrewmatesTitle": 2738, + "RuleOneImpostorTitle": 2739, + "RuleTwoImpostorTitle": 2740, + "RoundRobin": 2741, + "OptionUnavailablePublicLobby": 2742, + "StatsHidenSeekGamesCrewmateSurvived": 2743, + "StatsHidenSeekTimesVented": 2744, + "StatsTimesPettedPet": 2745, + "StatsImpostorKills_HideAndSeek": 2746, + "StatsFastestCrewmateWin_HideAndSeek": 2747, + "StatsFastestImpostorWin_HideAndSeek": 2748, + "StatsHideAndSeekImpostorVictory": 2749, + "StatsHideAndSeekCrewmateVictory": 2750, + "AmongUsFriends": 2800, + "FriendsGuestWarning": 2801, + "PlatformFriends": 2802, + "BlockedPlayers": 2803, + "RecentPlayers": 2804, + "LobbyLabel": 2805, + "FriendCodeExplanation": 2806, + "FriendCodeSuccess": 2807, + "FriendRequestReceived": 2808, + "FriendRequestSent": 2809, + "GameLobbyInviteSent": 2810, + "GameLobbyInviteReceived": 2811, + "BlockPlayerConfirm": 2812, + "RemoveFriendConfirm": 2813, + "InviteToLobbyConfirm": 2814, + "FriendCodeLabel": 2815, + "FriendCodeCreationTitle": 2816, + "FriendRequestSentFailed": 2817, + "ErrorBadUsername": 2818, + "ErrorUserNotFound": 2819, + "ErrorThisIsYou": 2820, + "ErrorFriendRequestExists": 2821, + "ErrorAlreadyFriends": 2822, + "GameLobbyInviteSentFailed": 2823, + "BlockedPlayerFailed": 2824, + "BlockedPlayer": 2825, + "AlreadyBlocked": 2826, + "FriendList": 2827, + "NoNewRequests": 2828, + "AddFriendPrompt": 2829, + "NewRequests": 2830, + "Requests": 2831, + "AddFriend": 2832, + "StreamWarning": 2833, + "FriendsListPermissionsWarning": 2834, + "AddFriendConfirm": 2835, + "UnfriendConfirm": 2836, + "UnblockConfirm": 2837, + "SettingsEnableFriendInvites": 2838, + "ErrorCrossPlatformCommunication": 2839, + "ErrorPlatformFriends": 2840, + "ErrorPlayerBlockedYou": 2841, + "ErrorRecipientMaxFriendRequests": 2842, + "ErrorSenderMaxFriendRequests": 2843, + "ErrorMaxFriends": 2844, + "ErrorRecipientMaxFriends": 2845, + "ParentPortalButton": 2846, + "FriendsListEmailSent": 2847, + "AndroidAssetBundleWarning": 2848, + "FreeChatLinkWarning": 2849, + "FriendListUnavailable": 2850, + "SignInIssueTitle": 2851, + "SignInIssueText": 2852, + "Ghost": 2853, + "CurrentlyHaunting": 2854, + "RestorePurchases": 2855, + "QCAccIsRole": 3000, + "QCAccIsRoleNeg": 3001, + "QCAccShapeshited": 3002, + "QCStaShapeshifterSkin": 3003, + "QCResIsBeingFramed": 3004, + "QCResIsRoleMaybe": 3005, + "QCResCloseTo": 3006, + "QCResProtected": 3007, + "QCRoles": 3008, + "ErrorFailedToCreateGame": 3009, + "ErrorFailedToJoinCreatedGame": 3010, + "ErrorDisconnectBeforeJoining": 3011, + "ErrorDisconnectPacket": 3012, + "PSEULA_SIEA": 3013, + "PSEULA_SIEE": 3014, + "ShowAccountID": 3015, + "HideAccountID": 3016, + "HiddenAccountID": 3017, + "ErrorLobbyFailedGettingBlockedUsers": 3018, + "SteamOverlayDisabled": 3019, + "QCOnlyInfo": 3020, + "FreeChatInfo": 3021, + "FreeChatWarning": 3022, + "TryAgain": 3023, + "TempDisabled": 3024, + "TempDisabledLinkExplain": 3025, + "RedeemPopup": 3026, + "RedeemButton": 3027, + "Decontamination3": 3028, + "MergeGuestAccountText": 3029, + "MergeGuestAccountTitle": 3030, + "ErrorCommunications": 3031, + "ManageAccountTitle": 3032, + "ManageAccountText": 3033, + "Email": 3034, + "BugReportPopUpSubmittedText": 3035, + "BugReportPopUpCategoryLabel": 3036, + "BugReportPopUpDescriptionLabel": 3037, + "BugReportPopUpTitle": 3038, + "BugReportCategoryServerIssues": 3039, + "BugReportCategoryGameplayIssue": 3040, + "BugReportCategoryAccountManagement": 3041, + "BugReportCategoryBilling": 3042, + "BugReportCategoryGeneral": 3043, + "BugReportIssueButton": 3044, + "BugReportPopUpSubmissionFailedText": 3045, + "BugReportPopUpAttachScreenshotLabel": 3046, + "QCQstWhy": 3050, + "QCTagAccuse": 3051, + "QCTagDefend": 3052, + "QCTagQuestion": 3053, + "QCTagLobby": 3054, + "QCTagImpostor": 3055, + "QCTagMeeting": 3056, + "QCTagHiding": 3057, + "QCTagFlashlight": 3058, + "QCTagRoles": 3059, + "QCInputRole": 3060, + "QCTagTasks": 3061, + "QCInputTask": 3062, + "QCTagSabotages": 3063, + "QCInputSabotages": 3064, + "QCTagRemarks": 3065, + "QCInputRemark": 3066, + "QCInputAccusation": 3067, + "QCInputDefense": 3068, + "QCTagQuestionSingular": 3069, + "QCResAgree": 3070, + "QCResDisagree": 3071, + "QCResNice": 3072, + "QCResUhOh": 3073, + "QCResOops": 3074, + "QCResExclamationMarks": 3075, + "QCResQuestionMarks": 3076, + "QCBuildingPlaceholder": 3077, + "QCTagQuickRemarks": 3078, + "FixWiringName": 3079, + "FixLightsName": 3080, + "DoorsName": 3081, + "Undo": 3095, + "Clear": 3096, + "DivertPower": 3097, + "ResetReactorName": 3098, + "RestoreOxyName": 3099, + "QCAccADidntReport_QCCrewMe": 3100, + "QCStaACalledMeeting_QCCrewMe": 3101, + "QCAccAIsLyingNeg_QCCrewMe": 3102, + "QCResADid_QCCrewMe": 3103, + "QCResADidNeg_QCCrewMe": 3104, + "QCResAWas_QCCrewMe": 3105, + "QCResAWasNeg_QCCrewMe": 3106, + "QCResIsBeingFramed_QCCrewMe": 3107, + "QCAccAKilledBNeg_QCCrewMe_ANY": 3108, + "QCStaAWasWithB_QCCrewMe_ANY": 3109, + "QCStaAWasWithB_ANY_QCCrewMe": 3110, + "QCResCloseTo_QCCrewMe_ANY": 3111, + "QCAccAWasChasingB_QCCrewMe_ANY": 3112, + "QCAccAWasChasingBNeg_QCCrewMe_ANY": 3113, + "QCAccAWasChasingB_ANY_QCCrewMe": 3114, + "QCAccAWasChasingBNeg_ANY_QCCrewMe": 3115, + "QCStaASawB_QCCrewMe_ANY": 3116, + "QCAccASawBVent_QCCrewMe_ANY": 3117, + "QCAccASawBVentNeg_QCCrewMe_ANY": 3118, + "QCAccASawBVentNeg_ANY_QCCrewMe": 3119, + "QCResAWasAtB_QCCrewMe_ANY": 3120, + "QCResAWasAtBNeg_QCCrewMe_ANY": 3121, + "QCStaADidB_QCCrewMe_ANY": 3122, + "QCAccIsRole_QCCrewMe_ANY": 3123, + "QCAccIsRoleNeg_QCCrewMe_ANY": 3124, + "QCResProtected_ANY_QCCrewMe": 3125, + "QCCrewSomeone": 3126, + "QCResUrWelcome": 3127, + "QCResNp": 3128, + "QCResYikes": 3129, + "QCResRipCrew": 3130, + "QCResYeetCrew": 3131, + "QCSelfWasOnVitals": 3132, + "QCSawDeadCrewOnVitals": 3133, + "QCSelfSawTwoCrew": 3134, + "QCCrewShapeshifted": 3135, + "QCSelfSawCrewDoVisualTask": 3136, + "QCSelfWasOnDoorlogs": 3137, + "QCSelfWasOnAdmin": 3138, + "QCSelfAmVotingCrew": 3139, + "QCCrewWasPretendingTasks": 3140, + "QCCrewWasPretendingSabotage": 3141, + "QCLobbyMoreImpostors": 3142, + "QCLobbyLessImpostors": 3143, + "QCLobbyConfirmEjects": 3144, + "QCLobbyMoreEmergencyMeetings": 3145, + "QCLobbyLessEmergencyMeetings": 3146, + "QCLobbyAnonymousVotes": 3147, + "QCLobbyMoreEmergencyCooldownTime": 3148, + "QCLobbyLessEmergencyCooldownTime": 3149, + "QCLobbyMoreDiscussionTime": 3150, + "QCLobbyLessDiscussionTime": 3151, + "QCLobbyMoreVotingTime": 3152, + "QCLobbyLessVotingTime": 3153, + "QCLobbyFasterPlayerSpeed": 3154, + "QCLobbySlowerPlayerSpeed": 3155, + "QCLobbyTaskBarUpdates": 3156, + "QCLobbyVisualTasks": 3157, + "QCLobbyMoreCrewmateVision": 3158, + "QCLobbyLessCrewmateVision": 3159, + "QCLobbyMoreImpostorVision": 3160, + "QCLobbyLessImpostorVision": 3161, + "QCLobbyMoreKillCooldownTime": 3162, + "QCLobbyLessKillCooldownTime": 3163, + "QCLobbyLongerKillDistance": 3164, + "QCLobbyShorderKillDistance": 3165, + "QCLobbyMoreCommonTasks": 3166, + "QCLobbyLessCommonTasks": 3167, + "QCLobbyMoreLongTasks": 3168, + "QCLobbyLessLongTasks": 3169, + "QCLobbyMoreShortTasks": 3170, + "QCLobbyLessShortTasks": 3171, + "QCLobbyRoleScientists": 3172, + "QCLobbyRoleGuardianAngels": 3173, + "QCLobbyRoleEngineers": 3174, + "QCLobbyRoleShapeshifters": 3175, + "QCLobbyRoleNone": 3176, + "QCResLess": 3177, + "QCResMore": 3178, + "QCResNone": 3179, + "QCLobbyHNSMoreHideTime": 3180, + "QCLobbyHNSLessHideTime": 3181, + "QCLobbyHNSMoreFinalHideTime": 3182, + "QCLobbyHNSLessFinalHideTime": 3183, + "QCLobbyHNSFlashlightMode": 3184, + "QCLobbyHNSMoreCrewmateFlashlightSize": 3185, + "QCLobbyHNSLessCrewmateFlashlightSize": 3186, + "QCLobbyHNSMoreImpostorFlashlightSize": 3187, + "QCLobbyHNSLessImpostorFlashlightSize": 3188, + "QCLobbyHNSShowNames": 3189, + "QCLobbyHNSMoreVents": 3190, + "QCLobbyHNSLessVents": 3191, + "QCLobbyHNSMoreTimeInVent": 3192, + "QCLobbyHNSLessTimeInVent": 3193, + "QCLobbyHNSMoreFinalHideImpostorSpeed": 3194, + "QCLobbyHNSLessFinalHideImpostorSpeed": 3195, + "QCLobbyHNSFinalHideSeekMap": 3196, + "QCLobbyHNSFinalHidePings": 3197, + "QCLobbyHNSMorePingInterval": 3198, + "QCLobbyHNSLessPingInterval": 3199, + "SettingsColorblind": 3200, + "SettingsHelp": 3201, + "SecLogEntryColorblind": 3202, + "DeleteAccount": 3203, + "DoNotDeleteAccount": 3204, + "AccountDeleteHelp": 3205, + "AccountUnDeleteHelp": 3206, + "ConfirmDelete": 3207, + "ConfirmDeleteAccounts": 3208, + "ConfirmDeleteAccountsEmpty": 3209, + "AccountRequestDelete": 3210, + "HasBeenKilled": 3211, + "ScrollList": 3300, + "ScrollNews": 3301, + "AmongUsAnnouncements": 3302, + "AnnouncementErrorSubtitle": 3303, + "AnnouncementErrorText": 3304, + "ReadMoreLabel": 3305, + "ReturnToList": 3306, + "NavigateLinks": 3307, + "AgeVerificationTitle": 3308, + "AgeVerificationInfoTitle": 3309, + "AgeVerificationInfo": 3310, + "AgeVerificationMoreInfo": 3311, + "EditLabel": 3312, + "VerifyAgeText": 3313, + "PlayLabel": 3314, + "SettingsLabel": 3315, + "NewsLabel": 3316, + "AccountLabel": 3317, + "CreditsLabel": 3318, + "ShopLabel": 3319, + "InventoryLabel": 3320, + "StatsLabel": 3321, + "FriendsLabel": 3322, + "ReportNotificationHeader": 3323, + "ReportNotificationBody": 3324, + "MiningPit": 3400, + "Jungle": 3401, + "BuildSandcastle": 3402, + "FishingDock": 3403, + "CatchFish": 3404, + "CollectShells": 3405, + "LiftWeights": 3406, + "RoastMarshmallow": 3407, + "TestFrisbee": 3408, + "CollectSamples": 3409, + "CollectVegetables": 3410, + "HoistSupplies": 3411, + "MineOres": 3412, + "PolishGem": 3413, + "ReplaceParts": 3414, + "HelpCritter": 3415, + "RecRoom": 3416, + "Lookout": 3417, + "Beach": 3418, + "Highlands": 3419, + "SleepingQuarters": 3420, + "CrankGenerator": 3421, + "FixAntenna": 3422, + "TuneRadio": 3423, + "MushroomMixupSabotage": 3424, + "MineOresMine": 3425, + "CollectStick": 3426, + "WipeSand": 3427, + "ExtractFuel": 3428, + "MonitorMushroom": 3429, + "PlayVideogame": 3430, + "CookFish": 3431, + "PrepVegetables": 3432, + "MushroomMixupName": 3433, + "GameType": 3500, + "GameTypeError": 3501, + "GameTypeClassic": 3502, + "GameTypeHideAndSeek": 3503, + "PetAction": 3504, + "CreateLabel": 3505, + "TagFiltersTitle": 3506, + "TagFiltersHelpFindGame": 3507, + "TagFiltersHelpCreate": 3508, + "TagsFilteredSingular": 3509, + "TagsFilteredPlural": 3510, + "TagsAppliedSingular": 3511, + "TagsAppliedPlural": 3512, + "DefaultFilterTag_FirstTime": 3513, + "DefaultFilterTag_Casual": 3514, + "DefaultFilterTag_Serious": 3515, + "DefaultFilterTag_Expert": 3516, + "HttpErrorContextNone": 3517, + "HttpErrorContextAuthenticate": 3518, + "HttpErrorContextRequestGameCode": 3519, + "HttpErrorContextFindHostServer": 3520, + "HttpErrorContextRequestGamesList": 3521, + "HttpErrorUnknown": 3522, + "HttpErrorBadRequest": 3523, + "HttpErrorUnauthorized": 3524, + "HttpErrorForbidden": 3525, + "HttpErrorNotFound": 3526, + "HttpErrorMethodNotAllowed": 3527, + "HttpErrorRequestTimeout": 3528, + "HttpErrorTooManyRequests": 3529, + "HttpErrorInternalServerError": 3530, + "HttpErrorBadGateway": 3531, + "HttpErrorServiceUnavailable": 3532, + "HttpErrorGatewayTimeout": 3533 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/SupportedLangs.json b/src/Impostor.Api/Innersloth/Data/enums/SupportedLangs.json new file mode 100644 index 0000000..6228b39 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/SupportedLangs.json @@ -0,0 +1,18 @@ +{ + "English": 0, + "Latam": 1, + "Brazilian": 2, + "Portuguese": 3, + "Korean": 4, + "Russian": 5, + "Dutch": 6, + "Filipino": 7, + "French": 8, + "German": 9, + "Italian": 10, + "Japanese": 11, + "Spanish": 12, + "SChinese": 13, + "TChinese": 14, + "Irish": 15 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/SystemTypes.json b/src/Impostor.Api/Innersloth/Data/enums/SystemTypes.json new file mode 100644 index 0000000..2b5b084 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/SystemTypes.json @@ -0,0 +1,61 @@ +{ + "Hallway": 0, + "Storage": 1, + "Cafeteria": 2, + "Reactor": 3, + "UpperEngine": 4, + "Nav": 5, + "Admin": 6, + "Electrical": 7, + "LifeSupp": 8, + "Shields": 9, + "MedBay": 10, + "Security": 11, + "Weapons": 12, + "LowerEngine": 13, + "Comms": 14, + "ShipTasks": 15, + "Doors": 16, + "Sabotage": 17, + "Decontamination": 18, + "Launchpad": 19, + "LockerRoom": 20, + "Laboratory": 21, + "Balcony": 22, + "Office": 23, + "Greenhouse": 24, + "Dropship": 25, + "Decontamination2": 26, + "Outside": 27, + "Specimens": 28, + "BoilerRoom": 29, + "VaultRoom": 30, + "Cockpit": 31, + "Armory": 32, + "Kitchen": 33, + "ViewingDeck": 34, + "HallOfPortraits": 35, + "CargoBay": 36, + "Ventilation": 37, + "Showers": 38, + "Engine": 39, + "Brig": 40, + "MeetingRoom": 41, + "Records": 42, + "Lounge": 43, + "GapRoom": 44, + "MainHall": 45, + "Medical": 46, + "Decontamination3": 47, + "Zipline": 48, + "MiningPit": 49, + "FishingDock": 50, + "RecRoom": 51, + "Lookout": 52, + "Beach": 53, + "Highlands": 54, + "Jungle": 55, + "SleepingQuarters": 56, + "MushroomMixupSabotage": 57, + "HeliSabotage": 58 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/enums/TaskTypes.json b/src/Impostor.Api/Innersloth/Data/enums/TaskTypes.json new file mode 100644 index 0000000..f13b659 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/enums/TaskTypes.json @@ -0,0 +1,84 @@ +{ + "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, + "CleanO2Filter": 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, + "StoreArtifacts": 31, + "FillCanisters": 32, + "FixWeatherNode": 33, + "InsertKeys": 34, + "ResetSeismic": 35, + "ScanBoardingPass": 36, + "OpenWaterways": 37, + "ReplaceWaterJug": 38, + "RepairDrill": 39, + "AlignTelescope": 40, + "RecordTemperature": 41, + "RebootWifi": 42, + "PolishRuby": 43, + "ResetBreakers": 44, + "Decontaminate": 45, + "MakeBurger": 46, + "UnlockSafe": 47, + "SortRecords": 48, + "PutAwayPistols": 49, + "FixShower": 50, + "CleanToilet": 51, + "DressMannequin": 52, + "PickUpTowels": 53, + "RewindTapes": 54, + "StartFans": 55, + "DevelopPhotos": 56, + "GetBiggolSword": 57, + "PutAwayRifles": 58, + "StopCharles": 59, + "VentCleaning": 60, + "None": 61, + "BuildSandcastle": 62, + "CatchFish": 63, + "CollectShells": 64, + "LiftWeights": 65, + "RoastMarshmallow": 66, + "TestFrisbee": 67, + "CollectSamples": 68, + "CollectVegetables": 69, + "HoistSupplies": 70, + "MineOres": 71, + "PolishGem": 72, + "ReplaceParts": 73, + "HelpCritter": 74, + "CrankGenerator": 75, + "FixAntenna": 76, + "TuneRadio": 77, + "MushroomMixupSabotage": 78, + "ExtractFuel": 79, + "MonitorMushroom": 80, + "PlayVideogame": 81 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/info.json b/src/Impostor.Api/Innersloth/Data/info.json new file mode 100644 index 0000000..1f9a1ee --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/info.json @@ -0,0 +1,5 @@ +{ + "dumpostorVersion": "1.0.0", + "gameVersion": "2023.10.24", + "platformType": "StandaloneSteamPC" +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Airship/doors.json b/src/Impostor.Api/Innersloth/Data/maps/Airship/doors.json new file mode 100644 index 0000000..06e6b09 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Airship/doors.json @@ -0,0 +1,149 @@ +{ + "0": { + "room": "Comms", + "position": { + "x": -16.191698, + "y": -0.90999997 + } + }, + "1": { + "room": "Comms", + "position": { + "x": -8.663198, + "y": -0.9099996 + } + }, + "2": { + "room": "Comms", + "position": { + "x": -13.362299, + "y": -0.015400052 + } + }, + "3": { + "room": "Comms", + "position": { + "x": -10.975999, + "y": -2.3309999 + } + }, + "4": { + "room": "Brig", + "position": { + "x": -0.9260999, + "y": 7.100799 + } + }, + "5": { + "room": "Brig", + "position": { + "x": -3.6364996, + "y": 8.784999 + } + }, + "6": { + "room": "Brig", + "position": { + "x": 2.7145998, + "y": 8.850798 + } + }, + "7": { + "room": "Kitchen", + "position": { + "x": -8.764699, + "y": -7.2687993 + } + }, + "8": { + "room": "Kitchen", + "position": { + "x": -8.764699, + "y": -11.976298 + } + }, + "9": { + "room": "Kitchen", + "position": { + "x": -1.4979999, + "y": -12.040699 + } + }, + "10": { + "room": "MainHall", + "position": { + "x": 4.2496986, + "y": 0.042 + } + }, + "11": { + "room": "MainHall", + "position": { + "x": 17.490198, + "y": 0.04619999 + } + }, + "12": { + "room": "Records", + "position": { + "x": 16.382797, + "y": 9.368099 + } + }, + "13": { + "room": "Records", + "position": { + "x": 23.97472, + "y": 9.368099 + } + }, + "14": { + "room": "Records", + "position": { + "x": 19.858297, + "y": 5.601399 + } + }, + "15": { + "room": "Lounge", + "position": { + "x": 29.2544, + "y": 6.6990004 + } + }, + "16": { + "room": "Lounge", + "position": { + "x": 30.7944, + "y": 6.6990004 + } + }, + "17": { + "room": "Lounge", + "position": { + "x": 32.2924, + "y": 6.6990004 + } + }, + "18": { + "room": "Lounge", + "position": { + "x": 33.7771, + "y": 6.6990004 + } + }, + "19": { + "room": "Medical", + "position": { + "x": 21.314297, + "y": -8.416099 + } + }, + "20": { + "room": "Medical", + "position": { + "x": 32.540195, + "y": -4.694899 + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Airship/spawn.json b/src/Impostor.Api/Innersloth/Data/maps/Airship/spawn.json new file mode 100644 index 0000000..bcfcdd4 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Airship/spawn.json @@ -0,0 +1,15 @@ +{ + "initialSpawnCenter": { + "x": -25, + "y": 40 + }, + "meetingSpawnCenter": { + "x": 20, + "y": 9 + }, + "meetingSpawnCenter2": { + "x": 20, + "y": 9 + }, + "spawnRadius": 1.55 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Airship/systems.json b/src/Impostor.Api/Innersloth/Data/maps/Airship/systems.json new file mode 100644 index 0000000..e314ea4 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Airship/systems.json @@ -0,0 +1,13 @@ +{ + "Electrical": "SwitchSystem", + "MedBay": "MedScanSystem", + "Doors": "DoorsSystemType", + "Comms": "HudOverrideSystemType", + "GapRoom": "MovingPlatformBehaviour", + "HeliSabotage": "HeliSabotageSystem", + "Decontamination": "ElectricalDoors", + "Decontamination2": "AutoDoorsSystemType", + "Security": "SecurityCameraSystemType", + "Ventilation": "VentilationSystem", + "Sabotage": "SabotageSystemType" +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Airship/tasks.json b/src/Impostor.Api/Innersloth/Data/maps/Airship/tasks.json new file mode 100644 index 0000000..2029a76 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Airship/tasks.json @@ -0,0 +1,1131 @@ +{ + "0": { + "type": "NormalPlayerTask", + "taskType": "FixWiring", + "length": "Common", + "consoles": [ + { + "id": 1, + "room": "Engine", + "position": { + "x": -7.021, + "y": 1.4909999 + }, + "usableDistance": 0.7 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -10.290699, + "y": -11.334398 + }, + "usableDistance": 0.7 + }, + { + "id": 2, + "room": "MainHall", + "position": { + "x": 16.212, + "y": 2.8630004 + }, + "usableDistance": 0.7 + }, + { + "id": 3, + "room": "Showers", + "position": { + "x": 17.0821, + "y": 5.481 + }, + "usableDistance": 0.7 + }, + { + "id": 4, + "room": "Lounge", + "position": { + "x": 27.3574, + "y": 10.388 + }, + "usableDistance": 0.7 + }, + { + "id": 5, + "room": "CargoBay", + "position": { + "x": 35.154, + "y": 3.9129996 + }, + "usableDistance": 0.7 + }, + { + "id": 6, + "room": "MeetingRoom", + "position": { + "x": 14.077001, + "y": 16.484999 + }, + "usableDistance": 0.7 + } + ] + }, + "1": { + "type": "NormalPlayerTask", + "taskType": "EnterIdCode", + "length": "Common", + "consoles": [ + { + "id": 0, + "room": "Cockpit", + "position": { + "x": 16.201427, + "y": 16.331 + }, + "usableDistance": 1 + } + ] + }, + "2": { + "type": "NormalPlayerTask", + "taskType": "CalibrateDistributor", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 16.346632, + "y": -5.4998994 + }, + "usableDistance": 1 + } + ] + }, + "3": { + "type": "NormalPlayerTask", + "taskType": "ResetBreakers", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 17.29, + "y": -10.1535 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Electrical", + "position": { + "x": 20.267416, + "y": -10.1535 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Electrical", + "position": { + "x": 18.424, + "y": -7.7385 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Electrical", + "position": { + "x": 17.29, + "y": -7.7385 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Electrical", + "position": { + "x": 12.334001, + "y": -7.7385 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Electrical", + "position": { + "x": 18.417, + "y": -5.3375 + }, + "usableDistance": 1 + }, + { + "id": 6, + "room": "Electrical", + "position": { + "x": 15.365001, + "y": -7.7385 + }, + "usableDistance": 1 + } + ] + }, + "4": { + "type": "AirshipUploadTask", + "taskType": "UploadData", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -14.4641, + "y": -16.387701 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": 10.4685, + "y": -16.218298 + }, + "usableDistance": 1 + } + ] + }, + "5": { + "type": "AirshipUploadTask", + "taskType": "UploadData", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -14.4641, + "y": -16.387701 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": 10.4685, + "y": -16.218298 + }, + "usableDistance": 1 + } + ] + }, + "6": { + "type": "AirshipUploadTask", + "taskType": "UploadData", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -14.4641, + "y": -16.387701 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": 10.4685, + "y": -16.218298 + }, + "usableDistance": 1 + } + ] + }, + "7": { + "type": "AirshipUploadTask", + "taskType": "UploadData", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -14.4641, + "y": -16.387701 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": 10.4685, + "y": -16.218298 + }, + "usableDistance": 1 + } + ] + }, + "8": { + "type": "AirshipUploadTask", + "taskType": "UploadData", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -14.4641, + "y": -16.387701 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": 10.4685, + "y": -16.218298 + }, + "usableDistance": 1 + } + ] + }, + "9": { + "type": "NormalPlayerTask", + "taskType": "UnlockSafe", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "CargoBay", + "position": { + "x": 36.302, + "y": -2.688 + }, + "usableDistance": 1 + } + ] + }, + "10": { + "type": "NormalPlayerTask", + "taskType": "StartFans", + "length": "Long", + "consoles": [] + }, + "11": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Long", + "consoles": [] + }, + "12": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Long", + "consoles": [] + }, + "13": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Long", + "consoles": [] + }, + "14": { + "type": "NormalPlayerTask", + "taskType": "DevelopPhotos", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "MainHall", + "position": { + "x": 13.527709, + "y": 2.3494914 + }, + "usableDistance": 1 + } + ] + }, + "15": { + "type": "NormalPlayerTask", + "taskType": "FuelEngines", + "length": "Long", + "consoles": [] + }, + "16": { + "type": "NormalPlayerTask", + "taskType": "RewindTapes", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Security", + "position": { + "x": 8.1305, + "y": -11.535298 + }, + "usableDistance": 1.4 + } + ] + }, + "17": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Long", + "consoles": [] + }, + "18": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Long", + "consoles": [] + }, + "19": { + "type": "NormalPlayerTask", + "taskType": "PolishRuby", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "VaultRoom", + "position": { + "x": -8.851499, + "y": 9.099999 + }, + "usableDistance": 1 + } + ] + }, + "20": { + "type": "NormalPlayerTask", + "taskType": "StabilizeSteering", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Cockpit", + "position": { + "x": -19.676998, + "y": -0.791 + }, + "usableDistance": 1 + } + ] + }, + "21": { + "type": "AirshipUploadTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -14.4641, + "y": -16.387701 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": 10.4685, + "y": -16.218298 + }, + "usableDistance": 1 + } + ] + }, + "22": { + "type": "AirshipUploadTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -14.4641, + "y": -16.387701 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": 10.4685, + "y": -16.218298 + }, + "usableDistance": 1 + } + ] + }, + "23": { + "type": "AirshipUploadTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -14.4641, + "y": -16.387701 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": 10.4685, + "y": -16.218298 + }, + "usableDistance": 1 + } + ] + }, + "24": { + "type": "AirshipUploadTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -14.4641, + "y": -16.387701 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": 10.4685, + "y": -16.218298 + }, + "usableDistance": 1 + } + ] + }, + "25": { + "type": "AirshipUploadTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": -14.4641, + "y": -16.387701 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "ViewingDeck", + "position": { + "x": 10.4685, + "y": -16.218298 + }, + "usableDistance": 1 + } + ] + }, + "26": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 17.59529, + "y": -3.7142 + }, + "usableDistance": 1 + } + ] + }, + "27": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 17.59529, + "y": -3.7142 + }, + "usableDistance": 1 + } + ] + }, + "28": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 17.59529, + "y": -3.7142 + }, + "usableDistance": 1 + } + ] + }, + "29": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 17.59529, + "y": -3.7142 + }, + "usableDistance": 1 + } + ] + }, + "30": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 17.59529, + "y": -3.7142 + }, + "usableDistance": 1 + } + ] + }, + "31": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 17.59529, + "y": -3.7142 + }, + "usableDistance": 1 + } + ] + }, + "32": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 17.59529, + "y": -3.7142 + }, + "usableDistance": 1 + } + ] + }, + "33": { + "type": "TowelTask", + "taskType": "PickUpTowels", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Showers", + "position": { + "x": 17.3159, + "y": 4.7469535 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Showers", + "position": { + "x": 20.3819, + "y": 4.5709996 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Showers", + "position": { + "x": 21.8169, + "y": 2.464 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Showers", + "position": { + "x": 18.848902, + "y": -0.90999997 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Showers", + "position": { + "x": 24.0359, + "y": -2.1839998 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Showers", + "position": { + "x": 20.5499, + "y": -1.736 + }, + "usableDistance": 1 + }, + { + "id": 6, + "room": "Showers", + "position": { + "x": 22.0129, + "y": -1.428 + }, + "usableDistance": 1 + }, + { + "id": 7, + "room": "Showers", + "position": { + "x": 20.0809, + "y": -0.04199996 + }, + "usableDistance": 1 + }, + { + "id": 8, + "room": "Showers", + "position": { + "x": 19.1849, + "y": 3.3669999 + }, + "usableDistance": 1 + }, + { + "id": 9, + "room": "Showers", + "position": { + "x": 22.9649, + "y": 0.055999946 + }, + "usableDistance": 1 + }, + { + "id": 10, + "room": "Showers", + "position": { + "x": 18.134901, + "y": 2.072 + }, + "usableDistance": 1 + }, + { + "id": 11, + "room": "Showers", + "position": { + "x": 23.041899, + "y": -1.491 + }, + "usableDistance": 1 + }, + { + "id": 12, + "room": "Showers", + "position": { + "x": 22.917301, + "y": -1.3524001 + }, + "usableDistance": 1 + }, + { + "id": 13, + "room": "Showers", + "position": { + "x": 23.1231, + "y": -1.4 + }, + "usableDistance": 1 + }, + { + "id": 255, + "room": "Showers", + "position": { + "x": 18.7929, + "y": 5.138 + }, + "usableDistance": 1 + } + ] + }, + "34": { + "type": "NormalPlayerTask", + "taskType": "CleanToilet", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Lounge", + "position": { + "x": 29.191824, + "y": 7.739511 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Lounge", + "position": { + "x": 30.808395, + "y": 7.7209997 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Lounge", + "position": { + "x": 32.320076, + "y": 7.764191 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Lounge", + "position": { + "x": 33.735863, + "y": 7.791699 + }, + "usableDistance": 1 + } + ] + }, + "35": { + "type": "NormalPlayerTask", + "taskType": "DressMannequin", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "VaultRoom", + "position": { + "x": -7.3842983, + "y": 6.4301996 + }, + "usableDistance": 1 + } + ] + }, + "36": { + "type": "NormalPlayerTask", + "taskType": "SortRecords", + "length": "Short", + "consoles": [ + { + "id": 5, + "room": "Records", + "position": { + "x": 17.935398, + "y": 11.4016 + }, + "usableDistance": 1 + }, + { + "id": 6, + "room": "Records", + "position": { + "x": 21.8547, + "y": 11.4163 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Records", + "position": { + "x": 19.893847, + "y": 9.273678 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Records", + "position": { + "x": 18.687897, + "y": 12.503397 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Records", + "position": { + "x": 19.2549, + "y": 12.7015 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Records", + "position": { + "x": 20.519602, + "y": 12.718999 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Records", + "position": { + "x": 21.107098, + "y": 12.527897 + }, + "usableDistance": 1 + }, + { + "id": 7, + "room": "Records", + "position": { + "x": 21.5992, + "y": 7.07 + }, + "usableDistance": 1 + }, + { + "id": 8, + "room": "Records", + "position": { + "x": 18.186699, + "y": 7.0651 + }, + "usableDistance": 1 + } + ] + }, + "37": { + "type": "NormalPlayerTask", + "taskType": "PutAwayPistols", + "length": "Short", + "consoles": [] + }, + "38": { + "type": "NormalPlayerTask", + "taskType": "PutAwayRifles", + "length": "Short", + "consoles": [] + }, + "39": { + "type": "NormalPlayerTask", + "taskType": "Decontaminate", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "MainHall", + "position": { + "x": 14.791556, + "y": 3.7029998 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Hallway", + "position": { + "x": 14.791556, + "y": 3.7029998 + }, + "usableDistance": 0.8 + } + ] + }, + "40": { + "type": "NormalPlayerTask", + "taskType": "MakeBurger", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Kitchen", + "position": { + "x": -5.1793, + "y": -8.5239 + }, + "usableDistance": 1 + } + ] + }, + "41": { + "type": "NormalPlayerTask", + "taskType": "FixShower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Showers", + "position": { + "x": 20.8159, + "y": 3.2759998 + }, + "usableDistance": 1 + } + ] + }, + "42": { + "type": "NormalPlayerTask", + "taskType": "VentCleaning", + "length": "Short", + "consoles": [ + { + "id": 1, + "room": "Cockpit", + "position": { + "x": -22.098999, + "y": -1.5120001 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Engine", + "position": { + "x": 0.20299996, + "y": -2.5361004 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "VaultRoom", + "position": { + "x": -12.632198, + "y": 8.4735 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Kitchen", + "position": { + "x": -2.6018999, + "y": -9.338 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "ViewingDeck", + "position": { + "x": -15.658999, + "y": -11.6991005 + }, + "usableDistance": 1 + }, + { + "id": 8, + "room": "GapRoom", + "position": { + "x": 3.6049998, + "y": 6.9230003 + }, + "usableDistance": 1 + }, + { + "id": 7, + "room": "GapRoom", + "position": { + "x": 12.663, + "y": 5.922 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "MainHall", + "position": { + "x": 7.0210004, + "y": -3.7309995 + }, + "usableDistance": 1 + }, + { + "id": 6, + "room": "MainHall", + "position": { + "x": 9.814, + "y": 3.2060003 + }, + "usableDistance": 1 + }, + { + "id": 9, + "room": "Showers", + "position": { + "x": 23.9869, + "y": -1.386 + }, + "usableDistance": 1 + }, + { + "id": 10, + "room": "Records", + "position": { + "x": 23.279898, + "y": 8.259998 + }, + "usableDistance": 1 + }, + { + "id": 11, + "room": "CargoBay", + "position": { + "x": 30.440897, + "y": -3.5770001 + }, + "usableDistance": 1 + } + ] + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Airship/vents.json b/src/Impostor.Api/Innersloth/Data/maps/Airship/vents.json new file mode 100644 index 0000000..e7223cb --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Airship/vents.json @@ -0,0 +1,122 @@ +{ + "0": { + "name": "VaultVent", + "position": { + "x": -12.632198, + "y": 8.4735 + }, + "left": 1, + "center": null, + "right": null + }, + "1": { + "name": "CockpitVent", + "position": { + "x": -22.098999, + "y": -1.5120001 + }, + "left": 0, + "center": null, + "right": 2 + }, + "2": { + "name": "EjectionVent", + "position": { + "x": -15.658999, + "y": -11.6991005 + }, + "left": 1, + "center": null, + "right": null + }, + "3": { + "name": "EngineVent", + "position": { + "x": 0.20299996, + "y": -2.5361004 + }, + "left": 4, + "center": null, + "right": 5 + }, + "4": { + "name": "KitchenVent", + "position": { + "x": -2.6018999, + "y": -9.338 + }, + "left": 3, + "center": null, + "right": 5 + }, + "5": { + "name": "HallwayVent1", + "position": { + "x": 7.0210004, + "y": -3.7309995 + }, + "left": 3, + "center": null, + "right": 4 + }, + "6": { + "name": "HallwayVent2", + "position": { + "x": 9.814, + "y": 3.2060003 + }, + "left": 8, + "center": null, + "right": 7 + }, + "7": { + "name": "GaproomVent2", + "position": { + "x": 12.663, + "y": 5.922 + }, + "left": 8, + "center": null, + "right": 6 + }, + "8": { + "name": "GaproomVent1", + "position": { + "x": 3.6049998, + "y": 6.9230003 + }, + "left": 7, + "center": null, + "right": 6 + }, + "9": { + "name": "ShowersVent", + "position": { + "x": 23.9869, + "y": -1.386 + }, + "left": 10, + "center": null, + "right": 11 + }, + "10": { + "name": "RecordsVent", + "position": { + "x": 23.279898, + "y": 8.259998 + }, + "left": 9, + "center": null, + "right": 11 + }, + "11": { + "name": "StorageVent", + "position": { + "x": 30.440897, + "y": -3.5770001 + }, + "left": 9, + "center": null, + "right": 10 + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/April/doors.json b/src/Impostor.Api/Innersloth/Data/maps/April/doors.json new file mode 100644 index 0000000..5261988 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/April/doors.json @@ -0,0 +1,93 @@ +{ + "0": { + "room": "Cafeteria", + "position": { + "x": 6.3936, + "y": 1.33848 + } + }, + "1": { + "room": "Storage", + "position": { + "x": 5.268, + "y": -14.2884 + } + }, + "2": { + "room": "UpperEngine", + "position": { + "x": 16.930801, + "y": -2.1276002 + } + }, + "3": { + "room": "Cafeteria", + "position": { + "x": 0.708, + "y": -4.992 + } + }, + "4": { + "room": "LowerEngine", + "position": { + "x": 14.6808, + "y": -11.472 + } + }, + "5": { + "room": "UpperEngine", + "position": { + "x": 14.676002, + "y": 1.3406401 + } + }, + "6": { + "room": "Security", + "position": { + "x": 14.734801, + "y": -5.1417603 + } + }, + "7": { + "room": "Storage", + "position": { + "x": -1.1316001, + "y": -11.98128 + } + }, + "8": { + "room": "Cafeteria", + "position": { + "x": -5.1432004, + "y": 1.3355999 + } + }, + "9": { + "room": "Electrical", + "position": { + "x": 9.53616, + "y": -13.416001 + } + }, + "10": { + "room": "MedBay", + "position": { + "x": 9.1452, + "y": -0.4439999 + } + }, + "11": { + "room": "LowerEngine", + "position": { + "x": 16.930801, + "y": -8.9664 + } + }, + "12": { + "room": "Storage", + "position": { + "x": 0.70919997, + "y": -8.560801 + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/April/spawn.json b/src/Impostor.Api/Innersloth/Data/maps/April/spawn.json new file mode 100644 index 0000000..b2e69dd --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/April/spawn.json @@ -0,0 +1,15 @@ +{ + "initialSpawnCenter": { + "x": -0.72, + "y": 0.62 + }, + "meetingSpawnCenter": { + "x": -0.72, + "y": 0.62 + }, + "meetingSpawnCenter2": { + "x": 0, + "y": 0 + }, + "spawnRadius": 1.6 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/April/systems.json b/src/Impostor.Api/Innersloth/Data/maps/April/systems.json new file mode 100644 index 0000000..f3f98a4 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/April/systems.json @@ -0,0 +1,11 @@ +{ + "Electrical": "SwitchSystem", + "MedBay": "MedScanSystem", + "Doors": "AutoDoorsSystemType", + "Comms": "HudOverrideSystemType", + "Security": "SecurityCameraSystemType", + "Reactor": "ReactorSystemType", + "LifeSupp": "LifeSuppSystemType", + "Ventilation": "VentilationSystem", + "Sabotage": "SabotageSystemType" +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/April/tasks.json b/src/Impostor.Api/Innersloth/Data/maps/April/tasks.json new file mode 100644 index 0000000..2f63f98 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/April/tasks.json @@ -0,0 +1,480 @@ +{ + "0": { + "type": "NormalPlayerTask", + "taskType": "SwipeCard", + "length": "Common", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": -5.6352005, + "y": -8.632801 + }, + "usableDistance": 1 + } + ] + }, + "1": { + "type": "NormalPlayerTask", + "taskType": "FixWiring", + "length": "Common", + "consoles": [ + { + "id": 2, + "room": "Admin", + "position": { + "x": -1.392, + "y": -6.4092 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Cafeteria", + "position": { + "x": 5.2811995, + "y": 5.2464 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Nav", + "position": { + "x": -14.5199995, + "y": -3.7740002 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Electrical", + "position": { + "x": 7.7279997, + "y": -7.6668 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Storage", + "position": { + "x": 1.932, + "y": -8.7204 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Security", + "position": { + "x": 15.5592, + "y": -4.5923996 + }, + "usableDistance": 1 + } + ] + }, + "2": { + "type": "NormalPlayerTask", + "taskType": "ClearAsteroids", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Weapons", + "position": { + "x": -9.087601, + "y": 1.812 + }, + "usableDistance": 1.2 + } + ] + }, + "3": { + "type": "NormalPlayerTask", + "taskType": "AlignEngineOutput", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "LowerEngine", + "position": { + "x": 19.150799, + "y": -12.618 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "UpperEngine", + "position": { + "x": 19.176, + "y": -0.41442212 + }, + "usableDistance": 1 + } + ] + }, + "4": { + "type": "NormalPlayerTask", + "taskType": "SubmitScan", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "MedBay", + "position": { + "x": 7.3284, + "y": -5.2476006 + }, + "usableDistance": 1 + } + ] + }, + "5": { + "type": "NormalPlayerTask", + "taskType": "InspectSample", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "MedBay", + "position": { + "x": 6.144, + "y": -4.2599998 + }, + "usableDistance": 1 + } + ] + }, + "6": { + "type": "NormalPlayerTask", + "taskType": "FuelEngines", + "length": "Long", + "consoles": [] + }, + "7": { + "type": "NormalPlayerTask", + "taskType": "StartReactor", + "length": "Long", + "consoles": [ + { + "id": 2, + "room": "Reactor", + "position": { + "x": 21.792, + "y": -5.5728 + }, + "usableDistance": 1 + } + ] + }, + "8": { + "type": "NormalPlayerTask", + "taskType": "EmptyChute", + "length": "Long", + "consoles": [] + }, + "9": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Long", + "consoles": [] + }, + "10": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": -2.5079997, + "y": -6.2652006 + }, + "usableDistance": 1 + } + ] + }, + "11": { + "type": "NormalPlayerTask", + "taskType": "CalibrateDistributor", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 5.8644004, + "y": -7.4772 + }, + "usableDistance": 1 + } + ] + }, + "12": { + "type": "NormalPlayerTask", + "taskType": "ChartCourse", + "length": "Short", + "consoles": [] + }, + "13": { + "type": "NormalPlayerTask", + "taskType": "CleanO2Filter", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "LifeSupp", + "position": { + "x": -5.7432, + "y": -2.9772 + }, + "usableDistance": 0.8 + } + ] + }, + "14": { + "type": "NormalPlayerTask", + "taskType": "UnlockManifolds", + "length": "Short", + "consoles": [ + { + "id": 2, + "room": "Reactor", + "position": { + "x": 22.536001, + "y": -2.4996 + }, + "usableDistance": 1 + } + ] + }, + "15": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": -2.5079997, + "y": -6.2652006 + }, + "usableDistance": 1 + } + ] + }, + "16": { + "type": "NormalPlayerTask", + "taskType": "StabilizeSteering", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Nav", + "position": { + "x": -18.732, + "y": -4.728 + }, + "usableDistance": 1.25 + } + ] + }, + "17": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": -2.5079997, + "y": -6.2652006 + }, + "usableDistance": 1 + } + ] + }, + "18": { + "type": "NormalPlayerTask", + "taskType": "PrimeShields", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Shields", + "position": { + "x": -7.526399, + "y": -13.981199 + }, + "usableDistance": 1 + } + ] + }, + "19": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": -2.5079997, + "y": -6.2652006 + }, + "usableDistance": 1 + } + ] + }, + "20": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": -2.5079997, + "y": -6.2652006 + }, + "usableDistance": 1 + } + ] + }, + "21": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "22": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "23": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "24": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "25": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "26": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "27": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "28": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/April/vents.json b/src/Impostor.Api/Innersloth/Data/maps/April/vents.json new file mode 100644 index 0000000..93230ae --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/April/vents.json @@ -0,0 +1,142 @@ +{ + "0": { + "name": "AdminVent", + "position": { + "x": -2.544, + "y": -9.955201 + }, + "left": 2, + "center": null, + "right": 1 + }, + "1": { + "name": "BigYVent", + "position": { + "x": -9.384, + "y": -6.438 + }, + "left": 0, + "center": null, + "right": 2 + }, + "2": { + "name": "CafeVent", + "position": { + "x": -4.2588, + "y": -0.27600002 + }, + "left": 0, + "center": null, + "right": 1 + }, + "3": { + "name": "ElecVent", + "position": { + "x": 9.7764, + "y": -8.034 + }, + "left": 5, + "center": null, + "right": 6 + }, + "4": { + "name": "LEngineVent", + "position": { + "x": 15.288, + "y": 2.52 + }, + "left": 11, + "center": null, + "right": null + }, + "5": { + "name": "LifeSuppVent", + "position": { + "x": 12.534, + "y": -6.9492 + }, + "left": 6, + "center": null, + "right": 3 + }, + "6": { + "name": "MedVent", + "position": { + "x": 10.608001, + "y": -4.176 + }, + "left": 5, + "center": null, + "right": 3 + }, + "7": { + "name": "WeaponsVent", + "position": { + "x": -8.820001, + "y": 3.3240001 + }, + "left": null, + "center": null, + "right": 12 + }, + "8": { + "name": "ReactorVent", + "position": { + "x": 20.796001, + "y": -6.9528003 + }, + "left": 9, + "center": null, + "right": null + }, + "9": { + "name": "REngineVent", + "position": { + "x": 15.2508, + "y": -13.656001 + }, + "left": 8, + "center": null, + "right": null + }, + "10": { + "name": "ShieldsVent", + "position": { + "x": -9.5232, + "y": -14.337601 + }, + "left": 13, + "center": null, + "right": null + }, + "11": { + "name": "UpperReactorVent", + "position": { + "x": 21.876, + "y": -3.0516002 + }, + "left": 4, + "center": null, + "right": null + }, + "12": { + "name": "NavVentNorth", + "position": { + "x": -16.008001, + "y": -3.1680002 + }, + "left": null, + "center": null, + "right": 7 + }, + "13": { + "name": "NavVentSouth", + "position": { + "x": -16.008001, + "y": -6.3840003 + }, + "left": null, + "center": null, + "right": 10 + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Fungle/doors.json b/src/Impostor.Api/Innersloth/Data/maps/Fungle/doors.json new file mode 100644 index 0000000..412ca60 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Fungle/doors.json @@ -0,0 +1,58 @@ +{ + "0": { + "room": "Comms", + "position": { + "x": 24.067001, + "y": 11.974 + } + }, + "1": { + "room": "Comms", + "position": { + "x": 18.48, + "y": 13.298 + } + }, + "2": { + "room": "Kitchen", + "position": { + "x": -15.509, + "y": -5.913 + } + }, + "3": { + "room": "Laboratory", + "position": { + "x": -4.3, + "y": -7.759 + } + }, + "4": { + "room": "Lookout", + "position": { + "x": 11.063, + "y": 3.1330001 + } + }, + "5": { + "room": "MiningPit", + "position": { + "x": 12.733, + "y": 6.4160004 + } + }, + "6": { + "room": "Reactor", + "position": { + "x": 19.43, + "y": -6.59 + } + }, + "7": { + "room": "Storage", + "position": { + "x": -1.6159999, + "y": 4.6280003 + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Fungle/spawn.json b/src/Impostor.Api/Innersloth/Data/maps/Fungle/spawn.json new file mode 100644 index 0000000..ba009bf --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Fungle/spawn.json @@ -0,0 +1,15 @@ +{ + "initialSpawnCenter": { + "x": -9.81, + "y": 1 + }, + "meetingSpawnCenter": { + "x": -3, + "y": -2.1 + }, + "meetingSpawnCenter2": { + "x": 0, + "y": 0 + }, + "spawnRadius": 1.5 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Fungle/systems.json b/src/Impostor.Api/Innersloth/Data/maps/Fungle/systems.json new file mode 100644 index 0000000..51bc18c --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Fungle/systems.json @@ -0,0 +1,8 @@ +{ + "Ventilation": "VentilationSystem", + "Comms": "HqHudSystemType", + "Reactor": "ReactorSystemType", + "Doors": "DoorsSystemType", + "MushroomMixupSabotage": "MushroomMixupSabotageSystem", + "Sabotage": "SabotageSystemType" +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Fungle/tasks.json b/src/Impostor.Api/Innersloth/Data/maps/Fungle/tasks.json new file mode 100644 index 0000000..f9d97a4 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Fungle/tasks.json @@ -0,0 +1,520 @@ +{ + "0": { + "type": "NormalPlayerTask", + "taskType": "CollectSamples", + "length": "Common", + "consoles": [ + { + "id": 0, + "room": "Laboratory", + "position": { + "x": -6.373, + "y": -8.884999 + }, + "usableDistance": 1 + } + ] + }, + "1": { + "type": "NormalPlayerTask", + "taskType": "EnterIdCode", + "length": "Common", + "consoles": [ + { + "id": 1, + "room": "Lookout", + "position": { + "x": 8.446, + "y": 5.27 + }, + "usableDistance": 1 + } + ] + }, + "2": { + "type": "NormalPlayerTask", + "taskType": "ReplaceParts", + "length": "Common", + "consoles": [] + }, + "3": { + "type": "NormalPlayerTask", + "taskType": "RoastMarshmallow", + "length": "Common", + "consoles": [ + { + "id": 0, + "room": "Beach", + "position": { + "x": -9.788, + "y": 1.641 + }, + "usableDistance": 1.35 + }, + { + "id": 1, + "room": "Beach", + "position": { + "x": -18.372, + "y": -3.849 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Beach", + "position": { + "x": -20.07, + "y": 3.303 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Beach", + "position": { + "x": -11.333, + "y": 7.898 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Beach", + "position": { + "x": -9.309, + "y": -3.507 + }, + "usableDistance": 1 + } + ] + }, + "4": { + "type": "NormalPlayerTask", + "taskType": "CatchFish", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "FishingDock", + "position": { + "x": -24.359001, + "y": -6.8320003 + }, + "usableDistance": 1.28 + }, + { + "id": 1, + "room": "Kitchen", + "position": { + "x": -12.645, + "y": -9.364001 + }, + "usableDistance": 1 + } + ] + }, + "5": { + "type": "NormalPlayerTask", + "taskType": "CollectVegetables", + "length": "Long", + "consoles": [] + }, + "6": { + "type": "NormalPlayerTask", + "taskType": "ExtractFuel", + "length": "Long", + "consoles": [] + }, + "7": { + "type": "NormalPlayerTask", + "taskType": "HelpCritter", + "length": "Long", + "consoles": [] + }, + "8": { + "type": "NormalPlayerTask", + "taskType": "HoistSupplies", + "length": "Long", + "consoles": [] + }, + "9": { + "type": "NormalPlayerTask", + "taskType": "PolishGem", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "MiningPit", + "position": { + "x": 14.353, + "y": 10.241 + }, + "usableDistance": 1 + } + ] + }, + "10": { + "type": "NormalPlayerTask", + "taskType": "MineOres", + "length": "Long", + "consoles": [ + { + "id": 1, + "room": "MiningPit", + "position": { + "x": 11.076, + "y": 10.651 + }, + "usableDistance": 1 + } + ] + }, + "11": { + "type": "NormalPlayerTask", + "taskType": "ReplaceWaterJug", + "length": "Long", + "consoles": [] + }, + "12": { + "type": "NormalPlayerTask", + "taskType": "WaterPlants", + "length": "Long", + "consoles": [] + }, + "13": { + "type": "NormalPlayerTask", + "taskType": "AssembleArtifact", + "length": "Short", + "consoles": [ + { + "id": 1, + "room": "Laboratory", + "position": { + "x": -6.2650003, + "y": -9.592999 + }, + "usableDistance": 1 + } + ] + }, + "14": { + "type": "NormalPlayerTask", + "taskType": "BuildSandcastle", + "length": "Short", + "consoles": [ + { + "id": 1, + "room": "RecRoom", + "position": { + "x": -21.474998, + "y": 0.36600006 + }, + "usableDistance": 1 + } + ] + }, + "15": { + "type": "NormalPlayerTask", + "taskType": "CollectShells", + "length": "Short", + "consoles": [ + { + "id": 2, + "room": "RecRoom", + "position": { + "x": -20.28, + "y": -2.4299998 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Beach", + "position": { + "x": 3.16, + "y": 1.51 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Beach", + "position": { + "x": -7.95, + "y": -1.9399999 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Beach", + "position": { + "x": -3.178, + "y": 8.14 + }, + "usableDistance": 1 + } + ] + }, + "16": { + "type": "NormalPlayerTask", + "taskType": "CrankGenerator", + "length": "Short", + "consoles": [ + { + "id": 1, + "room": "Comms", + "position": { + "x": 20.751, + "y": 14.603 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Kitchen", + "position": { + "x": -12.999001, + "y": -6.3429995 + }, + "usableDistance": 1.25 + } + ] + }, + "17": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Short", + "consoles": [] + }, + "18": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Short", + "consoles": [] + }, + "19": { + "type": "NormalPlayerTask", + "taskType": "FixAntenna", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Comms", + "position": { + "x": 23.389, + "y": 14.826 + }, + "usableDistance": 1 + } + ] + }, + "20": { + "type": "NormalPlayerTask", + "taskType": "FixWiring", + "length": "Short", + "consoles": [ + { + "id": 4, + "room": "Comms", + "position": { + "x": 19.373001, + "y": 14.288 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Dropship", + "position": { + "x": -11.108, + "y": 13.398 + }, + "usableDistance": 1 + } + ] + }, + "21": { + "type": "NormalPlayerTask", + "taskType": "LiftWeights", + "length": "Short", + "consoles": [ + { + "id": 1, + "room": "RecRoom", + "position": { + "x": -19.151, + "y": 0.88100004 + }, + "usableDistance": 1 + } + ] + }, + "22": { + "type": "NormalPlayerTask", + "taskType": "MonitorMushroom", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Jungle", + "position": { + "x": 12.791, + "y": -15.567999 + }, + "usableDistance": 1 + } + ] + }, + "23": { + "type": "NormalPlayerTask", + "taskType": "PlayVideogame", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "SleepingQuarters", + "position": { + "x": 3.251, + "y": -1.0879999 + }, + "usableDistance": 1 + } + ] + }, + "24": { + "type": "NormalPlayerTask", + "taskType": "RecordTemperature", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Greenhouse", + "position": { + "x": 8.677, + "y": -11.279 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Laboratory", + "position": { + "x": -2.8840003, + "y": -7.8939996 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Reactor", + "position": { + "x": 23.401001, + "y": -6.928 + }, + "usableDistance": 1 + } + ] + }, + "25": { + "type": "NormalPlayerTask", + "taskType": "RecordTemperature", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Greenhouse", + "position": { + "x": 8.677, + "y": -11.279 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Laboratory", + "position": { + "x": -2.8840003, + "y": -7.8939996 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Reactor", + "position": { + "x": 23.401001, + "y": -6.928 + }, + "usableDistance": 1 + } + ] + }, + "26": { + "type": "NormalPlayerTask", + "taskType": "RecordTemperature", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Greenhouse", + "position": { + "x": 8.677, + "y": -11.279 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Laboratory", + "position": { + "x": -2.8840003, + "y": -7.8939996 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Reactor", + "position": { + "x": 23.401001, + "y": -6.928 + }, + "usableDistance": 1 + } + ] + }, + "27": { + "type": "NormalPlayerTask", + "taskType": "TestFrisbee", + "length": "Short", + "consoles": [ + { + "id": 1, + "room": "RecRoom", + "position": { + "x": -18.647, + "y": -0.88699996 + }, + "usableDistance": 1 + } + ] + }, + "28": { + "type": "NormalPlayerTask", + "taskType": "TuneRadio", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Comms", + "position": { + "x": 19.62, + "y": 12.764 + }, + "usableDistance": 1 + } + ] + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Fungle/vents.json b/src/Impostor.Api/Innersloth/Data/maps/Fungle/vents.json new file mode 100644 index 0000000..a3567b5 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Fungle/vents.json @@ -0,0 +1,102 @@ +{ + "0": { + "name": "CommunicationsVent", + "position": { + "x": 25.220001, + "y": 10.965 + }, + "left": 2, + "center": null, + "right": 5 + }, + "1": { + "name": "KitchenVent", + "position": { + "x": -15.359, + "y": -9.783001 + }, + "left": 6, + "center": null, + "right": null + }, + "2": { + "name": "LookoutVent", + "position": { + "x": 9.366, + "y": 0.63 + }, + "left": 0, + "center": null, + "right": 5 + }, + "3": { + "name": "StorageVent", + "position": { + "x": 2.864, + "y": 0.9180002 + }, + "left": 9, + "center": null, + "right": 4 + }, + "4": { + "name": "NorthWestJungleVent", + "position": { + "x": -2.518, + "y": -8.986 + }, + "left": 8, + "center": null, + "right": 3 + }, + "5": { + "name": "NorthEastJungleVent", + "position": { + "x": 22.677, + "y": -8.497 + }, + "left": 2, + "center": null, + "right": 0 + }, + "6": { + "name": "SouthWestJungleVent", + "position": { + "x": 1.3000002, + "y": -10.515 + }, + "left": 1, + "center": null, + "right": 7 + }, + "7": { + "name": "SouthEastJungleVent", + "position": { + "x": 15.150001, + "y": -16.42 + }, + "left": 6, + "center": null, + "right": null + }, + "8": { + "name": "RecRoomVent", + "position": { + "x": -16.9, + "y": -2.571 + }, + "left": 9, + "center": null, + "right": 4 + }, + "9": { + "name": "MeetingRoomVent", + "position": { + "x": -12.233, + "y": 8.061 + }, + "left": 8, + "center": null, + "right": 3 + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Mira/doors.json b/src/Impostor.Api/Innersloth/Data/maps/Mira/doors.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Mira/doors.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Mira/spawn.json b/src/Impostor.Api/Innersloth/Data/maps/Mira/spawn.json new file mode 100644 index 0000000..4fd6e36 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Mira/spawn.json @@ -0,0 +1,15 @@ +{ + "initialSpawnCenter": { + "x": -4.4, + "y": 2.2 + }, + "meetingSpawnCenter": { + "x": 24.043, + "y": 1.72 + }, + "meetingSpawnCenter2": { + "x": 0, + "y": 0 + }, + "spawnRadius": 1.55 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Mira/systems.json b/src/Impostor.Api/Innersloth/Data/maps/Mira/systems.json new file mode 100644 index 0000000..e5aefe9 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Mira/systems.json @@ -0,0 +1,9 @@ +{ + "Electrical": "SwitchSystem", + "MedBay": "MedScanSystem", + "Comms": "HqHudSystemType", + "Reactor": "ReactorSystemType", + "LifeSupp": "LifeSuppSystemType", + "Ventilation": "VentilationSystem", + "Sabotage": "SabotageSystemType" +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Mira/tasks.json b/src/Impostor.Api/Innersloth/Data/maps/Mira/tasks.json new file mode 100644 index 0000000..26249c9 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Mira/tasks.json @@ -0,0 +1,520 @@ +{ + "0": { + "type": "NormalPlayerTask", + "taskType": "FixWiring", + "length": "Common", + "consoles": [ + { + "id": 0, + "room": "Storage", + "position": { + "x": 18.39, + "y": 1.2 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Hallway", + "position": { + "x": 12.096, + "y": 8.04 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Laboratory", + "position": { + "x": 6.125, + "y": 14.958 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "LockerRoom", + "position": { + "x": 4.3559995, + "y": 2.5340002 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Greenhouse", + "position": { + "x": 16.980001, + "y": 21.394 + }, + "usableDistance": 1 + } + ] + }, + "1": { + "type": "NormalPlayerTask", + "taskType": "EnterIdCode", + "length": "Common", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": 19.894001, + "y": 19.024 + }, + "usableDistance": 1 + } + ] + }, + "2": { + "type": "NormalPlayerTask", + "taskType": "SubmitScan", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "MedBay", + "position": { + "x": 16.233, + "y": 0.262 + }, + "usableDistance": 1 + } + ] + }, + "3": { + "type": "NormalPlayerTask", + "taskType": "ClearAsteroids", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Weapons", + "position": { + "x": 19.213, + "y": -2.414 + }, + "usableDistance": 1.8 + } + ] + }, + "4": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Reactor", + "position": { + "x": 0.77700007, + "y": 11.484 + }, + "usableDistance": 1 + } + ] + }, + "5": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Reactor", + "position": { + "x": 0.77700007, + "y": 11.484 + }, + "usableDistance": 1 + } + ] + }, + "6": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Reactor", + "position": { + "x": 0.77700007, + "y": 11.484 + }, + "usableDistance": 1 + } + ] + }, + "7": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Reactor", + "position": { + "x": 0.77700007, + "y": 11.484 + }, + "usableDistance": 1 + } + ] + }, + "8": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Reactor", + "position": { + "x": 0.77700007, + "y": 11.484 + }, + "usableDistance": 1 + } + ] + }, + "9": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Reactor", + "position": { + "x": 0.77700007, + "y": 11.484 + }, + "usableDistance": 1 + } + ] + }, + "10": { + "type": "NormalPlayerTask", + "taskType": "WaterPlants", + "length": "Long", + "consoles": [] + }, + "11": { + "type": "NormalPlayerTask", + "taskType": "StartReactor", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Reactor", + "position": { + "x": 2.549, + "y": 12.407001 + }, + "usableDistance": 1 + } + ] + }, + "12": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Reactor", + "position": { + "x": 0.77700007, + "y": 11.484 + }, + "usableDistance": 1 + } + ] + }, + "13": { + "type": "NormalPlayerTask", + "taskType": "ChartCourse", + "length": "Short", + "consoles": [] + }, + "14": { + "type": "NormalPlayerTask", + "taskType": "CleanO2Filter", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Greenhouse", + "position": { + "x": 17.221, + "y": 24.505001 + }, + "usableDistance": 2 + } + ] + }, + "15": { + "type": "NormalPlayerTask", + "taskType": "FuelEngines", + "length": "Short", + "consoles": [] + }, + "16": { + "type": "NormalPlayerTask", + "taskType": "AssembleArtifact", + "length": "Short", + "consoles": [ + { + "id": 1, + "room": "Laboratory", + "position": { + "x": 9.402, + "y": 14.568001 + }, + "usableDistance": 1 + } + ] + }, + "17": { + "type": "NormalPlayerTask", + "taskType": "SortSamples", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Laboratory", + "position": { + "x": 9.660001, + "y": 11.115001 + }, + "usableDistance": 1 + } + ] + }, + "18": { + "type": "NormalPlayerTask", + "taskType": "PrimeShields", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": 21.169, + "y": 17.945 + }, + "usableDistance": 1 + } + ] + }, + "19": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Short", + "consoles": [] + }, + "20": { + "type": "NormalPlayerTask", + "taskType": "MeasureWeather", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Balcony", + "position": { + "x": 28.911999, + "y": -1.701 + }, + "usableDistance": 1 + } + ] + }, + "21": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Reactor", + "position": { + "x": 0.77700007, + "y": 11.484 + }, + "usableDistance": 1 + } + ] + }, + "22": { + "type": "NormalPlayerTask", + "taskType": "BuyBeverage", + "length": "Short", + "consoles": [ + { + "id": 2, + "room": "Cafeteria", + "position": { + "x": 27.49, + "y": 5.665 + }, + "usableDistance": 1 + } + ] + }, + "23": { + "type": "NormalPlayerTask", + "taskType": "ProcessData", + "length": "Short", + "consoles": [ + { + "id": 2, + "room": "Office", + "position": { + "x": 15.776001, + "y": 21.403 + }, + "usableDistance": 1 + } + ] + }, + "24": { + "type": "NormalPlayerTask", + "taskType": "RunDiagnostics", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Launchpad", + "position": { + "x": -2.499, + "y": 1.8730001 + }, + "usableDistance": 1.5 + } + ] + }, + "25": { + "type": "NormalPlayerTask", + "taskType": "UnlockManifolds", + "length": "Short", + "consoles": [ + { + "id": 2, + "room": "Reactor", + "position": { + "x": 0.44200015, + "y": 13.2560005 + }, + "usableDistance": 1 + } + ] + }, + "26": { + "type": "NormalPlayerTask", + "taskType": "VentCleaning", + "length": "Short", + "consoles": [ + { + "id": 11, + "room": "Launchpad", + "position": { + "x": -6.1800003, + "y": 3.5600002 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Balcony", + "position": { + "x": 23.769999, + "y": -1.9399999 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Hallway", + "position": { + "x": 23.9, + "y": 7.1800003 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Reactor", + "position": { + "x": 0.48000014, + "y": 10.6970005 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Laboratory", + "position": { + "x": 11.606001, + "y": 13.816 + }, + "usableDistance": 1 + }, + { + "id": 10, + "room": "LockerRoom", + "position": { + "x": 4.29, + "y": 0.52999973 + }, + "usableDistance": 1 + }, + { + "id": 6, + "room": "Admin", + "position": { + "x": 22.390001, + "y": 17.23 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Office", + "position": { + "x": 13.280001, + "y": 20.13 + }, + "usableDistance": 1 + }, + { + "id": 7, + "room": "Greenhouse", + "position": { + "x": 17.85, + "y": 25.23 + }, + "usableDistance": 1 + }, + { + "id": 8, + "room": "MedBay", + "position": { + "x": 15.41, + "y": -1.8199997 + }, + "usableDistance": 1 + }, + { + "id": 9, + "room": "Decontamination", + "position": { + "x": 6.83, + "y": 3.145 + }, + "usableDistance": 1 + } + ] + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Mira/vents.json b/src/Impostor.Api/Innersloth/Data/maps/Mira/vents.json new file mode 100644 index 0000000..a9b1b5a --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Mira/vents.json @@ -0,0 +1,112 @@ +{ + "1": { + "name": "BalconyVent", + "position": { + "x": 23.769999, + "y": -1.9399999 + }, + "left": 8, + "center": null, + "right": 2 + }, + "2": { + "name": "YHallRightVent", + "position": { + "x": 23.9, + "y": 7.1800003 + }, + "left": 6, + "center": null, + "right": 1 + }, + "3": { + "name": "ReactorVent", + "position": { + "x": 0.48000014, + "y": 10.6970005 + }, + "left": 4, + "center": 9, + "right": 11 + }, + "4": { + "name": "LabVent", + "position": { + "x": 11.606001, + "y": 13.816 + }, + "left": 3, + "center": 9, + "right": 5 + }, + "5": { + "name": "OfficeVent", + "position": { + "x": 13.280001, + "y": 20.13 + }, + "left": 4, + "center": 6, + "right": 7 + }, + "6": { + "name": "AdminVent", + "position": { + "x": 22.390001, + "y": 17.23 + }, + "left": 7, + "center": 2, + "right": 5 + }, + "7": { + "name": "AgriVent", + "position": { + "x": 17.85, + "y": 25.23 + }, + "left": 6, + "center": null, + "right": 5 + }, + "8": { + "name": "MedVent", + "position": { + "x": 15.41, + "y": -1.8199997 + }, + "left": 1, + "center": null, + "right": 10 + }, + "9": { + "name": "DeconVent", + "position": { + "x": 6.83, + "y": 3.145 + }, + "left": 3, + "center": 10, + "right": 4 + }, + "10": { + "name": "LockerVent", + "position": { + "x": 4.29, + "y": 0.52999973 + }, + "left": 8, + "center": 11, + "right": 9 + }, + "11": { + "name": "LaunchVent", + "position": { + "x": -6.1800003, + "y": 3.5600002 + }, + "left": 3, + "center": null, + "right": 10 + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Polus/doors.json b/src/Impostor.Api/Innersloth/Data/maps/Polus/doors.json new file mode 100644 index 0000000..7926b71 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Polus/doors.json @@ -0,0 +1,114 @@ +{ + "0": { + "room": "Electrical", + "position": { + "x": 11.255, + "y": -9.4473 + } + }, + "1": { + "room": "Electrical", + "position": { + "x": 7.4827003, + "y": -10.922001 + } + }, + "2": { + "room": "Electrical", + "position": { + "x": 5.4228, + "y": -13.496 + } + }, + "3": { + "room": "LifeSupp", + "position": { + "x": 5.492, + "y": -18.301 + } + }, + "4": { + "room": "LifeSupp", + "position": { + "x": 5.9068003, + "y": -22.348 + } + }, + "5": { + "room": "Weapons", + "position": { + "x": 13.0322, + "y": -20.701 + } + }, + "6": { + "room": "Comms", + "position": { + "x": 10.8987, + "y": -19.159 + } + }, + "7": { + "room": "Office", + "position": { + "x": 28.757002, + "y": -17.0636 + } + }, + "8": { + "room": "Office", + "position": { + "x": 17.417002, + "y": -21.7231 + } + }, + "9": { + "room": "Laboratory", + "position": { + "x": 26.608002, + "y": -8.808 + } + }, + "10": { + "room": "Laboratory", + "position": { + "x": 24.780003, + "y": -9.5651 + } + }, + "11": { + "room": "Storage", + "position": { + "x": 17.293001, + "y": -10.882 + } + }, + "12": { + "room": "Decontamination", + "position": { + "x": 25.512001, + "y": -24.559002 + } + }, + "13": { + "room": "Decontamination", + "position": { + "x": 23.897001, + "y": -23.512001 + } + }, + "14": { + "room": "Decontamination", + "position": { + "x": 37.992004, + "y": -9.6214 + } + }, + "15": { + "room": "Decontamination", + "position": { + "x": 39.067, + "y": -11.361 + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Polus/spawn.json b/src/Impostor.Api/Innersloth/Data/maps/Polus/spawn.json new file mode 100644 index 0000000..65803be --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Polus/spawn.json @@ -0,0 +1,15 @@ +{ + "initialSpawnCenter": { + "x": 16.64, + "y": -2.46 + }, + "meetingSpawnCenter": { + "x": 17.4, + "y": -16.286 + }, + "meetingSpawnCenter2": { + "x": 17.4, + "y": -17.515 + }, + "spawnRadius": 1 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Polus/systems.json b/src/Impostor.Api/Innersloth/Data/maps/Polus/systems.json new file mode 100644 index 0000000..91d230f --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Polus/systems.json @@ -0,0 +1,10 @@ +{ + "Electrical": "SwitchSystem", + "MedBay": "MedScanSystem", + "Doors": "DoorsSystemType", + "Comms": "HudOverrideSystemType", + "Security": "SecurityCameraSystemType", + "Ventilation": "VentilationSystem", + "Laboratory": "ReactorSystemType", + "Sabotage": "SabotageSystemType" +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Polus/tasks.json b/src/Impostor.Api/Innersloth/Data/maps/Polus/tasks.json new file mode 100644 index 0000000..ffa7f41 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Polus/tasks.json @@ -0,0 +1,851 @@ +{ + "0": { + "type": "NormalPlayerTask", + "taskType": "SwipeCard", + "length": "Common", + "consoles": [ + { + "id": 0, + "room": "Office", + "position": { + "x": 24.816444, + "y": -16.217522 + }, + "usableDistance": 1 + } + ] + }, + "1": { + "type": "NormalPlayerTask", + "taskType": "InsertKeys", + "length": "Common", + "consoles": [ + { + "id": 2, + "room": "Dropship", + "position": { + "x": 17.38076, + "y": 0.08402014 + }, + "usableDistance": 1 + } + ] + }, + "2": { + "type": "NormalPlayerTask", + "taskType": "ScanBoardingPass", + "length": "Common", + "consoles": [ + { + "id": 0, + "room": "Office", + "position": { + "x": 25.75001, + "y": -16.03081 + }, + "usableDistance": 1 + } + ] + }, + "3": { + "type": "NormalPlayerTask", + "taskType": "FixWiring", + "length": "Common", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": 3.0672798, + "y": -8.691476 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "LifeSupp", + "position": { + "x": 6.499, + "y": -18.458 + }, + "usableDistance": 0.77 + }, + { + "id": 2, + "room": "Office", + "position": { + "x": 16.373749, + "y": -18.505589 + }, + "usableDistance": 0.8 + }, + { + "id": 3, + "room": "Decontamination", + "position": { + "x": 40.61, + "y": -8.96 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Laboratory", + "position": { + "x": 37.321003, + "y": -8.944 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Laboratory", + "position": { + "x": 32.975002, + "y": -9.031365 + }, + "usableDistance": 1 + } + ] + }, + "4": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Comms", + "position": { + "x": 11.71978, + "y": -15.145192 + }, + "usableDistance": 1 + } + ] + }, + "5": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Comms", + "position": { + "x": 11.71978, + "y": -15.145192 + }, + "usableDistance": 1 + } + ] + }, + "6": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Comms", + "position": { + "x": 11.71978, + "y": -15.145192 + }, + "usableDistance": 1 + } + ] + }, + "7": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Comms", + "position": { + "x": 11.71978, + "y": -15.145192 + }, + "usableDistance": 1 + } + ] + }, + "8": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Comms", + "position": { + "x": 11.71978, + "y": -15.145192 + }, + "usableDistance": 1 + } + ] + }, + "9": { + "type": "NormalPlayerTask", + "taskType": "StartReactor", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Specimens", + "position": { + "x": 34.757774, + "y": -18.878536 + }, + "usableDistance": 1 + } + ] + }, + "10": { + "type": "NormalPlayerTask", + "taskType": "FuelEngines", + "length": "Long", + "consoles": [] + }, + "11": { + "type": "WaterWayTask", + "taskType": "OpenWaterways", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "BoilerRoom", + "position": { + "x": 3.669, + "y": -24.15 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "BoilerRoom", + "position": { + "x": 0.9430001, + "y": -24.15 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "BoilerRoom", + "position": { + "x": 18.417002, + "y": -23.72 + }, + "usableDistance": 1 + } + ] + }, + "12": { + "type": "NormalPlayerTask", + "taskType": "InspectSample", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Hallway", + "position": { + "x": 36.52848, + "y": -5.5693474 + }, + "usableDistance": 1 + } + ] + }, + "13": { + "type": "NormalPlayerTask", + "taskType": "ReplaceWaterJug", + "length": "Long", + "consoles": [] + }, + "14": { + "type": "WeatherNodeTask", + "taskType": "FixWeatherNode", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Hallway", + "position": { + "x": 23.04, + "y": -6.94 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Hallway", + "position": { + "x": 8.37, + "y": -15.46 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Hallway", + "position": { + "x": 7.16, + "y": -25.36 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Hallway", + "position": { + "x": 14.96, + "y": -25.44 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Hallway", + "position": { + "x": 14.48, + "y": -12.17 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Hallway", + "position": { + "x": 30.86, + "y": -12.23 + }, + "usableDistance": 1 + } + ] + }, + "15": { + "type": "WeatherNodeTask", + "taskType": "FixWeatherNode", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Hallway", + "position": { + "x": 23.04, + "y": -6.94 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Hallway", + "position": { + "x": 8.37, + "y": -15.46 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Hallway", + "position": { + "x": 7.16, + "y": -25.36 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Hallway", + "position": { + "x": 14.96, + "y": -25.44 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Hallway", + "position": { + "x": 14.48, + "y": -12.17 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Hallway", + "position": { + "x": 30.86, + "y": -12.23 + }, + "usableDistance": 1 + } + ] + }, + "16": { + "type": "WeatherNodeTask", + "taskType": "FixWeatherNode", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Hallway", + "position": { + "x": 23.04, + "y": -6.94 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Hallway", + "position": { + "x": 8.37, + "y": -15.46 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Hallway", + "position": { + "x": 7.16, + "y": -25.36 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Hallway", + "position": { + "x": 14.96, + "y": -25.44 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Hallway", + "position": { + "x": 14.48, + "y": -12.17 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Hallway", + "position": { + "x": 30.86, + "y": -12.23 + }, + "usableDistance": 1 + } + ] + }, + "17": { + "type": "WeatherNodeTask", + "taskType": "FixWeatherNode", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Hallway", + "position": { + "x": 23.04, + "y": -6.94 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Hallway", + "position": { + "x": 8.37, + "y": -15.46 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Hallway", + "position": { + "x": 7.16, + "y": -25.36 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Hallway", + "position": { + "x": 14.96, + "y": -25.44 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Hallway", + "position": { + "x": 14.48, + "y": -12.17 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Hallway", + "position": { + "x": 30.86, + "y": -12.23 + }, + "usableDistance": 1 + } + ] + }, + "18": { + "type": "NormalPlayerTask", + "taskType": "RebootWifi", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Comms", + "position": { + "x": 11.047999, + "y": -15.297912 + }, + "usableDistance": 1 + } + ] + }, + "19": { + "type": "NormalPlayerTask", + "taskType": "MonitorOxygen", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Hallway", + "position": { + "x": 1.654, + "y": -16.012001 + }, + "usableDistance": 1 + } + ] + }, + "20": { + "type": "NormalPlayerTask", + "taskType": "UnlockManifolds", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Specimens", + "position": { + "x": 34.381306, + "y": -19.486675 + }, + "usableDistance": 1 + } + ] + }, + "21": { + "type": "NormalPlayerTask", + "taskType": "StoreArtifacts", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Specimens", + "position": { + "x": 36.481117, + "y": -18.82867 + }, + "usableDistance": 1 + } + ] + }, + "22": { + "type": "NormalPlayerTask", + "taskType": "FillCanisters", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "LifeSupp", + "position": { + "x": 1.1431961, + "y": -19.525873 + }, + "usableDistance": 0.6 + } + ] + }, + "23": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Short", + "consoles": [] + }, + "24": { + "type": "NormalPlayerTask", + "taskType": "ChartCourse", + "length": "Short", + "consoles": [ + { + "id": 2, + "room": "Dropship", + "position": { + "x": 15.974811, + "y": 0.08402014 + }, + "usableDistance": 1 + } + ] + }, + "25": { + "type": "NormalPlayerTask", + "taskType": "SubmitScan", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "MedBay", + "position": { + "x": 40.327003, + "y": -7.082 + }, + "usableDistance": 1 + } + ] + }, + "26": { + "type": "NormalPlayerTask", + "taskType": "ClearAsteroids", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Weapons", + "position": { + "x": 9.929073, + "y": -22.390993 + }, + "usableDistance": 1 + } + ] + }, + "27": { + "type": "WeatherNodeTask", + "taskType": "FixWeatherNode", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Hallway", + "position": { + "x": 23.04, + "y": -6.94 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Hallway", + "position": { + "x": 8.37, + "y": -15.46 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Hallway", + "position": { + "x": 7.16, + "y": -25.36 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Hallway", + "position": { + "x": 14.96, + "y": -25.44 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Hallway", + "position": { + "x": 14.48, + "y": -12.17 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Hallway", + "position": { + "x": 30.86, + "y": -12.23 + }, + "usableDistance": 1 + } + ] + }, + "28": { + "type": "WeatherNodeTask", + "taskType": "FixWeatherNode", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Hallway", + "position": { + "x": 23.04, + "y": -6.94 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Hallway", + "position": { + "x": 8.37, + "y": -15.46 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Hallway", + "position": { + "x": 7.16, + "y": -25.36 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Hallway", + "position": { + "x": 14.96, + "y": -25.44 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Hallway", + "position": { + "x": 14.48, + "y": -12.17 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Hallway", + "position": { + "x": 30.86, + "y": -12.23 + }, + "usableDistance": 1 + } + ] + }, + "29": { + "type": "NormalPlayerTask", + "taskType": "AlignTelescope", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Laboratory", + "position": { + "x": 33.868427, + "y": -5.4712653 + }, + "usableDistance": 1 + } + ] + }, + "30": { + "type": "NormalPlayerTask", + "taskType": "RepairDrill", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Laboratory", + "position": { + "x": 27.42095, + "y": -6.982279 + }, + "usableDistance": 1 + } + ] + }, + "31": { + "type": "NormalPlayerTask", + "taskType": "RecordTemperature", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Laboratory", + "position": { + "x": 31.34464, + "y": -6.67142 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Outside", + "position": { + "x": 30.93255, + "y": -15.324791 + }, + "usableDistance": 1 + } + ] + }, + "32": { + "type": "NormalPlayerTask", + "taskType": "RecordTemperature", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Laboratory", + "position": { + "x": 31.34464, + "y": -6.67142 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Outside", + "position": { + "x": 30.93255, + "y": -15.324791 + }, + "usableDistance": 1 + } + ] + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Polus/vents.json b/src/Impostor.Api/Innersloth/Data/maps/Polus/vents.json new file mode 100644 index 0000000..3b0839c --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Polus/vents.json @@ -0,0 +1,122 @@ +{ + "0": { + "name": "ElectricalVent", + "position": { + "x": 1.9289999, + "y": -9.558001 + }, + "left": 2, + "center": null, + "right": 1 + }, + "1": { + "name": "ElecFenceVent", + "position": { + "x": 6.9, + "y": -14.41 + }, + "left": 2, + "center": null, + "right": 0 + }, + "2": { + "name": "LifeSuppVent", + "position": { + "x": 3.51, + "y": -16.58 + }, + "left": 1, + "center": null, + "right": 0 + }, + "3": { + "name": "CommsVent", + "position": { + "x": 12.304, + "y": -18.897999 + }, + "left": 8, + "center": null, + "right": 4 + }, + "4": { + "name": "OfficeVent", + "position": { + "x": 16.379, + "y": -19.599 + }, + "left": 3, + "center": null, + "right": 8 + }, + "5": { + "name": "AdminVent", + "position": { + "x": 20.089003, + "y": -25.517 + }, + "left": 11, + "center": null, + "right": 7 + }, + "6": { + "name": "BathroomVent", + "position": { + "x": 32.963, + "y": -9.526 + }, + "left": null, + "center": null, + "right": 7 + }, + "7": { + "name": "SubBathroomVent", + "position": { + "x": 30.907003, + "y": -11.860001 + }, + "left": 6, + "center": null, + "right": 5 + }, + "8": { + "name": "StorageVent", + "position": { + "x": 22, + "y": -12.190001 + }, + "left": 3, + "center": null, + "right": 4 + }, + "9": { + "name": "ScienceBuildingVent", + "position": { + "x": 23.72, + "y": -7.82 + }, + "left": 10, + "center": null, + "right": null + }, + "10": { + "name": "ElectricBuildingVent", + "position": { + "x": 9.64, + "y": -7.72 + }, + "left": 9, + "center": null, + "right": null + }, + "11": { + "name": "SouthVent", + "position": { + "x": 18.93, + "y": -24.85 + }, + "left": null, + "center": null, + "right": 5 + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Skeld/doors.json b/src/Impostor.Api/Innersloth/Data/maps/Skeld/doors.json new file mode 100644 index 0000000..39ea239 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Skeld/doors.json @@ -0,0 +1,93 @@ +{ + "0": { + "room": "Cafeteria", + "position": { + "x": -6.3936, + "y": 1.33848 + } + }, + "1": { + "room": "Storage", + "position": { + "x": -5.268, + "y": -14.2884 + } + }, + "2": { + "room": "UpperEngine", + "position": { + "x": -16.930801, + "y": -2.1276002 + } + }, + "3": { + "room": "Cafeteria", + "position": { + "x": -0.708, + "y": -4.992 + } + }, + "4": { + "room": "LowerEngine", + "position": { + "x": -14.6808, + "y": -11.472 + } + }, + "5": { + "room": "UpperEngine", + "position": { + "x": -14.676002, + "y": 1.3406401 + } + }, + "6": { + "room": "Security", + "position": { + "x": -14.734801, + "y": -5.1417603 + } + }, + "7": { + "room": "Storage", + "position": { + "x": 1.1316001, + "y": -11.98128 + } + }, + "8": { + "room": "Cafeteria", + "position": { + "x": 5.1432004, + "y": 1.3355999 + } + }, + "9": { + "room": "Electrical", + "position": { + "x": -9.53616, + "y": -13.416001 + } + }, + "10": { + "room": "MedBay", + "position": { + "x": -9.1452, + "y": -0.4439999 + } + }, + "11": { + "room": "LowerEngine", + "position": { + "x": -16.930801, + "y": -8.9664 + } + }, + "12": { + "room": "Storage", + "position": { + "x": -0.70919997, + "y": -8.560801 + } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Skeld/spawn.json b/src/Impostor.Api/Innersloth/Data/maps/Skeld/spawn.json new file mode 100644 index 0000000..b2e69dd --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Skeld/spawn.json @@ -0,0 +1,15 @@ +{ + "initialSpawnCenter": { + "x": -0.72, + "y": 0.62 + }, + "meetingSpawnCenter": { + "x": -0.72, + "y": 0.62 + }, + "meetingSpawnCenter2": { + "x": 0, + "y": 0 + }, + "spawnRadius": 1.6 +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Skeld/systems.json b/src/Impostor.Api/Innersloth/Data/maps/Skeld/systems.json new file mode 100644 index 0000000..f3f98a4 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Skeld/systems.json @@ -0,0 +1,11 @@ +{ + "Electrical": "SwitchSystem", + "MedBay": "MedScanSystem", + "Doors": "AutoDoorsSystemType", + "Comms": "HudOverrideSystemType", + "Security": "SecurityCameraSystemType", + "Reactor": "ReactorSystemType", + "LifeSupp": "LifeSuppSystemType", + "Ventilation": "VentilationSystem", + "Sabotage": "SabotageSystemType" +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Skeld/tasks.json b/src/Impostor.Api/Innersloth/Data/maps/Skeld/tasks.json new file mode 100644 index 0000000..104f891 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Skeld/tasks.json @@ -0,0 +1,613 @@ +{ + "0": { + "type": "NormalPlayerTask", + "taskType": "SwipeCard", + "length": "Common", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": 5.6352005, + "y": -8.632801 + }, + "usableDistance": 1 + } + ] + }, + "1": { + "type": "NormalPlayerTask", + "taskType": "FixWiring", + "length": "Common", + "consoles": [ + { + "id": 2, + "room": "Admin", + "position": { + "x": 1.392, + "y": -6.4092 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "Cafeteria", + "position": { + "x": -5.2811995, + "y": 5.2464 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Nav", + "position": { + "x": 14.5199995, + "y": -3.7740002 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "Electrical", + "position": { + "x": -7.7279997, + "y": -7.6668 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Storage", + "position": { + "x": -1.932, + "y": -8.7204 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Security", + "position": { + "x": -15.5592, + "y": -4.5923996 + }, + "usableDistance": 1 + } + ] + }, + "2": { + "type": "NormalPlayerTask", + "taskType": "ClearAsteroids", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "Weapons", + "position": { + "x": 9.087601, + "y": 1.812 + }, + "usableDistance": 1.2 + } + ] + }, + "3": { + "type": "NormalPlayerTask", + "taskType": "AlignEngineOutput", + "length": "Long", + "consoles": [ + { + "id": 1, + "room": "LowerEngine", + "position": { + "x": -19.150799, + "y": -12.618 + }, + "usableDistance": 1 + }, + { + "id": 0, + "room": "UpperEngine", + "position": { + "x": -19.176, + "y": -0.41442212 + }, + "usableDistance": 1 + } + ] + }, + "4": { + "type": "NormalPlayerTask", + "taskType": "SubmitScan", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "MedBay", + "position": { + "x": -7.3284, + "y": -5.2476006 + }, + "usableDistance": 1 + } + ] + }, + "5": { + "type": "NormalPlayerTask", + "taskType": "InspectSample", + "length": "Long", + "consoles": [ + { + "id": 0, + "room": "MedBay", + "position": { + "x": -6.144, + "y": -4.2599998 + }, + "usableDistance": 1 + } + ] + }, + "6": { + "type": "NormalPlayerTask", + "taskType": "FuelEngines", + "length": "Long", + "consoles": [] + }, + "7": { + "type": "NormalPlayerTask", + "taskType": "StartReactor", + "length": "Long", + "consoles": [ + { + "id": 2, + "room": "Reactor", + "position": { + "x": -21.792, + "y": -5.5728 + }, + "usableDistance": 1 + } + ] + }, + "8": { + "type": "NormalPlayerTask", + "taskType": "EmptyChute", + "length": "Long", + "consoles": [] + }, + "9": { + "type": "NormalPlayerTask", + "taskType": "EmptyGarbage", + "length": "Long", + "consoles": [] + }, + "10": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": 2.5079997, + "y": -6.2652006 + }, + "usableDistance": 1 + } + ] + }, + "11": { + "type": "NormalPlayerTask", + "taskType": "CalibrateDistributor", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": -5.8644004, + "y": -7.4772 + }, + "usableDistance": 1 + } + ] + }, + "12": { + "type": "NormalPlayerTask", + "taskType": "ChartCourse", + "length": "Short", + "consoles": [] + }, + "13": { + "type": "NormalPlayerTask", + "taskType": "CleanO2Filter", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "LifeSupp", + "position": { + "x": 5.7432, + "y": -2.9772 + }, + "usableDistance": 0.8 + } + ] + }, + "14": { + "type": "NormalPlayerTask", + "taskType": "UnlockManifolds", + "length": "Short", + "consoles": [ + { + "id": 2, + "room": "Reactor", + "position": { + "x": -22.536001, + "y": -2.4996 + }, + "usableDistance": 1 + } + ] + }, + "15": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": 2.5079997, + "y": -6.2652006 + }, + "usableDistance": 1 + } + ] + }, + "16": { + "type": "NormalPlayerTask", + "taskType": "StabilizeSteering", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Nav", + "position": { + "x": 18.732, + "y": -4.728 + }, + "usableDistance": 1.25 + } + ] + }, + "17": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": 2.5079997, + "y": -6.2652006 + }, + "usableDistance": 1 + } + ] + }, + "18": { + "type": "NormalPlayerTask", + "taskType": "PrimeShields", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Shields", + "position": { + "x": 7.526399, + "y": -13.981199 + }, + "usableDistance": 1 + } + ] + }, + "19": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": 2.5079997, + "y": -6.2652006 + }, + "usableDistance": 1 + } + ] + }, + "20": { + "type": "UploadDataTask", + "taskType": "UploadData", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": 2.5079997, + "y": -6.2652006 + }, + "usableDistance": 1 + } + ] + }, + "21": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": -9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "22": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": -9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "23": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": -9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "24": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": -9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "25": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": -9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "26": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": -9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "27": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": -9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "28": { + "type": "DivertPowerTask", + "taskType": "DivertPower", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Electrical", + "position": { + "x": -9, + "y": -7.2936006 + }, + "usableDistance": 1 + } + ] + }, + "29": { + "type": "NormalPlayerTask", + "taskType": "VentCleaning", + "length": "Short", + "consoles": [ + { + "id": 0, + "room": "Admin", + "position": { + "x": 2.544, + "y": -9.955201 + }, + "usableDistance": 1 + }, + { + "id": 2, + "room": "Cafeteria", + "position": { + "x": 4.2588, + "y": -0.27600002 + }, + "usableDistance": 1 + }, + { + "id": 13, + "room": "Nav", + "position": { + "x": 16.008001, + "y": -6.3840003 + }, + "usableDistance": 1 + }, + { + "id": 12, + "room": "Nav", + "position": { + "x": 16.008001, + "y": -3.1680002 + }, + "usableDistance": 1 + }, + { + "id": 7, + "room": "Weapons", + "position": { + "x": 8.820001, + "y": 3.3240001 + }, + "usableDistance": 1 + }, + { + "id": 10, + "room": "Shields", + "position": { + "x": 9.5232, + "y": -14.337601 + }, + "usableDistance": 1 + }, + { + "id": 1, + "room": "Hallway", + "position": { + "x": 9.384, + "y": -6.438 + }, + "usableDistance": 1 + }, + { + "id": 3, + "room": "Electrical", + "position": { + "x": -9.7764, + "y": -8.034 + }, + "usableDistance": 1 + }, + { + "id": 8, + "room": "Reactor", + "position": { + "x": -20.796001, + "y": -6.9528003 + }, + "usableDistance": 1 + }, + { + "id": 11, + "room": "Reactor", + "position": { + "x": -21.876, + "y": -3.0516002 + }, + "usableDistance": 1 + }, + { + "id": 9, + "room": "LowerEngine", + "position": { + "x": -15.2508, + "y": -13.656001 + }, + "usableDistance": 1 + }, + { + "id": 4, + "room": "UpperEngine", + "position": { + "x": -15.288, + "y": 2.52 + }, + "usableDistance": 1 + }, + { + "id": 5, + "room": "Security", + "position": { + "x": -12.534, + "y": -6.9492 + }, + "usableDistance": 1 + }, + { + "id": 6, + "room": "MedBay", + "position": { + "x": -10.608001, + "y": -4.176 + }, + "usableDistance": 1 + } + ] + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Data/maps/Skeld/vents.json b/src/Impostor.Api/Innersloth/Data/maps/Skeld/vents.json new file mode 100644 index 0000000..ae73976 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Data/maps/Skeld/vents.json @@ -0,0 +1,142 @@ +{ + "0": { + "name": "AdminVent", + "position": { + "x": 2.544, + "y": -9.955201 + }, + "left": 2, + "center": null, + "right": 1 + }, + "1": { + "name": "BigYVent", + "position": { + "x": 9.384, + "y": -6.438 + }, + "left": 0, + "center": null, + "right": 2 + }, + "2": { + "name": "CafeVent", + "position": { + "x": 4.2588, + "y": -0.27600002 + }, + "left": 0, + "center": null, + "right": 1 + }, + "3": { + "name": "ElecVent", + "position": { + "x": -9.7764, + "y": -8.034 + }, + "left": 5, + "center": null, + "right": 6 + }, + "4": { + "name": "LEngineVent", + "position": { + "x": -15.288, + "y": 2.52 + }, + "left": 11, + "center": null, + "right": null + }, + "5": { + "name": "SecurityVent", + "position": { + "x": -12.534, + "y": -6.9492 + }, + "left": 6, + "center": null, + "right": 3 + }, + "6": { + "name": "MedVent", + "position": { + "x": -10.608001, + "y": -4.176 + }, + "left": 3, + "center": null, + "right": 5 + }, + "7": { + "name": "WeaponsVent", + "position": { + "x": 8.820001, + "y": 3.3240001 + }, + "left": null, + "center": null, + "right": 12 + }, + "8": { + "name": "ReactorVent", + "position": { + "x": -20.796001, + "y": -6.9528003 + }, + "left": null, + "center": null, + "right": 9 + }, + "9": { + "name": "REngineVent", + "position": { + "x": -15.2508, + "y": -13.656001 + }, + "left": 8, + "center": null, + "right": null + }, + "10": { + "name": "ShieldsVent", + "position": { + "x": 9.5232, + "y": -14.337601 + }, + "left": null, + "center": null, + "right": 13 + }, + "11": { + "name": "UpperReactorVent", + "position": { + "x": -21.876, + "y": -3.0516002 + }, + "left": null, + "center": null, + "right": 4 + }, + "12": { + "name": "NavVentNorth", + "position": { + "x": 16.008001, + "y": -3.1680002 + }, + "left": 7, + "center": null, + "right": null + }, + "13": { + "name": "NavVentSouth", + "position": { + "x": 16.008001, + "y": -6.3840003 + }, + "left": 10, + "center": null, + "right": null + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/DisconnectReason.cs b/src/Impostor.Api/Innersloth/DisconnectReason.cs deleted file mode 100644 index 21cdc94..0000000 --- a/src/Impostor.Api/Innersloth/DisconnectReason.cs +++ /dev/null @@ -1,68 +0,0 @@ -namespace Impostor.Api.Innersloth -{ - public enum DisconnectReason - { - ExitGame = 0, - Destroy = 16, - - // The game you tried to join is full. - // Check with the host to see if you can join next round. - GameFull = 1, - - // The game you tried to join already started. - // Check with the host to see if you can join next round. - GameStarted = 2, - - // Could not find the game you're looking for.. - GameMissing = 3, - IncorrectGame = 18, - - // For this a message can be given, specifying an empty message shows - // "An unknown error disconnected you from the server." - // 4, 12, 13, 14, 15 also count as Custom - Custom = 8, - - // You are running an older version of the game. - // Please update to play with others. - IncorrectVersion = 5, - - // You were banned from { GameCode ?? "the room" } - // You cannot rejoin that room. - Banned = 6, - - // You were kicked from { GameCode ?? "the room" } - // You can rejoin if the room hasn't started. - Kicked = 7, - - // You were banned for hacking. - // Please stop. - Hacking = 10, - - // GameModes.LocalGame: - // You disconnected from the host. - // If this happens often, check your WiFi strength. - // - // GameModes.OnlineGame: - // You disconnected from the server. - // If this happens often, check your network strength. - // This may also be a server issue. - Error = 17, - - // The server stopped this game. Possibly due to inactivity. - ServerRequest = 19, - - // The Among Us servers are overloaded. - // Sorry! Please try again later! - ServerFull = 20, - - FocusLostBackground = 207, - - // You may not join another game for another { BanMinutesLeft } minutes after intentionally disconnecting. - IntentionalLeaving = 208, - - // You were disconnected because Among Us was suspended by another app. - FocusLost = 209, - - NewConnection = 210, - } -} diff --git a/src/Impostor.Api/Innersloth/GameKeywords.cs b/src/Impostor.Api/Innersloth/GameKeywords.cs deleted file mode 100644 index b5fae73..0000000 --- a/src/Impostor.Api/Innersloth/GameKeywords.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; - -namespace Impostor.Api.Innersloth -{ - [Flags] - public enum GameKeywords : uint - { - All = 0, - English = 256, - SpanishLA = 2, - Brazilian = 2048, - Portuguese = 16, - Korean = 4, - Russian = 8, - Dutch = 4096, - Filipino = 64, - French = 8192, - German = 16384, - Italian = 32768, - Japanese = 512, - SpanishEU = 1024, - Arabic = 32, - Polish = 128, - SChinese = 65536, - TChinese = 131072, - Irish = 262144, - Other = 1, - } -} diff --git a/src/Impostor.Api/Innersloth/GameOverReason.cs b/src/Impostor.Api/Innersloth/GameOverReason.cs deleted file mode 100644 index 5c30036..0000000 --- a/src/Impostor.Api/Innersloth/GameOverReason.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace Impostor.Api.Innersloth -{ - public enum GameOverReason : byte - { - HumansByVote = 0, - HumansByTask = 1, - ImpostorByVote = 2, - ImpostorByKill = 3, - ImpostorBySabotage = 4, - ImpostorDisconnect = 5, - HumansDisconnect = 6, - } -} diff --git a/src/Impostor.Api/Innersloth/ITask.cs b/src/Impostor.Api/Innersloth/ITask.cs deleted file mode 100644 index 114a75c..0000000 --- a/src/Impostor.Api/Innersloth/ITask.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Impostor.Api.Innersloth -{ - public interface ITask - { - int Id { get; } - - string Name { get; } - - TaskTypes Type { get; } - - TaskCategories Category { get; } - - bool IsVisual { get; } - } -} diff --git a/src/Impostor.Api/Innersloth/IVent.cs b/src/Impostor.Api/Innersloth/IVent.cs deleted file mode 100644 index 4c697f6..0000000 --- a/src/Impostor.Api/Innersloth/IVent.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Numerics; - -namespace Impostor.Api.Innersloth -{ - public interface IVent - { - int Id { get; } - - string Name { get; } - - Vector2 Position { get; } - - IVent? Left { get; } - - IVent? Center { get; } - - IVent? Right { get; } - } -} diff --git a/src/Impostor.Api/Innersloth/Language.cs b/src/Impostor.Api/Innersloth/Language.cs deleted file mode 100644 index 2b734ba..0000000 --- a/src/Impostor.Api/Innersloth/Language.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace Impostor.Api.Innersloth -{ - public enum Language - { - English, - SpanishLA, - Brazilian, - Portuguese, - Korean, - Russian, - Dutch, - Filipino, - French, - German, - Italian, - Japanese, - SpanishEU, - } -} diff --git a/src/Impostor.Api/Innersloth/MapFlags.cs b/src/Impostor.Api/Innersloth/MapFlags.cs index e3a4e8f..59d5ba6 100644 --- a/src/Impostor.Api/Innersloth/MapFlags.cs +++ b/src/Impostor.Api/Innersloth/MapFlags.cs @@ -5,11 +5,11 @@ namespace Impostor.Api.Innersloth [Flags] public enum MapFlags { - Skeld = 1, - MiraHQ = 2, - Polus = 4, - Airship = 16, - - // 8 is taken by Dleks + Skeld = 1 << 0, + MiraHQ = 1 << 1, + Polus = 1 << 2, + Dleks = 1 << 3, + Airship = 1 << 4, + Fungle = 1 << 5, } } diff --git a/src/Impostor.Api/Innersloth/MapTypes.cs b/src/Impostor.Api/Innersloth/MapTypes.cs index 5de0adb..bbb912d 100644 --- a/src/Impostor.Api/Innersloth/MapTypes.cs +++ b/src/Impostor.Api/Innersloth/MapTypes.cs @@ -5,6 +5,8 @@ Skeld = 0, MiraHQ = 1, Polus = 2, + Dleks = 3, Airship = 4, + Fungle = 5, } } diff --git a/src/Impostor.Api/Innersloth/Maps/AirshipData.cs b/src/Impostor.Api/Innersloth/Maps/AirshipData.cs deleted file mode 100644 index 5ec22ed..0000000 --- a/src/Impostor.Api/Innersloth/Maps/AirshipData.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using Impostor.Api.Innersloth.Maps.Tasks; -using Impostor.Api.Innersloth.Maps.Vents; - -namespace Impostor.Api.Innersloth.Maps -{ - public class AirshipData : IMapData - { - private readonly IReadOnlyDictionary _vents; - private readonly IReadOnlyDictionary _tasks; - - internal AirshipData() - { - var vents = new[] - { - new AirshipVent(this, AirshipVent.Ids.Vault, new Vector2(-12.6322f, 8.4735f), left: AirshipVent.Ids.Cockpit), - new AirshipVent(this, AirshipVent.Ids.Cockpit, new Vector2(-22.099f, -1.512f), left: AirshipVent.Ids.Vault, right: AirshipVent.Ids.ViewingDeck), - new AirshipVent(this, AirshipVent.Ids.ViewingDeck, new Vector2(-15.659f, -11.6991f), left: AirshipVent.Ids.Cockpit), - new AirshipVent(this, AirshipVent.Ids.EngineRoom, new Vector2(0.203f, -2.5361f), left: AirshipVent.Ids.Kitchen, right: AirshipVent.Ids.MainHallBottom), - new AirshipVent(this, AirshipVent.Ids.Kitchen, new Vector2(-2.6019f, -9.338f), left: AirshipVent.Ids.EngineRoom, right: AirshipVent.Ids.MainHallBottom), - new AirshipVent(this, AirshipVent.Ids.MainHallBottom, new Vector2(7.021f, -3.730999f), left: AirshipVent.Ids.EngineRoom, right: AirshipVent.Ids.Kitchen), - new AirshipVent(this, AirshipVent.Ids.GapRight, new Vector2(9.814f, 3.206f), left: AirshipVent.Ids.MainHallTop, right: AirshipVent.Ids.GapLeft), - new AirshipVent(this, AirshipVent.Ids.GapLeft, new Vector2(12.663f, 5.922f), left: AirshipVent.Ids.MainHallTop, right: AirshipVent.Ids.GapRight), - new AirshipVent(this, AirshipVent.Ids.MainHallTop, new Vector2(3.605f, 6.923f), left: AirshipVent.Ids.GapLeft, right: AirshipVent.Ids.GapRight), - new AirshipVent(this, AirshipVent.Ids.Showers, new Vector2(23.9869f, -1.386f), left: AirshipVent.Ids.Records, right: AirshipVent.Ids.CargoBay), - new AirshipVent(this, AirshipVent.Ids.Records, new Vector2(23.2799f, 8.259998f), left: AirshipVent.Ids.Showers, right: AirshipVent.Ids.CargoBay), - new AirshipVent(this, AirshipVent.Ids.CargoBay, new Vector2(30.4409f, -3.577f), left: AirshipVent.Ids.Showers, right: AirshipVent.Ids.Records), - }; - - Vents = vents.ToDictionary(x => x.Id, x => x).AsReadOnly(); - _vents = vents.ToDictionary(x => (int)x.Id, x => (IVent)x).AsReadOnly(); - - var tasks = new[] - { - new AirshipTask(AirshipTask.Ids.ElectricalFixWiring, TaskTypes.FixWiring, TaskCategories.CommonTask), - new AirshipTask(AirshipTask.Ids.MeetingRoomEnterIDCode, TaskTypes.EnterIdCode, TaskCategories.CommonTask), - new AirshipTask(AirshipTask.Ids.ElectricalCalibrateDistributor, TaskTypes.CalibrateDistributor, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.ElectricalResetBreakers, TaskTypes.ResetBreakers, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.VaultRoomDownloadData, TaskTypes.UploadData, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.BrigDownloadData, TaskTypes.UploadData, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.CargoBayDownloadData, TaskTypes.UploadData, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.GapRoomDownloadData, TaskTypes.UploadData, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.RecordsDownloadData, TaskTypes.UploadData, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.CargoBayUnlockSafe, TaskTypes.UnlockSafe, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.VentilationStartFans, TaskTypes.StartFans, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.MainHallEmptyGarbage, TaskTypes.EmptyGarbage, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.MedicalEmptyGarbage, TaskTypes.EmptyGarbage, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.KitchenEmptyGarbage, TaskTypes.EmptyGarbage, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.MainHallDevelopPhotos, TaskTypes.DevelopPhotos, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.CargoBayFuelEngines, TaskTypes.FuelEngines, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.SecurityRewindTapes, TaskTypes.RewindTapes, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.LoungeEmptyGarbage, TaskTypes.EmptyGarbage, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.ShowersEmptyGarbage, TaskTypes.EmptyGarbage, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.VaultRoomPolishRuby, TaskTypes.PolishRuby, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.CockpitStabilizeSteering, TaskTypes.StabilizeSteering, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ArmoryDownloadData, TaskTypes.UploadData, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.CockpitDownloadData, TaskTypes.UploadData, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.CommsDownloadData, TaskTypes.UploadData, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.MedicalDownloadData, TaskTypes.UploadData, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.ViewingDeckDownloadData, TaskTypes.UploadData, TaskCategories.LongTask), - new AirshipTask(AirshipTask.Ids.ElectricalDivertPowerToArmory, TaskTypes.DivertPower, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ElectricalDivertPowerToCockpit, TaskTypes.DivertPower, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ElectricalDivertPowerToGapRoom, TaskTypes.DivertPower, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ElectricalDivertPowerToMainHall, TaskTypes.DivertPower, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ElectricalDivertPowerToMeetingRoom, TaskTypes.DivertPower, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ElectricalDivertPowerToShowers, TaskTypes.DivertPower, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ElectricalDivertPowerToEngine, TaskTypes.DivertPower, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ShowersPickUpTowels, TaskTypes.PickUpTowels, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.LoungeCleanToilet, TaskTypes.CleanToilet, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.VaultRoomDressMannequin, TaskTypes.DressMannequin, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.RecordsSortRecords, TaskTypes.SortRecords, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ArmoryPutAwayPistols, TaskTypes.PutAwayPistols, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ArmoryPutAwayRifles, TaskTypes.PutAwayRifles, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.MainHallDecontaminate, TaskTypes.Decontaminate, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.KitchenMakeBurger, TaskTypes.MakeBurger, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.ShowersFixShower, TaskTypes.FixShower, TaskCategories.ShortTask), - new AirshipTask(AirshipTask.Ids.CleanVent, TaskTypes.VentCleaning, TaskCategories.ShortTask), - }; - - Tasks = tasks.ToDictionary(x => x.Id, x => x).AsReadOnly(); - _tasks = tasks.ToDictionary(x => (int)x.Id, x => (ITask)x).AsReadOnly(); - } - - public IReadOnlyDictionary Vents { get; } - - IReadOnlyDictionary IMapData.Vents => _vents; - - public IReadOnlyDictionary Tasks { get; } - - IReadOnlyDictionary IMapData.Tasks => _tasks; - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/DoorData.cs b/src/Impostor.Api/Innersloth/Maps/DoorData.cs new file mode 100644 index 0000000..3adbb15 --- /dev/null +++ b/src/Impostor.Api/Innersloth/Maps/DoorData.cs @@ -0,0 +1,19 @@ +using System.Numerics; + +namespace Impostor.Api.Innersloth.Maps; + +public sealed class DoorData +{ + internal DoorData(int id, SystemTypes room, Vector2 position) + { + Id = id; + Room = room; + Position = position; + } + + public int Id { get; } + + public SystemTypes Room { get; } + + public Vector2 Position { get; } +} diff --git a/src/Impostor.Api/Innersloth/Maps/IMapData.cs b/src/Impostor.Api/Innersloth/Maps/IMapData.cs deleted file mode 100644 index ce804a0..0000000 --- a/src/Impostor.Api/Innersloth/Maps/IMapData.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections.Generic; - -namespace Impostor.Api.Innersloth.Maps -{ - public interface IMapData - { - public static IReadOnlyDictionary Maps { get; } = new Dictionary - { - [MapTypes.Skeld] = new SkeldData(), - [MapTypes.MiraHQ] = new MiraData(), - [MapTypes.Polus] = new PolusData(), - [MapTypes.Airship] = new AirshipData(), - }.AsReadOnly(); - - IReadOnlyDictionary Vents { get; } - - IReadOnlyDictionary Tasks { get; } - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/MapData.cs b/src/Impostor.Api/Innersloth/Maps/MapData.cs new file mode 100644 index 0000000..4b6e4ee --- /dev/null +++ b/src/Impostor.Api/Innersloth/Maps/MapData.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using System.Numerics; + +namespace Impostor.Api.Innersloth.Maps; + +public abstract class MapData +{ + protected internal MapData() + { + } + + public static IReadOnlyDictionary Maps { get; } = new Dictionary + { + [MapTypes.Skeld] = new SkeldData(), + [MapTypes.MiraHQ] = new MiraData(), + [MapTypes.Polus] = new PolusData(), + [MapTypes.Airship] = new AirshipData(), + [MapTypes.Fungle] = new FungleData(), + }.AsReadOnly(); + + public abstract IReadOnlyDictionary Vents { get; } + + public abstract IReadOnlyDictionary Tasks { get; } + + public abstract IReadOnlyDictionary Doors { get; } + + public abstract float SpawnRadius { get; } + + public abstract Vector2 InitialSpawnCenter { get; } + + public abstract Vector2 MeetingSpawnCenter { get; } + + public abstract Vector2 MeetingSpawnCenter2 { get; } +} diff --git a/src/Impostor.Api/Innersloth/Maps/MiraData.cs b/src/Impostor.Api/Innersloth/Maps/MiraData.cs deleted file mode 100644 index 326b94a..0000000 --- a/src/Impostor.Api/Innersloth/Maps/MiraData.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using Impostor.Api.Innersloth.Maps.Tasks; -using Impostor.Api.Innersloth.Maps.Vents; - -namespace Impostor.Api.Innersloth.Maps -{ - public class MiraData : IMapData - { - private readonly IReadOnlyDictionary _vents; - private readonly IReadOnlyDictionary _tasks; - - internal MiraData() - { - var vents = new[] - { - new MiraVent(this, MiraVent.Ids.Balcony, new Vector2(23.77f, -1.94f), left: MiraVent.Ids.Medbay, right: MiraVent.Ids.Cafeteria), - new MiraVent(this, MiraVent.Ids.Cafeteria, new Vector2(23.9f, 7.18f), left: MiraVent.Ids.Admin, right: MiraVent.Ids.Balcony), - new MiraVent(this, MiraVent.Ids.Reactor, new Vector2(0.4800001f, 10.697f), left: MiraVent.Ids.Laboratory, center: MiraVent.Ids.Decontamination, right: MiraVent.Ids.Launchpad), - new MiraVent(this, MiraVent.Ids.Laboratory, new Vector2(11.606f, 13.816f), left: MiraVent.Ids.Reactor, center: MiraVent.Ids.Decontamination, right: MiraVent.Ids.Office), - new MiraVent(this, MiraVent.Ids.Office, new Vector2(13.28f, 20.13f), left: MiraVent.Ids.Laboratory, center: MiraVent.Ids.Admin, right: MiraVent.Ids.Greenhouse), - new MiraVent(this, MiraVent.Ids.Admin, new Vector2(22.39f, 17.23f), left: MiraVent.Ids.Greenhouse, center: MiraVent.Ids.Cafeteria, right: MiraVent.Ids.Office), - new MiraVent(this, MiraVent.Ids.Greenhouse, new Vector2(17.85f, 25.23f), left: MiraVent.Ids.Admin, right: MiraVent.Ids.Office), - new MiraVent(this, MiraVent.Ids.Medbay, new Vector2(15.41f, -1.82f), left: MiraVent.Ids.Balcony, right: MiraVent.Ids.LockerRoom), - new MiraVent(this, MiraVent.Ids.Decontamination, new Vector2(6.83f, 3.145f), left: MiraVent.Ids.Reactor, center: MiraVent.Ids.LockerRoom, right: MiraVent.Ids.Laboratory), - new MiraVent(this, MiraVent.Ids.LockerRoom, new Vector2(4.29f, 0.5299997f), left: MiraVent.Ids.Medbay, center: MiraVent.Ids.Launchpad, right: MiraVent.Ids.Decontamination), - new MiraVent(this, MiraVent.Ids.Launchpad, new Vector2(-6.18f, 3.56f), left: MiraVent.Ids.Reactor, right: MiraVent.Ids.LockerRoom), - }; - - Vents = vents.ToDictionary(x => x.Id, x => x).AsReadOnly(); - _vents = vents.ToDictionary(x => (int)x.Id, x => (IVent)x).AsReadOnly(); - - var tasks = new[] - { - new MiraTask(MiraTask.Ids.HallwayFixWiring, TaskTypes.FixWiring, TaskCategories.CommonTask), - new MiraTask(MiraTask.Ids.AdminEnterIDCode, TaskTypes.EnterIdCode, TaskCategories.CommonTask), - new MiraTask(MiraTask.Ids.MedbaySubmitScan, TaskTypes.SubmitScan, TaskCategories.LongTask, true), - new MiraTask(MiraTask.Ids.BalconyClearAsteroids, TaskTypes.ClearAsteroids, TaskCategories.LongTask), - new MiraTask(MiraTask.Ids.ElectricalDivertPowerToAdmin, TaskTypes.DivertPower, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.ElectricalDivertPowerToCafeteria, TaskTypes.DivertPower, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.ElectricalDivertPowerToCommunications, TaskTypes.DivertPower, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.ElectricalDivertPowerToLaunchpad, TaskTypes.DivertPower, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.ElectricalDivertPowerToMedbay, TaskTypes.DivertPower, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.ElectricalDivertPowerToOffice, TaskTypes.DivertPower, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.StorageWaterPlants, TaskTypes.WaterPlants, TaskCategories.LongTask), - new MiraTask(MiraTask.Ids.ReactorStartReactor, TaskTypes.StartReactor, TaskCategories.LongTask), - new MiraTask(MiraTask.Ids.ElectricalDivertPowerToGreenhouse, TaskTypes.DivertPower, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.AdminChartCourse, TaskTypes.ChartCourse, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.GreenhouseCleanO2Filter, TaskTypes.Filter, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.LaunchpadFuelEngines, TaskTypes.FuelEngines, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.LaboratoryAssembleArtifact, TaskTypes.AssembleArtifact, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.LaboratorySortSamples, TaskTypes.SortSamples, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.AdminPrimeShields, TaskTypes.PrimeShields, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.CafeteriaEmptyGarbage, TaskTypes.EmptyGarbage, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.BalconyMeasureWeather, TaskTypes.MeasureWeather, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.ElectricalDivertPowerToLaboratory, TaskTypes.DivertPower, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.CafeteriaBuyBeverage, TaskTypes.BuyBeverage, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.OfficeProcessData, TaskTypes.ProcessData, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.LaunchpadRunDiagnostics, TaskTypes.RunDiagnostics, TaskCategories.LongTask), - new MiraTask(MiraTask.Ids.ReactorUnlockManifolds, TaskTypes.UnlockManifolds, TaskCategories.ShortTask), - new MiraTask(MiraTask.Ids.CleanVent, TaskTypes.VentCleaning, TaskCategories.ShortTask), - }; - - Tasks = tasks.ToDictionary(x => x.Id, x => x).AsReadOnly(); - _tasks = tasks.ToDictionary(x => (int)x.Id, x => (ITask)x).AsReadOnly(); - } - - public IReadOnlyDictionary Vents { get; } - - IReadOnlyDictionary IMapData.Vents => _vents; - - public IReadOnlyDictionary Tasks { get; } - - IReadOnlyDictionary IMapData.Tasks => _tasks; - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/PolusData.cs b/src/Impostor.Api/Innersloth/Maps/PolusData.cs deleted file mode 100644 index ba73e1a..0000000 --- a/src/Impostor.Api/Innersloth/Maps/PolusData.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using Impostor.Api.Innersloth.Maps.Tasks; -using Impostor.Api.Innersloth.Maps.Vents; - -namespace Impostor.Api.Innersloth.Maps -{ - public class PolusData : IMapData - { - private readonly IReadOnlyDictionary _vents; - private readonly IReadOnlyDictionary _tasks; - - internal PolusData() - { - var vents = new[] - { - new PolusVent(this, PolusVent.Ids.Security, new Vector2(1.929f, -9.558001f), left: PolusVent.Ids.O2, right: PolusVent.Ids.Electrical), - new PolusVent(this, PolusVent.Ids.Electrical, new Vector2(6.9f, -14.41f), left: PolusVent.Ids.O2, right: PolusVent.Ids.Security), - new PolusVent(this, PolusVent.Ids.O2, new Vector2(3.51f, -16.58f), left: PolusVent.Ids.Electrical, right: PolusVent.Ids.Security), - new PolusVent(this, PolusVent.Ids.Communications, new Vector2(12.304f, -18.898f), left: PolusVent.Ids.Storage, right: PolusVent.Ids.Office), - new PolusVent(this, PolusVent.Ids.Office, new Vector2(16.379f, -19.599f), left: PolusVent.Ids.Communications, right: PolusVent.Ids.Storage), - new PolusVent(this, PolusVent.Ids.Admin, new Vector2(20.089f, -25.517f), left: PolusVent.Ids.OutsideAdmin, right: PolusVent.Ids.Lava), - new PolusVent(this, PolusVent.Ids.Laboratory, new Vector2(32.963f, -9.526f), right: PolusVent.Ids.Lava), - new PolusVent(this, PolusVent.Ids.Lava, new Vector2(30.907f, -11.86f), left: PolusVent.Ids.Laboratory, right: PolusVent.Ids.Admin), - new PolusVent(this, PolusVent.Ids.Storage, new Vector2(22f, -12.19f), left: PolusVent.Ids.Communications, right: PolusVent.Ids.Office), - new PolusVent(this, PolusVent.Ids.RightStabilizer, new Vector2(23.72f, -7.82f), left: PolusVent.Ids.LeftStabilizer), - new PolusVent(this, PolusVent.Ids.LeftStabilizer, new Vector2(9.64f, -7.72f), left: PolusVent.Ids.RightStabilizer), - new PolusVent(this, PolusVent.Ids.OutsideAdmin, new Vector2(18.93f, -24.85f), right: PolusVent.Ids.Admin), - }; - - Vents = vents.ToDictionary(x => x.Id, x => x).AsReadOnly(); - _vents = vents.ToDictionary(x => (int)x.Id, x => (IVent)x).AsReadOnly(); - - var tasks = new[] - { - new PolusTask(PolusTask.Ids.OfficeSwipeCard, TaskTypes.SwipeCard, TaskCategories.CommonTask), - new PolusTask(PolusTask.Ids.DropshipInsertKeys, TaskTypes.InsertKeys, TaskCategories.CommonTask), - new PolusTask(PolusTask.Ids.OfficeScanBoardingPass, TaskTypes.ScanBoardingPass, TaskCategories.CommonTask), - new PolusTask(PolusTask.Ids.ElectricalFixWiring, TaskTypes.FixWiring, TaskCategories.CommonTask), - new PolusTask(PolusTask.Ids.WeaponsDownloadData, TaskTypes.UploadData, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.OfficeDownloadData, TaskTypes.UploadData, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.ElectricalDownloadData, TaskTypes.UploadData, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.SpecimenRoomDownloadData, TaskTypes.UploadData, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.O2DownloadData, TaskTypes.UploadData, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.SpecimenRoomStartReactor, TaskTypes.StartReactor, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.StorageFuelEngines, TaskTypes.FuelEngines, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.BoilerRoomOpenWaterways, TaskTypes.OpenWaterways, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.MedbayInspectSample, TaskTypes.InspectSample, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.BoilerRoomReplaceWaterJug, TaskTypes.ReplaceWaterJug, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.OutsideFixWeatherNodeNode_GI, TaskTypes.ActivateWeatherNodes, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.OutsideFixWeatherNodeNode_IRO, TaskTypes.ActivateWeatherNodes, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.OutsideFixWeatherNodeNode_PD, TaskTypes.ActivateWeatherNodes, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.OutsideFixWeatherNodeNode_TB, TaskTypes.ActivateWeatherNodes, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.CommunicationsRebootWiFi, TaskTypes.RebootWifi, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.O2MonitorTree, TaskTypes.MonitorOxygen, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.SpecimenRoomUnlockManifolds, TaskTypes.UnlockManifolds, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.SpecimenRoomStoreArtifacts, TaskTypes.StoreArtifact, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.O2FillCanisters, TaskTypes.FillCanisters, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.O2EmptyGarbage, TaskTypes.EmptyGarbage, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.DropshipChartCourse, TaskTypes.ChartCourse, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.MedbaySubmitScan, TaskTypes.SubmitScan, TaskCategories.ShortTask, true), - new PolusTask(PolusTask.Ids.WeaponsClearAsteroids, TaskTypes.ClearAsteroids, TaskCategories.ShortTask, true), - new PolusTask(PolusTask.Ids.OutsideFixWeatherNodeNode_CA, TaskTypes.ActivateWeatherNodes, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.OutsideFixWeatherNodeNode_MLG, TaskTypes.ActivateWeatherNodes, TaskCategories.LongTask), - new PolusTask(PolusTask.Ids.LaboratoryAlignTelescope, TaskTypes.AlignTelescope, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.LaboratoryRepairDrill, TaskTypes.RepairDrill, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.LaboratoryRecordTemperature, TaskTypes.RecordTemperature, TaskCategories.ShortTask), - new PolusTask(PolusTask.Ids.OutsideRecordTemperature, TaskTypes.RecordTemperature, TaskCategories.ShortTask), - }; - - Tasks = tasks.ToDictionary(x => x.Id, x => x).AsReadOnly(); - _tasks = tasks.ToDictionary(x => (int)x.Id, x => (ITask)x).AsReadOnly(); - } - - public IReadOnlyDictionary Vents { get; } - - IReadOnlyDictionary IMapData.Vents => _vents; - - public IReadOnlyDictionary Tasks { get; } - - IReadOnlyDictionary IMapData.Tasks => _tasks; - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/SkeldData.cs b/src/Impostor.Api/Innersloth/Maps/SkeldData.cs deleted file mode 100644 index 617f7e0..0000000 --- a/src/Impostor.Api/Innersloth/Maps/SkeldData.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using Impostor.Api.Innersloth.Maps.Tasks; -using Impostor.Api.Innersloth.Maps.Vents; - -namespace Impostor.Api.Innersloth.Maps -{ - public class SkeldData : IMapData - { - private readonly IReadOnlyDictionary _vents; - private readonly IReadOnlyDictionary _tasks; - - internal SkeldData() - { - var vents = new[] - { - new SkeldVent(this, SkeldVent.Ids.Admin, new Vector2(2.544f, -9.955201f), left: SkeldVent.Ids.Cafeteria, right: SkeldVent.Ids.RightHallway), - new SkeldVent(this, SkeldVent.Ids.RightHallway, new Vector2(9.384f, -6.438f), left: SkeldVent.Ids.Admin, right: SkeldVent.Ids.Cafeteria), - new SkeldVent(this, SkeldVent.Ids.Cafeteria, new Vector2(4.2588f, -0.276f), left: SkeldVent.Ids.Admin, right: SkeldVent.Ids.RightHallway), - new SkeldVent(this, SkeldVent.Ids.Electrical, new Vector2(-9.7764f, -8.034f), left: SkeldVent.Ids.Security, right: SkeldVent.Ids.Medbay), - new SkeldVent(this, SkeldVent.Ids.UpperEngine, new Vector2(-15.288f, 2.52f), left: SkeldVent.Ids.UpperReactor), - new SkeldVent(this, SkeldVent.Ids.Security, new Vector2(-12.534f, -6.9492f), left: SkeldVent.Ids.Medbay, right: SkeldVent.Ids.Electrical), - new SkeldVent(this, SkeldVent.Ids.Medbay, new Vector2(-10.608f, -4.176f), left: SkeldVent.Ids.Security, right: SkeldVent.Ids.Electrical), - new SkeldVent(this, SkeldVent.Ids.Weapons, new Vector2(8.820001f, 3.324f), right: SkeldVent.Ids.UpperNavigation), - new SkeldVent(this, SkeldVent.Ids.LowerReactor, new Vector2(-20.796f, -6.9528f), left: SkeldVent.Ids.LowerEngine), - new SkeldVent(this, SkeldVent.Ids.LowerEngine, new Vector2(-15.2508f, -13.656f), left: SkeldVent.Ids.LowerReactor), - new SkeldVent(this, SkeldVent.Ids.Shields, new Vector2(9.5232f, -14.3376f), left: SkeldVent.Ids.LowerNavigation), - new SkeldVent(this, SkeldVent.Ids.UpperReactor, new Vector2(-21.876f, -3.0516f), left: SkeldVent.Ids.UpperEngine), - new SkeldVent(this, SkeldVent.Ids.UpperNavigation, new Vector2(16.008f, -3.168f), right: SkeldVent.Ids.Weapons), - new SkeldVent(this, SkeldVent.Ids.LowerNavigation, new Vector2(16.008f, -6.384f), right: SkeldVent.Ids.Shields), - }; - - Vents = vents.ToDictionary(x => x.Id, x => x).AsReadOnly(); - _vents = vents.ToDictionary(x => (int)x.Id, x => (IVent)x).AsReadOnly(); - - var tasks = new[] - { - new SkeldTask(SkeldTask.Ids.AdminSwipeCard, TaskTypes.SwipeCard, TaskCategories.CommonTask), - new SkeldTask(SkeldTask.Ids.ElectricalFixWiring, TaskTypes.FixWiring, TaskCategories.CommonTask), - new SkeldTask(SkeldTask.Ids.WeaponsClearAsteroids, TaskTypes.ClearAsteroids, TaskCategories.LongTask, true), - new SkeldTask(SkeldTask.Ids.EnginesAlignEngineOutput, TaskTypes.AlignEngineOutput, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.MedbaySubmitScan, TaskTypes.SubmitScan, TaskCategories.LongTask, true), - new SkeldTask(SkeldTask.Ids.MedbayInspectSample, TaskTypes.InspectSample, TaskCategories.LongTask), - new SkeldTask(SkeldTask.Ids.StorageFuelEngines, TaskTypes.FuelEngines, TaskCategories.LongTask), - new SkeldTask(SkeldTask.Ids.ReactorStartReactor, TaskTypes.StartReactor, TaskCategories.LongTask), - new SkeldTask(SkeldTask.Ids.O2EmptyChute, TaskTypes.EmptyChute, TaskCategories.LongTask, true), - new SkeldTask(SkeldTask.Ids.CafeteriaEmptyGarbage, TaskTypes.EmptyGarbage, TaskCategories.LongTask, true), - new SkeldTask(SkeldTask.Ids.CommunicationsDownloadData, TaskTypes.UploadData, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ElectricalCalibrateDistributor, TaskTypes.CalibrateDistributor, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.NavigationChartCourse, TaskTypes.ChartCourse, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.O2CleanO2Filter, TaskTypes.Filter, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ReactorUnlockManifolds, TaskTypes.UnlockManifolds, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ElectricalDownloadData, TaskTypes.UploadData, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.NavigationStabilizeSteering, TaskTypes.StabilizeSteering, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.WeaponsDownloadData, TaskTypes.UploadData, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ShieldsPrimeShields, TaskTypes.PrimeShields, TaskCategories.ShortTask, true), - new SkeldTask(SkeldTask.Ids.CafeteriaDownloadData, TaskTypes.UploadData, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.NavigationDownloadData, TaskTypes.UploadData, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToShields, TaskTypes.DivertPower, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToWeapons, TaskTypes.DivertPower, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToCommunications, TaskTypes.DivertPower, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToUpperEngine, TaskTypes.DivertPower, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToO2, TaskTypes.DivertPower, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToNavigation, TaskTypes.DivertPower, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToLowerEngine, TaskTypes.DivertPower, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToSecurity, TaskTypes.DivertPower, TaskCategories.ShortTask), - new SkeldTask(SkeldTask.Ids.CleanVent, TaskTypes.VentCleaning, TaskCategories.ShortTask), - }; - - Tasks = tasks.ToDictionary(x => x.Id, x => x).AsReadOnly(); - _tasks = tasks.ToDictionary(x => (int)x.Id, x => (ITask)x).AsReadOnly(); - } - - public IReadOnlyDictionary Vents { get; } - - IReadOnlyDictionary IMapData.Vents => _vents; - - public IReadOnlyDictionary Tasks { get; } - - IReadOnlyDictionary IMapData.Tasks => _tasks; - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/TaskData.cs b/src/Impostor.Api/Innersloth/Maps/TaskData.cs new file mode 100644 index 0000000..176c6fc --- /dev/null +++ b/src/Impostor.Api/Innersloth/Maps/TaskData.cs @@ -0,0 +1,23 @@ +namespace Impostor.Api.Innersloth.Maps; + +public sealed class TaskData +{ + internal TaskData(int id, TaskTypes type, TaskCategories category, bool isVisual = false) + { + Id = id; + Name = id.ToString(); + Type = type; + Category = category; + IsVisual = isVisual; + } + + public int Id { get; } + + public string Name { get; } + + public TaskTypes Type { get; } + + public TaskCategories Category { get; } + + public bool IsVisual { get; } +} diff --git a/src/Impostor.Api/Innersloth/Maps/Tasks/AirshipTask.cs b/src/Impostor.Api/Innersloth/Maps/Tasks/AirshipTask.cs deleted file mode 100644 index 798c4e6..0000000 --- a/src/Impostor.Api/Innersloth/Maps/Tasks/AirshipTask.cs +++ /dev/null @@ -1,73 +0,0 @@ -namespace Impostor.Api.Innersloth.Maps.Tasks -{ - public class AirshipTask : ITask - { - internal AirshipTask(Ids id, TaskTypes type, TaskCategories category, bool isVisual = false) - { - Id = id; - Name = id.ToString(); - Type = type; - Category = category; - IsVisual = isVisual; - } - - public enum Ids - { - ElectricalFixWiring = 0, - MeetingRoomEnterIDCode = 1, - ElectricalCalibrateDistributor = 2, - ElectricalResetBreakers = 3, - VaultRoomDownloadData = 4, - BrigDownloadData = 5, - CargoBayDownloadData = 6, - GapRoomDownloadData = 7, - RecordsDownloadData = 8, - CargoBayUnlockSafe = 9, - VentilationStartFans = 10, - MainHallEmptyGarbage = 11, - MedicalEmptyGarbage = 12, - KitchenEmptyGarbage = 13, - MainHallDevelopPhotos = 14, - CargoBayFuelEngines = 15, - SecurityRewindTapes = 16, - LoungeEmptyGarbage = 17, - ShowersEmptyGarbage = 18, - VaultRoomPolishRuby = 19, - CockpitStabilizeSteering = 20, - ArmoryDownloadData = 21, - CockpitDownloadData = 22, - CommsDownloadData = 23, - MedicalDownloadData = 24, - ViewingDeckDownloadData = 25, - ElectricalDivertPowerToArmory = 26, - ElectricalDivertPowerToCockpit = 27, - ElectricalDivertPowerToGapRoom = 28, - ElectricalDivertPowerToMainHall = 29, - ElectricalDivertPowerToMeetingRoom = 30, - ElectricalDivertPowerToShowers = 31, - ElectricalDivertPowerToEngine = 32, - ShowersPickUpTowels = 33, - LoungeCleanToilet = 34, - VaultRoomDressMannequin = 35, - RecordsSortRecords = 36, - ArmoryPutAwayPistols = 37, - ArmoryPutAwayRifles = 38, - MainHallDecontaminate = 39, - KitchenMakeBurger = 40, - ShowersFixShower = 41, - CleanVent = 42, - } - - public Ids Id { get; } - - int ITask.Id => (int)Id; - - public string Name { get; } - - public TaskTypes Type { get; } - - public TaskCategories Category { get; } - - public bool IsVisual { get; } - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/Tasks/MiraTask.cs b/src/Impostor.Api/Innersloth/Maps/Tasks/MiraTask.cs deleted file mode 100644 index b0e2f77..0000000 --- a/src/Impostor.Api/Innersloth/Maps/Tasks/MiraTask.cs +++ /dev/null @@ -1,57 +0,0 @@ -namespace Impostor.Api.Innersloth.Maps.Tasks -{ - public class MiraTask : ITask - { - internal MiraTask(Ids id, TaskTypes type, TaskCategories category, bool isVisual = false) - { - Id = id; - Name = id.ToString(); - Type = type; - Category = category; - IsVisual = isVisual; - } - - public enum Ids - { - HallwayFixWiring = 0, - AdminEnterIDCode = 1, - MedbaySubmitScan = 2, - BalconyClearAsteroids = 3, - ElectricalDivertPowerToAdmin = 4, - ElectricalDivertPowerToCafeteria = 5, - ElectricalDivertPowerToCommunications = 6, - ElectricalDivertPowerToLaunchpad = 7, - ElectricalDivertPowerToMedbay = 8, - ElectricalDivertPowerToOffice = 9, - StorageWaterPlants = 10, - ReactorStartReactor = 11, - ElectricalDivertPowerToGreenhouse = 12, - AdminChartCourse = 13, - GreenhouseCleanO2Filter = 14, - LaunchpadFuelEngines = 15, - LaboratoryAssembleArtifact = 16, - LaboratorySortSamples = 17, - AdminPrimeShields = 18, - CafeteriaEmptyGarbage = 19, - BalconyMeasureWeather = 20, - ElectricalDivertPowerToLaboratory = 21, - CafeteriaBuyBeverage = 22, - OfficeProcessData = 23, - LaunchpadRunDiagnostics = 24, - ReactorUnlockManifolds = 25, - CleanVent = 26, - } - - public Ids Id { get; } - - int ITask.Id => (int)Id; - - public string Name { get; } - - public TaskTypes Type { get; } - - public TaskCategories Category { get; } - - public bool IsVisual { get; } - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/Tasks/PolusTask.cs b/src/Impostor.Api/Innersloth/Maps/Tasks/PolusTask.cs deleted file mode 100644 index 9c0c3dd..0000000 --- a/src/Impostor.Api/Innersloth/Maps/Tasks/PolusTask.cs +++ /dev/null @@ -1,63 +0,0 @@ -namespace Impostor.Api.Innersloth.Maps.Tasks -{ - public class PolusTask : ITask - { - internal PolusTask(Ids id, TaskTypes type, TaskCategories category, bool isVisual = false) - { - Id = id; - Name = id.ToString(); - Type = type; - Category = category; - IsVisual = isVisual; - } - - public enum Ids - { - OfficeSwipeCard = 0, - DropshipInsertKeys = 1, - OfficeScanBoardingPass = 2, - ElectricalFixWiring = 3, - WeaponsDownloadData = 4, - OfficeDownloadData = 5, - ElectricalDownloadData = 6, - SpecimenRoomDownloadData = 7, - O2DownloadData = 8, - SpecimenRoomStartReactor = 9, - StorageFuelEngines = 10, - BoilerRoomOpenWaterways = 11, - MedbayInspectSample = 12, - BoilerRoomReplaceWaterJug = 13, - OutsideFixWeatherNodeNode_GI = 14, - OutsideFixWeatherNodeNode_IRO = 15, - OutsideFixWeatherNodeNode_PD = 16, - OutsideFixWeatherNodeNode_TB = 17, - CommunicationsRebootWiFi = 18, - O2MonitorTree = 19, - SpecimenRoomUnlockManifolds = 20, - SpecimenRoomStoreArtifacts = 21, - O2FillCanisters = 22, - O2EmptyGarbage = 23, - DropshipChartCourse = 24, - MedbaySubmitScan = 25, - WeaponsClearAsteroids = 26, - OutsideFixWeatherNodeNode_CA = 27, - OutsideFixWeatherNodeNode_MLG = 28, - LaboratoryAlignTelescope = 29, - LaboratoryRepairDrill = 30, - LaboratoryRecordTemperature = 31, - OutsideRecordTemperature = 32, - } - - public Ids Id { get; } - - int ITask.Id => (int)Id; - - public string Name { get; } - - public TaskTypes Type { get; } - - public TaskCategories Category { get; } - - public bool IsVisual { get; } - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/Tasks/SkeldTask.cs b/src/Impostor.Api/Innersloth/Maps/Tasks/SkeldTask.cs deleted file mode 100644 index 7427044..0000000 --- a/src/Impostor.Api/Innersloth/Maps/Tasks/SkeldTask.cs +++ /dev/null @@ -1,60 +0,0 @@ -namespace Impostor.Api.Innersloth.Maps.Tasks -{ - public class SkeldTask : ITask - { - internal SkeldTask(Ids id, TaskTypes type, TaskCategories category, bool isVisual = false) - { - Id = id; - Name = id.ToString(); - Type = type; - Category = category; - IsVisual = isVisual; - } - - public enum Ids - { - AdminSwipeCard = 0, - ElectricalFixWiring = 1, - WeaponsClearAsteroids = 2, - EnginesAlignEngineOutput = 3, - MedbaySubmitScan = 4, - MedbayInspectSample = 5, - StorageFuelEngines = 6, - ReactorStartReactor = 7, - O2EmptyChute = 8, - CafeteriaEmptyGarbage = 9, - CommunicationsDownloadData = 10, - ElectricalCalibrateDistributor = 11, - NavigationChartCourse = 12, - O2CleanO2Filter = 13, - ReactorUnlockManifolds = 14, - ElectricalDownloadData = 15, - NavigationStabilizeSteering = 16, - WeaponsDownloadData = 17, - ShieldsPrimeShields = 18, - CafeteriaDownloadData = 19, - NavigationDownloadData = 20, - ElectricalDivertPowerToShields = 21, - ElectricalDivertPowerToWeapons = 22, - ElectricalDivertPowerToCommunications = 23, - ElectricalDivertPowerToUpperEngine = 24, - ElectricalDivertPowerToO2 = 25, - ElectricalDivertPowerToNavigation = 26, - ElectricalDivertPowerToLowerEngine = 27, - ElectricalDivertPowerToSecurity = 28, - CleanVent = 29, - } - - public Ids Id { get; } - - int ITask.Id => (int)Id; - - public string Name { get; } - - public TaskTypes Type { get; } - - public TaskCategories Category { get; } - - public bool IsVisual { get; } - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/VentData.cs b/src/Impostor.Api/Innersloth/Maps/VentData.cs new file mode 100644 index 0000000..216fb9c --- /dev/null +++ b/src/Impostor.Api/Innersloth/Maps/VentData.cs @@ -0,0 +1,36 @@ +using System; +using System.Numerics; + +namespace Impostor.Api.Innersloth.Maps; + +public class VentData +{ + private readonly Lazy? _left; + + private readonly Lazy? _center; + + private readonly Lazy? _right; + + internal VentData(MapData data, int id, string name, Vector2 position, int? left = null, int? center = null, int? right = null) + { + Id = id; + Name = name; + Position = position; + + _left = left == null ? null : new Lazy(() => data.Vents[left.Value]); + _center = center == null ? null : new Lazy(() => data.Vents[center.Value]); + _right = right == null ? null : new Lazy(() => data.Vents[right.Value]); + } + + public int Id { get; } + + public string Name { get; } + + public Vector2 Position { get; } + + public VentData? Left => _left?.Value; + + public VentData? Center => _center?.Value; + + public VentData? Right => _right?.Value; +} diff --git a/src/Impostor.Api/Innersloth/Maps/Vents/AirshipVent.cs b/src/Impostor.Api/Innersloth/Maps/Vents/AirshipVent.cs deleted file mode 100644 index 3314692..0000000 --- a/src/Impostor.Api/Innersloth/Maps/Vents/AirshipVent.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Numerics; - -namespace Impostor.Api.Innersloth.Maps.Vents -{ - public class AirshipVent : IVent - { - private readonly Lazy? _left; - - private readonly Lazy? _center; - - private readonly Lazy? _right; - - internal AirshipVent(AirshipData data, Ids id, Vector2 position, Ids? left = null, Ids? center = null, Ids? right = null) - { - Id = id; - Name = id.ToString(); - Position = position; - - _left = left == null ? null : new Lazy(() => data.Vents[left.Value]); - _center = center == null ? null : new Lazy(() => data.Vents[center.Value]); - _right = right == null ? null : new Lazy(() => data.Vents[right.Value]); - } - - public enum Ids - { - Vault = 0, - Cockpit = 1, - ViewingDeck = 2, - EngineRoom = 3, - Kitchen = 4, - MainHallBottom = 5, - GapRight = 6, - GapLeft = 7, - MainHallTop = 8, - Showers = 9, - Records = 10, - CargoBay = 11, - } - - public Ids Id { get; } - - int IVent.Id => (int)Id; - - public string Name { get; } - - public Vector2 Position { get; } - - public AirshipVent? Left => _left?.Value; - - IVent? IVent.Left => Left; - - public AirshipVent? Center => _center?.Value; - - IVent? IVent.Center => Center; - - public AirshipVent? Right => _right?.Value; - - IVent? IVent.Right => Right; - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/Vents/MiraVent.cs b/src/Impostor.Api/Innersloth/Maps/Vents/MiraVent.cs deleted file mode 100644 index 81daddb..0000000 --- a/src/Impostor.Api/Innersloth/Maps/Vents/MiraVent.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Numerics; - -namespace Impostor.Api.Innersloth.Maps.Vents -{ - public class MiraVent : IVent - { - private readonly Lazy? _left; - - private readonly Lazy? _center; - - private readonly Lazy? _right; - - internal MiraVent(MiraData data, Ids id, Vector2 position, Ids? left = null, Ids? center = null, Ids? right = null) - { - Id = id; - Name = id.ToString(); - Position = position; - - _left = left == null ? null : new Lazy(() => data.Vents[left.Value]); - _center = center == null ? null : new Lazy(() => data.Vents[center.Value]); - _right = right == null ? null : new Lazy(() => data.Vents[right.Value]); - } - - public enum Ids - { - Balcony = 1, - Cafeteria = 2, - Reactor = 3, - Laboratory = 4, - Office = 5, - Admin = 6, - Greenhouse = 7, - Medbay = 8, - Decontamination = 9, - LockerRoom = 10, - Launchpad = 11, - } - - public Ids Id { get; } - - int IVent.Id => (int)Id; - - public string Name { get; } - - public Vector2 Position { get; } - - public MiraVent? Left => _left?.Value; - - IVent? IVent.Left => Left; - - public MiraVent? Center => _center?.Value; - - IVent? IVent.Center => Center; - - public MiraVent? Right => _right?.Value; - - IVent? IVent.Right => Right; - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/Vents/PolusVent.cs b/src/Impostor.Api/Innersloth/Maps/Vents/PolusVent.cs deleted file mode 100644 index 54b542a..0000000 --- a/src/Impostor.Api/Innersloth/Maps/Vents/PolusVent.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Numerics; - -namespace Impostor.Api.Innersloth.Maps.Vents -{ - public class PolusVent : IVent - { - private readonly Lazy? _left; - - private readonly Lazy? _center; - - private readonly Lazy? _right; - - internal PolusVent(PolusData data, Ids id, Vector2 position, Ids? left = null, Ids? center = null, Ids? right = null) - { - Id = id; - Name = id.ToString(); - Position = position; - - _left = left == null ? null : new Lazy(() => data.Vents[left.Value]); - _center = center == null ? null : new Lazy(() => data.Vents[center.Value]); - _right = right == null ? null : new Lazy(() => data.Vents[right.Value]); - } - - public enum Ids - { - Security = 0, - Electrical = 1, - O2 = 2, - Communications = 3, - Office = 4, - Admin = 5, - Laboratory = 6, - Lava = 7, - Storage = 8, - RightStabilizer = 9, - LeftStabilizer = 10, - OutsideAdmin = 11, - } - - public Ids Id { get; } - - int IVent.Id => (int)Id; - - public string Name { get; } - - public Vector2 Position { get; } - - public PolusVent? Left => _left?.Value; - - IVent? IVent.Left => Left; - - public PolusVent? Center => _center?.Value; - - IVent? IVent.Center => Center; - - public PolusVent? Right => _right?.Value; - - IVent? IVent.Right => Right; - } -} diff --git a/src/Impostor.Api/Innersloth/Maps/Vents/SkeldVent.cs b/src/Impostor.Api/Innersloth/Maps/Vents/SkeldVent.cs deleted file mode 100644 index 747b6fd..0000000 --- a/src/Impostor.Api/Innersloth/Maps/Vents/SkeldVent.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Numerics; - -namespace Impostor.Api.Innersloth.Maps.Vents -{ - public class SkeldVent : IVent - { - private readonly Lazy? _left; - - private readonly Lazy? _center; - - private readonly Lazy? _right; - - internal SkeldVent(SkeldData data, Ids id, Vector2 position, Ids? left = null, Ids? center = null, Ids? right = null) - { - Id = id; - Name = id.ToString(); - Position = position; - - _left = left == null ? null : new Lazy(() => data.Vents[left.Value]); - _center = center == null ? null : new Lazy(() => data.Vents[center.Value]); - _right = right == null ? null : new Lazy(() => data.Vents[right.Value]); - } - - public enum Ids - { - Admin = 0, - RightHallway = 1, - Cafeteria = 2, - Electrical = 3, - UpperEngine = 4, - Security = 5, - Medbay = 6, - Weapons = 7, - LowerReactor = 8, - LowerEngine = 9, - Shields = 10, - UpperReactor = 11, - UpperNavigation = 12, - LowerNavigation = 13, - } - - public Ids Id { get; } - - int IVent.Id => (int)Id; - - public string Name { get; } - - public Vector2 Position { get; } - - public SkeldVent? Left => _left?.Value; - - IVent? IVent.Left => Left; - - public SkeldVent? Center => _center?.Value; - - IVent? IVent.Center => Center; - - public SkeldVent? Right => _right?.Value; - - IVent? IVent.Right => Right; - } -} diff --git a/src/Impostor.Api/Innersloth/Platforms.cs b/src/Impostor.Api/Innersloth/Platforms.cs deleted file mode 100644 index c1b3b09..0000000 --- a/src/Impostor.Api/Innersloth/Platforms.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace Impostor.Api.Innersloth -{ - public enum Platforms - { - Unknown = 0, - StandaloneEpicPC = 1, - StandaloneSteamPC = 2, - StandaloneMac = 3, - StandaloneWin10 = 4, - StandaloneItch = 5, - IPhone = 6, - Android = 7, - Switch = 8, - Xbox = 9, - Playstation = 10, - } -} diff --git a/src/Impostor.Api/Innersloth/RoleTypes.cs b/src/Impostor.Api/Innersloth/RoleTypes.cs deleted file mode 100644 index 700d27a..0000000 --- a/src/Impostor.Api/Innersloth/RoleTypes.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Impostor.Api.Innersloth -{ - public enum RoleTypes : ushort - { - Crewmate, - Impostor, - Scientist, - Engineer, - GuardianAngel, - Shapeshifter, - CrewmateGhost, - ImpostorGhost, - } -} diff --git a/src/Impostor.Api/Innersloth/SystemTypes.cs b/src/Impostor.Api/Innersloth/SystemTypes.cs deleted file mode 100644 index 95864a8..0000000 --- a/src/Impostor.Api/Innersloth/SystemTypes.cs +++ /dev/null @@ -1,101 +0,0 @@ -namespace Impostor.Api.Innersloth -{ - public enum SystemTypes : byte - { - Hallway = 0, - - Storage = 1, - - Cafeteria = 2, - - Reactor = 3, - - UpperEngine = 4, - - Nav = 5, - - Admin = 6, - - Electrical = 7, - - LifeSupp = 8, - - Shields = 9, - - MedBay = 10, - - Security = 11, - - Weapons = 12, - - LowerEngine = 13, - - Comms = 14, - - ShipTasks = 15, - - Doors = 16, - - Sabotage = 17, - - /// The only decontamination on Mira and bottom decontamination on Polus. - Decontamination = 18, - - Launchpad = 19, - - LockerRoom = 20, - - Laboratory = 21, - - Balcony = 22, - - Office = 23, - - Greenhouse = 24, - - Dropship = 25, - - /// Top decontamination on Polus. - Decontamination2 = 26, - - Outside = 27, - - Specimens = 28, - - BoilerRoom = 29, - - VaultRoom = 30, - - Cockpit = 31, - - Armory = 32, - - Kitchen = 33, - - ViewingDeck = 34, - - HallOfPortraits = 35, - - CargoBay = 36, - - Ventilation = 37, - - Showers = 38, - - Engine = 39, - - Brig = 40, - - MeetingRoom = 41, - - Records = 42, - - Lounge = 43, - - GapRoom = 44, - - MainHall = 45, - - Medical = 46, - } -} diff --git a/src/Impostor.Api/Innersloth/TaskTypes.cs b/src/Impostor.Api/Innersloth/TaskTypes.cs deleted file mode 100644 index f5c056c..0000000 --- a/src/Impostor.Api/Innersloth/TaskTypes.cs +++ /dev/null @@ -1,67 +0,0 @@ -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, - PolishRuby = 43, - ResetBreakers = 44, - Decontaminate = 45, - MakeBurger = 46, - UnlockSafe = 47, - SortRecords = 48, - PutAwayPistols = 49, - FixShower = 50, - CleanToilet = 51, - DressMannequin = 52, - PickUpTowels = 53, - RewindTapes = 54, - StartFans = 55, - DevelopPhotos = 56, - GetBiggolSword = 57, - PutAwayRifles = 58, - StopCharles = 59, - VentCleaning = 60, - } -} diff --git a/src/Impostor.Api/Net/Inner/Objects/ITaskInfo.cs b/src/Impostor.Api/Net/Inner/Objects/ITaskInfo.cs index 95a56d2..62807b8 100644 --- a/src/Impostor.Api/Net/Inner/Objects/ITaskInfo.cs +++ b/src/Impostor.Api/Net/Inner/Objects/ITaskInfo.cs @@ -1,5 +1,5 @@ using System.Threading.Tasks; -using Impostor.Api.Innersloth; +using Impostor.Api.Innersloth.Maps; namespace Impostor.Api.Net.Inner.Objects { @@ -7,7 +7,7 @@ namespace Impostor.Api.Net.Inner.Objects { uint Id { get; } - ITask? Task { get; } + TaskData? Task { get; } bool Complete { get; } diff --git a/src/Impostor.Api/Net/Inner/RpcCalls.cs b/src/Impostor.Api/Net/Inner/RpcCalls.cs deleted file mode 100644 index c1fc727..0000000 --- a/src/Impostor.Api/Net/Inner/RpcCalls.cs +++ /dev/null @@ -1,51 +0,0 @@ -namespace Impostor.Api.Net.Inner -{ - public enum RpcCalls : byte - { - PlayAnimation = 0, - CompleteTask = 1, - SyncSettings = 2, - SetInfected = 3, - Exiled = 4, - CheckName = 5, - SetName = 6, - CheckColor = 7, - SetColor = 8, - ReportDeadBody = 11, - MurderPlayer = 12, - SendChat = 13, - StartMeeting = 14, - SetScanner = 15, - SendChatNote = 16, - SetStartCounter = 18, - EnterVent = 19, - ExitVent = 20, - SnapTo = 21, - Close = 22, - VotingComplete = 23, - CastVote = 24, - ClearVote = 25, - AddVote = 26, - CloseDoorsOfType = 27, - RepairSystem = 28, - SetTasks = 29, - ClimbLadder = 31, - UsePlatform = 32, - SendQuickChat = 33, - BootFromVent = 34, - UpdateSystem = 35, - SetLevel = 38, - SetHat = 39, - SetSkin = 40, - SetPet = 41, - SetVisor = 42, - SetNamePlate = 43, - SetRole = 44, - ProtectPlayer = 45, - Shapeshift = 46, - CheckMurder = 47, - CheckProtect = 48, - Pet = 49, - CancelPet = 50, - } -} diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc38SetLevel.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc38SetLevel.cs new file mode 100644 index 0000000..0ceca3b --- /dev/null +++ b/src/Impostor.Api/Net/Messages/Rpcs/Rpc38SetLevel.cs @@ -0,0 +1,15 @@ +namespace Impostor.Api.Net.Messages.Rpcs +{ + public static class Rpc38SetLevel + { + public static void Serialize(IMessageWriter writer, uint level) + { + writer.WritePacked(level); + } + + public static void Deserialize(IMessageReader reader, out uint level) + { + level = reader.ReadPackedUInt32(); + } + } +} diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc39SetHat.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc39SetHatStr.cs similarity index 89% rename from src/Impostor.Api/Net/Messages/Rpcs/Rpc39SetHat.cs rename to src/Impostor.Api/Net/Messages/Rpcs/Rpc39SetHatStr.cs index 6aa1399..1b5300a 100644 --- a/src/Impostor.Api/Net/Messages/Rpcs/Rpc39SetHat.cs +++ b/src/Impostor.Api/Net/Messages/Rpcs/Rpc39SetHatStr.cs @@ -1,6 +1,6 @@ namespace Impostor.Api.Net.Messages.Rpcs { - public static class Rpc39SetHat + public static class Rpc39SetHatStr { public static void Serialize(IMessageWriter writer, string hat) { diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc40SetSkin.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc40SetSkinStr.cs similarity index 88% rename from src/Impostor.Api/Net/Messages/Rpcs/Rpc40SetSkin.cs rename to src/Impostor.Api/Net/Messages/Rpcs/Rpc40SetSkinStr.cs index 929dab2..796be7a 100644 --- a/src/Impostor.Api/Net/Messages/Rpcs/Rpc40SetSkin.cs +++ b/src/Impostor.Api/Net/Messages/Rpcs/Rpc40SetSkinStr.cs @@ -1,6 +1,6 @@ namespace Impostor.Api.Net.Messages.Rpcs { - public static class Rpc40SetSkin + public static class Rpc40SetSkinStr { public static void Serialize(IMessageWriter writer, string skin) { diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc41SetPet.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc41SetPetStr.cs similarity index 89% rename from src/Impostor.Api/Net/Messages/Rpcs/Rpc41SetPet.cs rename to src/Impostor.Api/Net/Messages/Rpcs/Rpc41SetPetStr.cs index a3ddde1..03dfd3e 100644 --- a/src/Impostor.Api/Net/Messages/Rpcs/Rpc41SetPet.cs +++ b/src/Impostor.Api/Net/Messages/Rpcs/Rpc41SetPetStr.cs @@ -1,6 +1,6 @@ namespace Impostor.Api.Net.Messages.Rpcs { - public static class Rpc41SetPet + public static class Rpc41SetPetStr { public static void Serialize(IMessageWriter writer, string pet) { diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc42SetVisorStr.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc42SetVisorStr.cs new file mode 100644 index 0000000..bffcd33 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/Rpcs/Rpc42SetVisorStr.cs @@ -0,0 +1,15 @@ +namespace Impostor.Api.Net.Messages.Rpcs +{ + public static class Rpc42SetVisorStr + { + public static void Serialize(IMessageWriter writer, string visor) + { + writer.Write(visor); + } + + public static void Deserialize(IMessageReader reader, out string visor) + { + visor = reader.ReadString(); + } + } +} diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc43SetNamePlateStr.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc43SetNamePlateStr.cs new file mode 100644 index 0000000..e685c9e --- /dev/null +++ b/src/Impostor.Api/Net/Messages/Rpcs/Rpc43SetNamePlateStr.cs @@ -0,0 +1,15 @@ +namespace Impostor.Api.Net.Messages.Rpcs +{ + public static class Rpc43SetNamePlateStr + { + public static void Serialize(IMessageWriter writer, string namePlate) + { + writer.Write(namePlate); + } + + public static void Deserialize(IMessageReader reader, out string namePlate) + { + namePlate = reader.ReadString(); + } + } +} diff --git a/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs b/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs index 404e0a8..82630f9 100644 --- a/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs +++ b/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs @@ -1,6 +1,4 @@ using Impostor.Api.Events; -using Impostor.Api.Games; -using Impostor.Api.Innersloth; using Microsoft.Extensions.Logging; namespace Impostor.Plugins.Example.Handlers diff --git a/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs b/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs index 6370e5f..e85ab1f 100644 --- a/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs +++ b/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs @@ -111,19 +111,19 @@ namespace Impostor.Plugins.Example.Handlers [EventListener] public void OnPlayerEnterVentEvent(IPlayerEnterVentEvent e) { - _logger.LogInformation("Player {player} entered the vent in {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name); + _logger.LogInformation("Player {player} entered the vent in {vent} ({ventId})", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name, e.Vent.Id); } [EventListener] public void OnPlayerExitVentEvent(IPlayerExitVentEvent e) { - _logger.LogInformation("Player {player} exited the vent in {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name); + _logger.LogInformation("Player {player} exited the vent in {vent} ({ventId})", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name, e.Vent.Id); } [EventListener] public void OnPlayerVentEvent(IPlayerVentEvent e) { - _logger.LogInformation("Player {player} vented to {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.NewVent.Name); + _logger.LogInformation("Player {player} vented to {vent} ({ventId})", e.PlayerControl.PlayerInfo.PlayerName, e.NewVent.Name, e.NewVent.Id); } [EventListener] diff --git a/src/Impostor.Server/Events/Game/Player/PlayerEnterVentEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerEnterVentEvent.cs index b072dc7..db74f26 100644 --- a/src/Impostor.Server/Events/Game/Player/PlayerEnterVentEvent.cs +++ b/src/Impostor.Server/Events/Game/Player/PlayerEnterVentEvent.cs @@ -1,6 +1,6 @@ using Impostor.Api.Events.Player; using Impostor.Api.Games; -using Impostor.Api.Innersloth; +using Impostor.Api.Innersloth.Maps; using Impostor.Api.Net; using Impostor.Api.Net.Inner.Objects; @@ -8,7 +8,7 @@ namespace Impostor.Server.Events.Player { public class PlayerEnterVentEvent : IPlayerEnterVentEvent { - public PlayerEnterVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, IVent vent) + public PlayerEnterVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, VentData vent) { Game = game; ClientPlayer = sender; @@ -22,6 +22,6 @@ namespace Impostor.Server.Events.Player public IInnerPlayerControl PlayerControl { get; } - public IVent Vent { get; } + public VentData Vent { get; } } } diff --git a/src/Impostor.Server/Events/Game/Player/PlayerExitVentEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerExitVentEvent.cs index 2343c70..ea50908 100644 --- a/src/Impostor.Server/Events/Game/Player/PlayerExitVentEvent.cs +++ b/src/Impostor.Server/Events/Game/Player/PlayerExitVentEvent.cs @@ -1,6 +1,6 @@ using Impostor.Api.Events.Player; using Impostor.Api.Games; -using Impostor.Api.Innersloth; +using Impostor.Api.Innersloth.Maps; using Impostor.Api.Net; using Impostor.Api.Net.Inner.Objects; @@ -8,7 +8,7 @@ namespace Impostor.Server.Events.Player { public class PlayerExitVentEvent : IPlayerExitVentEvent { - public PlayerExitVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, IVent vent) + public PlayerExitVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, VentData vent) { Game = game; ClientPlayer = sender; @@ -22,6 +22,6 @@ namespace Impostor.Server.Events.Player public IInnerPlayerControl PlayerControl { get; } - public IVent Vent { get; } + public VentData Vent { get; } } } diff --git a/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs index 7cfdcd0..c80ab88 100644 --- a/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs +++ b/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs @@ -1,6 +1,6 @@ using Impostor.Api.Events.Player; using Impostor.Api.Games; -using Impostor.Api.Innersloth; +using Impostor.Api.Innersloth.Maps; using Impostor.Api.Net; using Impostor.Api.Net.Inner.Objects; @@ -8,7 +8,7 @@ namespace Impostor.Server.Events.Player { public class PlayerVentEvent : IPlayerVentEvent { - public PlayerVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, IVent vent) + public PlayerVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, VentData vent) { Game = game; ClientPlayer = sender; @@ -22,6 +22,6 @@ namespace Impostor.Server.Events.Player public IInnerPlayerControl PlayerControl { get; } - public IVent NewVent { get; } + public VentData NewVent { get; } } } diff --git a/src/Impostor.Server/Net/Client.cs b/src/Impostor.Server/Net/Client.cs index 48d8ea3..b2a928d 100644 --- a/src/Impostor.Server/Net/Client.cs +++ b/src/Impostor.Server/Net/Client.cs @@ -73,7 +73,7 @@ namespace Impostor.Server.Net if (game == null) { - await DisconnectAsync(DisconnectReason.GameMissing); + await DisconnectAsync(DisconnectReason.GameNotFound); return; } @@ -94,7 +94,7 @@ namespace Impostor.Server.Net var game = _gameManager.Find(gameCode); if (game == null) { - await DisconnectAsync(DisconnectReason.GameMissing); + await DisconnectAsync(DisconnectReason.GameNotFound); return; } diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerGameData.TaskInfo.cs b/src/Impostor.Server/Net/Inner/Objects/InnerGameData.TaskInfo.cs index 84a3761..b4a9620 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerGameData.TaskInfo.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerGameData.TaskInfo.cs @@ -1,5 +1,5 @@ using Impostor.Api.Events.Managers; -using Impostor.Api.Innersloth; +using Impostor.Api.Innersloth.Maps; using Impostor.Api.Net.Inner.Objects; namespace Impostor.Server.Net.Inner.Objects @@ -11,7 +11,7 @@ namespace Impostor.Server.Net.Inner.Objects private readonly InnerPlayerInfo _playerInfo; private readonly IEventManager _eventManager; - public TaskInfo(InnerPlayerInfo playerInfo, IEventManager eventManager, uint id, ITask? task) + public TaskInfo(InnerPlayerInfo playerInfo, IEventManager eventManager, uint id, TaskData? task) { _playerInfo = playerInfo; _eventManager = eventManager; @@ -21,7 +21,7 @@ namespace Impostor.Server.Net.Inner.Objects public uint Id { get; internal set; } - public ITask? Task { get; internal set; } + public TaskData? Task { get; internal set; } public bool Complete { get; internal set; } diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs b/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs index 79af789..207f131 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs @@ -114,7 +114,7 @@ namespace Impostor.Server.Net.Inner.Objects { switch (call) { - case RpcCalls.Close: + case RpcCalls.CloseMeeting: { if (!await ValidateHost(call, sender)) { diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.Api.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.Api.cs index 3a785bf..e4bd50a 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.Api.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.Api.cs @@ -41,7 +41,7 @@ namespace Impostor.Server.Net.Inner.Objects PlayerInfo.CurrentOutfit.HatId = hatId; using var writer = Game.StartRpc(NetId, RpcCalls.SetHat); - Rpc39SetHat.Serialize(writer, hatId); + Rpc39SetHatStr.Serialize(writer, hatId); await Game.FinishRpcAsync(writer); } @@ -50,7 +50,7 @@ namespace Impostor.Server.Net.Inner.Objects PlayerInfo.CurrentOutfit.PetId = petId; using var writer = Game.StartRpc(NetId, RpcCalls.SetPet); - Rpc41SetPet.Serialize(writer, petId); + Rpc41SetPetStr.Serialize(writer, petId); await Game.FinishRpcAsync(writer); } @@ -59,7 +59,7 @@ namespace Impostor.Server.Net.Inner.Objects PlayerInfo.CurrentOutfit.SkinId = skinId; using var writer = Game.StartRpc(NetId, RpcCalls.SetSkin); - Rpc40SetSkin.Serialize(writer, skinId); + Rpc40SetSkinStr.Serialize(writer, skinId); await Game.FinishRpcAsync(writer); } diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs index 06b0485..50a0874 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs @@ -201,47 +201,47 @@ namespace Impostor.Server.Net.Inner.Objects return await HandleSetColor(sender, color); } - case RpcCalls.SetHat: + case RpcCalls.SetHatStr: { if (!await ValidateOwnership(call, sender)) { return false; } - Rpc39SetHat.Deserialize(reader, out var hat); + Rpc39SetHatStr.Deserialize(reader, out var hat); return true; } - case RpcCalls.SetSkin: + case RpcCalls.SetSkinStr: { if (!await ValidateOwnership(call, sender)) { return false; } - Rpc40SetSkin.Deserialize(reader, out var skin); + Rpc40SetSkinStr.Deserialize(reader, out var skin); return true; } - case RpcCalls.SetVisor: + case RpcCalls.SetVisorStr: { if (!await ValidateOwnership(call, sender)) { return false; } - // Rpc42SetVistor.Deserialize(reader, out var visor); + Rpc42SetVisorStr.Deserialize(reader, out var visor); return true; } - case RpcCalls.SetNamePlate: + case RpcCalls.SetNamePlateStr: { if (!await ValidateOwnership(call, sender)) { return false; } - // Rpc43SetNamePlate.Deserialize(reader, out var namePlate); + Rpc43SetNamePlateStr.Deserialize(reader, out var namePlate); return true; } @@ -252,7 +252,7 @@ namespace Impostor.Server.Net.Inner.Objects return false; } - // Rpc38SetLevel.Deserialize(reader, out var level); + Rpc38SetLevel.Deserialize(reader, out var level); return true; } @@ -323,14 +323,14 @@ namespace Impostor.Server.Net.Inner.Objects break; } - case RpcCalls.SetPet: + case RpcCalls.SetPetStr: { if (!await ValidateOwnership(call, sender)) { return false; } - Rpc41SetPet.Deserialize(reader, out var pet); + Rpc41SetPetStr.Deserialize(reader, out var pet); return await HandleSetPet(sender, pet); } diff --git a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerAirshipStatus.cs b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerAirshipStatus.cs index 6ef1fa6..d46fa4b 100644 --- a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerAirshipStatus.cs +++ b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerAirshipStatus.cs @@ -1,8 +1,6 @@ -using System; using System.Collections.Generic; using System.Numerics; using Impostor.Api.Innersloth; -using Impostor.Api.Innersloth.Maps; using Impostor.Api.Net.Custom; using Impostor.Api.Net.Inner.Objects.ShipStatus; using Impostor.Server.Net.Inner.Objects.Systems; @@ -13,20 +11,10 @@ namespace Impostor.Server.Net.Inner.Objects.ShipStatus { internal class InnerAirshipStatus : InnerShipStatus, IInnerAirshipStatus { - public InnerAirshipStatus(ICustomMessageManager customMessageManager, Game game) : base(customMessageManager, game) + public InnerAirshipStatus(ICustomMessageManager customMessageManager, Game game) : base(customMessageManager, game, MapTypes.Airship) { } - public override IMapData Data => IMapData.Maps[MapTypes.Airship]; - - public override Dictionary Doors { get; } = new Dictionary(21); - - public override float SpawnRadius => throw new NotSupportedException(); - - public override Vector2 InitialSpawnCenter => throw new NotSupportedException(); - - public override Vector2 MeetingSpawnCenter => throw new NotSupportedException(); - public Vector2 PreSpawnLocation { get; } = new Vector2(-25f, 40f); public Vector2[] SpawnLocations { get; } = diff --git a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerFungleShipStatus.cs b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerFungleShipStatus.cs new file mode 100644 index 0000000..a868d7c --- /dev/null +++ b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerFungleShipStatus.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using Impostor.Api.Innersloth; +using Impostor.Api.Net.Custom; +using Impostor.Server.Net.Inner.Objects.Systems; +using Impostor.Server.Net.Inner.Objects.Systems.ShipStatus; +using Impostor.Server.Net.State; + +namespace Impostor.Server.Net.Inner.Objects.ShipStatus +{ + internal class InnerFungleShipStatus : InnerShipStatus + { + public InnerFungleShipStatus(ICustomMessageManager customMessageManager, Game game) : base(customMessageManager, game, MapTypes.Fungle) + { + } + + protected override void AddSystems(Dictionary systems) + { + base.AddSystems(systems); + + systems.Add(SystemTypes.Comms, new HudOverrideSystemType()); + systems.Add(SystemTypes.Reactor, new ReactorSystemType()); + systems.Add(SystemTypes.Doors, new DoorsSystemType(Doors)); + // systems.Add(SystemTypes.MushroomMixupSabotage, ); + } + } +} diff --git a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerMiraShipStatus.cs b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerMiraShipStatus.cs index a75167d..a8370b4 100644 --- a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerMiraShipStatus.cs +++ b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerMiraShipStatus.cs @@ -1,7 +1,5 @@ using System.Collections.Generic; -using System.Numerics; using Impostor.Api.Innersloth; -using Impostor.Api.Innersloth.Maps; using Impostor.Api.Net.Custom; using Impostor.Api.Net.Inner.Objects.ShipStatus; using Impostor.Server.Net.Inner.Objects.Systems; @@ -12,20 +10,10 @@ namespace Impostor.Server.Net.Inner.Objects.ShipStatus { internal class InnerMiraShipStatus : InnerShipStatus, IInnerMiraShipStatus { - public InnerMiraShipStatus(ICustomMessageManager customMessageManager, Game game) : base(customMessageManager, game) + public InnerMiraShipStatus(ICustomMessageManager customMessageManager, Game game) : base(customMessageManager, game, MapTypes.MiraHQ) { } - public override IMapData Data => IMapData.Maps[MapTypes.MiraHQ]; - - public override Dictionary Doors { get; } = new Dictionary(0); - - public override float SpawnRadius => 1.55f; - - public override Vector2 InitialSpawnCenter { get; } = new Vector2(-4.4f, 2.2f); - - public override Vector2 MeetingSpawnCenter { get; } = new Vector2(24.043f, 1.72f); - protected override void AddSystems(Dictionary systems) { base.AddSystems(systems); diff --git a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerPolusShipStatus.cs b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerPolusShipStatus.cs index 4ba0490..819ccf0 100644 --- a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerPolusShipStatus.cs +++ b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerPolusShipStatus.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.Numerics; using Impostor.Api.Innersloth; -using Impostor.Api.Innersloth.Maps; using Impostor.Api.Net.Custom; using Impostor.Api.Net.Inner.Objects.ShipStatus; using Impostor.Server.Net.Inner.Objects.Systems; @@ -12,22 +11,10 @@ namespace Impostor.Server.Net.Inner.Objects.ShipStatus { internal class InnerPolusShipStatus : InnerShipStatus, IInnerPolusShipStatus { - public InnerPolusShipStatus(ICustomMessageManager customMessageManager, Game game) : base(customMessageManager, game) + public InnerPolusShipStatus(ICustomMessageManager customMessageManager, Game game) : base(customMessageManager, game, MapTypes.Polus) { } - public override IMapData Data => IMapData.Maps[MapTypes.Polus]; - - public override Dictionary Doors { get; } = new Dictionary(12); - - public override float SpawnRadius => 1f; - - public override Vector2 InitialSpawnCenter { get; } = new Vector2(16.64f, -2.46f); - - public override Vector2 MeetingSpawnCenter { get; } = new Vector2(17.4f, -16.286f); - - public Vector2 MeetingSpawnCenter2 { get; } = new Vector2(17.4f, -17.515f); - public override Vector2 GetSpawnLocation(InnerPlayerControl player, int numPlayers, bool initialSpawn) { if (initialSpawn) @@ -39,11 +26,11 @@ namespace Impostor.Server.Net.Inner.Objects.ShipStatus var spawnId = player.PlayerId % 15; if (player.PlayerId < halfPlayers) { - return this.MeetingSpawnCenter + (new Vector2(0.6f, 0) * spawnId); + return Data.MeetingSpawnCenter + (new Vector2(0.6f, 0) * spawnId); } else { - return this.MeetingSpawnCenter2 + (new Vector2(0.6f, 0) * (spawnId - halfPlayers)); + return Data.MeetingSpawnCenter2 + (new Vector2(0.6f, 0) * (spawnId - halfPlayers)); } } diff --git a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerShipStatus.cs b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerShipStatus.cs index e961460..c81cd8b 100644 --- a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerShipStatus.cs +++ b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerShipStatus.cs @@ -21,20 +21,20 @@ namespace Impostor.Server.Net.Inner.Objects.ShipStatus { private readonly Dictionary _systems = new Dictionary(); - protected InnerShipStatus(ICustomMessageManager customMessageManager, Game game) : base(customMessageManager, game) + protected InnerShipStatus(ICustomMessageManager customMessageManager, Game game, MapTypes mapType) : base(customMessageManager, game) { Components.Add(this); - } - - public abstract IMapData Data { get; } - public abstract Dictionary Doors { get; } + MapType = mapType; + Data = MapData.Maps[mapType]; + Doors = new Dictionary(Data.Doors.Count); + } - public abstract float SpawnRadius { get; } + public MapTypes MapType { get; } - public abstract Vector2 InitialSpawnCenter { get; } + public MapData Data { get; } - public abstract Vector2 MeetingSpawnCenter { get; } + public Dictionary Doors { get; } internal override ValueTask OnSpawnAsync() { @@ -110,8 +110,8 @@ namespace Impostor.Server.Net.Inner.Objects.ShipStatus { var vector = new Vector2(0, 1); vector = Rotate(vector, (player.PlayerId - 1) * (360f / numPlayers)); - vector *= this.SpawnRadius; - return (initialSpawn ? this.InitialSpawnCenter : this.MeetingSpawnCenter) + vector + new Vector2(0f, 0.3636f); + vector *= Data.SpawnRadius; + return (initialSpawn ? Data.InitialSpawnCenter : Data.MeetingSpawnCenter) + vector + new Vector2(0f, 0.3636f); } protected virtual void AddSystems(Dictionary systems) diff --git a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerSkeldShipStatus.cs b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerSkeldShipStatus.cs index 09523c1..c243ac0 100644 --- a/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerSkeldShipStatus.cs +++ b/src/Impostor.Server/Net/Inner/Objects/ShipStatus/InnerSkeldShipStatus.cs @@ -1,7 +1,5 @@ using System.Collections.Generic; -using System.Numerics; using Impostor.Api.Innersloth; -using Impostor.Api.Innersloth.Maps; using Impostor.Api.Net.Custom; using Impostor.Api.Net.Inner.Objects.ShipStatus; using Impostor.Server.Net.Inner.Objects.Systems; @@ -12,20 +10,10 @@ namespace Impostor.Server.Net.Inner.Objects.ShipStatus { internal class InnerSkeldShipStatus : InnerShipStatus, IInnerSkeldShipStatus { - public InnerSkeldShipStatus(ICustomMessageManager customMessageManager, Game game) : base(customMessageManager, game) + public InnerSkeldShipStatus(ICustomMessageManager customMessageManager, Game game) : base(customMessageManager, game, MapTypes.Skeld) { } - public override IMapData Data { get; } = IMapData.Maps[MapTypes.Skeld]; - - public override Dictionary Doors { get; } = new Dictionary(13); - - public override float SpawnRadius => 1.6f; - - public override Vector2 InitialSpawnCenter { get; } = new Vector2(-0.72f, 0.62f); - - public override Vector2 MeetingSpawnCenter { get; } = new Vector2(-0.72f, 0.62f); - protected override void AddSystems(Dictionary systems) { base.AddSystems(systems); diff --git a/src/Impostor.Server/Net/State/Game.Data.cs b/src/Impostor.Server/Net/State/Game.Data.cs index 02a7438..000ffd1 100644 --- a/src/Impostor.Server/Net/State/Game.Data.cs +++ b/src/Impostor.Server/Net/State/Game.Data.cs @@ -30,19 +30,20 @@ namespace Impostor.Server.Net.State /// private const int CurrentClient = -3; - private static readonly Type[] SpawnableObjects = + private static readonly Dictionary SpawnableObjects = new() { - typeof(InnerSkeldShipStatus), - typeof(InnerMeetingHud), - typeof(InnerLobbyBehaviour), - typeof(InnerGameData), - typeof(InnerPlayerControl), - typeof(InnerMiraShipStatus), - typeof(InnerPolusShipStatus), - typeof(InnerSkeldShipStatus), // April fools skeld - typeof(InnerAirshipStatus), - typeof(InnerHideAndSeekManager), - typeof(InnerNormalGameManager), + [0] = typeof(InnerSkeldShipStatus), + [1] = typeof(InnerMeetingHud), + [2] = typeof(InnerLobbyBehaviour), + [3] = typeof(InnerGameData), + [4] = typeof(InnerPlayerControl), + [5] = typeof(InnerMiraShipStatus), + [6] = typeof(InnerPolusShipStatus), + [7] = typeof(InnerShipStatus), + [8] = typeof(InnerAirshipStatus), + [9] = typeof(InnerHideAndSeekManager), + [10] = typeof(InnerNormalGameManager), + [13] = typeof(InnerFungleShipStatus), }; private readonly List _allObjects = new List(); @@ -130,9 +131,9 @@ namespace Impostor.Server.Net.State } var objectId = reader.ReadPackedUInt32(); - if (objectId < SpawnableObjects.Length) + if (SpawnableObjects.TryGetValue(objectId, out var spawnableObjectType)) { - var innerNetObject = (InnerNetObject)ActivatorUtilities.CreateInstance(_serviceProvider, SpawnableObjects[objectId], this); + var innerNetObject = (InnerNetObject)ActivatorUtilities.CreateInstance(_serviceProvider, spawnableObjectType, this); var ownerClientId = reader.ReadPackedInt32(); innerNetObject.SpawnFlags = (SpawnFlags)reader.ReadByte(); diff --git a/src/Impostor.sln b/src/Impostor.sln index 822f28a..f300e81 100644 --- a/src/Impostor.sln +++ b/src/Impostor.sln @@ -29,6 +29,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Plugins.Example", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Benchmarks", "Impostor.Benchmarks\Impostor.Benchmarks.csproj", "{EA04E386-6CCB-4C52-8C82-64F32C7EB377}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Api.Innersloth.Generator", "Impostor.Api.Innersloth.Generator\Impostor.Api.Innersloth.Generator.csproj", "{8B6C3AC5-E2B2-49F8-854D-22DFB4AB3D31}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -117,6 +119,14 @@ Global {EA04E386-6CCB-4C52-8C82-64F32C7EB377}.Release|Any CPU.Build.0 = Release|Any CPU {EA04E386-6CCB-4C52-8C82-64F32C7EB377}.Release|x86.ActiveCfg = Release|Any CPU {EA04E386-6CCB-4C52-8C82-64F32C7EB377}.Release|x86.Build.0 = Release|Any CPU + {8B6C3AC5-E2B2-49F8-854D-22DFB4AB3D31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B6C3AC5-E2B2-49F8-854D-22DFB4AB3D31}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B6C3AC5-E2B2-49F8-854D-22DFB4AB3D31}.Debug|x86.ActiveCfg = Debug|Any CPU + {8B6C3AC5-E2B2-49F8-854D-22DFB4AB3D31}.Debug|x86.Build.0 = Debug|Any CPU + {8B6C3AC5-E2B2-49F8-854D-22DFB4AB3D31}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B6C3AC5-E2B2-49F8-854D-22DFB4AB3D31}.Release|Any CPU.Build.0 = Release|Any CPU + {8B6C3AC5-E2B2-49F8-854D-22DFB4AB3D31}.Release|x86.ActiveCfg = Release|Any CPU + {8B6C3AC5-E2B2-49F8-854D-22DFB4AB3D31}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE -- 2.39.5