mirror of
https://github.com/Impostor/Impostor.git
synced 2026-10-20 11:39:41 +00:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
df65330e0b | ||
|
|
4de7c26880 |
No files matched your search
@@ -5,11 +5,13 @@ on:
|
||||
paths:
|
||||
- '.github/workflows/ci.yml'
|
||||
- 'src/**/**'
|
||||
- '.gitmodules'
|
||||
- 'build.cake'
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/ci.yml'
|
||||
- 'src/**/**'
|
||||
- '.gitmodules'
|
||||
- 'build.cake'
|
||||
|
||||
jobs:
|
||||
@@ -18,7 +20,9 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- uses: actions/cache@v3
|
||||
with:
|
||||
@@ -30,7 +34,7 @@ jobs:
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v2
|
||||
with:
|
||||
dotnet-version: 8.x
|
||||
dotnet-version: 7.x
|
||||
|
||||
- name: Run the Cake script
|
||||
uses: cake-build/cake-action@v1
|
||||
@@ -50,4 +54,4 @@ jobs:
|
||||
- name: Push NuGet package
|
||||
if: github.ref_type == 'tag'
|
||||
run: |
|
||||
dotnet nuget push ./build/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_IMPOSTOR }}
|
||||
dotnet nuget push ./build/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_IMPOSTOR }}
|
||||
@@ -6,6 +6,7 @@ on:
|
||||
paths:
|
||||
- 'src/Impostor.Server/**'
|
||||
- 'src/Impostor.Shared/**'
|
||||
- '.gitmodules'
|
||||
- '.github/workflows/docker.yml'
|
||||
- 'Dockerfile'
|
||||
tags:
|
||||
@@ -14,6 +15,7 @@ on:
|
||||
paths:
|
||||
- 'src/Impostor.Server/**'
|
||||
- 'src/Impostor.Shared/**'
|
||||
- '.gitmodules'
|
||||
- '.github/workflows/docker.yml'
|
||||
- 'Dockerfile'
|
||||
|
||||
@@ -23,7 +25,9 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- name: Prepare
|
||||
id: prep
|
||||
run: |
|
||||
@@ -44,14 +48,14 @@ jobs:
|
||||
if [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
||||
TAGS="$TAGS,${DOCKER_IMAGE}:latest"
|
||||
fi
|
||||
echo version=${VERSION} >> $GITHUB_OUTPUT
|
||||
echo tags=${TAGS} >> $GITHUB_OUTPUT
|
||||
echo versionsuffix=${VERSIONSUFFIX} >> $GITHUB_OUTPUT
|
||||
echo created=$(date -u +'%Y-%m-%dT%H:%M:%SZ') >> $GITHUB_OUTPUT
|
||||
echo ::set-output name=version::${VERSION}
|
||||
echo ::set-output name=tags::${TAGS}
|
||||
echo ::set-output name=versionsuffix::${VERSIONSUFFIX}
|
||||
echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
uses: docker/setup-qemu-action@v1
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
uses: docker/setup-buildx-action@v1
|
||||
- name: Login to DockerHub
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@v1
|
||||
@@ -59,7 +63,7 @@ jobs:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v5
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
|
||||
Whitespace-only changes.
+8
-2
@@ -1,4 +1,4 @@
|
||||
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:7.0 AS build
|
||||
|
||||
# See for all possible platforms
|
||||
# https://github.com/containerd/containerd/blob/master/platforms/platforms.go#L17
|
||||
@@ -36,12 +36,18 @@ RUN case "$TARGETARCH" in \
|
||||
dotnet publish -c release -o /app -r "$NETCORE_PLATFORM" -p:VersionSuffix="$VERSIONSUFFIX" --no-restore ./src/Impostor.Server/Impostor.Server.csproj
|
||||
|
||||
# Final image.
|
||||
FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:8.0
|
||||
FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:7.0
|
||||
WORKDIR /app
|
||||
COPY --from=build /app ./
|
||||
|
||||
# Add Impostor.Http as a default built-in plugin
|
||||
ADD https://github.com/Impostor/Impostor.Http/releases/download/v0.5.0/Impostor.Http.dll /app/builtin-plugins/
|
||||
# Make it listen to 0.0.0.0 to expose it to the outside world.
|
||||
ENV IMPOSTOR_HTTP_HttpServer__ListenIp=0.0.0.0
|
||||
# Override ASPNETCORE_URLS to stop warning.
|
||||
ENV ASPNETCORE_URLS=
|
||||
# Enable the built-in plugin folder. Use a high number to prevent conflicts with existing configurations
|
||||
ENV IMPOSTOR_PluginLoader__Paths__76=/app/builtin-plugins
|
||||
|
||||
EXPOSE 22023/tcp 22023/udp
|
||||
ENTRYPOINT ["./Impostor.Server"]
|
||||
@@ -1,6 +1,6 @@
|
||||
# Building from source
|
||||
|
||||
The solution contains the Impostor server and its dependencies, like Hazel and the plugin API. The server is built using [.NET 8](https://dotnet.microsoft.com/download/dotnet/8.0).
|
||||
The solution contains the Impostor server and its dependencies, like Hazel and the plugin API. The server is built using [.NET 7](https://dotnet.microsoft.com/download/dotnet/7.0).
|
||||
|
||||
## Cloning Impostor
|
||||
|
||||
@@ -14,7 +14,7 @@ git clone https://github.com/Impostor/Impostor.git
|
||||
|
||||
### Dependencies
|
||||
|
||||
- [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0)
|
||||
- [.NET 7 SDK](https://dotnet.microsoft.com/download/dotnet/7.0)
|
||||
- [Rider](https://www.jetbrains.com/rider/) or [Visual Studio](https://visualstudio.microsoft.com/vs/) (Optional, only if you want the full IDE experience)
|
||||
|
||||
### Build using the CLI
|
||||
|
||||
@@ -8,14 +8,6 @@ The Impostor project is a reverse engineered and open source server for the game
|
||||
|
||||
Yes, Impostor can be used with both the Android and iOS versions of the game. You can add a custom server via a link, you can do this using the [site](https://impostor.github.io/Impostor)
|
||||
|
||||
## Can this be used with the console version of the game?
|
||||
|
||||
Sadly not, as these don't allow adding custom servers.
|
||||
|
||||
## Can this be used with Among Us 3D/VR?
|
||||
|
||||
No, it's an entirely different game with a completely different network stack. So we'd need to develop another server completely from scratch. We're currently not interested in doing this.
|
||||
|
||||
## How can I get started?
|
||||
|
||||
See [Setting up your Server](Running-the-server.md) for more information on running the server and [Client Setup](https://impostor.github.io/Impostor/) for helping your friends join in!
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
# HTTP Server
|
||||
|
||||
Since Impostor 1.9.0 a HTTP service is included for matchmaking, which is required for clients to connect to the Impostor server.
|
||||
|
||||
Starting from Among Us 16.0.5, you need to set up HTTPS for players to connect to your server.
|
||||
Unfortunately Impostor doesn't handle SSL certificates, so you need to set up a reverse proxy.
|
||||
|
||||
## Use a reverse proxy
|
||||
|
||||
A reverse proxy allows you to forward HTTP requests from users to multiple services. If you already have one, you should configure it to add Impostor.
|
||||
|
||||
If you have never set up a reverse proxy before, we recommend you to set up [Caddy](https://caddyserver.com/). It is easy to set up and comes with support for requesting SSL certificates out of the box.
|
||||
|
||||
To prevent people from connecting directly to Impostor, we recommend changing the "ListenIp" in the "HttpServer" section to "127.0.0.1". This makes sure people can't connect to your HTTP server other than via your reverse proxy. Keep the "ListenIp" in the "Server" section at "0.0.0.0" though, running the normal game traffic through a proxy is not supported.
|
||||
|
||||
### Caddy
|
||||
|
||||
To install Caddy, follow the [official installation guide](https://caddyserver.com/docs/install). Then use the following lines as your `Caddyfile` configuration file:
|
||||
|
||||
```
|
||||
example.com # replace example.com with your domain name
|
||||
|
||||
reverse_proxy :22023
|
||||
```
|
||||
|
||||
Now run `caddy run` in the folder with this Caddyfile and it should set up a server for you with a free SSL certificate.
|
||||
If this works, you should set up [Caddy to run in the background](https://caddyserver.com/docs/running)
|
||||
|
||||
### Nginx
|
||||
|
||||
Nginx is an alternative to Caddy that is a bit harder to set up. If you already use Nginx, you can use our snippet to add Impostor:
|
||||
|
||||
<details><summary>Nginx configuration</summary>
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name example.com; # replace example.com with your domain name
|
||||
|
||||
# Assuming you're using Certbot, replace example.com with your domain name
|
||||
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
|
||||
ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:22023; # Change the port to your HttpServer's ListenPort
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
|
||||
# Redirect all traffic to HTTPS
|
||||
server {
|
||||
listen 80 default_server;
|
||||
location / {
|
||||
return 307 https://$host$request_uri;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## Stop exposing Impostor's HTTP server to the internet directly
|
||||
|
||||
To only allow connections to Impostor's HTTP servers via the reverse proxy, we recommend to set the ListenIp of the HTTP server to 127.0.0.1:
|
||||
|
||||
```json
|
||||
{
|
||||
// NOTE: merge this snippet into the rest of your configuration
|
||||
"HttpServer": {
|
||||
"ListenIp": "127.0.0.1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Or if you're configuring Impostor with environment variables:
|
||||
|
||||
```sh
|
||||
IMPOSTOR_HttpServer__ListenIp=127.0.0.1
|
||||
```
|
||||
|
||||
For more information on server configuration, see [Server-configuration.md](Server Configuration).
|
||||
+13
-16
@@ -10,22 +10,19 @@ To connect to the server, you need to configure and install a region file on htt
|
||||
|
||||
Among Us connects to the server using two network services: the (TCP) HTTP service points Among Us to the UDP service, then the UDP service hosts the actual game traffic. Because of this, Impostor uses port 22023 using **both** the TCP and UDP protocols.
|
||||
|
||||
To connect to your Among Us version from another PC, you need to set up a HTTP reverse proxy to support HTTPS. If you're just running a version of Impostor for testing Setup instructions for this are in the [Http Server documentation](Http-server.md).
|
||||
|
||||
If you want to test if your Among Us HTTP server is working, open `http://localhost:22023` (assuming you're using the default settings, change the IP and port respectively) in a browser
|
||||
As the phone version of Among Us requires this HTTP connection to be secure, we recommend using a HTTP reverse proxy to terminate SSL on the HTTP service. Setup instructions for this are in the [Impostor.Http readme](https://github.com/Impostor/Impostor.Http#readme).
|
||||
|
||||
Depending on your host you may also need to port forward Impostor to the internet or pass Impostor traffic by your firewall. Port 22023 UDP needs to be accessible for everyone that wants to play on the server, then you also need to portforward your HTTP reverse proxy or port 22023 TCP if you don't use a reverse proxy. As port forwarding changes per host or router configuration, port forwarding is not covered by this guide.
|
||||
|
||||
## Normal installation
|
||||
|
||||
1. Install [.NET 8.0](https://dotnet.microsoft.com/download/dotnet/8.0). We recommend either the ASP.NET Core Runtime or the SDK. The SDK is necessary in case you want to develop Impostor or Impostor plugins.
|
||||
2. Download the [latest release](https://github.com/Impostor/Impostor/releases) or the [latest CI build](https://nightly.link/Impostor/Impostor/workflows/ci/master). Note that Impostor is built for multiple CPU-architectures and operating systems, you most likely want the x64 version, unless you are running on a Raspberry Pi or another device/VPS with an Arm processor.
|
||||
1. Install [.NET 7.0](https://dotnet.microsoft.com/download/dotnet/7.0). We recommend either the ASP.NET Core Runtime or the SDK. The SDK is necessary in case you want to develop Impostor or Impostor plugins.
|
||||
2. Download the [latest release](https://github.com/Impostor/Impostor/releases) or the [latest CI build](https://nightly.link/Impostor/Impostor/workflows/ci/master). Note that Impostor is built for multiple CPU-architectures and operating systems, you most likely want the x64 version, unless you are running on a Raspberry Pi or another device with an Arm processor.
|
||||
3. Extract the zip.
|
||||
4. Modify `config.json` to your liking. Documentation can be found [here](Server-configuration.md). You need to at least change `PublicIp` to the address people will connect to your server to.
|
||||
5. Run `Impostor.Server` (Linux/macOS) or `Impostor.Server.exe` (Windows)
|
||||
6. Set up a reverse proxy to support HTTPS, so you can connect to your server from another device. See [reverse proxy configuration](Http-server.md)
|
||||
7. (OPTIONAL - Linux) Configure a systemd definition file and enable the service to start on boot, see [systemd configuration](Server-configuration.md#systemd)
|
||||
|
||||
4. Download the [Impostor.Http](https://github.com/Impostor/Impostor.Http) plugin and put it in your `plugins` folder. Please note the Reverse Proxy configuration: you either need to configure a reverse proxy to terminate SSL or expose the service to the world by changing ListenIp.
|
||||
5. Modify `config.json` to your liking. Documentation can be found [here](Server-configuration.md). You need to at least change `PublicIp` to the address people will connect to your server to.
|
||||
6. Run `Impostor.Server` (Linux/macOS) or `Impostor.Server.exe` (Windows)
|
||||
7. (OPTIONAL - Linux) Configure a systemd definition file and enable the service to start on boot - [systemd configuration](Server-configuration.md#systemd)
|
||||
|
||||
## Using Docker
|
||||
|
||||
@@ -40,13 +37,13 @@ After installing Docker, you can just start a Docker container with `docker run`
|
||||
docker run -p 127.0.0.1:22023:22023/tcp -p 22023:22023/udp -e IMPOSTOR_Server__PublicIp=your.public.ip.here aeonlucid/impostor:nightly
|
||||
```
|
||||
|
||||
Please replace `your.public.ip.here` with the public IP address of your server. This is the address Among Us will try to reach your server at.
|
||||
Please replace `your.public.ip.here` with the public IP address of your server. This is the address Among Us will try to reach your client at.
|
||||
|
||||
To configure the docker container, either use environment variables or mount config.json in your container.
|
||||
|
||||
## Using Docker Compose
|
||||
|
||||
Docker Compose allows you to start a Docker container using a predefined configuration. This is an example configuration you can continue on:
|
||||
Docker Compose allows you to start a Docker container using a prefined configuration. This is an example configuration you can continue on:
|
||||
|
||||
```
|
||||
version: '3.4'
|
||||
@@ -56,12 +53,12 @@ services:
|
||||
image: aeonlucid/impostor:nightly
|
||||
container_name: impostor
|
||||
ports:
|
||||
- 127.0.0.1:22023:22023/tcp # Set up your own reverse proxy to terminate HTTPS
|
||||
- 127.0.0.1:22023:22023/tcp
|
||||
- 22023:22023/udp
|
||||
environment: # Either configure Impostor using environment variables or mount config.json in your container
|
||||
environment: # Either configure Impostor using environment variables or mount a copy of config.json
|
||||
- IMPOSTOR_Server__PublicIp=your.public.ip.here
|
||||
volumes:
|
||||
- /path/to/local/config.json:/app/config.json # Mount config.json
|
||||
- /path/to/local/config.json:/app/config.json # For easy editing of the config
|
||||
- /path/to/local/plugins:/app/plugins # Only needed if using plugins
|
||||
- /path/to/local/libraries:/app/libraries # Only needed if using external libraries (some plugins may need this)
|
||||
- /path/to/local/libraries:/app/libraries # Only needed if using external libraries
|
||||
```
|
||||
@@ -1,5 +1,7 @@
|
||||
# Server configuration
|
||||
|
||||
Some information about all the possible configurations. Click [here](https://github.com/Impostor/Impostor/blob/master/src/Impostor.Server/config-full.json) to see all the possible config options.
|
||||
|
||||
## Options
|
||||
|
||||
### Required Server Configuration
|
||||
@@ -9,49 +11,25 @@
|
||||
| **PublicIp** | `127.0.0.1` | This needs to the public IPv4 address of the server which you give to others to connect. You can find your IPv4 address [on this website](http://whatismyip.host/). Unless you are only planning to use Impostor privately, on your local network, you should change this to your public ip. It is also possible to use hostnames instead of IPv4 addresses, which will be resolved to IPv4 addresses. |
|
||||
| **PublicPort** | `22023` | The public port of the server which you give to others to connect. (**This is the external port you configure on your router when port forwarding.**) Usually `22023`. |
|
||||
| **ListenIp** | `0.0.0.0` | The network interface to listen on. If you do not know what to put here, use `0.0.0.0`. Since 1.2.2 it is also possible to use hostnames instead of IPv4 addresses, these must resolve to a valid IPv4 address. |
|
||||
| **ListenPort** | `22023` | The listen port of the server, usually `22023`. For port forwarding purposes: this is an UDP port |
|
||||
|
||||
### HttpServer
|
||||
|
||||
Impostor has an Http Server that is used by recent versions of Among Us to connect to. See [the Http Server page](Http-server.md) for more details on how to set this up.
|
||||
|
||||
| Key | Default | Description |
|
||||
|----------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **Enabled** | `true` | Whether the http server should be enabled. |
|
||||
| **ListenIp** | `0.0.0.0` | The network interface to listen on. Use `127.0.0.1` if you use a reverse proxy or just run locally. Use `0.0.0.0` if you are directly exposing this server to the internet |
|
||||
| **ListenPort** | `22023` | The listen port of this server. For port forwarding purposes, this is an TCP port. |
|
||||
| **ListenPort** | `22023` | The listen port of the server, usually `22023`. |
|
||||
|
||||
### AntiCheat
|
||||
|
||||
Impostor has an Anticheat that makes it possible to kick cheaters from games automatically. Note that the anticheat is tuned on the vanilla version of the game, so client-side modifications could trigger the Anticheat if you're playing with them.
|
||||
|
||||
| Key | Default | Value |
|
||||
|-------------------------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **Enabled** | `true` | Whether the anticheat should be enabled. |
|
||||
| **BanIpFromGame** | `true` | When anticheat is enabled and a player is caught hacking, they will be kicked from the server. If this value is set to `true`, the player will be banned instead and will not be able to rejoin that specific game. |
|
||||
| **AllowCheatingHosts** | `"Never"` | Configure whether hosts are allowed to cheat. "Never" forbids it, "Always" allows it. "IfRequested" allows hosts to cheat if they connect with the DisableServerAuthorityFlag set. |
|
||||
| **AllowHostOnlyExtensions** | "IfRequested" | Configure whether [Host-Only extensions](https://github.com/Innersloth-LLC/AmongUsModdingInformation#host-only-mods) are allowed in all games ("Always"), +25 games only ("IfRequested") or by nobody ("Never") |
|
||||
| **EnableGameFlowChecks** | `true` | Enable checks that check if certain actions are done in the appropriate order or at the appropriate moment in the game. This includes changing cosmetics while in game or murdering too fast. |
|
||||
| **EnableInvalidObjectChecks** | `true` | Enables checks that check if network objects are spawned properly. Disabling this option also implies disabling EnableRoleChecks. |
|
||||
| **EnableMustBeHostChecks** | `true` | Enables checks that check if players are the host before they can do actions that require them to be host of the game. This includes starting the game and spawning objects. |
|
||||
| **EnableColorLimitChecks** | `true` | Enables checks that checks if players request colors that are already in use. |
|
||||
| **EnableNameLimitChecks** | `true` | Enables checks that checks if player names have a length that is possible to set using the user interface. |
|
||||
| **EnableOwnershipChecks** | `true` | Enables checks that check if players are allowed to perform a certain action on themself or another player. |
|
||||
| **EnableRoleChecks** | `true` | Enables checks that check if players have the correct role when performing certain role abilities like venting or murdering. |
|
||||
| **EnableTargetChecks** | `true` | Enables checks that check if certain packets to everyone that should only have been sent to certain players or vice versa. This includes sending votes or network objects. |
|
||||
| **ForbidProtocolExtensions** | `true` | If disabled allows players to send network packets that go beyond the network packets sent by the vanilla game. This is necessary for most mods that need all players to install it. |
|
||||
| **EnablePacketSizeChecks** | `true` | Enables checks that verify if network messages exceed the maximum allowed size. |
|
||||
| **PacketSizeLimit** | `1203` | The maximum allowed size (in bytes) for a network message. The official servers of Among Us requires that a Hazel packet is < 1204 bytes, excluding headers. |
|
||||
| Key | Default | Value |
|
||||
| ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| **Enabled** | `true` | Whether the anticheat should be enabled. |
|
||||
| **BanIpFromGame** | `true` | When anticheat is enabled and a player is caught hacking, they will be kicked from the server. If this value is set to `true`, the player will be banned instead and will not be able to rejoin that specific game. |
|
||||
|
||||
### Compatibility
|
||||
|
||||
Impostor has some compatibility options which allow some extra flexibility but may not work properly. Enabling any of these options is not recommended. When contacting support, please mention which of these options are enabled.
|
||||
Impostor has two compatibility options which allow some extra flexibility but may not work properly. Enabling either of these options is not recommended.
|
||||
|
||||
| Key | Default | Value |
|
||||
|-----------------------------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **AllowFutureGameVersions** | `false` | Warning: Setting this option to `true` is unsupported and may cause issues when large updates to Among Us are released, but can be useful when a small patch is released. Allows future versions of Among Us to join your server. |
|
||||
| **AllowHostAuthority** | `false` | Certain Among Us mods allow disabling some server-authoritative features, which also changes some code paths in the client. These code paths have not undergone as much testing and contain bugs, which can't be fixed from the Impostor side. Use with caution. |
|
||||
| **AllowVersionMixing** | `false` | Allows players using different game versions to play in one lobby that have not been marked by the Impostor developers as compatible. |
|
||||
| Key | Default | Value |
|
||||
| ------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| **AllowNewGameVersions** | `false` | Warning: Setting this option to `true` is unsupported and may cause issues when large updates to Among Us are released. Allow future versions of Among Us to join your server. |
|
||||
| **AllowVersionMixing** | `false` | Allow players using different game versions to play in one lobby. |
|
||||
|
||||
### Debug
|
||||
|
||||
@@ -101,11 +79,11 @@ Other Serilog sinks are also supported, but are out of scope for this documentat
|
||||
|
||||
### File
|
||||
|
||||
The `config.json` file contains all the configurable options.
|
||||
The simplest option to configure is by using the `config.json` file next to the server executable. For all possible options see the [config-full.json](https://github.com/Impostor/Impostor/blob/dev/src/Impostor.Server/config-full.json) file.
|
||||
|
||||
### Environment variables
|
||||
|
||||
If you're unable to edit the `config.json` file, you can instead set Environment variables to configure Impostor. The general pattern for each variable is `IMPOSTOR_SectionName__VariableName`. For example, to disable the anticheat, you can set the environment variable `IMPOSTOR_AntiCheat__Enabled=false`. Here are some more examples:
|
||||
If you're unable to edit the config.json file, you can instead set Environment variables to configure Impostor. The general pattern for each variable is `IMPOSTOR_SectionName__VariableName`. For example, to disable the anticheat, you can set the environment variable `IMPOSTOR_AntiCheat__Enabled=false`. Here are some more examples:
|
||||
|
||||
```
|
||||
IMPOSTOR_Server__PublicIp=127.0.0.1
|
||||
@@ -180,4 +158,4 @@ If everything has started correctly, ensure the service is set to start on boot.
|
||||
|
||||
```
|
||||
sudo systemctl enable impostor.service
|
||||
```
|
||||
```
|
||||
@@ -47,12 +47,6 @@ Also check if the port Impostor (ListenPort) is listening on is correctly port-f
|
||||
Please check that you only have **working** plugins in the `plugins` folder.
|
||||
This error can be caused by non-plugin files or plugins that are not working correctly.
|
||||
|
||||
## Disconnected with `You disconnected from the server. If this happens often, check your network strength. This may also be a server issue`
|
||||
|
||||
Usually this means that Among Us couldn't connect to Impostor's HTTP server.
|
||||
|
||||
Open the address of your server in a web browser, it should show you a small page confirming that Impostor is available.
|
||||
|
||||
## My question is not yet answered and I'm still having problems!
|
||||
|
||||
That's unfortunate. Join the [Impostor Discord](https://discord.gg/Mk3w6Tb), ask your question there and we'll try to help you out. Note that we're not always available, so it may take some time to get an answer. To make answering your question easier, please add the following details:
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
# Upgrading Impostor
|
||||
|
||||
Sometimes we make incompatible changes to existing code. This document lists these changes and which changes you should make as a server administrator.
|
||||
|
||||
## Impostor 1.9.0
|
||||
|
||||
Previously we recommended using the Impostor.Http plugin for HTTP matchmaking. Because Among Us now relies on HTTP matchmaking, this plugin is now part of the default installation. As a result, you should change your server as follows:
|
||||
|
||||
- If you have Impostor.Http installed, you should remove that plugin. If you have changed the default settings, you need to move these changes to the [HttpServer section in config.json](Server-configuration.md#HttpServer).
|
||||
- If you have plugins that required Impostor.Http's API (like Reactor.Impostor.Http), you should check that plugin for updates
|
||||
- It is no longer necessary to add the ASP.NET Core folder to the PluginLoader's LibraryPaths
|
||||
|
||||
@@ -27,16 +27,24 @@ https://dotnet.microsoft.com/download
|
||||
|
||||
## 2. Create a C# project
|
||||
|
||||
The first step is creating a new C# project, it must be a **Class Library (.NET Standard)**. The target framework can be any of those compatible with .NET 8, but we recommend sticking with **.NET 8.0**.
|
||||
The first step is creating a new C# project, it must be a **Class Library (.NET Standard)**. The target framework can be any of those compatible with .NET 7, which includes:
|
||||
|
||||
- .NET Standard 2.0
|
||||
- .NET Standard 2.1
|
||||
- .NET 5
|
||||
- .NET 6
|
||||
- .NET 7
|
||||
|
||||
For more information about compatibility, see https://docs.microsoft.com/en-us/dotnet/standard/net-standard.
|
||||
|
||||
> At the moment of writing this document, I recommend you to use **.NET 7.0**.
|
||||
|
||||
When the project has been created, you should have `Class.cs` and `Project.csproj` files. Your `Project.csproj` should look something like this.
|
||||
|
||||
```xml
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
```
|
||||
@@ -262,7 +270,7 @@ Now your plugin is ready to be tested.
|
||||
|
||||
1. Right click your project and press `Build`.
|
||||
2. Right click your project and press `Open Folder in File Explorer`.
|
||||
3. Go to `bin/Debug/net8.0/`.
|
||||
3. Go to `bin/Debug/net7.0/`.
|
||||
4. In this directory, you should find your plugin named `Project.dll`.
|
||||
5. Copy the `Project.dll` to the `plugins` directory in your Impostor server directory.
|
||||
6. (Re)start your Impostor server.
|
||||
@@ -301,7 +309,7 @@ Constantly copying the plugin dll to your server directory can be pretty annoyin
|
||||
},
|
||||
"PluginLoader": {
|
||||
"Paths": [
|
||||
"D:\\Projects\\Impostor\\src\\Impostor.Plugins.Example\\bin\\Debug\\net8.0"
|
||||
"D:\\Projects\\Impostor\\src\\Impostor.Plugins.Example\\bin\\Debug\\net7.0"
|
||||
],
|
||||
"LibraryPaths": []
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<LangVersion>11</LangVersion>
|
||||
<VersionPrefix>1.10.7</VersionPrefix>
|
||||
<VersionPrefix>1.9.0</VersionPrefix>
|
||||
<VersionSuffix>dev</VersionSuffix>
|
||||
<EnforceCodeStyleInBuild Condition="$(MSBuildProjectName)!='Hazel'">true</EnforceCodeStyleInBuild>
|
||||
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
||||
|
||||
@@ -1,30 +1,11 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Numerics;
|
||||
|
||||
namespace Impostor.Api.Innersloth.Generator;
|
||||
|
||||
internal static class Extensions
|
||||
{
|
||||
public static string NormalizePath(this string path)
|
||||
{
|
||||
return path.Replace("\\", "/");
|
||||
}
|
||||
|
||||
public static bool TryTrimStart(this string text, string value, [NotNullWhen(true)] out string? result)
|
||||
{
|
||||
if (text.StartsWith(value))
|
||||
{
|
||||
result = text[value.Length..];
|
||||
return true;
|
||||
}
|
||||
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static string ToCSharpString(this Vector2 value)
|
||||
{
|
||||
return $"new Vector2({value.X.ToString(CultureInfo.InvariantCulture)}f, {value.Y.ToString(CultureInfo.InvariantCulture)}f)";
|
||||
return $"new Vector2({value.X}f, {value.Y}f)";
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Globalization;
|
||||
using System.Numerics;
|
||||
using System.Text.Json;
|
||||
using CSharpPoet;
|
||||
@@ -103,7 +102,7 @@ public sealed class MapDataGenerator : BaseGenerator
|
||||
|
||||
new CSharpBlankLine(),
|
||||
|
||||
CreateSimpleProperty("float", "SpawnRadius", spawnInfo.SpawnRadius.ToString(CultureInfo.InvariantCulture) + "f"),
|
||||
CreateSimpleProperty("float", "SpawnRadius", spawnInfo.SpawnRadius + "f"),
|
||||
CreateSimpleProperty("Vector2", "InitialSpawnCenter", spawnInfo.InitialSpawnCenter.ToCSharpString()),
|
||||
CreateSimpleProperty("Vector2", "MeetingSpawnCenter", spawnInfo.MeetingSpawnCenter.ToCSharpString()),
|
||||
CreateSimpleProperty("Vector2", "MeetingSpawnCenter2", spawnInfo.MeetingSpawnCenter2.ToCSharpString()),
|
||||
@@ -181,6 +180,7 @@ public sealed class MapDataGenerator : BaseGenerator
|
||||
{
|
||||
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; }
|
||||
}
|
||||
|
||||
@@ -6,19 +6,15 @@
|
||||
<DebugType>embedded</DebugType>
|
||||
<Nullable>enable</Nullable>
|
||||
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
|
||||
<IsRoslynComponent>true</IsRoslynComponent>
|
||||
</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.14.1" PrivateAssets="all" />
|
||||
<PackageReference Include="PolySharp" Version="1.13.2" PrivateAssets="all" />
|
||||
|
||||
<PackageReference Include="System.Text.Json" Version="8.0.5" PrivateAssets="all" GeneratePathProperty="true" />
|
||||
<PackageReference Include="System.Text.Encodings.Web" Version="8.0.0" PrivateAssets="all" GeneratePathProperty="true" />
|
||||
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0" PrivateAssets="all" GeneratePathProperty="true" />
|
||||
|
||||
<PackageReference Include="CSharpPoet" Version="0.3.0" PrivateAssets="all" GeneratePathProperty="true" />
|
||||
<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>
|
||||
@@ -27,11 +23,8 @@
|
||||
|
||||
<Target Name="GetDependencyTargetPaths">
|
||||
<ItemGroup>
|
||||
<TargetPathWithTargetPlatformMoniker Include="$(PkgSystem_Text_Json)\lib\netstandard2.0\*.dll" IncludeRuntimeDependency="false" />
|
||||
<TargetPathWithTargetPlatformMoniker Include="$(PkgSystem_Text_Encodings_Web)\lib\netstandard2.0\*.dll" IncludeRuntimeDependency="false" />
|
||||
<TargetPathWithTargetPlatformMoniker Include="$(PKGMicrosoft_Bcl_AsyncInterfaces)\lib\netstandard2.0\*.dll" IncludeRuntimeDependency="false" />
|
||||
|
||||
<TargetPathWithTargetPlatformMoniker Include="$(PkgCSharpPoet)\lib\netstandard2.0\*.dll" IncludeRuntimeDependency="false" />
|
||||
<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>
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using CSharpPoet;
|
||||
using Impostor.Api.Innersloth.Generator.Generators;
|
||||
using Microsoft.CodeAnalysis;
|
||||
@@ -9,24 +8,7 @@ namespace Impostor.Api.Innersloth.Generator;
|
||||
[Generator(LanguageNames.CSharp)]
|
||||
public sealed class SourceGenerator : IIncrementalGenerator
|
||||
{
|
||||
private const string DataPath = "Innersloth/Data/";
|
||||
|
||||
private readonly record struct Options(string ProjectDirectory)
|
||||
{
|
||||
public bool TryGetRelativePath(string path, [NotNullWhen(true)] out string? relativePath)
|
||||
{
|
||||
if (
|
||||
path.NormalizePath().TryTrimStart(ProjectDirectory, out relativePath) &&
|
||||
relativePath.TryTrimStart(DataPath, out relativePath)
|
||||
)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
relativePath = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
private record struct Options(string ProjectDirectory);
|
||||
|
||||
public void Initialize(IncrementalGeneratorInitializationContext context)
|
||||
{
|
||||
@@ -38,26 +20,22 @@ public sealed class SourceGenerator : IIncrementalGenerator
|
||||
throw new Exception("Couldn't get project directory");
|
||||
}
|
||||
|
||||
return new Options(projectDirectory.NormalizePath());
|
||||
return new Options(projectDirectory);
|
||||
});
|
||||
|
||||
var filesProvider = context.AdditionalTextsProvider.Combine(optionsProvider)
|
||||
.Where(static pair =>
|
||||
{
|
||||
var (file, options) = pair;
|
||||
return options.TryGetRelativePath(file.Path, out var relativePath) && relativePath.EndsWith(".json");
|
||||
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;
|
||||
|
||||
if (!options.TryGetRelativePath(file.Path, out var relativePath))
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
|
||||
return (
|
||||
RelativePath: relativePath,
|
||||
RelativePath: file.Path[(options.ProjectDirectory.Length + "Innersloth/Data/".Length)..],
|
||||
Content: file.GetText(cancellationToken)!.ToString()
|
||||
);
|
||||
})
|
||||
@@ -65,11 +43,6 @@ public sealed class SourceGenerator : IIncrementalGenerator
|
||||
|
||||
context.RegisterSourceOutput(filesProvider, (spc, files) =>
|
||||
{
|
||||
if (files.IsEmpty)
|
||||
{
|
||||
throw new InvalidOperationException($"No json files found in Impostor.Api/{DataPath}");
|
||||
}
|
||||
|
||||
var enumGenerator = new EnumGenerator(spc, files);
|
||||
|
||||
enumGenerator.Generate("ColorType", "Impostor.Api.Innersloth.Customization");
|
||||
@@ -79,20 +52,10 @@ public sealed class SourceGenerator : IIncrementalGenerator
|
||||
enumGenerator.Generate("GameOverReason", underlyingType: CSharpEnumUnderlyingType.Byte);
|
||||
enumGenerator.Generate("Platforms");
|
||||
enumGenerator.Generate("RoleTypes", underlyingType: CSharpEnumUnderlyingType.UnsignedShort);
|
||||
enumGenerator.Generate("RulesPresets", underlyingType: CSharpEnumUnderlyingType.Byte);
|
||||
enumGenerator.Generate("SpecialGameModes", underlyingType: CSharpEnumUnderlyingType.Byte);
|
||||
enumGenerator.Generate("StringNames");
|
||||
enumGenerator.Generate("SystemTypes", underlyingType: CSharpEnumUnderlyingType.Byte);
|
||||
enumGenerator.Generate("Language", sourceName: "SupportedLangs");
|
||||
enumGenerator.Generate("TaskTypes");
|
||||
enumGenerator.Generate("BoolOptionNames", "Impostor.Api.Innersloth.GameFilters");
|
||||
enumGenerator.Generate("ByteOptionNames", "Impostor.Api.Innersloth.GameFilters");
|
||||
enumGenerator.Generate("CategorizedOptionNames", "Impostor.Api.Innersloth.GameFilters");
|
||||
enumGenerator.Generate("FloatArrayOptionNames", "Impostor.Api.Innersloth.GameFilters");
|
||||
enumGenerator.Generate("FloatOptionNames", "Impostor.Api.Innersloth.GameFilters");
|
||||
enumGenerator.Generate("Int32ArrayOptionNames", "Impostor.Api.Innersloth.GameFilters");
|
||||
enumGenerator.Generate("Int32OptionNames", "Impostor.Api.Innersloth.GameFilters");
|
||||
enumGenerator.Generate("UInt32OptionNames", "Impostor.Api.Innersloth.GameFilters");
|
||||
|
||||
enumGenerator.Generate("RpcCalls", "Impostor.Api.Net.Inner", underlyingType: CSharpEnumUnderlyingType.Byte);
|
||||
|
||||
|
||||
@@ -8,15 +8,6 @@
|
||||
"resolved": "0.3.0",
|
||||
"contentHash": "3QDh9rMuiNhMtNWOLj0FItiZruON7lj3zD0CXC9IHq4JWpF5OjbaZ2s1X0u6gftE73KCoTezXIgKvxacps78Fw=="
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces": {
|
||||
"type": "Direct",
|
||||
"requested": "[8.0.0, )",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==",
|
||||
"dependencies": {
|
||||
"System.Threading.Tasks.Extensions": "4.5.4"
|
||||
}
|
||||
},
|
||||
"Microsoft.CodeAnalysis.Analyzers": {
|
||||
"type": "Direct",
|
||||
"requested": "[3.3.4, )",
|
||||
@@ -43,32 +34,30 @@
|
||||
},
|
||||
"PolySharp": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.14.1, )",
|
||||
"resolved": "1.14.1",
|
||||
"contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
|
||||
},
|
||||
"System.Text.Encodings.Web": {
|
||||
"type": "Direct",
|
||||
"requested": "[8.0.0, )",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
|
||||
"dependencies": {
|
||||
"System.Buffers": "4.5.1",
|
||||
"System.Memory": "4.5.5",
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
}
|
||||
"requested": "[1.13.2, )",
|
||||
"resolved": "1.13.2",
|
||||
"contentHash": "XwNhfkr7IeUiH8AE4pzob8YioxfL6nxgAx+fHEeWCObY/NZuBMfWLh39FznXbneKvagiqeeI7quIvZ6P1eVaEA=="
|
||||
},
|
||||
"System.Text.Json": {
|
||||
"type": "Direct",
|
||||
"requested": "[8.0.5, )",
|
||||
"resolved": "8.0.5",
|
||||
"contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
|
||||
"requested": "[7.0.3, )",
|
||||
"resolved": "7.0.3",
|
||||
"contentHash": "AyjhwXN1zTFeIibHimfJn6eAsZ7rTBib79JQpzg8WAuR/HKDu9JGNHTuu3nbbXQ/bgI+U4z6HtZmCHNXB1QXrQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.AsyncInterfaces": "8.0.0",
|
||||
"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": "8.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"
|
||||
}
|
||||
},
|
||||
@@ -117,8 +106,8 @@
|
||||
},
|
||||
"System.Numerics.Vectors": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.4.0",
|
||||
"contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
|
||||
"resolved": "4.5.0",
|
||||
"contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
|
||||
},
|
||||
"System.Reflection.Metadata": {
|
||||
"type": "Transitive",
|
||||
@@ -143,6 +132,16 @@
|
||||
"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",
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
namespace Impostor.Api;
|
||||
|
||||
public enum CheatCategory
|
||||
{
|
||||
/// <summary>A packet used a part of the network protocol that is unknown to Impostor, like a custom RPC.</summary>
|
||||
ProtocolExtension,
|
||||
|
||||
/// <summary>A host-only mod extension is used outside of host-authoritive mode.</summary>
|
||||
HostOnlyExtension,
|
||||
|
||||
/// <summary>A packet was sent at an inappropriate moment.</summary>
|
||||
GameFlow,
|
||||
|
||||
/// <summary>A packet was sent by a non-host player that should normally only be sent by the host.</summary>
|
||||
MustBeHost,
|
||||
|
||||
/// <summary>A packet was sent that violated limits on the selection of player colors.</summary>
|
||||
ColorLimits,
|
||||
|
||||
/// <summary>A packet was sent that exceeded the limits of possible nicknames to enter ingame.</summary>
|
||||
NameLimits,
|
||||
|
||||
/// <summary>A packet was sent on behalf of another player.</summary>
|
||||
Ownership,
|
||||
|
||||
/// <summary>An ability was used that the current role cannot access.</summary>
|
||||
Role,
|
||||
|
||||
/// <summary>A packet was sent to a player that should be broadcasted, or vice versa.</summary>
|
||||
Target,
|
||||
|
||||
/// <summary>A packet was sent on an invalid network object, like a PlayerControl without PlayerInfo.</summary>
|
||||
InvalidObject,
|
||||
|
||||
/// <summary>A packet was sent that exceeded the maximum allowed RPC size.</summary>
|
||||
PacketSize,
|
||||
|
||||
/// <summary>Legacy category for unsorted anticheat checks.</summary>
|
||||
Other,
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Impostor.Api.Config
|
||||
namespace Impostor.Api.Config
|
||||
{
|
||||
public class AntiCheatConfig
|
||||
{
|
||||
@@ -7,31 +7,5 @@ namespace Impostor.Api.Config
|
||||
public bool Enabled { get; set; } = true;
|
||||
|
||||
public bool BanIpFromGame { get; set; } = true;
|
||||
|
||||
public CheatingHostMode AllowCheatingHosts { get; set; } = CheatingHostMode.Never;
|
||||
|
||||
public CheatingHostMode AllowHostOnlyExtensions { get; set; } = CheatingHostMode.IfRequested;
|
||||
|
||||
public bool EnableGameFlowChecks { get; set; } = true;
|
||||
|
||||
public bool EnableMustBeHostChecks { get; set; } = true;
|
||||
|
||||
public bool EnableInvalidObjectChecks { get; set; } = true;
|
||||
|
||||
public bool EnableColorLimitChecks { get; set; } = true;
|
||||
|
||||
public bool EnableNameLimitChecks { get; set; } = true;
|
||||
|
||||
public bool EnableOwnershipChecks { get; set; } = true;
|
||||
|
||||
public bool EnableRoleChecks { get; set; } = true;
|
||||
|
||||
public bool EnableTargetChecks { get; set; } = true;
|
||||
|
||||
public bool ForbidProtocolExtensions { get; set; } = true;
|
||||
|
||||
public bool EnablePacketSizeChecks { get; set; } = true;
|
||||
|
||||
public int PacketSizeLimit { get; set; } = 1203;
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
namespace Impostor.Api.Config
|
||||
{
|
||||
/// <summary>
|
||||
/// Details if exceptions are made for hosts that are cheating.
|
||||
/// </summary>
|
||||
public enum CheatingHostMode
|
||||
{
|
||||
/// <summary>
|
||||
/// Hosts follow the same policies as other players.
|
||||
/// </summary>
|
||||
Never,
|
||||
|
||||
/// <summary>
|
||||
/// Hosts are allowed to cheat if they request HostAuthority. If they
|
||||
/// do not request this, the same policies as for other players applies.
|
||||
/// </summary>
|
||||
/// <para>
|
||||
/// HostAuthority can be requested by hosts by adding 25 to their patch
|
||||
/// version when connecting. This flag is used by a lot of (host-only)
|
||||
/// mods and also disable server authority over MurderPlayer packets.
|
||||
/// </para>
|
||||
IfRequested,
|
||||
|
||||
/// <summary>
|
||||
/// Hosts are always allowed to cheat.
|
||||
/// </summary>
|
||||
Always,
|
||||
}
|
||||
}
|
||||
@@ -6,8 +6,6 @@ namespace Impostor.Api.Config
|
||||
|
||||
public bool AllowFutureGameVersions { get; set; } = false;
|
||||
|
||||
public bool AllowHostAuthority { get; set; } = false;
|
||||
|
||||
public bool AllowVersionMixing { get; set; } = false;
|
||||
}
|
||||
}
|
||||
@@ -23,14 +23,5 @@
|
||||
public const string VersionServerTooOld = "Your client is too new, please update your Impostor server to play.";
|
||||
|
||||
public const string VersionUnsupported = "Your client version is unsupported, please update your Game and/or Impostor server.";
|
||||
|
||||
private const string UpgradingDocsLink = "https://github.com/Impostor/Impostor/blob/master/docs/Upgrading.md";
|
||||
|
||||
public const string UdpMatchmakingUnsupported = $"""
|
||||
Sorry, UDP Matchmaking is no longer supported.
|
||||
See <link={UpgradingDocsLink}#impostor-190>Impostor documentation</link> on how to migrate to HTTP Matchmaking
|
||||
""";
|
||||
|
||||
public const string HostAuthorityUnsupported = "Your client is requesting host authority, which is not enabled on this Impostor server.";
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
namespace Impostor.Api.Config;
|
||||
|
||||
/// <summary>
|
||||
/// Configuration for HttpServer.
|
||||
/// </summary>
|
||||
public class HttpServerConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the name of this config section.
|
||||
/// </summary>
|
||||
public const string Section = "HttpServer";
|
||||
|
||||
public bool Enabled { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the IP address the HTTP Matchmaking server will listen on.
|
||||
/// </summary>
|
||||
/// Use "127.0.0.1" if you are running behind a reverse proxy or just testing locally.
|
||||
/// Use "0.0.0.0" if you are directly exposing this server to the internet.
|
||||
public string ListenIp { get; set; } = "0.0.0.0";
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the port the HTTP Matchmaking server will listen on.
|
||||
/// </summary>
|
||||
/// For port forwarding purposes, this is a TCP port.
|
||||
public ushort ListenPort { get; set; } = 22023;
|
||||
}
|
||||
@@ -13,7 +13,7 @@ namespace Impostor.Api.Config
|
||||
|
||||
public ushort PublicPort { get; set; } = 22023;
|
||||
|
||||
public string ListenIp { get; set; } = "0.0.0.0";
|
||||
public string ListenIp { get; set; } = "127.0.0.1";
|
||||
|
||||
public ushort ListenPort { get; set; } = 22023;
|
||||
|
||||
|
||||
@@ -1,24 +1,11 @@
|
||||
using Impostor.Api.Games;
|
||||
using Impostor.Api.Net;
|
||||
|
||||
namespace Impostor.Api.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// Called whenever a new <see cref="IGame" /> is created.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Note that the game just has been created, so no players have joined
|
||||
/// it yet. If you want to know the future host of this game, use the
|
||||
/// <see cref="Host"/> property.
|
||||
/// </remarks>
|
||||
public interface IGameCreatedEvent : IGameEvent
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the client that requested creation of the game.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Will be null if game creation was requested by a plugin.
|
||||
/// </remarks>
|
||||
IClient? Host { get; }
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
using Impostor.Api.Games;
|
||||
|
||||
namespace Impostor.Api.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// This event is triggered when game options are going to be changed.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Be careful when calling SyncSettingsAsync while handling this event,
|
||||
/// as it may call this event again in some cases.
|
||||
/// </remarks>
|
||||
public interface IGameOptionsChangedEvent : IGameEvent
|
||||
{
|
||||
/// <summary>
|
||||
/// Lists the possible reasons that the game options may have changed.
|
||||
/// </summary>
|
||||
public enum ChangeReason
|
||||
{
|
||||
/// <summary>
|
||||
/// The options were changed by the host using LogicOptions deserialization.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This event does not change the message sent to other players,
|
||||
/// so changes made to Game.Options are not synced until
|
||||
/// SyncSettingsAsync is called afterwards.
|
||||
/// </remarks>
|
||||
Host,
|
||||
|
||||
/// <summary>
|
||||
/// The options were changed by a plugin using the
|
||||
/// SyncSettingsAsync method in <see cref="IGame"/>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This event is called after serializing the settings, which
|
||||
/// means that changes made by event handlers will not be synced
|
||||
/// over.
|
||||
///
|
||||
/// We strongly recommend against calling SyncSettingsAsync while
|
||||
/// handling this event.
|
||||
/// </remarks>
|
||||
Api,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the reason that the game options have changed.
|
||||
/// </summary>
|
||||
public ChangeReason ChangedBy { get; }
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Impostor.Api.Events.Player
|
||||
namespace Impostor.Api.Events.Player
|
||||
{
|
||||
public interface IPlayerChatEvent : IPlayerEvent, IEventCancelable
|
||||
{
|
||||
@@ -6,12 +6,5 @@ namespace Impostor.Api.Events.Player
|
||||
/// Gets the message sent by the player.
|
||||
/// </summary>
|
||||
string Message { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether the message is sent to
|
||||
/// all players (true) or only to the host (false).
|
||||
/// To not send this message at all, cancel this event instead.
|
||||
/// </summary>
|
||||
bool SendToAllPlayers { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Impostor.Api
|
||||
{
|
||||
@@ -15,5 +16,9 @@ namespace Impostor.Api
|
||||
public ImpostorConfigException(string? message, Exception? innerException) : base(message, innerException)
|
||||
{
|
||||
}
|
||||
|
||||
protected ImpostorConfigException(SerializationInfo info, StreamingContext context) : base(info, context)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Impostor.Api
|
||||
{
|
||||
@@ -15,5 +16,9 @@ namespace Impostor.Api
|
||||
public ImpostorException(string? message, Exception? innerException) : base(message, innerException)
|
||||
{
|
||||
}
|
||||
|
||||
protected ImpostorException(SerializationInfo info, StreamingContext context) : base(info, context)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Impostor.Api
|
||||
{
|
||||
@@ -15,5 +16,9 @@ namespace Impostor.Api
|
||||
public ImpostorProtocolException(string? message, Exception? innerException) : base(message, innerException)
|
||||
{
|
||||
}
|
||||
|
||||
protected ImpostorProtocolException(SerializationInfo info, StreamingContext context) : base(info, context)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -101,41 +101,22 @@ namespace Impostor.Api.Games
|
||||
/// <returns>A <see cref="ValueTask" /> representing the asynchronous operation.</returns>
|
||||
ValueTask SendToAsync(IMessageWriter writer, int id);
|
||||
|
||||
/// <summary>
|
||||
/// Start a GameData(To) message.
|
||||
/// </summary>
|
||||
/// <remarks>Use with caution, recommended only for advanced developers.</remarks>
|
||||
/// <param name="targetClientId">The client to target if needed, `null` if the message should be sent to all players.</param>
|
||||
/// <param name="type">Message type of the message.</param>
|
||||
/// <returns>A <see cref="IMessageWriter" /> that you can fill and send using <see cref="FinishGameDataAsync"/>.</returns>
|
||||
IMessageWriter StartGameData(int? targetClientId = null, MessageType type = MessageType.Reliable);
|
||||
|
||||
/// <summary>
|
||||
/// Finishes GameData message and sends it to either the target or all players.
|
||||
/// </summary>
|
||||
/// <remarks>Use with caution, recommended only for advanced developers.</remarks>
|
||||
/// <param name="writer">MessageWriter received from <see cref="StartGameData"/>.</param>
|
||||
/// <param name="targetClientId">Same target ClientId passed to StartGameData.</param>
|
||||
/// <returns>Task that sends the packet.</returns>
|
||||
ValueTask FinishGameDataAsync(IMessageWriter writer, int? targetClientId = null);
|
||||
|
||||
/// <summary>
|
||||
/// Creates a MessageWriter with GameData header.
|
||||
/// </summary>
|
||||
/// <remarks>Use with caution, recommended only for advanced developers.</remarks>
|
||||
/// <param name="targetNetId">Net id of the InnerNetObject.</param>
|
||||
/// <param name="callId">Rpc id of the message.</param>
|
||||
/// <param name="targetClientId">The client to target if needed, `null` if the message should be sent to all players.</param>
|
||||
/// <param name="targetClientId">Client id of GameDataTo's target.</param>
|
||||
/// <param name="type">Message type of the message.</param>
|
||||
/// <returns>A <see cref="IMessageWriter" /> that you can fill with rpc data and send using <see cref="FinishRpcAsync"/>.</returns>
|
||||
IMessageWriter StartRpc(uint targetNetId, RpcCalls callId, int? targetClientId = null, MessageType type = MessageType.Reliable);
|
||||
IMessageWriter StartRpc(uint targetNetId, RpcCalls callId, int? targetClientId, MessageType type = MessageType.Reliable);
|
||||
|
||||
/// <summary>
|
||||
/// Finishes rpc message and sends it to either the target or all players.
|
||||
/// Finishes rpc message and sends it to the target.
|
||||
/// </summary>
|
||||
/// <remarks>Use with caution, recommended only for advanced developers.</remarks>
|
||||
/// <param name="writer">Message writer of the rpc.</param>
|
||||
/// <param name="targetClientId">Same target client id passed to <see cref="StartRpc"/>.</param>
|
||||
/// <param name="targetClientId">Id of the receiving client.</param>
|
||||
/// <returns>A <see cref="ValueTask" /> representing the asynchronous operation.</returns>
|
||||
ValueTask FinishRpcAsync(IMessageWriter writer, int? targetClientId = null);
|
||||
}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
using System;
|
||||
using Impostor.Api.Games;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Impostor.Api.Http;
|
||||
|
||||
/// <summary>
|
||||
/// Register a method to filter listings on.
|
||||
/// </summary>
|
||||
public interface IListingFilter
|
||||
{
|
||||
/// <summary>
|
||||
/// Return a filter to filter listings on.
|
||||
/// </summary>
|
||||
/// <param name="context">HTTP Context of this request.</param>
|
||||
/// <returns>A function that looks at a game and returns true iff the connecting player is compatible with this game.</returns>
|
||||
Func<IGame, bool> GetFilter(HttpContext context);
|
||||
}
|
||||
@@ -25,11 +25,10 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.0" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.556" PrivateAssets="all" />
|
||||
<PackageReference Include="Impostor.Hazel.Abstractions" Version="1.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
|
||||
<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" />
|
||||
|
||||
@@ -2,102 +2,42 @@ namespace Impostor.Api.Innersloth.Customization
|
||||
{
|
||||
public class PlayerOutfit
|
||||
{
|
||||
// Magic value that is assigned by default when the outfit is initially created. This is not
|
||||
// `null` because existing API already exposed this magic value. It's also not 0 (which is
|
||||
// the value exposed when serializing) because SetColor anticheat checks exist.
|
||||
private const ColorType UnknownColor = (ColorType)(-1);
|
||||
public ColorType Color { get; internal set; } = (ColorType)(-1);
|
||||
|
||||
private string _playerName = string.Empty;
|
||||
private ColorType _color = UnknownColor;
|
||||
private string _hatId = "missing";
|
||||
private string _petId = "missing";
|
||||
private string _skinId = "missing";
|
||||
private string _visorId = "missing";
|
||||
private string _namePlateId = "missing";
|
||||
public string HatId { get; internal set; } = "missing";
|
||||
|
||||
public bool IsDirty { get; internal set; }
|
||||
public string PetId { get; internal set; } = "missing";
|
||||
|
||||
public string PlayerName
|
||||
public string SkinId { get; internal set; } = "missing";
|
||||
|
||||
public string VisorId { get; internal set; } = "missing";
|
||||
|
||||
public string NamePlateId { get; internal set; } = "missing";
|
||||
|
||||
public string PlayerName { get; internal set; } = "missing";
|
||||
|
||||
public bool IsIncomplete
|
||||
{
|
||||
get => _playerName;
|
||||
internal set => SetField(ref _playerName, value);
|
||||
get
|
||||
{
|
||||
if (!string.IsNullOrEmpty(PlayerName) && Color != (ColorType)(-1) && HatId != "missing" && PetId != "missing" && SkinId != "missing" && VisorId != "missing")
|
||||
{
|
||||
return NamePlateId == "missing";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public ColorType Color
|
||||
{
|
||||
get => _color;
|
||||
internal set => SetField(ref _color, value);
|
||||
}
|
||||
|
||||
public string HatId
|
||||
{
|
||||
get => _hatId;
|
||||
internal set => SetField(ref _hatId, value);
|
||||
}
|
||||
|
||||
public string PetId
|
||||
{
|
||||
get => _petId;
|
||||
internal set => SetField(ref _petId, value);
|
||||
}
|
||||
|
||||
public string SkinId
|
||||
{
|
||||
get => _skinId;
|
||||
internal set => SetField(ref _skinId, value);
|
||||
}
|
||||
|
||||
public string VisorId
|
||||
{
|
||||
get => _visorId;
|
||||
internal set => SetField(ref _visorId, value);
|
||||
}
|
||||
|
||||
public string NamePlateId
|
||||
{
|
||||
get => _namePlateId;
|
||||
internal set => SetField(ref _namePlateId, value);
|
||||
}
|
||||
|
||||
internal byte HatSequenceId { get; set; } = 0;
|
||||
|
||||
internal byte PetSequenceId { get; set; } = 0;
|
||||
|
||||
internal byte SkinSequenceId { get; set; } = 0;
|
||||
|
||||
internal byte VisorSequenceId { get; set; } = 0;
|
||||
|
||||
internal byte NamePlateSequenceId { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether a player outfit is complete or whether it needs to receive additional cosmetics.
|
||||
/// </summary>
|
||||
/// <returns>true if the outfit is incomplete, false if the outfit is complete.</returns>
|
||||
public bool IsIncomplete => string.IsNullOrEmpty(PlayerName)
|
||||
|| Color == UnknownColor
|
||||
|| HatId == "missing"
|
||||
|| PetId == "missing"
|
||||
|| SkinId == "missing"
|
||||
|| VisorId == "missing"
|
||||
|| NamePlateId == "missing";
|
||||
|
||||
public void Serialize(IMessageWriter writer)
|
||||
{
|
||||
writer.Write(PlayerName);
|
||||
|
||||
// Follow officials by not sending a color value that is out of range. Sending -1 can cause exceptions on the client side.
|
||||
writer.WritePacked(Color == UnknownColor ? 0 : (int)Color);
|
||||
|
||||
writer.WritePacked((int)Color);
|
||||
writer.Write(HatId);
|
||||
writer.Write(PetId);
|
||||
writer.Write(SkinId);
|
||||
writer.Write(VisorId);
|
||||
writer.Write(NamePlateId);
|
||||
writer.Write(HatSequenceId);
|
||||
writer.Write(PetSequenceId);
|
||||
writer.Write(SkinSequenceId);
|
||||
writer.Write(VisorSequenceId);
|
||||
writer.Write(NamePlateSequenceId);
|
||||
}
|
||||
|
||||
public void Deserialize(IMessageReader reader)
|
||||
@@ -109,17 +49,6 @@ namespace Impostor.Api.Innersloth.Customization
|
||||
SkinId = reader.ReadString();
|
||||
VisorId = reader.ReadString();
|
||||
NamePlateId = reader.ReadString();
|
||||
HatSequenceId = reader.ReadByte();
|
||||
PetSequenceId = reader.ReadByte();
|
||||
SkinSequenceId = reader.ReadByte();
|
||||
VisorSequenceId = reader.ReadByte();
|
||||
NamePlateSequenceId = reader.ReadByte();
|
||||
}
|
||||
|
||||
private void SetField<T>(ref T field, T value)
|
||||
{
|
||||
field = value;
|
||||
IsDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,5 @@ namespace Impostor.Api.Innersloth.Customization
|
||||
{
|
||||
Default,
|
||||
Shapeshifted,
|
||||
HorseWrangler,
|
||||
MushroomMixup,
|
||||
}
|
||||
}
|
||||
@@ -2,14 +2,13 @@
|
||||
"0": "SkeldShipStatus",
|
||||
"1": "MeetingHud",
|
||||
"2": "LobbyBehaviour",
|
||||
"3": "GameData",
|
||||
"4": "PlayerControl",
|
||||
"5": "MiraShipStatus",
|
||||
"6": "PolusShipStatus",
|
||||
"7": "SkeldShipStatus",
|
||||
"7": "ShipStatus",
|
||||
"8": "AirshipStatus",
|
||||
"9": "HideAndSeekManager",
|
||||
"10": "NormalGameManager",
|
||||
"11": "NetworkedPlayerInfo",
|
||||
"12": "VoteBanSystem",
|
||||
"13": "FungleShipStatus"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"Invalid": 0,
|
||||
"VisualTasks": 1,
|
||||
"GhostsDoTasks": 2,
|
||||
"ConfirmImpostor": 3,
|
||||
"AnonymousVotes": 4,
|
||||
"IsDefaults": 5,
|
||||
"UseFlashlight": 6,
|
||||
"SeekerFinalVents": 7,
|
||||
"SeekerFinalMap": 8,
|
||||
"SeekerPings": 9,
|
||||
"ShowCrewmateNames": 10,
|
||||
"Roles": 11,
|
||||
"ShapeshifterLeaveSkin": 1000,
|
||||
"ImpostorsCanSeeProtect": 1100,
|
||||
"NoisemakerImpostorAlert": 1300
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"Invalid": 0,
|
||||
"MapId": 1
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"KillCooldown": 0,
|
||||
"PlayerSpeed": 1,
|
||||
"EmergencyMeetingCount": 2,
|
||||
"EmergencyMeetingCooldown": 3,
|
||||
"DiscussionTime": 4,
|
||||
"VotingTime": 5,
|
||||
"CrewmateVision": 6,
|
||||
"HidingTime": 7,
|
||||
"MaxTimeInVent": 8,
|
||||
"ImposterVision": 9,
|
||||
"FinalHideTime": 10,
|
||||
"FinalHideImposterSpeed": 11
|
||||
}
|
||||
@@ -17,4 +17,4 @@
|
||||
"Gray": 15,
|
||||
"Tan": 16,
|
||||
"Coral": 17
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,6 @@
|
||||
"IncorrectGame": 18,
|
||||
"ServerRequest": 19,
|
||||
"ServerFull": 20,
|
||||
"MismatchedVersion": 21,
|
||||
"InternalPlayerMissing": 100,
|
||||
"InternalNonceFailure": 101,
|
||||
"InternalConnectionToken": 102,
|
||||
@@ -43,6 +42,5 @@
|
||||
"PlatformFailedToGetUserBlock": 213,
|
||||
"ServerNotFound": 214,
|
||||
"ClientTimeout": 215,
|
||||
"ErrorAuthNonceFailure": 216,
|
||||
"Unknown": 255
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"Invalid": 0,
|
||||
"KillDistances": 1
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"Invalid": 0,
|
||||
"KillCooldown": 1,
|
||||
"PlayerSpeedMod": 2,
|
||||
"ImpostorLightMod": 3,
|
||||
"CrewLightMod": 4,
|
||||
"CrewmateTimeInVent": 100,
|
||||
"FinalEscapeTime": 101,
|
||||
"EscapeTime": 102,
|
||||
"SeekerFinalSpeed": 103,
|
||||
"MaxPingTime": 104,
|
||||
"CrewmateFlashlightSize": 105,
|
||||
"ImpostorFlashlightSize": 106,
|
||||
"ShapeshifterCooldown": 1000,
|
||||
"ShapeshifterDuration": 1001,
|
||||
"ProtectionDurationSeconds": 1100,
|
||||
"GuardianAngelCooldown": 1101,
|
||||
"ScientistCooldown": 1200,
|
||||
"ScientistBatteryCharge": 1201,
|
||||
"EngineerCooldown": 1300,
|
||||
"EngineerInVentMaxTime": 1301,
|
||||
"PhantomCooldown": 1500,
|
||||
"PhantomDuration": 1501,
|
||||
"TrackerCooldown": 1550,
|
||||
"TrackerDuration": 1551,
|
||||
"TrackerDelay": 1552,
|
||||
"NoisemakerAlertDuration": 1600
|
||||
}
|
||||
@@ -19,4 +19,4 @@
|
||||
"SChinese": 65536,
|
||||
"TChinese": 131072,
|
||||
"Irish": 262144
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"CrewmatesByVote": 0,
|
||||
"CrewmatesByTask": 1,
|
||||
"ImpostorsByVote": 2,
|
||||
"ImpostorsByKill": 3,
|
||||
"ImpostorsBySabotage": 4,
|
||||
"HumansByVote": 0,
|
||||
"HumansByTask": 1,
|
||||
"ImpostorByVote": 2,
|
||||
"ImpostorByKill": 3,
|
||||
"ImpostorBySabotage": 4,
|
||||
"ImpostorDisconnect": 5,
|
||||
"CrewmateDisconnect": 6,
|
||||
"HideAndSeek_CrewmatesByTimer": 7,
|
||||
"HideAndSeek_ImpostorsByKills": 8
|
||||
}
|
||||
"HumansDisconnect": 6,
|
||||
"HideAndSeek_ByTimer": 7,
|
||||
"HideAndSeek_ByKills": 8
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"Invalid": 0,
|
||||
"MaxImpostors": 1,
|
||||
"MinPlayers": 2
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"Invalid": 0,
|
||||
"NumImpostors": 1,
|
||||
"KillDistance": 2,
|
||||
"NumEmergencyMeetings": 3,
|
||||
"EmergencyCooldown": 4,
|
||||
"DiscussionTime": 5,
|
||||
"VotingTime": 6,
|
||||
"MaxImpostors": 7,
|
||||
"MinPlayers": 8,
|
||||
"MaxPlayers": 9,
|
||||
"NumCommonTasks": 10,
|
||||
"NumShortTasks": 11,
|
||||
"NumLongTasks": 12,
|
||||
"TaskBarMode": 13,
|
||||
"Tag": 14,
|
||||
"CrewmatesRemainingForVitals": 100,
|
||||
"CrewmateVentUses": 101,
|
||||
"ImpostorPlayerID": 102,
|
||||
"RulePreset": 200
|
||||
}
|
||||
@@ -10,4 +10,4 @@
|
||||
"Switch": 8,
|
||||
"Xbox": 9,
|
||||
"Playstation": 10
|
||||
}
|
||||
}
|
||||
@@ -6,10 +6,5 @@
|
||||
"GuardianAngel": 4,
|
||||
"Shapeshifter": 5,
|
||||
"CrewmateGhost": 6,
|
||||
"ImpostorGhost": 7,
|
||||
"Noisemaker": 8,
|
||||
"Phantom": 9,
|
||||
"Tracker": 10,
|
||||
"Detective": 12,
|
||||
"Viper": 18
|
||||
}
|
||||
"ImpostorGhost": 7
|
||||
}
|
||||
@@ -8,15 +8,15 @@
|
||||
"SetName": 6,
|
||||
"CheckColor": 7,
|
||||
"SetColor": 8,
|
||||
"SetHat_Deprecated": 9,
|
||||
"SetSkin_Deprecated": 10,
|
||||
"SetHat": 9,
|
||||
"SetSkin": 10,
|
||||
"ReportDeadBody": 11,
|
||||
"MurderPlayer": 12,
|
||||
"SendChat": 13,
|
||||
"StartMeeting": 14,
|
||||
"SetScanner": 15,
|
||||
"SendChatNote": 16,
|
||||
"SetPet_Deprecated": 17,
|
||||
"SetPet": 17,
|
||||
"SetStartCounter": 18,
|
||||
"EnterVent": 19,
|
||||
"ExitVent": 20,
|
||||
@@ -33,8 +33,8 @@
|
||||
"SendQuickChat": 33,
|
||||
"BootFromVent": 34,
|
||||
"UpdateSystem": 35,
|
||||
"SetVisor_Deprecated": 36,
|
||||
"SetNamePlate_Deprecated": 37,
|
||||
"SetVisor": 36,
|
||||
"SetNamePlate": 37,
|
||||
"SetLevel": 38,
|
||||
"SetHatStr": 39,
|
||||
"SetSkinStr": 40,
|
||||
@@ -55,9 +55,5 @@
|
||||
"CheckShapeshift": 55,
|
||||
"RejectShapeshift": 56,
|
||||
"LobbyTimeExpiring": 60,
|
||||
"ExtendLobbyTimer": 61,
|
||||
"CheckVanish": 62,
|
||||
"StartVanish": 63,
|
||||
"CheckAppear": 64,
|
||||
"StartAppear": 65
|
||||
}
|
||||
"ExtendLobbyTimer": 61
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"Standard": 0,
|
||||
"StandardRoles": 1,
|
||||
"Flashlight": 2,
|
||||
"Custom": 100
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"None": 0,
|
||||
"ImpersonationCeleb": 1,
|
||||
"Spamming": 2,
|
||||
"InappropriateNameUnsportsmanlike": 3,
|
||||
"UnsportsmanlikeConduct": 4,
|
||||
"ImpersonationDevelopers": 5,
|
||||
"InappropriateChatPersonalInfo": 6,
|
||||
"InappropriateNameDerogatory": 7,
|
||||
"InappropriateNameNsfw": 8,
|
||||
"Bullying": 9,
|
||||
"CheatingHacking": 10,
|
||||
"InappropriateChatDating": 11,
|
||||
"WeaponizingRules": 12,
|
||||
"RepeatOffender3": 13,
|
||||
"SexualMisconduct": 14,
|
||||
"Doxing": 15,
|
||||
"IllegalActivity": 16,
|
||||
"Harassment": 17,
|
||||
"SelfHarmPromotion": 18,
|
||||
"RepeatOffender10": 19,
|
||||
"InvalidUser": 20
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"None": 0,
|
||||
"AprilFools": 1
|
||||
}
|
||||
@@ -506,7 +506,6 @@
|
||||
"ErrorSanction": 728,
|
||||
"ErrorClientTimeout": 729,
|
||||
"ErrorClientTimeoutConsole": 730,
|
||||
"ErrorAuthNonceFailure": 731,
|
||||
"VentDirection": 1000,
|
||||
"VentMove": 1001,
|
||||
"MenuNavigate": 1002,
|
||||
@@ -570,39 +569,10 @@
|
||||
"RolesHelp_Engineer_02": 1563,
|
||||
"RolesHelp_GuardianAngel_01": 1564,
|
||||
"RolesHelp_GuardianAngel_02": 1565,
|
||||
"RolesHelp_Noisemaker_01": 1566,
|
||||
"RolesHelp_Noisemaker_02": 1567,
|
||||
"RolesHelp_Tracker_01": 1568,
|
||||
"RolesHelp_Tracker_02": 1569,
|
||||
"RolesHelp_Shapeshifter_01": 1600,
|
||||
"RolesHelp_Shapeshifter_02": 1601,
|
||||
"RolesHelp_Phantom_01": 1602,
|
||||
"RolesHelp_Phantom_02": 1603,
|
||||
"RolesHelpOutro_01": 1650,
|
||||
"RolesHelpOutro_02": 1651,
|
||||
"NoisemakerRole": 1660,
|
||||
"NoisemakerBlurb": 1661,
|
||||
"NoisemakerBlurbMed": 1662,
|
||||
"NoisemakerBlurbLong": 1663,
|
||||
"NoisemakerImpostorAlert": 1664,
|
||||
"NoisemakerAlertDuration": 1665,
|
||||
"PhantomAbility": 1670,
|
||||
"PhantomRole": 1671,
|
||||
"PhantomBlurb": 1672,
|
||||
"PhantomBlurbMed": 1673,
|
||||
"PhantomBlurbLong": 1674,
|
||||
"PhantomCooldown": 1675,
|
||||
"PhantomDuration": 1676,
|
||||
"PhantomAbilityUndo": 1677,
|
||||
"TrackerAbility": 1680,
|
||||
"TrackerRole": 1681,
|
||||
"TrackerBlurb": 1682,
|
||||
"TrackerBlurbMed": 1683,
|
||||
"TrackerBlurbLong": 1684,
|
||||
"TrackerCooldown": 1685,
|
||||
"TrackerDuration": 1686,
|
||||
"TrackerAbilityUndo": 1687,
|
||||
"TrackerDelay": 1688,
|
||||
"SanctionDuration": 1700,
|
||||
"SanctionPermanent": 1701,
|
||||
"SanctionConduct": 1702,
|
||||
@@ -1333,24 +1303,6 @@
|
||||
"ConfirmDeleteAccountsEmpty": 3209,
|
||||
"AccountRequestDelete": 3210,
|
||||
"HasBeenKilled": 3211,
|
||||
"RoomSettingsLabel": 3280,
|
||||
"ViewLabel": 3281,
|
||||
"RoomCodeLabel": 3282,
|
||||
"ModeLabel": 3283,
|
||||
"PrivacyLabel": 3284,
|
||||
"CapacityLabel": 3285,
|
||||
"GameSettingsLabel": 3286,
|
||||
"RoleSettingsLabel": 3287,
|
||||
"GamePresetsLabel": 3288,
|
||||
"GamePresetsDescription": 3289,
|
||||
"StandardRulesPresetDescription": 3290,
|
||||
"GameModeStandard": 3291,
|
||||
"GameModeStandardRoles": 3292,
|
||||
"GameModeCustom": 3293,
|
||||
"ReturnToLobby": 3294,
|
||||
"GameModeFlashlight": 3295,
|
||||
"HostNounLabel": 3296,
|
||||
"RoleSettingsAll": 3297,
|
||||
"ScrollList": 3300,
|
||||
"ScrollNews": 3301,
|
||||
"AmongUsAnnouncements": 3302,
|
||||
@@ -1376,42 +1328,6 @@
|
||||
"FriendsLabel": 3322,
|
||||
"ReportNotificationHeader": 3323,
|
||||
"ReportNotificationBody": 3324,
|
||||
"MissingGuardianEmailText": 3325,
|
||||
"AprilFoolsModeToggle": 3326,
|
||||
"LobbyChangeSettingNotification": 3327,
|
||||
"LoadingBarLoading": 3328,
|
||||
"LoadingBarGameStart": 3329,
|
||||
"LoadingBarGameStartWaitingPlayers": 3330,
|
||||
"ImpostorsCategory": 3350,
|
||||
"RolesCategory": 3351,
|
||||
"MeetingsCategory": 3352,
|
||||
"PlayersCategory": 3353,
|
||||
"TasksCategory": 3354,
|
||||
"GameSettingsDescription": 3355,
|
||||
"RoleSettingsDescription": 3356,
|
||||
"InfoLabel": 3357,
|
||||
"RoleQuotaLabel": 3358,
|
||||
"OverviewCategory": 3359,
|
||||
"CrewmateRolesHeader": 3360,
|
||||
"ImpostorRolesHeader": 3361,
|
||||
"ViewingLabel": 3362,
|
||||
"LocalLobbyLabel": 3363,
|
||||
"NumberRoleHeader": 3364,
|
||||
"ChanceRoleHeader": 3365,
|
||||
"WaitingForPlayers": 3366,
|
||||
"HideAndSeekModeDescription": 3367,
|
||||
"RolesRulesPresetDescription": 3368,
|
||||
"FlashlightRulesPresetDescription": 3369,
|
||||
"RoomCodeCopied": 3370,
|
||||
"FinalHideCategory": 3371,
|
||||
"LobbyChangeSettingNotificationRole": 3372,
|
||||
"StandardRulesPresetDescriptionHideAndSeek": 3373,
|
||||
"GameModeStandardSeek": 3374,
|
||||
"HostYouLabel": 3375,
|
||||
"GamePresetsPopupTitle": 3376,
|
||||
"GamePresetsPopupText": 3377,
|
||||
"GamePresetsPopupContinue": 3378,
|
||||
"GamePresetsPopupBack": 3379,
|
||||
"MiningPit": 3400,
|
||||
"Jungle": 3401,
|
||||
"BuildSandcastle": 3402,
|
||||
@@ -1446,9 +1362,6 @@
|
||||
"CookFish": 3431,
|
||||
"PrepVegetables": 3432,
|
||||
"MushroomMixupName": 3433,
|
||||
"EosAccountSilentMergeFail": 3434,
|
||||
"AskForEosAccount": 3435,
|
||||
"KwsCreateFail": 3436,
|
||||
"GameType": 3500,
|
||||
"GameTypeError": 3501,
|
||||
"GameTypeClassic": 3502,
|
||||
@@ -1482,146 +1395,5 @@
|
||||
"HttpErrorInternalServerError": 3530,
|
||||
"HttpErrorBadGateway": 3531,
|
||||
"HttpErrorServiceUnavailable": 3532,
|
||||
"HttpErrorGatewayTimeout": 3533,
|
||||
"UserVersionError": 3534,
|
||||
"QCLobbyRoleNoisemakers": 3535,
|
||||
"QCLobbyRoleTrackers": 3536,
|
||||
"QCLobbyRolePhantoms": 3537,
|
||||
"QCSelfWasTracking": 3538,
|
||||
"QCSelfGoingToNoisemaker": 3539,
|
||||
"QCSelfSawRoleInLocation": 3540,
|
||||
"QCCoreSettings": 3541,
|
||||
"QCRolesGalore": 3542,
|
||||
"QCPitchDark": 3543,
|
||||
"QCFlashlight": 3544,
|
||||
"QCPleaseWait": 3545,
|
||||
"QCWaitMinute": 3546,
|
||||
"QCLobbyClosing": 3547,
|
||||
"QCChangeCosmetics": 3548,
|
||||
"QCWaitingPlayers": 3549,
|
||||
"QCLetsWaitPlayers": 3550,
|
||||
"ServerLabel": 3551,
|
||||
"JoinLobby": 3552,
|
||||
"ChatLabel": 3553,
|
||||
"ToolTipDefault": 3554,
|
||||
"LevelLabel": 3555,
|
||||
"NoneLowercaseLabel": 3556,
|
||||
"ToolTipClassic": 3557,
|
||||
"ToolTipHide": 3558,
|
||||
"ToolTipMap": 3559,
|
||||
"ToolTipCapacity": 3560,
|
||||
"ToolTipLevel": 3561,
|
||||
"ToolTipServer": 3562,
|
||||
"ToolTipCrossplay": 3563,
|
||||
"ToolTipNoCrossplay": 3564,
|
||||
"ToolTipLanguage": 3565,
|
||||
"ConfirmSettings": 3566,
|
||||
"ConfirmSettingsTooltip": 3567,
|
||||
"EnterCodeElipsis": 3568,
|
||||
"ToolTipChatTab": 3569,
|
||||
"DropshipsLabel": 3570,
|
||||
"FiltersActive": 3571,
|
||||
"ClearFilters": 3572,
|
||||
"MoreLabel": 3573,
|
||||
"HostNounEmpty": 3574,
|
||||
"ToolTipSkeld": 3575,
|
||||
"ToolTipMIRA": 3576,
|
||||
"ToolTipPolus": 3577,
|
||||
"ToolTipAirship": 3578,
|
||||
"ToolTipFungle": 3579,
|
||||
"FilterLow": 3580,
|
||||
"FilterMed": 3581,
|
||||
"FilterHigh": 3582,
|
||||
"FilterVeryHigh": 3583,
|
||||
"FilterLong": 3584,
|
||||
"FilterNone": 3585,
|
||||
"FilterPlayerLevel": 3586,
|
||||
"RefreshLabel": 3587,
|
||||
"JoinGameLabel": 3588,
|
||||
"FilterClearText": 3589,
|
||||
"MatchesFoundLabel": 3590,
|
||||
"FilterGameTooltip": 3591,
|
||||
"FilterMapTooltip": 3592,
|
||||
"FilterImpostorTooltip": 3593,
|
||||
"FilterRoleTooltip": 3594,
|
||||
"FilterSpeedTooltip": 3595,
|
||||
"FilterKillCDTooltip": 3596,
|
||||
"FilterVotingTooltip": 3597,
|
||||
"FilterVisualTaskTooltip": 3598,
|
||||
"FilterAnonVotesTooltip": 3599,
|
||||
"FilterConfirmEjectTooltip": 3600,
|
||||
"FilterLevelTooltip": 3601,
|
||||
"FilterCrossplayTooltip": 3602,
|
||||
"FilterDefaultTooltip": 3603,
|
||||
"FilterFlashlightTooltip": 3604,
|
||||
"FilterHidingTimeTooltip": 3605,
|
||||
"FilterFinalTimeTooltip": 3606,
|
||||
"FilterMaxVentTooltip": 3607,
|
||||
"FilterBeginner": 3608,
|
||||
"FilterIntermediate": 3609,
|
||||
"FilterExpert": 3610,
|
||||
"FilterTag": 3611,
|
||||
"FilterTagTooltip": 3612,
|
||||
"TooltipTag": 3613,
|
||||
"SelectedLabel": 3614,
|
||||
"TooltipSpeedInfo": 3615,
|
||||
"TooltipKillCDInfo": 3616,
|
||||
"TooltipVotingInfo": 3617,
|
||||
"TooptipHidingTimeInfo": 3618,
|
||||
"TooltipFinalTimeInfo": 3619,
|
||||
"FilterNoMaps": 3620,
|
||||
"MaxFilters": 3621,
|
||||
"XboxCommsMultiplayerError": 3700,
|
||||
"XboxCommsUGError": 3701,
|
||||
"XboxCommsCreateGameError": 3702,
|
||||
"XboxCommsSearchError": 3703,
|
||||
"XboxCommsJoinError": 3704,
|
||||
"DetectiveRole": 4000,
|
||||
"DetectiveAbility": 4001,
|
||||
"DetectiveAbilityNotes": 4002,
|
||||
"DetectiveBlurb": 4003,
|
||||
"DetectiveBlurbMed": 4004,
|
||||
"DetectiveBlurbLong": 4005,
|
||||
"DetectiveNotesEmpty": 4006,
|
||||
"DetectiveNotesFoundDead": 4007,
|
||||
"DetectiveNotesSuspectInfo": 4008,
|
||||
"DetectiveNearLocation": 4009,
|
||||
"DetectiveNotesKiller": 4010,
|
||||
"StatsDetectiveQuestioned": 4011,
|
||||
"StatsDetectiveCasesFilled": 4012,
|
||||
"DetectiveSuspectLimit": 4013,
|
||||
"RolesHelp_Detective_01": 4014,
|
||||
"RolesHelp_Detective_02": 4015,
|
||||
"ViperRole": 4037,
|
||||
"ViperBlurb": 4038,
|
||||
"ViperBlurbMed": 4039,
|
||||
"ViperBlurbLong": 4040,
|
||||
"ViperDissolveTime": 4041,
|
||||
"ViperAbility": 4042,
|
||||
"StatsViperBodiesDissolved": 4043,
|
||||
"RolesHelp_Viper_01": 4044,
|
||||
"RolesHelp_Viper_02": 4045,
|
||||
"QCWhereWasDead": 4060,
|
||||
"QCInterrogateCrew": 4061,
|
||||
"QCInterrogated": 4062,
|
||||
"QCBodyDissolved": 4063,
|
||||
"QCBodyVeryDissolved": 4064,
|
||||
"QCBodyAlmostDissolved": 4065,
|
||||
"QCDetectives": 4066,
|
||||
"QCVipers": 4067,
|
||||
"DetectiveNotesTitleVictim": 4068,
|
||||
"DetectiveNotesTitleFoundDead": 4069,
|
||||
"DetectiveNotesTitleKiller": 4070,
|
||||
"DetectiveNotesTitleSuspects": 4071,
|
||||
"DetectiveNotesTitleLocationsAtTimeOfDeath": 4072,
|
||||
"DetectiveNotesPromptPreposition": 4073,
|
||||
"DetectiveNotesPromptLocation": 4074,
|
||||
"DetectiveNotesPromptImpostor": 4075,
|
||||
"DetectiveNotesPromptSuspect": 4076,
|
||||
"DetectiveNotesPrepositionIn": 4077,
|
||||
"DetectiveNotesPrepositionBy": 4078,
|
||||
"DetectiveNotesPrepositionMaybe": 4079,
|
||||
"DetectiveNotesTitlePostIt": 4080,
|
||||
"DetectiveNotesPostIt": 4081,
|
||||
"DetectiveNotesSuspectNumber": 4082
|
||||
"HttpErrorGatewayTimeout": 3533
|
||||
}
|
||||
@@ -15,4 +15,4 @@
|
||||
"SChinese": 13,
|
||||
"TChinese": 14,
|
||||
"Irish": 15
|
||||
}
|
||||
}
|
||||
@@ -58,4 +58,4 @@
|
||||
"SleepingQuarters": 56,
|
||||
"MushroomMixupSabotage": 57,
|
||||
"HeliSabotage": 58
|
||||
}
|
||||
}
|
||||
@@ -81,4 +81,4 @@
|
||||
"ExtractFuel": 79,
|
||||
"MonitorMushroom": 80,
|
||||
"PlayVideogame": 81
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"Invalid": 0,
|
||||
"Keywords": 1
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"dumpostorVersion": "1.0.1-dev",
|
||||
"gameVersion": "2024.10.29",
|
||||
"platformType": "StandaloneItch"
|
||||
"dumpostorVersion": "1.0.0",
|
||||
"gameVersion": "2023.10.24",
|
||||
"platformType": "StandaloneSteamPC"
|
||||
}
|
||||
@@ -146,4 +146,4 @@
|
||||
"y": -4.694899
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,4 +12,4 @@
|
||||
"y": 9
|
||||
},
|
||||
"spawnRadius": 1.55
|
||||
}
|
||||
}
|
||||
@@ -10,4 +10,4 @@
|
||||
"Security": "SecurityCameraSystemType",
|
||||
"Ventilation": "VentilationSystem",
|
||||
"Sabotage": "SabotageSystemType"
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
"0": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "FixWiring",
|
||||
"hudText": "Viewing Deck: Fix Wiring (0/3)",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -72,6 +73,7 @@
|
||||
"1": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "EnterIdCode",
|
||||
"hudText": "Meeting Room: Enter Id Code",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -88,6 +90,7 @@
|
||||
"2": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "CalibrateDistributor",
|
||||
"hudText": "Electrical: Calibrate Distributor",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -104,6 +107,7 @@
|
||||
"3": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "ResetBreakers",
|
||||
"hudText": "Electrical: Reset Breakers (0/7)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -174,6 +178,7 @@
|
||||
"4": {
|
||||
"type": "AirshipUploadTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Vault: Download Data (0/2) ",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -199,6 +204,7 @@
|
||||
"5": {
|
||||
"type": "AirshipUploadTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Brig: Download Data (0/2) ",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -224,6 +230,7 @@
|
||||
"6": {
|
||||
"type": "AirshipUploadTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Cargo Bay: Download Data (0/2) ",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -249,6 +256,7 @@
|
||||
"7": {
|
||||
"type": "AirshipUploadTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Gap Room: Download Data (0/2) ",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -274,6 +282,7 @@
|
||||
"8": {
|
||||
"type": "AirshipUploadTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Records: Download Data (0/2) ",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -299,6 +308,7 @@
|
||||
"9": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "UnlockSafe",
|
||||
"hudText": "Cargo Bay: Unlock Safe",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -315,30 +325,35 @@
|
||||
"10": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "StartFans",
|
||||
"hudText": "Ventilation: Start Fans",
|
||||
"length": "Long",
|
||||
"consoles": []
|
||||
},
|
||||
"11": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "EmptyGarbage",
|
||||
"hudText": "Main Hall: Empty Garbage (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": []
|
||||
},
|
||||
"12": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "EmptyGarbage",
|
||||
"hudText": "Medical: Empty Garbage (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": []
|
||||
},
|
||||
"13": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "EmptyGarbage",
|
||||
"hudText": "Kitchen: Empty Garbage (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": []
|
||||
},
|
||||
"14": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "DevelopPhotos",
|
||||
"hudText": "Main Hall: Develop Photos",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -355,12 +370,14 @@
|
||||
"15": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "FuelEngines",
|
||||
"hudText": "Cargo Bay: Fuel Engines",
|
||||
"length": "Long",
|
||||
"consoles": []
|
||||
},
|
||||
"16": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "RewindTapes",
|
||||
"hudText": "Security: Rewind Tapes",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -377,18 +394,21 @@
|
||||
"17": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "EmptyGarbage",
|
||||
"hudText": "Lounge: Empty Garbage (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": []
|
||||
},
|
||||
"18": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "EmptyGarbage",
|
||||
"hudText": "Showers: Empty Garbage (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": []
|
||||
},
|
||||
"19": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "PolishRuby",
|
||||
"hudText": "Vault: Polish Ruby",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -405,6 +425,7 @@
|
||||
"20": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "StabilizeSteering",
|
||||
"hudText": "Cockpit: Stabilize Steering",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -421,6 +442,7 @@
|
||||
"21": {
|
||||
"type": "AirshipUploadTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Armory: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -446,6 +468,7 @@
|
||||
"22": {
|
||||
"type": "AirshipUploadTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Cockpit: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -471,6 +494,7 @@
|
||||
"23": {
|
||||
"type": "AirshipUploadTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Communications: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -496,6 +520,7 @@
|
||||
"24": {
|
||||
"type": "AirshipUploadTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Medical: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -521,6 +546,7 @@
|
||||
"25": {
|
||||
"type": "AirshipUploadTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Viewing Deck: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -546,6 +572,7 @@
|
||||
"26": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Armory (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -562,6 +589,7 @@
|
||||
"27": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Cockpit (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -578,6 +606,7 @@
|
||||
"28": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Gap Room (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -594,6 +623,7 @@
|
||||
"29": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Main Hall (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -610,6 +640,7 @@
|
||||
"30": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Meeting Room (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -626,6 +657,7 @@
|
||||
"31": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Showers (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -642,6 +674,7 @@
|
||||
"32": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Engine Room (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -658,6 +691,7 @@
|
||||
"33": {
|
||||
"type": "TowelTask",
|
||||
"taskType": "PickUpTowels",
|
||||
"hudText": "Showers: Pick Up Towels (0/8)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -800,6 +834,7 @@
|
||||
"34": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "CleanToilet",
|
||||
"hudText": "Lounge: Clean Toilet",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -843,6 +878,7 @@
|
||||
"35": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "DressMannequin",
|
||||
"hudText": "Vault: Dress Mannequin",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -859,6 +895,7 @@
|
||||
"36": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "SortRecords",
|
||||
"hudText": "Records: Sort Records (0/4)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -947,18 +984,21 @@
|
||||
"37": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "PutAwayPistols",
|
||||
"hudText": "Armory: Put Away Pistols",
|
||||
"length": "Short",
|
||||
"consoles": []
|
||||
},
|
||||
"38": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "PutAwayRifles",
|
||||
"hudText": "Armory: Put Away Rifles",
|
||||
"length": "Short",
|
||||
"consoles": []
|
||||
},
|
||||
"39": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "Decontaminate",
|
||||
"hudText": "Main Hall: Decontaminate",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -984,6 +1024,7 @@
|
||||
"40": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "MakeBurger",
|
||||
"hudText": "Kitchen: Make Burger",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -1000,6 +1041,7 @@
|
||||
"41": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "FixShower",
|
||||
"hudText": "Showers: Fix Shower",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -1016,6 +1058,7 @@
|
||||
"42": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "VentCleaning",
|
||||
"hudText": "Gap Room: Clean Vent",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -1128,4 +1171,4 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -119,4 +119,4 @@
|
||||
"center": null,
|
||||
"right": 10
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,93 +1,93 @@
|
||||
{
|
||||
"0": {
|
||||
"room": "Cafeteria",
|
||||
"position": {
|
||||
"x": -5.1432004,
|
||||
"y": 1.3355999
|
||||
}
|
||||
},
|
||||
"1": {
|
||||
"room": "Cafeteria",
|
||||
"position": {
|
||||
"x": 0.708,
|
||||
"y": -4.992
|
||||
}
|
||||
},
|
||||
"2": {
|
||||
"room": "Cafeteria",
|
||||
"position": {
|
||||
"x": 6.3936,
|
||||
"y": 1.33848
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
"room": "Electrical",
|
||||
"position": {
|
||||
"x": 9.53616,
|
||||
"y": -13.416001
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
"room": "Storage",
|
||||
"position": {
|
||||
"x": -1.1316001,
|
||||
"y": -11.98128
|
||||
}
|
||||
},
|
||||
"5": {
|
||||
"room": "Storage",
|
||||
"position": {
|
||||
"x": 0.70919997,
|
||||
"y": -8.560801
|
||||
}
|
||||
},
|
||||
"6": {
|
||||
"1": {
|
||||
"room": "Storage",
|
||||
"position": {
|
||||
"x": 5.268,
|
||||
"y": -14.2884
|
||||
}
|
||||
},
|
||||
"7": {
|
||||
"room": "LowerEngine",
|
||||
"position": {
|
||||
"x": 14.6808,
|
||||
"y": -11.472
|
||||
}
|
||||
},
|
||||
"8": {
|
||||
"room": "LowerEngine",
|
||||
"position": {
|
||||
"x": 16.930801,
|
||||
"y": -8.9664
|
||||
}
|
||||
},
|
||||
"9": {
|
||||
"room": "UpperEngine",
|
||||
"position": {
|
||||
"x": 14.676002,
|
||||
"y": 1.3406401
|
||||
}
|
||||
},
|
||||
"10": {
|
||||
"2": {
|
||||
"room": "UpperEngine",
|
||||
"position": {
|
||||
"x": 16.930801,
|
||||
"y": -2.1276002
|
||||
}
|
||||
},
|
||||
"11": {
|
||||
"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
|
||||
}
|
||||
},
|
||||
"12": {
|
||||
"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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"initialSpawnCenter": {
|
||||
"x": 0.87,
|
||||
"y": 0.69
|
||||
"x": -0.72,
|
||||
"y": 0.62
|
||||
},
|
||||
"meetingSpawnCenter": {
|
||||
"x": 0.87,
|
||||
"y": 0.69
|
||||
"x": -0.72,
|
||||
"y": 0.62
|
||||
},
|
||||
"meetingSpawnCenter2": {
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"spawnRadius": 1.6
|
||||
}
|
||||
}
|
||||
@@ -8,4 +8,4 @@
|
||||
"LifeSupp": "LifeSuppSystemType",
|
||||
"Ventilation": "VentilationSystem",
|
||||
"Sabotage": "SabotageSystemType"
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
"0": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "SwipeCard",
|
||||
"hudText": "Admin: Swipe Card",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -18,6 +19,7 @@
|
||||
"1": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "FixWiring",
|
||||
"hudText": "Electrical: Fix Wiring (0/3)",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -79,6 +81,7 @@
|
||||
"2": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "ClearAsteroids",
|
||||
"hudText": "Weapons: Clear Asteroids (0/20)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -95,6 +98,7 @@
|
||||
"3": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "AlignEngineOutput",
|
||||
"hudText": "Upper Engine: Align Engine Output (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -120,6 +124,7 @@
|
||||
"4": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "SubmitScan",
|
||||
"hudText": "MedBay: Submit Scan",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -136,6 +141,7 @@
|
||||
"5": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "InspectSample",
|
||||
"hudText": "MedBay: Inspect Sample",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -152,12 +158,14 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -174,18 +182,21 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -202,6 +213,7 @@
|
||||
"11": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "CalibrateDistributor",
|
||||
"hudText": "Electrical: Calibrate Distributor",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -218,12 +230,14 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -240,6 +254,7 @@
|
||||
"14": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "UnlockManifolds",
|
||||
"hudText": "Reactor: Unlock Manifolds",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -256,6 +271,7 @@
|
||||
"15": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Electrical: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -272,6 +288,7 @@
|
||||
"16": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "StabilizeSteering",
|
||||
"hudText": "Navigation: Stabilize Steering",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -288,6 +305,7 @@
|
||||
"17": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Weapons: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -304,6 +322,7 @@
|
||||
"18": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "PrimeShields",
|
||||
"hudText": "Shields: Prime Shields",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -320,6 +339,7 @@
|
||||
"19": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Cafeteria: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -336,6 +356,7 @@
|
||||
"20": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Navigation: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -352,6 +373,7 @@
|
||||
"21": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Shields (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -368,6 +390,7 @@
|
||||
"22": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Weapons (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -384,6 +407,7 @@
|
||||
"23": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Communications (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -400,6 +424,7 @@
|
||||
"24": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Upper Engine (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -416,6 +441,7 @@
|
||||
"25": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to O2 (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -432,6 +458,7 @@
|
||||
"26": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Navigation (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -448,6 +475,7 @@
|
||||
"27": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Lower Engine (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -464,6 +492,7 @@
|
||||
"28": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Security (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -476,138 +505,5 @@
|
||||
"usableDistance": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
"29": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "VentCleaning",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
"id": 0,
|
||||
"room": "Admin",
|
||||
"position": {
|
||||
"x": -2.544,
|
||||
"y": -9.955201
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"room": "Cafeteria",
|
||||
"position": {
|
||||
"x": -4.2588,
|
||||
"y": -0.27600002
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"room": "Nav",
|
||||
"position": {
|
||||
"x": -16.008001,
|
||||
"y": -6.3840003
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"room": "Nav",
|
||||
"position": {
|
||||
"x": -16.008001,
|
||||
"y": -3.1680002
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"room": "Weapons",
|
||||
"position": {
|
||||
"x": -8.820001,
|
||||
"y": 3.3240001
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"room": "Shields",
|
||||
"position": {
|
||||
"x": -9.5232,
|
||||
"y": -14.337601
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"room": "Hallway",
|
||||
"position": {
|
||||
"x": -9.384,
|
||||
"y": -6.438
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"room": "Electrical",
|
||||
"position": {
|
||||
"x": 9.7764,
|
||||
"y": -8.034
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"room": "Reactor",
|
||||
"position": {
|
||||
"x": 20.796001,
|
||||
"y": -6.9528003
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"room": "Reactor",
|
||||
"position": {
|
||||
"x": 21.876,
|
||||
"y": -3.0516002
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"room": "LowerEngine",
|
||||
"position": {
|
||||
"x": 15.2508,
|
||||
"y": -13.656001
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"room": "UpperEngine",
|
||||
"position": {
|
||||
"x": 15.288,
|
||||
"y": 2.52
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"room": "Security",
|
||||
"position": {
|
||||
"x": 12.534,
|
||||
"y": -6.9492
|
||||
},
|
||||
"usableDistance": 1
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"room": "MedBay",
|
||||
"position": {
|
||||
"x": 10.608001,
|
||||
"y": -4.176
|
||||
},
|
||||
"usableDistance": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"0": {
|
||||
"name": "AdminVent (1)",
|
||||
"name": "AdminVent",
|
||||
"position": {
|
||||
"x": -2.544,
|
||||
"y": -9.955201
|
||||
@@ -10,7 +10,7 @@
|
||||
"right": 1
|
||||
},
|
||||
"1": {
|
||||
"name": "BigYVent (1)",
|
||||
"name": "BigYVent",
|
||||
"position": {
|
||||
"x": -9.384,
|
||||
"y": -6.438
|
||||
@@ -20,7 +20,7 @@
|
||||
"right": 2
|
||||
},
|
||||
"2": {
|
||||
"name": "CafeVent (1)",
|
||||
"name": "CafeVent",
|
||||
"position": {
|
||||
"x": -4.2588,
|
||||
"y": -0.27600002
|
||||
@@ -30,7 +30,7 @@
|
||||
"right": 1
|
||||
},
|
||||
"3": {
|
||||
"name": "ElecVent (1)",
|
||||
"name": "ElecVent",
|
||||
"position": {
|
||||
"x": 9.7764,
|
||||
"y": -8.034
|
||||
@@ -40,7 +40,7 @@
|
||||
"right": 6
|
||||
},
|
||||
"4": {
|
||||
"name": "LEngineVent (1)",
|
||||
"name": "LEngineVent",
|
||||
"position": {
|
||||
"x": 15.288,
|
||||
"y": 2.52
|
||||
@@ -50,7 +50,7 @@
|
||||
"right": null
|
||||
},
|
||||
"5": {
|
||||
"name": "SecurityVent",
|
||||
"name": "LifeSuppVent",
|
||||
"position": {
|
||||
"x": 12.534,
|
||||
"y": -6.9492
|
||||
@@ -60,7 +60,7 @@
|
||||
"right": 3
|
||||
},
|
||||
"6": {
|
||||
"name": "MedVent (1)",
|
||||
"name": "MedVent",
|
||||
"position": {
|
||||
"x": 10.608001,
|
||||
"y": -4.176
|
||||
@@ -70,7 +70,7 @@
|
||||
"right": 3
|
||||
},
|
||||
"7": {
|
||||
"name": "WeaponsVent (1)",
|
||||
"name": "WeaponsVent",
|
||||
"position": {
|
||||
"x": -8.820001,
|
||||
"y": 3.3240001
|
||||
@@ -80,7 +80,7 @@
|
||||
"right": 12
|
||||
},
|
||||
"8": {
|
||||
"name": "ReactorVent (1)",
|
||||
"name": "ReactorVent",
|
||||
"position": {
|
||||
"x": 20.796001,
|
||||
"y": -6.9528003
|
||||
@@ -90,7 +90,7 @@
|
||||
"right": null
|
||||
},
|
||||
"9": {
|
||||
"name": "REngineVent (1)",
|
||||
"name": "REngineVent",
|
||||
"position": {
|
||||
"x": 15.2508,
|
||||
"y": -13.656001
|
||||
@@ -100,7 +100,7 @@
|
||||
"right": null
|
||||
},
|
||||
"10": {
|
||||
"name": "ShieldsVent (1)",
|
||||
"name": "ShieldsVent",
|
||||
"position": {
|
||||
"x": -9.5232,
|
||||
"y": -14.337601
|
||||
@@ -110,7 +110,7 @@
|
||||
"right": null
|
||||
},
|
||||
"11": {
|
||||
"name": "UpperReactorVent (1)",
|
||||
"name": "UpperReactorVent",
|
||||
"position": {
|
||||
"x": 21.876,
|
||||
"y": -3.0516002
|
||||
@@ -120,7 +120,7 @@
|
||||
"right": null
|
||||
},
|
||||
"12": {
|
||||
"name": "NavVentNorth (1)",
|
||||
"name": "NavVentNorth",
|
||||
"position": {
|
||||
"x": -16.008001,
|
||||
"y": -3.1680002
|
||||
@@ -130,7 +130,7 @@
|
||||
"right": 7
|
||||
},
|
||||
"13": {
|
||||
"name": "NavVentSouth (1)",
|
||||
"name": "NavVentSouth",
|
||||
"position": {
|
||||
"x": -16.008001,
|
||||
"y": -6.3840003
|
||||
@@ -139,4 +139,4 @@
|
||||
"center": null,
|
||||
"right": 10
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -55,4 +55,4 @@
|
||||
"y": 4.6280003
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,4 +12,4 @@
|
||||
"y": 0
|
||||
},
|
||||
"spawnRadius": 1.5
|
||||
}
|
||||
}
|
||||
@@ -5,4 +5,4 @@
|
||||
"Doors": "DoorsSystemType",
|
||||
"MushroomMixupSabotage": "MushroomMixupSabotageSystem",
|
||||
"Sabotage": "SabotageSystemType"
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
"0": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "CollectSamples",
|
||||
"hudText": "Jungle: Collect Samples (0/2)",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -18,6 +19,7 @@
|
||||
"1": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "EnterIdCode",
|
||||
"hudText": "Lookout: Enter Id Code",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -34,12 +36,14 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -92,6 +96,7 @@
|
||||
"4": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "CatchFish",
|
||||
"hudText": "Dock: Catch Fish (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -117,30 +122,35 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -157,6 +167,7 @@
|
||||
"10": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "MineOres",
|
||||
"hudText": "Mining Pit: Mine Ores",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -173,18 +184,21 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -201,6 +215,7 @@
|
||||
"14": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "BuildSandcastle",
|
||||
"hudText": "Splash Zone: Build Sandcastle",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -217,6 +232,7 @@
|
||||
"15": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "CollectShells",
|
||||
"hudText": "Splash Zone: Collect Shells",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -260,6 +276,7 @@
|
||||
"16": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "CrankGenerator",
|
||||
"hudText": "Kitchen: Crank Generator",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -285,18 +302,21 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -313,6 +333,7 @@
|
||||
"20": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "FixWiring",
|
||||
"hudText": "Dropship: Fix Wiring",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -338,6 +359,7 @@
|
||||
"21": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "LiftWeights",
|
||||
"hudText": "Splash Zone: Lift Weights",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -354,6 +376,7 @@
|
||||
"22": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "MonitorMushroom",
|
||||
"hudText": "Jungle: Monitor Mushroom",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -370,6 +393,7 @@
|
||||
"23": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "PlayVideogame",
|
||||
"hudText": "The Dorm: Play Video Game (0/20)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -386,6 +410,7 @@
|
||||
"24": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "RecordTemperature",
|
||||
"hudText": "Laboratory: Record Temperature",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -420,6 +445,7 @@
|
||||
"25": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "RecordTemperature",
|
||||
"hudText": "Greenhouse: Record Temperature",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -454,6 +480,7 @@
|
||||
"26": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "RecordTemperature",
|
||||
"hudText": "Reactor: Record Temperature",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -488,6 +515,7 @@
|
||||
"27": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "TestFrisbee",
|
||||
"hudText": "Splash Zone: Throw Frisbee",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -504,6 +532,7 @@
|
||||
"28": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "TuneRadio",
|
||||
"hudText": "Communications: Find Signal (0/1)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -517,4 +546,4 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -99,4 +99,4 @@
|
||||
"center": null,
|
||||
"right": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
{}
|
||||
{}
|
||||
@@ -12,4 +12,4 @@
|
||||
"y": 0
|
||||
},
|
||||
"spawnRadius": 1.55
|
||||
}
|
||||
}
|
||||
@@ -6,4 +6,4 @@
|
||||
"LifeSupp": "LifeSuppSystemType",
|
||||
"Ventilation": "VentilationSystem",
|
||||
"Sabotage": "SabotageSystemType"
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
"0": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "FixWiring",
|
||||
"hudText": "Storage: Fix Wiring (0/3)",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -54,6 +55,7 @@
|
||||
"1": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "EnterIdCode",
|
||||
"hudText": "Admin: Enter Id Code",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -70,6 +72,7 @@
|
||||
"2": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "SubmitScan",
|
||||
"hudText": "MedBay: Submit Scan",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -86,6 +89,7 @@
|
||||
"3": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "ClearAsteroids",
|
||||
"hudText": "Balcony: Clear Asteroids (0/20)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -102,6 +106,7 @@
|
||||
"4": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Reactor: Divert Power to Admin (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -118,6 +123,7 @@
|
||||
"5": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Reactor: Divert Power to Cafeteria (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -134,6 +140,7 @@
|
||||
"6": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Reactor: Divert Power to Communications (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -150,6 +157,7 @@
|
||||
"7": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Reactor: Divert Power to Launchpad (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -166,6 +174,7 @@
|
||||
"8": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Reactor: Divert Power to MedBay (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -182,6 +191,7 @@
|
||||
"9": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Reactor: Divert Power to Office (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -198,12 +208,14 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -220,6 +232,7 @@
|
||||
"12": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Reactor: Divert Power to Greenhouse (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -236,12 +249,14 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -258,12 +273,14 @@
|
||||
"15": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "FuelEngines",
|
||||
"hudText": "Launchpad: Fuel Engines",
|
||||
"length": "Short",
|
||||
"consoles": []
|
||||
},
|
||||
"16": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "AssembleArtifact",
|
||||
"hudText": "Laboratory: Assemble Artifact",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -280,6 +297,7 @@
|
||||
"17": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "SortSamples",
|
||||
"hudText": "Laboratory: Sort Samples",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -296,6 +314,7 @@
|
||||
"18": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "PrimeShields",
|
||||
"hudText": "Admin: Prime Shields",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -312,12 +331,14 @@
|
||||
"19": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "EmptyGarbage",
|
||||
"hudText": "Cafeteria: Empty Garbage",
|
||||
"length": "Short",
|
||||
"consoles": []
|
||||
},
|
||||
"20": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "MeasureWeather",
|
||||
"hudText": "Balcony: Measure Weather",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -334,6 +355,7 @@
|
||||
"21": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Reactor: Divert Power to Laboratory (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -350,6 +372,7 @@
|
||||
"22": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "BuyBeverage",
|
||||
"hudText": "Cafeteria: Buy Beverage",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -366,6 +389,7 @@
|
||||
"23": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "ProcessData",
|
||||
"hudText": "Office: Process Data",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -382,6 +406,7 @@
|
||||
"24": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "RunDiagnostics",
|
||||
"hudText": "Launchpad: Run Diagnostics",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -398,6 +423,7 @@
|
||||
"25": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "UnlockManifolds",
|
||||
"hudText": "Reactor: Unlock Manifolds",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -414,6 +440,7 @@
|
||||
"26": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "VentCleaning",
|
||||
"hudText": "Admin: Clean Vent",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -517,4 +544,4 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -109,4 +109,4 @@
|
||||
"center": null,
|
||||
"right": 10
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -111,4 +111,4 @@
|
||||
"y": -11.361
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,4 +12,4 @@
|
||||
"y": -17.515
|
||||
},
|
||||
"spawnRadius": 1
|
||||
}
|
||||
}
|
||||
@@ -7,4 +7,4 @@
|
||||
"Ventilation": "VentilationSystem",
|
||||
"Laboratory": "ReactorSystemType",
|
||||
"Sabotage": "SabotageSystemType"
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
"0": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "SwipeCard",
|
||||
"hudText": "Office: Swipe Card",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -18,6 +19,7 @@
|
||||
"1": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "InsertKeys",
|
||||
"hudText": "Dropship: Insert Keys",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -34,6 +36,7 @@
|
||||
"2": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "ScanBoardingPass",
|
||||
"hudText": "Office: Scan Boarding Pass",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -50,6 +53,7 @@
|
||||
"3": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "FixWiring",
|
||||
"hudText": "O2: Fix Wiring (0/3)",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -111,6 +115,7 @@
|
||||
"4": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Weapons: Download Data (0/2) ",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -127,6 +132,7 @@
|
||||
"5": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Office: Download Data (0/2) ",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -143,6 +149,7 @@
|
||||
"6": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Electrical: Download Data (0/2) ",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -159,6 +166,7 @@
|
||||
"7": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Specimen Room: Download Data (0/2) ",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -175,6 +183,7 @@
|
||||
"8": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "O2: Download Data (0/2) ",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -191,6 +200,7 @@
|
||||
"9": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "StartReactor",
|
||||
"hudText": "Specimen Room: Start Reactor",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -207,12 +217,14 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -247,6 +259,7 @@
|
||||
"12": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "InspectSample",
|
||||
"hudText": "MedBay: Inspect Sample",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -263,12 +276,14 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -330,6 +345,7 @@
|
||||
"15": {
|
||||
"type": "WeatherNodeTask",
|
||||
"taskType": "FixWeatherNode",
|
||||
"hudText": "Node_IRO: Fix Weather Node (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -391,6 +407,7 @@
|
||||
"16": {
|
||||
"type": "WeatherNodeTask",
|
||||
"taskType": "FixWeatherNode",
|
||||
"hudText": "Node_PD: Fix Weather Node (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -452,6 +469,7 @@
|
||||
"17": {
|
||||
"type": "WeatherNodeTask",
|
||||
"taskType": "FixWeatherNode",
|
||||
"hudText": "Node_TB: Fix Weather Node (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -513,6 +531,7 @@
|
||||
"18": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "RebootWifi",
|
||||
"hudText": "Communications: Reboot Wifi",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -529,6 +548,7 @@
|
||||
"19": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "MonitorOxygen",
|
||||
"hudText": "O2: Monitor Tree",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -545,6 +565,7 @@
|
||||
"20": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "UnlockManifolds",
|
||||
"hudText": "Specimen Room: Unlock Manifolds",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -561,6 +582,7 @@
|
||||
"21": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "StoreArtifacts",
|
||||
"hudText": "Specimen Room: Store Artifacts",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -577,6 +599,7 @@
|
||||
"22": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "FillCanisters",
|
||||
"hudText": "O2: Fill Canisters",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -593,12 +616,14 @@
|
||||
"23": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "EmptyGarbage",
|
||||
"hudText": "O2: Empty Garbage",
|
||||
"length": "Short",
|
||||
"consoles": []
|
||||
},
|
||||
"24": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "ChartCourse",
|
||||
"hudText": "Dropship: Chart Course",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -615,6 +640,7 @@
|
||||
"25": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "SubmitScan",
|
||||
"hudText": "MedBay: Submit Scan",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -631,6 +657,7 @@
|
||||
"26": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "ClearAsteroids",
|
||||
"hudText": "Weapons: Clear Asteroids (0/20)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -647,6 +674,7 @@
|
||||
"27": {
|
||||
"type": "WeatherNodeTask",
|
||||
"taskType": "FixWeatherNode",
|
||||
"hudText": "Node_CA: Fix Weather Node (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -708,6 +736,7 @@
|
||||
"28": {
|
||||
"type": "WeatherNodeTask",
|
||||
"taskType": "FixWeatherNode",
|
||||
"hudText": "Node_MLG: Fix Weather Node (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -769,6 +798,7 @@
|
||||
"29": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "AlignTelescope",
|
||||
"hudText": "Laboratory: Align Telescope",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -785,6 +815,7 @@
|
||||
"30": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "RepairDrill",
|
||||
"hudText": "Laboratory: Repair Drill",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -801,6 +832,7 @@
|
||||
"31": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "RecordTemperature",
|
||||
"hudText": "Laboratory: Record Temperature",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -826,6 +858,7 @@
|
||||
"32": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "RecordTemperature",
|
||||
"hudText": "Outside: Record Temperature",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -848,4 +881,4 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -119,4 +119,4 @@
|
||||
"center": null,
|
||||
"right": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -90,4 +90,4 @@
|
||||
"y": -8.560801
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,4 +12,4 @@
|
||||
"y": 0
|
||||
},
|
||||
"spawnRadius": 1.6
|
||||
}
|
||||
}
|
||||
@@ -8,4 +8,4 @@
|
||||
"LifeSupp": "LifeSuppSystemType",
|
||||
"Ventilation": "VentilationSystem",
|
||||
"Sabotage": "SabotageSystemType"
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
"0": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "SwipeCard",
|
||||
"hudText": "Admin: Swipe Card",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -18,6 +19,7 @@
|
||||
"1": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "FixWiring",
|
||||
"hudText": "Storage: Fix Wiring (0/3)",
|
||||
"length": "Common",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -79,6 +81,7 @@
|
||||
"2": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "ClearAsteroids",
|
||||
"hudText": "Weapons: Clear Asteroids (0/20)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -95,6 +98,7 @@
|
||||
"3": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "AlignEngineOutput",
|
||||
"hudText": "Upper Engine: Align Engine Output (0/2)",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -120,6 +124,7 @@
|
||||
"4": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "SubmitScan",
|
||||
"hudText": "MedBay: Submit Scan",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -136,6 +141,7 @@
|
||||
"5": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "InspectSample",
|
||||
"hudText": "MedBay: Inspect Sample",
|
||||
"length": "Long",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -152,12 +158,14 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -174,18 +182,21 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -202,6 +213,7 @@
|
||||
"11": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "CalibrateDistributor",
|
||||
"hudText": "Electrical: Calibrate Distributor",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -218,12 +230,14 @@
|
||||
"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": [
|
||||
{
|
||||
@@ -240,6 +254,7 @@
|
||||
"14": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "UnlockManifolds",
|
||||
"hudText": "Reactor: Unlock Manifolds",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -256,6 +271,7 @@
|
||||
"15": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Electrical: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -272,6 +288,7 @@
|
||||
"16": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "StabilizeSteering",
|
||||
"hudText": "Navigation: Stabilize Steering",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -288,6 +305,7 @@
|
||||
"17": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Weapons: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -304,6 +322,7 @@
|
||||
"18": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "PrimeShields",
|
||||
"hudText": "Shields: Prime Shields",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -320,6 +339,7 @@
|
||||
"19": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Cafeteria: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -336,6 +356,7 @@
|
||||
"20": {
|
||||
"type": "UploadDataTask",
|
||||
"taskType": "UploadData",
|
||||
"hudText": "Navigation: Download Data (0/2) ",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -352,6 +373,7 @@
|
||||
"21": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Shields (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -368,6 +390,7 @@
|
||||
"22": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Weapons (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -384,6 +407,7 @@
|
||||
"23": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Communications (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -400,6 +424,7 @@
|
||||
"24": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Upper Engine (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -416,6 +441,7 @@
|
||||
"25": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to O2 (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -432,6 +458,7 @@
|
||||
"26": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Navigation (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -448,6 +475,7 @@
|
||||
"27": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Lower Engine (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -464,6 +492,7 @@
|
||||
"28": {
|
||||
"type": "DivertPowerTask",
|
||||
"taskType": "DivertPower",
|
||||
"hudText": "Electrical: Divert Power to Security (0/2)",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -480,6 +509,7 @@
|
||||
"29": {
|
||||
"type": "NormalPlayerTask",
|
||||
"taskType": "VentCleaning",
|
||||
"hudText": "Electrical: Clean Vent",
|
||||
"length": "Short",
|
||||
"consoles": [
|
||||
{
|
||||
@@ -610,4 +640,4 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -139,4 +139,4 @@
|
||||
"center": null,
|
||||
"right": null
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Impostor.Api.Innersloth.GameFilters
|
||||
{
|
||||
[Serializable]
|
||||
public class BoolGameFilter : ISubFilter
|
||||
{
|
||||
[JsonPropertyName("FilterType")]
|
||||
public string FilterType { get; } = "bool";
|
||||
|
||||
[JsonPropertyName("AcceptedValues")]
|
||||
public required List<bool> AcceptedValues { get; set; }
|
||||
|
||||
[JsonPropertyName("OptionEnum")]
|
||||
public required BoolOptionNames OptionEnum { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Impostor.Api.Innersloth.GameFilters
|
||||
{
|
||||
[Serializable]
|
||||
public class CategorizedGameFilter : ISubFilter
|
||||
{
|
||||
[JsonPropertyName("FilterType")]
|
||||
public string FilterType { get; } = "cat";
|
||||
|
||||
[JsonPropertyName("AcceptedValues")]
|
||||
public required List<int> AcceptedValues { get; set; }
|
||||
|
||||
[JsonPropertyName("OptionEnum")]
|
||||
public required CategorizedOptionNames OptionEnum { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
using System;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Impostor.Api.Innersloth.GameFilters
|
||||
{
|
||||
[Serializable]
|
||||
public class ChatModeGameFilter : ISubFilter
|
||||
{
|
||||
[JsonPropertyName("FilterType")]
|
||||
public string FilterType { get; } = "chat";
|
||||
|
||||
[JsonPropertyName("AcceptedValues")]
|
||||
public required byte AcceptedValues { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Impostor.Api.Innersloth.GameFilters
|
||||
{
|
||||
[Serializable]
|
||||
public class GameFilter
|
||||
{
|
||||
[JsonConstructor]
|
||||
public GameFilter(string optionType, string key, string subFilterString)
|
||||
{
|
||||
this.OptionType = optionType;
|
||||
this.Key = key;
|
||||
this.SubFilterString = subFilterString;
|
||||
this.SubFilter = ResolveSubFilter(OptionType, SubFilterString);
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public ISubFilter SubFilter { get; set; }
|
||||
|
||||
[JsonPropertyName("OptionType")]
|
||||
public required string OptionType { get; set; }
|
||||
|
||||
[JsonPropertyName("Key")]
|
||||
public required string Key { get; set; }
|
||||
|
||||
[JsonPropertyName("SubFilterString")]
|
||||
public required string SubFilterString { get; set; }
|
||||
|
||||
public void ModifySubFilter(ISubFilter subFilter)
|
||||
{
|
||||
this.SubFilter = subFilter;
|
||||
}
|
||||
|
||||
[OnSerializing]
|
||||
internal void OnSerializing(StreamingContext context)
|
||||
{
|
||||
this.SubFilterString = JsonSerializer.Serialize(this.SubFilter);
|
||||
}
|
||||
|
||||
[OnDeserialized]
|
||||
internal void OnDeserialized(StreamingContext context)
|
||||
{
|
||||
this.SubFilter = this.ResolveSubFilter(this.OptionType, this.SubFilterString);
|
||||
}
|
||||
|
||||
private ISubFilter ResolveSubFilter(string type, string filterString)
|
||||
{
|
||||
if (type != null)
|
||||
{
|
||||
switch (type.ToLower())
|
||||
{
|
||||
case "int":
|
||||
return JsonSerializer.Deserialize<IntGameFilter>(filterString)
|
||||
?? throw new InvalidOperationException("Deserialization returned null for IntGameFilter");
|
||||
case "platform":
|
||||
return JsonSerializer.Deserialize<PlatformGameFilter>(filterString)
|
||||
?? throw new InvalidOperationException("Deserialization returned null for PlatformGameFilter");
|
||||
case "cat":
|
||||
return JsonSerializer.Deserialize<CategorizedGameFilter>(filterString)
|
||||
?? throw new InvalidOperationException("Deserialization returned null for CategorizedGameFilter");
|
||||
case "languages":
|
||||
return JsonSerializer.Deserialize<LanguageFilter>(filterString)
|
||||
?? throw new InvalidOperationException("Deserialization returned null for LanguageFilter");
|
||||
case "chat":
|
||||
return JsonSerializer.Deserialize<ChatModeGameFilter>(filterString)
|
||||
?? throw new InvalidOperationException("Deserialization returned null for ChatModeGameFilter");
|
||||
case "map":
|
||||
return JsonSerializer.Deserialize<MapGameFilter>(filterString)
|
||||
?? throw new InvalidOperationException("Deserialization returned null for MapGameFilter");
|
||||
case "bool":
|
||||
return JsonSerializer.Deserialize<BoolGameFilter>(filterString)
|
||||
?? throw new InvalidOperationException("Deserialization returned null for BoolGameFilter");
|
||||
default:
|
||||
throw new InvalidOperationException("No type matches subfilter");
|
||||
}
|
||||
}
|
||||
|
||||
throw new InvalidOperationException("Must provide type for sub filter");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Impostor.Api.Innersloth.GameFilters
|
||||
{
|
||||
[Serializable]
|
||||
public class GameFilterSet
|
||||
{
|
||||
[JsonConstructor]
|
||||
public GameFilterSet(GameModes gameMode, List<GameFilter> filters)
|
||||
{
|
||||
GameMode = gameMode;
|
||||
Filters = filters;
|
||||
}
|
||||
|
||||
[JsonPropertyName("GameMode")]
|
||||
public required GameModes GameMode { get; set; }
|
||||
|
||||
[JsonPropertyName("Filters")]
|
||||
public required List<GameFilter> Filters { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Impostor.Api.Innersloth.GameFilters
|
||||
{
|
||||
[Serializable]
|
||||
public class GameFiltersList
|
||||
{
|
||||
[JsonPropertyName("FilterSets")]
|
||||
public required List<GameFilterSet> FilterSets { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
namespace Impostor.Api.Innersloth.GameFilters
|
||||
{
|
||||
public interface ISubFilter
|
||||
{
|
||||
string FilterType { get; }
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Impostor.Api.Innersloth.GameFilters
|
||||
{
|
||||
[Serializable]
|
||||
public class IntGameFilter : ISubFilter
|
||||
{
|
||||
[JsonPropertyName("FilterType")]
|
||||
public string FilterType { get; } = "int";
|
||||
|
||||
[JsonPropertyName("AcceptedValues")]
|
||||
public required List<int> AcceptedValues { get; set; }
|
||||
|
||||
[JsonPropertyName("OptionEnum")]
|
||||
public required Int32OptionNames OptionEnum { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
using System;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Impostor.Api.Innersloth.GameFilters
|
||||
{
|
||||
[Serializable]
|
||||
public class LanguageFilter : ISubFilter
|
||||
{
|
||||
[JsonPropertyName("FilterType")]
|
||||
public string FilterType { get; } = "languages";
|
||||
|
||||
[JsonPropertyName("AcceptedValues")]
|
||||
public required uint AcceptedValues { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
using System;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Impostor.Api.Innersloth.GameFilters
|
||||
{
|
||||
[Serializable]
|
||||
public class MapGameFilter : ISubFilter
|
||||
{
|
||||
[JsonPropertyName("FilterType")]
|
||||
public string FilterType { get; } = "map";
|
||||
|
||||
[JsonPropertyName("AcceptedValues")]
|
||||
public required byte AcceptedValues { get; set; }
|
||||
}
|
||||
}
|
||||
Loaded 100 of 222 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user