Compare commits

..
Author SHA1 Message Date
miniduikboot df65330e0b Allow players to send RPC SnapTo when spawning in
Starting from the Fungle updates clients have started doing this on some
maps:
- Skeld works properly on this map
- Mira fails on the spawn position check
- Polus doesn't have this change yet
- Airship doesn't snap out of bounds anymore???
2023-11-21 16:43:35 +01:00
js6pak 4de7c26880 Source generate map data and enums 2023-11-19 20:02:58 +01:00
miniduikboot 66763a4066 Merge pull request #549 from Impostor/feature/2023.10.24
Feature/2023.10.24
2023-11-17 22:08:18 +01:00
js6pak 132b7f0b87 Revert the rpc debug log 2023-11-17 20:05:50 +01:00
miniduikboot c592bd1a9e Debounce CheckMurder calls
In games where players have a high ping, they can get disconnected if
they try and murder a player twice. If a player tries to kill a player
again while they are still under a cooldown from their previous kill,
cancel their request if the game is server authoritive and don't process
it anymore if the game is host authoritive
2023-11-16 17:55:50 +01:00
js6pak 104237b439 Fix host authoritive murder 2023-11-12 21:33:54 +01:00
miniduikboot acb923e3a3 Fix SA1629 violations 2023-11-10 19:11:46 +01:00
miniduikboot d4342dee35 Actually implement CNT serialization 2023-11-10 19:11:46 +01:00
miniduikbootandjs6pak 86423a0b3c Update src/Impostor.Server/Net/State/Game.cs
Co-authored-by: js6pak <kubastaron@hotmail.com>
2023-11-10 16:13:10 +01:00
miniduikboot 21d1333b08 Make API remarks show up in the documentation
Some xmldoc processors don't process stuff that is not inside a remarks
tag, so we add them here.
2023-11-10 15:41:48 +01:00
js6pak f34a90d20c Remove RepairSystem 2023-11-10 15:29:31 +01:00
miniduikboot b65f139eff Bump priority of the unsupported version logging
Currently this only gives an error message on the client but doesn't
send extra details to the server log in the default setup
2023-11-10 14:43:55 +01:00
js6pak 87c7e3922a Fix InnerNetObject writing in rpcs 2023-11-10 12:33:26 +01:00
miniduikboot b67ca158ea Refresh Murder Event API
- IPlayerCheckMurderEvent now exists
- You can see if a kill was successful with IPlayerMurderEvent
- You can now see if host authority was requested with Game.IsHostAuthoritive
2023-10-29 00:37:30 +02:00
miniduikboot 946d7e2164 Implement server side guardian angel 2023-10-28 23:05:28 +02:00
miniduikboot b038d0e098 Cleanup previous commit 2023-10-27 00:00:21 +02:00
miniduikboot 821a2248a7 Fix MurderPlayer for vanilla clients
In 2023.10.24, vanilla started expecting that CheckMurder is handled on
the server. That is, unless the host is modded, then CheckMurder calls
are handled by the host as before
2023-10-26 23:14:09 +02:00
miniduikboot 3d60cf58a9 Skip deserializing the UpdateSystem RPC for now
Innersloth merged RepairSystem and UpdateSystem into one RPC and the
decoding now depends on *which* system is being deserialized.
2023-10-25 22:29:39 +02:00
miniduikboot fd2d457e6b Clean up stuff for old versions 2023-10-25 21:37:38 +02:00
miniduikboot 5c31df8c05 Cleanup code 2023-10-25 21:37:29 +02:00
miniduikboot b0901507f7 Rework CustomNetworkTransform
Innersloth has changed CNT from position/velocity to a queue of
positions. As a result, drop the velocity as well.

We're currently not tracking the current position of the player, so
we're just storing the last one
2023-10-25 21:28:03 +02:00
miniduikboot 29a55d704b Add 10.24 and drop the rest
We had a nice year of backwards compatibility, but the changes in Fungle
are large enough that dropping support for old versions is the only
logical path forward
2023-10-25 21:26:40 +02:00
miniduikbootandjs6pak 2129725744 Improve cross-compatibility (#534)
Co-authored-by: js6pak <me@6pak.dev>
2023-10-06 14:52:16 +02:00
154 changed files with 9294 additions and 1618 deletions

No files matched your search

+2
View File
@@ -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.
+1 -1
View File
@@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<LangVersion>11</LangVersion>
<VersionPrefix>1.8.4</VersionPrefix>
<VersionPrefix>1.9.0</VersionPrefix>
<VersionSuffix>dev</VersionSuffix>
<EnforceCodeStyleInBuild Condition="$(MSBuildProjectName)!='Hazel'">true</EnforceCodeStyleInBuild>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
@@ -0,0 +1,11 @@
using System.Numerics;
namespace Impostor.Api.Innersloth.Generator;
internal static class Extensions
{
public static string ToCSharpString(this Vector2 value)
{
return $"new Vector2({value.X}f, {value.Y}f)";
}
}
@@ -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;
}
}
@@ -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<Dictionary<string, long>>(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);
}
}
@@ -0,0 +1,210 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
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<T>(string name, string fileName)
{
return JsonSerializer.Deserialize<T>(
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<SpawnInfo>(name, "spawn")!;
var tasks = Deserialize<Dictionary<int, TaskInfo>>(name, "tasks")!;
var vents = Deserialize<Dictionary<int, VentInfo>>(name, "vents")!;
var doors = Deserialize<Dictionary<int, DoorInfo>>(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 + "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<CodeWriter> _body;
public DictionaryData(string keyType, string valueType, string name, Action<CodeWriter> body)
{
_keyType = keyType;
_valueType = valueType;
_name = name;
_body = body;
}
public DictionaryData(string valueType, string name, Action<CodeWriter> 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 HudText { 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; }
}
}
@@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>latest</LangVersion>
<DebugType>embedded</DebugType>
<Nullable>enable</Nullable>
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" />
<PackageReference Include="PolySharp" Version="1.13.2" PrivateAssets="all" />
<PackageReference Include="System.Text.Json" Version="7.0.3" Private="true" GeneratePathProperty="true" />
<PackageReference Include="CSharpPoet" Version="0.3.0" Private="true" GeneratePathProperty="true" />
</ItemGroup>
<PropertyGroup>
<GetTargetPathDependsOn>$(GetTargetPathDependsOn);GetDependencyTargetPaths</GetTargetPathDependsOn>
</PropertyGroup>
<Target Name="GetDependencyTargetPaths">
<ItemGroup>
<TargetPathWithTargetPlatformMoniker Include="$(PkgSystem_Text_Json)\lib\netstandard2.0\System.Text.Json.dll" IncludeRuntimeDependency="false" />
<TargetPathWithTargetPlatformMoniker Include="$(PkgCSharpPoet)\lib\netstandard2.0\CSharpPoet.dll" IncludeRuntimeDependency="false" />
</ItemGroup>
</Target>
</Project>
@@ -0,0 +1,9 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"Generator": {
"commandName": "DebugRoslynComponent",
"targetProject": "../Impostor.Api/Impostor.Api.csproj"
}
}
}
@@ -0,0 +1,71 @@
using System;
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 record struct Options(string ProjectDirectory);
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);
});
var filesProvider = context.AdditionalTextsProvider.Combine(optionsProvider)
.Where(static pair =>
{
var (file, options) = pair;
return file.Path.StartsWith(options.ProjectDirectory) &&
file.Path[options.ProjectDirectory.Length..].StartsWith("Innersloth/Data/") &&
file.Path.EndsWith(".json");
})
.Select(static (pair, cancellationToken) =>
{
var (file, options) = pair;
return (
RelativePath: file.Path[(options.ProjectDirectory.Length + "Innersloth/Data/".Length)..],
Content: file.GetText(cancellationToken)!.ToString()
);
})
.Collect();
context.RegisterSourceOutput(filesProvider, (spc, files) =>
{
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);
}
});
}
}
@@ -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<Vector2>
{
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();
}
}
@@ -0,0 +1,155 @@
{
"version": 1,
"dependencies": {
".NETStandard,Version=v2.0": {
"CSharpPoet": {
"type": "Direct",
"requested": "[0.3.0, )",
"resolved": "0.3.0",
"contentHash": "3QDh9rMuiNhMtNWOLj0FItiZruON7lj3zD0CXC9IHq4JWpF5OjbaZ2s1X0u6gftE73KCoTezXIgKvxacps78Fw=="
},
"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.13.2, )",
"resolved": "1.13.2",
"contentHash": "XwNhfkr7IeUiH8AE4pzob8YioxfL6nxgAx+fHEeWCObY/NZuBMfWLh39FznXbneKvagiqeeI7quIvZ6P1eVaEA=="
},
"System.Text.Json": {
"type": "Direct",
"requested": "[7.0.3, )",
"resolved": "7.0.3",
"contentHash": "AyjhwXN1zTFeIibHimfJn6eAsZ7rTBib79JQpzg8WAuR/HKDu9JGNHTuu3nbbXQ/bgI+U4z6HtZmCHNXB1QXrQ==",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "7.0.0",
"System.Buffers": "4.5.1",
"System.Memory": "4.5.5",
"System.Numerics.Vectors": "4.5.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
"System.Text.Encodings.Web": "7.0.0",
"System.Threading.Tasks.Extensions": "4.5.4"
}
},
"Microsoft.Bcl.AsyncInterfaces": {
"type": "Transitive",
"resolved": "7.0.0",
"contentHash": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==",
"dependencies": {
"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.5.0",
"contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
},
"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.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "7.0.0",
"contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
"dependencies": {
"System.Buffers": "4.5.1",
"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"
}
}
}
}
}
@@ -0,0 +1,31 @@
using Impostor.Api.Innersloth;
using Impostor.Api.Net.Inner.Objects;
namespace Impostor.Api.Events.Player
{
/// <summary>
/// Event that allows changing or canceling an upcoming player murder.
/// </summary>
/// <remarks>
/// Note that this event only triggers if the Host of the Game did not disable server authority.
///
/// If you want to get an event after the murder took place, listen to <see cref="IPlayerMurderEvent"/>.
/// </remarks>
public interface IPlayerCheckMurderEvent : IPlayerEvent, IEventCancelable
{
/// <summary>
/// Gets the player who will be murdered.
/// </summary>
IInnerPlayerControl Victim { get; }
/// <summary>
/// Gets or sets the result of this event.
/// </summary>
/// <remarks>
/// Its initial value is what would have happened in the normal game flow.
/// - If set to Succeeded, the Victim will die.
/// - If set to FailedProtected, the Victim will be protected with a shield animation and the attacker will have a cooldown set.
/// </remarks>
MurderResultFlags Result { get; set; }
}
}
@@ -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
/// <summary>
/// Gets the entered vent.
/// </summary>
public IVent Vent { get; }
public VentData Vent { get; }
}
}
@@ -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
/// <summary>
/// Gets the exited vent.
/// </summary>
public IVent Vent { get; }
public VentData Vent { get; }
}
}
@@ -1,12 +1,30 @@
using Impostor.Api.Innersloth;
using Impostor.Api.Net.Inner.Objects;
namespace Impostor.Api.Events.Player
{
/// <summary>
/// Event that is called when a player is killed by another player.
/// </summary>
/// <remarks>
/// This event works regardless of server authority is enabled or not.
///
/// If you want to cancel this kill, listen to <see cref="IPlayerCheckMurderEvent"/>.
/// If you want to know about players that were voted out, listed to <see cref="IPlayerExileEvent"/>.
/// </remarks>
public interface IPlayerMurderEvent : IPlayerEvent
{
/// <summary>
/// Gets the player who got murdered.
/// </summary>
IInnerPlayerControl Victim { get; }
/// <summary>
/// Gets the result of the event.
/// </summary>
/// <remarks>
/// Note that if FailedError or FailedProtected is set, the kill did not take place.
/// </remarks>
MurderResultFlags Result { get; }
}
}
@@ -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
/// <summary>
/// Gets the vent player moved to.
/// </summary>
public IVent NewVent { get; }
public VentData NewVent { get; }
}
}
@@ -0,0 +1,11 @@
using Impostor.Api.Innersloth;
namespace Impostor.Api;
public static class MurderResultFlagsExtensions
{
public static bool IsFailed(this MurderResultFlags value)
{
return (value & (MurderResultFlags.FailedError | MurderResultFlags.FailedProtected)) != 0;
}
}
+8
View File
@@ -39,6 +39,14 @@ namespace Impostor.Api.Games
int HostId { get; }
/// <summary>
/// Gets a value indicating whether the Host of the game has requested host authority.
/// </summary>
/// <remarks>
/// Vanilla Among Us does not request this, but certain client-side mods will.
/// </remarks>
bool IsHostAuthoritive { get; }
IClientPlayer? GetClientPlayer(int clientId);
T? FindObjectByNetId<T>(uint netId)
+3
View File
@@ -29,6 +29,9 @@
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="7.0.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.435" PrivateAssets="all" />
<PackageReference Include="Impostor.Hazel.Abstractions" Version="1.0.0" />
<ProjectReference Include="..\Impostor.Api.Innersloth.Generator\Impostor.Api.Innersloth.Generator.csproj" ReferenceOutputAssembly="false" OutputItemType="Analyzer" />
<AdditionalFiles Include="Innersloth/Data/**/*.json" />
</ItemGroup>
</Project>
@@ -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,
}
}
@@ -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"
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -0,0 +1,11 @@
{
"HumansByVote": 0,
"HumansByTask": 1,
"ImpostorByVote": 2,
"ImpostorByKill": 3,
"ImpostorBySabotage": 4,
"ImpostorDisconnect": 5,
"HumansDisconnect": 6,
"HideAndSeek_ByTimer": 7,
"HideAndSeek_ByKills": 8
}
@@ -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
}
@@ -0,0 +1,10 @@
{
"Crewmate": 0,
"Impostor": 1,
"Scientist": 2,
"Engineer": 3,
"GuardianAngel": 4,
"Shapeshifter": 5,
"CrewmateGhost": 6,
"ImpostorGhost": 7
}
@@ -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
}
File diff suppressed because it is too large. Load diff
@@ -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
}
@@ -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
}
@@ -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
}
@@ -0,0 +1,5 @@
{
"dumpostorVersion": "1.0.0",
"gameVersion": "2023.10.24",
"platformType": "StandaloneSteamPC"
}
@@ -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
}
}
}
@@ -0,0 +1,15 @@
{
"initialSpawnCenter": {
"x": -25,
"y": 40
},
"meetingSpawnCenter": {
"x": 20,
"y": 9
},
"meetingSpawnCenter2": {
"x": 20,
"y": 9
},
"spawnRadius": 1.55
}
@@ -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"
}
File diff suppressed because it is too large. Load diff
@@ -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
}
}
@@ -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
}
}
}
@@ -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
}
@@ -0,0 +1,11 @@
{
"Electrical": "SwitchSystem",
"MedBay": "MedScanSystem",
"Doors": "AutoDoorsSystemType",
"Comms": "HudOverrideSystemType",
"Security": "SecurityCameraSystemType",
"Reactor": "ReactorSystemType",
"LifeSupp": "LifeSuppSystemType",
"Ventilation": "VentilationSystem",
"Sabotage": "SabotageSystemType"
}
@@ -0,0 +1,509 @@
{
"0": {
"type": "NormalPlayerTask",
"taskType": "SwipeCard",
"hudText": "Admin: Swipe Card",
"length": "Common",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": -5.6352005,
"y": -8.632801
},
"usableDistance": 1
}
]
},
"1": {
"type": "NormalPlayerTask",
"taskType": "FixWiring",
"hudText": "Electrical: Fix Wiring (0/3)",
"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",
"hudText": "Weapons: Clear Asteroids (0/20)",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Weapons",
"position": {
"x": -9.087601,
"y": 1.812
},
"usableDistance": 1.2
}
]
},
"3": {
"type": "NormalPlayerTask",
"taskType": "AlignEngineOutput",
"hudText": "Upper Engine: Align Engine Output (0/2)",
"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",
"hudText": "MedBay: Submit Scan",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "MedBay",
"position": {
"x": 7.3284,
"y": -5.2476006
},
"usableDistance": 1
}
]
},
"5": {
"type": "NormalPlayerTask",
"taskType": "InspectSample",
"hudText": "MedBay: Inspect Sample",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "MedBay",
"position": {
"x": 6.144,
"y": -4.2599998
},
"usableDistance": 1
}
]
},
"6": {
"type": "NormalPlayerTask",
"taskType": "FuelEngines",
"hudText": "Storage: Fuel Engines (0/2)",
"length": "Long",
"consoles": []
},
"7": {
"type": "NormalPlayerTask",
"taskType": "StartReactor",
"hudText": "Reactor: Start Reactor",
"length": "Long",
"consoles": [
{
"id": 2,
"room": "Reactor",
"position": {
"x": 21.792,
"y": -5.5728
},
"usableDistance": 1
}
]
},
"8": {
"type": "NormalPlayerTask",
"taskType": "EmptyChute",
"hudText": "O2: Empty Chute (0/2)",
"length": "Long",
"consoles": []
},
"9": {
"type": "NormalPlayerTask",
"taskType": "EmptyGarbage",
"hudText": "Cafeteria: Empty Garbage (0/2)",
"length": "Long",
"consoles": []
},
"10": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Communications: Download Data (0/2) ",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": -2.5079997,
"y": -6.2652006
},
"usableDistance": 1
}
]
},
"11": {
"type": "NormalPlayerTask",
"taskType": "CalibrateDistributor",
"hudText": "Electrical: Calibrate Distributor",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": 5.8644004,
"y": -7.4772
},
"usableDistance": 1
}
]
},
"12": {
"type": "NormalPlayerTask",
"taskType": "ChartCourse",
"hudText": "Navigation: Chart Course",
"length": "Short",
"consoles": []
},
"13": {
"type": "NormalPlayerTask",
"taskType": "CleanO2Filter",
"hudText": "O2: Clean O2 Filter",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "LifeSupp",
"position": {
"x": -5.7432,
"y": -2.9772
},
"usableDistance": 0.8
}
]
},
"14": {
"type": "NormalPlayerTask",
"taskType": "UnlockManifolds",
"hudText": "Reactor: Unlock Manifolds",
"length": "Short",
"consoles": [
{
"id": 2,
"room": "Reactor",
"position": {
"x": 22.536001,
"y": -2.4996
},
"usableDistance": 1
}
]
},
"15": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Electrical: Download Data (0/2) ",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": -2.5079997,
"y": -6.2652006
},
"usableDistance": 1
}
]
},
"16": {
"type": "NormalPlayerTask",
"taskType": "StabilizeSteering",
"hudText": "Navigation: Stabilize Steering",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Nav",
"position": {
"x": -18.732,
"y": -4.728
},
"usableDistance": 1.25
}
]
},
"17": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Weapons: Download Data (0/2) ",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": -2.5079997,
"y": -6.2652006
},
"usableDistance": 1
}
]
},
"18": {
"type": "NormalPlayerTask",
"taskType": "PrimeShields",
"hudText": "Shields: Prime Shields",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Shields",
"position": {
"x": -7.526399,
"y": -13.981199
},
"usableDistance": 1
}
]
},
"19": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Cafeteria: Download Data (0/2) ",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": -2.5079997,
"y": -6.2652006
},
"usableDistance": 1
}
]
},
"20": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Navigation: Download Data (0/2) ",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": -2.5079997,
"y": -6.2652006
},
"usableDistance": 1
}
]
},
"21": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Shields (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": 9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"22": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Weapons (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": 9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"23": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Communications (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": 9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"24": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Upper Engine (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": 9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"25": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to O2 (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": 9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"26": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Navigation (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": 9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"27": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Lower Engine (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": 9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"28": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Security (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": 9,
"y": -7.2936006
},
"usableDistance": 1
}
]
}
}
@@ -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
}
}
@@ -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
}
}
}
@@ -0,0 +1,15 @@
{
"initialSpawnCenter": {
"x": -9.81,
"y": 1
},
"meetingSpawnCenter": {
"x": -3,
"y": -2.1
},
"meetingSpawnCenter2": {
"x": 0,
"y": 0
},
"spawnRadius": 1.5
}
@@ -0,0 +1,8 @@
{
"Ventilation": "VentilationSystem",
"Comms": "HqHudSystemType",
"Reactor": "ReactorSystemType",
"Doors": "DoorsSystemType",
"MushroomMixupSabotage": "MushroomMixupSabotageSystem",
"Sabotage": "SabotageSystemType"
}
@@ -0,0 +1,549 @@
{
"0": {
"type": "NormalPlayerTask",
"taskType": "CollectSamples",
"hudText": "Jungle: Collect Samples (0/2)",
"length": "Common",
"consoles": [
{
"id": 0,
"room": "Laboratory",
"position": {
"x": -6.373,
"y": -8.884999
},
"usableDistance": 1
}
]
},
"1": {
"type": "NormalPlayerTask",
"taskType": "EnterIdCode",
"hudText": "Lookout: Enter Id Code",
"length": "Common",
"consoles": [
{
"id": 1,
"room": "Lookout",
"position": {
"x": 8.446,
"y": 5.27
},
"usableDistance": 1
}
]
},
"2": {
"type": "NormalPlayerTask",
"taskType": "ReplaceParts",
"hudText": "Reactor: Replace Parts (0/2)",
"length": "Common",
"consoles": []
},
"3": {
"type": "NormalPlayerTask",
"taskType": "RoastMarshmallow",
"hudText": "Beach: Collect Stick (0/2)",
"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",
"hudText": "Dock: Catch Fish (0/2)",
"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",
"hudText": "Greenhouse: Collect Vegetables (0/2)",
"length": "Long",
"consoles": []
},
"6": {
"type": "NormalPlayerTask",
"taskType": "ExtractFuel",
"hudText": "Upper Engine: Extract Fuel (0/2)",
"length": "Long",
"consoles": []
},
"7": {
"type": "NormalPlayerTask",
"taskType": "HelpCritter",
"hudText": "Jungle: Help Critter (0/2)",
"length": "Long",
"consoles": []
},
"8": {
"type": "NormalPlayerTask",
"taskType": "HoistSupplies",
"hudText": "Jungle: Hoist Supplies",
"length": "Long",
"consoles": []
},
"9": {
"type": "NormalPlayerTask",
"taskType": "PolishGem",
"hudText": "Mining Pit: Polish Gem",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "MiningPit",
"position": {
"x": 14.353,
"y": 10.241
},
"usableDistance": 1
}
]
},
"10": {
"type": "NormalPlayerTask",
"taskType": "MineOres",
"hudText": "Mining Pit: Mine Ores",
"length": "Long",
"consoles": [
{
"id": 1,
"room": "MiningPit",
"position": {
"x": 11.076,
"y": 10.651
},
"usableDistance": 1
}
]
},
"11": {
"type": "NormalPlayerTask",
"taskType": "ReplaceWaterJug",
"hudText": "Storage: Replace Water Jug (0/2)",
"length": "Long",
"consoles": []
},
"12": {
"type": "NormalPlayerTask",
"taskType": "WaterPlants",
"hudText": "Storage: Water Plants (0/2)",
"length": "Long",
"consoles": []
},
"13": {
"type": "NormalPlayerTask",
"taskType": "AssembleArtifact",
"hudText": "Laboratory: Assemble Artifact",
"length": "Short",
"consoles": [
{
"id": 1,
"room": "Laboratory",
"position": {
"x": -6.2650003,
"y": -9.592999
},
"usableDistance": 1
}
]
},
"14": {
"type": "NormalPlayerTask",
"taskType": "BuildSandcastle",
"hudText": "Splash Zone: Build Sandcastle",
"length": "Short",
"consoles": [
{
"id": 1,
"room": "RecRoom",
"position": {
"x": -21.474998,
"y": 0.36600006
},
"usableDistance": 1
}
]
},
"15": {
"type": "NormalPlayerTask",
"taskType": "CollectShells",
"hudText": "Splash Zone: Collect Shells",
"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",
"hudText": "Kitchen: Crank Generator",
"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",
"hudText": "Cafeteria: Empty Garbage",
"length": "Short",
"consoles": []
},
"18": {
"type": "NormalPlayerTask",
"taskType": "EmptyGarbage",
"hudText": "Splash Zone: Empty Garbage",
"length": "Short",
"consoles": []
},
"19": {
"type": "NormalPlayerTask",
"taskType": "FixAntenna",
"hudText": "Communications: Fix Antenna",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Comms",
"position": {
"x": 23.389,
"y": 14.826
},
"usableDistance": 1
}
]
},
"20": {
"type": "NormalPlayerTask",
"taskType": "FixWiring",
"hudText": "Dropship: Fix Wiring",
"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",
"hudText": "Splash Zone: Lift Weights",
"length": "Short",
"consoles": [
{
"id": 1,
"room": "RecRoom",
"position": {
"x": -19.151,
"y": 0.88100004
},
"usableDistance": 1
}
]
},
"22": {
"type": "NormalPlayerTask",
"taskType": "MonitorMushroom",
"hudText": "Jungle: Monitor Mushroom",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Jungle",
"position": {
"x": 12.791,
"y": -15.567999
},
"usableDistance": 1
}
]
},
"23": {
"type": "NormalPlayerTask",
"taskType": "PlayVideogame",
"hudText": "The Dorm: Play Video Game (0/20)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "SleepingQuarters",
"position": {
"x": 3.251,
"y": -1.0879999
},
"usableDistance": 1
}
]
},
"24": {
"type": "NormalPlayerTask",
"taskType": "RecordTemperature",
"hudText": "Laboratory: Record Temperature",
"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",
"hudText": "Greenhouse: Record Temperature",
"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",
"hudText": "Reactor: Record Temperature",
"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",
"hudText": "Splash Zone: Throw Frisbee",
"length": "Short",
"consoles": [
{
"id": 1,
"room": "RecRoom",
"position": {
"x": -18.647,
"y": -0.88699996
},
"usableDistance": 1
}
]
},
"28": {
"type": "NormalPlayerTask",
"taskType": "TuneRadio",
"hudText": "Communications: Find Signal (0/1)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Comms",
"position": {
"x": 19.62,
"y": 12.764
},
"usableDistance": 1
}
]
}
}
@@ -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
}
}
@@ -0,0 +1 @@
{}
@@ -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
}
@@ -0,0 +1,9 @@
{
"Electrical": "SwitchSystem",
"MedBay": "MedScanSystem",
"Comms": "HqHudSystemType",
"Reactor": "ReactorSystemType",
"LifeSupp": "LifeSuppSystemType",
"Ventilation": "VentilationSystem",
"Sabotage": "SabotageSystemType"
}
@@ -0,0 +1,547 @@
{
"0": {
"type": "NormalPlayerTask",
"taskType": "FixWiring",
"hudText": "Storage: Fix Wiring (0/3)",
"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",
"hudText": "Admin: Enter Id Code",
"length": "Common",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": 19.894001,
"y": 19.024
},
"usableDistance": 1
}
]
},
"2": {
"type": "NormalPlayerTask",
"taskType": "SubmitScan",
"hudText": "MedBay: Submit Scan",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "MedBay",
"position": {
"x": 16.233,
"y": 0.262
},
"usableDistance": 1
}
]
},
"3": {
"type": "NormalPlayerTask",
"taskType": "ClearAsteroids",
"hudText": "Balcony: Clear Asteroids (0/20)",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Weapons",
"position": {
"x": 19.213,
"y": -2.414
},
"usableDistance": 1.8
}
]
},
"4": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Reactor: Divert Power to Admin (0/2)",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Reactor",
"position": {
"x": 0.77700007,
"y": 11.484
},
"usableDistance": 1
}
]
},
"5": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Reactor: Divert Power to Cafeteria (0/2)",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Reactor",
"position": {
"x": 0.77700007,
"y": 11.484
},
"usableDistance": 1
}
]
},
"6": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Reactor: Divert Power to Communications (0/2)",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Reactor",
"position": {
"x": 0.77700007,
"y": 11.484
},
"usableDistance": 1
}
]
},
"7": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Reactor: Divert Power to Launchpad (0/2)",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Reactor",
"position": {
"x": 0.77700007,
"y": 11.484
},
"usableDistance": 1
}
]
},
"8": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Reactor: Divert Power to MedBay (0/2)",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Reactor",
"position": {
"x": 0.77700007,
"y": 11.484
},
"usableDistance": 1
}
]
},
"9": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Reactor: Divert Power to Office (0/2)",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Reactor",
"position": {
"x": 0.77700007,
"y": 11.484
},
"usableDistance": 1
}
]
},
"10": {
"type": "NormalPlayerTask",
"taskType": "WaterPlants",
"hudText": "Storage: Water Plants (0/2)",
"length": "Long",
"consoles": []
},
"11": {
"type": "NormalPlayerTask",
"taskType": "StartReactor",
"hudText": "Reactor: Start Reactor",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Reactor",
"position": {
"x": 2.549,
"y": 12.407001
},
"usableDistance": 1
}
]
},
"12": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Reactor: Divert Power to Greenhouse (0/2)",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Reactor",
"position": {
"x": 0.77700007,
"y": 11.484
},
"usableDistance": 1
}
]
},
"13": {
"type": "NormalPlayerTask",
"taskType": "ChartCourse",
"hudText": "Admin: Chart Course",
"length": "Short",
"consoles": []
},
"14": {
"type": "NormalPlayerTask",
"taskType": "CleanO2Filter",
"hudText": "Greenhouse: Clean O2 Filter",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Greenhouse",
"position": {
"x": 17.221,
"y": 24.505001
},
"usableDistance": 2
}
]
},
"15": {
"type": "NormalPlayerTask",
"taskType": "FuelEngines",
"hudText": "Launchpad: Fuel Engines",
"length": "Short",
"consoles": []
},
"16": {
"type": "NormalPlayerTask",
"taskType": "AssembleArtifact",
"hudText": "Laboratory: Assemble Artifact",
"length": "Short",
"consoles": [
{
"id": 1,
"room": "Laboratory",
"position": {
"x": 9.402,
"y": 14.568001
},
"usableDistance": 1
}
]
},
"17": {
"type": "NormalPlayerTask",
"taskType": "SortSamples",
"hudText": "Laboratory: Sort Samples",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Laboratory",
"position": {
"x": 9.660001,
"y": 11.115001
},
"usableDistance": 1
}
]
},
"18": {
"type": "NormalPlayerTask",
"taskType": "PrimeShields",
"hudText": "Admin: Prime Shields",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": 21.169,
"y": 17.945
},
"usableDistance": 1
}
]
},
"19": {
"type": "NormalPlayerTask",
"taskType": "EmptyGarbage",
"hudText": "Cafeteria: Empty Garbage",
"length": "Short",
"consoles": []
},
"20": {
"type": "NormalPlayerTask",
"taskType": "MeasureWeather",
"hudText": "Balcony: Measure Weather",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Balcony",
"position": {
"x": 28.911999,
"y": -1.701
},
"usableDistance": 1
}
]
},
"21": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Reactor: Divert Power to Laboratory (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Reactor",
"position": {
"x": 0.77700007,
"y": 11.484
},
"usableDistance": 1
}
]
},
"22": {
"type": "NormalPlayerTask",
"taskType": "BuyBeverage",
"hudText": "Cafeteria: Buy Beverage",
"length": "Short",
"consoles": [
{
"id": 2,
"room": "Cafeteria",
"position": {
"x": 27.49,
"y": 5.665
},
"usableDistance": 1
}
]
},
"23": {
"type": "NormalPlayerTask",
"taskType": "ProcessData",
"hudText": "Office: Process Data",
"length": "Short",
"consoles": [
{
"id": 2,
"room": "Office",
"position": {
"x": 15.776001,
"y": 21.403
},
"usableDistance": 1
}
]
},
"24": {
"type": "NormalPlayerTask",
"taskType": "RunDiagnostics",
"hudText": "Launchpad: Run Diagnostics",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Launchpad",
"position": {
"x": -2.499,
"y": 1.8730001
},
"usableDistance": 1.5
}
]
},
"25": {
"type": "NormalPlayerTask",
"taskType": "UnlockManifolds",
"hudText": "Reactor: Unlock Manifolds",
"length": "Short",
"consoles": [
{
"id": 2,
"room": "Reactor",
"position": {
"x": 0.44200015,
"y": 13.2560005
},
"usableDistance": 1
}
]
},
"26": {
"type": "NormalPlayerTask",
"taskType": "VentCleaning",
"hudText": "Admin: Clean Vent",
"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
}
]
}
}
@@ -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
}
}
@@ -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
}
}
}
@@ -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
}
@@ -0,0 +1,10 @@
{
"Electrical": "SwitchSystem",
"MedBay": "MedScanSystem",
"Doors": "DoorsSystemType",
"Comms": "HudOverrideSystemType",
"Security": "SecurityCameraSystemType",
"Ventilation": "VentilationSystem",
"Laboratory": "ReactorSystemType",
"Sabotage": "SabotageSystemType"
}
@@ -0,0 +1,884 @@
{
"0": {
"type": "NormalPlayerTask",
"taskType": "SwipeCard",
"hudText": "Office: Swipe Card",
"length": "Common",
"consoles": [
{
"id": 0,
"room": "Office",
"position": {
"x": 24.816444,
"y": -16.217522
},
"usableDistance": 1
}
]
},
"1": {
"type": "NormalPlayerTask",
"taskType": "InsertKeys",
"hudText": "Dropship: Insert Keys",
"length": "Common",
"consoles": [
{
"id": 2,
"room": "Dropship",
"position": {
"x": 17.38076,
"y": 0.08402014
},
"usableDistance": 1
}
]
},
"2": {
"type": "NormalPlayerTask",
"taskType": "ScanBoardingPass",
"hudText": "Office: Scan Boarding Pass",
"length": "Common",
"consoles": [
{
"id": 0,
"room": "Office",
"position": {
"x": 25.75001,
"y": -16.03081
},
"usableDistance": 1
}
]
},
"3": {
"type": "NormalPlayerTask",
"taskType": "FixWiring",
"hudText": "O2: Fix Wiring (0/3)",
"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",
"hudText": "Weapons: Download Data (0/2) ",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Comms",
"position": {
"x": 11.71978,
"y": -15.145192
},
"usableDistance": 1
}
]
},
"5": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Office: Download Data (0/2) ",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Comms",
"position": {
"x": 11.71978,
"y": -15.145192
},
"usableDistance": 1
}
]
},
"6": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Electrical: Download Data (0/2) ",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Comms",
"position": {
"x": 11.71978,
"y": -15.145192
},
"usableDistance": 1
}
]
},
"7": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Specimen Room: Download Data (0/2) ",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Comms",
"position": {
"x": 11.71978,
"y": -15.145192
},
"usableDistance": 1
}
]
},
"8": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "O2: Download Data (0/2) ",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Comms",
"position": {
"x": 11.71978,
"y": -15.145192
},
"usableDistance": 1
}
]
},
"9": {
"type": "NormalPlayerTask",
"taskType": "StartReactor",
"hudText": "Specimen Room: Start Reactor",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Specimens",
"position": {
"x": 34.757774,
"y": -18.878536
},
"usableDistance": 1
}
]
},
"10": {
"type": "NormalPlayerTask",
"taskType": "FuelEngines",
"hudText": "Storage: Fuel Engines (0/2)",
"length": "Long",
"consoles": []
},
"11": {
"type": "WaterWayTask",
"taskType": "OpenWaterways",
"hudText": "Boiler Room: Open Waterways (0/3)",
"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",
"hudText": "MedBay: Inspect Sample",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Hallway",
"position": {
"x": 36.52848,
"y": -5.5693474
},
"usableDistance": 1
}
]
},
"13": {
"type": "NormalPlayerTask",
"taskType": "ReplaceWaterJug",
"hudText": "Boiler Room: Replace Water Jug (0/2)",
"length": "Long",
"consoles": []
},
"14": {
"type": "WeatherNodeTask",
"taskType": "FixWeatherNode",
"hudText": "Node_GI: Fix Weather Node (0/2)",
"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",
"hudText": "Node_IRO: Fix Weather Node (0/2)",
"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",
"hudText": "Node_PD: Fix Weather Node (0/2)",
"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",
"hudText": "Node_TB: Fix Weather Node (0/2)",
"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",
"hudText": "Communications: Reboot Wifi",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Comms",
"position": {
"x": 11.047999,
"y": -15.297912
},
"usableDistance": 1
}
]
},
"19": {
"type": "NormalPlayerTask",
"taskType": "MonitorOxygen",
"hudText": "O2: Monitor Tree",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Hallway",
"position": {
"x": 1.654,
"y": -16.012001
},
"usableDistance": 1
}
]
},
"20": {
"type": "NormalPlayerTask",
"taskType": "UnlockManifolds",
"hudText": "Specimen Room: Unlock Manifolds",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Specimens",
"position": {
"x": 34.381306,
"y": -19.486675
},
"usableDistance": 1
}
]
},
"21": {
"type": "NormalPlayerTask",
"taskType": "StoreArtifacts",
"hudText": "Specimen Room: Store Artifacts",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Specimens",
"position": {
"x": 36.481117,
"y": -18.82867
},
"usableDistance": 1
}
]
},
"22": {
"type": "NormalPlayerTask",
"taskType": "FillCanisters",
"hudText": "O2: Fill Canisters",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "LifeSupp",
"position": {
"x": 1.1431961,
"y": -19.525873
},
"usableDistance": 0.6
}
]
},
"23": {
"type": "NormalPlayerTask",
"taskType": "EmptyGarbage",
"hudText": "O2: Empty Garbage",
"length": "Short",
"consoles": []
},
"24": {
"type": "NormalPlayerTask",
"taskType": "ChartCourse",
"hudText": "Dropship: Chart Course",
"length": "Short",
"consoles": [
{
"id": 2,
"room": "Dropship",
"position": {
"x": 15.974811,
"y": 0.08402014
},
"usableDistance": 1
}
]
},
"25": {
"type": "NormalPlayerTask",
"taskType": "SubmitScan",
"hudText": "MedBay: Submit Scan",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "MedBay",
"position": {
"x": 40.327003,
"y": -7.082
},
"usableDistance": 1
}
]
},
"26": {
"type": "NormalPlayerTask",
"taskType": "ClearAsteroids",
"hudText": "Weapons: Clear Asteroids (0/20)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Weapons",
"position": {
"x": 9.929073,
"y": -22.390993
},
"usableDistance": 1
}
]
},
"27": {
"type": "WeatherNodeTask",
"taskType": "FixWeatherNode",
"hudText": "Node_CA: Fix Weather Node (0/2)",
"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",
"hudText": "Node_MLG: Fix Weather Node (0/2)",
"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",
"hudText": "Laboratory: Align Telescope",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Laboratory",
"position": {
"x": 33.868427,
"y": -5.4712653
},
"usableDistance": 1
}
]
},
"30": {
"type": "NormalPlayerTask",
"taskType": "RepairDrill",
"hudText": "Laboratory: Repair Drill",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Laboratory",
"position": {
"x": 27.42095,
"y": -6.982279
},
"usableDistance": 1
}
]
},
"31": {
"type": "NormalPlayerTask",
"taskType": "RecordTemperature",
"hudText": "Laboratory: Record Temperature",
"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",
"hudText": "Outside: Record Temperature",
"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
}
]
}
}
@@ -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
}
}
@@ -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
}
}
}
@@ -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
}
@@ -0,0 +1,11 @@
{
"Electrical": "SwitchSystem",
"MedBay": "MedScanSystem",
"Doors": "AutoDoorsSystemType",
"Comms": "HudOverrideSystemType",
"Security": "SecurityCameraSystemType",
"Reactor": "ReactorSystemType",
"LifeSupp": "LifeSuppSystemType",
"Ventilation": "VentilationSystem",
"Sabotage": "SabotageSystemType"
}
@@ -0,0 +1,643 @@
{
"0": {
"type": "NormalPlayerTask",
"taskType": "SwipeCard",
"hudText": "Admin: Swipe Card",
"length": "Common",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": 5.6352005,
"y": -8.632801
},
"usableDistance": 1
}
]
},
"1": {
"type": "NormalPlayerTask",
"taskType": "FixWiring",
"hudText": "Storage: Fix Wiring (0/3)",
"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",
"hudText": "Weapons: Clear Asteroids (0/20)",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "Weapons",
"position": {
"x": 9.087601,
"y": 1.812
},
"usableDistance": 1.2
}
]
},
"3": {
"type": "NormalPlayerTask",
"taskType": "AlignEngineOutput",
"hudText": "Upper Engine: Align Engine Output (0/2)",
"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",
"hudText": "MedBay: Submit Scan",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "MedBay",
"position": {
"x": -7.3284,
"y": -5.2476006
},
"usableDistance": 1
}
]
},
"5": {
"type": "NormalPlayerTask",
"taskType": "InspectSample",
"hudText": "MedBay: Inspect Sample",
"length": "Long",
"consoles": [
{
"id": 0,
"room": "MedBay",
"position": {
"x": -6.144,
"y": -4.2599998
},
"usableDistance": 1
}
]
},
"6": {
"type": "NormalPlayerTask",
"taskType": "FuelEngines",
"hudText": "Storage: Fuel Engines (0/2)",
"length": "Long",
"consoles": []
},
"7": {
"type": "NormalPlayerTask",
"taskType": "StartReactor",
"hudText": "Reactor: Start Reactor",
"length": "Long",
"consoles": [
{
"id": 2,
"room": "Reactor",
"position": {
"x": -21.792,
"y": -5.5728
},
"usableDistance": 1
}
]
},
"8": {
"type": "NormalPlayerTask",
"taskType": "EmptyChute",
"hudText": "O2: Empty Chute (0/2)",
"length": "Long",
"consoles": []
},
"9": {
"type": "NormalPlayerTask",
"taskType": "EmptyGarbage",
"hudText": "Cafeteria: Empty Garbage (0/2)",
"length": "Long",
"consoles": []
},
"10": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Communications: Download Data (0/2) ",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": 2.5079997,
"y": -6.2652006
},
"usableDistance": 1
}
]
},
"11": {
"type": "NormalPlayerTask",
"taskType": "CalibrateDistributor",
"hudText": "Electrical: Calibrate Distributor",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": -5.8644004,
"y": -7.4772
},
"usableDistance": 1
}
]
},
"12": {
"type": "NormalPlayerTask",
"taskType": "ChartCourse",
"hudText": "Navigation: Chart Course",
"length": "Short",
"consoles": []
},
"13": {
"type": "NormalPlayerTask",
"taskType": "CleanO2Filter",
"hudText": "O2: Clean O2 Filter",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "LifeSupp",
"position": {
"x": 5.7432,
"y": -2.9772
},
"usableDistance": 0.8
}
]
},
"14": {
"type": "NormalPlayerTask",
"taskType": "UnlockManifolds",
"hudText": "Reactor: Unlock Manifolds",
"length": "Short",
"consoles": [
{
"id": 2,
"room": "Reactor",
"position": {
"x": -22.536001,
"y": -2.4996
},
"usableDistance": 1
}
]
},
"15": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Electrical: Download Data (0/2) ",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": 2.5079997,
"y": -6.2652006
},
"usableDistance": 1
}
]
},
"16": {
"type": "NormalPlayerTask",
"taskType": "StabilizeSteering",
"hudText": "Navigation: Stabilize Steering",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Nav",
"position": {
"x": 18.732,
"y": -4.728
},
"usableDistance": 1.25
}
]
},
"17": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Weapons: Download Data (0/2) ",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": 2.5079997,
"y": -6.2652006
},
"usableDistance": 1
}
]
},
"18": {
"type": "NormalPlayerTask",
"taskType": "PrimeShields",
"hudText": "Shields: Prime Shields",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Shields",
"position": {
"x": 7.526399,
"y": -13.981199
},
"usableDistance": 1
}
]
},
"19": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Cafeteria: Download Data (0/2) ",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": 2.5079997,
"y": -6.2652006
},
"usableDistance": 1
}
]
},
"20": {
"type": "UploadDataTask",
"taskType": "UploadData",
"hudText": "Navigation: Download Data (0/2) ",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Admin",
"position": {
"x": 2.5079997,
"y": -6.2652006
},
"usableDistance": 1
}
]
},
"21": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Shields (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": -9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"22": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Weapons (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": -9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"23": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Communications (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": -9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"24": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Upper Engine (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": -9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"25": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to O2 (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": -9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"26": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Navigation (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": -9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"27": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Lower Engine (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": -9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"28": {
"type": "DivertPowerTask",
"taskType": "DivertPower",
"hudText": "Electrical: Divert Power to Security (0/2)",
"length": "Short",
"consoles": [
{
"id": 0,
"room": "Electrical",
"position": {
"x": -9,
"y": -7.2936006
},
"usableDistance": 1
}
]
},
"29": {
"type": "NormalPlayerTask",
"taskType": "VentCleaning",
"hudText": "Electrical: Clean Vent",
"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
}
]
}
}
@@ -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
}
}
@@ -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,
}
}
@@ -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,
}
}
@@ -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,
}
}
+93 -10
View File
@@ -1,20 +1,103 @@
using System;
using System.Numerics;
namespace Impostor.Api.Innersloth
{
public static class GameVersion
public readonly struct GameVersion : IEquatable<GameVersion>, IComparable<GameVersion>, IComparisonOperators<GameVersion, GameVersion, bool>
{
public static int GetVersion(int year, int month, int day, int revision = 0)
private const int YearMask = 25000;
private const int MonthMask = 1800;
private const int DayMask = 50;
private const int DisableServerAuthorityFlag = 25;
public GameVersion(int value)
{
return (year * 25000) + (month * 1800) + (day * 50) + revision;
Value = value;
}
public static void ParseVersion(int version, out int year, out int month, out int day, out int revision)
public GameVersion(int year, int month, int day, int revision = 0)
{
year = version / 25000;
version %= 25000;
month = version / 1800;
version %= 1800;
day = version / 50;
revision = version % 50;
Value = (year * YearMask) + (month * MonthMask) + (day * DayMask) + revision;
}
public int Value { get; }
public int Year => Value / YearMask;
public int Month => (Value % YearMask) / MonthMask;
public int Day => ((Value % YearMask) % MonthMask) / DayMask;
public int Revision => Value % DayMask;
/// <summary>
/// Gets a value indicating whether the DisableServerAuthority flag is present.
/// </summary>
public bool HasDisableServerAuthorityFlag
{
get
{
return Revision >= DisableServerAuthorityFlag;
}
}
public static bool operator ==(GameVersion left, GameVersion right) => left.Value == right.Value;
public static bool operator !=(GameVersion left, GameVersion right) => left.Value != right.Value;
public static bool operator >(GameVersion left, GameVersion right) => left.Value > right.Value;
public static bool operator >=(GameVersion left, GameVersion right) => left.Value >= right.Value;
public static bool operator <(GameVersion left, GameVersion right) => left.Value < right.Value;
public static bool operator <=(GameVersion left, GameVersion right) => left.Value <= right.Value;
public void GetComponents(out int year, out int month, out int day, out int revision)
{
var value = Value;
year = value / YearMask;
value %= YearMask;
month = value / MonthMask;
value %= MonthMask;
day = value / DayMask;
revision = value % DayMask;
}
/// <summary>
/// Normalizes this game version by removing all the special flags.
/// </summary>
/// <returns>This GameVersion but stripped of special flags.</returns>
public GameVersion Normalize()
{
return HasDisableServerAuthorityFlag ? new GameVersion(Value - DisableServerAuthorityFlag) : this;
}
public override string ToString()
{
GetComponents(out var year, out var month, out var day, out var revision);
return $"{year}.{month}.{day}{(revision == 0 ? string.Empty : "." + revision)}";
}
public int CompareTo(GameVersion other)
{
return Value.CompareTo(other.Value);
}
public bool Equals(GameVersion other)
{
return Value == other.Value;
}
public override bool Equals(object? obj)
{
return obj is GameVersion other && Equals(other);
}
public override int GetHashCode()
{
return Value;
}
}
}
-15
View File
@@ -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; }
}
}
-19
View File
@@ -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; }
}
}
-19
View File
@@ -1,19 +0,0 @@
namespace Impostor.Api.Innersloth
{
public enum Language
{
English,
SpanishLA,
Brazilian,
Portuguese,
Korean,
Russian,
Dutch,
Filipino,
French,
German,
Italian,
Japanese,
SpanishEU,
}
}
+6 -6
View File
@@ -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,
}
}
+2
View File
@@ -5,6 +5,8 @@
Skeld = 0,
MiraHQ = 1,
Polus = 2,
Dleks = 3,
Airship = 4,
Fungle = 5,
}
}
@@ -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<int, IVent> _vents;
private readonly IReadOnlyDictionary<int, ITask> _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<AirshipVent.Ids, AirshipVent> Vents { get; }
IReadOnlyDictionary<int, IVent> IMapData.Vents => _vents;
public IReadOnlyDictionary<AirshipTask.Ids, AirshipTask> Tasks { get; }
IReadOnlyDictionary<int, ITask> IMapData.Tasks => _tasks;
}
}
@@ -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; }
}
@@ -1,19 +0,0 @@
using System.Collections.Generic;
namespace Impostor.Api.Innersloth.Maps
{
public interface IMapData
{
public static IReadOnlyDictionary<MapTypes, IMapData> Maps { get; } = new Dictionary<MapTypes, IMapData>
{
[MapTypes.Skeld] = new SkeldData(),
[MapTypes.MiraHQ] = new MiraData(),
[MapTypes.Polus] = new PolusData(),
[MapTypes.Airship] = new AirshipData(),
}.AsReadOnly();
IReadOnlyDictionary<int, IVent> Vents { get; }
IReadOnlyDictionary<int, ITask> Tasks { get; }
}
}
@@ -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<MapTypes, MapData> Maps { get; } = new Dictionary<MapTypes, MapData>
{
[MapTypes.Skeld] = new SkeldData(),
[MapTypes.MiraHQ] = new MiraData(),
[MapTypes.Polus] = new PolusData(),
[MapTypes.Airship] = new AirshipData(),
[MapTypes.Fungle] = new FungleData(),
}.AsReadOnly();
public abstract IReadOnlyDictionary<int, VentData> Vents { get; }
public abstract IReadOnlyDictionary<int, TaskData> Tasks { get; }
public abstract IReadOnlyDictionary<int, DoorData> Doors { get; }
public abstract float SpawnRadius { get; }
public abstract Vector2 InitialSpawnCenter { get; }
public abstract Vector2 MeetingSpawnCenter { get; }
public abstract Vector2 MeetingSpawnCenter2 { get; }
}
@@ -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<int, IVent> _vents;
private readonly IReadOnlyDictionary<int, ITask> _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<MiraVent.Ids, MiraVent> Vents { get; }
IReadOnlyDictionary<int, IVent> IMapData.Vents => _vents;
public IReadOnlyDictionary<MiraTask.Ids, MiraTask> Tasks { get; }
IReadOnlyDictionary<int, ITask> IMapData.Tasks => _tasks;
}
}
@@ -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<int, IVent> _vents;
private readonly IReadOnlyDictionary<int, ITask> _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<PolusVent.Ids, PolusVent> Vents { get; }
IReadOnlyDictionary<int, IVent> IMapData.Vents => _vents;
public IReadOnlyDictionary<PolusTask.Ids, PolusTask> Tasks { get; }
IReadOnlyDictionary<int, ITask> IMapData.Tasks => _tasks;
}
}
@@ -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<int, IVent> _vents;
private readonly IReadOnlyDictionary<int, ITask> _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<SkeldVent.Ids, SkeldVent> Vents { get; }
IReadOnlyDictionary<int, IVent> IMapData.Vents => _vents;
public IReadOnlyDictionary<SkeldTask.Ids, SkeldTask> Tasks { get; }
IReadOnlyDictionary<int, ITask> IMapData.Tasks => _tasks;
}
}
@@ -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; }
}
@@ -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; }
}
}
@@ -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; }
}
}
@@ -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; }
}
}
@@ -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; }
}
}
@@ -0,0 +1,36 @@
using System;
using System.Numerics;
namespace Impostor.Api.Innersloth.Maps;
public class VentData
{
private readonly Lazy<VentData>? _left;
private readonly Lazy<VentData>? _center;
private readonly Lazy<VentData>? _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<VentData>(() => data.Vents[left.Value]);
_center = center == null ? null : new Lazy<VentData>(() => data.Vents[center.Value]);
_right = right == null ? null : new Lazy<VentData>(() => 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;
}
@@ -1,61 +0,0 @@
using System;
using System.Numerics;
namespace Impostor.Api.Innersloth.Maps.Vents
{
public class AirshipVent : IVent
{
private readonly Lazy<AirshipVent>? _left;
private readonly Lazy<AirshipVent>? _center;
private readonly Lazy<AirshipVent>? _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<AirshipVent>(() => data.Vents[left.Value]);
_center = center == null ? null : new Lazy<AirshipVent>(() => data.Vents[center.Value]);
_right = right == null ? null : new Lazy<AirshipVent>(() => 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;
}
}
@@ -1,60 +0,0 @@
using System;
using System.Numerics;
namespace Impostor.Api.Innersloth.Maps.Vents
{
public class MiraVent : IVent
{
private readonly Lazy<MiraVent>? _left;
private readonly Lazy<MiraVent>? _center;
private readonly Lazy<MiraVent>? _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<MiraVent>(() => data.Vents[left.Value]);
_center = center == null ? null : new Lazy<MiraVent>(() => data.Vents[center.Value]);
_right = right == null ? null : new Lazy<MiraVent>(() => 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;
}
}
@@ -1,61 +0,0 @@
using System;
using System.Numerics;
namespace Impostor.Api.Innersloth.Maps.Vents
{
public class PolusVent : IVent
{
private readonly Lazy<PolusVent>? _left;
private readonly Lazy<PolusVent>? _center;
private readonly Lazy<PolusVent>? _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<PolusVent>(() => data.Vents[left.Value]);
_center = center == null ? null : new Lazy<PolusVent>(() => data.Vents[center.Value]);
_right = right == null ? null : new Lazy<PolusVent>(() => 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;
}
}
@@ -1,63 +0,0 @@
using System;
using System.Numerics;
namespace Impostor.Api.Innersloth.Maps.Vents
{
public class SkeldVent : IVent
{
private readonly Lazy<SkeldVent>? _left;
private readonly Lazy<SkeldVent>? _center;
private readonly Lazy<SkeldVent>? _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<SkeldVent>(() => data.Vents[left.Value]);
_center = center == null ? null : new Lazy<SkeldVent>(() => data.Vents[center.Value]);
_right = right == null ? null : new Lazy<SkeldVent>(() => 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;
}
}
@@ -0,0 +1,13 @@
using System;
namespace Impostor.Api.Innersloth
{
[Flags]
public enum MurderResultFlags
{
Succeeded = 1,
FailedError = 2,
FailedProtected = 4,
DecisionByHost = 8,
}
}
-17
View File
@@ -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,
}
}
-14
View File
@@ -1,14 +0,0 @@
namespace Impostor.Api.Innersloth
{
public enum RoleTypes : ushort
{
Crewmate,
Impostor,
Scientist,
Engineer,
GuardianAngel,
Shapeshifter,
CrewmateGhost,
ImpostorGhost,
}
}
-101
View File
@@ -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,
/// <remarks>The only decontamination on Mira and bottom decontamination on Polus.</remarks>
Decontamination = 18,
Launchpad = 19,
LockerRoom = 20,
Laboratory = 21,
Balcony = 22,
Office = 23,
Greenhouse = 24,
Dropship = 25,
/// <remarks>Top decontamination on Polus.</remarks>
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,
}
}
-67
View File
@@ -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,
}
}
+1 -1
View File
@@ -67,7 +67,7 @@ namespace Impostor.Api.Net
/// <summary>
/// Gets the version of the game the client is using.
/// </summary>
int GameVersion { get; }
GameVersion GameVersion { get; }
/// <summary>
/// Gets platform specific data of the <see cref="IClient" />.
@@ -10,11 +10,6 @@ namespace Impostor.Api.Net.Inner.Objects.Components
/// </summary>
Vector2 Position { get; }
/// <summary>
/// Gets current object's velocity.
/// </summary>
Vector2 Velocity { get; }
/// <summary>
/// Snaps the current to the given position <see cref="IInnerPlayerControl" />.
/// </summary>
@@ -1,4 +1,5 @@
using System.Threading.Tasks;
using Impostor.Api.Innersloth;
using Impostor.Api.Innersloth.Customization;
using Impostor.Api.Net.Inner.Objects.Components;
@@ -90,7 +91,18 @@ namespace Impostor.Api.Net.Inner.Objects
ValueTask SendChatToPlayerAsync(string text, IInnerPlayerControl? player = null);
/// <summary>
/// Murder <paramref name="target" /> player.
/// Murder <paramref name="target" /> player or remove their protective shield.
/// </summary>
/// <param name="target">Target player to murder.</param>
/// <param name="result">The result of the murder operation.</param>
/// <exception cref="ImpostorProtocolException">Thrown when player is not the impostor.</exception>
/// <exception cref="ImpostorProtocolException">Thrown when player is dead.</exception>
/// <exception cref="ImpostorProtocolException">Thrown when target is dead.</exception>
/// <returns>Task that must be awaited.</returns>
ValueTask MurderPlayerAsync(IInnerPlayerControl target, MurderResultFlags result);
/// <summary>
/// Murder <paramref name="target" /> player successfully.
/// </summary>
/// <param name="target">Target player to murder.</param>
/// <exception cref="ImpostorProtocolException">Thrown when player is not the impostor.</exception>
@@ -99,6 +111,14 @@ namespace Impostor.Api.Net.Inner.Objects
/// <returns>Task that must be awaited.</returns>
ValueTask MurderPlayerAsync(IInnerPlayerControl target);
/// <summary>
/// Protect <paramref name="target" /> player.
/// </summary>
/// <param name="target">Target player to protect.</param>
/// <exception cref="ImpostorProtocolException">Thrown when target is a guardian angel.</exception>
/// <returns>Task that must be awaited.</returns>
ValueTask ProtectPlayerAsync(IInnerPlayerControl target);
/// <summary>
/// Exile the current player. This doesn't produce a body to be reported.
/// Visible to all players.
@@ -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; }
-51
View File
@@ -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,
}
}
@@ -0,0 +1,102 @@
using System.Collections.Generic;
using System.Linq;
using Impostor.Api.Games;
using Impostor.Api.Innersloth;
namespace Impostor.Api.Net.Manager
{
/// <summary>
/// Maintains an internal compatibility list of versions that are allowed to connect to the server, and which game
/// versions they are allowed to play with.
/// </summary>
public interface ICompatibilityManager
{
public enum VersionCompareResult
{
Compatible,
ClientTooOld,
ServerTooOld,
Unknown,
}
/// <summary>
/// Gets the compatibility groups.
/// </summary>
public IEnumerable<CompatibilityGroup> CompatibilityGroups { get; }
/// <summary>
/// Check if a client can join the server according to the currently accepted game versions.
/// </summary>
/// <param name="clientVersion">The client version to check for.</param>
/// <returns>
/// Whether this version is supported by the server at the moment and if not, whether it is too old or too new.
/// </returns>
public VersionCompareResult CanConnectToServer(GameVersion clientVersion);
/// <summary>Check if a player can join an existing game.</summary>
/// <param name="hostVersion">The client version of the host.</param>
/// <param name="clientVersion">The client version of the player that is joining.</param>
/// <returns>
/// <list type="bullet">
/// <item><see cref="GameJoinError.None"/> if everything is OK.</item>
/// <item><see cref="GameJoinError.ClientOutdated"/> if the player runs a too old game version.</item>
/// <item><see cref="GameJoinError.ClientTooNew"/> if the player runs a too new game version.</item>
/// </list>
/// </returns>
public GameJoinError CanJoinGame(GameVersion hostVersion, GameVersion clientVersion);
/// <summary>
/// Add a new compatibility group.
///
/// WARNING: this method does not magically make changes to Impostor to properly support these versions. If
/// Impostor cannot support the game versions you're trying to add or that the game versions you're making
/// compatible do not crossplay correctly, weird behaviour may occur. Here be dragons.
/// </summary>
/// <param name="compatibilityGroup">The compatibility group to add.</param>
public void AddCompatibilityGroup(CompatibilityGroup compatibilityGroup);
/// <summary>
/// Add a supported game version to the specified compatibility group.
///
/// WARNING: this method does not magically make changes to Impostor to properly support these versions. If
/// Impostor cannot support the game versions you're trying to add or that the game versions you're making
/// compatible do not crossplay correctly, weird behaviour may occur. Here be dragons.
/// </summary>
/// <param name="compatibilityGroup">The compatibility group to add this version to.</param>
/// <param name="gameVersion">The game version to add.</param>
public void AddSupportedVersion(CompatibilityGroup compatibilityGroup, GameVersion gameVersion);
/// <summary>
/// Remove a version from the internal version compatibility list.
/// </summary>
/// Note that this will not stop players currently connected to the server from playing, it will only stop new
/// connections.
/// <param name="removedVersion">The version to remove from the list.</param>
/// <returns>True iff this version was on the current compatibility list.</returns>
public bool RemoveSupportedVersion(GameVersion removedVersion);
public sealed class CompatibilityGroup
{
private readonly List<GameVersion> _gameVersions;
public CompatibilityGroup(IEnumerable<GameVersion> gameVersions)
{
_gameVersions = gameVersions.ToList();
}
public IReadOnlyList<GameVersion> GameVersions => _gameVersions;
public static implicit operator CompatibilityGroup(GameVersion[] gameVersions) => new(gameVersions);
internal void Add(GameVersion gameVersion)
{
_gameVersions.Add(gameVersion);
}
internal bool Remove(GameVersion gameVersion)
{
return _gameVersions.Remove(gameVersion);
}
}
}
}
Loaded 100 of 154 files, more files were not shown because too many files have changed in this diff. Show more