====================================================================================================
DOCUMENT: Contributing & Fika Code Formatting
SOURCE: https://github.com/project-fika/Fika-Headless/blob/main/.github/CONTRIBUTING.md
ARCHIVE PATH: Fika/Component_Documentation/Fika-Headless/SEARCHABLE/.github/CONTRIBUTING.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Contributing & Fika Code Formatting
Source repository: https://github.com/project-fika/Fika-Headless
Source URL: https://github.com/project-fika/Fika-Headless/blob/main/.github/CONTRIBUTING.md
Source branch: main
Source commit: 112f26fb298c70a52988d710aef59bb660902c5f
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

# Contributing & Fika Code Formatting

### Keep the scope clear

This is ok:
```cs
if (!something)
{
    return;
}
```
This is not:
```cs
if (!something)
    return;
```

### Use boolean negations

This is ok:
```cs
if (!boolean)
{
    // do something
}
```
This is not:
```cs
if (boolean == false)
{
    // do something
}
```

### Avoid LINQ

Use `for` or `foreach` loops rather than LINQ statements where applicable, especially in `Update()` or methods that run often.

### Do not use null propagation or null-coalescing operators

They do not work with `Unity.GameObject`, more info [here](https://discussions.unity.com/t/usage-of-null-propagation-on-unity-objects-is-incorrect/880951).

This is ok:
```cs
if (myGameObject != null)
{
    myGameObject.Shoot();
}

if (myGameObject == null)
{
    myGameObject = MyGameObject.Create();
}
return myGameObject;
```
This is not:
```cs
myGameObject?.Shoot();

myGameObject ??= MyGameObject.Create();
return myGameObject;
```

### Use `Traverse`

Use `Traverse` when getting fields, properties, etc. that are private. If you are modifying/getting several things on the same `object`, save a reference to the `Traverse` and re-use it.

```cs
Traverse playerTraverse = Traverse.Create(this);

IVaultingComponent vaultingComponent = playerTraverse.Field<IVaultingComponent>("_vaultingComponent").Value;
if (vaultingComponent != null)
{
    UpdateEvent -= vaultingComponent.DoVaultingTick;
}

playerTraverse.Field("_vaultingComponent").SetValue(null);
playerTraverse.Field("_vaultingComponentDebug").SetValue(null);
playerTraverse.Field("_vaultingParameters").SetValue(null);
playerTraverse.Field("_vaultingGameplayRestrictions").SetValue(null);
playerTraverse.Field("_vaultAudioController").SetValue(null);
playerTraverse.Field("_sprintVaultAudioController").SetValue(null);
playerTraverse.Field("_climbAudioController").SetValue(null);
```

### AI-Generated Code Policy

We do not allow AI-generated code in contributions. We reserve the right to reject any submissions we suspect to be AI-generated.
The only exception is using AI to generate comments or documentation for code you write yourself.

### Ownership of Contributions

By submitting code to this repository, you agree that your contributions are licensed to the project under the terms of the [LICENSE](../Licenses/LICENSE.md) file. This gives the project the right to use, modify, and redistribute your contributions.
Once submitted, contributions cannot be removed or retracted, and the project may continue to use your code even if you later wish to withdraw it.


====================================================================================================
DOCUMENT: Fika-Headless
SOURCE: https://github.com/project-fika/Fika-Headless/blob/main/README.md
ARCHIVE PATH: Fika/Component_Documentation/Fika-Headless/SEARCHABLE/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Fika-Headless
Source repository: https://github.com/project-fika/Fika-Headless
Source URL: https://github.com/project-fika/Fika-Headless/blob/main/README.md
Source branch: main
Source commit: 112f26fb298c70a52988d710aef59bb660902c5f
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

# Fika-Headless
BepInEx plugin for hosting a Fika game using a headless client.

Requires Fika-Plugin.

Read more on how to install this tool https://project-fika.gitbook.io/wiki/advanced-features/dedicated-client

====================================================================================================
DOCUMENT: Contributing & Fika Code Formatting
SOURCE: https://github.com/project-fika/Fika-Plugin/blob/main/.github/CONTRIBUTING.md
ARCHIVE PATH: Fika/Component_Documentation/Fika-Plugin/SEARCHABLE/.github/CONTRIBUTING.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Contributing & Fika Code Formatting
Source repository: https://github.com/project-fika/Fika-Plugin
Source URL: https://github.com/project-fika/Fika-Plugin/blob/main/.github/CONTRIBUTING.md
Source branch: main
Source commit: 73ab774a97c5b608eed7ef66d02c83a0b9d703f5
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

# Contributing & Fika Code Formatting

### Keep the scope clear

This is ok:
```cs
if (!something)
{
    return;
}
```
This is not:
```cs
if (!something)
    return;
```

### Use boolean negations

This is ok:
```cs
if (!boolean)
{
    // do something
}
```
This is not:
```cs
if (boolean == false)
{
    // do something
}
```

### Avoid LINQ

Use `for` or `foreach` loops rather than LINQ statements where applicable, especially in `Update()` or methods that run often.

### Do not use null propagation or null-coalescing operators

They do not work with `Unity.GameObject`, more info [here](https://discussions.unity.com/t/usage-of-null-propagation-on-unity-objects-is-incorrect/880951).

This is ok:
```cs
if (myGameObject != null)
{
    myGameObject.Shoot();
}

if (myGameObject == null)
{
    myGameObject = MyGameObject.Create();
}
return myGameObject;
```
This is not:
```cs
myGameObject?.Shoot();

myGameObject ??= MyGameObject.Create();
return myGameObject;
```

### Use `Traverse`

Use `Traverse` when getting fields, properties, etc. that are private. If you are modifying/getting several things on the same `object`, save a reference to the `Traverse` and re-use it.

```cs
Traverse playerTraverse = Traverse.Create(this);

IVaultingComponent vaultingComponent = playerTraverse.Field<IVaultingComponent>("_vaultingComponent").Value;
if (vaultingComponent != null)
{
    UpdateEvent -= vaultingComponent.DoVaultingTick;
}

playerTraverse.Field("_vaultingComponent").SetValue(null);
playerTraverse.Field("_vaultingComponentDebug").SetValue(null);
playerTraverse.Field("_vaultingParameters").SetValue(null);
playerTraverse.Field("_vaultingGameplayRestrictions").SetValue(null);
playerTraverse.Field("_vaultAudioController").SetValue(null);
playerTraverse.Field("_sprintVaultAudioController").SetValue(null);
playerTraverse.Field("_climbAudioController").SetValue(null);
```

### AI-Generated Code Policy

We do not allow AI-generated code in contributions. We reserve the right to reject any submissions we suspect to be AI-generated.
The only exception is using AI to generate comments or documentation for code you write yourself.

### Ownership of Contributions

By submitting code to this repository, you agree that your contributions are licensed to the project under the terms of the [LICENSE](../Licenses/LICENSE.md) file. This gives the project the right to use, modify, and redistribute your contributions.
Once submitted, contributions cannot be removed or retracted, and the project may continue to use your code even if you later wish to withdraw it.


====================================================================================================
DOCUMENT: Fika - Bepinex plugin
SOURCE: https://github.com/project-fika/Fika-Plugin/blob/main/README.md
ARCHIVE PATH: Fika/Component_Documentation/Fika-Plugin/SEARCHABLE/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Fika - Bepinex plugin
Source repository: https://github.com/project-fika/Fika-Plugin
Source URL: https://github.com/project-fika/Fika-Plugin/blob/main/README.md
Source branch: main
Source commit: 73ab774a97c5b608eed7ef66d02c83a0b9d703f5
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

# Fika - Bepinex plugin

[![Discord](https://img.shields.io/discord/1202292159366037545?style=plastic&logo=discord&logoColor=FFFFFF&label=Fika%20Discord)](https://discord.gg/project-fika)
[![Downloads](https://img.shields.io/github/downloads/project-fika/Fika-Plugin/total?style=plastic&logo=github)](https://github.com/project-fika/Fika-Plugin/releases/latest)
![Size](https://img.shields.io/github/languages/code-size/project-fika/Fika-Plugin?style=plastic&logo=github)
![Issues](https://img.shields.io/github/issues/project-fika/Fika-Plugin?style=plastic&logo=github)
[![License](https://img.shields.io/badge/CC--BY--NC--SA--4.0-blue?style=plastic&logo=creativecommons&logoColor=FFFFFF&label=License)](https://github.com/project-fika/Fika-Plugin/blob/main/LICENSE.md)
[![Crowdin](https://badges.crowdin.net/project-fika/localized.svg)](https://crowdin.com/project/project-fika)
[![.NET Test](https://github.com/project-fika/Fika-Plugin/actions/workflows/dotnet.yml/badge.svg)](https://github.com/project-fika/Fika-Plugin/actions/workflows/dotnet.yml)

Client-side changes to make multiplayer work.

## State of the project

Fully functional with minimal bugs.

- All base game features are replicating and working properly
- Unique interpolation system inspired by the id Tech 3 networking model
- Extremely efficient bandwidth usage
- Headless client to off-load AI (see [Fika-Headless](https://github.com/project-fika/Fika-Headless) repo)
- Base game bug fixes that have been unfixed for years
- Base game performance fixes
- DNS support
- Works with all mods that are developed without hacky workarounds

## Supported OS
Fika is meant to be ran on Windows 10/11. Any other OS might work, but is not officially supported nor do we develop for them. Please respect this when creating an issue/bug report.

## Contributing

You are free to fork, improve and send PRs to improve the project. Please try
to make your code coherent for the other developers.
It is recommended to check in with our developers on Discord before spending time on a pull request, so that no time is wasted on unwanted features.

## Requirements

- [Visual Studio Code](https://code.visualstudio.com/)
- [.NET SDK 10.0.x](https://dotnet.microsoft.com/en-us/download/dotnet/10.0)

## Setup

1. Copy-paste the contents of `EscapeFromTarkov_Data/Managed/` into
    `References/`
2. Copy-paste from SPT.Modules `project/Shared/Hollowed/hollowed.dll` into
    `References/`

## Build

### Debug / Release

**Tool**   | **Action**
---------- | ------------------------------
PowerShell | `dotnet build`
VSCode     | `Terminal > Run Build Task...`

You have to create a `References` folder and populate it with the required
dependencies from your game installation for the project to build.

## Licenses

[<img src="https://mirrors.creativecommons.org/presskit/buttons/88x31/svg/by-nc-sa.svg" alt="cc by-nc-sa" width="180" height="63" align="right">](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.en)

This project is licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.en).

### Credits

**Project** | **License**
----------- | -----------------------------------------------------------------------
SPT.Modules | [NCSA](https://dev.sp-tarkov.com/SPT/Modules/src/branch/master/LICENSE.md)
SIT         | [NCSA](./Licenses/LICENSE-SIT.md) (`Forked from SIT.Client master:9de30d8`)
Open.NAT    | [MIT](https://github.com/lontivero/Open.NAT/blob/master/LICENSE) (for UPnP implementation)
LiteNetLib  | [MIT](https://github.com/RevenantX/LiteNetLib/blob/master/LICENSE.txt) (for P2P UDP implementation)

<a href="https://crowdin.com/?utm_term=click-badge-add-on" rel="nofollow"><img style="width:140;height:40px" src="https://badges.crowdin.net/badge/light/crowdin-on-dark.png" srcset="https://badges.crowdin.net/badge/light/crowdin-on-dark.png 1x,https://badges.crowdin.net/badge/light/crowdin-on-dark@2x.png 2x" alt="Crowdin | Agile localization for tech companies" /></a>


====================================================================================================
DOCUMENT: README
SOURCE: https://github.com/project-fika/Fika-Plugin/blob/main/Fika.Core/Bundles/Files/README.md
ARCHIVE PATH: Fika/Component_Documentation/Fika-Plugin/SEARCHABLE/Fika.Core/Bundles/Files/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: README
Source repository: https://github.com/project-fika/Fika-Plugin
Source URL: https://github.com/project-fika/Fika-Plugin/blob/main/Fika.Core/Bundles/Files/README.md
Source branch: main
Source commit: 73ab774a97c5b608eed7ef66d02c83a0b9d703f5
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

These assets are managed and built by the Fika team

====================================================================================================
DOCUMENT: Contributing & Fika Code Formatting
SOURCE: https://github.com/project-fika/Fika-Server-CSharp/blob/main/.github/CONTRIBUTING.md
ARCHIVE PATH: Fika/Component_Documentation/Fika-Server-CSharp/SEARCHABLE/.github/CONTRIBUTING.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Contributing & Fika Code Formatting
Source repository: https://github.com/project-fika/Fika-Server-CSharp
Source URL: https://github.com/project-fika/Fika-Server-CSharp/blob/main/.github/CONTRIBUTING.md
Source branch: main
Source commit: bf159fffa8a72802741f33de7920186c19c81bd1
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

# Contributing & Fika Code Formatting

### AI-Generated Code Policy

We do not allow AI-generated code in contributions. We reserve the right to reject any submissions we suspect to be AI-generated.
The only exception is using AI to generate comments or documentation for code you write yourself.

### Ownership of Contributions

By submitting code to this repository, you agree that your contributions are licensed to the project under the terms of the [LICENSE](../Licenses/LICENSE.md) file. This gives the project the right to use, modify, and redistribute your contributions.
Once submitted, contributions cannot be removed or retracted, and the project may continue to use your code even if you later wish to withdraw it.


====================================================================================================
DOCUMENT: Fika - C# SPT.Server Mod
SOURCE: https://github.com/project-fika/Fika-Server-CSharp/blob/main/README.md
ARCHIVE PATH: Fika/Component_Documentation/Fika-Server-CSharp/SEARCHABLE/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Fika - C# SPT.Server Mod
Source repository: https://github.com/project-fika/Fika-Server-CSharp
Source URL: https://github.com/project-fika/Fika-Server-CSharp/blob/main/README.md
Source branch: main
Source commit: bf159fffa8a72802741f33de7920186c19c81bd1
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

# Fika - C# SPT.Server Mod

[![Discord](https://img.shields.io/discord/1202292159366037545?style=plastic&logo=discord&logoColor=FFFFFF&label=Fika%20Discord)](https://discord.gg/project-fika)
[![License](https://img.shields.io/badge/CC--BY--NC--SA--4.0-blue?style=plastic&logo=creativecommons&logoColor=FFFFFF&label=License)](LICENSE)

Server-side changes to make multiplayer work.

## Contributing

You are free to fork, improve and send PRs to improve the project. Please try
to make your code coherent for the other developers.

## Requirements

- [Visual Studio Code](https://code.visualstudio.com/)
- [.NET SDK 9.0.x](https://dotnet.microsoft.com/en-us/download/dotnet/9.0)

## Licenses

[<img src="https://mirrors.creativecommons.org/presskit/buttons/88x31/svg/by-nc-sa.svg" alt="cc by-nc-sa" width="180" height="63" align="right">](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.en)

This project is licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.en).

### Credits

**Project** | **License**
----------- | -----------------------------------------------------------------------
SPT.Server | [NCSA](https://github.com/sp-tarkov/server-csharp/blob/main/LICENSE)
LiteNetLib | [MIT](https://github.com/RevenantX/LiteNetLib/blob/master/LICENSE.txt) (for NatPunch implementation)

<a href="https://crowdin.com/?utm_term=click-badge-add-on" rel="nofollow"><img style="width:140;height:40px" src="https://badges.crowdin.net/badge/light/crowdin-on-dark.png" srcset="https://badges.crowdin.net/badge/light/crowdin-on-dark.png 1x,https://badges.crowdin.net/badge/light/crowdin-on-dark@2x.png 2x" alt="Crowdin | Agile localization for tech companies" /></a>


====================================================================================================
DOCUMENT: Advanced features
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/README.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/advanced-features/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Advanced features
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/README.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Advanced features of Fika.
icon: magnifying-glass
---

# Advanced features

{% hint style="warning" %}
This section is for advanced users only. We will not provide support unless you know what you're doing
{% endhint %}

<a href="headless-client/" class="button primary" data-icon="server">Set up a headless client</a>

<a href="nat-punching/" class="button primary" data-icon="network-wired">Host SPT Server with NAT Punching</a>

<a href="web-app.md" class="button primary" data-icon="globe">Host the Web App</a>

<a href="fika-api.md" class="button primary" data-icon="webhook">Using the Fika API</a>


====================================================================================================
DOCUMENT: ADVANCED: How Fika Establishes Raid Connections
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/advanced-how-fika-establishes-raid-connections.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/faqandguides/advanced-how-fika-establishes-raid-connections.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: ADVANCED: How Fika Establishes Raid Connections
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/advanced-how-fika-establishes-raid-connections.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: >-
  This page will describe how Fika facilitates clients connecting to the raid
  host. This may help troubleshooting issues if you have a non-standard network
  setup (proxy, tunnels, ddns, docker, etc).
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: true
  pagination:
    visible: false
  metadata:
    visible: true
---

# ADVANCED: How Fika Establishes Raid Connections

{% hint style="warning" %}
This article is intended for Advanced Users who have a non-standard network setup. Whereas it may be interesting for others, if you have a simple network you may be better off just following the [hosting instructions](../hosting-a-fika-server/choose-your-hosting-method.md) and not worrying about the inner-workings of Fika. If port forwarding isn't working, use a [VPN like Radmin](../hosting-a-fika-server/host-using-a-vpn.md).
{% endhint %}

### Definition of Terms

* **SPT Server / backend server**
  * SPT Server or backend server refers to `SPT.Server.exe` which handles synchronizing profiles and stash management. It is modified by the fika-server mod to allow for players to host and join raids.
* **fika-server mod**
  * This is a modification of the backend server that allows for hosted raids to populate in a list and be joinable by clients. It forwards information about connection methods from the raid host to joining clients.
* **Fika client plugin**
  * The client plugin is a BepInEx plugin in the form of a .dll file that lives in `BepInEx\plugins\Fika\` and hosts the networking functionality for the raid. It is what listens for connections for the raid host or establishes a connection for a joining client. When you are changing settings in the F12 configuration menu, you are changing settings for the cilent plugin.
* **Plugin configuration**
  * This is the list of settings that can be changed in the BepInEx Configuration Manager, often accessed by pressing F12 inside your gaming client. These values can also be modified by opening `BepInEx/config/com.fika.core.cfg` in a text editor and editing the values directly.

## Fika Network Workflow

### How the Raid is Advertised to Clients

When the raid host starts setting up a raid for others to connect, it first looks in the `Force IP` field for the client plugin configuration for the client that is to be the host. If that field is populated, it stores that IP in memory, hereafter referred to as `IP_1`. If the `Force IP` field is blank, the plugin will attempt to resolve the Public/WAN IP by querying (at the time of writing) three IP resolution services and then it stores the Public IP as `IP_1`.

The client plugin will also query local network adapter(s) and store a LAN IP (generally `192.168.x.x` or `10.0.x.x`) as `IP_2`. If the PC where this is happening has multiple local network adapters then you may experience connection issues if someone is trying to connect via the same network.

{% hint style="info" %}
For instance, if the PC has both an ethernet connection and a Wi-Fi connection, with both enabled and connected, the client plugin may record the wrong LAN IP. It is important that the PC has only one active LAN adapter for things to work correctly in all cases.
{% endhint %}

Then the client plugin will look at the `Port` field in the plugin configuration and record that to memory.

Next, the client plugin will look at the `Force Bind IP` field. If that field has a value other than 'Disabled', it will start listening for connections on the adapter related to the IP selected.

* For `0.0.0.0` it will listen to connections that come from anywhere. This is also the behavior if `Force Bind IP` is set to 'Disabled'.
* For a specific IP, like `192.168.x.x` or `26.x.x.x`, it will listen for connections that only come from that network adapter. This is generally only used when a VPN network adapter is utilized, otherwise `0.0.0.0` is preferred.

Once all of the values have been recorded to memory, the client plugin will attempt to establish a service that listens for incoming connections. Then the plugin will send a list of available IP:Port combinations to the fika-server mod so that the backend server can forward that information to any other client that may want to connect. The list will look like:

* `IP_1:Port` - This is generally either the value in `Force IP` or your Public/WAN IP + Port from plugin configuration
* `IP_2:Port` - This is your LAN IP + Port from plugin configuration

{% hint style="danger" %}
None of the settings in Fika.Core -> Network affect the client that is **joining** the raid. They only affect the raid host.
{% endhint %}

### How a Client Connects to an Advertised Raid

When a client navigates to the raid screen and clicks the `JOIN` button on a particular raid in the list of available raids, the backend server forwards the information discussed above to the joining client's Fika plugin, which includes a list of IP:Port combinations to which they will attempt to connect.

The connecting client will then attempt to connect to `IP_1:Port` and `IP_2:Port` in series. If neither works, an error will be displayed suggesting to confirm that all ports are open and incoming connections are allowed by the raid host.

{% hint style="info" %}
Note: a **direct connection** between game clients is being established, not a connection that is routed through the backend server. If the path of the direct connection is obstructed or unavailable it will fail, even if both clients are able to connect to the backend server.
{% endhint %}

### Further Troubleshooting

If you or a friend are still getting errors when attempting to join a raid, you should open the Player.log of the person getting the error and look for which IPs are being sent to them. Player.log can be found at the location below, and the picture below that shows an example of the log lines for which you are looking.

```
C:\Users\YOURUSERNAME\AppData\LocalLow\Battlestate Games\EscapeFromTarkov\
```

<figure><img src="../.gitbook/assets/image (56).png" alt=""><figcaption></figcaption></figure>

The two IPs listed will be `IP_1` and `IP_2` from the [Fika Network Workflow](advanced-how-fika-establishes-raid-connections.md#fika-network-workflow) section.

## Why This Matters

This is very different from the way most 'dedicated server' game hosting scenarios play out. If you've ever hosted another game server — like Minecraft or Valheim or ARK or Palworld or 7D2D — you may be surprised to learn that Fika hosting is completely different, and thus nearly all of the knowledge you've acquired from hosting for your group of friends in the past is less than useful.

In most other games, the 'dedicated server' application takes care of all network synchronization. You and a friend both connect to the server and neither of you have to be able to accept incoming connections to play together. With SPT+Fika, this is not the case: you can both connect to the backend server, interact with traders and send each other items, but you will not be able to play in raids together unless one of you is able to accept incoming connections **to your EscapeFromTarkov.exe game client.** This is because raids are hosted by Fika Plugin on your game client, not the backend server.

If the PC where the raid is being hosted is only accessible behind a proxy or tunnel, you may have to utilize the information above to come up with a value to enter in to `Force IP` such that other clients can connect to the advertised raid. This may be as simple as creating a dynamic DNS entry that resolves differently inside your network than it does outside — for instance, `fika.yourdomain.com` that is resolved to a LAN IP for users inside your network (locally by your router) but your public IP for users outside your network via an A record from your domain registrar.

{% hint style="success" %}
If any of the above information still does not help you figure out what values you can enter for Force IP or Force Bind IP, come join us in the [Fika Discord](https://discord.gg/project-fika) and explain your network setup, what you're trying to do, what you've tried, and what's not working.
{% endhint %}


====================================================================================================
DOCUMENT: Before installing Fika
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/installing-fika/before-installing-fika.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/installing-fika/before-installing-fika.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Before installing Fika
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/installing-fika/before-installing-fika.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: true
---

# Before installing Fika

{% hint style="warning" %}
**WARNING**

Escape from Tarkov must be installed on your computer using the official BSG launcher.
{% endhint %}

You must have a working SPT installation before attempting to install Fika. This means you must be able to start a game in SPT without any issues, and you should not be running any mods before installing Fika. Please ensure this is the case before continuing with the next steps.

{% hint style="info" %}
If you do not have SPT installed, click [here](https://forge.sp-tarkov.com/installer) to download the SPT installer and follow the steps to install SPT.
{% endhint %}

<p align="center"><a href="hardware-requirements.md" class="button primary" data-icon="circle-right">I understand</a></p>


====================================================================================================
DOCUMENT: Choose your connection method
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/joining-a-fika-server/choose-your-connection-method.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/joining-a-fika-server/choose-your-connection-method.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Choose your connection method
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/joining-a-fika-server/choose-your-connection-method.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Choose your connection method

The connection method depends on how the Fika server was set up. Make sure to ask the server host which hosting method they used.

<p align="center"><a href="join-using-direct-connection.md" class="button primary" data-icon="circle-right">The server host uses Port Forwarding</a></p>

<p align="center"><a href="connect-using-a-vpn/" class="button primary" data-icon="circle-right">The server host uses VPN</a></p>

<p align="center"><a href="connect-locally.md" class="button primary" data-icon="circle-right">The server host is local</a></p>


====================================================================================================
DOCUMENT: Choose your hosting method
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/hosting-a-fika-server/choose-your-hosting-method.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/hosting-a-fika-server/choose-your-hosting-method.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Choose your hosting method
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/hosting-a-fika-server/choose-your-hosting-method.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Getting started with hosting a Fika server.
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Choose your hosting method

See below for the different methods for hosting a Fika server. Choose the one that is appropriate to your network configuration.

{% hint style="warning" %}
**WARNING**

Some technical knowledge is required to host a Fika server. If you are unsure, please visit our Discord for assistance.
{% endhint %}

{% tabs %}
{% tab title="Port Forwarding" %}
Port Forwarding is the process of opening a port externally to a device within your network. Players can enter your external IP and connect directly to the server running on your computer.

**Pros**

* Direct connection between players and your server (best performance).
* No software dependencies.

**Cons**

* Requires access to your router configuration.
* Certain ISP or network configuration such as CGNAT/shared public IP cannot port forward.
* Your device local IP may change which will break the port forwarding rule (can be addressed by static IP allocation).

<a href="host-using-port-forwarding.md" class="button primary" data-icon="up-right-from-square">Host using Port Forwarding</a>
{% endtab %}

{% tab title="Virtual Private Network (VPN)" %}
A Virtual Private Network (VPN) allows you to join a virtual network provided by a centralized server. All communication goes through the centralized server and then is shared between peers connected to the same network.

**Pros**

* No port forwarding required
* Easy to set up and use
* Works with restricted networks such as CGNAT/shared public IP

**Cons**

* Direct connection is not possible in some instances. Communication will be relayed through the centralized server, which can severely degrade performance
* Requires all players to install and configure the VPN client
* Your external IP address is shared with the VPN service

<a href="host-using-a-vpn.md" class="button primary" data-icon="up-right-from-square">Host using VPN</a>
{% endtab %}

{% tab title="LAN (Local)" %}
Fika supports hosting on a local server with or without access to Internet. A router is required to be able to establish a connection to the local IP address of the server.

<a href="host-over-lan.md" class="button primary" data-icon="up-right-from-square">Host over LAN</a>
{% endtab %}
{% endtabs %}


====================================================================================================
DOCUMENT: Client
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/fika-configuration/client.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/fika-configuration/client.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Client
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/fika-configuration/client.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: >-
  An exhaustive list of all the different Fika configurations when playing
  in-game. Not fully updated for 4.X.
---

# Client

To open up your client configuration, press the <kbd>F12</kbd> key while in-game. Head to the `Fika Core` section to configure the settings.

### Coop

<table><thead><tr><th>Name</th><th width="171">Default value</th><th>Description</th></tr></thead><tbody><tr><td>Show Feed</td><td>true</td><td>Enable custom notifications when a player dies, extracts, kills a boss, etc.</td></tr><tr><td>Auto Extract</td><td>false</td><td>Automatically extracts after the extraction countdown. As a host, this will only work if there are no clients connected.</td></tr><tr><td>Show Extract Message</td><td>true</td><td>Whether to show the extract message after dying/extracting.</td></tr><tr><td>Extract Key</td><td><kbd>F8</kbd></td><td>The key used to extract from the raid.</td></tr><tr><td>Enable Chat</td><td>false</td><td>Toggle to enable chat in game. Cannot be change mid raid.</td></tr><tr><td>Chat Key</td><td><kbd>RightControl</kbd></td><td>The key used to open the chat window.</td></tr><tr><td>Enable Online Players</td><td>true</td><td>If the online players menu should be shown in the menu.</td></tr><tr><td>Online Players Scale</td><td>1</td><td>The scale of the window that displays online players. Only change if it looks out of proportion. Requires a refresh of the main menu to take effect.</td></tr></tbody></table>

### Coop | Debug

<table><thead><tr><th>Name</th><th width="167">Default value</th><th>Description</th></tr></thead><tbody><tr><td>Free Camera Button</td><td><kbd>F9</kbd></td><td>Button used to toggle free camera.</td></tr><tr><td>Allow Spectating Bots</td><td>true</td><td>If we should allow spectating bots if all players are dead/extracted.</td></tr><tr><td>AZERTY Mode</td><td>false</td><td>If free camera should use AZERTY keys for input.</td></tr><tr><td>Drone Mode</td><td>false</td><td>If the free camera should move only along the vertical axis like a drone.</td></tr><tr><td>Keybind Overlay</td><td>true</td><td>Keybind Overlay.</td></tr></tbody></table>

### Coop | Name Plates

<table><thead><tr><th>Name</th><th width="167">Default value</th><th>Description</th></tr></thead><tbody><tr><td>Show Player Name Plates</td><td>true</td><td>If name plates should be shown above teammates.</td></tr><tr><td>Hide Health Bar</td><td>false</td><td>Completely hides the health bar.</td></tr><tr><td>Show HP% instead of bar</td><td>false</td><td>Shows health in % amount instead of using the bar.</td></tr><tr><td>Show Effects</td><td>true</td><td>If status effects should be displayed below the health bar.</td></tr><tr><td>Show Player Faction Icon</td><td>true</td><td>Shows the player faction icon next to the HP bar.</td></tr><tr><td>Hide Name Plate in Optic</td><td>true</td><td>Hides the name plate when viewing through PiP scopes.</td></tr><tr><td>Name Plates Use Optic Zoom</td><td>true</td><td>If name plate location should be displayed using the PiP optic camera.</td></tr><tr><td>Decrease Opacity in Peripheral</td><td>true</td><td>Decreases the opacity of the name plates when not looking at a player.</td></tr><tr><td>Name Plate Scale</td><td>0.22</td><td>Size of the name plates.</td></tr><tr><td>Opacity in ADS</td><td>0.75</td><td>The opacity of the name plates when aiming down sights.</td></tr><tr><td>Max Distance to Show</td><td>500</td><td>The maximum distance at which name plates will become invisible, starts to fade at half the input value.</td></tr><tr><td>Minimum Opacity</td><td>0.1</td><td>The minimum opacity of the name plates.</td></tr><tr><td>Minimum Name Plate Scale</td><td>0.01</td><td>The minimum scale of the name plates.</td></tr><tr><td>Use Occlusion</td><td>false</td><td>Use occlusion to hide the name plate when the player is out of sight.</td></tr></tbody></table>

### Coop | Pinging

<table><thead><tr><th>Name</th><th width="162">Default value</th><th>Description</th></tr></thead><tbody><tr><td>Ping System</td><td>true</td><td>Toggle Ping System. If enabled you can receive and send pings by pressing the ping key.</td></tr><tr><td>Ping Button</td><td><kbd>Semicolon</kbd></td><td>Button used to send pings.</td></tr><tr><td>Ping Color</td><td>FFFFFFFF</td><td>The color of your pings when displayed for other players.</td></tr><tr><td>Ping Size</td><td>1</td><td>The multiplier of the ping size.</td></tr><tr><td>Ping Time</td><td>3</td><td>How long pings should be displayed.</td></tr><tr><td>Play Ping Animation</td><td>false</td><td>Plays the pointing animation automatically when pinging. Can interfere with gameplay.</td></tr><tr><td>Show Ping During Optics</td><td>false</td><td>If pings should be displayed while aiming down an optics scope.</td></tr><tr><td>Ping Use Optic Zoom</td><td>true</td><td>If ping location should be displayed using the PiP optic camera.</td></tr><tr><td>Ping Scale With Distance</td><td>true</td><td>If ping size should scale with distance from player.</td></tr><tr><td>Ping Minimum Opacity</td><td>0.05</td><td>The minimum opacity of pings when looking straight at them.</td></tr><tr><td>Show Ping Range</td><td>false</td><td>Shows the range from your player to the ping if enabled.</td></tr><tr><td>Ping Sound</td><td>SubQuestComplete</td><td>The audio that plays on ping. Acceptable values: SubQuestComplete, InsuranceInsured, ButtonClick, ButtonHover, InsuranceItemInsured, MenuButtonBottom, ErrorMessage, InspectWindow, InspectWindowClose, MenuEscape</td></tr></tbody></table>

### Coop | Quest Sharing

<table><thead><tr><th>Name</th><th width="162">Default value</th><th>Description</th></tr></thead><tbody><tr><td>Quest Types</td><td>All</td><td>Which quest types to receive and send. PlaceBeacon is both markers and items. Acceptable values: Kills, Item, Location, PlaceBeacon, All</td></tr><tr><td>Show Notifications</td><td>true</td><td>If a notification should be shown when quest progress is shared with out.</td></tr><tr><td>Easy Kill Conditions</td><td>false</td><td>Enables easy kill conditions. When this is used, any time a friendly player kills something, it treats it as if you killed it for your quests as long as all conditions are met. This can be inconsistent and does not always work.</td></tr><tr><td>Shared Kill Experience</td><td>false</td><td>If enabled you will receive ½ of the experience when a friendly player kills an enemy (not bosses).</td></tr><tr><td>Shared Boss Experience</td><td>false</td><td>If enabled you will receive ½ of the experience when a friendly player kills a boss.</td></tr></tbody></table>

### Gameplay

<table><thead><tr><th>Name</th><th width="162">Default value</th><th>Description</th></tr></thead><tbody><tr><td>Disable Bot Metabolism</td><td>false</td><td>Disables metabolism on bots, preventing them from dying from loss of energy/hydration during long raids.</td></tr></tbody></table>

### Network

<table><thead><tr><th>Name</th><th width="175">Default value</th><th>Description</th></tr></thead><tbody><tr><td>Force IP</td><td>&#x3C;empty></td><td>Forces the server when hosting to use this IP when broadcasting to the backend instead of automatically trying to fetch it. Leave empty to disable.</td></tr><tr><td>Force Bind IP</td><td>0.0.0.0</td><td>Forces the server when hosting to use this local adapter when starting the server. Useful if you are hosting on a VPN.</td></tr><tr><td>UDP Port</td><td>25565</td><td>Port to use for UDP gameplay packets.</td></tr><tr><td>Use UPnP</td><td>false</td><td>Attempt to open ports using UPnP. Useful if you cannot open ports yourself but the router supports UPnP.</td></tr><tr><td>Use NAT Punching</td><td>false</td><td>Use NAT punching when hosting a raid. Only works with fullcone NAT type routers and requires NatPunchServer to be running on the SPT server. UPnP, Force IP and Force Bind IP are disabled with this mode.</td></tr><tr><td>Connection Timeout</td><td>15</td><td>How long it takes for a connection to be considered dropped if no packets are received.</td></tr><tr><td>Send Rate</td><td>Medium</td><td>How often per second movement packets should be sent (lower = less bandwidth used, slight more delay during interpolation). This only affects the host and will be synchronized to all clients.</td></tr><tr><td>Smoothing Rate</td><td>Medium</td><td>Local simulation is behind by (Send Rate * Smoothing Rate). This guarantees that we always have enough snapshots in the buffer to mitigate lags &#x26; jitter during interpolation.</td></tr></tbody></table>


====================================================================================================
DOCUMENT: Configure mods for the headless client
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/headless-client-faq-and-common-issues/configure-mods-for-the-headless-client.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/faqandguides/headless-client-faq-and-common-issues/configure-mods-for-the-headless-client.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Configure mods for the headless client
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/headless-client-faq-and-common-issues/configure-mods-for-the-headless-client.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Created by Shynd
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: true
---

# Configure mods for the headless client

## General instructions

* If the PC where the headless client is installed has a GPU, you can simply open the headless client in graphics mode by pressing G when prompted by FikaHeadlessManager during startup. In graphics mode you can access F12 (or F6 for SAIN) to configure your mods.
* If the PC where headless client is installed does NOT have a GPU, close FikaHeadlessManager and the headless client. Install the plugins you wish to configure on the SPT instance where you will be playing (NOT THE HEADLESS), configure the options however you want, then copy the necessary .cfg files from `<SPT Install>/BepInEx/config/` into the `<Headless SPT>/BepInEx/config/` folder for your headless client install.

## SAIN

* SAIN settings are stored in the `BepInEx/plugins/SAIN/Presets/` folder. I suggest using your main game to configure SAIN options however you want them to be on the headless client, then copy your entire `BepInEx/plugins/SAIN/` folder over to the headless client, overwriting all when prompted.

## Donuts

* Donuts settings are stored in the `BepInEx/plugins/dvize.Donuts/Config` folder. Same as SAIN above, I suggest configuring Donuts settings using the GUI from your main game and then copying over the entire `BepInEx/plugins/dvize.Donuts/` folder to the headless client.

***


====================================================================================================
DOCUMENT: Congratulations
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/landing/congratulations.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/landing/congratulations.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Congratulations
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/landing/congratulations.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Congratulations

## You have successfully installed Fika! :tada:

You may find useful resources about Fika below.



<p align="center"><a href="/broken/pages/wIfv7TrYQa2rJMHLl2oK" class="button primary" data-icon="up-right-from-square">How do I host or join a raid?</a></p>

<p align="center"><a href="../General-information.md#main-features" class="button primary" data-icon="up-right-from-square">Review Fika features</a></p>

<p align="center"><a href="../fika-configuration/" class="button primary" data-icon="up-right-from-square">Configure Fika</a></p>

<p align="center"><a href="../faqandguides/" class="button primary" data-icon="up-right-from-square">Common issues &#x26; guides</a></p>

<p align="center"><a href="https://discord.gg/project-fika" class="button primary" data-icon="discord">Join our Discord</a></p>


====================================================================================================
DOCUMENT: Connect locally
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/joining-a-fika-server/connect-locally.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/joining-a-fika-server/connect-locally.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Connect locally
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/joining-a-fika-server/connect-locally.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Step-by-step process for joining a Fika server.
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: true
  pagination:
    visible: false
  metadata:
    visible: false
---

# Connect locally

{% stepper %}
{% step %}
### Start `SPT.Launcher`

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2F89xf4fwAOWUZlYNbpj1u_2Fimage (3).png" alt="" width="455"><figcaption></figcaption></figure>


{% endstep %}

{% step %}
### Open `SPT Launcher`'s settings menu

Click the `Settings` button.

<figure><img src="../.gitbook/assets/image (28).png" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Configure server IP

Ask the server host to provide their <mark style="color:$warning;">local IP address</mark>.

Check the `Developer Mode` box.

<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>

Enter the host's <mark style="color:$warning;">local IP address</mark> in the URL section. **DO NOT** leave out `https://`, do not forget to append the port `:6969` and do not add a slash at the end. The URL box should look like this: `https://20.21.22.23:6969`

<figure><img src="../.gitbook/assets/image (5) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="../.gitbook/assets/image (6) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Create your profile


{% endstep %}

{% step %}
### Start the game

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2FVhkOgEbLlzyx9kazRxLl_2Fimage (2).avif" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

<p align="center"><a href="../landing/congratulations.md" class="button primary" data-icon="circle-right">I confirm I was able to connect to the server</a></p>


====================================================================================================
DOCUMENT: Connect using a VPN
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/joining-a-fika-server/connect-using-a-vpn/README.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/joining-a-fika-server/connect-using-a-vpn/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Connect using a VPN
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/joining-a-fika-server/connect-using-a-vpn/README.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Step-by-step process for joining a Fika server using a VPN client.
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: true
  pagination:
    visible: false
  metadata:
    visible: false
---

# Connect using a VPN

{% hint style="warning" %}
Free VPNs services are known to cause performance or connectivity problems, so use at your own risk. The officially supported way of playing Fika is with port forwarding. We will not provide support for issues caused by VPN services.

Custom firewalls such as **BitDefender** may also block your connection while playing. Make sure that you allow the connection or temporarily disable it while playing!

You may also experience issues if you are using another VPN service, even if it is disabled. If you have problems, consider uninstalling any other virtual network adapters.
{% endhint %}

{% stepper %}
{% step %}
### Download Radmin client

Navigate to the [Radmin website](https://www.radmin-vpn.com/) and download the Radmin VPN client.
{% endstep %}

{% step %}
### Install Radmin client

Run the installer and proceed with the installation steps.
{% endstep %}

{% step %}
### Reboot your computer

This is important to ensure that the virtual network adapter is correctly installed. **Do not skip this step!**
{% endstep %}

{% step %}
### Open Radmin

Open Radmin VPN client from the taskbar or from the start menu.
{% endstep %}

{% step %}
### Join the server host's Radmin network

Click `Join network`.

<figure><img src="../../.gitbook/assets/image (48).png" alt="" width="243"><figcaption></figcaption></figure>

Enter the network name and password used by the server host.

<figure><img src="../../.gitbook/assets/image (8).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Validate that you can see server host

You should now be able to see the list of connected peers including the host.

<figure><img src="../../.gitbook/assets/image (9).png" alt="" width="243"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Add Radmin to Windows firewall exclusions

Go to `System` -> `Firewall Exceptions` and click  `Allow All Apps`.

<figure><img src="../../.gitbook/assets/image (10).png" alt="" width="243"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Launcher`

<figure><img src="../../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2F89xf4fwAOWUZlYNbpj1u_2Fimage.png" alt="" width="455"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Open `SPT Launcher` settings

Click the `Settings` button.

<figure><img src="../../.gitbook/assets/image (29).png" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Configure the VPN IP in `SPT Launcher`

Check the `Developer Mode` box.

<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>

Enter the host's VPN address in the URL section. **DO NOT** leave out `https://`, do not forget to append the port `:6969` and do not add a slash at the end. The URL box should look like this: `https://20.21.22.23:6969`.

<figure><img src="../../.gitbook/assets/image (5) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>

Press the arrow on the right corner.

<figure><img src="../../.gitbook/assets/image (4) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Create your profile


{% endstep %}

{% step %}
### Start the game

<figure><img src="../../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2FVhkOgEbLlzyx9kazRxLl_2Fimage (1).avif" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

<p align="center"><a href="ensuring-direct-connection.md" class="button primary" data-icon="circle-right">I confirm I was able to connect to the server</a></p>


====================================================================================================
DOCUMENT: Connect using direct connection
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/joining-a-fika-server/join-using-direct-connection.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/joining-a-fika-server/join-using-direct-connection.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Connect using direct connection
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/joining-a-fika-server/join-using-direct-connection.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Step-by-step process for joining a Fika server.
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Connect using direct connection

{% stepper %}
{% step %}
### Start `SPT.Launcher`

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2F89xf4fwAOWUZlYNbpj1u_2Fimage (3).png" alt="" width="455"><figcaption></figcaption></figure>


{% endstep %}

{% step %}
### Open `SPT Launcher`'s settings

Click the `Settings` button.

<figure><img src="../.gitbook/assets/image (28).png" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Configure server IP in `SPT Launcher`

Ask the server host to provide their <mark style="color:$warning;">external IP address</mark>.

Check the `Developer Mode` box.

<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>

Enter the host's IP address in the URL section. **DO NOT** leave out `https://`, do not forget to append the port `:6969` and do not add a slash at the end. The URL box should look like this: `https://20.21.22.23:6969`

<figure><img src="../.gitbook/assets/image (5) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Create your profile


{% endstep %}

{% step %}
### Start the game

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2FVhkOgEbLlzyx9kazRxLl_2Fimage (2).avif" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

<p align="center"><a href="../landing/congratulations.md" class="button primary" data-icon="circle-right">I confirm I was able to connect to the server</a></p>


====================================================================================================
DOCUMENT: Contribute to Fika
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/contribute-to-fika.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/contribute-to-fika.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Contribute to Fika
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/contribute-to-fika.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Different ways you can contribute to Fika.
icon: code
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: true
  pagination:
    visible: false
  metadata:
    visible: true
---

# Contribute to Fika

## Development

You can contribute to the development of Project Fika by visiting our [GitHub organization](https://github.com/project-fika). Project Fika consists of multiple components, each with its own repository. Create a pull request and one of our developers will review it. Ensure that you follow the guidelines for code submission.

## Translation

Project Fika is localized by the community at [Crowdin](https://crowdin.com/project/project-fika). Feel free to help us translate it into any available languages!

## Wiki

You can contribute to the Wiki by submitting a pull request to its [GitHub repository](https://github.com/project-fika/gitbook-wiki). We recommend using [GitBook](https://www.gitbook.com/)'s editor to make your changes. To do this, fork the repository and add it to your GitBook account using GitBook's GitHub Sync integration app, then submit a pull request.

You can also request to become an editor in our [Discord](https://discord.gg/project-fika). Contact one of the staff member.


====================================================================================================
DOCUMENT: Creating Fika-Compatible Mods
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/Modding-Fika.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/Modding-Fika.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Creating Fika-Compatible Mods
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/Modding-Fika.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika / SPT 4.0-era
-->

---
description: Updated for 4.0
icon: wrench
---

# Creating Fika-Compatible Mods

## Fika Events

Fika has a lot of events that you can subscribe to, which makes it easier to run code at certain key moments of the raid. To subscribe to an event, use:

{% code overflow="wrap" %}
```cs
/// <summary>
/// Subscribes a callback to a specific type of Fika event.
/// </summary>
/// <typeparam name="TEvent">The type of the event to subscribe to.</typeparam>
/// <param name="callback">The callback to invoke when the event is dispatched.</param>
public static void SubscribeEvent<TEvent>(Action<TEvent> callback) where TEvent : FikaEvent
```
{% endcode %}

To unsubscribe, use:

{% code overflow="wrap" %}
```cs
/// <summary>
/// Unsubscribes a callback from a specific type of Fika event.
/// </summary>
/// <typeparam name="TEvent">The type of the event to unsubscribe from.</typeparam>
/// <param name="callback">The callback to remove from the event subscription.</param>
public static void UnsubscribeEvent<TEvent>(Action<TEvent> callback) where TEvent : FikaEvent
```
{% endcode %}

The event triggered will usually pass an important object related to the event, e.g. `FikaNetworkManagerCreatedEvent` passes a `IFikaNetworkManager` (named `Manager` in the object). This object can then be accessed if needed.

You can read the source code [here](https://github.com/project-fika/Fika-Plugin/tree/main/Fika.Core/Modding) to find all events.

## Registering Packets

To register packets, subscribe to the `FikaNetworkManagerCreatedEvent` and access the `IFikaNetworkManager`. In the manager you can call either of these methods:

{% code overflow="wrap" fullWidth="false" %}
```cs
/// <summary>
/// Registers a packet to the <see cref="NetPacketProcessor"/>.
/// </summary>
/// <typeparam name="T">The packet type.</typeparam>
/// <param name="handle">The <see cref="Action"/> to run when receiving the packet.</param>
void RegisterPacket<T>(Action<T> handle) where T : INetSerializable, new();
```
{% endcode %}

<pre class="language-cs" data-overflow="wrap" data-full-width="false"><code class="lang-cs">/// &#x3C;summary>
/// Registers a packet to the &#x3C;see cref="NetPacketProcessor"/> with user data.
/// &#x3C;/summary>
/// &#x3C;typeparam name="T">The packet type.&#x3C;/typeparam>
/// &#x3C;typeparam name="TUserData">The user data type.&#x3C;/typeparam>
/// &#x3C;param name="handle">The &#x3C;see cref="Action"/> to run when receiving the packet.&#x3C;/param>
<strong>void RegisterPacket&#x3C;T, TUserData>(Action&#x3C;T, TUserData> handle) where T : INetSerializable, new();
</strong></code></pre>

The `INetSerializable` needs to be a packet that you have created, and these methods are invoked when that packet is received. The second method also passes the `NetPeer`, which is useful on the `FikaServer`. You handle the logic however you want when receiving the packet with these methods.

{% hint style="danger" %}
Failing to register a packet will result in endless `exceptions` being thrown. Please register your packets correctly!
{% endhint %}

## Creating a Packet

To create a packet, implement the `INetSerializable` interface into a new `class`. For packets that are sent often, I highly recommend using a `struct`. Add the data that you need in the form of `Field` and make all of them `Public`. Use the `Serialize()` and `Deserialize()` methods to write/read data. You can find an example [here](https://github.com/project-fika/Fika-Plugin/blob/main/Fika.Core/Networking/Packets/Communication/BotStatePacket.cs), which also includes how to write an `enum`. There are also a lot of extensions to write EFT/Unity specific data (e.g. `Vector3`) that you can find [here](https://github.com/project-fika/Fika-Plugin/blob/main/Fika.Core/Networking/FikaSerializationExtensions.cs).

Do not instantiate and send new collections in packets that are sent often, e.g. `List<T>` or `T[]`. The allocations will become expensive. Fika has an interface `IReusable` that you can use to reuse a single instance of a packet, and only mutate the collections that exist in it.

{% code overflow="wrap" %}
```csharp
/// <summary>
/// Registers a reusable packet to the <see cref="NetPacketProcessor"/> with user data. Reusable uses the same instance throughout the lifetime of the <see cref="NetManager"/>.
/// Custom types must be registered with <see cref="RegisterCustomType{T}(Action{NetDataWriter, T}, Func{NetDataReader, T})"/> first.
/// </summary>
/// <typeparam name="T">The packet type.</typeparam>
/// <typeparam name="TUserData">The user data type.</typeparam>
/// <param name="handle">The <see cref="Action"/> to run when receiving the packet.</param>
void RegisterReusable<T, TUserData>(Action<T, TUserData> handle) where T : class, IReusable, new();
```
{% endcode %}

An example of these packets can be found [here](https://github.com/project-fika/Fika-Plugin/blob/47a9d37aa40e2e7cc0b9628c7114115cd3805cd4/Fika.Core/Networking/Packets/World/WorldPacket.cs). Create the class somewhere, keep track of it and reuse it. You can find an example of that in the [FikaClientWorld](https://github.com/project-fika/Fika-Plugin/blob/47a9d37aa40e2e7cc0b9628c7114115cd3805cd4/Fika.Core/Main/ClientClasses/FikaClientWorld.cs).

## Sending a Packet

To send a packet, you need a `IFikaNetworkManager`. This is either a `FikaServer` or `FikaClient` that you can access with the `Comfort.Common` namespace using `Singleton<IFikaNetworkManager>.Instance`. To determine whether you are a server or client, use `FikaBackendUtils.IsServer`.

Use this method to send packets:

{% code overflow="wrap" %}
```cs
/// <summary>
/// Sends a packet.
/// </summary>
/// <typeparam name="T">The type of packet to send, which must implement <see cref="INetSerializable"/>.</typeparam>
/// <param name="packet">The packet instance to send, passed by reference.</param>
/// <param name="deliveryMethod">The delivery method (reliable, unreliable, etc.) to use for sending the packet.</param>
/// <param name="broadcast">If <see langword="true"/>, the packet will be sent to multiple recipients; otherwise, it will be sent to a single target (server is always broadcast).</param>
void SendData<T>(ref T packet, DeliveryMethod deliveryMethod, bool broadcast = false) where T : INetSerializable;
```
{% endcode %}

The `broadcast` argument determines whether it will be sent to _all other clients_. As the server, this is always `true`.

If you want to send to just one specific `NetPeer`, e.g. after receiving a packet and you want to respond to that peer:

{% code overflow="wrap" %}
```csharp
/// <summary>
/// Sends a packet of data directly to a specific peer.
/// </summary>
/// <typeparam name="T">The type of packet to send, which must implement <see cref="INetSerializable"/>.</typeparam>
/// <param name="packet">The packet instance to send, passed by reference.</param>
/// <param name="deliveryMethod">The delivery method (reliable, unreliable, etc.) to use for sending the packet.</param>
/// <param name="peer">The target <see cref="NetPeer"/> that will receive the packet.</param>
/// <remarks>
/// Should only be used as a <see cref="FikaServer"/>, since a <see cref="FikaClient"/> only has one <see cref="NetPeer"/>.
/// </remarks>
void SendDataToPeer<T>(ref T packet, DeliveryMethod deliveryMethod, NetPeer peer) where T : INetSerializable;
```
{% endcode %}

```mermaid
flowchart LR

A[Send from Client 1] --->|Packet| B[Receive on Server]
B --> C{Broadcast?}
C -->|Yes| D[Send to Client 2 & 3]
C -->|No| E[Done]
```

{% hint style="warning" %}
A client only has one `NetPeer` and it is _**always**_ the server! A client is never aware of other clients.
{% endhint %}

Some specific functions are class specific, and cannot be called from the interface singleton. You can access the specific `FikaServer` or `FikaClient` using e.g. `Singleton<FikaServer>.Instance`.

The specific methods are:

#### Client

{% code overflow="wrap" %}
```csharp
/// <summary>
/// Sends a reusable packet
/// </summary>
/// <typeparam name="T">The <see cref="IReusable"/> to send</typeparam>
/// <param name="packet">The <see cref="INetSerializable"/> to send</param>
/// <param name="deliveryMethod">The deliverymethod</param>
/// <remarks>
/// Reusable will always be of type broadcast when sent from a client
/// </remarks>
public void SendReusable<T>(T packet, DeliveryMethod deliveryMethod) where T : class, IReusable, new()
```
{% endcode %}

#### Server

{% code overflow="wrap" %}
```csharp
public void SendReusableToAll<T>(T packet, DeliveryMethod deliveryMethod, NetPeer peerToExlude = null) where T : class, IReusable, new()
```
{% endcode %}

***

## Inventory Replication

Fika will automatically replicate all inventory actions, as long as you pass the operation through the `InventoryController.vmethod_1`. Every player has an inventory controller property (`EFT.Player.InventoryController`), _**use it!**_ Even without Fika, do not try to cirumvent this method and always pass them through the controller.\
\
Each operation has a constructor you can find in the assembly. You can look at these to see how to properly create and execute and inventory operation. Do not call the result directly! Use it to create the operation (I've seen this mistake a lot in the past from mod developers), and run it on the controller.\
\
Some examples you can look for the subtypes of are: `IExecute`, `IRollback`, `IRaiseEvents`.

{% hint style="danger" %}
If you circumvent the intended way of executing inventory operations, you will inevitably cause desync!
{% endhint %}

***

## Snapshotting

This guide explains the implementation and usage of the `Snapshotter<T>` system made for Fika. This module provides a zero-allocation, high-fidelity interpolation and extrapolation engine designed for high-tick-rate synchronization.\
\
It is highly recommended to use the `ThrottledMono` to send the data at a tickrate of 20, i.e. 20 times per second on average. Why would I use this and the snapshotter? To save bandwidth and CPU usage. See [#general-information-about-data](Modding-Fika.md#general-information-about-data "mention") and [#interpolation](Modding-Fika.md#interpolation "mention") for more information.

#### Key Features

* Zero-Allocation: Utilizes generic value-type specialization and `ref` semantics to ensure no Garbage Collection (GC) overhead during the hot path.
* Adaptive Jitter Buffer: Dynamically adjusts interpolation delay based on real-time network variance (Jitter) using an asymmetric EMA.
* Clock Synchronization: Automatically aligns local client time with server time using a smoothed offset.
* Validation: Built-in protection against out-of-order and duplicate UDP packets.

### Implementation

1.  Define Your Data<br>

    <pre class="language-csharp" data-title="PlayerSnapshot.cs" data-full-width="false"><code class="lang-csharp">public struct PlayerSnapshot : ISnapshot
    {
        // ISnapshot implementation
        public double RemoteTime { get; set; }
        public double LocalTime { get; set; }

        // your custom data
        public Vector3 Position;
        public Quaternion Rotation;

        public PlayerSnapshot(Vector3 pos, Quaternion rot, double remote, double local)
        {
            Position = pos;
            Rotation = rot;
            RemoteTime = remote;
            LocalTime = local;
        }
    }
    </code></pre>


2.  Initialize the Snapshotter<br>

    ```csharp
    // store this in your entity controller or state manager
    private readonly Snapshotter<PlayerSnapshot> _snapshotter = new();
    ```



### Usage

#### Adding Data

When a packet arrives from the network, pass it directly to the snapshotter. The system will internally handle clock synchronization and jitter estimation.<br>

```csharp
public void OnPacketReceived(PlayerSnapshot newSnapshot)
{
    // snapshot.LocalTime should be the exact time the packet hit the client
    // i highly recommend adding that through the constructor, and calling NetworkTimeSync.NetworkTime
    _snapshotter.AddSnapshot(in newSnapshot);
}
```

#### Sampling for Rendering

In your `Update` loop, sample the buffer to find the correct interpolation indices and the `t` (0.0 to 1.0) progress value.

{% hint style="info" %}
**Performance Tip**: Always use `ref readonly var` when retrieving snapshots. This prevents the **CPU** from copying the snapshot data (which can be 60+ bytes) and instead points directly to the data inside the buffer.
{% endhint %}

```csharp
private void Update()
{
    double currentTime = NetworkTimeSync.NetworkTime;
    
    // 1. ask the snapshotter where we are in the timeline
    var state = _snapshotter.GetInterpolationIndices(currentTime, out int from, out int to, out float t);

    // 2. handle the "Stop" case first
    if (state == EBufferState.Stale)
    {
        // network timeout or buffer empty. stop moving.
        return;
    }

    // 3. retrieve the snapshots. 
    // in 'Extrapolating', both 'to' and 'from' are the newest packet.
    // t will be the time (in seconds) elapsed since that packet.
    ref readonly var snapFrom = ref _snapshotter.GetSnapshot(from);

    if (state == EBufferState.Interpolating)
    {
        ref readonly var snapTo = ref _snapshotter.GetSnapshot(to);
        
        // standard blending between two real points
        transform.position = Vector3.LerpUnclamped(snapFrom.Position, snapTo.Position, t);
        transform.rotation = Quaternion.SlerpUnclamped(snapFrom.Rotation, snapTo.Rotation, t);
    }
    else if (state == EBufferState.Extrapolating)
    {
        // 't' here is the delta time since the last packet.
        // we use the last known velocity to guess the new position.
        Vector3 velocity = snapFrom.Velocity; 
        transform.position = snapFrom.Position + (velocity * t);
        
        // keep rotation static during extrapolation to prevent spinning
        transform.rotation = snapFrom.Rotation;
    }
}
```

#### Technical Performance

The system is optimized at the IL (Intermediate Language) level. By using `where T : struct`, the JIT compiler devirtualizes interface calls and inlines property getters.

<table data-full-width="false"><thead><tr><th>Metric</th><th>Result</th></tr></thead><tbody><tr><td>Memory Allocation</td><td>0 Bytes</td></tr><tr><td>Insertion Speed</td><td>~5.8ns</td></tr><tr><td>Sampling Speed</td><td>~4.2ns</td></tr><tr><td>Algorithm</td><td>O(log N) Binary Search</td></tr></tbody></table>

## General Information About Data

{% hint style="info" %}
Keep in mind that performance and bandwidth is not free! Do not send redundant data every `Update()` unless you have to.&#x20;

Fika has a class that you can inherit called `ThrottledMono`, where you can set an `UpdateRate` which is how many times it should update per second. This can dramatically increase performance and reduce bandwidth used.
{% endhint %}

### Calculating Packet Size (UDP with Headers)

When sending data over a network using UDP, each packet consists of:

1. Your payload (the actual data, e.g., floats)
2. Packet-specific overhead (1–4 bytes depending on the type, e.g. `Unreliable` or `ReliableOrdered`)
3. UDP header (8 bytes)
4. IP header (20–60 bytes, depending on IPv4 options)

It’s important to account for all headers, not just the payload, because small payloads can become inefficient due to header overhead.

#### Formula

Let:

* _**N**_ = number of elements being sent
* _**S**_<sub>element</sub> = size of one element in bytes (e.g., 4 bytes for a `float`)
* _**H**_<sub>packet​</sub> = packet-specific overhead (1–4 bytes)
* _**H**_<sub>UDPH​</sub> = UDP header size (8 bytes)
* _**H**_<sub>IPH</sub>​ = IP header size (20–60 bytes)

Then, the **total packet size in bytes** is:

$$
\text{Packet Size (bytes)} = N \times S_{\text{element}} + H_{\text{packet}} + H_{\text{udp}} + H_{\text{ip}}
$$

To convert to **bits**:

$$
\text{Packet Size (bits)} = 8 \times \Big( N \cdot S_{\text{element}} + H_{\text{packet}} + H_{\text{udp}} + H_{\text{ip}} \Big)
$$

***

#### Example

Suppose you are sending a `Vector3`, which is 3 floats (4 bytes each), with 2 bytes of packet-specific overhead, 8 bytes UDP header, and 20 bytes IP header:

$$
Packet Size=3×4+2+8+20=42 bytes
$$

$$
Packet Size in bits=42×8=336 bits
$$

Even this small payload, if sent frequently (e.g., every frame in a game), can consume significant bandwidth. Notice that even though the payload is only 12 bytes, headers increase the total packet size almost _**4×**_.\
\
Now imagine this being unthrottled, and the client is running at 120 FPS:

<mark style="color:$primary;">We already have:</mark>

$$
Packet Size=42 bytes
$$

<mark style="color:$primary;">If we send 120 packets per second:</mark>

$$
Data per second (bytes)=42×120
$$

#### Step-by-step

* Packet size is 42 bytes.
* Sending 120 packets per second.
* Multiply packet size by number of packets: 42 × 120.

<mark style="color:$primary;">Break it down:</mark>&#x20;

$$
42×120=42×(12×10)=(42×12)×10
$$

$$
42×12=504
$$

$$
504×10=5,040
$$

<mark style="color:$primary;">Convert to bits:</mark>

$$
5,040×8=40,320 bits per second (bps)
$$

This is _**a lot**_ of wasted bandwidth and CPU usage. Unless it's critical, do not send data every tick. Rather, interpolate values on the receiving end if needed. Breaking it down further:

$$
Data transferred=5KB/s×60s=300KB
$$

That is 300KB per minute for _**one**_, _**single**_ `Vector3`. That is almost ¼ of the bandwidth that Fika sends for _**all bots states**_ every minute.

<mark style="color:$primary;">The size of one entire player state (52 bytes), 20/s:</mark>

$$
52×20=1040bytes/sec per entity
$$

<mark style="color:$primary;">Assuming we have 20 bots:</mark>

$$
1040×20=20,800bytes/sec total
$$

<mark style="color:$primary;">Now per minute:</mark>

$$
20,800×60=1,248,000bytes/minute ≈ 1,248MB/minute (1.19 MiB)
$$

***

### Interpolation

As you can see from the breakdown, this is a lot of wasted data that could be throttled and sent less frequently, and potentially interpolated instead by lerping the values and sending the time when sending and comparing with the time when received.

<mark style="color:$primary;">Interpolation factor</mark> <mark style="color:$primary;"></mark>_<mark style="color:$primary;">**t**</mark>_<mark style="color:$primary;">:</mark>

$$
t = \frac{\text{currentTime} - \text{sentTime}}{\text{receivedTime} - \text{sentTime}}
$$

<mark style="color:$primary;">Clamp</mark> <mark style="color:$primary;"></mark>_<mark style="color:$primary;">**t**</mark>_ <mark style="color:$primary;"></mark><mark style="color:$primary;">between 0 and 1:</mark>

$$
t = \max(0, \min(1, t))
$$

<mark style="color:$primary;">Linear interpolation formula:</mark>

$$
\text{lerpedValue} = \text{oldValue} + (\text{newValue} - \text{oldValue}) \cdot t
$$

You can then send the current time (`NetworkTimeSync.NetworkTime`) and compare it with current time when received, and smooth out differences using the equations above.

#### Now comparing the different methods of sending

<mark style="color:$primary;">20 messages/sec at 16 bytes:</mark>

$$
16 \times 20 = 320\ \text{bytes/sec}
$$

<mark style="color:$primary;">120 messages/sec at 12 bytes:</mark>

$$
12 \times 120 = 1{,}440\ \text{bytes/sec}
$$

<mark style="color:$primary;">That is \~1080bytes saved per second:</mark>

$$
1{,}440 - 320 = 1{,}120\ \text{bytes/sec}
$$

### Summary

By combining **time synchronization** with **lerp-based smoothing**, we can create fluid, latency-tolerant motion without spamming the network.\
Instead of sending full position updates every frame, we send fewer messages that include a timestamp and interpolate locally:

$$
\text{lerpedValue} = (1 - t) \cdot \text{oldValue} + t \cdot \text{newValue}
$$

This allows clients to smoothly reconstruct movement based on timing differences rather than raw frequency.

For example, reducing from **120 messages/sec at 12 bytes** to **20 messages/sec at 16 bytes** saves:

$$
1{,}440 - 320 = 1{,}120\ \text{bytes/sec}
$$

While **1,12 KB/sec** per stream might seem small, it scales quickly — each actor can send multiple data streams (position, rotation, animation state, etc.), and with many actors, the savings multiply dramatically.

Optimizing send frequency and payload size is one of the most effective ways to achieve **smooth, efficient, and scalable networked movement**.

{% hint style="info" %}
This approach doesn’t just apply to movement — it’s equally useful for synchronizing any time-based value, such as animations, UI transitions, physics states, or even audio parameters.
{% endhint %}

## Tips and useful classes

* [FikaBackendUtils](https://github.com/project-fika/Fika-Plugin/blob/main/Fika.Core/Main/Utils/FikaBackendUtils.cs) has tons of useful methods/properties/fields that can be used.
* [FikaGlobals](https://github.com/project-fika/Fika-Plugin/blob/main/Fika.Core/Main/Utils/FikaGlobals.cs) has some helper methods that can be useful during development.
* [CoopHandler](https://github.com/project-fika/Fika-Plugin/blob/main/Fika.Core/Main/Components/CoopHandler.cs) has useful properties and methods, mainly to track players (especially human). It can be accessed on the `Singleton<IFikaNetworkManager>.Instance` or [CoopHandler.TryGetCoopHandler()](https://github.com/project-fika/Fika-Plugin/blob/18f02d5713b0e13cc02998b9e79489a55ac8249d/Fika.Core/Coop/Components/CoopHandler.cs#L62) depending on your code style preference.
* [FikaSerializationExtensions](https://github.com/project-fika/Fika-Plugin/blob/main/Fika.Core/Networking/FikaSerializationExtensions.cs) have tons of good extension methods to handle data, e.g. packing a `float`. If precision is not important to the last decimal, it's recommended to pack your primitives.

## Mod Examples

You can find an example sync-mod from the creator of Fika for the mod **MergeConsumables** [here](https://github.com/Lacyway/MergeConsumables/tree/master/fika).


====================================================================================================
DOCUMENT: Credits
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/Credits.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/Credits.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Credits
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/Credits.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: >-
  A page listing all the credits for each project and individuals who
  contributed to Project Fika and/or the Tarkov modding community in no specific
  order.
icon: rectangle-list
---

# Credits

### Project credits

<table><thead><tr><th width="240">Project</th><th>License</th></tr></thead><tbody><tr><td>SPT.Modules</td><td><a href="https://dev.sp-tarkov.com/SPT/Modules/src/branch/master/LICENSE.md">NCSA</a></td></tr><tr><td>SPT.Server</td><td><a href="https://dev.sp-tarkov.com/SPT/Server/src/branch/master/LICENSE.md">NCSA</a></td></tr><tr><td>SIT</td><td><a href="https://github.com/project-fika/Fika-Plugin/blob/main/LICENSE-SIT.md">NCSA</a> (<code>Forked from SIT.Client master:9de30d8</code>)</td></tr><tr><td>Open.NAT</td><td><a href="https://github.com/lontivero/Open.NAT/blob/master/LICENSE">MIT</a> (for UPnP implementation)</td></tr><tr><td>LiteNetLib</td><td><a href="https://github.com/RevenantX/LiteNetLib/blob/master/LICENSE.txt">MIT</a> (for P2P UDP implementation)</td></tr><tr><td>Mirror Networking</td><td><a href="https://github.com/MirrorNetworking/Mirror/blob/master/LICENSE">MIT</a> (for Snapshot Interpolation implementation)</td></tr></tbody></table>

### Individual credits

| Name            | Notes                                                                                         |
| --------------- | --------------------------------------------------------------------------------------------- |
| Lacyway         | Creator of Fika and its community; many contributions to the Tarkov modding scene             |
| SSH             | Co-creator of Fika; creator of multiple mods such as visceral dismemberment                   |
| Archangel       | Active developer of Fika and contributor to SPT                                               |
| chomp           | Massive contributions to the SPT project                                                      |
| Nexus           | Many contributions to Fika, helping with complex issues                                       |
| TheSparta       | Many contributions to Fika, rewrote a large portion of the server plugin                      |
| Senko           | Many contributions to Fika; helping whenever possible                                         |
| DeadLeaves      | Many contributions to Fika; creator of multiple mods                                          |
| Ghostfenixx     | Creator of SVM, a widely used mod on SPT; a dedicated individual within the Fika community    |
| RaiRaiTheRaichu | Creator of many widely used mods on SPT; massive dedication to the SPT community              |
| CWX             | Many contributions to Fika, widely known modder and dedicated to the Tarkov modding community |
| Shynd           | Active contributor and resident helper of Fika                                                |


====================================================================================================
DOCUMENT: Ensuring direct connection
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/joining-a-fika-server/connect-using-a-vpn/ensuring-direct-connection.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/joining-a-fika-server/connect-using-a-vpn/ensuring-direct-connection.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Ensuring direct connection
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/joining-a-fika-server/connect-using-a-vpn/ensuring-direct-connection.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Ensuring direct connection

{% stepper %}
{% step %}
### Open Radmin
{% endstep %}

{% step %}
### Open the server host's connection properties

Right-click the server host in Radmin and click `Properties`.

<figure><img src="../../.gitbook/assets/image (5).png" alt="" width="245"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Validate channel type

Validate that the Channel type is `TCP/out` or `UDP/out`. This mean you have a direct connection to this peer.

<figure><img src="../../.gitbook/assets/image (6).png" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
If you see `TCP/relay`, then the communication is relayed through Radmin's servers. The performance will be severely degraded. Try disabling any firewall and/or antivirus in your system and reconnect to the network in Radmin.

You _can_ play with TCP/relay, but expect lag. You have been warned.
{% endhint %}

<p align="center"><a href="../../landing/congratulations.md" class="button primary" data-icon="circle-right">I validated the channel type</a></p>


====================================================================================================
DOCUMENT: Ensuring direct connection
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/testing-connectivity/test-vpn-connectivity/ensuring-direct-connection.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/testing-connectivity/test-vpn-connectivity/ensuring-direct-connection.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Ensuring direct connection
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/testing-connectivity/test-vpn-connectivity/ensuring-direct-connection.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Ensuring direct connection

{% stepper %}
{% step %}
### Open Radmin
{% endstep %}

{% step %}
### Open your friend(s)'s connection properties

Right-click your friend's name in Radmin and click `Properties`.

<figure><img src="../../.gitbook/assets/image (5).png" alt="" width="245"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Validate channel type

Validate that the Channel type is `TCP/out` or `UDP/out`. This mean you have a direct connection to this peer.

<figure><img src="../../.gitbook/assets/image (6).png" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
If you see `TCP/relay`, then the communication is relayed through Radmin's servers. The performance will be severely degraded. Try disabling any firewall and/or antivirus in your system and reconnect to the network in Radmin.

You _can_ play with TCP/relay, but expect lag. You have been warned.
{% endhint %}

<p align="center"><a href="../../landing/congratulations.md" class="button primary" data-icon="circle-right">I validated the channel type</a></p>


====================================================================================================
DOCUMENT: FAQ and Guides
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/README.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/faqandguides/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: FAQ and Guides
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/README.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
icon: comments-question-check
---

# FAQ and Guides

{% hint style="info" %}
## Other Guides and Answers

There are other FAQ and Guides which can be found in the Table of Contents by clicking the <i class="fa-bars">:bars:</i> in the top-left.

If you have a question not covered here, please join us in our [Discord](https://discord.gg/project-fika) server and ask in the #questions channel.
{% endhint %}

### :question:I do not see my friend(s) on the Online Players list on the main menu / I cannot see my friend's raid in the raid list

{% hint style="warning" %}
<mark style="color:$warning;">**Only one person in the group launches SPT.Server.exe.**</mark>
{% endhint %}

* Decide which person is the server host. That person alone runs `SPT.Server.exe` and follows the [Hosting a Fika server](../hosting-a-fika-server/choose-your-hosting-method.md) instructions.
* Everyone else **does not run `SPT.Server.exe`** and instead follows the [Joining a Fika server](/broken/pages/hDVrWxnxHBJnBMcxodVy) instructions.
* Make sure that everyone has Fika [installed](../installing-fika/installation.md). On the main menu, it should say FIKA in the bottom-left of the screen.
* If you are sure you have done all the requisite steps and it is still not working restart the PCs of everyone that is involved.
  * In rare cases a latent SPT.Server.exe may be running in the background for someone who has recently installed Fika and it may be intercepting connections. Restarting fixes this.

***

### :question:There is an error about opening ports when joining a raid

{% hint style="info" %}
**Make sure everyone is following** [**the instructions for hosting/joining a raid**](../installing-fika/hosting-or-joining.md) **correctly.**
{% endhint %}

#### If you are _not_ using a headless client and your group is using Radmin VPN (or any other VPN client)

* Whoever clicks the `HOST RAID` button needs to follow these instructions **exactly as they are written**:
  * Navigate to the Fika.Core plugin settings in your F12 configuration menu and scroll down to the Network header. Select <mark style="color:$warning;">**your own VPN IP**</mark> from the `Force Bind IP` dropdown selection box, then type that <mark style="color:$warning;">**same exact IP**</mark> in the `Force IP` box just above.\
    \
    If you do not see the correct IP available in the `Force Bind IP` selection box, make sure you have the VPN client installed and are connected and then re-read the paragraph above very carefully.\
    \
    If you have enabled Advanced options visibility, both UPnP and NAT Punching should be **disabled.** If you do not see those options, ignore this since they are disabled by default.

#### If you are _not_ using a headless client and your group is port forwarding

* Whoever clicks the `HOST RAID` button needs to ensure that they have port-forwarded 25565/udp in their router to the PC where they are playing SPT. The raid is hosted by the game client of the person who clicks `HOST RAID`, not by the `SPT.Server` backend server.
* Make sure all settings in F12 -> Fika.Core -> Network are **default**:
  * `Force IP` should be blank
  * `Force Bind IP` should be Disabled or `0.0.0.0`
  * Port should match the port for which a port forward rule was created (25565 is default)
  * If you have enabled Advanced options visibility, both UPnP and NAT Punching should be **disabled.** If you do not see those options, ignore this since they are disabled by default.

#### If you are using headless client

* If you are using the headless client to host raids and you are getting this error, you need to make sure the headless client is set up to accept incoming connections the same way any normal client would be.&#x20;
  * **If you are port forwarding**, your port forward rule for 25565/udp needs to go to the PC that is running the headless client. All settings in `BepInEx/config/com.fika.core.cfg -> Network` section should be **default**.
  *   **If you are using a VPN**, you need to open up your `<headless install>/BepInEx/config/com.fika.core.cfg` in a text editor and make sure the VPN IP of the headless client machine is set for both `Force IP` and `Force Bind IP`. The VPN client must also be installed and configured on the headless client PC as well.

      <figure><img src="../.gitbook/assets/image (32).png" alt=""><figcaption></figcaption></figure>

***

### :question:F8 is not successfully extracting me from a raid

This has two common causes: either a mod is causing errors or something is intercepting the F8 key press.

Try pressing F12 to bring up the BepInEx Configuration Manager settings window. If that worked, try finding the Fika.Core setting for extract hotkey and rebinding it to a different key.

If F12 did not work or you were unable to rebind the extract hotkey to a different key (or if it shows it is bound to F13), you likely have something intercepting your F-keys. This is often overlay software like Overwolf or MSI Afterburner or similar, or it could be a joystick / steering wheel / other controller plugged in that is intercepting the F-keys. Try closing all overlay software and unplugging all control peripherals.

If none of the above worked, it is likely a mod that is causing issues. You will have to close your game client via ALT+F4 and then look in your Player.log file found in the folder below:

```
C:\Users\YOURUSERNAME\AppData\LocalLow\Battlestate Games\EscapeFromTarkov\
```

Open Player.log in a text editor and search for `F8 pressed` and see if there are any errors nearby that hint at which mod may be the cause. If you are unsure, come visit us in the [Discord](https://discord.gg/project-fika) #questions channel and explain what you've tried and upload your Player.log for assistance.

***

### :question: I cannot enable quest sharing in F12 -> Fika.Core settings

Review the fika-server mod [configuration options](../fika-configuration/server.md). These changes must be done by the server host.

Open `fika.jsonc` in a text editor and find the option named `sharedQuestProgression` and change it from `false` to `true`, then save your changes and restart the server.

<figure><img src="../.gitbook/assets/image (53).png" alt=""><figcaption></figcaption></figure>

***

### :question:Can I make the launcher not show everyone's profile?

Review the fika-server mod [configuration options](../fika-configuration/server.md). These changes must be done by the server host.

Open `fika.jsonc` in a text editor and find the option named `launcherListAllProfiles` and change it from `true` to `false`, then save your changes and restart the server.

<figure><img src="../.gitbook/assets/image (54).png" alt=""><figcaption></figcaption></figure>

***

### :question:Can I enable SPT chatbots like Commando?

Review the fika-server mod [configuration options](../fika-configuration/server.md). These changes must be done by the server host.

Open `fika.jsonc` in a text editor and find the option named `disableSPTChatBots` and change it from `true` to `false`, then save your changes and restart the server.

<figure><img src="../.gitbook/assets/image (55).png" alt=""><figcaption></figcaption></figure>

***

### :question:I changed `http.json` but my server still says `0.0.0.0`

{% hint style="warning" %}
Please do not watch video guides, they are often out of date.
{% endhint %}

The only place where IPs need to be edited is in [`fika.jsonc`](../fika-configuration/server.md)

* You must run `SPT.Server.exe` at least once with `fika-server` installed for `fika.jsonc` to generate.

Please follow the instructions for <a href="../hosting-a-fika-server/choose-your-hosting-method.md" class="button primary" data-icon="arrow-right-long">Hosting a Fika server</a>

***

### :question:How do I uninstall Fika?

Start `Fika-Installer` and choose `Uninstall Fika`.

Alternatively, you can do it manually using the following steps:

* Navigate to `BepInEx/plugins/Fika/` and delete `Fika.Core.dll`
* Navigate to `SPT/user/mods/` and delete the `fika-server/` folder
* Open SPT.Launcher.exe, click Settings in the top-right, and (if applicable) change URL back to `https://127.0.0.1:6969`<br>


====================================================================================================
DOCUMENT: Fika API
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/fika-api.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/advanced-features/fika-api.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Fika API
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/fika-api.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika / SPT 4.0-era
-->

---
description: All our APIs (last updated for SPT 4.0, Fika 2.0)
---

# Fika API

## Overview

An API key is automatically generated on first launch. You can find it in the `fika.jsonc` file in the configuration folder.

Use the API key to authenticate when making request. You also need to add the `requestcompressed` header with a value of `0`.

<details>

<summary>Authentication example for C#</summary>

```csharp
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", config.APIKey);
client.DefaultRequestHeaders.Add("requestcompressed", "0");
```

</details>

In e.g. Postman, the authentication type is "API Key", with the key being "`Authorization`" and the value being "`Bearer {apiKey}`".

## Get

### fika/api/items

Returns all items from the SPT database, with the MongoID being the identifier, and the name, description and stackable amount being values.\
\
Example response:

{% code fullWidth="false" %}
```json
{
    "items": {
        "5447a9cd4bdc2dbd208b4567": {
            "name": "Colt M4A1 5.56x45 assault rifle",
            "description": "The Colt M4A1 carbine is a fully automatic variant of the basic M4 Carbine and was primarily designed for special operations use.\nHowever, U.S. Special Operations Command (USSOCOM) was soon to adopt the M4A1 for almost all special operations units, followed later by general introduction of the M4A1 into service with the U.S. Army and Marine Corps.",
            "stackable": 10
        }
}
```
{% endcode %}

<details>

<summary>Schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "GetItemsResponse",
  "type": "object",
  "properties": {
    "items": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/$defs/ItemData"
      }
    }
  },
  "required": ["items"],

  "$defs": {
    "ItemData": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "stackable": {
          "type": "integer",
          "description": "Number of items that can stack together (StackAmount)."
        }
      },
      "required": ["name", "description", "stackable"]
    }
  }
}

```

</details>

### fika/api/raids

Returns all active raids.

Example response:

```json
{
  "64f92bdacb123456789abcde": {
    "ips": ["192.168.1.10"],
    "serverGuid": "2fbb7ba6-327e-4c58-8f87-75e43da5a5f5",
    "port": 7070,
    "hostUsername": "PlayerOne",
    "timestamp": 1730840102,
    "crc32": 123456789,
    "gameVersion": "1.0.0",
    "raidConfig": {},
    "locationData": {},
    "status": 1,
    "timeout": 300,
    "players": {
      "64f92bdae8123456789aaaaa": {
        "groupId": "group123",
        "isDead": false,
        "isSpectator": false
      }
    },
    "side": 0,
    "time": 0,
    "raidCode": "ABCD1234",
    "natPunch": true,
    "isHeadless": false,
    "raids": 5
  }
}
```

<details>

<summary>Schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "MatchesResponse",
  "type": "object",
  "description": "Dictionary<string, FikaMatch>",
  "additionalProperties": {
    "$ref": "#/$defs/FikaMatch"
  },

  "$defs": {
    "FikaMatch": {
      "type": "object",
      "properties": {
        "ips": {
          "type": "array",
          "items": { "type": "string" }
        },
        "serverGuid": {
          "type": "string",
          "format": "uuid"
        },
        "port": {
          "type": "integer"
        },
        "hostUsername": {
          "type": "string"
        },
        "timestamp": {
          "type": "integer"
        },
        "crc32": {
          "type": "integer",
          "minimum": 0
        },
        "gameVersion": {
          "type": "string"
        },
        "raidConfig": {
          "description": "Ignored type placeholder.",
          "type": "object"
        },
        "locationData": {
          "description": "Ignored type placeholder.",
          "type": "object"
        },
        "status": {
          "$ref": "#/$defs/EFikaMatchStatus"
        },
        "timeout": {
          "type": "integer"
        },
        "players": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/FikaPlayer"
          }
        },
        "side": {
          "$ref": "#/$defs/EFikaSide"
        },
        "time": {
          "$ref": "#/$defs/EFikaTime"
        },
        "raidCode": {
          "type": "string"
        },
        "natPunch": {
          "type": "boolean"
        },
        "isHeadless": {
          "type": "boolean"
        },
        "raids": {
          "type": "integer"
        }
      },
      "required": [
        "raidConfig",
        "locationData",
        "status",
        "side",
        "time"
      ]
    },

    "FikaPlayer": {
      "type": "object",
      "properties": {
        "groupId": { "type": "string" },
        "isDead": { "type": "boolean" },
        "isSpectator": { "type": "boolean" }
      },
      "required": ["groupId", "isDead", "isSpectator"]
    },

    "EFikaMatchStatus": {
      "type": "integer",
      "enum": [0, 1, 2],
      "description": "0=LOADING, 1=IN_GAME, 2=COMPLETE"
    },

    "EFikaSide": {
      "type": "integer",
      "enum": [0, 1],
      "description": "0=PMC, 1=Savage"
    },

    "EFikaTime": {
      "type": "integer",
      "enum": [0, 1],
      "description": "0=CURR, 1=PAST"
    }
  }
}

```

</details>

### fika/api/headless

Returns all active headless clients.

<details>

<summary>Schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "GetHeadlessResponse",
  "type": "object",
  "properties": {
    "headlessClients": {
      "type": "array",
      "items": { "$ref": "#/$defs/OnlineHeadless" }
    }
  },
  "required": ["headlessClients"],

  "$defs": {
    "OnlineHeadless": {
      "type": "object",
      "properties": {
        "profileId": { "type": "string" },
        "nickname": { "type": "string" },
        "state": { "$ref": "#/$defs/EHeadlessState" },
        "players": { "type": "integer" }
      },
      "required": ["profileId", "nickname", "state", "players"]
    },
    "EHeadlessState": {
      "type": "integer",
      "enum": [0, 1],
      "description": "0 = Ready, 1 = NotReady"
    }
  }
}
```

</details>

### fika/api/heartbeat

Checks whether the server is running. Primarily used by the WebApp.

### fika/api/players

Returns all online players.

<details>

<summary>Schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "GetOnlinePlayersResponse.schema.json",
  "title": "GetOnlinePlayersResponse",
  "type": "object",
  "properties": {
    "players": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/OnlinePlayer"
      }
    }
  },
  "required": ["players"],

  "$defs": {
    "OnlinePlayer": {
      "type": "object",
      "properties": {
        "profileId": {
          "type": "string"
        },
        "nickname": {
          "type": "string"
        },
        "level": {
          "type": "integer"
        },
        "location": {
          "$ref": "#/$defs/EFikaLocation"
        }
      },
      "required": ["profileId", "nickname", "level", "location"]
    },

    "EFikaLocation": {
      "type": "integer",
      "description": "Enumeration representing player location.",
      "enum": [
        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
      ],
      "enumNames": [
        "None",
        "Hideout",
        "Factory",
        "Customs",
        "Woods",
        "Shoreline",
        "Interchange",
        "Reserve",
        "Streets",
        "Lighthouse",
        "GroundZero",
        "Laboratory",
        "Labyrinth"
      ]
    }
  }
}
```

</details>

### fika/api/rawprofile

Returns a raw profile in JSON format.

Input:

<table data-full-width="false"><thead><tr><th>Key</th><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>profileId</td><td>{validMongoID}</td><td>The MongoID to return a raw profile of.</td></tr></tbody></table>

Example input:

`{baseUrl}/fika/api/rawprofile?profileId=68e8f63d941b8a1c94c1d8bf`

## Post

### fika/api/fleaban

Bans a player from the flea for X amount of days. 0 = infinite.

<details>

<summary>Schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Flea Ban Request",
  "description": "Schema for banning a player from the flea market for a specified number of days.",
  "type": "object",
  "properties": {
    "profileId": {
      "type": "string",
      "description": "Unique identifier for the player's profile."
    },
    "amountOfDays": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of days the player is banned. 0 means the ban is infinite."
    }
  },
  "required": ["profileId", "amountOfDays"],
  "additionalProperties": false
}
```



</details>

### fika/api/createheadlessprofile

Creates one headless profile. Used by the installer, not recommended to be used.

### fika/api/logout

Logs out the given MongoID from the game.

<details>

<summary>Schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Logout Request",
  "description": "Schema for logging out a player from the game using their MongoID profile ID.",
  "type": "object",
  "properties": {
    "profileId": {
      "type": "string",
      "description": "The MongoDB ObjectID of the player to log out."
    }
  },
  "required": ["profileId"],
  "additionalProperties": false
}
```



</details>

### fika/api/restartheadless

Restarts the headless with the given MongoID.

<details>

<summary>Schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Restart Headless Request",
  "description": "Schema for restarting the headless instance associated with a given player profile ID.",
  "type": "object",
  "properties": {
    "profileId": {
      "type": "string",
      "description": "The MongoDB ObjectID of the player whose headless instance should be restarted."
    }
  },
  "required": ["profileId"],
  "additionalProperties": false
}
```



</details>

### fika/api/senditem

Sends X amount of items to the given MongoID.

<details>

<summary>Schema</summary>

{% code fullWidth="false" %}
```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Send Item Request",
  "description": "Schema for sending an item to a player with a given MongoID profile ID.",
  "type": "object",
  "properties": {
    "itemTpl": {
      "type": "string",
      "description": "Template ID of the item being sent."
    },
    "amount": {
      "type": "integer",
      "minimum": 1,
      "description": "Number of items to send."
    },
    "message": {
      "type": "string",
      "maxLength": 255,
      "description": "Optional message sent with the item. Can be empty."
    },
    "fir": {
      "type": "boolean",
      "description": "Whether the item is marked as Found In Raid (FIR)."
    },
    "expirationDays": {
      "type": "integer",
      "minimum": 1,
      "description": "Number of days before the message expires."
    },
    "profileId": {
      "type": "string",
      "description": "The MongoDB ObjectID of the player to send the item to."
    }
  },
  "required": [
    "itemTpl",
    "amount",
    "message",
    "fir",
    "expirationDays",
    "profileId"
  ],
  "additionalProperties": false
}
```
{% endcode %}



</details>

### fika/api/senditemtoall

Sends X amount of items to the given MongoIDs.

<details>

<summary>Schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Send Item To Multiple Players Request",
  "description": "Schema for sending items to multiple players using their MongoID profile IDs.",
  "type": "object",
  "properties": {
    "itemTpl": {
      "type": "string",
      "description": "Template ID of the item being sent."
    },
    "amount": {
      "type": "integer",
      "minimum": 1,
      "description": "Number of items to send to each player."
    },
    "message": {
      "type": "string",
      "maxLength": 255,
      "description": "Optional message sent with the item. Can be empty."
    },
    "fir": {
      "type": "boolean",
      "description": "Whether the item is marked as Found In Raid (FIR)."
    },
    "expirationDays": {
      "type": "integer",
      "minimum": 1,
      "description": "Number of days before the message expires."
    },
    "profileIds": {
      "type": "array",
      "description": "List of MongoDB ObjectIDs representing the player profiles to send the items to.",
      "items": {
        "type": "string"
      },
      "minItems": 1
    }
  },
  "required": [
    "itemTpl",
    "amount",
    "message",
    "fir",
    "expirationDays",
    "profileIds"
  ],
  "additionalProperties": false
}
```



</details>

### fika/api/sendmessage

Sends a message to a MongoID.

<details>

<summary>Schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Send Message Request",
  "description": "Schema for sending a message to a player using their MongoID profile ID.",
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "maxLength": 255,
      "description": "Message to send to the player. Can be empty."
    },
    "profileId": {
      "type": "string",
      "description": "The MongoDB ObjectID of the player to send the message to."
    }
  },
  "required": ["message", "profileId"],
  "additionalProperties": false
}
```



</details>


====================================================================================================
DOCUMENT: Fika configuration
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/fika-configuration/README.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/fika-configuration/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Fika configuration
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/fika-configuration/README.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Getting started with configuring Fika.
icon: gears
---

# Fika configuration

Fika has two type of configuration: client configuration and server configuration.

The [client.md](client.md "mention") configuration allows you to configure your in game experience while playing in a Fika server.

The [server.md](server.md "mention") configuration allows you to configure certain parameters when hosting a Fika server.


====================================================================================================
DOCUMENT: Fika NAT punch server
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/nat-punching/fika-nat-punch-server.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/advanced-features/nat-punching/fika-nat-punch-server.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Fika NAT punch server
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/nat-punching/fika-nat-punch-server.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: >-
  Step-by-step process for hosting a Fika server using Fika's public NAT punch
  server
---

# Fika NAT punch server

{% hint style="danger" %}
**DISCLAIMER**

The Fika NAT punch server is a public service offered by the Fika team, free of charge. Availability is not guaranteed.

By using this service, you agree that your public IP address will be shared with the Fika NAT punch server. This is absolutely necessary for NAT punching to work. We do NOT collect and share your IP address with any third party. If you don't like that, consider using the [self-hosted NAT punch server](self-hosted-nat-punch-server.md) instead.
{% endhint %}

## Requirements

* Both the raid host and any players connecting via NAT punching must use a router that supports Full-Cone NAT, as this type is required for proper connectivity. You can check your router’s NAT type by searching online for your specific router model.

## Limitations

The NAT punch server only facilitate connection when joining a raid. It does not allow to join the SPT server itself.

{% hint style="warning" %}
NAT Punching does NOT work on all routers. It depends on the NAT type of your router. If you or a player cannot connect then you can assume that your router or the player's router is incompatible and you should consider an alternative option such as [Hosting using a VPN](../../hosting-a-fika-server/host-using-a-vpn.md).
{% endhint %}

## How to enable the public Fika NAT Punch server

Only the raid host needs to follow the steps below.

{% stepper %}
{% step %}
### Press F12 when in main menu
{% endstep %}

{% step %}
### Enable advanced settings

Check the "Advanced settings" box.

<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Enable NAT Punching

Check both "Use NAT Punching" and "Use Fika NAT Punch Server".

<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Close the configuration panel
{% endstep %}

{% step %}
### Host a raid and wait for players to join

The Fika NAT punch server will take care of the rest.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Players connecting to your server do NOT need to enable these settings! These settings are only for the raid host.
{% endhint %}


====================================================================================================
DOCUMENT: FikaInstallerInSptFolder
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/.gitbook/includes/fikainstallerinsptfolder.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/.gitbook/includes/fikainstallerinsptfolder.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: FikaInstallerInSptFolder
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/.gitbook/includes/fikainstallerinsptfolder.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
title: FikaInstallerInSptFolder
---

<figure><img src="../assets/image (7) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>


====================================================================================================
DOCUMENT: General information
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/General-information.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/General-information.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: General information
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/General-information.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Learn about the features, specifications and limitations of Fika.
icon: circle-info
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# General information

## What is Fika?

Fika is a cooperative multiplayer mod for [SPT](https://sp-tarkov.com/). Fika adds a lobby interface to join other players' raids and provide in-game networking capabilities, along with additional features that do not alter the standard Escape From Tarkov experience by default.

In summary:

* SPT is the back-end server that allows you to start the game without using BSG servers — it provides the player profile, inventory, flea market, and many other Escape From Tarkov features.
* Fika is the mod component that adds cooperative multiplayer capabilities which allow players to host or join a raid to play together.

## Specifications

* Fika is a combination of a [BepInEx plugin](https://github.com/project-fika/Fika-Plugin) and a [SPT server mod](https://github.com/project-fika/Fika-Server).
* Fika uses SPT as the back-end server to connect players together.
* Fika uses the `Client <-> Server <-> Client` UDP networking model for game play. The network performance of Fika is better than Escape From Tarkov live (provided the host has proper networking capabilities). It uses less bandwidth, is faster and _much_ more accurate.

{% hint style="warning" %}
Keep in mind that the statements above are only true if you have a decent connection _by modern standards_. Fika will not run perfectly if you're playing with someone across the world on a **4G** connection, however it is playable.

If you're having issues even on a stable connection, the most common problem is a faulty mod.
{% endhint %}

## Main features

* Host your own server or join a local/external server.
* Create your own raid for other players to join (or play solo).
* Join someone else's raid.
* Play together against bots, share items, progress quests together in the same raid.
* Preserve character, quest, inventory, and hideout progression.
* Use client/server mods from [SPT](https://forge.sp-tarkov.com/) (some mods are not compatible - see [Limitations](General-information.md#limitations)).

## Other features

* Item Sending
  * Right-click an item in your stash to send it to another account
  * Can be customized in the [server](fika-configuration/server.md) config
* Free cam (default to `F9` key)
  * Can be enabled in the [server](fika-configuration/server.md) config
  * In free cam you can teleport to the cam position by pressing `T`
  * You can jump to another player by `Left/Right` clicking
  * You can snap to their head by holding `SPACE` when jumping
  * You can snap to their back in a 3rd position view by holding `CTRL` when jumping
  * You can press the `HOME` key to temporarily toggle free cam controls
* In-game chat system
* In-raid VOIP
* Online player list
* Culling system to increase performance
* Custom notifications (teammate died, boss got killed by a player, etc.)
* Pinging system to ping an area in the game for your teammates
* Player health bars for your teammates
* Quest progress sharing in raids
* Optional/Advanced Headless client to offload AI and gain performance (more info [here](advanced-features/headless-client/remote-headless-client.md))
* Network interpolation for smoother gameplay
* UPnP and NAT Punching

## Limitations

* You cannot play Fika without owning a legitimate copy of Escape From Tarkov. You will be banned if you attempt to do so.
* There is no protection against abuse or cheating. Fika is designed to be played with trusted friends. **Hosting a public server is strongly discouraged**. We will NEVER support public servers.
* Fika does not include any PvP mechanisms. Supporting PvP is not the goal of this project.
* Fika does not offer a global matchmaking service. Only players connected to the same server can create or join raids.
* Certain SPT mods are incompatible with Fika. SPT mods are typically designed for a standard SPT installation, which does not include multiplayer functionality. It is the responsibility of the mod's author to make their mod compatible with Fika, if they choose to do so.


====================================================================================================
DOCUMENT: Guidance on which mods should be used on the headless client
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/headless-client-faq-and-common-issues/guidance-on-which-mods-should-be-used-on-the-headless-client.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/faqandguides/headless-client-faq-and-common-issues/guidance-on-which-mods-should-be-used-on-the-headless-client.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Guidance on which mods should be used on the headless client
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/headless-client-faq-and-common-issues/guidance-on-which-mods-should-be-used-on-the-headless-client.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Created by Shynd
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: true
---

# Guidance on which mods should be used on the headless client

## Note: The headless client is a _client_ — clients only load things in `BepInEx/`. Any mod that is in `SPT/user/mods/` is loaded only by the backend server, SPT.Server.exe.

To expand a bit on what I mean about the difference between a plugin I assume the headless client **needs** vs a plugin I assume the headless client does not need:

* <mark style="color:$warning;">Does it only have an effect while in stash or hideout? If yes, then it's probably</mark> <mark style="color:$warning;"></mark>_<mark style="color:$warning;">not</mark>_ <mark style="color:$warning;"></mark><mark style="color:$warning;">necessary for the headless client.</mark>
  * This would be something like QuickSell. It is not necessary to have on the headless client because it only affects in-stash behavior.
  * Plugins in this category may be fine to leave installed on the headless client and they may cause issues. They are unlikely to _solve_ any issues.
* <mark style="color:$warning;">Does it only change how information or graphics are displayed, without changing that information? If yes, then it's probably</mark> <mark style="color:$warning;"></mark>_<mark style="color:$warning;">not</mark>_ <mark style="color:$warning;"></mark><mark style="color:$warning;">necessary for the headless client.</mark>
  * This would include things like MoreCheckmarks, AmandsGraphics, DynamicMaps, ItemSellPrice, et al. These plugins take existing information that is available already in the game client and display it in a different way. They do not add or change any behavior.
  * Plugins in this category also may be fine to leave installed on the headless client, and they also may cause issues. They are unlikely to _solve_ any issues.
  * Remember that the headless client is navigating menus automatically to start a raid and finish a raid. Anything that changes menus or patches menus may cause problems.
* <mark style="color:$warning;">Does it change in-raid behavior in some way? If yes, it's probably necessary.</mark>
  * This would be something like SAIN, which affects AI behavior, or bot spawn mods, or UIFixes which changes _how inventory behaves_, or anything else that you think _**might**_ have an effect on in-raid behavior.
  * Plugins in this category are sometimes difficult to spot. Something like UIFixes may not be obvious that it _changes_ inventory behavior, and it may not be apparent to users that the raid host is authoritative on inventory actions.
  * Some plugins that seem to fall in to this category are simply displaying other ways to trigger vanilla behavior and thus do not need to be on the headless client, but often do not hurt to have installed anyway. Things like ItemContextMenuExtended, for instance, make it so that you can right-click a flashlight to toggle it on/off, but they do not _change_ that behavior, only make it accessible in a new way, and thus are not _required_ to be on the headless client.

There are some plugins, like SearchOpenContainers, that are difficult to discern where they need to be or if they'd cause issues. One might reasonably assume that searching a container that is open is changing behavior so it needs to be installed for the headless client; one might also reasonably assume that searching an open container is entirely client-side and since the headless client character will never be searching containers it is not necessary. Plugins that feel ambiguous should be tested to make sure they do not cause issues one way or another.&#x20;

At the end of the day, there is often no _benefit_ to having plugins that do not improve the experience for the headless client to be installed on the headless client, but often there's also no issues. Sometimes more plugins does cause more processing overhead and thus lower in-raid FPS. If that doesn't matter to you, install everything and only remove plugins that cause problems! If that does matter, be selective and test for yourself.&#x20;

I personally use the above logic as a starting point for testing. I remove any plugins that I'm very sure are not necessary and leave in any plugins that I am not sure about, and then I run raids and specifically test plugin behaviors. I look through logs for errors. If everything is working, I move on. Thus far, this has served me well.

Here is an illustration of the modding setup of headless client vs Fika instance:

**Headless client**

<figure><img src="../../.gitbook/assets/image (22) (1).png" alt=""><figcaption></figcaption></figure>

**Fika instance**

<figure><img src="../../.gitbook/assets/image (23) (1).png" alt=""><figcaption></figcaption></figure>


====================================================================================================
DOCUMENT: Hardware requirements
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/installing-fika/hardware-requirements.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/installing-fika/hardware-requirements.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Hardware requirements
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/installing-fika/hardware-requirements.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: true
---

# Hardware requirements

**Your computer must at least have the following specifications for Fika to run properly.**

<table><thead><tr><th width="142">Hardware</th><th width="233">Model</th><th>Notes</th></tr></thead><tbody><tr><td>CPU</td><td>i7 8700k / Ryzen 5 3600X</td><td>The AMD X3D chips performs the best.</td></tr><tr><td>GPU</td><td>GTX 2070 / RX 5700 XT</td><td></td></tr><tr><td>Memory</td><td>32GB</td><td>16GB <em>may</em> work but performance and stability will be affected.</td></tr><tr><td>Storage</td><td>SSD</td><td>HDD is <strong>NOT</strong> supported.</td></tr><tr><td>Storage space</td><td>50GB</td><td>We recommend having more than 50GB for virtual paging.</td></tr></tbody></table>

<p align="center"><a href="installation.md" class="button primary" data-icon="circle-right">I have the necessary hardware requirements</a></p>


====================================================================================================
DOCUMENT: Headless Client
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/headless-client/README.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/advanced-features/headless-client/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Headless Client
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/headless-client/README.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: >-
  General information about the Fika headless client feature for creating a
  dedicated raid host instance of SPT.
---

# Headless Client

The headless client plugin is an exclusive Fika feature that allows you to host a raid on a separate Escape From Tarkov instance. You are able to offload the AI calculation and other resource-intensive task to improve game play performance. When hosting the raid on a **separate PC** from where you play, FPS gains are usually around 25% to 50% depending on your computer specifications and amount of bots in the game.

{% hint style="warning" %}
Please note that there is some technical knowledge required to achieve this. If you absolutely have no experience, you will have a hard time.
{% endhint %}

### Specifications

* The headless client is basically another SPT+Fika client instance that will automatically host raids. All players becomes clients (including the player who clicked `HOST RAID`).
* Graphic rendering is disabled to make the headless client as lightweight as possible. However, the headless client is **NOT** a true headless server. It still requires all the game files and a pretty hefty amount of RAM to work (especially for bigger maps such as Streets or Lighthouse).
* It is **strongly** recommended to run the headless client on a separate physical machine. The headless client will NOT work on a VPS. If you really wish to use a paid host, rent a dedicated server.
* A graphic card is NOT required to run the headless client, however it may be helpful for configuring mods.

{% hint style="danger" %}
Using a headless client can create a situation where certain mods either cannot work entirely or become more complicated to properly configure. It is therefore much easier to set up a headless client **before adding any mods** to reduce issues.

If you run into problems during the headless client setup process, consider starting over with a completely fresh SPT+Fika install without any other mods first.
{% endhint %}

More information, guides, and common fixes can be found in the [Headless Client FAQ and Common Issues](../../faqandguides/headless-client-faq-and-common-issues/) section.

### Choose Headless Client Implementation

{% tabs %}
{% tab title="Headless Client on a Separate PC" %}
{% hint style="success" %}
This is the intended use case for the Headless Client feature and provides the largest and most consistent performance increase.
{% endhint %}

Both SPT.Server and a Headless Client will run on a separate PC independent of your gaming PC. This means you can utilize your gaming PC in any way you wish, including restarting it, without affecting any other players.

<h4 align="center"><a href="remote-headless-client.md" class="button primary" data-icon="network-wired">Remote Headless Client Instructions</a></h4>
{% endtab %}

{% tab title="Local Headless / Headless on Same PC" %}
{% hint style="danger" %}
**This is not the intended use case for the Headless Client feature! Please read the warnings at the top of the next page. Support is limited.**
{% endhint %}

If your PC can handle running two EFT clients at the same time, you _may_ see a reduction in stuttering or an increase in performance by running a headless client on the same PC where you are playing SPT. Any performance increase is entirely dependent on your hardware and not guaranteed.

#### <mark style="color:$warning;">Some users see performance degradation. Continue at your own risk.</mark>

<h4 align="center"><a href="local-headless-client.md" class="button primary" data-icon="computer">Local Headless Client Instructions</a></h4>
{% endtab %}
{% endtabs %}


====================================================================================================
DOCUMENT: Headless Client FAQ and Common Issues
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/headless-client-faq-and-common-issues/README.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/faqandguides/headless-client-faq-and-common-issues/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Headless Client FAQ and Common Issues
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/headless-client-faq-and-common-issues/README.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: true
  pagination:
    visible: false
  metadata:
    visible: true
---

# Headless Client FAQ and Common Issues

### :question:FikaHeadlessManager displays an error on start

* **Error**: <mark style="color:red;">**Could not reach SPT.Server at \<URL> Please ensure SPT.Server is running and accessible.**</mark>
  * FikaHeadlessManager is unable to verify the server is running.\
    \
    Check that SPT.Server is running and accessible using your SPT.Launcher; verify that you can connect and launch your game like normal.\
    \
    In the root folder of your headless install, find `HeadlessConfig.json` and open it in a text editor. Verify that the URL is correct and is pointing to where the headless client can access SPT.Server.
* **Error:&#x20;**<mark style="color:red;">**Could not access \<URL> Ensure Fika Server mod is installed. Please review the installation process in the documentation.**</mark>
  * FikaHeadlessManager is unable to verify that Fika is fully installed on the server to which it is connecting.\
    \
    Ensure you have followed all the steps for [Installing Fika](../../installing-fika/installation.md) in the folder where you are running SPT.Server.

***

### :question:We cannot connect to a headless client hosted raid or we are getting an error about ensuring ports are open

The headless client needs to be able to accept incoming connections on the raid port configured in `<Headless Folder>/BepInEx/config/com.fika.core.cfg` -> `Network` -> `Port` (default 25565/udp).

If you are port forwarding, the port needs to be forwarded to the PC where the headless client is running. If you are using a VPN, the PC where the headless client is running must be connected to the same VPN and both `Force IP` and `Force Bind IP` must be configured in `com.fika.core.cfg`.

See [this FAQ entry](../#if-you-are-using-headless-client) for more information.

***

### :question:How do I change the name of the headless client that is displayed when hosting a raid?

1. Open [fika.jsonc](../../fika-configuration/server.md) in a text editor.
2. Find the `headless` -> `profiles` -> `aliases` section.
3.  Add one line per headless client in the format `"ID": "Alias"`

    1. The `ID` is the profile ID of the headless character profile for which you wish to change the name.
    2. You can find the profile ID by opening `HeadlessConfig.json` in a text editor.
    3. If you are adding multiple profiles, each line needs to end in a comma `,` except the last line.

    <div align="left" data-full-width="false"><figure><img src="../../.gitbook/assets/image (18).png" alt=""><figcaption></figcaption></figure></div>
4. Save changes to `fika.jsonc` and close the text editor.
5. Restart SPT.Server.

***

### :question:Does performance of the headless client matter?

Yes, to a point. Performance of the headless client matters insofar as the headless client must stay **above 30 FPS** during all raid scenarios.

To test for this, connect to a headless client hosted raid and, once you have spawned in, open the in-game console on your game client (default key is `~`), enter command `debug t`, and then press Enter.

This will open a debug window that shows the amount of bots spawned, your ping/RTT, and also the 'Server FPS' which is the FPS of the headless client. Play through the raid, get into fights, throw grenades, etc, and keep an eye on the Server FPS value. As long as it stays in the 30s or above, you should not experience any issues.

If it is dipping into the 20s or teens, you will likely experience issues with AI acting strange and physics objects (such as grenades) teleporting or moving in slow-motion. Reduce the number of bots spawned or the number of mods in use to bring performance back up above the important 30 FPS threshold.

If performance dips below 30 FPS even with no other mods, your PC is likely not strong enough to host a headless client. If you see the FPS value stuck at 59, that is expected behavior and is not indicative of a problem.

<figure><img src="../../.gitbook/assets/image (49).png" alt=""><figcaption></figcaption></figure>

***

### :question:I get an error about "A patch in SPT.CustomPlugin FAILED"

The error `A patch in SPTCustomPlugin FAILED. The type initializer for 'SPT.Custom.Patches.CustomAiPatch'...` should mostly be avoided with latest versions of FikaHeadlessManager. Make sure you have the latest version by re-running Fika-Installer in your headless client install folder and choosing `Advanced` -> `Update Fika Headless`.

If you are still getting this error even with the latest FikaHeadlessManager, likely something is blocking your headless client `EscapeFromTarkov.exe` specifically from connecting to the server, such as a VPN or firewall.

<figure><img src="../../.gitbook/assets/image (52).png" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
#### Ensure SPT.Server is running and able to accept connections

Test connectivity using SPT.Launcher: make sure you can launch the game and reach your stash and access traders.

If your SPT.Launcher is not able to connect to your server, figure out why and address that issue first. If the server is currently running but SPT.Launcher cannot connect, revisit the [Hosting a Fika server](../../hosting-a-fika-server/choose-your-hosting-method.md) instructions.

**NOTE**: the headless client **does not replace SPT.Server**. The backend server is required to be running at all times.
{% endhint %}

If you have already generated `HeadlessConfig.json` and it is in the root directory of your headless install, open it in a text editor and change the URL to match how you connect to your server. This may include a VPN IP or the public IP of the server. Save the changes to the file and restart `FikaHeadlessManager.exe`

If you have not generated `HeadlessConfig.json` or the headless profile yet, revisit the [steps for installing the Headless client](../../advanced-features/headless-client/remote-headless-client.md) and pay close attention to the [step about editing `fika.jsonc`](../../advanced-features/headless-client/remote-headless-client.md#optional-set-url-in-fika.jsonc)


====================================================================================================
DOCUMENT: Home
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/README.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Home
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/README.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Welcome to Project Fika Wiki!
icon: house-window
---

# Home

<div data-full-width="false" data-with-frame="true"><figure><img src=".gitbook/assets/1080p_launchertest2.png" alt="" width="563"><figcaption></figcaption></figure></div>

## Welcome

**Project Fika** is an <mark style="color:$warning;">SPT mod</mark> that enables co-op multiplayer gameplay with your friends in _Escape from Tarkov_. You can progress through quests, share items, and fight AI-controlled bots (PMCs, Scavs, and bosses) together, and much more.

{% hint style="warning" %}
Do **NOT** contact SPT for any questions related to Fika. Please join our [Discord](https://discord.gg/project-fika) server where you can find support for both SPT and Fika.
{% endhint %}

## Looking to install Fika?

<h2 align="center"><a href="/broken/pages/BdX6p5Z68SoS6Ij02PX2" class="button primary">GET STARTED</a></h2>

## Quick links

<p align="center"><a href="General-information.md" class="button primary" data-icon="circle-info">How does Fika work?</a> <a href="faqandguides/" class="button primary" data-icon="comments-question-check">FAQ and Guides</a> <a href="fika-configuration/" class="button primary" data-icon="gears">Configure Fika</a> </p>

<p align="center"><a href="advanced-features/headless-client/" class="button primary" data-icon="desktop-arrow-down">Set up headless client</a> <a href="advanced-features/nat-punching/" class="button primary" data-icon="webhook">Connect using NAT Punching</a> <a href="advanced-features/web-app.md" class="button primary" data-icon="webhook">Fika Web App</a></p>

<p align="center"> <a href="contribute-to-fika.md" class="button primary" data-icon="code">Contribute to Fika</a> <a href="https://discord.gg/project-fika" class="button primary" data-icon="discord">Join our Discord</a></p>

## License

![cc by-nc-sa](https://mirrors.creativecommons.org/presskit/buttons/88x31/png/by-nc-sa.png)

This project is licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.en).

* You may only share/create derivatives of Fika as long as proper credits are given and it is not used for commercial purposes.
* You may not monetize your server in terms of payments or donations.
* You may not host massive public servers, Fika is meant for COOP with your friends.
* You may not use Fika's **art assets** that are handcrafted by our developers and artists without permission from the creator.


====================================================================================================
DOCUMENT: Host or join a raid
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/playing-fika/host-or-join-a-raid.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/playing-fika/host-or-join-a-raid.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Host or join a raid
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/playing-fika/host-or-join-a-raid.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Host or join a raid

<p align="center">Choose if you want to host or join a raid.</p>

<p align="center"><a href="hosting-a-raid.md" class="button primary" data-icon="circle-right">Host a raid</a><a href="joining-a-raid.md" class="button primary" data-icon="circle-right">Join a raid</a></p>


====================================================================================================
DOCUMENT: Host over LAN
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/hosting-a-fika-server/host-over-lan.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/hosting-a-fika-server/host-over-lan.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Host over LAN
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/hosting-a-fika-server/host-over-lan.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Host over LAN

{% stepper %}
{% step %}
### Open command prompt

Press `Windows key`, type `cmd` and press `ENTER`.
{% endstep %}

{% step %}
### Get your local IP address

Type `ipconfig` in command prompt and press `ENTER`.

Find the adapter section that you are using. Generally, `Ethernet adapter` for cable connection and `Wireless LAN adapter` for Wi-Fi.

Save the IP address next to `IPv4 Address`. <mark style="color:$warning;">You will need to share it with your friend(s)</mark>.

<figure><img src="../.gitbook/assets/image (59).png" alt="" width="443"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Server`
{% endstep %}

{% step %}
### Start `SPT.Launcher`
{% endstep %}

{% step %}
### Login to your profile
{% endstep %}

{% step %}
### Start game
{% endstep %}
{% endstepper %}

<p align="center"><a href="../playing-fika/hosting-a-raid.md" class="button primary" data-icon="right-to-bracket">I followed all the steps</a></p>


====================================================================================================
DOCUMENT: Host using a VPN
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/hosting-a-fika-server/host-using-a-vpn.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/hosting-a-fika-server/host-using-a-vpn.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Host using a VPN
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/hosting-a-fika-server/host-using-a-vpn.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Step-by-step process for hosting a Fika server using a VPN client.
---

# Host using a VPN

{% hint style="warning" %}
**WARNING**

Free VPNs services are known to cause performance or connectivity problems, so <mark style="color:$warning;">use at your own risk</mark>.&#x20;

The officially supported way of playing Fika is with port forwarding. We will not provide support for issues caused by VPN services.

Custom firewalls such as **BitDefender** may also block your connection while playing. Make sure that you allow the connection or temporarily disable it while playing!

You may also experience issues if you are using another VPN service, even if it is disabled. If you have problems, consider uninstalling any other virtual network adapters.
{% endhint %}

{% stepper %}
{% step %}
### Download Radmin

Navigate to the [Radmin website](https://www.radmin-vpn.com/) and download the Radmin VPN client.
{% endstep %}

{% step %}
### Install Radmin

Run the installer and proceed with the installation steps.
{% endstep %}

{% step %}
### Reboot your computer

This is important to ensure that the virtual network adapter is correctly installed. **Do not skip this step!**
{% endstep %}

{% step %}
### Create a network in Radmin

Open Radmin VPN client (from the taskbar or from the start menu) an Click `Create network`.

<figure><img src="../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>

Enter a network name and a password. Make sure to note the network name and password, you will need to share it with your friends.

<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>


{% endstep %}

{% step %}
### Add Radmin to Windows firewall exclusions

Go to `System` -> `Firewall Exceptions` and click  `Allow All Apps`.

<figure><img src="../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Server` to generate the config file

Wait for `SPT Server` to be fully loaded.

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2FlZfa6hVfcUTBztlqMtZ7_2Fhttps___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzs.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Close `SPT.Server`
{% endstep %}

{% step %}
### Open Fika config in editor

Navigate to `<SPT install>\SPT\user\mods\fika-server\assets\configs`.

Open `fika.jsonc` with your preferred text editor (Notepad++ is recommended).


{% endstep %}

{% step %}
### Edit IP and port in Fika config

Find the `server` section. As you make the next two edits, refer to the picture below.

* Change the value of the `ip` field from the default `0.0.0.0` to `your_vpn_ip`. Make sure to write it inside the quotes.
* Change the value of the `backendIp` field from the default  `0.0.0.0` to `your_vpn_ip`. Make sure to write it inside the quotes.

Save and close.

<figure><img src="../.gitbook/assets/image (16).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Server`

Wait for `SPT Server` to be fully loaded.

<figure><img src="../.gitbook/assets/image (58).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Launcher`

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2F89xf4fwAOWUZlYNbpj1u_2Fimage (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Edit the SPT Launcher settings

Click the `Settings` button.

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2FqwHM3gxlwjEsrugHTtc0_2Fimage.avif" alt="" width="563"><figcaption></figcaption></figure>

Check the `Developer mode` box.

Enter your VPN address in the URL section. This should be the same URL reported by the server.

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2FRJRDafOFXrz8sQBMXNfo_2Fimage.avif" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="warning" %}
DO NOT leave out `https://` and do not add a slash or space at the end. The URL box should look like this: `https://20.21.22.23:6969`.
{% endhint %}
{% endstep %}

{% step %}
### Login to your profile
{% endstep %}

{% step %}
### Start the game

Press the arrow on the right corner. You should now be able to create your profile and log in to the server. Start the game.

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2FVhkOgEbLlzyx9kazRxLl_2Fimage.avif" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Configure Fika to use VPN IP

Press `F12` when in-game to bring up the configuration manager.

Find the `Force IP` and `Force Bind IP` in the `Fika.Core` section of the configuration manager.

Set both `Force IP` and `Force Bind IP` to `your vpn ip`.

<figure><img src="../.gitbook/assets/forceip.png" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Note: Players willing to host a raid will also need to set the `Force IP` and `Force Bind IP` in their respective Fika configuration.
{% endhint %}

<p align="center"><a href="../testing-connectivity/test-vpn-connectivity/" class="button primary" data-icon="circle-right">I followed all the steps</a></p>


====================================================================================================
DOCUMENT: Host using port forwarding
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/hosting-a-fika-server/host-using-port-forwarding.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/hosting-a-fika-server/host-using-port-forwarding.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Host using port forwarding
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/hosting-a-fika-server/host-using-port-forwarding.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika / SPT 4.0-era
-->

---
description: Step-by-step process for hosting a Fika server using port forwarding.
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Host using port forwarding

{% hint style="warning" %}
**WARNING**

Not all Internet Service Providers (ISP) allows port forwarding. If you find yourself unable to port forward, you can use a public VPN service such as Radmin, ZeroTier, etc.). Click [here](host-using-a-vpn.md) to learn how to host using a VPN.
{% endhint %}

{% hint style="info" %}
We do not provide a step-by-step tutorial for port forwarding because the router settings interface varies between different models and manufacturers. You may be able to find guides for your router on [PortForward.com](https://portforward.com/) or by searching Google.
{% endhint %}

{% stepper %}
{% step %}
### Access your router configuration

Your router configuration can be accessed by typing the [gateway IP](https://www.whatismyip.com/finding-your-default-gateway-address/) in your browser.
{% endstep %}

{% step %}
### Access the port forward menu

The port forward menu can have different names; usually "port forwarding" or "virtual server".
{% endstep %}

{% step %}
### Add port forward rules

Add the following port forward rules and make sure they are associated with your computer:

* 6969 TCP (SPT backend server).
* 25565 UDP (Fika in-game networking).
{% endstep %}

{% step %}
### Start `SPT.Server`

If everything is working properly, you should see something similar in the console output:

<pre><code>ModLoader: loading: 1 server mods...
<strong>Mod: server version: 2.2.0 (targets SPT: >=4.0.11) by: Fika loaded
</strong>Loading OnWebAppBuildMods...
[Fika Server] Overriding SPT configuration
Finished loading OnWebAppBuildMods...
Loaded self-signed certificate (./user/certs/server.crt)
Server: executing startup callbacks...
┌─────────────────────────────────────────┐
│ SPT 4.0.11                              │
│ https://discord.sp-tarkov.com           │
│                                         │
│ This work is free of charge             │
│ If you paid money, you were scammed     │
│ Commercial use is prohibited            │
└─────────────────────────────────────────┘
Loading PreSptMods...
Finished loading PreSptMods...
Importing database...
Database import finished
Generating flea offers...
<strong>Started webserver at https://0.0.0.0:6969
</strong><strong>Started websocket at wss://0.0.0.0:6969
</strong><strong>Server has started, happy playing
</strong></code></pre>

{% hint style="warning" %}
If you see errors (red text) then your configuration is invalid or you are unable to host using the configured IP address/port. Please double-check your settings.
{% endhint %}
{% endstep %}

{% step %}
### Start `SPT.Launcher`


{% endstep %}

{% step %}
### Login to your profile


{% endstep %}

{% step %}
### Start game


{% endstep %}
{% endstepper %}

<p align="center"><a href="../testing-connectivity/test-port-forward-connectivity.md" class="button primary" data-icon="circle-right">I followed all the steps</a></p>


====================================================================================================
DOCUMENT: Hosting a raid
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/playing-fika/hosting-a-raid.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/playing-fika/hosting-a-raid.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Hosting a raid
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/playing-fika/hosting-a-raid.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Hosting a raid

{% hint style="info" %}
If you are hosting a raid but not the server host, you may need to do additional setup to accept incoming connections. See [this FAQ entry](../faqandguides/#there-is-an-error-about-opening-ports-when-joining-a-raid) for more information.
{% endhint %}

{% stepper %}
{% step %}
### Click `Escape From Tarkov` in the main menu
{% endstep %}

{% step %}
### Choose `PMC` or `SCAV`
{% endstep %}

{% step %}
### Choose a raid location and time phase
{% endstep %}

{% step %}
### Click `Next` in Practice Game Mode screen
{% endstep %}

{% step %}
### Click `Next` in Insurance screen
{% endstep %}

{% step %}
### Click `Host Raid` in Lobby screen
{% endstep %}

{% step %}
### Press `Start`
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Once your raid is loaded, you'll see `Waiting for host to start the raid`. Your friends can now see your raid in the lobby screen and join it.

When all players joined, you can start the raid by pressing `Start Raid` at the bottom.
{% endhint %}


====================================================================================================
DOCUMENT: Hosting or joining
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/installing-fika/hosting-or-joining.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/installing-fika/hosting-or-joining.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Hosting or joining
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/installing-fika/hosting-or-joining.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Hosting or joining

<p align="center">Please choose below if you are planning to host the Fika server or join a Fika server.</p>

<p align="center"><a href="/broken/pages/os68Ocqriv7Ss7LzdjRI" class="button primary" data-icon="circle-right">I am hosting the Fika server</a> <a href="/broken/pages/hDVrWxnxHBJnBMcxodVy" class="button primary" data-icon="circle-right">I am joining a Fika server</a></p>


====================================================================================================
DOCUMENT: Installation steps
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/installing-fika/installation.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/installing-fika/installation.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Installation steps
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/installing-fika/installation.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Installation steps

{% stepper %}
{% step %}
### Download [Fika-Installer](https://github.com/project-fika/Fika-Installer/releases/latest)
{% endstep %}

{% step %}
### Copy `Fika-Installer.exe` to the root of your SPT install folder

Do not copy inside `SPT` folder!

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2F5yu7c0P4PT4gSQwcgOw5_2Fimage.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `Fika-Installer.exe`

If you get an admin rights prompt, this is normal. Fika-Installer requires admin rights to set up the firewall rules.
{% endstep %}

{% step %}
### Choose `Install Fika`

<figure><img src="../.gitbook/assets/image (21).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Close `Fika-Installer` when installation is completed

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2FD9VHauheMEVLMpsMRod5_2Fimage.avif" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Server`

<figure><img src="../.gitbook/assets/https___files.gitbook.com_v0_b_gitbook-x-prod.appspot.com_o_spaces_2FKIBpsnthxy8OSpsWzsDI_2Fuploads_2FLRc3xTCQ6XWf6cP3JDMG_2Fimage.png" alt=""><figcaption></figcaption></figure>

You should see `Mod: server version: x.x.x (targets SPT: 4.x.x) by: Fika loaded`.

<figure><img src="../.gitbook/assets/image (23).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Launcher`

<figure><img src="../.gitbook/assets/image (24).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Create or login to your account then start the game

<figure><img src="../.gitbook/assets/image (25).png" alt=""><figcaption></figcaption></figure>

<figure><img src="../.gitbook/assets/image (26).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Validate that Fika successfully loaded

`FIKA x.x.x | SPT x.x.x` should appear at the bottom left corner of the main menu. You should also see the `Online players` widget on the right side of the main menu.

<figure><img src="../.gitbook/assets/image (27).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Exit the game
{% endstep %}
{% endstepper %}

<p align="center"><a href="hosting-or-joining.md" class="button primary" data-icon="circle-right">Continue</a></p>


====================================================================================================
DOCUMENT: Joining a raid
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/playing-fika/joining-a-raid.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/playing-fika/joining-a-raid.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Joining a raid
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/playing-fika/joining-a-raid.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Joining a raid

{% stepper %}
{% step %}
### Click `Escape From Tarkov` in the main menu
{% endstep %}

{% step %}
### Choose `PMC` or `SCAV`
{% endstep %}

{% step %}
### Choose a raid location and time phase
{% endstep %}

{% step %}
### Click `Next` in Practice Game Mode screen
{% endstep %}

{% step %}
### Click `Next` in Insurance screen
{% endstep %}

{% step %}
### Find your friend's raid in the lobby list and click `Join`
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Once your raid is loaded, you'll see "Waiting for host to start the raid." The raid will start when the host presses on `Start Raid`.
{% endhint %}

{% hint style="warning" %}
If you do not see a raid list, revisit [Installing Fika](../installing-fika/installation.md).

If you do not see your friend's raid in the raid list even though they claim to have hosted one, [see this FAQ entry](../faqandguides/#i-do-not-see-my-friend-s-on-the-online-players-list-on-the-main-menu-i-cannot-see-my-friends-raid-in).

If you or your friend is getting an error about verifying ports are open, [see this FAQ entry](../faqandguides/#my-friend-is-getting-an-error-about-open-ports-when-trying-to-join-my-raid).
{% endhint %}


====================================================================================================
DOCUMENT: Local Headless Client
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/headless-client/local-headless-client.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/advanced-features/headless-client/local-headless-client.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Local Headless Client
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/headless-client/local-headless-client.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: >-
  Instructions for setting up a headless client to host your raids from the same
  PC where you play SPT. Support is limited.
hidden: true
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: true
---

# Local Headless Client

{% hint style="info" %}
Please make sure you have read everything on the general [Headless Client page](./) first.
{% endhint %}

{% hint style="danger" %}
## SUPPORT IS LIMITED

Please note that **support is limited** if you choose to run the headless client on the same PC where you are playing SPT. This is not the officially supported configuration and may lead to:

* Performance degradation
* Increased incidence of crashes
* Significant increase in page file usage
* General instability that may adversely affect the entire PC or operating system

If you are experiencing any issues related to performance or instability, **stop using the headless client** on the same PC where you are playing.

Please do not ask for support if you are experiencing performance-related issues.
{% endhint %}

***

## Recommended Hardware Requirements

* You **must** have at least 64 GB of RAM.
  * Anything less **may work** in limited circumstances but is likely to cause issues.
* A CPU that holds a high boost clock (4Ghz+) while all cores are loaded.
* 100GB free space on a very fast SSD, preferably NVMe.

***

## Notes

* Windows virtual paging settings **must be default** with ample free space on your `C:\` drive.
  * If you have changed Windows virtual memory options, please return all settings to their default configuration. The `Automatically manage paging file size for all drives` checkbox should be checked.
* The installation process below assumes that you have followed the [Installing Fika](../../installing-fika/installation.md) process exactly. Deviating from that process at all may lead to issues.
* If you have previously installed mods, especially client plugins, <mark style="color:$warning;">please remove them</mark> before proceeding. This process assumes that the only mod installed is Fika.
  * Proceeding with this guide while mods are installed is _possible_, but you are likely to run into issues. If you have any issues during this process at all, start over but this time remove all mods first.
* Character progress and server settings will largely be unaffected.
  * The only change to your existing server settings will be a small change in [fika.jsonc](../../fika-configuration/server.md) to generate the necessary headless profile.

<details>

<summary>How could this possibly increase performance?</summary>

It is understandably difficult to see how running two SPT clients on the same PC could increase performance. Why would running the game twice on the same hardware be any better than only running the game once?

The reasons all boil down to how the base game client processes in-raid actions.

Basically, any action taken by an AI/bot has to be calculated on the same CPU core/thread before the CPU pushes data to your video card to render the next frame. There is very limited multi-threading, thus the game client that hosts all of the AI calculations has more to do and each frame is rendered more slowly.

By offloading the AI calculations onto a separate game client via the Fika headless client plugin, you are freeing up your game client's main logic thread to do less work before rendering each frame. This is effectively multi-threading the raid behavior, with your game client taking care of all of the rendering of graphics and the 2nd headless game client taking care of the bulk of the in-raid calculations.

<sub>All of the above is simplified for illustrative purposes only.</sub>

</details>

***

## Installation

{% stepper %}
{% step %}
### OPTIONAL: [Create a Fresh SPT+Fika Install](../../installing-fika/installation.md)

{% hint style="info" %}
If you do not have **any** mods for **client or server** in your main SPT+Fika install, you can skip this step.
{% endhint %}

You can follow the steps below with your existing SPT+Fika install, but you may run into issues, especially if you already have mods installed. Creating a fresh SPT+Fika install makes it much easier to undo if you find that this will not work on your PC and it also leaves your existing install completely untouched.

Follow the entire [Installing Fika](../../installing-fika/installation.md) section from start to finish, including creating a character and getting to your stash.

Once you have confirmed that everything is working with a fresh install, you can migrate mods and profiles from your existing install to your new install.

<mark style="color:$warning;">Skip this step at your own risk.</mark>
{% endstep %}

{% step %}
### OPTIONAL: Set URL in [fika.jsonc](../../fika-configuration/server.md)

{% hint style="info" %}
This step is not necessary if you are using this only for yourself or if you are port forwarding.
{% endhint %}

If you are using a VPN like Radmin or ZeroTier, you will need to:

1. Navigate to `[Existing SPT Install]\SPT\user\mods\fika-server\assets\configs\`
   1. If `fika.jsonc` does not exist, run SPT.Server.exe from your existing SPT install once and then close it.
2. Open `fika.jsonc` in a text editor.
3. Scroll down to the `scripts -> forceIp` setting and change it to the URL that you set up while following [the hosting instructions](../../hosting-a-fika-server/choose-your-hosting-method.md).
4. Save the file and close the text editor.

<div align="left"><figure><img src="../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
### Create the Headless Client SPT install folder

Create a new empty folder somewhere on your PC where you want the headless client install to be. Copy and paste `Fika-Installer.exe` from your original SPT install into this new empty folder.

<div align="center"><figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
### Use `Fika-Installer` to create a headless SPT install copy

Run `Fika-Installer.exe` and choose `Advanced Options` and then `Install Fika Headless`

<figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Select existing SPT+Fika install folder

Press `ENTER` and then select your existing SPT+Fika install folder.

<figure><img src="../../.gitbook/assets/image (4) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Create the headless profile

Select `Create a new headless profile`

<figure><img src="../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Choose installation method

Choose either `HardCopy` or `Symlink` based on your preference.

* `HardCopy` will create a 1:1 copy of the existing SPT+Fika installation, which will take up the full 50+ GB of storage space. This is the method that will entirely avoid issues or confusion.
* `Symlink` will hard copy parts of the existing install to the new headless client folder, but will create a symbolic link of the bulk of the EFT data files. This saves a significant amount of storage but could possibly create issues if you were to delete the original files or need to reinstall SPT in the future.

#### If you have no preference, choose `Symlink` to save on storage space.

<figure><img src="../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Verify completion

<kbd>Fika-Installer</kbd> should create the necessary headless profile, copy the files to the new headless client install folder, and then install the latest version of Fika. If this step does not complete successfully, start over from the beginning.

Once done, you may now close `Fika-Installer`.

<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Server` from existing SPT+Fika folder

Open a new File Explorer window and navigate to your existing SPT+Fika folder and launch `SPT.Server`

<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Wait for `Server has started, happy playing` message in console

<figure><img src="../../.gitbook/assets/image (10) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Launcher` and your game client

From the same existing SPT+Fika install folder, run `SPT.Launcher`.

<figure><img src="../../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>

Create a character if necessary and click the `Start Game` button.

<figure><img src="../../.gitbook/assets/image (13) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Verify your game client loads and Fika is installed

<figure><img src="../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start the `Fika Headless Manager`

From your headless client install folder, run `FikaHeadlessManager.exe`. The `Fika Headless Manager` will start your headless client.

<figure><img src="../../.gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Wait for the headless client to load

Two console windows will appear after running the script: the `Fika Headless Manager` and the headless client console. **Do not close them**. Wait for the headless client to load. Activity will stop in the console when loading is completed.

<figure><img src="../../.gitbook/assets/image (16) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Host a raid using the headless client

Navigate the in-game menu like you would normally do to reach the `Raids` menu and click `Host Raid`.

<figure><img src="../../.gitbook/assets/image (17) (1).png" alt=""><figcaption></figcaption></figure>

Check the `Use Headless Host` box and press `Start`. This will request the headless client to start a raid in the selected location. Wait for the headless client to load the raid.

<figure><img src="../../.gitbook/assets/image (18) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start the raid when the headless client is ready

Your friend(s) can join the headless client's raid when you see this screen. When everybody has joined, press `Start Raid`.

<figure><img src="../../.gitbook/assets/image (19).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Done!
{% endstep %}
{% endstepper %}

***

## Modding

The headless client is very sensitive to modding. Do **NOT** install the same mods you use in Fika. Because the headless client is heavily modified, most mods will likely cause crashes or make it unstable.

**✅ YOU CAN INSTALL:**

* AI mods (SAIN)
* Spawn mods (MOAR, DONUTS)
* Mods that specifically mention headless client support (That's Lit, UIFixes, etc.)
* Any mod that reasonably changes in-raid behavior, like entering custom quest zones or having to do with inventory (VCQL, Pack'n'Strap, etc.)

**❌ DO NOT INSTALL:**

* RAM/VRAM cleaner mods (RAM Cleaner, VRAM Cleaner, etc.)
* Performance mods (DeClutter, etc.)
* Any other mods not listed in the **YOU CAN INSTALL** section

***

## Troubleshooting

* If you are crashing or getting errors when joining a headless hosted raid, make sure that Fika is up-to-date for everyone. Verify that you have the latest version of [Fika-Installer](https://github.com/project-fika/Fika-Installer/releases/latest) and use it both in your normal SPT+Fika folder as well as the headless folder to `Update Fika` and `Advanced` -> `Update Fika Headless`.
* If the `Use Headless Host` checkbox is greyed out, it means that the headless client is unavailable. It could be caused by unsupported mods installed in the headless client, networking issues, or other factors. Note that the headless client can only host one raid at a time. Check `BepInEx/LogOutput.log` for errors, especially warnings about incompatible mods.
* If your headless client is failing to load, launch it in Graphics mode by pressing `G` during the startup of `Fika Headless Manager` if possible. If launching in Graphics mode is not possible, look in the `<timestamp> errors.log` in the SPT log folder for hints. Often this is caused by having a malfunctioning or invalid plugin, and sometimes also from missing a plugin that is required by one of the mods on the server.
* See other common issues in [FAQ and Guides](../../faqandguides/) and [Headless Client FAQ and Common Issues](../../faqandguides/headless-client-faq-and-common-issues/)


====================================================================================================
DOCUMENT: NAT Punching
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/nat-punching/README.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/advanced-features/nat-punching/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: NAT Punching
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/nat-punching/README.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Learn more about NAT Punching with Fika.
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: true
  pagination:
    visible: false
  metadata:
    visible: true
---

# NAT Punching

## What is NAT punching?

NAT punching is a [NAT traversal technique](https://en.wikipedia.org/wiki/NAT_traversal) that allows two devices located behind separate routers to establish a direct peer-to-peer connection. It is particularly useful in cases where port forwarding is not possible due to ISP or network restrictions.

However, NAT punching is not supported on all routers. For instance, **symmetric NAT** routers often prevent successful NAT punching due to the way they handle external port mappings.

## How does it work?

A public server listens for incoming connections from clients and records their external IP addresses and ports. It then introduces each client by sharing the other’s external IP address. For example, `Client 1` receives `Client 2`’s external IP address, and vice versa.

This is when NAT punching occurs: upon receiving `Client 2`’s IP address, `Client 1` begins sending multiple packets (the “punching”) to `Client 2`. At the same time, `Client 2` sends packets to `Client 1`, creating a routing entry in both clients’ routers.

At this point, both routers allow communication through this specific route, which can then be leveraged to host a `Fika` raid.

## Choosing the NAT Punching method

See below for the different methods for NAT Punching.

{% tabs %}
{% tab title="Fika NAT punch server" %}
Fika offers a public NAT punch server to facilitate connection between players and the raid host. You can use the Fika NAT punch server simply by toggling it on inside Fika's configuration menu.

**Pros**

* Easy to use, no set up required

**Cons**

* The public IP address of the raid host and players will be shared with the Fika NAT punch server. We do not collect and share your IP address with any third party.
* Relies on the Fika NAT punch server to be available. Availability is not guaranteed.

<a href="fika-nat-punch-server.md" class="button primary" data-icon="up-right-from-square">Use Fika NAT punch server</a>
{% endtab %}

{% tab title="Self-hosted NAT punch server" %}
Fika provides a built-in NAT punch server that will run inside SPT server. It is provided by the Fika-Server plugin.

**Pros**

* Ownership of the NAT punch server
* Privacy (don't share IP address with an external server you do not own)

**Cons**

* Requires configuration and set up
* Requires a VPS or a self-hosted server accessible externally

<a href="self-hosted-nat-punch-server.md" class="button primary" data-icon="up-right-from-square">Use self-hosted NAT punch server</a>
{% endtab %}
{% endtabs %}



====================================================================================================
DOCUMENT: Remote Headless Client
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/headless-client/remote-headless-client.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/advanced-features/headless-client/remote-headless-client.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Remote Headless Client
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/headless-client/remote-headless-client.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: >-
  Instructions for setting up a headless client to host your raids from a
  separate computer for maximum performance gains. This is the officially
  supported headless client configuration.
hidden: true
---

# Remote Headless Client

{% hint style="info" %}
Please make sure you have read everything on the general [Headless Client page](./) first.
{% endhint %}

## Recommended Hardware Requirements

* A dedicated machine for running the headless client.
  * Most virtual private servers (VPS) will **not** work because they do not provide the performance needed for the headless client.
* A modern CPU with at least 4 cores @ 4GHz+.
* 32 GB RAM (16 GB RAM _may_ work but will provide reduced performance due to virtual paging).
* Initially around 120 GB available disk space on an SSD/NVME drive. **HDD is NOT supported.**
  * After the installation is complete and everything is tested working you will be able to delete a portion of the retail game install data to save some space.

## Notes

* The installation process below will guide you through the steps to set up the SPT server and headless client on the same machine. It is possible to separate the SPT server and the headless client, but there is no performance benefit, and the steps are more involved. Therefore, this setup will not be covered in this guide.
* Linux is NOT supported and covered by this article. Visit the dedicated Linux channel in our [Discord](https://discord.gg/project-fika) for assistance.

***

## Installation

{% stepper %}
{% step %}
### Install Escape From Tarkov using BSG Launcher

Escape From Tarkov must be installed on the machine/server where you are planning to run the headless client. This is required to ensure that you own the game.&#x20;

**Fika will NOT work if you skip this step!**
{% endstep %}

{% step %}
### Install [SPT](https://hub.sp-tarkov.com/files/file/672-spt-installer/)

If your SPT server is currently located on a different machine, please copy it to the computer where you are planning to install the headless client. It must contain the full game. If you are unable to copy it due to the size, install SPT on the server using the [SPT Installer](https://hub.sp-tarkov.com/files/file/672-spt-installer/) instead.

**Do NOT install SPT in your official Escape From Tarkov folder!**
{% endstep %}

{% step %}
### Download [Fika-Installer](https://github.com/project-fika/Fika-Installer/releases/latest)
{% endstep %}

{% step %}
### Copy `Fika-Installer.exe` to the root of your SPT install folder

Do not copy inside `SPT` folder!

<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Run `Fika-Installer.exe`

If you get an admin rights prompt, this is normal. `Fika-Installer` requires admin rights to set up the firewall rules.
{% endstep %}

{% step %}
### Choose `Install Fika`

<figure><img src="../../.gitbook/assets/image (20) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Confirm installation completion

<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### OPTIONAL: Set URL in [fika.jsonc](../../fika-configuration/server.md)

{% hint style="info" %}
This step is not necessary if you are port forwarding, assuming SPT.Server and this headless client are on the same PC.
{% endhint %}

If you are using a VPN like Radmin or ZeroTier, you will need to:

1. Navigate to `[SPT root folder]\SPT\user\mods\fika-server\assets\configs\`
   1. If `fika.jsonc` does not exist, run `SPT.Server.exe` from your headless install once and then close it.
2. Open `fika.jsonc` in a text editor.
3. Scroll down to the `scripts -> forceIp` setting and change it to the URL that you set up while following [the hosting instructions](../../hosting-a-fika-server/choose-your-hosting-method.md).
4. Save the file and close the text editor.

<div align="left"><figure><img src="../../.gitbook/assets/image (31).png" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
### Choose `Advanced options`

<figure><img src="../../.gitbook/assets/image (5) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Choose `Install Fika Headless`

<figure><img src="../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Choose `Create a new headless profile`

<figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Close `Fika-Installer` when installation is completed

<figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Server.exe`

<figure><img src="../../.gitbook/assets/image (10) (1) (1).png" alt=""><figcaption></figcaption></figure>


{% endstep %}

{% step %}
### Wait for `Server has started, happy playing` message in console

<figure><img src="../../.gitbook/assets/image (12) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start the headless client using `Fika Headless Manager`

The `Fika Headless Manager` will start your headless client.

<figure><img src="../../.gitbook/assets/image (11) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Wait for the headless client to load

Two console windows will appear after running the script: the `Fika Headless Manager` and the headless client console. **Do not close them**. Wait for the headless client to load. Activity will stop in the console when loading is completed.

<figure><img src="../../.gitbook/assets/image (14) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Launcher` and your game client

The headless client is now ready to host a raid. Start Fika (`SPT.Launcher`) on your computer.&#x20;

**Do NOT start SPT.Launcher.exe on the headless client server!**

<figure><img src="../../.gitbook/assets/image (15) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Host a raid using the headless client

Navigate the in-game menu like you would normally do to reach the `Raids` menu and click `Host Raid`.

<figure><img src="../../.gitbook/assets/image (16) (1) (1).png" alt=""><figcaption></figcaption></figure>

Check the `Use Headless Host` box and press `Start`. This will request the headless client to start a raid in the selected location. Wait for the headless client to load the raid.

<figure><img src="../../.gitbook/assets/image (17) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start the raid when the headless client is ready

Your friend(s) can join the headless client's raid when you see this screen. When everybody has joined, press `Start Raid`.

<figure><img src="../../.gitbook/assets/image (18) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Done!
{% endstep %}
{% endstepper %}

***

## Modding

The headless client is very sensitive to modding. Do **NOT** install the same mods you use in Fika. Because the headless client is heavily modified, most mods will likely cause crashes or make it unstable.

**✅ YOU CAN INSTALL:**

* AI mods (SAIN)
* Spawn mods (MOAR, DONUTS)
* Mods that specifically mention headless client support (That's Lit, UIFixes, etc.)
* Any mod that reasonably changes in-raid behavior, like entering custom quest zones or having to do with inventory (VCQL, Pack'n'Strap, etc.)

**❌ DO NOT INSTALL:**

* RAM/VRAM cleaner mods (RAM Cleaner, VRAM Cleaner, etc.)
* Performance mods (DeClutter, etc.)
* Any other mods not listed in the **YOU CAN INSTALL** section

***

## Troubleshooting

* If you are crashing or getting errors when joining a headless hosted raid, make sure that Fika is up-to-date for everyone. Verify that you have the latest version of [Fika-Installer](https://github.com/project-fika/Fika-Installer/releases/latest) and use it both in your normal SPT+Fika folder as well as the headless folder to `Update Fika` and `Advanced` -> `Update Fika Headless`.
* If the `Use Headless Host` checkbox is greyed out, it means that the headless client is unavailable. It could be caused by unsupported mods installed in the headless client, networking issues, or other factors. Note that the headless client can only host one raid at a time. Check `BepInEx/LogOutput.log` for errors, especially warnings about incompatible mods.
* If your headless client is failing to load, launch it in Graphics mode by pressing `G` during the startup of `Fika Headless Manager` if possible. If launching in Graphics mode is not possible, look in the `<timestamp> errors.log` in the SPT log folder for hints. Often this is caused by having a malfunctioning or invalid plugin, and sometimes also from missing a plugin that is required by one of the mods on the server.
* See other common issues in [FAQ and Guides](../../faqandguides/) and [Headless Client FAQ and Common Issues](../../faqandguides/headless-client-faq-and-common-issues/)


====================================================================================================
DOCUMENT: Self-hosted NAT punch server
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/nat-punching/self-hosted-nat-punch-server.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/advanced-features/nat-punching/self-hosted-nat-punch-server.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Self-hosted NAT punch server
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/nat-punching/self-hosted-nat-punch-server.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: Step-by-step process for setting up a dedicated SPT server with NAT punching.
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: true
  pagination:
    visible: false
  metadata:
    visible: true
---

# Self-hosted NAT punch server

## Requirements

* The SPT server must be hosted on an externally accessible machine, such as a VPS.
* Both the raid host and any players connecting via NAT punching must use a router that supports Full-Cone NAT, as this type is required for proper connectivity. You can check your router’s NAT type by searching online for your specific router model.

## Limitations

The NAT punch server only facilitate connection when joining a raid. It does not allow to join the SPT server itself.

## Notes

This guide covers the installation process for Windows only. Linux is not covered in this article but the principle is the same. Check out our dedicated Linux channel in our Discord for more information.

## Installation

{% stepper %}
{% step %}
### Set up a public Windows-based server

A publicly accessible server is required for NAT punching. It is recommended to rent an affordable Windows-based VPS to host the `SPT Server`; providers listed on [**LowEndBox**](https://lowendbox.com/) are a good starting point for low-cost options.

If you are uncertain whether NAT punching will work with your network configuration, you can provision a temporary VPS using [**Kamatera**](https://www.kamatera.com/), which offers hourly billing — making it a cost-effective solution for testing.
{% endstep %}

{% step %}
### Download the latest `SPT` standalone release

Obtain the latest standalone `SPT` release [here](https://github.com/sp-tarkov/build/releases/). The download link will be in the release notes.
{% endstep %}

{% step %}
### Extract the `SPT` archive in a new empty `SPT` folder

<figure><img src="../../.gitbook/assets/image (33).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Download the latest `Fika-Server` standalone release

Obtain the latest `Fika-Server` standalone release [here](https://github.com/project-fika/Fika-Server-CSharp/releases).
{% endstep %}

{% step %}
### Extract the Fika-Server archive in the root of your `SPT` installation folder

<figure><img src="../../.gitbook/assets/image (34).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start `SPT.Server.exe` to generate the Fika Server configuration file

`SPT.Server.exe` is located inside the `SPT` sub folder of your `SPT` installation folder.

<figure><img src="../../.gitbook/assets/image (35).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Wait for `SPT` server to be fully loaded then close it

Close `SPT` server when you see `Server has started, happy playing`.

<figure><img src="../../.gitbook/assets/image (36).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Enable NAT Punching in Fika Server

This setting controls if the `Nat Punch Server` should run on your SPT server.

* Navigate to `SPT\user\mods\fika-server\assets\configs`.
* Open `fika.jsonc` with your preferred text editor software (`Notepad++` is recommended).
* Find the `natPunchServer` section and set `enable` to `true`.

<figure><img src="../../.gitbook/assets/image (37).png" alt=""><figcaption></figcaption></figure>

* Save and exit the text editor.
{% endstep %}

{% step %}
### Start `SPT.Server.exe`

Validate that the `Nat Punch Server` successfully loaded.

<figure><img src="../../.gitbook/assets/image (38).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Validate your network configuration

Make sure that the following ports are port forwarded and opened in your server firewall:

* 6969 TCP (SPT Server)
* 6790 UDP (Nat Punch Server)
{% endstep %}

{% step %}
### Start `SPT.Launcher` on your computer

We assume you already have a working Fika installation or you know how to set up one. If you don't, click [here](../../installing-fika/installation.md) for Fika installation steps.
{% endstep %}

{% step %}
### Configure your server IP in `SPT Launcher`

`SPT Launcher` needs to connect to the `SPT` server on your VPS/public server. Other players will also need to do the following steps.

* Click the `Settings` button at the top right corner.

<figure><img src="../../.gitbook/assets/image (39).png" alt=""><figcaption></figcaption></figure>

* Check the `Developer Mode` box then enter your server IP address in the URL box. Do not remove `https://`, do not add a slash at the end.&#x20;
* Press the arrow key at the top right corner to save your settings.

<figure><img src="../../.gitbook/assets/image (40).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start the game

Press `Start Game` to launch the game.

<figure><img src="../../.gitbook/assets/image (42).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Enable NAT Punching in Fika (raid host only)

This setting indicates that any player connecting to your raid must use NAT punching. It is a client-side setting, meaning it only applies to **you**, the raid host. Other players do **not** need to enable this setting unless they intend to host a raid without port forwarding.

* Press F12 to bring up the configuration manager.
* Check the `Advanced settings` box.
* Check the `Nat Punching` box to enable NAT punching.

<figure><img src="../../.gitbook/assets/image (41).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Host a raid and wait for other players to connect

Navigate the menus and host a raid. You should see that your server was added to the Nat Punch server list in the `SPT Server` console.&#x20;

<figure><img src="../../.gitbook/assets/image (43).png" alt=""><figcaption></figcaption></figure>

The `Nat Punch Server` will introduce the external IP address of your computer to players joining your raid.

<figure><img src="../../.gitbook/assets/image (44).png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Start the raid when all players are connected

Start the raid when all players are connected and ready to go.
{% endstep %}
{% endstepper %}

## Headless client

To enable NAT punching for the `headless client`:

* Make sure you followed all the steps above.
* Navigate to `BepInEx\config` of your `headless client`.
* Open `com.fika.core.cfg` with your preferred text editor.
* Search for the parameter `Use NAT Punching` and set to `true`.
* Save and close the text editor.

<figure><img src="../../.gitbook/assets/image (47).png" alt=""><figcaption></figcaption></figure>


====================================================================================================
DOCUMENT: Server
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/fika-configuration/server.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/fika-configuration/server.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Server
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/fika-configuration/server.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: A default server configuration file with a description for each setting.
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: true
  pagination:
    visible: false
  metadata:
    visible: true
  tags:
    visible: true
  actions:
    visible: true
---

# Server

The server configuration can be found in the `SPT\user\mods\fika-server\assets\configs` folder. Open up `fika.jsonc` with a text editor. You need to launch the server at least once for this file to be generated.

{% hint style="info" %}
Be sure to save changes and restart the server when you're done to ensure your changes take effect!
{% endhint %}

{% code fullWidth="true" %}
```json5
{
    "client": {
        "useBtr": true, // if the BTR should spawn
        "friendlyFire": true, // if friendly fire is enabled
        "dynamicVExfils": false, // if vehicle exfils should dynamically scale with the amount of players
        "allowFreeCam": false, // if players can use the free cam while still alive
        "allowSpectateFreeCam": false, // whether players are forced to spectate other players or if they can move freely
        "blacklistedItems": [], // items that cannot be sent
        "forceSaveOnDeath": false, // if a player's inventory is force saved when they die, mitigating ALT+F4 cheating
        "mods": {
            "required": [], // required mods by the client
            "optional": [] // optional mods allowed to connect with
        },
        "useInertia": true, // if inertia should be enabled, if disabled it will act as if you are not wearing anything
        "sharedQuestProgression": false, // if quest progression should be shared, affects shared XP options as well
        "canEditRaidSettings": true, // of clients can modify the raid settings before starting a raid
        "enableTransits": true, // if transits are enabled
        "anyoneCanStartRaid": false, // if anyone can click "START RAID"
        "allowNamePlates": true, // if player nameplates are allowed to be enabled by clients
        "randomLabyrinthSpawns": true, // if all players should have random spawns in Labyrinth
        "pmcFoundInRaid": true, // if all AI PMC gear should be found in raid
        "allowSpectateBots": true, // if players should be allowed to spectate bots in free cam
        "instantLoad": false, // if magazines should refill instantly in raid
        "fastLoad": true // if enabled magazines refill 5 bullets each tick rather than 5 in raid (disabled if instantLoad is enabled),
        "reviveConfig": {
          "enabled": false, // if the revive system should be enabled
          "headshotKills": false, // if headshots always kills
          "grenadesKills": false, // if grenades always kills
          "allowLooting": false, // if you can loot downed players
          "maxRevives": 3, // max revives per player, 0 = infinite, otherwise max 10
          "bleedoutTime": 30, // time to bleed out while downed, min 10 seconds, max 600
          "reviveTime": 3 // time it takes to revive a player, min 3 seconds, max 30
        }
    },
    "server": {
        "SPT": {
            "http": {
                "ip": "0.0.0.0", // the interface to listen on
                "port": 6969, // the port to host on
                "backendIp": "0.0.0.0", // the ip that is sent to clients to be used for requests
                "backendPort": 6969 // the port that is sent to clients to be used for requests
            },
            "disableSPTChatBots": false // forces chat bots to be off
        },
        "webhook": {
            "enabled": false,
            "name": "Fika Server",
            "avatarUrl": "https://github.com/project-fika/Fika-Server-CSharp/blob/main/FikaWebApp/wwwroot/images/FIKA_LOGO.png?raw=true",
            "url": ""
        },
        "allowItemSending": true, // allows players to send items to each other
        "itemSendingStorageTime": 7, // how long before sent item mail expires
        "sentItemsLoseFIR": true, // if sent items lose their FIR status
        "launcherListAllProfiles": true, // if all accounts are listed in the launcher
        "sessionTimeout": 5, // how long in minutes it takes for a raid to be considered "lost" when not responding
        "showDevProfile": true, // if dev profiles are enabled
        "showNonStandardProfile": true, // if non-standard EFT profiles are enabled
        "adminIds": [], // list of profile ids allowed to interact with Mr Fika admin bot commands
        "apiKey": "" // apiKey for interacting with Fika API
    },
    "natPunchServer": {
        "enable": false, // if the nat punching module is enabled
        "port": 6790 // the port to use
    },
    "headless": {
        "profiles": {
            "amount": 0, // the amount of profiles to be generated / used
            "aliases": {
                "68eac997dc053e6fwhatever" : "NameOfHeadless" // headless profile uid : name you want to appear on raid host screen
            } // the aliases to be show when selecting a headless client
        },
        "scripts": {
            "generate": true, // if the headless scripts should be generated
            "forceIp": "https://127.0.0.1:6969" // the URL the headless connects to
        },
        "setLevelToAverageOfLobby": true, // use average level of all players when spawning bots on headless
        "restartAfterAmountOfRaids": 1 // if the headless should restart after X raids, 0 to disable
    },
    "background": {
        "enable": true, // enables custom launcher background
    }
}
```
{% endcode %}


====================================================================================================
DOCUMENT: Set up required/optional mods
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/set-up-required-optional-mods.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/faqandguides/set-up-required-optional-mods.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Set up required/optional mods
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/faqandguides/set-up-required-optional-mods.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: true
---

# Set up required/optional mods

Setting up the required/optional mods section in `fika.jsonc` can be frustrating. What do I put there? How do I find mod GUIDs? What's the difference between required and optional. Let's attempt to demystify this powerful feature and make it more widely used. First, let's start with a simple Powershell script that will snag all the plugin GUIDs that you currently have loaded.&#x20;

Before executing this script, make sure you have **all the plugins you want the names of** installed and launch your SPT client. This will refresh your Player.log with currently installed plugin information, which we will pull with the script below. Copy and paste the script below directly into a Powershell command window and execute it. It'll print out a string of mod GUIDs properly formatted for pasting directly into `fika.jsonc`.

```powershell
$LocalLow = [System.Environment]::GetFolderPath("LocalApplicationData").Replace("Local", "LocalLow")
$LogFile = Join-Path $LocalLow "\Battlestate Games\EscapeFromTarkov\Player.log"

$ModGuids = @()

Get-Content $LogFile | ForEach-Object {
    if ($_ -match '^\[Info\s+:FikaModHandler\].*?GUID \[([^\]]+)\]') {
        $ModGuids += '"' + $matches[1] + '"'
    }
}

$CSVOutput = $ModGuids -join ', '

Write-Host $CSVOutput
```

<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>

Copy and paste the output into `fika.jsonc` -> `"mods": { "required": [ <HERE> ]` if you want everyone who joins the server to be required to have the same plugins that you have loaded. You can move some of the GUIDs down to the `"optional": [ ]` section if you don't want to enforce certain plugins but still have them allowed. Anyone who has a plugin loaded that is not in either of these lists or missing a plugin in the required list will get an error message with a large `EXIT` button:

> Your client doesn't meet server requirements, check logs for more details

This way you can keep friends from installing mods that may give an unfair advantage or at least make sure that everyone has the same mods, which avoids issues.



====================================================================================================
DOCUMENT: Table of contents
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/SUMMARY.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/SUMMARY.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Table of contents
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/SUMMARY.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

# Table of contents

* [Home](README.md)
* [General information](General-information.md)
* [Installing Fika](/broken/pages/BdX6p5Z68SoS6Ij02PX2)
* [Playing Fika](/broken/pages/wIfv7TrYQa2rJMHLl2oK)
* [Fika configuration](fika-configuration/README.md)
  * [Client](fika-configuration/client.md)
  * [Server](fika-configuration/server.md)
* [Advanced features](advanced-features/README.md)
  * [Headless Client](advanced-features/headless-client/README.md)
    * [Remote Headless Client](advanced-features/headless-client/remote-headless-client.md)
    * [Local Headless Client](advanced-features/headless-client/local-headless-client.md)
  * [NAT Punching](advanced-features/nat-punching/README.md)
    * [Fika NAT punch server](advanced-features/nat-punching/fika-nat-punch-server.md)
    * [Self-hosted NAT punch server](advanced-features/nat-punching/self-hosted-nat-punch-server.md)
  * [Web App](advanced-features/web-app.md)
  * [Fika API](advanced-features/fika-api.md)
* [Creating Fika-Compatible Mods](Modding-Fika.md)
* [FAQ and Guides](faqandguides/README.md)
  * [Headless Client FAQ and Common Issues](faqandguides/headless-client-faq-and-common-issues/README.md)
    * [Configure mods for the headless client](faqandguides/headless-client-faq-and-common-issues/configure-mods-for-the-headless-client.md)
    * [Guidance on which mods should be used on the headless client](faqandguides/headless-client-faq-and-common-issues/guidance-on-which-mods-should-be-used-on-the-headless-client.md)
  * [Set up required/optional mods](faqandguides/set-up-required-optional-mods.md)
  * [ADVANCED: How Fika Establishes Raid Connections](faqandguides/advanced-how-fika-establishes-raid-connections.md)
* [Contribute to Fika](contribute-to-fika.md)
* [Credits](Credits.md)

## Installing Fika

* [Before installing Fika](installing-fika/before-installing-fika.md)
* [Hardware requirements](installing-fika/hardware-requirements.md)
* [Installation steps](installing-fika/installation.md)
* [Hosting or joining](installing-fika/hosting-or-joining.md)

## Hosting a Fika server

* [Choose your hosting method](hosting-a-fika-server/choose-your-hosting-method.md)
* [Host using port forwarding](hosting-a-fika-server/host-using-port-forwarding.md)
* [Host using a VPN](hosting-a-fika-server/host-using-a-vpn.md)
* [Host over LAN](hosting-a-fika-server/host-over-lan.md)

## Testing connectivity

* [Test port forward connectivity](testing-connectivity/test-port-forward-connectivity.md)
* [Test VPN connectivity](testing-connectivity/test-vpn-connectivity/README.md)
  * [Ensuring direct connection](testing-connectivity/test-vpn-connectivity/ensuring-direct-connection.md)

## Joining a Fika server

* [Choose your connection method](joining-a-fika-server/choose-your-connection-method.md)
* [Connect using direct connection](joining-a-fika-server/join-using-direct-connection.md)
* [Connect using a VPN](joining-a-fika-server/connect-using-a-vpn/README.md)
  * [Ensuring direct connection](joining-a-fika-server/connect-using-a-vpn/ensuring-direct-connection.md)
* [Connect locally](joining-a-fika-server/connect-locally.md)

## Playing Fika

* [Host or join a raid](playing-fika/host-or-join-a-raid.md)
* [Hosting a raid](playing-fika/hosting-a-raid.md)
* [Joining a raid](playing-fika/joining-a-raid.md)

## landing

* [Congratulations](landing/congratulations.md)


====================================================================================================
DOCUMENT: Test port forward connectivity
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/testing-connectivity/test-port-forward-connectivity.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/testing-connectivity/test-port-forward-connectivity.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Test port forward connectivity
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/testing-connectivity/test-port-forward-connectivity.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: false
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Test port forward connectivity

{% stepper %}
{% step %}
### Make sure `SPT Server` is running
{% endstep %}

{% step %}
### Obtain your public IP address

You can obtain your public IP address [here](https://api.ipify.org/).
{% endstep %}

{% step %}
### Test port connectivity

You can test your port connectivity using an [online port checker](https://portchecker.co).&#x20;

Enter your public IP address and port 6969, then click `Check`.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
If the port is closed, you may have an invalid configuration, Windows Firewall blocking the connection or your ISP does not allow port forwarding. Validate all your network settings or consider using a [VPN client](../hosting-a-fika-server/host-using-a-vpn.md).

Visit our Discord for assistance if you are stuck.
{% endhint %}

<p align="center"><a href="../landing/congratulations.md" class="button primary" data-icon="circle-right">I confirm that my server is accessible</a></p>


====================================================================================================
DOCUMENT: Test VPN connectivity
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/testing-connectivity/test-vpn-connectivity/README.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/testing-connectivity/test-vpn-connectivity/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Test VPN connectivity
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/testing-connectivity/test-vpn-connectivity/README.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
layout:
  width: default
  title:
    visible: true
  description:
    visible: true
  tableOfContents:
    visible: true
  outline:
    visible: false
  pagination:
    visible: false
  metadata:
    visible: false
---

# Test VPN connectivity

Before testing VPN connectivity, make sure that your friend(s) have successfully installed Fika and completed the steps [here](../../joining-a-fika-server/connect-using-a-vpn/).

{% stepper %}
{% step %}
### Open Radmin


{% endstep %}

{% step %}
### Ping your friend(s)'s device

Right-click their name in Radmin and click `Ping`.

<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="243"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### Validate ping success

Ensure that the ping is successful in the command prompt. If you see "Request timed out" then the ping failed.
{% endstep %}

{% step %}
### Close command prompt
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
If the ping fails then it means that the VPN connection is not working correctly. Everyone should try rebooting their PC and make sure that everyone joined the same network in Radmin.

Custom firewalls such as `BitDefender` can block VPN communication - try turning it off.
{% endhint %}

<p align="center"><a href="ensuring-direct-connection.md" class="button primary" data-icon="circle-right">I confirm that I can ping everyone</a></p>


====================================================================================================
DOCUMENT: Untitled
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/.gitbook/includes/untitled%20%281%29.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/.gitbook/includes/untitled (1).md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Untitled
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/.gitbook/includes/untitled%20%281%29.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
title: Untitled
---



====================================================================================================
DOCUMENT: Untitled
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/.gitbook/includes/untitled.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/.gitbook/includes/untitled.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Untitled
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/.gitbook/includes/untitled.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
title: Untitled
---



====================================================================================================
DOCUMENT: Web App
SOURCE: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/web-app.md
ARCHIVE PATH: Fika/Official_Wiki/SEARCHABLE/advanced-features/web-app.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Web App
Source repository: https://github.com/project-fika/gitbook-wiki
Source URL: https://github.com/project-fika/gitbook-wiki/blob/main/advanced-features/web-app.md
Source branch: main
Source commit: a52c1638f57d73397e627c432e39a708ebcd32d7
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Fika - current documentation snapshot
-->

---
description: How to install the Fika Web App
---

# Web App

## Introduction

{% hint style="info" %}
While this web app is designed to make server administration easier in the long run, the initial setup and maintenance require advanced technical knowledge.

The application runs as a fully isolated Docker container. To ensure stability and security, proficiency with container technology is essential. If you are strictly looking for a "plug-and-play" solution and are unfamiliar with Docker, this solution may not be the best fit for your needs.

A Windows-based solution is in progress, but is not yet available.
{% endhint %}

## What is the web app?

FikaWebApp is a Blazor-based web application designed to help you administrate your server.\
Features included are:

* Creating moderator/admin accounts
* Sending items (supports modded items)
  * Send items to everyone
  * Send items at a specific date
* Flea banning
* Statistics page (WIP)
* Administrate connected headless clients
* Uploading/downloading profiles
* Uploading/downloading files

## Installation

The Docker image can be found at the Docker website [here](https://hub.docker.com/r/lacyway/fikawebapp).

Use your preferable way of running the docker image. It's recommended to use the `compose.yml` below as certain variables are required to run the app, unless you are certain of what you are doing.

After running, access the site at `http://localhost:8080/` (unless you use a reverse proxy) and login using the standard account:

* **User**: admin
* **Password**: Admin123!

{% hint style="warning" %}
**Change your password after logging in!**
{% endhint %}

### Example compose

{% code title="docker-compose.yml" fullWidth="false" expandable="true" %}
```yml
services:
  fikawebapp:
    image: lacyway/fikawebapp:latest
    container_name: fikawebapp
    restart: unless-stopped
    environment:
      - PORT=5000 # internal container port the app listens on
      - API_KEY=<YOUR API KEY> # API Key generated by the Fika server
      - BASE_URL=https://localhost:6969 # URL/IP to your Fika server
    ports:
      - "8080:5000" # Host port 8080 -> container port 5000, not needed when using reverse proxy
    command: 
      #- "--reset-admin" # uncomment to reset admin password
      - "--quiet-logs" # comment out to receive verbose logs
    volumes:
      - ./webappdata:/app/data # data folder, use a volume to not lose data when updating
```
{% endcode %}

The compose above will let you run the web app, and access it without `https`.\
It is, however, recommended to use a reverse proxy, e.g. Traefik.

Make sure to read all the lines carefully, and change the required variables which are:

1. `API_KEY`
2. `BASE_URL`

### Example compose with reverse proxy

{% code title="docker-compose.yml" fullWidth="false" expandable="true" %}
```yml
services:
  # ----------------------
  # Traefik Reverse Proxy
  # ----------------------
  traefik:
    image: traefik:v3
    container_name: traefik
    restart: unless-stopped
    environment:
      - TZ=Etc/UTC
    ports:
      - 80:80      # HTTP
      - 443:443    # HTTPS
    command:
      # Basic settings
      - '--ping=true'
      - '--api=true'
      - '--api.dashboard=false'
      - '--api.insecure=false'
      - '--global.sendAnonymousUsage=false'
      - '--global.checkNewVersion=false'
      - '--log=true'
      - '--log.level=INFO'

      # Docker provider
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"

      # Entry points
      - "--entryPoints.web.address=:80"
      - "--entryPoints.websecure.address=:443"

      # TLS & Let's Encrypt
      - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.email=your@email.net"
      - "--certificatesresolvers.letsencrypt.acme.storage=/config/acme.json"

    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./traefik:/config"
    healthcheck:
      test: ["CMD", "traefik", "healthcheck", "--ping"]
      interval: 10s
      timeout: 5s
      retries: 3

  # ----------------------
  # Fika Web App
  # ----------------------
  fikawebapp:
    image: lacyway/fikawebapp:latest
    container_name: fikawebapp
    restart: unless-stopped
    environment:
      - PORT=5000 # internal container port the app listens on
      - API_KEY=<YOUR API KEY> # API Key generated by the Fika server
      - BASE_URL=https://localhost:6969 # URL/IP to your Fika server
    command: 
      #- "--reset-admin" # uncomment to reset admin password
      - "--quiet-logs" # comment out to receive verbose logs
    volumes:
      - ./webappdata:/app/data
    labels:
      - "traefik.enable=true"

      # Router
      - "traefik.http.routers.fikawebapp.rule=Host(`your.address.net`)" # can also be your external IP
      - "traefik.http.routers.fikawebapp.entrypoints=websecure"
      - "traefik.http.routers.fikawebapp.tls.certresolver=letsencrypt"

      # Service internal port
      - "traefik.http.services.fikawebapp.loadbalancer.server.port=5000"
```
{% endcode %}

Using the compose with reverse proxy, you can now access the server at `https://your.address.net/` (or IP address, if you chose one instead)

Make sure to read all the lines carefully, and change the required variables which are:

1. `your@email.net`
2. `API_KEY`
3. `BASE_URL`
4. `your.address.net`

{% hint style="info" %}
If you won't be using Traefik, pay attention that you do not need the `ports:` anymore when using a reverse proxy.
{% endhint %}

## Updating

If you used the compose files above, the volume will automatically be safe when updating. To update, simply re-run the compose and the latest image will be fetched and installed. Your data will be safe in the `webappdata` folder.

If you _**did not use**_ the compose, make sure to backup the entire data folder in `/app/data`!

{% hint style="danger" %}
Failure to use the compose, or backup the folder will result in a _permanent_ data loss after updating!
{% endhint %}


====================================================================================================
DOCUMENT: Mod examples for v4.0.0
SOURCE: https://github.com/sp-tarkov/server-mod-examples/blob/main/README.md
ARCHIVE PATH: SPT/Component_Documentation/server-mod-examples/SEARCHABLE/README.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Mod examples for v4.0.0
Source repository: https://github.com/sp-tarkov/server-mod-examples
Source URL: https://github.com/sp-tarkov/server-mod-examples/blob/main/README.md
Source branch: main
Source commit: 7c78aa7e0a171242622eb67f8f0b52dc5a357e61
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->


# Mod examples for v4.0.0

A collection of example mods that perform various actions in SPT

# Setup
The solution has numbered folders, starting at 1 and work downwards to find examples with increasing complexity.

Each mod imports multiple NUGET packages. These are used as libraries of the server code.

### Prerequisites
 [.NET 9 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/9.0)
 [Visual Studio Community](https://visualstudio.microsoft.com/vs/community/) / [Rider](https://www.jetbrains.com/rider/)
 
### **Essential Concepts**
Prioritize understanding Dependency Injection and Inversion of Control, the architectural principles SPT adopts.

 - [A quick intro to Dependency Injection](https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f/)
 - [Understanding Inversion of Control (IoC) Principle](https://medium.com/@amitkma/understanding-inversion-of-control-ioc-principle-163b1dc97454)

### Build
`Visual Studio > Build > Rebuild Solution`
`Rider > TODO`
 
## Distribution
- Build the project in 'Release' mode
- Copy the folder inside: `mod\bin\Release` into your servers `/mods` folder
- Start server


====================================================================================================
DOCUMENT: Bleeding Edge Install Instructions
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/bleeding-edge-install-instructions.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/bleeding-edge-install-instructions.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Bleeding Edge Install Instructions
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/bleeding-edge-install-instructions.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13, SPT 4.1.x / 4.1.0
-->

---
title: Bleeding Edge Install Instructions
description: SPT Bleeding Edge installation instructions for project testing.
published: true
date: 2026-07-16T19:39:39.259Z
tags: 
editor: markdown
dateCreated: 2026-06-18T15:17:35.260Z
---

> This page applies to `BLEEDING EDGE` SPT versions. 
{.is-warning}

## Testing Only

Bleeding Edge installations are for testing only! If you are attempting to install a Bleeding Edge version to play casually, you are going to have a very bad time. Please do yourself a favour and instead use a [stable released version](/en/Installation_Guide). The stable version is happy fun time!

## No Support

This document is the **only support** that you will find for installing the Bleeding Edge version. If you attempt to contact the Single Player Tarkov support team, staff members, moderators, or the general Discord community about installing the Bleeding Edge version, you may end up blocked from downloading Bleeding Edge versions in the future with no warning. And we will laugh at you. We use this version for fast iteration of core development and we do not have the resources to support users on these versions.

## Prerequisites

- A system above the [minimum system requirements](/system-requirements). The live Escape From Tarkov install must remain (80GB) as well as a complete copy (+80GB).
- You must have the latest version of Escape from Tarkov installed using either the Battlestate Games Launcher or Steam.
- You must have started Escape From Tarkov and loaded the main menu.
- You must be willing to submit bugs to the [GitHub issues board](https://github.com/sp-tarkov/server-csharp/issues/new/choose) or to the [#BE-Testing](https://discord.com/channels/875684761291599922/980558564693274694) channel on Discord.

## Software Requirements
- [.NET Runtime 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-desktop-10.0.9-windows-x64-installer)
- [ASP.NET 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-aspnetcore-10.0.9-windows-x64-installer)
- [7-Zip](https://www.7-zip.org/)

## Installation Instructions

These instructions are specific and tedious. **Do no more or no less than what is written.** If for any reason something doesn't work, delete what you have and start over. *Slower.*
{.is-warning}

1. Ensure your Escape from Tarkov is updated to the latest version.
1. Create a new directory for the BE SPT install. A good location would be anywhere that does not require administrative privileges. For example: `C:\Games\SPT-4.1-BE`.
1. Copy the contents of your Escape From Tarkov installation directory into this new `SPT-4.1-BE` directory. Note that the `EscapeFromTarkov.exe` file must be within the root of your `SPT-4.1-BE` directory. Example: `SPT-4.1-BE\EscapeFromTarkov.exe`.
1. Download the [patcher for SPT 4.0](https://mirror.spt.dev/patchers/). This file you need is based on the current version of Escape from Tarkov, but will look like this `Patcher_1.0.X.X.XXXXX_to_16.9.0.40087.7z`; the newest file that ends in `40087.7z`.
1. Extract the contents of the folder within this 7z archive into the root of your `SPT-4.1-BE` directory. Note that the `patcher.exe` and the `SPT_Patches` directory must be in the root of the `SPT-4.1-BE` directory: `SPT-4.1-BE\patcher.exe`.
    ![Install Patcher](https://spt.dev/bleeding-edge-install-instructions.gif =600x)
1. Run the `patcher.exe`, and let it finish patching your Escape from Tarkov to version 40087.
1. Download the [patcher for SPT 4.1](https://spt-patches.modd.in/Patcher_16.9.0.40087_to_16.9.5.40743.7z).
1. Extract the contents of this 7z archive into the root of your `SPT-4.1-BE` directory, overwriting any files when prompted.
1. Run the `patcher.exe`, and let it finish patching your Escape from Tarkov to version 40743.
1. Download the Bleeding Edge SPT version from the [#BE-Testing](https://discord.com/channels/875684761291599922/980558564693274694) channel on Discord.
1. Extract the contents of this 7z archive into the root of your `SPT-4.1-BE` directory.

At this point, you should have a fully installed Bleeding Edge version of Single Player Tarkov 4.1 installed on your system.

## Common Questions

Remember, this document is your only avenue of support for Bleeding Edge builds.
<details>
<summary>I was playing the game normally, no mods, fresh profile, and I encountered an error</summary>
We are extremely interested in these types of clean issues. Please submit these types of bugs to the <a href="https://github.com/sp-tarkov/server-csharp/issues/new/choose">GitHub issues board</a> or to the <a href="https://discord.com/channels/875684761291599922/980558564693274694">#BE-Testing</a> channel on Discord. Thank you for helping us build SPT.
</details>

<details>
<summary>Why is there a watermark on my screen? Can I get rid of it?</summary>
If I could reach through my monitor and slap you, I would. No, you can't get rid of it. We put it there. We want it there. This build is for testing. Go eat some glue or something.
</details>

<details>
<summary>The server doesn't start</summary>
Delete everything and start over. Read slower.
</details>

<details>
<summary>The launcher doesn't start</summary>
Delete everything and start over. Read slower.
</details>

<details>
<summary>The game does not load to the main menu</summary>
Delete everything and start over. Read slower.
</details>

<details>
<summary>My SPT 4.0 profile does not work</summary>
It's not supposed to.
</details>

<details>
<summary>I tried to install a mod and it won't work</summary>
It's not supposed to.
</details>

Thank you for your help testing and making Single Player Tarkov better for everyone.
&mdash; Developers & Staff

====================================================================================================
DOCUMENT: Body Part Reference Sheet
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/references/body-part-reference.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/references/body-part-reference.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Body Part Reference Sheet
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/references/body-part-reference.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Body Part Reference
description: 
published: true
date: 2026-04-07T00:35:17.871Z
tags: 
editor: markdown
dateCreated: 2026-04-07T00:35:17.871Z
---

# Body Part Reference Sheet

Body Parts are used in various locations in the SPT Server and Client.

>
> If you are creating a quest requiring a specific body part and don't use the correct case, **_the quest will use the fallback value for head._**
>

| Enum Value | Notes |
| :--- | :---: |
| Head |  |
| Chest |  |
| Stomach |  |
| LeftArm |  |
| RightArm |  |
| LeftLeg |  |
| RightLeg |  |
| Common | Where bleeding effects are tracked client side |

====================================================================================================
DOCUMENT: Bot Difficulties
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Bot_Difficulties.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Bot_Difficulties.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Bot Difficulties
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Bot_Difficulties.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Bot Difficulties
description: Learn how SPT and mods handle bots' difficulty.
published: true
date: 2026-07-30T02:11:22.067Z
tags: guide
editor: markdown
dateCreated: 2025-08-28T18:04:16.547Z
---

## EFT Pre-Raid Difficulty Settings
Specific bots in EFT can have different difficulty settings unique to other bots in the same raid. This page will refer to a bot's specific difficulty as their *difficulty class*.

There are 4 different *difficulty classes* a specific bot can have:
- *Easy*
- *Medium*
- *Hard*
- *Impossible*

The selected difficulty in the **Pre-Raid Setting** determines which *difficulty classes* are allowed to spawn in your raid:
- **As in online**: Starts spawning *Easy* bots, progressing through *Medium* to *Hard* as the raid goes on.
- **Easy**: Only *Easy* class bots will spawn.
- **Medium**: Only *Medium* class bots will spawn.
- ...and so on

These *difficulty classes* only make changes to PMCs and Scavs, as Bosses have the same difficulty regardless of their *difficulty class*.

Note that [SVM](https://forge.sp-tarkov.com/mod/236/server-value-modifier-svm) can be used to change which **difficulty** is selected by default in the **Pre-Raid Setting**. Otherwise, it will always default to **As in online**.

## SAIN Presets
Each preset in [SAIN](https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement)'s <kbd>F6</kbd> menu will alter each *difficulty class* individually. This allows you to separately tweak how hard an *Easy* bot is vs. a *Hard* bot, and so on.

Note that this is **not** the same as changing the **difficulty** in the **Pre-Raid Settings**. This will **not** change which *difficulty classes* can spawn in the raid, it will only alter the behaviours of each *difficulty class*.
&nbsp;
<img src="/bot_difficulties/sain_presets_v2.1.png" alt="SAIN Presets" width=600 style="display: block; margin: 0 auto;">

## Spawn mods like ABPS
These mods have configuration options to change the likelihood for each *difficulty class* to spawn when **As in online** is chosen in **Pre-Raid Settings**.

Choosing a specific **difficulty** in **Pre-Raid Settings** will instead make all bots the same *difficulty class*.

## What does this mean for me?
Consider changing settings in multiple places if you are unhappy with how difficult your game is:

*Bots are too difficult?*
- Choose an easier **SAIN Preset** (ex. Baby Bots).
- Set the difficulty to **Easy** or **Medium** in **Pre-Raid Settings** so that there won't be a chance for *Hard* bots to spawn in your raid.
- Reduce the likelihood of *Hard* bots to spawn with a **Spawn Mod**.

*Bots are too easy?*
- Choose a harder **SAIN Preset** (ex. Death Wish).
- Set the difficulty to **Hard** or **Impossible** to ensure that there are no *Easy* or *Medium* bots in your raid.

====================================================================================================
DOCUMENT: Bot Information Reference Sheet
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/references/bot-types.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/references/bot-types.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Bot Information Reference Sheet
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/references/bot-types.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Bot Information Reference Sheet
description: List of all current and previously known bots and their names
published: true
date: 2025-11-02T03:36:01.008Z
tags: bots, mods
editor: markdown
dateCreated: 2025-06-06T04:15:52.004Z
---

# Bot Information Reference Sheet
The below table is all currently known and previously known bot types and their associated named values.

| Friendly Name | Coded Name | Bot Type | Previously Known As | Notes |
| :--- | :--- | :--- | :--- | :--- | :--- |
| Smugglers | arenaFighterEvent | Savage | BloodHounds | Changed in SPT 3.10 |
| Scav | assault | Savage | | |
| Scav | assaultGroup | Savage | | Not an actual bot type, used client side for New Spawn system (hunts player) |
| SPT Bear | bear | Pmc | | Not an actual bot type |
| Kaban | bossBoar | Savage | | |
| Kaban Guard (sniper) | bossBoarSniper | Savage | | |
| Reshala | bossBully | Savage | | |
| Glukhar | bossGluhar | Savage | | |
| Killa | bossKilla | Savage | | |
| Killa (Labyrinth) | bossKillaAgro | Savage | | |
| Knight (Goons) | bossKnight | Savage | | |
| Shurman | bossKojaniy | Savage | | |
| Kollontay | bossKolontay | Savage | | |
| Partisan | bossPartisan | Savage | | |
| Sanitar | bossSanitar | Savage | | |
| Tagilla | bossTagilla | Savage | | |
| Tagilla (Labyrinth) | bossTagillaAgro | Savage | | |
| Zryachiy | bossZryachiy | Savage | | |
| Scav (event) | crazyAssaultEvent | Savage | | |
| Scav (cursed) | cursedAssault | Savage | | |
| Rogue | exUsec | Savage | | |
| Big Pipe (Goons) | followerBigPipe | Savage | | |
| Birdeye (Goons) | followerBirdeye | Savage | | |
| Kaban Guard | followerBoarClose1 | Savage | | |
| Kaban Guard | followerBoarClose2 | Savage | | |
| Reshala Guard | followerBully | Savage | | |
| Glukhar Guard | followerGluharAssault | Savage | | |
| Glukhar Guard | followerGluharScout | Savage | | |
| Glukhar Guard | followerGluharSecurity | Savage | | |
| Shurman Guard | followerKojaniy | Savage | | |
| Kollontay Guard | followerKolontayAssault | Savage | | |
| Kollontay Guard | followerKolontaySecurity | Savage | | |
| Sanitar Guard | followerSanitar | Savage | | |
| Zryachiy Guard | followerZryachiy | Savage | | |
| Santa | gifter | Savage | | |
| Zombie | infectedAssault | Savage | | |
| Zombie | infectedCivil | Savage | | |
| Zombie | infectedLaborant | Savage | | |
| Zombie | infectedPmc | Savage | | May use pistols |
| Zombie | infectedTagilla | Savage | | |
| Sniper Scavs | marksman | Savage | | |
| Peacekeeper Bot (event) | peacemaker | Savage | | |
| BEAR | pmcBEAR | Pmc | | Set to Savage until Client receives data |
| Raider | pmcBot | Savage | | |
| USEC | pmcUSEC | Pmc | | Set to Savage until Client receives data |
| Zryachiy (event) | ravangeZryachiyEvent | Savage | | |
| Cultist (event) | sectantOni | Savage | | |
| Cultist (event) | sectantPredvestnik | Savage | | |
| Cultist (boss) | sectantPriest | Savage | | Normal Cultist - sectantWarrior as followers |
| Cultist (event) | sectantPrizrak | Savage | | |
| Cultist (follower) | sectantWarrior | Savage | | Normal Cultist - sectantPriest guards |
| BTR | shooterBTR | Savage | | |
| Skier Bot (event) | skier | Savage | | |
| ? | spiritSpring | Savage | | |
| ? | spiritWinter | Savage | | |
| Tagilla Guard (Labyrinth) | tagillaHelperAgro | Savage | | |
| SPT Usec | usec | Pmc | | Not an actual bot type|


====================================================================================================
DOCUMENT: Client Class Name Mappings - 4.0 to 4.1
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/SPT_41/modding/client/Class_Name_Mappings.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/SPT_41/modding/client/Class_Name_Mappings.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Client Class Name Mappings - 4.0 to 4.1
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/SPT_41/modding/client/Class_Name_Mappings.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.1.x / 4.1.0
-->

---
title: Client Class Name Mappings - 4.0 to 4.1
description: Old 4.0 obfuscated client class names mapped to their real 4.1 names.
published: true
date: 2026-07-21T00:00:00.000Z
tags: modding, migration, client
editor: markdown
dateCreated: 2026-07-21T00:00:00.000Z
---

> This page applies to SPT version `4.1`
{.is-info}

The 4.1 client was deobfuscated. Names that were `GClass680`, `GStruct80` or a partial 4.0 alias like `LoggerClass` now have real names and live in real namespaces. Any client mod that referenced an old name has to be updated to the new one.

This is the full lookup table. Left is the 4.0 name your mod used, right is the 4.1 name to replace it with. Nested types use `+`. Use Ctrl+F on the old name to find its replacement.

| 4.0 name | 4.1 name |
| --- | --- |
| `GClass680` | `ABotProfileCreator` |
| `GStruct80` | `AbsolutDecals.DecalMeshVertexData` |
| `GClass1033` | `AbsolutDecals.DecalSystemUtils` |
| `GClass1000` | `AbsolutDecals.MBOITParticlesManager` |
| `GClass1000+Struct173` | `AbsolutDecals.MBOITParticlesManager+CopyTexturesJob` |
| `GClass1000+Struct167` | `AbsolutDecals.MBOITParticlesManager+DrawParams` |
| `GClass1000+Struct171` | `AbsolutDecals.MBOITParticlesManager+DynamicSystem` |
| `GClass1000+Struct170` | `AbsolutDecals.MBOITParticlesManager+GlobalOffsets` |
| `GClass1000+Struct169` | `AbsolutDecals.MBOITParticlesManager+IndirectDispatchArgs` |
| `GClass1000+Struct168` | `AbsolutDecals.MBOITParticlesManager+IndirectDrawArgs` |
| `GClass1000+Struct175` | `AbsolutDecals.MBOITParticlesManager+MiscData` |
| `GClass1000+Struct172` | `AbsolutDecals.MBOITParticlesManager+PerShaderData` |
| `GClass1000+Class701` | `AbsolutDecals.MBOITParticlesManager+ResizableVertexBuffer` |
| `GClass1000+Class701+Struct174` | `AbsolutDecals.MBOITParticlesManager+ResizableVertexBuffer+ArrayChunk` |
| `GClass1000+Class700` | `AbsolutDecals.MBOITParticlesManager+TextureArrayHolder` |
| `GClass1000+Struct166` | `AbsolutDecals.MBOITParticlesManager+VertexStruct` |
| `GClass1034` | `AbsolutDecals.MeshCutter` |
| `ProjectorHelperClass` | `AbsolutDecals.ProjectorHelper` |
| `GStruct81` | `AbsolutDecals.Segment` |
| `GClass1036` | `AbsolutDecals.SkinnedMeshCutter` |
| `DecalMeshClass` | `AbsolutDecals.TemporaryMesh` |
| `GClass797` | `AbstractAverage` |
| `BotCurrentPathAbstractClass` | `AbstractBotPath` |
| `LogConfiguratorAbstractClass` | `AbstractLogConfigurator` |
| `LoggerClass` | `AbstractLogger` |
| `LoggerClass+Class412` | `AbstractLogger+LogHandler` |
| `GClass798` | `AbstractMinMaxAverage` |
| `GClass146` | `AbstractSanitarFightLayer` |
| `GClass150` | `AbstractSectantLayerFight` |
| `GClass387` | `ActiveSet` |
| `Class99` | `AdvAssaultTargetLayer` |
| `GClass788` | `AggressorStats` |
| `GClass1201` | `AI.EmptyBotDevelopService` |
| `BotActionNodesClass` | `AIActionsList` |
| `AICoreActionEndStruct` | `AICoreActionEnd` |
| `AICoreActionResultStruct` | `AICoreActionResult` |
| `AICoreAgentClass` | `AICoreAgent` |
| `GClass32` | `AICoreAgentBase` |
| `AICoreControllerClass` | `AICoreController` |
| `AICoreLayerClass` | `AICoreLayer` |
| `BotNodeAbstractClass` | `AICoreNode` |
| `GClass176` | `AICoreNode` |
| `AICoreStrategyAbstractClass` | `AICoreStrategy` |
| `GClass411` | `AICoversDataCache` |
| `GClass396` | `AICoversLogger` |
| `GClass396+Class381` | `AICoversLogger+Logger` |
| `PlayerAIDataClass` | `AIData` |
| `GClass586` | `AIDataRoomLogic` |
| `GClass397` | `AIDebugMain` |
| `GClass709` | `AIDecisionLogger` |
| `GClass426` | `AIGestusRequest` |
| `GClass577` | `AIGrenadeHelper` |
| `GStruct9` | `AILayerDebugStruct` |
| `GClass398` | `AILogger` |
| `GClass398+Class382` | `AILogger+AIDataLogger` |
| `GClass398+Class383` | `AILogger+AIVisionLogger` |
| `GClass399` | `AIMapSettingsLogger` |
| `GClass399+Class384` | `AIMapSettingsLogger+Logger` |
| `GClass178` | `Aiming` |
| `BotHitAffectClass` | `AimingAffection` |
| `GClass179` | `AimingDebugShoot` |
| `GClass180` | `AimingFromStationary` |
| `GClass189` | `AimingNearPlayer` |
| `GClass27` | `AimingResultParams` |
| `GClass625` | `AimingStats` |
| `GClass181` | `AimingToAnyEnemy` |
| `GClass190` | `AimingToDeadBody` |
| `GClass182` | `AimingToFlash` |
| `GClass183` | `AimingToGoalTarget` |
| `GClass184` | `AimingToReservWay` |
| `GClass185` | `AimingToSmoke` |
| `GClass186` | `AimingToStationarySuppressionPoint` |
| `GClass187` | `AimingToSuppressionPoint` |
| `GClass400` | `AIMoveLogger` |
| `GClass400+Class385` | `AIMoveLogger+Logger` |
| `GClass425` | `AIPeaceRequestAnswer` |
| `GClass25` | `AIPeriodAction` |
| `GClass374` | `AIPointsCounterSegment` |
| `AirdropDataPacketStruct` | `AirdropDataPacket` |
| `GClass859` | `AirdropTrajectoryCalculator` |
| `GStruct43` | `AirplaneDataPacket` |
| `GClass377` | `AISegmentGroup` |
| `GClass578` | `AISmokeGrenadePlace` |
| `AITaskManager+Class284` | `AITaskManager+AIRegularTaskGroup` |
| `AITaskManager+Class284+Class285` | `AITaskManager+AIRegularTaskGroup+AIRegularTaskData` |
| `AITaskManager+GClass607` | `AITaskManager+AISimpleTaskData` |
| `GClass369` | `AIUtility` |
| `GClass588` | `AIVoxelChecker` |
| `GClass570` | `AllFollowersPatrolInfo` |
| `GClass469` | `AlwaysSearchData` |
| `AmbientLight+Class619` | `AmbientLight+CamSettings` |
| `GClass772` | `AmmoActivenessData` |
| `GClass4075` | `AmplifyImpostors.BakeHDRPTool` |
| `GClass4076` | `AmplifyImpostors.BoundsEx` |
| `GClass4081` | `AmplifyImpostors.ImpostorBakingTools` |
| `GClass4079` | `AmplifyImpostors.RenderTextureEx` |
| `GClass4078` | `AmplifyImpostors.SpriteUtilityEx` |
| `GClass4077` | `AmplifyImpostors.Texture2DEx` |
| `GClass4082` | `AmplifyImpostors.Triangulator` |
| `GClass4080` | `AmplifyImpostors.Vector2Ex` |
| `Class3637` | `AmplifyMotion.ClothState` |
| `AmplifyMotion.MotionState+Struct1313` | `AmplifyMotion.MotionState+MaterialDesc` |
| `AmplifyMotion.MotionState+Struct1314` | `AmplifyMotion.MotionState+Matrix3x4` |
| `Class3638` | `AmplifyMotion.ParticleState` |
| `Class3638+Class3641` | `AmplifyMotion.ParticleState+Particle` |
| `Class3639` | `AmplifyMotion.SkinnedState` |
| `Class3640` | `AmplifyMotion.SolidState` |
| `Class3642` | `AmplifyMotion.WorkerThreadPool` |
| `GClass1336` | `AnimationClipPlayableExtensions` |
| `GClass756` | `AnimationControllerEventsTable` |
| `WeaponAnimationSpeedControllerClass` | `AnimationControllerParametersTable` |
| `GClass758` | `AnimationControllerStatesTable` |
| `GClass1334` | `AnimationEventsStateBehaviourConverter` |
| `AnimationEventSystem.AnimationEventsContainer+Class392` | `AnimationEventSystem.AnimationEventsContainer+AnimatorEventsControllerLogger` |
| `AnimationEventSystem.AnimationEventsContainer+Class392+Struct253` | `AnimationEventSystem.AnimationEventsContainer+AnimatorEventsControllerLogger+LoggedInfo` |
| `AnimationEventSystem.AnimationEventsEmitter+GClass715` | `AnimationEventSystem.AnimationEventsEmitter+AnimationEventsEmitterLogger` |
| `AnimationEventSystem.AnimationEventsEmitter+Struct254` | `AnimationEventSystem.AnimationEventsEmitter+DelayedEventInfo` |
| `AnimationEventSystem.AnimationEventsSequenceData+GStruct142` | `AnimationEventSystem.AnimationEventsSequenceData+DebugQueueData` |
| `GClass1453` | `AnimationEventSystem.EAnimationEventParamTypeExtension` |
| `GClass1330` | `AnimationEventSystem.FastAnimationEventsStateBehaviour` |
| `GClass1331` | `AnimationEventSystem.FastAnimationPlayerStateContainerBehaviour` |
| `IEventsConsumer` | `AnimationEventSystem.IAnimationEventsConsumer` |
| `GInterface137` | `AnimationEventSystem.IEventBehaviour` |
| `Class534` | `AnimationQueue` |
| `Class534+Class535` | `AnimationQueue+Sample` |
| `GClass1445` | `AnimationSystem.AnimatorFactory` |
| `GClass1449` | `AnimationSystem.RootMotionTable.ComputedClipNode` |
| `GClass1448` | `AnimationSystem.RootMotionTable.ComputedNode` |
| `GClass1451` | `AnimationSystem.RootMotionTable.ComputedNodeSerializer` |
| `GClass1450` | `AnimationSystem.RootMotionTable.ComputedTreeNode` |
| `GClass1452` | `AnimationSystem.RootMotionTable.CustomBlendTree` |
| `GInterface135` | `AnimationSystem.RootMotionTable.IBlendParametersKeeper` |
| `GInterface133` | `AnimationSystem.RootMotionTable.ICustomBlendTreeNode` |
| `GInterface134` | `AnimationSystem.RootMotionTable.IParametersCache` |
| `GStruct141` | `AnimationSystem.RootMotionTable.MotionInfo` |
| `GClass1446` | `AnimationSystem.UnityAnimatorWrapper` |
| `GStruct38` | `AnimatorParam` |
| `GClass760` | `AnimatorParamsExtension` |
| `GClass1333` | `AnimatorStateDebuggerConverter` |
| `Class2` | `ApiEditorLoginRequestParams` |
| `BackendConfigAbstractClass` | `AppEnvironment` |
| `ApplicationConfigClass` | `ApplicationConfig` |
| `GClass638` | `ApplicationFlags` |
| `ApproachStateClass` | `ApproachState` |
| `GClass2111` | `ApproachStateAI` |
| `GClass955` | `AreaLightLUT` |
| `Arena.UI.NicknameField+Struct274` | `Arena.UI.NicknameField+Pair` |
| `GClass478` | `ArenaFighterEnemyChooser` |
| `GClass310` | `ArenaFighterLayersStrategy` |
| `GClass906` | `ArmorRepairStrategy` |
| `GClass906+Class528` | `ArmorRepairStrategy+ItemRepairInfo` |
| `ArmorResistanceStruct` | `ArmorResistanceData` |
| `GClass3125` | `ArmorSlot` |
| `ServerShellingControllerClass` | `ArtilleryShellingControllerServer` |
| `GClass42` | `AssaultBuildingLayer` |
| `GClass45` | `AssaultEnemyFarLayer` |
| `GClass311` | `AssaultGroupLayersStrategy` |
| `GClass39` | `AssaultHaveEnemyLayer` |
| `GClass46` | `AssaultTargetLayer` |
| `GClass716` | `AssetBundleLogger` |
| `GClass1457` | `Assets.CommonAssets.Scripts.Utilities.ColliderExtendedDebug` |
| `GClass1457+GStruct143` | `Assets.CommonAssets.Scripts.Utilities.ColliderExtendedDebug+Box` |
| `GClass1454` | `Assets.Scripts.Utils.StateMachine` |
| `GClass1454+Class926` | `Assets.Scripts.Utils.StateMachine+Event` |
| `GClass1454+Class926+Class927` | `Assets.Scripts.Utils.StateMachine+Event+Case` |
| `GClass1454+Class924` | `Assets.Scripts.Utils.StateMachine+State` |
| `GClass1455` | `Assets.Scripts.Utils.StateSwitcher` |
| `GClass1456` | `Assets.Scripts.Utils.Zlib` |
| `GClass736` | `AsyncRaycastsBatchManager` |
| `GClass736+GClass738` | `AsyncRaycastsBatchManager+BatchData` |
| `GClass736+GClass737` | `AsyncRaycastsBatchManager+RaycastJobContainer` |
| `GClass205` | `AttackMoving` |
| `GClass209` | `AttackMovingFlank` |
| `GClass237` | `AttackMovingTactical` |
| `GClass206` | `AttackMovingWithSuppress` |
| `GClass1199` | `Audio.ActiveHeadphones.Debug.HeadphonesEqView` |
| `GClass1200` | `Audio.ActiveHeadphones.Debug.JsonHelper` |
| `Struct225` | `Audio.AmbientSubsystem.AmbientSplineEmitter.AverageAttenuatedDirection` |
| `Struct229` | `Audio.AmbientSubsystem.AmbientSplineEmitter.AverageAttenuatedDirectionCalculationJob` |
| `Class822` | `Audio.AmbientSubsystem.AmbientSplineEmitter.AverageAttenuatedDirectionJobScheduler` |
| `Struct230` | `Audio.AmbientSubsystem.AmbientSplineEmitter.ClearJob` |
| `Struct227` | `Audio.AmbientSubsystem.AmbientSplineEmitter.DistanceJob` |
| `GInterface109` | `Audio.AmbientSubsystem.AmbientSplineEmitter.ISplineEmitterCalculator` |
| `Struct226` | `Audio.AmbientSubsystem.AmbientSplineEmitter.PointInSplineCheckJob` |
| `GInterface110` | `Audio.AmbientSubsystem.AmbientSplineEmitter.SplineSoundEmitter.IPositionTranslator` |
| `Audio.AmbientSubsystem.AmbientSplineEmitter.SplineSoundEmitter.SplineTriggerChecker+Struct231` | `Audio.AmbientSubsystem.AmbientSplineEmitter.SplineSoundEmitter.SplineTriggerChecker+DistanceCalculationJob` |
| `Struct228` | `Audio.AmbientSubsystem.AmbientSplineEmitter.TotalAttenuationCalculationJob` |
| `Class823` | `Audio.AmbientSubsystem.AmbientSplineEmitter.Utils.AmbientZoneMathfUtils` |
| `GClass1184` | `Audio.AmbientSubsystem.AudioMixerParamsController` |
| `GClass1186` | `Audio.AmbientSubsystem.AudioSourceCrossfader` |
| `Struct217` | `Audio.AmbientSubsystem.DistanceCalculationJob` |
| `GClass1187` | `Audio.AmbientSubsystem.EnvironmentBlenderJobScheduler` |
| `GClass1194` | `Audio.AmbientSubsystem.GameEvents.AudioEventsFactory` |
| `GClass1195` | `Audio.AmbientSubsystem.GameEvents.FakeEventAudioPlayer` |
| `GClass1196` | `Audio.AmbientSubsystem.GameEvents.HalloweenInfectedEventAudioPlayer` |
| `GInterface107` | `Audio.AmbientSubsystem.GameEvents.IAudioEventsFactory` |
| `GInterface108` | `Audio.AmbientSubsystem.GameEvents.IGameEventAudioPlayer` |
| `GClass1197` | `Audio.AmbientSubsystem.GameEvents.RunddansEventAudioPlayer` |
| `GInterface102` | `Audio.AmbientSubsystem.IAudioClipChangeable` |
| `GInterface100` | `Audio.AmbientSubsystem.IAudioCrossfader` |
| `GInterface103` | `Audio.AmbientSubsystem.IDayTimeSoundContainerChangeable` |
| `GInterface104` | `Audio.AmbientSubsystem.IEventSoundContentChanger` |
| `GInterface97` | `Audio.AmbientSubsystem.IPrecipitationDependent` |
| `GInterface98` | `Audio.AmbientSubsystem.ISeasonDependent` |
| `GInterface105` | `Audio.AmbientSubsystem.ISoundBankChangeable` |
| `GInterface101` | `Audio.AmbientSubsystem.ISoundBlender` |
| `GInterface96` | `Audio.AmbientSubsystem.ISoundPoint` |
| `GInterface99` | `Audio.AmbientSubsystem.IWindDependent` |
| `Struct219` | `Audio.AmbientSubsystem.OptimalPortalCalculationJob` |
| `Struct218` | `Audio.AmbientSubsystem.OptimalScoreCalculationJob` |
| `GInterface106` | `Audio.AmbientSubsystem.PathMoverStrategy.IPathMovementStrategy` |
| `GClass1191` | `Audio.AmbientSubsystem.PathMoverStrategy.PathMovementBackwardStrategy` |
| `GClass1192` | `Audio.AmbientSubsystem.PathMoverStrategy.PathMovementForwardStrategy` |
| `GClass1193` | `Audio.AmbientSubsystem.PathMoverStrategy.PathMovementRandomStrategy` |
| `GClass1190` | `Audio.AmbientSubsystem.PathMoverStrategy.PathMovementStrategyBase` |
| `LocalPlayerStepAudioControllerClass` | `Audio.AmbientSubsystem.PlayerStepLayerAudioController` |
| `GStruct108` | `Audio.AmbientSubsystem.PortalCalculatedData` |
| `GAttribute17` | `Audio.AmbientSubsystem.ReverbPresetAttribute` |
| `GClass1188` | `Audio.AmbientSubsystem.RoomPrecipitationCalculator` |
| `GClass1185` | `Audio.AmbientSubsystem.RoomToneController` |
| `Audio.AmbientSubsystem.TriggerSoundBankPlayer+Struct220` | `Audio.AmbientSubsystem.TriggerSoundBankPlayer+PlayerPlayingData` |
| `GClass1182` | `Audio.AudioCulling.AudioCullingController` |
| `GInterface93` | `Audio.AudioCulling.IAudioCullingController` |
| `GInterface94` | `Audio.AudioCulling.IAudioCullingObject` |
| `GClass1108` | `Audio.AudioLoggerFactory` |
| `GClass1183` | `Audio.AudioWeatherSystem.FakePlayerStepAudioController` |
| `GInterface95` | `Audio.AudioWeatherSystem.IPlayerStepAudioController` |
| `GClass1181` | `Audio.AutoPanner.AudioSourcePanner` |
| `GInterface92` | `Audio.AutoPanner.ISoundPanner` |
| `GClass1178` | `Audio.AuxiliaryAudioUtils.AudioFader` |
| `GClass1179` | `Audio.AuxiliaryAudioUtils.AudioMixerFader` |
| `GClass1180` | `Audio.AuxiliaryAudioUtils.AudioSourcePriorityCalculator` |
| `GInterface91` | `Audio.AuxiliaryAudioUtils.IAudioMixerFader` |
| `GClass1096` | `Audio.ClientAudioSettings` |
| `GClass1096+GClass1107` | `Audio.ClientAudioSettings+ActiveHeadphonesSettings` |
| `GClass1096+GClass1099` | `Audio.ClientAudioSettings+EnvironmentAudioSettings` |
| `GClass1096+GClass1098` | `Audio.ClientAudioSettings+GlobalAudioGroupPreset` |
| `GClass1096+GClass1106` | `Audio.ClientAudioSettings+MetaXRAudioPluginSettings` |
| `GClass1096+GClass1105` | `Audio.ClientAudioSettings+MovementRolloffMultiplier` |
| `GClass1096+GClass1104` | `Audio.ClientAudioSettings+PlayerAudioSettings` |
| `GClass1096+GClass1097` | `Audio.ClientAudioSettings+PointOfViewSoundVolumeData` |
| `GClass1096+GClass1102` | `Audio.ClientAudioSettings+RainSettings` |
| `GClass1096+GClass1103` | `Audio.ClientAudioSettings+SeasonAmbientSettings` |
| `GClass1096+GClass1100` | `Audio.ClientAudioSettings+SurfaceMultiplier` |
| `GClass1096+GClass1101` | `Audio.ClientAudioSettings+WindMultiplier` |
| `GClass1176` | `Audio.ConfiguredAudioPlayer.CrossfadeAudioPlayer` |
| `GInterface90` | `Audio.ConfiguredAudioPlayer.IConfiguredAudioPlayer` |
| `GClass1177` | `Audio.ConfiguredAudioPlayer.SingleSourceAudioPlayer` |
| `GClass1174` | `Audio.Data.AudioMixerDataContainer` |
| `GClass1175` | `Audio.Data.BtrDriverSoundDataContainer` |
| `GClass1109` | `Audio.DebugAudioLogger` |
| `Class780` | `Audio.DebugTools.AudioDebugGUIStyleFactory` |
| `Class781` | `Audio.DebugTools.GUIAudioDebugInfo` |
| `GInterface84` | `Audio.Effects.IAudioEQFilter` |
| `GClass1118` | `Audio.Extensions.AudioExtensions` |
| `GInterface68` | `Audio.IAudioLogger` |
| `GInterface69` | `Audio.IManualUpdated` |
| `GInterface71` | `Audio.ISpatialAudioSystemTab` |
| `GInterface70` | `Audio.ITab` |
| `GInterface72` | `Audio.ITransformTracker` |
| `GClass1115` | `Audio.NPC.BtrDriver.BtrDriverDialogueEventHandler` |
| `GClass1117` | `Audio.NPC.BtrDriver.BtrDriverPhraseController` |
| `GInterface83` | `Audio.NPC.BtrDriver.IPhraseController` |
| `GClass1116` | `Audio.NPC.BtrDriver.PhraseController` |
| `GInterface82` | `Audio.NPC.IDialogueEventHandler` |
| `GClass1110` | `Audio.NullAudioLogger` |
| `GInterface81` | `Audio.QueueSpeakerSystem.IQueueSpeaker` |
| `GClass1114` | `Audio.QueueSpeakerSystem.PhraseQueueSpeaker` |
| `GClass1114+Struct202` | `Audio.QueueSpeakerSystem.PhraseQueueSpeaker+QueueData` |
| `GClass1113` | `Audio.QueueSpeakerSystem.QueueSpeakerBase` |
| `ClientBroadcastSyncControllerClass` | `Audio.RadioSystem.ClientBroadcastSyncController` |
| `GInterface79` | `Audio.RadioSystem.IBroadcastDataProvider` |
| `GInterface80` | `Audio.RadioSystem.IBroadcastPlayer` |
| `GClass894` | `Audio.ReleaseListener` |
| `GInterface78` | `Audio.ReverbSubsystem.IReverberated` |
| `GClass1128` | `Audio.SpatialSystem.AbstractSpatialAudioCalculator` |
| `GClass1136` | `Audio.SpatialSystem.AsyncRaycaster` |
| `GClass1131` | `Audio.SpatialSystem.AsyncSoundObstructionCalculator` |
| `GClass1119` | `Audio.SpatialSystem.AudioBakeDataReader` |
| `GClass1120` | `Audio.SpatialSystem.AudioBakeDataSerializer` |
| `GClass1121` | `Audio.SpatialSystem.AudioBakeDataWriter` |
| `GStruct88` | `Audio.SpatialSystem.AudioNode` |
| `GClass1122` | `Audio.SpatialSystem.AudioRoomStorage` |
| `SourceContainerClass` | `Audio.SpatialSystem.AudioSourceContainer` |
| `GClass1173` | `Audio.SpatialSystem.AudioSourceContainers.AudioSourceContainerData` |
| `GClass1142` | `Audio.SpatialSystem.CombinedSpatialAudioOccluder` |
| `GClass1143` | `Audio.SpatialSystem.ContinuousPropagatedSpatialAudioOccluder` |
| `GClass1144` | `Audio.SpatialSystem.ContinuousSpatialAudioOccluder` |
| `GClass1149` | `Audio.SpatialSystem.EmptyAudioRoom` |
| `Struct206` | `Audio.SpatialSystem.FastClearCostsJob` |
| `GClass1132` | `Audio.SpatialSystem.FastSoundObstructionCalculator` |
| `GClass1145` | `Audio.SpatialSystem.FastSpatialAudioOccluder` |
| `GInterface86` | `Audio.SpatialSystem.IAudioOccluded` |
| `GClass1140` | `Audio.SpatialSystem.InteractiveObjectOccluder` |
| `GInterface85` | `Audio.SpatialSystem.ISpatialAudioCalculator` |
| `GInterface87` | `Audio.SpatialSystem.ISpatialAudioOccluder` |
| `GInterface88` | `Audio.SpatialSystem.ISpatialized` |
| `GClass1146` | `Audio.SpatialSystem.MultiSourceSpatialAudioOccluder` |
| `GClass1127` | `Audio.SpatialSystem.OcclusionParameters` |
| `GClass1123` | `Audio.SpatialSystem.OutdoorPortalsDataContainer` |
| `GClass1129` | `Audio.SpatialSystem.ParallelSoundPropagationCalculator` |
| `GClass1124` | `Audio.SpatialSystem.PortalDataBufferService` |
| `GClass1124+Struct203` | `Audio.SpatialSystem.PortalDataBufferService+PendingUpdate` |
| `Struct205` | `Audio.SpatialSystem.PropagationEffectCalculationJob` |
| `Struct204` | `Audio.SpatialSystem.PropagationJob` |
| `GClass1125` | `Audio.SpatialSystem.PropagationVolumesManager` |
| `GClass1147` | `Audio.SpatialSystem.RegularSpatialAudioOccluder` |
| `GClass1130` | `Audio.SpatialSystem.SoundObstructionCalculator` |
| `GClass1126` | `Audio.SpatialSystem.SoundOcclusionProcessor` |
| `GClass1152` | `Audio.SpatialSystem.SoundOcclusionVolumeDependentChecker` |
| `GClass1133` | `Audio.SpatialSystem.SoundPropagationCalculator` |
| `GClass1137` | `Audio.SpatialSystem.SoundPropagationJobScheduler` |
| `GStruct97` | `Audio.SpatialSystem.SpatialAudioCalculator.AggregateAndPrepareNextBatchJob` |
| `Struct214` | `Audio.SpatialSystem.SpatialAudioCalculator.AggregateResultsJob` |
| `GClass1165` | `Audio.SpatialSystem.SpatialAudioCalculator.AudioModuleNames` |
| `GStruct103` | `Audio.SpatialSystem.SpatialAudioCalculator.BatchProcessingOutput` |
| `GStruct107` | `Audio.SpatialSystem.SpatialAudioCalculator.CombinedOcclusionCalculator.AggregateOcclusionResult` |
| `GClass1171` | `Audio.SpatialSystem.SpatialAudioCalculator.CombinedOcclusionCalculator.FakeAudioOcclusionCalculator` |
| `GStruct106` | `Audio.SpatialSystem.SpatialAudioCalculator.Data.TransmissionPathResult` |
| `GClass1166` | `Audio.SpatialSystem.SpatialAudioCalculator.DiffractionDebugData` |
| `GStruct90` | `Audio.SpatialSystem.SpatialAudioCalculator.DiffractionPathResult` |
| `GStruct91` | `Audio.SpatialSystem.SpatialAudioCalculator.EdgeCheckResult` |
| `GClass1167` | `Audio.SpatialSystem.SpatialAudioCalculator.EdgeDiffractionCalculator` |
| `GClass1135` | `Audio.SpatialSystem.SpatialAudioCalculator.FakeSpatialAudioCalculator` |
| `GStruct98` | `Audio.SpatialSystem.SpatialAudioCalculator.FindAndAggregateNextBatchJob` |
| `GStruct92` | `Audio.SpatialSystem.SpatialAudioCalculator.FindEdgeCandidatesJob` |
| `GStruct99` | `Audio.SpatialSystem.SpatialAudioCalculator.FindShortestPathJob` |
| `GInterface89` | `Audio.SpatialSystem.SpatialAudioCalculator.IAudioOcclusionCalculator` |
| `GStruct101` | `Audio.SpatialSystem.SpatialAudioCalculator.PathPointInfo` |
| `Struct215` | `Audio.SpatialSystem.SpatialAudioCalculator.ProcessAndAggregateJob` |
| `GStruct93` | `Audio.SpatialSystem.SpatialAudioCalculator.ProcessEdgeSearchHitsJob` |
| `Struct216` | `Audio.SpatialSystem.SpatialAudioCalculator.ProcessHitsAndCombineJob` |
| `GStruct94` | `Audio.SpatialSystem.SpatialAudioCalculator.ProcessInitialHitsJob` |
| `GStruct100` | `Audio.SpatialSystem.SpatialAudioCalculator.ProcessReflectionHitsJob` |
| `GClass1168` | `Audio.SpatialSystem.SpatialAudioCalculator.ReflectionCalculator` |
| `GClass1168+Struct213` | `Audio.SpatialSystem.SpatialAudioCalculator.ReflectionCalculator+ClearPathPointInfosJob` |
| `GClass1169` | `Audio.SpatialSystem.SpatialAudioCalculator.ReflectionCalculatorUtils` |
| `GStruct102` | `Audio.SpatialSystem.SpatialAudioCalculator.ReflectionPathResult` |
| `GStruct105` | `Audio.SpatialSystem.SpatialAudioCalculator.ReflectionRayState` |
| `GStruct95` | `Audio.SpatialSystem.SpatialAudioCalculator.SelectBestEdgeJob` |
| `GStruct104` | `Audio.SpatialSystem.SpatialAudioCalculator.ShortestPathResultData` |
| `GClass1170` | `Audio.SpatialSystem.SpatialAudioCalculator.TransmissionCalculator` |
| `Class805` | `Audio.SpatialSystem.SpatialAudioCalculator.TransmissionCalculatorUtils` |
| `GStruct96` | `Audio.SpatialSystem.SpatialAudioCalculator.ValidateCandidatesJob` |
| `GClass1138` | `Audio.SpatialSystem.SpatialAudioDataContainer` |
| `GClass1138+Struct208` | `Audio.SpatialSystem.SpatialAudioDataContainer+PendingRoutes` |
| `GClass1138+Struct207` | `Audio.SpatialSystem.SpatialAudioDataContainer+RouteRange` |
| `GClass1139` | `Audio.SpatialSystem.SpatialAudioDataLoader` |
| `GClass1141` | `Audio.SpatialSystem.SpatialAudioOccluder` |
| `GClass1148` | `Audio.SpatialSystem.SpatialAudioOccluderFactory` |
| `GClass1134` | `Audio.SpatialSystem.SpatialAudioOcclusionCombinedCalculator` |
| `GClass1150` | `Audio.SpatialSystem.SpatialAudioPortalLogger` |
| `GClass1151` | `Audio.SpatialSystem.SpatialAudioRoomLogger` |
| `GClass1153` | `Audio.SpatialSystem.Utils.DirectionalWeightCalculator` |
| `GStruct89` | `Audio.SpatialSystem.Utils.DirectionalWeights` |
| `GClass1154` | `Audio.SpatialSystem.Utils.DistancePercentageCalculator` |
| `GClass1155` | `Audio.SpatialSystem.Utils.FilterCutoffCalculator` |
| `GClass1156` | `Audio.SpatialSystem.Utils.FloorHeightCalculator` |
| `GClass1158` | `Audio.SpatialSystem.Utils.GUIUtils` |
| `GClass1159` | `Audio.SpatialSystem.Utils.Octree` |
| `GClass1159+Class797` | `Audio.SpatialSystem.Utils.Octree+Node` |
| `GClass1160` | `Audio.SpatialSystem.Utils.PositionChangeChecker` |
| `GClass1161` | `Audio.SpatialSystem.Utils.ResonanceCalculator` |
| `GClass1162` | `Audio.SpatialSystem.Utils.SoundOcclusionUtils` |
| `GClass1163` | `Audio.SpatialSystem.Utils.SpatialAudioCalculatorPoolFactory` |
| `GClass1164` | `Audio.SpatialSystem.Utils.SpatialAudioSystemPoolService` |
| `GClass1164+Class799` | `Audio.SpatialSystem.Utils.SpatialAudioSystemPoolService+PendingReturn` |
| `GClass1164+Class798` | `Audio.SpatialSystem.Utils.SpatialAudioSystemPoolService+PoolInfo` |
| `Class804` | `Audio.SpatialSystem.Utils.StairsOcclusionTransition` |
| `GClass1111` | `Audio.TransformPositionTracker` |
| `GInterface77` | `Audio.Vehicles.BTR.IRotationTracker` |
| `GInterface76` | `Audio.Vehicles.ISoundSuspensionController` |
| `GInterface74` | `Audio.Vehicles.ITurretSoundController` |
| `GInterface75` | `Audio.Vehicles.IVehicleSoundContext` |
| `Class774` | `Audio.Vehicles.VehicleSoundAbstractState` |
| `Class777` | `Audio.Vehicles.VehicleSoundIdleState` |
| `Class778` | `Audio.Vehicles.VehicleSoundRunningState` |
| `Class775` | `Audio.Vehicles.VehicleSoundStartState` |
| `Class776` | `Audio.Vehicles.VehicleSoundStopState` |
| `GInterface73` | `Audio.Weapons.IWeaponModAudioController` |
| `GClass988` | `Audio2DPlayer` |
| `Class536` | `AudioQueue` |
| `Class536+Class537` | `AudioQueue+Sample` |
| `GClass891` | `AudioSample` |
| `GClass885` | `AudioSourcePrewarmer` |
| `GEventArgs0` | `AudioTriggerAreaEventArgs` |
| `GClass937` | `AutoExchange` |
| `GClass937+GStruct62` | `AutoExchange+AutoExchangeData` |
| `GClass801` | `AverageDouble` |
| `GClass802` | `AverageFloat` |
| `GClass803` | `AverageVector3` |
| `GClass17` | `AVGValueChangeMeasurer` |
| `GClass17+GClass18` | `AVGValueChangeMeasurer+Counter` |
| `GClass48` | `AvoidDangerLayer` |
| `Class304` | `Backend` |
| `Class304+Class386` | `Backend+BackendLogger` |
| `Class310` | `BackendCache` |
| `Class310+Class387` | `BackendCache+BackendCacheLogger` |
| `Class311` | `BackendCacheExtension` |
| `GException0` | `BackendException` |
| `Class312` | `BackendRequestParams` |
| `GException2` | `BackendServerSideException` |
| `GException1` | `BackendWithCodeException` |
| `GClass735` | `BadValueLogTracker` |
| `GClass102` | `BaseAbstractKojaniyLayer` |
| `GClass670` | `BaseBotsEvent` |
| `GClass69` | `BaseBTRLayer` |
| `GClass468` | `BaseDecisionLogic` |
| `BaseLogicLayerSimpleAbstractClass` | `BaseLogicLayer` |
| `BaseLogicLayerAbstractClass` | `BaseLogicLayerSimple` |
| `GClass177` | `BaseNode` |
| `GClass917` | `BasePlayerCulling` |
| `GClass917+Class560` | `BasePlayerCulling+CullingStateToggle` |
| `GClass418` | `BaseReachablEditor` |
| `BetterAudio+Class510` | `BetterAudio+BetterSourceFactory` |
| `BetterAudio+IAudioSourceGroups` | `BetterAudio+ISourceGroup` |
| `BetterAudio+GClass887` | `BetterAudio+NonspatialAudioMixer` |
| `BetterAudio+GClass886` | `BetterAudio+NonSpatialBypassAudioMixer` |
| `GClass888` | `BetterAudioQueue` |
| `BetterSource+GInterface35` | `BetterSource+IReleaseListener` |
| `GClass908` | `BetterValProcessor` |
| `GClass1280` | `BezierSplineTools.Bezier` |
| `GClass466` | `BigPipeBotWeaponSelector` |
| `GClass479` | `BigPipeEnemyChooser` |
| `GClass63` | `BigPipeFightLayer` |
| `GClass76` | `BirdEyeAbstractLayer` |
| `GClass77` | `BirdEyeFightLayer` |
| `GClass78` | `BirdEyeHoldLayer` |
| `GClass79` | `BirdEyePatrolLayer` |
| `GClass1363` | `BitPacking.BitReader` |
| `GClass1364` | `BitPacking.BitReaderStream` |
| `GClass1365` | `BitPacking.BitsHelper` |
| `GClass1365+GClass1366` | `BitPacking.BitsHelper+Enum` |
| `GClass1365+Class919` | `BitPacking.BitsHelper+EnumToByte` |
| `GClass1365+Class913` | `BitPacking.BitsHelper+EnumToInt` |
| `GClass1365+Class915` | `BitPacking.BitsHelper+EnumToLong` |
| `GClass1365+Class917` | `BitPacking.BitsHelper+EnumToShort` |
| `GClass1372` | `BitPacking.BitStreamExtensions` |
| `GClass1367` | `BitPacking.BitWriter` |
| `GClass1368` | `BitPacking.BitWriterStream` |
| `GStruct133` | `BitPacking.DoubleULong` |
| `FloatQuantizerStruct` | `BitPacking.FloatQuantizer` |
| `GStruct135` | `BitPacking.FloatUInt` |
| `GClass1371` | `BitPacking.HexHelper` |
| `GInterface127` | `BitPacking.IBitReader` |
| `IDataReader` | `BitPacking.IBitReaderStream` |
| `ISerializer` | `BitPacking.IBitStream` |
| `IMeasureStatistics` | `BitPacking.IBitWriter` |
| `GInterface131` | `BitPacking.IBitWriterStream` |
| `GException10` | `BitPacking.InvalidMaxSizeException` |
| `GStruct136` | `BitPacking.LimitedFloatSerializationSettings` |
| `GStruct137` | `BitPacking.LimitedIntSerializationSettings` |
| `GClass1373` | `BitPacking.QuaternionQuantizer` |
| `GClass1374` | `BitPacking.SerializationHelpers` |
| `GClass1376` | `BitPacking.SerializationHelpersVector2Quantizer` |
| `GClass1377` | `BitPacking.SerializationHelpersVector3Quantizer` |
| `GClass1375` | `BitPacking.Vector2Quantizer` |
| `GClass1378` | `BitPacking.Vector3Quantizer` |
| `GClass956` | `BloodDrop` |
| `GStruct64` | `BloodDropData` |
| `GClass957` | `BloodDropPlacer` |
| `GClass958` | `BloodDropsController` |
| `GClass50` | `BoarAbstractLayer` |
| `GClass51` | `BoarAbstractPatrolLayer` |
| `GClass49` | `BoarAvoidDangerLayer` |
| `GClass55` | `BoarBossFightLayer` |
| `GClass52` | `BoarClosePatrolLayer` |
| `GClass472` | `BoarEnemyController` |
| `GClass540` | `BoarEnemyInfo` |
| `GClass56` | `BoarFightAbstractLayer` |
| `GClass53` | `BoarPatrolLayer` |
| `GClass57` | `BoarSniperEnemyLayer` |
| `GClass59` | `BoarSniperTargetLayer` |
| `BodyPartCollider+IPlayerBridge` | `BodyPartCollider+IObserverToPlayerBridge` |
| `BodyRendererDataStruct` | `BodyRenderer` |
| `BoidController+GClass874` | `BoidController+BoidProperties` |
| `Class500` | `BokehRenderer` |
| `GClass430` | `BossBoar` |
| `GClass312` | `BossBoarLayersStrategy` |
| `GClass54` | `BossBoarPatrolLayer` |
| `GClass431` | `BossBoarSniper` |
| `GClass313` | `BossBoarSniperLayersStrategy` |
| `GClass60` | `BossBullyLayer` |
| `GClass314` | `BossBullyLayersStrategy` |
| `GClass432` | `BossDecider` |
| `GClass433` | `BossDeciderFollower` |
| `GClass520` | `BossDeciderSubTactic` |
| `GClass453` | `BossFinder` |
| `GClass435` | `BossGluhar` |
| `GClass66` | `BossGluharFightLayer` |
| `GClass470` | `BossGluharFollowersSearchData` |
| `GClass338` | `BossGluharLayersStrategy` |
| `GClass521` | `BossGluharSubTactic` |
| `GClass436` | `BossKilla` |
| `GClass156` | `BossKillaAgroFightLayerClose` |
| `GClass315` | `BossKillaAgroLayersStrategy` |
| `GClass47` | `BossKillaAgroSearchLayer` |
| `GClass62` | `BossKillaLayer` |
| `GClass471` | `BossKillaSearchData` |
| `GClass522` | `BossKillaSubTactic` |
| `GClass440` | `BossKnight` |
| `GClass80` | `BossKnightFightLayer` |
| `BossKnightBrainClass` | `BossKnightLayersStrategy` |
| `GClass446` | `BossKojaniy` |
| `GClass104` | `BossKojaniyLayer` |
| `GClass357` | `BossKojaniyLayersStrategy` |
| `GClass441` | `BossKolontay` |
| `GClass109` | `BossKolontayBaseFightLayer` |
| `GClass110` | `BossKolontayFightLayer` |
| `GClass343` | `BossKolontayLayersStrategy` |
| `GClass111` | `BossKolontaySoloFight` |
| `GClass442` | `BossPartisan` |
| `GClass316` | `BossPartisanLayersStrategy` |
| `GClass378` | `BossSanitar` |
| `GClass147` | `BossSanitarFightLayer` |
| `GClass317` | `BossSanitarLayersStrategy` |
| `GClass444` | `BossSectactPriestEvent` |
| `GClass448` | `BossSectantPriest` |
| `GClass447` | `BossSectantPriestCrossSanitar` |
| `GClass675` | `BossSpawnsByQuests` |
| `GClass523` | `BossStormtrooperSubTactic` |
| `GClass437` | `BossTagilla` |
| `GClass157` | `BossTagillaAbstractLayer` |
| `GClass438` | `BossTagillaAgro` |
| `GClass158` | `BossTagillaAgroFightLayer` |
| `GClass159` | `BossTagillaAgroFightLayerClose` |
| `GClass318` | `BossTagillaAgroLayersStrategy` |
| `GClass160` | `BossTagillaAmbushLayer` |
| `GClass434` | `BossTagillaHelper` |
| `GClass161` | `BossTagillaHelpsKillaLayer` |
| `GClass319` | `BossTagillaLayersStrategy` |
| `GClass162` | `BossTagillaMainLayer` |
| `GClass320` | `BossTestLayersStrategy` |
| `GClass445` | `BossWithStayFollowersPosition` |
| `ZyriachyBossLogicClass` | `BossZryachiy` |
| `GClass321` | `BossZryachiyLayersStrategy` |
| `GClass450` | `BossZryachiyPeacefull` |
| `GClass451` | `BossZryachiyRavange` |
| `GClass484` | `BotAbstractMeds` |
| `GClass485` | `BotAbstractMedsToPart` |
| `BotAimingClass` | `BotAimingData` |
| `GClass783` | `BotAISteeringImpostorCharacterController` |
| `GClass516` | `BotArtillerySuppress` |
| `GClass456` | `BotBossFollowers` |
| `BossSpawnerClass` | `BotBossSpawn` |
| `BossSpawnerClass+GClass669` | `BotBossSpawn+BossSpawnProcess` |
| `GClass806` | `BotConfigurationDataStore` |
| `BotGlobalsCoreSettingsClass` | `BotCoreSettings` |
| `BotCreationDataClass` | `BotCreationData` |
| `BotCreatorClass` | `BotCreatorClient` |
| `BotCurrentCoverInfoClass` | `BotCurrentCoverInfo` |
| `ScatteringSettingsClass` | `BotCurrentScatteringSetting` |
| `GClass615` | `BotCurrentSettings` |
| `GClass579` | `BotDamageData` |
| `GClass429` | `BotData` |
| `GClass402` | `BotDebugMemory` |
| `GClass633` | `BotDistanceStat` |
| `GClass528` | `BotDistCheck` |
| `GClass474` | `BotEnemiesMissController` |
| `GClass671` | `BotEventsPriority` |
| `GClass483` | `BotFindPlaceToShoot` |
| `BotFirstAidClass` | `BotFirstAid` |
| `GClass545` | `BotFrameMoveContext` |
| `BotFriendlyTilt+Class261` | `BotFriendlyTilt+TiltPLayerRequests` |
| `Class19` | `BotGenerateRequestParams` |
| `CoreBotSettingsClass` | `BotGlobalsCoreSettings` |
| `GoalTargetClass` | `BotGoalTarget` |
| `BotCurrentEnemiesClass` | `BotGroupCurrentEnemies` |
| `GClass573` | `BotGroupDangerAreas` |
| `BotSettingsClass` | `BotGroupEnemyInfo` |
| `GClass672` | `BotHalloweenCrowdSpawn` |
| `GClass672+Class337` | `BotHalloweenCrowdSpawn+PlayerCrowdSpawnInfo` |
| `GClass673` | `BotHalloweenDistributions` |
| `GClass674` | `BotHalloweenEventPursuit` |
| `LocalBotSettingsProviderClass` | `BotInternalSettingsController` |
| `GClass191` | `BotKhorovodNode` |
| `CultistEventsClass` | `BotLighthouseKeeperFriendlySectantsLogic` |
| `GClass492` | `BotLocalAvoidance` |
| `GClass626` | `BotMapStats` |
| `GClass459` | `BotMeleeAssaultData` |
| `GClass517` | `BotMGSuppress` |
| `GClass515` | `BotMoveByReservWay` |
| `GClass493` | `BotMoverBTR` |
| `GClass496` | `BotMoverDebug` |
| `GClass496+Struct14` | `BotMoverDebug+DebugImpostorStruct` |
| `GClass494` | `BotMoverImpostor` |
| `GClass497` | `BotMoverInertion` |
| `GClass546` | `BotMoverLogicCollector` |
| `GClass495` | `BotMoverSimple` |
| `GClass547` | `BotMoverState` |
| `GClass548` | `BotMoverStateMachine` |
| `BotObserveDataClass` | `BotObserveData` |
| `GClass503` | `BotObserverVertical` |
| `GClass403` | `BotOwnerGizmos` |
| `PathControllerClass` | `BotPathController` |
| `BotPathFinderClass` | `BotPathFinderCorePoints` |
| `GClass526` | `BotPatrolItemDrop` |
| `GClass504` | `BotPointControl` |
| `GClass684` | `BotProfileBackuploader` |
| `BotsPresets` | `BotProfileClient` |
| `GClass710` | `BotProfilesLogger` |
| `GClass532` | `BotReceiverGestus` |
| `GClass461` | `BotReloadMagazine` |
| `GClass462` | `BotReloadMelee` |
| `GClass463` | `BotReloadOnlyBarrel` |
| `GClass464` | `BotReloadRevolver` |
| `GStruct24` | `BotRunDebug` |
| `BotScatteringDataClass` | `BotScatteringData` |
| `GClass412` | `BotsConnections` |
| `BotDifficultySettingsClass` | `BotSettings` |
| `GClass619` | `BotSettingsComponentsMerger` |
| `GClass620` | `BotSettingsController` |
| `GClass621` | `BotSettingsDebug` |
| `BotLastBlindEffectModifierClass` | `BotSettingsInGameModif` |
| `GClass628` | `BotsGlobalStaistics` |
| `BotsClass` | `BotsList` |
| `GClass413` | `BotsPairData` |
| `GClass629` | `BotsProfilesAskingStats` |
| `GClass498` | `BotSteeringWithConstrains` |
| `GClass491` | `BotStimulators` |
| `GClass519` | `BotSuppressData` |
| `GClass489` | `BotSurgicalKit` |
| `GClass535` | `BotTalkElement` |
| `GClass530` | `BotTargeting` |
| `GClass533` | `BotTraderServiceFriendlyBase` |
| `BotUnderbarrelLauncherController+Struct11` | `BotUnderbarrelLauncherController+EnemyHysteresisEvaluation` |
| `BossLogicClass` | `BotWavesOptimization` |
| `GClass465` | `BotWeaponPresetCollection` |
| `GClass612` | `BotWeaponScattering` |
| `GClass575` | `BotZoneGroups` |
| `ZoneLeaveControllerClass` | `BotZonesLeaveController` |
| `BouncingObject+Struct74` | `BouncingObject+Jump` |
| `GStruct54` | `BoundsSerializer` |
| `GStruct30` | `BoxOverlapCommand` |
| `GStruct31` | `BoxOverlapCommandResult` |
| `GInterface57` | `BSG.CameraEffects.ITextureMaskHolder` |
| `GClass1079` | `Bsg.GameSettings.Accessor` |
| `GClass1071` | `Bsg.GameSettings.BaseSettingsController` |
| `GClass1078` | `Bsg.GameSettings.GameSettingProxy` |
| `GInterface62` | `Bsg.GameSettings.IAccessor` |
| `GInterface63` | `Bsg.GameSettings.IPresetManager` |
| `GInterface65` | `Bsg.GameSettings.ISettingsGroupFactory` |
| `GInterface64` | `Bsg.GameSettings.ISettingsProvider` |
| `GClass1087` | `Bsg.GameSettings.Json.BaseJsonSettingsProvider` |
| `GClass1087+GInterface66` | `Bsg.GameSettings.Json.BaseJsonSettingsProvider+IJsonSerializer` |
| `GClass1091` | `Bsg.GameSettings.Json.GameSettingsJsonConverter` |
| `GClass1088` | `Bsg.GameSettings.Json.JsonDirectSettingsProvider` |
| `GClass1089` | `Bsg.GameSettings.Json.JsonFileSettingsProvider` |
| `GClass1092` | `Bsg.GameSettings.Json.JsonMigrationUtils` |
| `GClass1090` | `Bsg.GameSettings.Json.JsonResourceSettingsProvider` |
| `GClass1095` | `Bsg.GameSettings.Json.LocalJsonPresetManager` |
| `GClass1093` | `Bsg.GameSettings.Json.SimpleJsonSerializer` |
| `GClass1094` | `Bsg.GameSettings.Json.VersionJsonSerializer` |
| `GClass1094+GInterface67` | `Bsg.GameSettings.Json.VersionJsonSerializer+IVersion` |
| `GClass1081` | `Bsg.GameSettings.SettingsGroup` |
| `GClass1080` | `Bsg.GameSettings.SettingsPreset` |
| `Class494` | `BuffersExtension` |
| `Class1123` | `BuildInfo` |
| `GClass897` | `BulletSoundsUtils` |
| `GClass973` | `ByPriorityComparer1` |
| `GClass811` | `CDebug` |
| `GClass786` | `ChangeNicknameStatus` |
| `GClass779` | `CharacterControllerCommonMethods` |
| `GInterface164` | `ChartAndGraph.Axis.IAxisGenerator` |
| `ChartAndGraph.AxisBase+Class1063` | `ChartAndGraph.AxisBase+TextData` |
| `GAttribute21` | `ChartAndGraph.CanvasAttribute` |
| `Class1082` | `ChartAndGraph.CanvasChartMesh` |
| `ChartAndGraph.CanvasLines+Struct271` | `ChartAndGraph.CanvasLines+Line` |
| `ChartAndGraph.CanvasLines+Class1065` | `ChartAndGraph.CanvasLines+LineSegement` |
| `GClass1664` | `ChartAndGraph.ChartCommon` |
| `GClass1664+Class1071` | `ChartAndGraph.ChartCommon+IntComparer` |
| `GClass1666` | `ChartAndGraph.ChartDataSourceBaseCollection` |
| `Class1072` | `ChartAndGraph.ChartDateUtility` |
| `GClass1669` | `ChartAndGraph.ChartMeshBase` |
| `Class1088` | `ChartAndGraph.ChartSparseDataSource` |
| `Class1088+Struct272` | `ChartAndGraph.ChartSparseDataSource+KeyElement` |
| `Struct273` | `ChartAndGraph.Common.ChartItemIndex` |
| `Class1073` | `ChartAndGraph.DataSource.ChartColumnCollection` |
| `Class1085` | `ChartAndGraph.DataSource.ChartDataColumn` |
| `Class1084` | `ChartAndGraph.DataSource.ChartDataItemBase` |
| `Class1086` | `ChartAndGraph.DataSource.ChartDataRow` |
| `Class1087` | `ChartAndGraph.DataSource.ChartDataSourceBase` |
| `Class1087+EventArgs0` | `ChartAndGraph.DataSource.ChartDataSourceBase+DataValueChangedEventArgs` |
| `Class1074` | `ChartAndGraph.DataSource.ChartRowCollection` |
| `GInterface163` | `ChartAndGraph.DataSource.IDataItem` |
| `GStruct158` | `ChartAndGraph.DoubleVector2` |
| `GStruct159` | `ChartAndGraph.DoubleVector3` |
| `GClass1665` | `ChartAndGraph.DoubleVector4` |
| `ChartAndGraph.GraphChart+Class1075` | `ChartAndGraph.GraphChart+CategoryObject` |
| `ChartAndGraph.GraphChartBase+GClass1667` | `ChartAndGraph.GraphChartBase+GraphEventArgs` |
| `ChartAndGraph.GraphData+Class1078` | `ChartAndGraph.GraphData+Slider` |
| `ChartAndGraph.GraphData+GClass1668` | `ChartAndGraph.GraphData+VectorComparer` |
| `GInterface162` | `ChartAndGraph.ICanvas` |
| `Interface7` | `ChartAndGraph.IChartMesh` |
| `Interface6` | `ChartAndGraph.InternalItemEvents` |
| `GAttribute22` | `ChartAndGraph.NonCanvasAttribute` |
| `GClass1671` | `ChartAndGraph.PathMultiplier` |
| `GAttribute23` | `ChartAndGraph.SimpleAttribute` |
| `GClass1670` | `ChartAndGraph.WorldSpaceChartMesh` |
| `GDelegate33` | `ChatSendDelegate` |
| `GClass1049` | `ChatShared.ChatCommunicatorFactory` |
| `GClass1055` | `ChatShared.ChatContacts` |
| `GClass1065` | `ChatShared.ChatMessageItems` |
| `GStruct87` | `ChatShared.ChatMessageProfileEvent` |
| `GClass1061` | `ChatShared.ChatMessagesList` |
| `GClass1061+GClass1063` | `ChatShared.ChatMessagesList+ChatMessageAttachmentSerializer` |
| `GClass1061+GClass1062` | `ChatShared.ChatMessagesList+ChatMessageParamsSerializer` |
| `GClass1061+GClass1064` | `ChatShared.ChatMessagesList+DialogueChatMessageSerializer` |
| `GClass1060` | `ChatShared.ChatMessageSystemData` |
| `GClass1059` | `ChatShared.ChatRoomInformation` |
| `GClass1051` | `ChatShared.ChatRoomState` |
| `ChatServerClass` | `ChatShared.ChatServerState` |
| `ChatMessageClass` | `ChatShared.DialogueChatMessage` |
| `ChatMessageClass+GClass1067` | `ChatShared.DialogueChatMessage+ChatMessageParams` |
| `GClass1056` | `ChatShared.FriendsInvitation` |
| `GClass1057` | `ChatShared.FriendsInvitationSerializer` |
| `GClass1068` | `ChatShared.MessageQuote` |
| `GClass1052` | `ChatShared.Proxy4IChatHandle` |
| `GClass1053` | `ChatShared.Proxy4IChatMember` |
| `GClass1054` | `ChatShared.Proxy4IChatsSession` |
| `DialogueClass` | `ChatShared.UpdatableChatDialogue` |
| `GClass1058` | `ChatShared.UpdatableChatMemberSerializer` |
| `GClass1070` | `ChatShared.UpdatableFriendsInvitation` |
| `GClass693` | `CheckPoisitonDataCarePlayers` |
| `GClass693+GClass695` | `CheckPoisitonDataCarePlayers+CheckPlayerCareDist` |
| `GClass693+GClass694` | `CheckPoisitonDataCarePlayers+CheckPlayerCarePlayers` |
| `GClass719` | `CILogger` |
| `CirclePacker+GClass959` | `CirclePacker+Circle` |
| `Class587` | `CircularArray` |
| `GStruct55` | `ClampValue` |
| `GClass807` | `ClassStateStorage` |
| `GClass807+Struct83` | `ClassStateStorage+FieldDefault` |
| `GAttribute9` | `ClassStateStorageIgnoreAttribute` |
| `Class7` | `ClientAirdropLootRequestParams` |
| `GClass646` | `ClientBackendExtension` |
| `Class4` | `ClientGameHardwareCodeRequestParams` |
| `Class3` | `ClientGameModeRequestParams` |
| `Class5` | `ClientGameVersionRequestParams` |
| `GClass903` | `ClientLoginResult` |
| `GClass925` | `ClothingIconCreator` |
| `GClass853` | `CollectionUtils` |
| `GClass780` | `CollidersHelper` |
| `GClass808` | `ColorUtilities` |
| `GClass1515` | `Comfort.BufferExtension` |
| `GClass1001` | `CommandBufferManager` |
| `GClass9` | `CommandLineReader` |
| `GAttribute4` | `CommentAttribute` |
| `GClass1514` | `CommonAssets.Plugins.Comfort.ListExtensions` |
| `GClass308` | `CommonAssets.Scripts.AI.CustomBehaviourNodes.Debug.DebugUnderbarrelLauncherNode` |
| `GStruct150` | `CommonAssets.Scripts.ArtilleryShelling.AlarmStage` |
| `MineDataClass` | `CommonAssets.Scripts.ArtilleryShelling.ArtilleryProjectileExplosiveItem` |
| `ArtilleryServerProjectileClass` | `CommonAssets.Scripts.ArtilleryShelling.ArtilleryProjectileServer` |
| `GClass1507` | `CommonAssets.Scripts.ArtilleryShelling.ArtilleryServerProjectilesPool` |
| `GClass1508` | `CommonAssets.Scripts.ArtilleryShelling.Client.ArtilleryAlarmLogic` |
| `GClass1510` | `CommonAssets.Scripts.ArtilleryShelling.Client.ArtilleryClientProjectilesPool` |
| `ClientShellingControllerClass` | `CommonAssets.Scripts.ArtilleryShelling.Client.ArtilleryShellingControllerClient` |
| `GClass1513` | `CommonAssets.Scripts.ArtilleryShelling.Client.Audio.ArtilleryShellingSoundControllerClient` |
| `GClass1509` | `CommonAssets.Scripts.ArtilleryShelling.Client.PlayerAlarmStage` |
| `GClass1511` | `CommonAssets.Scripts.ArtilleryShelling.Client.ShellingZoneState` |
| `GClass1499` | `CommonAssets.Scripts.Audio.GlobalAudioSettings` |
| `GClass1499+GClass1500` | `CommonAssets.Scripts.Audio.GlobalAudioSettings+RadioBroadcastSettings` |
| `GClass1499+GClass1500+GClass1501` | `CommonAssets.Scripts.Audio.GlobalAudioSettings+RadioBroadcastSettings+RadioStationSettings` |
| `GClass1502` | `CommonAssets.Scripts.Audio.PlayerSelfInflictedDamageThresholdAudioChecker` |
| `GClass1503` | `CommonAssets.Scripts.Audio.RadioSystem.ExclusiveObjectsRandomizer` |
| `GInterface147` | `CommonAssets.Scripts.Audio.RadioSystem.IRadioBroadcastController` |
| `GInterface148` | `CommonAssets.Scripts.Audio.RadioSystem.IRadioStation` |
| `GClass1504` | `CommonAssets.Scripts.Audio.RadioSystem.ServerRadioStation` |
| `CommonAssets.Scripts.Game.EndByExitTrigerScenario+GInterface146` | `CommonAssets.Scripts.Game.EndByExitTrigerScenario+IGame` |
| `CommonAssets.Scripts.Game.EndByExitTrigerScenario+Class984` | `CommonAssets.Scripts.Game.EndByExitTrigerScenario+LocationEscape` |
| `ExfiltrationControllerClass` | `CommonAssets.Scripts.Game.ExfiltrationController` |
| `LabyrinthSyncableTrapClass` | `CommonAssets.Scripts.Game.LabyrinthEvent.LabyrinthSyncableTraps` |
| `LabyrinthSyncableTrapDataClass` | `CommonAssets.Scripts.Game.LabyrinthEvent.LocationLabyrinthTrapsData` |
| `GClass3543` | `CommonAssets.Scripts.GlobalEventsSystem.RainIntensityChangedEvent` |
| `GClass1494` | `CommonAssets.Scripts.Interactive.Sound.BaseLampSoundController` |
| `GInterface145` | `CommonAssets.Scripts.Interactive.Sound.ILampSoundController` |
| `GClass1495` | `CommonAssets.Scripts.Interactive.Sound.LoopLampSoundController` |
| `GInterface144` | `CommonAssets.Scripts.Utilities.ILockable` |
| `GClass1491` | `CommonAssets.Scripts.Utilities.Locker` |
| `GClass1492` | `CommonAssets.Scripts.Utilities.PlayerDebugSnapshotCreator` |
| `GClass1493` | `CommonAssets.Scripts.Utilities.ThresholdCounter` |
| `GClass991` | `ComponentCopyPaste` |
| `GClass809` | `ComponentExtensions` |
| `GClass862` | `ComponentHelper` |
| `CompositeDisposableClass` | `CompositeDisposable` |
| `GClass848` | `Compute` |
| `GClass916` | `ConcaveBorder` |
| `GClass4034` | `ConditionHideoutAreaProgressChecker` |
| `GClass4035` | `ConditionProgressCheckerEmpty` |
| `Class8` | `ConfirmPurchaseOperationParams` |
| `Class9` | `ConfirmPurchaseOperationParamsItem` |
| `Class10` | `ConfirmSellOperationParams` |
| `Class11` | `ConfirmSellOperationParamsItem` |
| `GClass10` | `ConsoleProDebug` |
| `GClass768` | `ContainerCollectionView` |
| `GClass768+GClass769` | `ContainerCollectionView+SlotView` |
| `GClass43` | `ControlBuildingLayer` |
| `GClass44` | `ControlBuildingNoTargetLayer` |
| `ControlledLampGroup+Struct72` | `ControlledLampGroup+MaterialEmissionInfo` |
| `GClass30` | `CoreActionResultGoToPoint` |
| `GClass26` | `CoreActionResultParams` |
| `GClass29` | `CoreActionResultParamsFlankMove` |
| `GClass531` | `CoverFinderAnalyzer` |
| `GClass380` | `CoverFindGraphFunc` |
| `GClass381` | `CoverFindGraphSearchData` |
| `GClass379` | `CoverFindLibrary` |
| `CoverPointMaster+GStruct10` | `CoverPointMaster+FriendCloseCoverData` |
| `GClass383` | `CoverPointMasterHelper` |
| `GClass367` | `CoverPointSaveData` |
| `GClass384` | `CoverSearchDataWithPrefDist` |
| `CoverSearchDefenceDataClass` | `CoverSearchDefenceData` |
| `GClass423` | `CoverWithPath` |
| `GClass207` | `CrawlNode` |
| `GClass649` | `Crc32` |
| `Class42` | `CreateGroupDialogRequestParams` |
| `Class17` | `CreateProfileRequestParams` |
| `Class1` | `CreateRaidGroupRequestParams` |
| `MathHelperClass` | `CSML.Complex` |
| `GClass1009` | `CSML.Matrix` |
| `CullingManager+Struct163` | `CullingManager+CullingJob` |
| `CullingManager+GClass996` | `CullingManager+CullingJobParameters` |
| `CullingManager+GStruct69` | `CullingManager+CullingObjectData` |
| `CullingManager+GStruct70` | `CullingManager+VisibilityData` |
| `GClass322` | `CursedAssaultLayersStrategy` |
| `GClass997` | `CustomCullingCommon` |
| `GClass879` | `CustomHandle` |
| `CustomHandle+GClass880` | `CustomHandle+ActualHandle` |
| `GClass879+GInterface33` | `CustomHandle+IResizableByHandle` |
| `Class13` | `CustomizationBuyOperationParams` |
| `Class20` | `CustomizationSetOperationParams` |
| `GStruct56` | `CustomRange` |
| `GClass873` | `CustomRangePlugin` |
| `GClass1047` | `Cutscene.AnimatorStateTimeline` |
| `GClass1048` | `Cutscene.InGameCutsceneController` |
| `GClass1042` | `CW2.AdditiveMeshBakeManager` |
| `GClass1042+Class739` | `CW2.AdditiveMeshBakeManager+MeshData` |
| `GClass1043` | `CW2.Animations.AnimMath` |
| `GClass1044` | `CW2.Animations.StateSerializer` |
| `DangerDataClass` | `DangerData` |
| `GClass201` | `DeactivateMineNode` |
| `GClass202` | `DeadBodiesWorkNode` |
| `GClass386` | `DeadBody` |
| `GStruct12` | `DebugAIDataStruct` |
| `GClass241` | `DebugAttackMovingTactical` |
| `GStruct13` | `DebugBotCoverStruct` |
| `DebugBotData+Class128` | `DebugBotData+ZoneCount` |
| `GClass405` | `DebugBotDataStore` |
| `BotDataStruct` | `DebugBotDataStructInner` |
| `GClass291` | `DebugBotDropItemNode` |
| `GClass407` | `DebugBotProfilesStruct` |
| `GClass406` | `DebugBotProfilesStructContainer` |
| `GStruct11` | `DebugBotSpawnStruct` |
| `ActorDataStruct` | `DebugBotStruct` |
| `GClass408` | `DebugBotStructWrapper` |
| `GClass292` | `DebugBotTakeItemNode` |
| `GStruct14` | `DebugBotVisionStruct` |
| `GClass293` | `DebugCanThrowFromCover` |
| `GClass404` | `DebugCoverDataInfo` |
| `GClass388` | `DebugCoverPointsLoggerCollector` |
| `GClass409` | `DebugCoversChecker` |
| `GStruct16` | `DebugEnemyPartVisionData` |
| `GStruct15` | `DebugEnemyVisionData` |
| `GClass810` | `DebugExtension` |
| `GClass294` | `DebugGestusNode` |
| `GClass295` | `DebugGetMeleeNode` |
| `GClass938` | `DebugGraph` |
| `GClass938+Class589` | `DebugGraph+Value` |
| `GClass296` | `DebugGrenadeNode` |
| `GStruct21` | `DebugGroupStruct` |
| `GStruct17` | `DebugHeathsDataStructInner` |
| `GClass297` | `DebugLayNode` |
| `GClass817` | `DebugLogHelper` |
| `GClass71` | `DebugLogicLayer` |
| `GClass666` | `DebugLogWrapper` |
| `GClass298` | `DebugMedsNode` |
| `GClass299` | `DebugMeleeAttackNode` |
| `GClass252` | `DebugMoveNode` |
| `GClass253` | `DebugMoveShuttleNode` |
| `GClass240` | `DebugMoveShuttleTacticalNode` |
| `GClass812` | `DebugOnce` |
| `GClass813` | `DebugOnceInRelease` |
| `GClass551` | `DebugPathController` |
| `GClass552` | `DebugPathElement` |
| `GClass300` | `DebugRotateHeadNode` |
| `GClass302` | `DebugRotateLayNode` |
| `GClass301` | `DebugRotateNode` |
| `GClass254` | `DebugRunToCloseCoverNode` |
| `GClass255` | `DebugRunToCover` |
| `GClass256` | `DebugRunToPointNode` |
| `GClass303` | `DebugShootFromCover` |
| `GClass304` | `DebugShootNode` |
| `GClass901` | `DebugSoundOcclusionLine` |
| `GClass306` | `DebugStationaryInstantNode` |
| `GClass305` | `DebugStationaryNode` |
| `CounterCreatorAbstractClass` | `DebugTimeMeasurer` |
| `CounterCreatorAbstractClass+GStruct3` | `DebugTimeMeasurer+Token` |
| `GClass865` | `DebugUtils` |
| `GClass307` | `DebugWeaponChangeNode` |
| `GClass257` | `DebugZigZagRunNode` |
| `GStruct22` | `DebugZoneInfoStruct` |
| `DecalSystem+Class624` | `DecalSystem+Decal` |
| `GClass410` | `DecisionProxy` |
| `GClass410+Class134` | `DecisionProxy+PreviousState` |
| `GClass452` | `DefaultBoss` |
| `GClass720` | `DefaultLogger` |
| `GClass905` | `DefaultRepairStrategy` |
| `GClass849` | `Deferred` |
| `DeferredDecals.DeferredDecalRenderer+DeferredDecalBufferClass` | `DeferredDecals.DeferredDecalRenderer+CameraData` |
| `DeferredDecals.DeferredDecalRenderer+DeferredDecalMeshDataClass` | `DeferredDecals.DeferredDecalRenderer+ManagedMesh` |
| `GClass537` | `DeferredDecision` |
| `GClass981` | `DestructionHelper` |
| `GStruct44` | `DevelopDataPacket` |
| `GClass1038` | `DG.Tweening.DOTweenExtensions` |
| `Class37` | `DialogPlayerRequestParams` |
| `Class35` | `DialogRequestParams` |
| `GClass1046` | `DialogSystem.Sound.EventDialogSoundscapeManager` |
| `GInterface61` | `DialogSystem.Sound.IDialogSoundscapeManager` |
| `GClass818` | `DictionaryListHydra` |
| `GClass818+GStruct48` | `DictionaryListHydra+ValuesEnumerator` |
| `GClass706` | `DiffMachine` |
| `GClass819` | `DigitsToColorExtension` |
| `Class403` | `DisplayLogger` |
| `GStruct117` | `Dissonance.Integrations.MirrorIgnorance.MirrorConn` |
| `GClass1276` | `Dissonance.Integrations.MirrorIgnorance.MirrorIgnoranceClient` |
| `GClass1277` | `Dissonance.Integrations.MirrorIgnorance.MirrorIgnoranceServer` |
| `TalkClass` | `Dissonance.Integrations.MirrorIgnorance.VoiceClient` |
| `DistantShadow+Class613` | `DistantShadow+CachedParameters` |
| `DistantShadow+Class614` | `DistantShadow+DrawRecord` |
| `GClass1642` | `Diz.Binding.BaseBindable` |
| `GClass1644` | `Diz.Binding.BaseBindableFilter` |
| `GClass1624` | `Diz.Binding.BindableDictionary` |
| `GClass1623` | `Diz.Binding.BindableDictionaryToListAdapter` |
| `OnEventClass` | `Diz.Binding.BindableEvent` |
| `GClass1627` | `Diz.Binding.BindableExtensions` |
| `GClass1645` | `Diz.Binding.BindableFilter` |
| `GClass1646` | `Diz.Binding.BindableFilter` |
| `GClass1647` | `Diz.Binding.BindableFilter` |
| `GClass1648` | `Diz.Binding.BindableFilter` |
| `GClass1649` | `Diz.Binding.BindableFilter` |
| `GClass1650` | `Diz.Binding.BindableFilter` |
| `GClass1651` | `Diz.Binding.BindableFilter` |
| `GClass1652` | `Diz.Binding.BindableFilter` |
| `GClass1653` | `Diz.Binding.BindableFilter` |
| `GClass1628` | `Diz.Binding.BindableList` |
| `GClass1639` | `Diz.Binding.BindableListGroup` |
| `GClass1640` | `Diz.Binding.BindableSortedList` |
| `BindableStateClass` | `Diz.Binding.BindableState` |
| `GClass1641` | `Diz.Binding.Binding` |
| `GClass1629` | `Diz.Binding.ConvertedBindableList` |
| `GClass1629+GDelegate63` | `Diz.Binding.ConvertedBindableList+Converter` |
| `GClass1629+Class1045` | `Diz.Binding.ConvertedBindableList+IndexItem` |
| `GClass1654` | `Diz.Binding.Counted` |
| `GClass1655` | `Diz.Binding.CountedList` |
| `GClass1656` | `Diz.Binding.FilteredList` |
| `GInterface152` | `Diz.Binding.IBindableEvent` |
| `GInterface153` | `Diz.Binding.IBindableIndexed` |
| `GInterface156` | `Diz.Binding.IBindableList` |
| `GInterface155` | `Diz.Binding.IBindableListWithEvent` |
| `IHandler` | `Diz.Binding.ICheckChanges` |
| `GInterface157` | `Diz.Binding.IUpdatableList` |
| `GClass1630` | `Diz.Binding.UpdatableBindableList` |
| `DependencyGraphClass` | `Diz.DependencyManager.DependencyGraph` |
| `DependencyGraphClass+GClass1661` | `Diz.DependencyManager.DependencyGraph+Token` |
| `DependencyGraphClass+GClass1659` | `Diz.DependencyManager.DependencyGraph+TokenBase` |
| `DependencyGraphClass+GClass1660` | `Diz.DependencyManager.DependencyGraph+TokenContainer` |
| `GInterface161` | `Diz.DependencyManager.ILoadable` |
| `GClass1662` | `Diz.DependencyManager.Node` |
| `GClass1663` | `Diz.DependencyManager.TokenExtensions` |
| `Class1030` | `Diz.Jobs.ContinuationProfiler` |
| `Class1031` | `Diz.Jobs.ExecuteConditionGeneral` |
| `Class1032` | `Diz.Jobs.ExecuteConditionJobFinish` |
| `Interface5` | `Diz.Jobs.IConditionExecutor` |
| `GInterface150` | `Diz.Jobs.IJobAwaitable` |
| `GInterface151` | `Diz.Jobs.IJobAwaiter` |
| `Class1028` | `Diz.Jobs.JobAwaitable` |
| `Class1029` | `Diz.Jobs.JobAwaiter` |
| `GException15` | `Diz.Jobs.JobCancelException` |
| `Struct263` | `Diz.Jobs.JobContinuation` |
| `Diz.Jobs.JobScheduler+GClass1619` | `Diz.Jobs.JobScheduler+Stats` |
| `JobYieldClass` | `Diz.Jobs.JobYield` |
| `JobYieldClass+GStruct157` | `Diz.Jobs.JobYield+Token` |
| `JobPriorityClass` | `Diz.Jobs.JobYieldPriority` |
| `GClass1622` | `Diz.Jobs.MovingAverage` |
| `GClass838` | `Diz.Jobs.SimpleAverage` |
| `GDelegate62` | `Diz.Jobs.YieldDelegate` |
| `IInventoryEventResult` | `Diz.LanguageExtensions.IOption` |
| `GClass1616` | `Diz.LanguageExtensions.None` |
| `OperationDataStruct` | `Diz.LanguageExtensions.OperationCreationResult` |
| `GStruct152` | `Diz.LanguageExtensions.OperationCreationResult` |
| `GStruct153` | `Diz.LanguageExtensions.OperationResult` |
| `GStruct154` | `Diz.LanguageExtensions.OperationResult` |
| `GStruct155` | `Diz.LanguageExtensions.Option` |
| `GStruct156` | `Diz.LanguageExtensions.Option` |
| `GClass1617` | `Diz.LanguageExtensions.OptionExtensions` |
| `GClass1523` | `Diz.LanguageExtensions.SkipError` |
| `GClass1522` | `Diz.LanguageExtensions.StringError` |
| `BundleLockClass` | `Diz.Resources.BundleLock` |
| `Diz.Resources.EasyAssets+Struct265` | `Diz.Resources.EasyAssets+IntermediateBundleDetails` |
| `EasyAssetHelperClass` | `Diz.Resources.EasyBundle` |
| `IBundleLock` | `Diz.Resources.IBundleLock` |
| `IEasyAssets` | `Diz.Resources.IEasyAssets` |
| `IEasyBundle` | `Diz.Resources.IEasyBundle` |
| `GClass1517` | `Diz.Utils.EnumerableExtensions` |
| `GClass1520` | `Diz.Utils.KeyProgress` |
| `GClass1518` | `Diz.Utils.LinqExtensions` |
| `GClass1521` | `Diz.Utils.ProgressExtensions` |
| `GClass1519` | `Diz.Utils.SimpleProgress` |
| `GClass1516` | `Diz.Utils.TaskWorker` |
| `GClass203` | `DogFightNode` |
| `GClass830` | `DoubleExponentiallySmoothedMovingAverage` |
| `GClass1281` | `DriveAnalyzing.DriveAnalyzer` |
| `GClass1281+Struct249` | `DriveAnalyzing.DriveAnalyzer+DeviceSeekPenaltyDescriptor` |
| `GClass1281+Struct250` | `DriveAnalyzing.DriveAnalyzer+StoragePropertyQuery` |
| `GClass820` | `DropManager` |
| `GClass820+GStruct49` | `DropManager+Tuple` |
| `GClass261` | `EatDrinkNode` |
| `GClass1045` | `Editor_Tools.BallisticCalculatorTool.BallisticCalculatorToolCore` |
| `GClass1045+GStruct84` | `Editor_Tools.BallisticCalculatorTool.BallisticCalculatorToolCore+AmmoData` |
| `GClass1045+GStruct85` | `Editor_Tools.BallisticCalculatorTool.BallisticCalculatorToolCore+BallisticData` |
| `GClass1045+GStruct86` | `Editor_Tools.BallisticCalculatorTool.BallisticCalculatorToolCore+MeasurementData` |
| `GAttribute3` | `EditorButtonAttribute` |
| `EditorsCoverPointDebugDataClass` | `EditorsCoverPointDebugData` |
| `GClass667` | `EditorStatic` |
| `EffectsController+Class642` | `EffectsController+CC_BlendAccumulator` |
| `EffectsController+Class635` | `EffectsController+CC_DoubleVisionAccumulator` |
| `EffectsController+Class634` | `EffectsController+CC_FastVignetteAccumulator` |
| `EffectsController+Class636` | `EffectsController+CC_HueFocusAccumulator` |
| `EffectsController+Class637` | `EffectsController+CC_RadialBlurAccumulator` |
| `EffectsController+Class638` | `EffectsController+CC_SharpenAccumulator` |
| `EffectsController+Class645` | `EffectsController+CC_WiggleAccumulator` |
| `EffectsController+Class641` | `EffectsController+DesaturateAccumulator` |
| `EffectsController+Class640` | `EffectsController+DesaturateMaskAccumulator` |
| `EffectsController+Class633` | `EffectsController+EffectAccumulator` |
| `EffectsController+Class643` | `EffectsController+FlashAccumulator` |
| `EffectsController+Class644` | `EffectsController+FOV_Accumulator` |
| `EffectsController+Class639` | `EffectsController+FrostbiteAccumulator` |
| `EffectsController+Interface4` | `EffectsController+IForceMaxValueOnStartAccumulator` |
| `EffectsController+Class646` | `EffectsController+MotionBlurAccumulator` |
| `EffectsController+Class647` | `EffectsController+ZombieInfection_Accumulator` |
| `EFT.AbstractGameSession+Class1103` | `EFT.AbstractGameSession+AcceptReject` |
| `EFT.AbstractGameSession+Class1098` | `EFT.AbstractGameSession+AcceptRequest` |
| `EFT.AbstractGameSession+Class1102` | `EFT.AbstractGameSession+AcceptResponse` |
| `EFT.AbstractGameSession+Class1105` | `EFT.AbstractGameSession+BattlEyeAnticheatPacket` |
| `EFT.AbstractGameSession+Class1106` | `EFT.AbstractGameSession+ProfileResources` |
| `EFT.AbstractGameSession+Class1107` | `EFT.AbstractGameSession+ProgressReport` |
| `EFT.AbstractGameSession+Class1104` | `EFT.AbstractGameSession+TotalProgressReport` |
| `EFT.AbstractGameSession+Class1100` | `EFT.AbstractGameSession+TraceMessage` |
| `EFT.AbstractGameSession+Class1099` | `EFT.AbstractGameSession+TraceMessageBase` |
| `EFT.AbstractGameSession+Class1101` | `EFT.AbstractGameSession+TraceMessageWithCode` |
| `GClass2325` | `EFT.AbstractSessionOperation` |
| `GStruct269` | `EFT.AcceptHitDebugDataPacket` |
| `GStruct272` | `EFT.AchievementConditionValueChangedData` |
| `AchievementTaskClass` | `EFT.Achievements.Achievement` |
| `GClass1638` | `EFT.Achievements.AchievementsBook` |
| `AbstractAchievementControllerClass` | `EFT.Achievements.AchievementsController` |
| `GClass4010` | `EFT.Achievements.AchievementsControllerClient` |
| `GStruct462` | `EFT.Achievements.AchievementsGlobalProgressDTO` |
| `GStruct461` | `EFT.Achievements.AchievementsListDTO` |
| `AchievementDataClass` | `EFT.Achievements.AchievementStatusData` |
| `GClass4061` | `EFT.Achievements.AchievementTemplate` |
| `GInterface519` | `EFT.Achievements.IAchievementView` |
| `GClass2586` | `EFT.ActiveHeadphones.ActiveHeadphones` |
| `GClass2587` | `EFT.ActiveHeadphones.ActiveHeadphonesController` |
| `GClass2590` | `EFT.ActiveHeadphones.ActiveHeadphonesDefaultConfigurator` |
| `GClass2592` | `EFT.ActiveHeadphones.ActiveHeadphonesEnvironmentCompressor` |
| `GClass2588` | `EFT.ActiveHeadphones.ActiveHeadphonesFactory` |
| `GClass2591` | `EFT.ActiveHeadphones.ActiveHeadphonesGunCompressor` |
| `GClass2593` | `EFT.ActiveHeadphones.ActiveHeadphonesThreeBandEQ` |
| `GClass2589` | `EFT.ActiveHeadphones.BaseActiveHeadphonesMixerDependentComponent` |
| `GClass2594` | `EFT.ActiveHeadphones.EQBandExposedParameters` |
| `GClass2595` | `EFT.ActiveHeadphones.Extensions` |
| `GClass2596` | `EFT.ActiveHeadphones.HeadphonesLocalTemplatesContainer` |
| `GInterface271` | `EFT.ActiveHeadphones.IActiveHeadphones` |
| `GInterface272` | `EFT.ActiveHeadphones.IActiveHeadphonesFactory` |
| `GInterface273` | `EFT.ActiveHeadphones.IHeadphonesTemplateComponent` |
| `PlayerSearchControllerClass` | `EFT.ActiveSearchController` |
| `GClass1838` | `EFT.AdditionalSlotsBonus` |
| `GClass1835` | `EFT.AdditionalStashRowsBonus` |
| `AddNoteDescriptorClass` | `EFT.AddNoteOperationDescriptor` |
| `GClass2303` | `EFT.AFKMonitor` |
| `GClass2656` | `EFT.Airdrop.AirdropDataReceiver` |
| `AirdropManagerAbstractClass` | `EFT.Airdrop.AirdropManager` |
| `AirdropLogicClass` | `EFT.Airdrop.ClientAirDrop` |
| `AirdropManagerClass` | `EFT.Airdrop.ClientAirdropManager` |
| `AirplaneLogicClass` | `EFT.Airdrop.ClientAirPlane` |
| `GInterface279` | `EFT.Airdrop.IAirdropDataSender` |
| `GClass2655` | `EFT.Airdrop.ProjectilesCollector` |
| `OfflineAirdropServerLogicClass` | `EFT.Airdrop.ServerAirDrop` |
| `AirdropEventClass` | `EFT.Airdrop.ServerAirdropManager` |
| `OfflineAirplaneServerLogicClass` | `EFT.Airdrop.ServerPlane` |
| `GClass2726` | `EFT.AnimatedInteractionsSubsystem.AnimatedInteractions` |
| `GClass2783` | `EFT.AnimatedInteractionsSubsystem.Controller.AnimatedInteractionsController` |
| `GInterface312` | `EFT.AnimatedInteractionsSubsystem.Controller.IAnimatedInteractionsController` |
| `GStruct326` | `EFT.AnimatedInteractionsSubsystem.Models.AnimatedInteractionCallback` |
| `GStruct327` | `EFT.AnimatedInteractionsSubsystem.Models.AnimatedInteractionInstruction` |
| `GClass2728` | `EFT.AnimatedInteractionsSubsystem.Models.AnimatedInteractionsModel` |
| `GClass2729` | `EFT.AnimatedInteractionsSubsystem.Models.BaseInteractionsModel` |
| `GClass2730` | `EFT.AnimatedInteractionsSubsystem.Models.BipodInteractionsModel` |
| `GClass2731` | `EFT.AnimatedInteractionsSubsystem.Models.ContainerInteractionsModel` |
| `GClass2732` | `EFT.AnimatedInteractionsSubsystem.Models.DoorInteractionsModel` |
| `GClass2733` | `EFT.AnimatedInteractionsSubsystem.Models.GearInteractionsModel` |
| `GClass2734` | `EFT.AnimatedInteractionsSubsystem.Models.GestureInteractionsModel` |
| `GInterface307` | `EFT.AnimatedInteractionsSubsystem.Models.IAnimatedInteractionsModel` |
| `GInterface308` | `EFT.AnimatedInteractionsSubsystem.Models.IAnimatedStates` |
| `GInterface309` | `EFT.AnimatedInteractionsSubsystem.Models.IGestureInteractionModel` |
| `GInterface310` | `EFT.AnimatedInteractionsSubsystem.Models.IInventoryInteractionsModel` |
| `GClass2735` | `EFT.AnimatedInteractionsSubsystem.Models.InventoryInteractionsModel` |
| `GClass2736` | `EFT.AnimatedInteractionsSubsystem.Models.ItemInteractionsModel` |
| `GClass2737` | `EFT.AnimatedInteractionsSubsystem.Models.LeftHandInteractionsModel` |
| `GClass2766` | `EFT.AnimatedInteractionsSubsystem.States.AllRightGestureInteractionState` |
| `GClass2741` | `EFT.AnimatedInteractionsSubsystem.States.BaseContainerInteractionState` |
| `GClass2750` | `EFT.AnimatedInteractionsSubsystem.States.BaseDoorInteractionState` |
| `GClass2759` | `EFT.AnimatedInteractionsSubsystem.States.BaseGearInteractionState` |
| `GClass2765` | `EFT.AnimatedInteractionsSubsystem.States.BaseGestureInteractionState` |
| `GClass2738` | `EFT.AnimatedInteractionsSubsystem.States.BaseInteractionState` |
| `GClass2777` | `EFT.AnimatedInteractionsSubsystem.States.BaseInventoryInteractionState` |
| `GClass2780` | `EFT.AnimatedInteractionsSubsystem.States.BaseItemInteractionState` |
| `GClass2739` | `EFT.AnimatedInteractionsSubsystem.States.BipodOffInteractionState` |
| `GClass2740` | `EFT.AnimatedInteractionsSubsystem.States.BipodOnInteractionState` |
| `GClass2767` | `EFT.AnimatedInteractionsSubsystem.States.ComeWithMeGestureInteractionState` |
| `GClass2742` | `EFT.AnimatedInteractionsSubsystem.States.ContainerCloseDefaultState` |
| `GClass2743` | `EFT.AnimatedInteractionsSubsystem.States.ContainerCloseDownState` |
| `GClass2744` | `EFT.AnimatedInteractionsSubsystem.States.ContainerClosePushState` |
| `GClass2745` | `EFT.AnimatedInteractionsSubsystem.States.ContainerHingeUpCloseState` |
| `GClass2746` | `EFT.AnimatedInteractionsSubsystem.States.ContainerHingeUpOpenState` |
| `GClass2747` | `EFT.AnimatedInteractionsSubsystem.States.ContainerOpenDefaultState` |
| `GClass2748` | `EFT.AnimatedInteractionsSubsystem.States.ContainerOpenPullState` |
| `GClass2749` | `EFT.AnimatedInteractionsSubsystem.States.ContainerOpenUpState` |
| `GClass2751` | `EFT.AnimatedInteractionsSubsystem.States.DoorCardOpenState` |
| `GClass2752` | `EFT.AnimatedInteractionsSubsystem.States.DoorKeyOpenState` |
| `GClass2753` | `EFT.AnimatedInteractionsSubsystem.States.DoorPullBackwardState` |
| `GClass2754` | `EFT.AnimatedInteractionsSubsystem.States.DoorPullHingeLeftState` |
| `GClass2755` | `EFT.AnimatedInteractionsSubsystem.States.DoorPullHingeRightState` |
| `GClass2756` | `EFT.AnimatedInteractionsSubsystem.States.DoorPushForwardState` |
| `GClass2757` | `EFT.AnimatedInteractionsSubsystem.States.DoorPushHingeLeftState` |
| `GClass2758` | `EFT.AnimatedInteractionsSubsystem.States.DoorPushHingeRightState` |
| `GClass2778` | `EFT.AnimatedInteractionsSubsystem.States.DropBackpackInteractionState` |
| `GClass2781` | `EFT.AnimatedInteractionsSubsystem.States.DropItemInteractionState` |
| `GClass2760` | `EFT.AnimatedInteractionsSubsystem.States.FaceshieldOffInteractionState` |
| `GClass2761` | `EFT.AnimatedInteractionsSubsystem.States.FaceshieldOnInteractionState` |
| `GClass2768` | `EFT.AnimatedInteractionsSubsystem.States.FriendlyGestureInteractionState` |
| `GClass2769` | `EFT.AnimatedInteractionsSubsystem.States.GetOffGestureInteractionState` |
| `GClass2762` | `EFT.AnimatedInteractionsSubsystem.States.HelmetRailInteractionState` |
| `GClass2770` | `EFT.AnimatedInteractionsSubsystem.States.HoldGestureInteractionState` |
| `GInterface311` | `EFT.AnimatedInteractionsSubsystem.States.IInteractionStateBehaviour` |
| `GClass2763` | `EFT.AnimatedInteractionsSubsystem.States.NightVisionOffInteractionState` |
| `GClass2764` | `EFT.AnimatedInteractionsSubsystem.States.NightVisionOnInteractionState` |
| `GClass2771` | `EFT.AnimatedInteractionsSubsystem.States.NoGestureInteractionState` |
| `GClass2772` | `EFT.AnimatedInteractionsSubsystem.States.OkGestureInteractionState` |
| `GClass2773` | `EFT.AnimatedInteractionsSubsystem.States.PaperGestureInteractionState` |
| `GClass2774` | `EFT.AnimatedInteractionsSubsystem.States.RockGestureInteractionState` |
| `GClass2775` | `EFT.AnimatedInteractionsSubsystem.States.ScissorGestureInteractionState` |
| `GClass2782` | `EFT.AnimatedInteractionsSubsystem.States.TakeItemInteractionState` |
| `GClass2776` | `EFT.AnimatedInteractionsSubsystem.States.ThereGestureInteractionState` |
| `GClass2779` | `EFT.AnimatedInteractionsSubsystem.States.ThrowInventoryInteractionState` |
| `GClass2727` | `EFT.AnimatedInteractionsSubsystem.View.AnimatedInteractionsView` |
| `GInterface306` | `EFT.AnimatedInteractionsSubsystem.View.IAnimatedInteractionsView` |
| `GClass2793` | `EFT.Animations.AnimValProcessor` |
| `EFT.Animations.ProceduralWeaponAnimation+GClass2791` | `EFT.Animations.ProceduralWeaponAnimation+TiltCalulator` |
| `GClass2792` | `EFT.Animations.ValProcessor` |
| `GClass4071` | `EFT.AnimationSequencePlayer.AnimationParams` |
| `GClass4067` | `EFT.AnimationSequencePlayer.CombinedAnimationData` |
| `GClass4072` | `EFT.AnimationSequencePlayer.LipSyncParams` |
| `GClass4068` | `EFT.AnimationSequencePlayer.MediaData` |
| `GClass4064` | `EFT.AnimationSequencePlayer.NPCDictionary` |
| `GClass4063` | `EFT.AnimationSequencePlayer.NPCElement` |
| `GClass4070` | `EFT.AnimationSequencePlayer.SequenceKeyWithParams` |
| `GClass4069` | `EFT.AnimationSequencePlayer.SequenceParams` |
| `GClass4065` | `EFT.AnimationSequencePlayer.SequencePlayer` |
| `GClass4073` | `EFT.AnimationSequencePlayer.SubtitleParams` |
| `GClass4066` | `EFT.AnimationSequencePlayer.Validation` |
| `GStruct256` | `EFT.AnimatorFootprint` |
| `GStruct257` | `EFT.AnimatorStateFootprint` |
| `GClass2368` | `EFT.AnswerTemplate` |
| `BattleeyePatchClass` | `EFT.AnticheatValidationOperation` |
| `GClass718` | `EFT.ApplicationLogger` |
| `ApplyKeyDescriptorClass` | `EFT.ApplyKeyOperationDescriptor` |
| `GClass2204` | `EFT.AreaInfo` |
| `GClass2316` | `EFT.AreaStageSerializer` |
| `GClass2317` | `EFT.AreaTemplateSerializer` |
| `GClass1795` | `EFT.ArenaEftTransferGlobalSettings` |
| `GClass2334` | `EFT.ArenaEftTransferItem` |
| `ArtilleryPacketStruct` | `EFT.ArtilleryProjectileSyncPacket` |
| `AssetsManagerSingletonClass` | `EFT.Assets` |
| `GClass1805` | `EFT.AssetsEnvironment` |
| `AssetPoolAbstractClass` | `EFT.AssetsManager.AbstractAssetsPool` |
| `Class3513` | `EFT.AssetsManager.AssetBundleExtension` |
| `GClass3971` | `EFT.AssetsManager.AssetPool` |
| `EFT.AssetsManager.AssetPoolObject+Class3528` | `EFT.AssetsManager.AssetPoolObject+AssetsPoolObjectComponentPoolPolicy` |
| `EFT.AssetsManager.AssetPoolObject+GClass3969` | `EFT.AssetsManager.AssetPoolObject+ColliderLayer` |
| `AssetsManagerClass` | `EFT.AssetsManager.AssetsManager` |
| `AssetsManagerClass+GClass730` | `EFT.AssetsManager.AssetsManager+AssetsManagerLogger` |
| `AssetsManagerClass+Class3519` | `EFT.AssetsManager.AssetsManager+LoadAllAssetOperation` |
| `AssetsManagerClass+Class3517` | `EFT.AssetsManager.AssetsManager+LoadAssetOperation` |
| `AssetsManagerClass+Class3515` | `EFT.AssetsManager.AssetsManager+LoadListBundleOperation` |
| `AssetsManagerClass+Class3518` | `EFT.AssetsManager.AssetsManager+LoadMainAssetOperation` |
| `AssetsManagerClass+Class3516` | `EFT.AssetsManager.AssetsManager+LoadOperation` |
| `AssetsManagerClass+Class3526` | `EFT.AssetsManager.AssetsManager+LoadSceneOperation` |
| `AssetsManagerClass+Class3526+Class411` | `EFT.AssetsManager.AssetsManager+LoadSceneOperation+Logger` |
| `GClass3962` | `EFT.AssetsManager.AssetsManagerCreateOperation` |
| `GStruct453` | `EFT.AssetsManager.AssetsManagerSettings` |
| `GClass3974` | `EFT.AssetsManager.AssetsPool` |
| `GClass3975` | `EFT.AssetsManager.AssetsPoolStaticConfig` |
| `GClass3975+GStruct454` | `EFT.AssetsManager.AssetsPoolStaticConfig+ComponentConfig` |
| `BundlesManagerClass` | `EFT.AssetsManager.BundlesManager` |
| `BundlesManagerClass+Class3523` | `EFT.AssetsManager.BundlesManager+AssetBundleReference` |
| `BundlesManagerClass+GClass3967` | `EFT.AssetsManager.BundlesManager+BundleBytesLoadOperation` |
| `BundlesManagerClass+Class3524` | `EFT.AssetsManager.BundlesManager+BundleLoadOperation` |
| `GClass3960` | `EFT.AssetsManager.BundlesManifestContainer` |
| `GInterface503` | `EFT.AssetsManager.IAssetPool` |
| `IAssetsManager` | `EFT.AssetsManager.IAssetsManager` |
| `GInterface504` | `EFT.AssetsManager.IPoolComponent` |
| `GClass3964` | `EFT.AssetsManager.LoadBundleManifestOperation` |
| `GClass3963` | `EFT.AssetsManager.LoadBundleManifestWithUpdateOperation` |
| `GClass3968` | `EFT.AssetsManager.LoadSceneOperation` |
| `GClass3972` | `EFT.AssetsManager.PlayerAssetPool` |
| `GClass3973` | `EFT.AssetsManager.PlayerZombieAssetPool` |
| `GClass3965` | `EFT.AssetsManager.UpdateVersionOperation` |
| `LoadSceneClass` | `EFT.AssetsManagerExtension` |
| `GClass722` | `EFT.AudioLogger` |
| `EFT.AudioSequence+GStruct283` | `EFT.AudioSequence+SequenceSettings` |
| `GClass2313` | `EFT.AudioUtils` |
| `GClass1852` | `EFT.AvailableCustomization` |
| `GClass1851` | `EFT.AvailableCustomizationsResponse` |
| `Class2723` | `EFT.BackEnd.ConnectionDiagnostics` |
| `Class2723+Class2724` | `EFT.BackEnd.ConnectionDiagnostics+Diagnostics` |
| `Class2723+Class409` | `EFT.BackEnd.ConnectionDiagnostics+Logger` |
| `Class2723+Class2725` | `EFT.BackEnd.ConnectionDiagnostics+PingDiagnostics` |
| `Class2723+Class2726` | `EFT.BackEnd.ConnectionDiagnostics+ProcessDiagnostics` |
| `Class2723+Class2727` | `EFT.BackEnd.ConnectionDiagnostics+UnityPingDiagnostics` |
| `Class2723+Class2728` | `EFT.BackEnd.ConnectionDiagnostics+UnityWebDiagnostics` |
| `Class2723+Class2729` | `EFT.BackEnd.ConnectionDiagnostics+WebDiagnostics` |
| `Struct987` | `EFT.BackEnd.Diagnosis` |
| `GClass1807` | `EFT.BackendMenuLocale` |
| `GStruct443` | `EFT.Ballistics.BallisticCoefficientValues` |
| `GClass3732` | `EFT.Ballistics.BallisticHitReactor` |
| `EFT.Ballistics.BallisticsCalculator+Struct976` | `EFT.Ballistics.BallisticsCalculator+Task` |
| `LayerMasksDataAbstractClass` | `EFT.Ballistics.BallisticsCalculatorConstants` |
| `DamageInfoStruct` | `EFT.Ballistics.DamageInfo` |
| `ISharedBallisticsCalculator` | `EFT.Ballistics.IBallisticsCalculator` |
| `EftBulletClass` | `EFT.Ballistics.Shot` |
| `ShotIdStruct` | `EFT.Ballistics.ShotId` |
| `GStruct444` | `EFT.Ballistics.ShotInfo` |
| `GClass3735` | `EFT.Ballistics.TrajectoryCalculator` |
| `GClass3736` | `EFT.Ballistics.TrajectoryCalculatorHistory` |
| `GStruct442` | `EFT.Ballistics.TrajectoryInfo` |
| `GStruct439` | `EFT.Ballistics.VisualAmmoInfo` |
| `GClass2335` | `EFT.BarterTemplate` |
| `GClass1854` | `EFT.BaseCustomizationFilter` |
| `GClass2097` | `EFT.BaseEventConsumer` |
| `EFT.BaseLocalGame`1+Class1630` | `EFT.BaseLocalGame`1+CustomUpdateTextureStreamingManager` |
| `GClass1909` | `EFT.BaseRecodableItemHandler` |
| `AbstractSkillClass` | `EFT.BaseSkill` |
| `PhraseSpeakerClass` | `EFT.BaseSpeaker` |
| `PhraseSpeakerClass+Class396` | `EFT.BaseSpeaker+SpeakerLogger` |
| `LocationStatisticsCollectorAbstractClass` | `EFT.BaseStatisticsManager` |
| `GClass2372` | `EFT.BaseSurveyQuestion` |
| `GClass2089` | `EFT.BeltMagazineInHandsVisual` |
| `GClass3694` | `EFT.BinarySerialization.BinaryCloneExtensions` |
| `GAttribute28` | `EFT.BinarySerialization.BinaryReaderCompatibleAttribute` |
| `GClass3695` | `EFT.BinarySerialization.BinarySerializationMirrorExtensions` |
| `GAttribute29` | `EFT.BinarySerialization.GenerateBinarySerializationAttribute` |
| `GAttribute31` | `EFT.BinarySerialization.IgnoreBinarySerializationAttribute` |
| `GAttribute30` | `EFT.BinarySerialization.NullableAttribute` |
| `GClass1959` | `EFT.BindItemOperationDescriptor` |
| `GClass2098` | `EFT.BipodToggleEvents` |
| `GClass2084` | `EFT.BitStreamExtension` |
| `BlindFireStateClass` | `EFT.BlindeFireState` |
| `GClass2197` | `EFT.BodyCustomization` |
| `GClass2215` | `EFT.BodyPartDamageHistoryDescriptor` |
| `SkillBonusAbstractClass` | `EFT.Bonus` |
| `EFT.BonusController+Class1131` | `EFT.BonusController+BonusCollection` |
| `ProfileBonusesClass` | `EFT.BonusDescriptor` |
| `GStruct174` | `EFT.BorderZonePacket` |
| `GClass1883` | `EFT.BossSpawnDelayModel` |
| `GClass1895` | `EFT.BotAmountExtensions` |
| `GClass1874` | `EFT.BotArtilleryZonesController` |
| `GClass1896` | `EFT.BotDifficultyExtensions` |
| `BotMemoryClass` | `EFT.BotMemory` |
| `GClass3597` | `EFT.Bots.BotOnlineDependenceSettings` |
| `BotSearchControllerClass` | `EFT.BotSearchController` |
| `EFT.BotsSmokesVisionSystem+Class1093` | `EFT.BotsSmokesVisionSystem+GrenadeData` |
| `GClass2380` | `EFT.BoundingFrustum` |
| `GClass2380+GStruct287` | `EFT.BoundingFrustum+CullingBox` |
| `GClass2380+GStruct288` | `EFT.BoundingFrustum+CullingSphere` |
| `GStruct227` | `EFT.BreachDoorPacket` |
| `BreachDoorStateClass` | `EFT.BreachDoorState` |
| `GClass2113` | `EFT.BreachDoorStateAI` |
| `GClass2095` | `EFT.BtrSideRotator` |
| `BTRTransferItemsControllerClass` | `EFT.BtrTransferItemsController` |
| `GClass2294` | `EFT.BufferExtension` |
| `BufferZoneControllerClass` | `EFT.BufferZone.BufferZoneController` |
| `GInterface267` | `EFT.Builds.IBuild` |
| `MagazineBuildClass` | `EFT.Builds.MagBuildsStorage` |
| `MagazineBuildClass+Class1022` | `EFT.Builds.MagBuildsStorage+PresetSourceError` |
| `MagazineBuildPresetClass` | `EFT.Builds.MagPreset` |
| `MagazineBuildPresetClass+Class1024` | `EFT.Builds.MagPreset+InvalidPresetNameError` |
| `MagazineBuildPresetClass+GClass2578` | `EFT.Builds.MagPreset+MagPresetItem` |
| `MagazineBuildPresetClass+Class1023` | `EFT.Builds.MagPreset+NotEnoughAmmoError` |
| `GClass2322` | `EFT.BuildsResponse` |
| `GClass2094` | `EFT.CameraContainerRotator` |
| `CameraClass` | `EFT.CameraControl.CameraManager` |
| `CameraClass+GInterface465` | `EFT.CameraControl.CameraManager+ISettings` |
| `GClass3688` | `EFT.CameraControl.CameraState` |
| `FirstPersonCameraOperationClass` | `EFT.CameraControl.FirstPersonCameraState` |
| `GInterface466` | `EFT.CameraControl.IScopeCameraData` |
| `GClass3690` | `EFT.CameraControl.LockCameraState` |
| `GClass3687` | `EFT.CameraControl.OpticCameraManager` |
| `EFT.CameraControl.OpticSight+GStruct432` | `EFT.CameraControl.OpticSight+OpticSightStatus` |
| `GClass3692` | `EFT.CameraControl.ReflexController` |
| `GClass3689` | `EFT.CameraControl.ThirdPersonCameraState` |
| `GStruct184` | `EFT.CancelApplyingItemPacket` |
| `GClass2336` | `EFT.CaptchaValidation` |
| `GStruct284` | `EFT.CCLine` |
| `GStruct262` | `EFT.ChangeMasteringExperiencePacket` |
| `GStruct261` | `EFT.ChangeSkillExperiencePacket` |
| `GClass2582` | `EFT.Character.AbstractMovementContextAdapter` |
| `GClass2583` | `EFT.Character.ClientPlayerMovementContextAdapter` |
| `GInterface270` | `EFT.Character.IMovementContextAdapter` |
| `GClass2585` | `EFT.Character.ObservedPlayerAudioSourceLimiter` |
| `GClass2584` | `EFT.Character.ObservedPlayerMovementContextAdapter` |
| `CharacterStruct` | `EFT.CharacterControllerFootprint` |
| `GClass2333` | `EFT.ChatMemberSideExtensions` |
| `CheckMagazineDescriptorClass` | `EFT.CheckMagazineOperationDescriptor` |
| `GClass2319` | `EFT.CheckVersionData` |
| `GStruct210` | `EFT.Client2ServerPacket` |
| `GClass2071` | `EFT.Client2ServerPacketArrayPoolCreationPolicy` |
| `GClass2304` | `EFT.ClientApplicationInitOperation` |
| `GClass2248` | `EFT.ClientAuthorizedSkill` |
| `BackendAbstractClass` | `EFT.ClientBackend` |
| `BackendDummyClass` | `EFT.ClientBackEndEmulator` |
| `BackendDummyClass+GClass2321` | `EFT.ClientBackEndEmulator+ClientBackendSessionEmulator` |
| `ProfileEndpointFactoryAbstractClass` | `EFT.ClientBackendSession` |
| `ProfileEndpointFactoryAbstractClass+Class397` | `EFT.ClientBackendSession+BackendQueueLogger` |
| `ProfileEndpointFactoryAbstractClass+Class1549` | `EFT.ClientBackendSession+ImmediateCommand` |
| `ProfileEndpointFactoryAbstractClass+Class1547` | `EFT.ClientBackendSession+OperationWithCallback` |
| `ProfileEndpointFactoryAbstractClass+Class1548` | `EFT.ClientBackendSession+QueuedCommand` |
| `SslCertPatchClass` | `EFT.ClientCertificateHandler` |
| `GStruct277` | `EFT.ClientConfirmCallbackPacket` |
| `EFT.ClientFirearmController+Class1268` | `EFT.ClientFirearmController+ClientBoltActionFireOperation` |
| `EFT.ClientFirearmController+Class1265` | `EFT.ClientFirearmController+ClientPlayerReloadCylinderMagOperation` |
| `EFT.ClientFirearmController+Class1266` | `EFT.ClientFirearmController+ClientPlayerReloadInternalMagOperation` |
| `EFT.ClientFirearmController+Class1267` | `EFT.ClientFirearmController+ClientPlayerReloadInternalMagWithOpenBoltOperation` |
| `HardwareDescriptionClass` | `EFT.ClientHardwareDescription` |
| `GInterface238` | `EFT.ClientItems.ClientSpecItems.ITransmittableDevice` |
| `GClass2401` | `EFT.ClientItems.ClientSpecItems.RT.RTLightIndicator` |
| `GClass2402` | `EFT.ClientItems.ClientSpecItems.RT.RTProcessor` |
| `GClass2403` | `EFT.ClientItems.ClientSpecItems.RT.RTSoundIndicator` |
| `EFT.ClientPlayer+Class2443` | `EFT.ClientPlayer+ClientPlayerInventoryController` |
| `EFT.ClientPlayer+GClass2351` | `EFT.ClientPlayer+DataSender` |
| `EFT.ClientPlayer+DataSender+GDelegate75` | `EFT.ClientPlayer+DataSender+DataSentDelegate` |
| `EFT.ClientPlayer+Struct556` | `EFT.ClientPlayer+EndedCutsceneInfoForServer` |
| `EFT.ClientPlayer+IDataSender` | `EFT.ClientPlayer+IClientPlayerDataSender` |
| `EFT.ClientPlayer+Struct555` | `EFT.ClientPlayer+OperationState` |
| `EFT.ClientPlayer+Class1679` | `EFT.ClientPlayer+PlayerVoipController` |
| `EFT.ClientPlayer+Class1679+Class1681` | `EFT.ClientPlayer+PlayerVoipController+AbstractState` |
| `EFT.ClientPlayer+Class1679+Class1682` | `EFT.ClientPlayer+PlayerVoipController+AbstractStateMuted` |
| `EFT.ClientPlayer+Class1679+Class1684` | `EFT.ClientPlayer+PlayerVoipController+AbstractStateRestricted` |
| `EFT.ClientPlayer+Class1679+Struct557` | `EFT.ClientPlayer+PlayerVoipController+Restriction` |
| `EFT.ClientPlayer+Class1679+Class1688` | `EFT.ClientPlayer+PlayerVoipController+StateBanned` |
| `EFT.ClientPlayer+Class1679+Class1687` | `EFT.ClientPlayer+PlayerVoipController+StateBlocked` |
| `EFT.ClientPlayer+Class1679+Class1686` | `EFT.ClientPlayer+PlayerVoipController+StateLimited` |
| `EFT.ClientPlayer+Class1679+Class1689` | `EFT.ClientPlayer+PlayerVoipController+StateMicrophoneFail` |
| `EFT.ClientPlayer+Class1679+Class1685` | `EFT.ClientPlayer+PlayerVoipController+StateOff` |
| `EFT.ClientPlayer+Class1679+Class1683` | `EFT.ClientPlayer+PlayerVoipController+StateReady` |
| `EFT.ClientPlayer+Class1679+Class1690` | `EFT.ClientPlayer+PlayerVoipController+StateTalking` |
| `EFT.ClientPlayer+Class1679+Class1680` | `EFT.ClientPlayer+PlayerVoipController+TalksRegistry` |
| `EFT.ClientPlayer+Class1679+Class1680+Struct558` | `EFT.ClientPlayer+PlayerVoipController+TalksRegistry+Talk` |
| `EFT.ClientPlayer+GDelegate74` | `EFT.ClientPlayer+SendDelegate` |
| `GClass2178` | `EFT.ClientPlayerEffectsPauseController` |
| `GClass2109` | `EFT.ClientPlayerMovementContext` |
| `GClass2323` | `EFT.ClientRequestErrorHandler` |
| `RunddansControllerClass` | `EFT.ClientRunddansController` |
| `GClass1706` | `EFT.ClientSettingsConfig` |
| `GClass1706+GClass1708` | `EFT.ClientSettingsConfig+FramerateLimitSettings` |
| `GClass1706+GClass1709` | `EFT.ClientSettingsConfig+NetworkStateViewSettings` |
| `GClass1706+GClass1707` | `EFT.ClientSettingsConfig+ReleaseProfilerSettings` |
| `TransitInteractionControllerAbstractClass` | `EFT.ClientTransitController` |
| `GClass2099` | `EFT.ClimbSoundsEventConsumer` |
| `ClimbUpStateClass` | `EFT.ClimbState` |
| `GClass1684` | `EFT.CmdGetRadiotransmitterDataMessage` |
| `GClass1685` | `EFT.CmdGetTraderServicesDataMessage` |
| `GClass1683` | `EFT.CmdOnPlayerKeeperStatisticsChangedMessage` |
| `GClass1682` | `EFT.CmdPlayerEffectsPauseMessage` |
| `GClass1686` | `EFT.CmdRequestProfileMessage` |
| `GClass1681` | `EFT.CmdSpawnConfirmMessage` |
| `GClass1676` | `EFT.CommandLine` |
| `GClass2300` | `EFT.CommandLineArgs` |
| `CustomizationClass` | `EFT.CommoditiesToPurchase` |
| `GClass2364` | `EFT.CommodityReferences` |
| `GClass2362` | `EFT.CommodityToPurchase` |
| `GClass2244` | `EFT.CommonPacket` |
| `GClass2377` | `EFT.CommonPrefs` |
| `GClass2544` | `EFT.Communications.BufferGateNotAvailableNotification` |
| `GClass2545` | `EFT.Communications.BufferZoneAccessDeniedNotification` |
| `GClass2543` | `EFT.Communications.BufferZoneAlreadyHaveCustomerNotification` |
| `GClass2548` | `EFT.Communications.BufferZoneKickAlarmNotification` |
| `GClass2547` | `EFT.Communications.BufferZoneTimerReminderNotification` |
| `GClass2546` | `EFT.Communications.BufferZoneUsageTimeEndedNotification` |
| `GClass2553` | `EFT.Communications.ContainUnremovableItemNotification` |
| `GClass2551` | `EFT.Communications.CustomNotification` |
| `GClass2550` | `EFT.Communications.FireFlareForExitNotification` |
| `GClass2559` | `EFT.Communications.HideoutAreaNotification` |
| `GClass2560` | `EFT.Communications.HideoutItemNotification` |
| `GClass2558` | `EFT.Communications.HideoutNotification` |
| `IConnectionHandler` | `EFT.Communications.ILongPollingRequest` |
| `GClass2557` | `EFT.Communications.InteractiveNotification` |
| `Class2047` | `EFT.Communications.LongPollingRequest` |
| `UriParamsClass` | `EFT.Communications.LongPollingRequestAbstract` |
| `Class2048` | `EFT.Communications.LongPollingWebSocketRequest` |
| `GClass2541` | `EFT.Communications.MalfunctionExamineTypeNotification` |
| `GClass2542` | `EFT.Communications.MalfunctionOccurredNotification` |
| `GClass2540` | `EFT.Communications.MalfunctionRepairRequiredNotification` |
| `NotificationAbstractClass` | `EFT.Communications.Notification` |
| `GClass2519` | `EFT.Communications.NotificationAcceptedFriendsRequest` |
| `GClass2556` | `EFT.Communications.NotificationAchievement` |
| `GClass2521` | `EFT.Communications.NotificationAddedToIgnoreList` |
| `GClass2483` | `EFT.Communications.NotificationAdditionalStashRows` |
| `GClass2504` | `EFT.Communications.NotificationBackendMessagePopup` |
| `GClass2514` | `EFT.Communications.NotificationChatMessageReceived` |
| `GClass2481` | `EFT.Communications.NotificationCustomizationUpdateRequired` |
| `GClass2523` | `EFT.Communications.NotificationDeclinedFriendsRequest` |
| `GClass2494` | `EFT.Communications.NotificationExamineAllItems` |
| `GClass2492` | `EFT.Communications.NotificationExamineItems` |
| `GClass2536` | `EFT.Communications.NotificationForceLogout` |
| `GClass2518` | `EFT.Communications.NotificationFriendRequestCanceled` |
| `GClass2516` | `EFT.Communications.NotificationFriendsRequest` |
| `GClass2530` | `EFT.Communications.NotificationGroupDisbanded` |
| `GClass2512` | `EFT.Communications.NotificationGroupLeft` |
| `GClass2528` | `EFT.Communications.NotificationGroupMatchAbort` |
| `GClass2527` | `EFT.Communications.NotificationGroupMatchRaidNotReady` |
| `GClass2526` | `EFT.Communications.NotificationGroupMatchRaidReady` |
| `GClass2513` | `EFT.Communications.NotificationGroupMaxCountReached` |
| `GClass2491` | `EFT.Communications.NotificationHideoutAreaLevel` |
| `GClass2537` | `EFT.Communications.NotificationInGameBan` |
| `GClass2538` | `EFT.Communications.NotificationInGameUnBan` |
| `GClass2510` | `EFT.Communications.NotificationInviteAccept` |
| `GClass2508` | `EFT.Communications.NotificationInviteCanceled` |
| `GClass2511` | `EFT.Communications.NotificationInviteDecline` |
| `GClass2509` | `EFT.Communications.NotificationInviteExpired` |
| `GClass2507` | `EFT.Communications.NotificationInviteReceived` |
| `GClass2529` | `EFT.Communications.NotificationLeaderChanged` |
| `NotificationManagerClass` | `EFT.Communications.NotificationManager` |
| `NotificationManagerClass+Class2050` | `EFT.Communications.NotificationManager+ChannelCreationTimeout` |
| `NotificationManagerClass+Class405` | `EFT.Communications.NotificationManager+NotificationLogger` |
| `NotificationManagerClass+Class2051` | `EFT.Communications.NotificationManager+SpamChecker` |
| `GClass2567` | `EFT.Communications.NotificationManagerSerializer` |
| `GClass2489` | `EFT.Communications.NotificationMasteringPoints` |
| `GClass2490` | `EFT.Communications.NotificationMasteringPointsDelta` |
| `GClass2525` | `EFT.Communications.NotificationMatchRaidSettings` |
| `GClass2517` | `EFT.Communications.NotificationNewFriendsRequest` |
| `GClass2486` | `EFT.Communications.NotificationProfileExtDelta` |
| `GClass2485` | `EFT.Communications.NotificationProfileLevel` |
| `GClass2484` | `EFT.Communications.NotificationProfileLockTimer` |
| `GClass2555` | `EFT.Communications.NotificationQuest` |
| `GClass2531` | `EFT.Communications.NotificationRagFair` |
| `GClass2495` | `EFT.Communications.NotificationRagfairEventRating` |
| `GClass2535` | `EFT.Communications.NotificationRagfairExpired` |
| `GClass2532` | `EFT.Communications.NotificationRagfairNewRating` |
| `GClass2533` | `EFT.Communications.NotificationRagfairOfferSold` |
| `GClass2534` | `EFT.Communications.NotificationRagfairPurchased` |
| `GClass2515` | `EFT.Communications.NotificationRemovedFromFriendsList` |
| `GClass2522` | `EFT.Communications.NotificationRemovedFromIgnoreList` |
| `GClass2568` | `EFT.Communications.Notifications` |
| `GClass2487` | `EFT.Communications.NotificationSkillPoints` |
| `GClass2488` | `EFT.Communications.NotificationSkillPointsDelta` |
| `GClass2524` | `EFT.Communications.NotificationStartGame` |
| `GClass2505` | `EFT.Communications.NotificationTournamentWarning` |
| `GClass2497` | `EFT.Communications.NotificationTraderLoyalty` |
| `GClass2500` | `EFT.Communications.NotificationTraderSalesSum` |
| `GClass2501` | `EFT.Communications.NotificationTraderSalesSumDelta` |
| `GClass2498` | `EFT.Communications.NotificationTraderStanding` |
| `GClass2499` | `EFT.Communications.NotificationTraderStandingDelta` |
| `GClass2506` | `EFT.Communications.NotificationTraderSupply` |
| `GClass2493` | `EFT.Communications.NotificationUnlockRule` |
| `GClass2496` | `EFT.Communications.NotificationUnlockTrader` |
| `GClass2503` | `EFT.Communications.NotificationUserStatusChanged` |
| `GClass2539` | `EFT.Communications.NotificationWishlistItemPurchased` |
| `GClass2554` | `EFT.Communications.NotificationWithText` |
| `GClass2502` | `EFT.Communications.NotificationWrongMajorVersion` |
| `GClass2520` | `EFT.Communications.NotificationYouWasKickedFromDialogue` |
| `GClass2482` | `EFT.Communications.ProfileChangeEventNotification` |
| `GClass2561` | `EFT.Communications.RaidWishlistNotification` |
| `GClass2565` | `EFT.Communications.SingletonMessageNotification` |
| `GClass2563` | `EFT.Communications.SingletonNotification` |
| `GClass2564` | `EFT.Communications.SingletonWarningNotification` |
| `GClass2549` | `EFT.Communications.SkillLevelUpNotification` |
| `StatNotificationClass` | `EFT.Communications.StatisticNotification` |
| `GClass2479` | `EFT.Communications.UnparsedNotification` |
| `GClass2552` | `EFT.Communications.UnremovableItemNotification` |
| `GClass2263` | `EFT.ComparableHashSet` |
| `GStruct271` | `EFT.CompletedAchievementConditionsData` |
| `GAttribute26` | `EFT.ComponentAttribute` |
| `GStruct273` | `EFT.ConditionalProgressData` |
| `GStruct270` | `EFT.ConditionValueChangedPacket` |
| `Class1650` | `EFT.ConnectionClient` |
| `Class1650+Interface12` | `EFT.ConnectionClient+ISession` |
| `GClass2478` | `EFT.Console.Commands.DLSSCommands` |
| `GClass2474` | `EFT.Console.Commands.ProductionCommands` |
| `GClass2475` | `EFT.Console.Commands.Shared` |
| `GClass2476` | `EFT.Console.Commands.WaitCommand` |
| `GClass2477` | `EFT.Console.Commands.WaitScreenCommand` |
| `GClass1949` | `EFT.ContainerDescriptor` |
| `RagdollPacketStruct` | `EFT.CorpseSyncPacket` |
| `GClass2219` | `EFT.CounterCollectionDescriptor` |
| `GClass2218` | `EFT.CounterCollectionItemDescriptor` |
| `SessionCountersClass` | `EFT.Counters.CountersCollection` |
| `SessionCountersClass+SessionCounterIdentifierValueClass` | `EFT.Counters.CountersCollection+Identifier` |
| `SessionCounterTypesAbstractClass` | `EFT.Counters.PredefinedCounters` |
| `WaveInfoClass` | `EFT.CountTypeBotWave` |
| `CreateMapMarkerDescriptorClass` | `EFT.CreateMapMarkerOperationDescriptor` |
| `GClass2305` | `EFT.CreateProfileOperation` |
| `GClass2305+GClass2307` | `EFT.CreateProfileOperation+PreliminaryProfileData` |
| `GClass1944` | `EFT.CultistAmuletComponentDescriptor` |
| `GClass3672` | `EFT.Customization.BaseCustomizationItem` |
| `GClass3685` | `EFT.Customization.ClothingIcon` |
| `GClass3677` | `EFT.Customization.CustomizationClothing` |
| `GClass3674` | `EFT.Customization.CustomizationDogTag` |
| `GClass3676` | `EFT.Customization.CustomizationEnvironmentUI` |
| `GClass3675` | `EFT.Customization.CustomizationGesture` |
| `GClass3678` | `EFT.Customization.CustomizationHead` |
| `GClass3680` | `EFT.Customization.CustomizationHideoutMannequinPose` |
| `GClass3673` | `EFT.Customization.CustomizationItem` |
| `GClass1870` | `EFT.Customization.CustomizationItemSerializer` |
| `GClass3681` | `EFT.Customization.CustomizationPlayerVoice` |
| `GClass3682` | `EFT.Customization.CustomizationSuite` |
| `GClass3679` | `EFT.Customization.HideoutCustomizationItem` |
| `GClass3684` | `EFT.Customization.LowerBodySuit` |
| `GClass3683` | `EFT.Customization.UpperBodySuit` |
| `GStruct431` | `EFT.Customization.WatchBundleInfo` |
| `GClass1811` | `EFT.CustomizationLoadOperation` |
| `CustomizationSolverClass` | `EFT.CustomizationSolver` |
| `GStruct186` | `EFT.CutsceneInteractionPacket` |
| `GStruct249` | `EFT.CylinderMagStatus` |
| `GClass1808` | `EFT.DailyZoneData` |
| `GClass2198` | `EFT.DamageHistory` |
| `GClass2216` | `EFT.DamageHistoryDescriptor` |
| `GClass2200` | `EFT.DamageStats` |
| `GClass2217` | `EFT.DamageStatsDescriptor` |
| `LocaleClass` | `EFT.DataPrepareOperation` |
| `GClass3670` | `EFT.DataProviding.DataProvider` |
| `GClass3671` | `EFT.DataProviding.DataProviderSynchronizationClient` |
| `GInterface463` | `EFT.DataProviding.IDataContainer` |
| `GInterface464` | `EFT.DataProviding.ISyncDataContainer` |
| `EFTDateTimeClass` | `EFT.DateTimeExtensions` |
| `GClass2199` | `EFT.DeathCause` |
| `GClass1822` | `EFT.DebuffEndDelayBonus` |
| `GClass2072` | `EFT.DeferredNetworkMessage` |
| `GClass1962` | `EFT.DeleteMapMarkerOperationDescriptor` |
| `GClass1963` | `EFT.DeleteNoteOperationDescriptor` |
| `GClass1955` | `EFT.DestroyedItem` |
| `GStruct199` | `EFT.DevelopAirdrop` |
| `GStruct209` | `EFT.DevelopArtilleryCalledShellingPositionPacket` |
| `GStruct208` | `EFT.DevelopArtilleryImmediateShellingZonePacket` |
| `GStruct191` | `EFT.DevelopBtrSupportServicePacket` |
| `GStruct192` | `EFT.DevelopContainerHidePacket` |
| `GStruct193` | `EFT.DevelopEnableServerHitDebuggingPacket` |
| `GStruct187` | `EFT.DevelopHealPacket` |
| `GStruct194` | `EFT.DevelopKillAllAIsPacket` |
| `GStruct200` | `EFT.DevelopKillMePacket` |
| `GStruct190` | `EFT.DevelopLighthouseKeeperServicesPacket` |
| `GClass3591` | `EFT.Development.ProfileStorage` |
| `GStruct203` | `EFT.DevelopResetBufferZoneUsageTimePacket` |
| `GStruct201` | `EFT.DevelopResetDiscardLimitsPacket` |
| `GStruct205` | `EFT.DevelopSetActiveLighthouseTraderZoneDebugPacket` |
| `GStruct207` | `EFT.DevelopSetArtilleryShellingPausePacket` |
| `GStruct202` | `EFT.DevelopSetBufferZoneAccessPacket` |
| `GStruct189` | `EFT.DevelopSetDamageCoeffPacket` |
| `GStruct204` | `EFT.DevelopSetEncodedRadioTransmitterPacket` |
| `GStruct198` | `EFT.DevelopSnapshotAllPlayers` |
| `GStruct195` | `EFT.DevelopSpawnAIPacket` |
| `GStruct196` | `EFT.DevelopStartEvent` |
| `GStruct188` | `EFT.DevelopTeleportPacket` |
| `GStruct197` | `EFT.DevelopUnlockAllDoors` |
| `GClass3616` | `EFT.Dialogs.BackendCombinedAnimationData` |
| `GClass3612` | `EFT.Dialogs.BackendCurrentTraderConditionData` |
| `GClass3601` | `EFT.Dialogs.BackendDialogData` |
| `GClass3606` | `EFT.Dialogs.BackendDialogNodeConditionData` |
| `GClass3602` | `EFT.Dialogs.BackendDialogNodeConditionJsonConverter` |
| `GClass3614` | `EFT.Dialogs.BackendDialogNodeConditionsData` |
| `GClass3615` | `EFT.Dialogs.BackendDialogNodeData` |
| `GClass3605` | `EFT.Dialogs.BackendDialogNodeLogicalGroupConditionData` |
| `GClass3603` | `EFT.Dialogs.BackendDialogNodeMainConditionData` |
| `GClass3607` | `EFT.Dialogs.BackendDialogVariableConditionData` |
| `GClass3613` | `EFT.Dialogs.BackendHasNewQuestsConditionData` |
| `GClass3600` | `EFT.Dialogs.BackendNodeConnectionData` |
| `GClass3609` | `EFT.Dialogs.BackendQuestConditionStatusConditionData` |
| `GClass3608` | `EFT.Dialogs.BackendQuestStatusConditionData` |
| `GClass3604` | `EFT.Dialogs.BackendRandomConditionData` |
| `GClass3611` | `EFT.Dialogs.BackendServiceAvailableConditionData` |
| `GClass4074` | `EFT.Dialogs.BackendSubtitleParams` |
| `GClass3610` | `EFT.Dialogs.BackendTraderReputationConditionData` |
| `GClass3652` | `EFT.Dialogs.BaseDialogConditionGroup` |
| `GClass3620` | `EFT.Dialogs.BaseTraderDialog` |
| `GClass3617` | `EFT.Dialogs.BaseTraderDialogController` |
| `GClass3625` | `EFT.Dialogs.BaseTraderDialogLine` |
| `GClass3619` | `EFT.Dialogs.ClientDialogController` |
| `GClass3660` | `EFT.Dialogs.CurrentTraderCondition` |
| `GClass3633` | `EFT.Dialogs.DialogAcceptQuestAction` |
| `GClass3629` | `EFT.Dialogs.DialogAction` |
| `GClass3648` | `EFT.Dialogs.DialogActionJsonConverter` |
| `GClass3651` | `EFT.Dialogs.DialogCondition` |
| `GClass3663` | `EFT.Dialogs.DialogConditionConverter` |
| `GClass3654` | `EFT.Dialogs.DialogConditionSubGroup` |
| `GClass3634` | `EFT.Dialogs.DialogDiaryNoteAction` |
| `GClass3641` | `EFT.Dialogs.DialogEmbedQuestDialogAction` |
| `GClass3635` | `EFT.Dialogs.DialogFinishQuestAction` |
| `GClass3638` | `EFT.Dialogs.DialogHandoverItemAction` |
| `GClass3666` | `EFT.Dialogs.DialogLineTemplate` |
| `GClass3623` | `EFT.Dialogs.DialogLineTextConstructor` |
| `GClass3623+Interface20` | `EFT.Dialogs.DialogLineTextConstructor+IDialogLineConstructor` |
| `GClass3653` | `EFT.Dialogs.DialogMainConditionGroup` |
| `GClass3630` | `EFT.Dialogs.DialogNotifiedAction` |
| `GClass3631` | `EFT.Dialogs.DialogPurchaseServiceAction` |
| `GClass3632` | `EFT.Dialogs.DialogQuestAction` |
| `GClass3637` | `EFT.Dialogs.DialogQuestConditionAction` |
| `GClass3639` | `EFT.Dialogs.DialogQuestRewardAction` |
| `GClass3642` | `EFT.Dialogs.DialogQuestsScreenAction` |
| `GClass3643` | `EFT.Dialogs.DialogQuitAction` |
| `GClass3640` | `EFT.Dialogs.DialogSelectQuestAction` |
| `GClass3644` | `EFT.Dialogs.DialogSelectSubServiceAction` |
| `GClass3647` | `EFT.Dialogs.DialogSetVariableAction` |
| `GClass3647+GClass3650` | `EFT.Dialogs.DialogSetVariableAction+SaveStateData` |
| `GClass3624` | `EFT.Dialogs.DialogStorage` |
| `GClass3645` | `EFT.Dialogs.DialogSwitchDialogAction` |
| `GClass3646` | `EFT.Dialogs.DialogTradingScreenAction` |
| `GClass3621` | `EFT.Dialogs.DynamicTraderDialog` |
| `GClass3622` | `EFT.Dialogs.EmbeddedDynamicTraderDialog` |
| `GClass3636` | `EFT.Dialogs.GeneratedDialogFinishQuestAction` |
| `GClass3655` | `EFT.Dialogs.HasItemCondition` |
| `GClass3656` | `EFT.Dialogs.HasNewQuestsCondition` |
| `GInterface460` | `EFT.Dialogs.IDialogContext` |
| `GInterface461` | `EFT.Dialogs.ISaveStateStorage` |
| `GInterface462` | `EFT.Dialogs.ITraderAnimationController` |
| `GClass3669` | `EFT.Dialogs.MediaAnimationController` |
| `GClass3627` | `EFT.Dialogs.PurchaseServicePlayerLine` |
| `GClass3658` | `EFT.Dialogs.QuestConditionStatusCondition` |
| `GClass3659` | `EFT.Dialogs.QuestStatusCondition` |
| `GClass3664` | `EFT.Dialogs.RandomLineCondition` |
| `GClass3657` | `EFT.Dialogs.ServiceAvailableCondition` |
| `GClass3628` | `EFT.Dialogs.SubServicePlayerLine` |
| `GClass3668` | `EFT.Dialogs.TraderAnimationController` |
| `GClass3667` | `EFT.Dialogs.TraderDialogHistory` |
| `GClass3667+GStruct430` | `EFT.Dialogs.TraderDialogHistory+DialogHistoryLine` |
| `GClass3665` | `EFT.Dialogs.TraderDialogTemplate` |
| `GClass3626` | `EFT.Dialogs.TraderDialogTextLine` |
| `GClass3661` | `EFT.Dialogs.TraderReputation` |
| `GClass3649` | `EFT.Dialogs.VariableDataDto` |
| `GClass3662` | `EFT.Dialogs.VariableValueCondition` |
| `GClass1862` | `EFT.DictionaryConverter` |
| `GClass2174` | `EFT.DictionaryPlayerStateLimitsExtensions` |
| `GAttribute25` | `EFT.DiffableAttribute` |
| `GStruct161` | `EFT.DisconnectionReason` |
| `GClass1809` | `EFT.DnsUtils` |
| `GClass1938` | `EFT.DogTagComponentDescriptor` |
| `DoorInteractionStateClass` | `EFT.DoorInteractState` |
| `GClass2115` | `EFT.DoorInteractStateAI` |
| `GClass2105` | `EFT.DoorInteractSubState` |
| `GClass2100` | `EFT.DropBackpackEventConsumer` |
| `GClass2185` | `EFT.DroppedItem` |
| `GClass2265` | `EFT.DumbStatisticsManager` |
| `Class1729` | `EFT.DummyHandsInputTranslator` |
| `GClass2353` | `EFT.DummyPlayerInputTranslator` |
| `GClass1857` | `EFT.EasyAssetsExtensions` |
| `GClass1964` | `EFT.EditMapMarkerOperationDescriptor` |
| `EditNoteDescriptorClass` | `EFT.EditNoteOperationDescriptor` |
| `Class306` | `EFT.EftClientBackend` |
| `Class308` | `EFT.EftClientBackendSession` |
| `Class308+Class398` | `EFT.EftClientBackendSession+PingLogger` |
| `GClass2306` | `EFT.EftCreateProfileOperation` |
| `JsonSerializerSettingsClass` | `EFT.EftJsonConverters` |
| `GClass2309` | `EFT.EftLoginShowOperation` |
| `GClass2075` | `EFT.EGestureCache` |
| `GClass2065` | `EFT.EmptyDictionary` |
| `Class1745` | `EFT.EmptyHandsInputTranslator` |
| `EFT.EndByTimerScenario+Interface8` | `EFT.EndByTimerScenario+IGame` |
| `GClass1819` | `EFT.EnergyRegenerationBonus` |
| `GClass1866` | `EFT.EnumConverter` |
| `GClass2066` | `EFT.EnumerableExtensions` |
| `GClass867` | `EFT.EnumExtensions` |
| `GClass1859` | `EFT.EnumIntFlagsConverter` |
| `GClass1860` | `EFT.EnumIntJsonConverter` |
| `GClass1865` | `EFT.EnumWithFlagsConverter` |
| `GClass1810` | `EFT.ErrorHandlingUtils` |
| `GClass1705` | `EFT.ErrorMessage` |
| `GClass2282` | `EFT.EventObjectController` |
| `GClass1966` | `EFT.ExamineMalfTypeOperationDescriptor` |
| `GClass1967` | `EFT.ExamineMalfunctionOperationDescriptor` |
| `GClass1968` | `EFT.ExamineOperationDescriptor` |
| `GClass1829` | `EFT.ExperienceRateBonus` |
| `ExplosiveHitArmorColliderStruct` | `EFT.ExplosionDamageInfo` |
| `GClass2085` | `EFT.ExplosionSharedMethods` |
| `EFT.ExtendedPlayerOwner+Class1784` | `EFT.ExtendedPlayerOwner+MockedInputTree` |
| `GClass1935` | `EFT.FaceShieldComponentDescriptor` |
| `GClass1969` | `EFT.FaceshieldMarkOperationDescriptor` |
| `GClass2239` | `EFT.FakeSearchController` |
| `GClass2128` | `EFT.FallDown` |
| `GClass2181` | `EFT.FavoriteItemsStorage` |
| `GClass2080` | `EFT.FirearmControllerSharedMethods` |
| `Class1730` | `EFT.FirearmHandsInputTranslator` |
| `GStruct243` | `EFT.FirearmPacket` |
| `WeaponManagerClass` | `EFT.Firearms` |
| `GStruct235` | `EFT.FiredShotInfo` |
| `GClass1937` | `EFT.FireModeComponentDescriptor` |
| `GStruct236` | `EFT.FireModePacket` |
| `GClass1936` | `EFT.FoldableComponentDescriptor` |
| `GClass1970` | `EFT.FoldOperationDescriptor` |
| `GClass1679` | `EFT.FoliageIntersectionSystem` |
| `GClass1925` | `EFT.FoodDrinkComponentDescriptor` |
| `GClass2186` | `EFT.FoundInRaidItem` |
| `GStruct232` | `EFT.FramePositionDebug` |
| `GClass1830` | `EFT.FuelConsumptionBonus` |
| `GClass2240` | `EFT.FullySearchedSearchController` |
| `GClass3581` | `EFT.Game.Spawning.Develop` |
| `GClass3583` | `EFT.Game.Spawning.GroundHelper` |
| `IZones` | `EFT.Game.Spawning.IBotZoneCollection` |
| `ISpawnPoints` | `EFT.Game.Spawning.ISpawnPointsCollection` |
| `ISpawnSystem` | `EFT.Game.Spawning.ISpawnSystem` |
| `Class2559` | `EFT.Game.Spawning.LoggerExtension` |
| `GClass3585` | `EFT.Game.Spawning.PlayersCollectionExtension` |
| `GClass3582` | `EFT.Game.Spawning.SpawnCategoryExtension` |
| `GClass3587` | `EFT.Game.Spawning.SpawnColliderHelper` |
| `GClass1869` | `EFT.Game.Spawning.SpawnColliderParamsSerializer` |
| `GClass3586` | `EFT.Game.Spawning.SpawnPointExtension` |
| `GClass3588` | `EFT.Game.Spawning.SpawnPointParamsExtension` |
| `GClass3584` | `EFT.Game.Spawning.SpawnPointsArray` |
| `SpawnPointManagerClass` | `EFT.Game.Spawning.SpawnPointsCollection` |
| `SpawnPointManagerClass+Class407` | `EFT.Game.Spawning.SpawnPointsCollection+Logger` |
| `SpawnSystemClass` | `EFT.Game.Spawning.SpawnSystem` |
| `SpawnSystemClass+Class2547` | `EFT.Game.Spawning.SpawnSystem+InvalidSpawnPoint` |
| `SpawnSystemClass+Class408` | `EFT.Game.Spawning.SpawnSystem+Logger` |
| `SpawnSystemClass+Class2546` | `EFT.Game.Spawning.SpawnSystem+SpawnPointsFilteredCollection` |
| `SpawnSystemCreatorClass` | `EFT.Game.Spawning.SpawnSystemFactory` |
| `SpawnSettingsStruct` | `EFT.Game.Spawning.SpawnSystemSettings` |
| `GClass1891` | `EFT.GameHelper` |
| `GClass1678` | `EFT.GamePersonArgs` |
| `GInterface470` | `EFT.GameRandoms.IRandom` |
| `GClass3727` | `EFT.GameRandoms.PrecalculatedFloatRandoms` |
| `GClass3731` | `EFT.GameRandoms.PrecalculatedNormalDistributedRandoms` |
| `GClass3730` | `EFT.GameRandoms.PrecalculatedQaternionRandoms` |
| `GClass3726` | `EFT.GameRandoms.PrecalculatedRandom` |
| `GClass3725` | `EFT.GameRandoms.PrecalculatedRandoms` |
| `GClass3728` | `EFT.GameRandoms.PrecalculatedVector2Randoms` |
| `GClass3729` | `EFT.GameRandoms.PrecalculatedVector3Randoms` |
| `GClass3723` | `EFT.GameRandoms.RandomsSetupInfo` |
| `GClass3724` | `EFT.GameRandoms.RandomsSetupInfoExtension` |
| `GClass1873` | `EFT.GameStatusExtension` |
| `GameTimerClass` | `EFT.GameTimer` |
| `GClass1893` | `EFT.GameTimerExtension` |
| `GClass3595` | `EFT.GameTriggers.ClientTriggersEmitter` |
| `GInterface457` | `EFT.GameTriggers.ITriggerEntity` |
| `GInterface458` | `EFT.GameTriggers.ITriggerSource` |
| `GClass3594` | `EFT.GameTriggers.LocalTriggersEmitter` |
| `GClass3593` | `EFT.GameTriggers.ServerTriggersEmitter` |
| `GClass3592` | `EFT.GameTriggers.TriggersEmitter` |
| `EFT.GameWorld+GClass1529` | `EFT.GameWorld+InventoryTransferError` |
| `EFT.GameWorld+GClass1525` | `EFT.GameWorld+ItemAddressNotFoundError` |
| `EFT.GameWorld+GClass1526` | `EFT.GameWorld+ItemNotFoundError` |
| `EFT.GameWorld+GClass1533` | `EFT.GameWorld+ItemOwnerCandidateCantFindLootError` |
| `EFT.GameWorld+GClass1531` | `EFT.GameWorld+ItemOwnerCandidateTooFarError` |
| `EFT.GameWorld+GClass1532` | `EFT.GameWorld+ItemOwnerCandidateWallHackError` |
| `EFT.GameWorld+GClass1524` | `EFT.GameWorld+ItemOwnerNotFoundError` |
| `EFT.GameWorld+GClass1534` | `EFT.GameWorld+ItemOwnerNullError` |
| `EFT.GameWorld+GStruct162` | `EFT.GameWorld+ItemOwnerWorldData` |
| `EFT.GameWorld+GClass1527` | `EFT.GameWorld+ItemTooFarError` |
| `EFT.GameWorld+GClass1528` | `EFT.GameWorld+TransferBetweenAlivePlayersError` |
| `EFT.GameWorld+GClass1530` | `EFT.GameWorld+TryToPickUpOneOffBreakWeaponError` |
| `GStruct164` | `EFT.GameWorldPacket` |
| `GClass1712` | `EFT.GameWorldPacketExtension` |
| `GClass1713` | `EFT.GameWorldPacketPools` |
| `BackendConfigSettingsClass` | `EFT.GlobalConfiguration` |
| `BackendConfigSettingsClass+GClass1785` | `EFT.GlobalConfiguration+AimDrills` |
| `BackendConfigSettingsClass+GClass1741` | `EFT.GlobalConfiguration+AirdropSettings` |
| `BackendConfigSettingsClass+GClass1731` | `EFT.GlobalConfiguration+ArmorMaterialValues` |
| `BackendConfigSettingsClass+GClass1732` | `EFT.GlobalConfiguration+ArmorSettings` |
| `BackendConfigSettingsClass+GClass1732+GClass1733` | `EFT.GlobalConfiguration+ArmorSettings+ArmorClassSettings` |
| `BackendConfigSettingsClass+GClass1769` | `EFT.GlobalConfiguration+Assault` |
| `BackendConfigSettingsClass+GClass1778` | `EFT.GlobalConfiguration+Attention` |
| `BackendConfigSettingsClass+GClass1740` | `EFT.GlobalConfiguration+BallisticSettings` |
| `BackendConfigSettingsClass+GClass1743` | `EFT.GlobalConfiguration+BufferZoneSettings` |
| `BackendConfigSettingsClass+GClass1786` | `EFT.GlobalConfiguration+BuffSettings` |
| `BackendConfigSettingsClass+GClass1779` | `EFT.GlobalConfiguration+Charisma` |
| `BackendConfigSettingsClass+GClass1779+GClass1780` | `EFT.GlobalConfiguration+Charisma+CharismaBonusSettings` |
| `BackendConfigSettingsClass+GClass1779+GClass1782` | `EFT.GlobalConfiguration+Charisma+EliteBonusSettings` |
| `BackendConfigSettingsClass+GClass1779+GClass1781` | `EFT.GlobalConfiguration+Charisma+LevelBonusSettings` |
| `BackendConfigSettingsClass+GClass1752` | `EFT.GlobalConfiguration+ColliderSettings` |
| `BackendConfigSettingsClass+GClass1744` | `EFT.GlobalConfiguration+CoopGlobalSettings` |
| `BackendConfigSettingsClass+GClass1773` | `EFT.GlobalConfiguration+CovertMovement` |
| `BackendConfigSettingsClass+GClass1757` | `EFT.GlobalConfiguration+Crafting` |
| `BackendConfigSettingsClass+GClass1772` | `EFT.GlobalConfiguration+DMR` |
| `BackendConfigSettingsClass+GClass1760` | `EFT.GlobalConfiguration+Endurance` |
| `BackendConfigSettingsClass+GClass1746` | `EFT.GlobalConfiguration+EventGlobalSettings` |
| `BackendConfigSettingsClass+GClass1720` | `EFT.GlobalConfiguration+ExperienceSettings` |
| `BackendConfigSettingsClass+GClass1720+GClass1725` | `EFT.GlobalConfiguration+ExperienceSettings+HealSettings` |
| `BackendConfigSettingsClass+GClass1720+GClass1722` | `EFT.GlobalConfiguration+ExperienceSettings+KillSettings` |
| `BackendConfigSettingsClass+GClass1720+GClass1722+GClass1723` | `EFT.GlobalConfiguration+ExperienceSettings+KillSettings+ComboSettings` |
| `BackendConfigSettingsClass+GClass1720+GClass1724` | `EFT.GlobalConfiguration+ExperienceSettings+LevelSettings` |
| `BackendConfigSettingsClass+GClass1720+GClass1721` | `EFT.GlobalConfiguration+ExperienceSettings+LootAttemptSettings` |
| `BackendConfigSettingsClass+GClass1720+GClass1726` | `EFT.GlobalConfiguration+ExperienceSettings+MatchEndSettings` |
| `BackendConfigSettingsClass+GClass1720+GClass1726+GClass1727` | `EFT.GlobalConfiguration+ExperienceSettings+MatchEndSettings+TransitMult` |
| `BackendConfigSettingsClass+GClass1751` | `EFT.GlobalConfiguration+FavoriteItemsGlobalSettings` |
| `BackendConfigSettingsClass+GClass1728` | `EFT.GlobalConfiguration+HealthSettings` |
| `BackendConfigSettingsClass+GClass1728+GClass1729` | `EFT.GlobalConfiguration+HealthSettings+FallingSettings` |
| `BackendConfigSettingsClass+GClass1728+GClass1730` | `EFT.GlobalConfiguration+HealthSettings+HealPriceSettings` |
| `BackendConfigSettingsClass+GClass1763` | `EFT.GlobalConfiguration+HealthSkill` |
| `BackendConfigSettingsClass+GClass1790` | `EFT.GlobalConfiguration+HeavyVests` |
| `BackendConfigSettingsClass+GClass1754` | `EFT.GlobalConfiguration+HideoutManagement` |
| `BackendConfigSettingsClass+GClass1754+GClass1756` | `EFT.GlobalConfiguration+HideoutManagement+AdditionalEliteSlots` |
| `BackendConfigSettingsClass+GClass1754+GClass1755` | `EFT.GlobalConfiguration+HideoutManagement+PointsRate` |
| `BackendConfigSettingsClass+GClass1759` | `EFT.GlobalConfiguration+Immunity` |
| `BackendConfigSettingsClass+GClass1777` | `EFT.GlobalConfiguration+Intellect` |
| `BackendConfigSettingsClass+GClass1749` | `EFT.GlobalConfiguration+ItemsCommonSettings` |
| `BackendConfigSettingsClass+GInterface168` | `EFT.GlobalConfiguration+ITraderInfo` |
| `BackendConfigSettingsClass+GClass1789` | `EFT.GlobalConfiguration+LightVests` |
| `BackendConfigSettingsClass+GClass1775` | `EFT.GlobalConfiguration+MagDrills` |
| `BackendConfigSettingsClass+GClass1738` | `EFT.GlobalConfiguration+MalfunctionSettings` |
| `BackendConfigSettingsClass+GClass1734` | `EFT.GlobalConfiguration+MasteringGroup` |
| `BackendConfigSettingsClass+GClass1783` | `EFT.GlobalConfiguration+Memory` |
| `BackendConfigSettingsClass+GClass1758` | `EFT.GlobalConfiguration+Metabolism` |
| `BackendConfigSettingsClass+GClass1753` | `EFT.GlobalConfiguration+MountingGlobalSettings` |
| `BackendConfigSettingsClass+GClass1739` | `EFT.GlobalConfiguration+OverheatSettings` |
| `BackendConfigSettingsClass+GClass1776` | `EFT.GlobalConfiguration+Perception` |
| `BackendConfigSettingsClass+GClass1768` | `EFT.GlobalConfiguration+Pistol` |
| `BackendConfigSettingsClass+GClass1745` | `EFT.GlobalConfiguration+PveGlobalSettings` |
| `BackendConfigSettingsClass+GClass1766` | `EFT.GlobalConfiguration+RecoilControl` |
| `BackendConfigSettingsClass+GClass1717` | `EFT.GlobalConfiguration+RepairKitSettings` |
| `BackendConfigSettingsClass+GClass1717+GClass1719` | `EFT.GlobalConfiguration+RepairKitSettings+ItemEnhancementValues` |
| `BackendConfigSettingsClass+GClass1717+GClass1718` | `EFT.GlobalConfiguration+RepairKitSettings+RepairKitStrategy` |
| `BackendConfigSettingsClass+GClass1737` | `EFT.GlobalConfiguration+RestrictionInRaid` |
| `BackendConfigSettingsClass+GClass1767` | `EFT.GlobalConfiguration+Revolver` |
| `BackendConfigSettingsClass+GClass1748` | `EFT.GlobalConfiguration+RunddansGlobalSettings` |
| `BackendConfigSettingsClass+GClass1774` | `EFT.GlobalConfiguration+Search` |
| `BackendConfigSettingsClass+GClass1770` | `EFT.GlobalConfiguration+Shotgun` |
| `BackendConfigSettingsClass+GClass1771` | `EFT.GlobalConfiguration+Sniper` |
| `BackendConfigSettingsClass+GClass1736` | `EFT.GlobalConfiguration+StaminaParameters` |
| `BackendConfigSettingsClass+GClass1735` | `EFT.GlobalConfiguration+StaminaPolygonalGraph` |
| `BackendConfigSettingsClass+GClass1761` | `EFT.GlobalConfiguration+Strength` |
| `BackendConfigSettingsClass+GClass1764` | `EFT.GlobalConfiguration+StressResistance` |
| `BackendConfigSettingsClass+GClass1784` | `EFT.GlobalConfiguration+Surgery` |
| `BackendConfigSettingsClass+GClass1765` | `EFT.GlobalConfiguration+Throwing` |
| `BackendConfigSettingsClass+TransitSettingsClass` | `EFT.GlobalConfiguration+TransitGlobalSettings` |
| `BackendConfigSettingsClass+GClass1742` | `EFT.GlobalConfiguration+TriggerSettings` |
| `BackendConfigSettingsClass+GClass1788` | `EFT.GlobalConfiguration+TroubleShooting` |
| `BackendConfigSettingsClass+GClass1762` | `EFT.GlobalConfiguration+Vitality` |
| `BackendConfigSettingsClass+GClass1750` | `EFT.GlobalConfiguration+WeaponFastDrawSettings` |
| `BackendConfigSettingsClass+GClass1787` | `EFT.GlobalConfiguration+WeaponTreatment` |
| `GClass3577` | `EFT.GlobalEvents.ArtilleryShellingEcents.ShellProjectileCreateEvent` |
| `GClass3578` | `EFT.GlobalEvents.ArtilleryShellingEcents.ShellProjectileExplosionEvent` |
| `GClass3566` | `EFT.GlobalEvents.AudioEvents.AmbientAudioSystemInitializedEvent` |
| `GClass3567` | `EFT.GlobalEvents.AudioEvents.AudioOcclusionRequestEvent` |
| `GClass3568` | `EFT.GlobalEvents.AudioEvents.AudioPortalStateChangedEvent` |
| `GClass3569` | `EFT.GlobalEvents.AudioEvents.AudioWindSpeedChangedEvent` |
| `SeasonChangedEventClass` | `EFT.GlobalEvents.AudioEvents.ClientSeasonChangedEvent` |
| `GClass3571` | `EFT.GlobalEvents.AudioEvents.DayTimeSoundBlendEvent` |
| `GClass3572` | `EFT.GlobalEvents.AudioEvents.MetaXRPluginErrorEvent` |
| `GClass3573` | `EFT.GlobalEvents.AudioEvents.MyPlayerRoomChangedEvent` |
| `GClass3574` | `EFT.GlobalEvents.AudioEvents.PlayerInteractionEvent` |
| `GClass3575` | `EFT.GlobalEvents.AudioEvents.PortalDataUpdateEvent` |
| `GClass3576` | `EFT.GlobalEvents.AudioEvents.SpatialAudioSystemInitializedEvent` |
| `GClass3542` | `EFT.GlobalEvents.BaseEvent` |
| `GClass3544` | `EFT.GlobalEvents.BtrFirstPassengerGoInEvent` |
| `GClass3545` | `EFT.GlobalEvents.BufferInnerZoneStatusEvent` |
| `GClass3546` | `EFT.GlobalEvents.ClientPlayerEffectsPauseEvent` |
| `GClass3547` | `EFT.GlobalEvents.CreatePlayerEvent` |
| `GClass3548` | `EFT.GlobalEvents.CutsceneForMyPlayerStartedEvent` |
| `GClass3549` | `EFT.GlobalEvents.DeadPlayerEvent` |
| `GClass3550` | `EFT.GlobalEvents.DoorInteractionEvent` |
| `GClass3552` | `EFT.GlobalEvents.FlareShootZoneEvent` |
| `GClass3553` | `EFT.GlobalEvents.FlareSuccessEvent` |
| `GlobalEventHandlerClass` | `EFT.GlobalEvents.GlobalEventsController` |
| `GClass3580` | `EFT.GlobalEvents.GlobalEventsUpdater` |
| `GClass3554` | `EFT.GlobalEvents.HeadphonesUpdateEvent` |
| `GInterface450` | `EFT.GlobalEvents.IEvent` |
| `GClass3555` | `EFT.GlobalEvents.InteractWithKeeperZoneEvent` |
| `GInterface453` | `EFT.GlobalEvents.ISyncEvent` |
| `GInterface451` | `EFT.GlobalEvents.ISyncFromClientEvent` |
| `GInterface452` | `EFT.GlobalEvents.ISyncFromServerEvent` |
| `GClass3556` | `EFT.GlobalEvents.MyPlayerInBtrZoneEvent` |
| `GClass3557` | `EFT.GlobalEvents.MyPlayerInBufferZoneStatusEvent` |
| `GClass3558` | `EFT.GlobalEvents.ObservedPlayerChangedEquipEvent` |
| `GClass3559` | `EFT.GlobalEvents.ObservedPlayerCullingChangedEvent` |
| `GClass3560` | `EFT.GlobalEvents.OnNeedToSendSpawnCmdToServerEvent` |
| `GClass3561` | `EFT.GlobalEvents.PlayerDisconnectedEvent` |
| `GClass3562` | `EFT.GlobalEvents.PlayerInteractionWithBufferZoneEvent` |
| `GClass3563` | `EFT.GlobalEvents.SendEndCutsceneOnServerEvent` |
| `GClass3551` | `EFT.GlobalEvents.SubtitlesEndEvent` |
| `GClass3564` | `EFT.GlobalEvents.SubtitlesEvent` |
| `GClass3565` | `EFT.GlobalEvents.ToggleShowInGameCursorEvent` |
| `Class1742` | `EFT.GrenadeInputTranslator` |
| `GrenadeDataPacketStruct` | `EFT.GrenadeSyncPacket` |
| `GClass1919` | `EFT.GridDescriptor` |
| `GClass1954` | `EFT.GridItemAddressDescriptor` |
| `GClass1413` | `EFT.GroupInvite` |
| `GroupPlayerDataClass` | `EFT.GroupPlayer` |
| `HalloweenEventControllerClass` | `EFT.HalloweenEventController` |
| `GClass2107` | `EFT.HandAway` |
| `GClass3535` | `EFT.HandBook.BaseHandbook` |
| `HandbookClass` | `EFT.HandBook.Handbook` |
| `GClass3755` | `EFT.HandBook.HandbookContextInteractions` |
| `GClass3538` | `EFT.HandBook.HandbookExtensions` |
| `GClass3537` | `EFT.HandBook.HandbookInfo` |
| `EntityNodeClass` | `EFT.HandBook.HandbookNode` |
| `GClass1625` | `EFT.HandBook.HandbookNodes` |
| `EFT.HandBook.HandbookScreen+GClass3862` | `EFT.HandBook.HandbookScreen+HandbookScreenController` |
| `GInterface447` | `EFT.HandBook.IBaseHandbook` |
| `GInterface448` | `EFT.HandBook.IHandbookNode` |
| `GClass1714` | `EFT.HandbookSettings` |
| `GStruct234` | `EFT.HandsChangePacket` |
| `HandsControllerToEnumClass` | `EFT.HandsControllerTypeConvert` |
| `GStruct237` | `EFT.HeadlightsComboPacket` |
| `GClass2073` | `EFT.HeadLightsValidator` |
| `GClass2182` | `EFT.HealthInfoAdapter` |
| `GClass1821` | `EFT.HealthRegenerationBonus` |
| `GClass2266` | `EFT.HealthStatisticsManager` |
| `EFT.HealthSystem.ActiveHealthController+GClass3008` | `EFT.HealthSystem.ActiveHealthController+Effect` |
| `EFT.HealthSystem.ActiveHealthController+Stimulator+Class2222` | `EFT.HealthSystem.ActiveHealthController+Stimulator+Buff` |
| `GClass3009` | `EFT.HealthSystem.BaseHealthController` |
| `GClass3009+Class2234` | `EFT.HealthSystem.BaseHealthController+BodyPartHealHelper` |
| `GClass3057` | `EFT.HealthSystem.BodyPartsWithEffects` |
| `GClass3055` | `EFT.HealthSystem.BuffDescription` |
| `GClass3012` | `EFT.HealthSystem.ClientPlayerHealthController` |
| `GClass3051` | `EFT.HealthSystem.DamageHelper` |
| `GClass3056` | `EFT.HealthSystem.EffectDescription` |
| `PausedEffectsStruct` | `EFT.HealthSystem.EffectInfoStorage` |
| `GClass3019` | `EFT.HealthSystem.EffectsSettings` |
| `GClass3019+GClass3038` | `EFT.HealthSystem.EffectsSettings+BerserkSettings` |
| `GClass3019+GClass3022` | `EFT.HealthSystem.EffectsSettings+BleedingSettings` |
| `GClass3019+GClass3047` | `EFT.HealthSystem.EffectsSettings+BodyTemperatureSettings` |
| `GClass3019+GClass3037` | `EFT.HealthSystem.EffectsSettings+ChronicStaminaFatigueSettings` |
| `GClass3019+GClass3024` | `EFT.HealthSystem.EffectsSettings+ContusionSettings` |
| `GClass3019+GClass3021` | `EFT.HealthSystem.EffectsSettings+DehydrationSettings` |
| `GClass3019+GClass3025` | `EFT.HealthSystem.EffectsSettings+DisorientationSettings` |
| `GClass3019+GClass3026` | `EFT.HealthSystem.EffectsSettings+ExhaustionSettings` |
| `GClass3019+GClass3020` | `EFT.HealthSystem.EffectsSettings+ExistenceSettings` |
| `GClass3019+GClass3039` | `EFT.HealthSystem.EffectsSettings+FlashSettings` |
| `GClass3019+GClass3023` | `EFT.HealthSystem.EffectsSettings+FractureSettings` |
| `GClass3019+GClass3032` | `EFT.HealthSystem.EffectsSettings+HealerSettings` |
| `GClass3019+GClass3048` | `EFT.HealthSystem.EffectsSettings+HealthBoostSettings` |
| `GClass3019+GClass3030` | `EFT.HealthSystem.EffectsSettings+IntoxicationSettings` |
| `GClass3019+GClass3031` | `EFT.HealthSystem.EffectsSettings+LethalIntoxicationSettings` |
| `GClass3019+GClass3027` | `EFT.HealthSystem.EffectsSettings+LowEdgeHealthSettings` |
| `GClass3019+GClass3040` | `EFT.HealthSystem.EffectsSettings+MedEffectSettings` |
| `GClass3019+GClass3050` | `EFT.HealthSystem.EffectsSettings+MusclePainSettings` |
| `GClass3019+GClass3042` | `EFT.HealthSystem.EffectsSettings+PainKillerSettings` |
| `GClass3019+GClass3041` | `EFT.HealthSystem.EffectsSettings+PainSettings` |
| `GClass3019+GClass3049` | `EFT.HealthSystem.EffectsSettings+ProbabilitySetting` |
| `GClass3019+GClass3028` | `EFT.HealthSystem.EffectsSettings+RadExposureSettings` |
| `GClass3019+GClass3033` | `EFT.HealthSystem.EffectsSettings+RegenerationSettings` |
| `GClass3019+GClass3033+GClass3034` | `EFT.HealthSystem.EffectsSettings+RegenerationSettings+HealthSettings` |
| `GClass3019+GClass3033+GClass3035` | `EFT.HealthSystem.EffectsSettings+RegenerationSettings+InfluenceSettings` |
| `GClass3019+GClass3043` | `EFT.HealthSystem.EffectsSettings+SandingScreenSettings` |
| `GClass3019+GClass3044` | `EFT.HealthSystem.EffectsSettings+StimulatorSettings` |
| `GClass3019+GClass3044+GClass3045` | `EFT.HealthSystem.EffectsSettings+StimulatorSettings+StimulatorBuffSettings` |
| `GClass3019+GClass3029` | `EFT.HealthSystem.EffectsSettings+StunSettings` |
| `GClass3019+GClass3046` | `EFT.HealthSystem.EffectsSettings+TremorSettings` |
| `GClass3019+GClass3036` | `EFT.HealthSystem.EffectsSettings+WoundSettings` |
| `GStruct392` | `EFT.HealthSystem.EnduranceEffectStore` |
| `GClass3058` | `EFT.HealthSystem.HealthHelper` |
| `GClass3058+GClass3060` | `EFT.HealthSystem.HealthHelper+EffectActivator` |
| `GClass3058+GClass3059` | `EFT.HealthSystem.HealthHelper+EffectTypeCode` |
| `GClass3052` | `EFT.HealthSystem.HealthTreatmentBodyPartData` |
| `TreatmentDataClass` | `EFT.HealthSystem.HealthTreatmentData` |
| `GInterface381` | `EFT.HealthSystem.IBaseHealthController` |
| `GInterface350` | `EFT.HealthSystem.IBerserk` |
| `GInterface341` | `EFT.HealthSystem.IBleeding` |
| `GInterface351` | `EFT.HealthSystem.IBodyTemperature` |
| `GInterface366` | `EFT.HealthSystem.IChronicStaminaFatigue` |
| `GInterface352` | `EFT.HealthSystem.IContusion` |
| `GInterface373` | `EFT.HealthSystem.IDamageModifier` |
| `GInterface343` | `EFT.HealthSystem.IDehydration` |
| `GInterface334` | `EFT.HealthSystem.IDesirable` |
| `GInterface353` | `EFT.HealthSystem.IDisorientation` |
| `GInterface329` | `EFT.HealthSystem.IEffectTriggersUIPanel` |
| `GInterface364` | `EFT.HealthSystem.IEncumbered` |
| `GInterface375` | `EFT.HealthSystem.IEndurance` |
| `GInterface344` | `EFT.HealthSystem.IExhaustion` |
| `GInterface348` | `EFT.HealthSystem.IExistence` |
| `GInterface326` | `EFT.HealthSystem.IExperienceHealthEffect` |
| `GInterface354` | `EFT.HealthSystem.IFlash` |
| `GInterface342` | `EFT.HealthSystem.IFracture` |
| `GInterface372` | `EFT.HealthSystem.IFrostbite` |
| `GInterface338` | `EFT.HealthSystem.IFullHealthRegenerationEffect` |
| `GInterface368` | `EFT.HealthSystem.IHalloweenBuff` |
| `GInterface374` | `EFT.HealthSystem.IHealthBoost` |
| `IEffect` | `EFT.HealthSystem.IHealthEffect` |
| `GInterface340` | `EFT.HealthSystem.IHeavyBleeding` |
| `GInterface337` | `EFT.HealthSystem.IHiddenByAnotherEffectAllOverBody` |
| `GInterface367` | `EFT.HealthSystem.IImmunityPreventedNegativeEffect` |
| `GInterface330` | `EFT.HealthSystem.IInitializable` |
| `GInterface336` | `EFT.HealthSystem.IInsignificant` |
| `GInterface346` | `EFT.HealthSystem.IIntoxication` |
| `GInterface347` | `EFT.HealthSystem.ILethalIntoxication` |
| `GInterface339` | `EFT.HealthSystem.ILightBleeding` |
| `GInterface356` | `EFT.HealthSystem.ILowEdgeHealth` |
| `GInterface376` | `EFT.HealthSystem.IMedEffect` |
| `GInterface379` | `EFT.HealthSystem.IMildMusclePain` |
| `GInterface369` | `EFT.HealthSystem.IMisfireEffect` |
| `GInterface378` | `EFT.HealthSystem.IMusclePain` |
| `GInterface365` | `EFT.HealthSystem.IOverEncumbered` |
| `GInterface357` | `EFT.HealthSystem.IPain` |
| `GInterface358` | `EFT.HealthSystem.IPainKiller` |
| `GInterface371` | `EFT.HealthSystem.IPanicEffect` |
| `GInterface335` | `EFT.HealthSystem.IPermanent` |
| `GInterface327` | `EFT.HealthSystem.IQuickHealHealthEffect` |
| `GInterface345` | `EFT.HealthSystem.IRadExposure` |
| `GInterface349` | `EFT.HealthSystem.IRegeneration` |
| `GInterface333` | `EFT.HealthSystem.IRestorable` |
| `GInterface359` | `EFT.HealthSystem.ISandingScreen` |
| `GInterface380` | `EFT.HealthSystem.ISevereMusclePain` |
| `GInterface331` | `EFT.HealthSystem.IStackable` |
| `GInterface332` | `EFT.HealthSystem.IStackableFromDifferentTemplates` |
| `GInterface370` | `EFT.HealthSystem.IStaminaZeroEffect` |
| `GInterface377` | `EFT.HealthSystem.IStimulator` |
| `IPlayerBuff` | `EFT.HealthSystem.IStimulatorBuff` |
| `GInterface324` | `EFT.HealthSystem.IStimulatorDebuff` |
| `GInterface360` | `EFT.HealthSystem.IStun` |
| `GInterface361` | `EFT.HealthSystem.ITremor` |
| `GInterface363` | `EFT.HealthSystem.ITunnelVision` |
| `GInterface362` | `EFT.HealthSystem.IWound` |
| `GInterface355` | `EFT.HealthSystem.IZombieInfection` |
| `GClass3017` | `EFT.HealthSystem.MedEffectHelper` |
| `GStruct393` | `EFT.HealthSystem.MedEffectStore` |
| `NetworkHealthControllerAbstractClass` | `EFT.HealthSystem.NetworkHealthController` |
| `NetworkHealthControllerAbstractClass+NetworkBodyEffectsAbstractClass` | `EFT.HealthSystem.NetworkHealthController+Effect` |
| `NetworkHealthControllerAbstractClass+Stimulator+Class2246` | `EFT.HealthSystem.NetworkHealthController+Stimulator+Buff` |
| `HealthControllerClass` | `EFT.HealthSystem.OfflineHealthController` |
| `HealthControllerClass+GClass3015` | `EFT.HealthSystem.OfflineHealthController+Effect` |
| `HealthControllerClass+GClass3016` | `EFT.HealthSystem.OfflineHealthController+Effect` |
| `HealthControllerClass+Stimulator+Class2252` | `EFT.HealthSystem.OfflineHealthController+Stimulator+Buff` |
| `GClass3010` | `EFT.HealthSystem.PlayerHealthController` |
| `GClass3062` | `EFT.HealthSystem.RelativeHealthValue` |
| `GClass3054` | `EFT.HealthSystem.SimpleBuffDescription` |
| `GClass3018` | `EFT.HealthSystem.StimulatorHelper` |
| `GStruct394` | `EFT.HealthSystem.StimulatorStore` |
| `NetworkHealthSyncPacketStruct` | `EFT.HealthSystem.SyncHealthPacket` |
| `NetworkHealthSyncPacketStruct+NetworkHealthDataPacketStruct` | `EFT.HealthSystem.SyncHealthPacket+NetworkSyncHealthDataUnion` |
| `NetworkHealthSyncPacketStruct+NetworkHealthExtraDataTypeStruct` | `EFT.HealthSystem.SyncHealthPacket+SyncAddEffect` |
| `NetworkHealthSyncPacketStruct+NetworkHealthExtraDataTypeStruct+GStruct398` | `EFT.HealthSystem.SyncHealthPacket+SyncAddEffect+ExtraDataUnion` |
| `NetworkHealthSyncPacketStruct+GStruct410` | `EFT.HealthSystem.SyncHealthPacket+SyncApplyDamage` |
| `NetworkHealthSyncPacketStruct+GStruct406` | `EFT.HealthSystem.SyncHealthPacket+SyncBodyHealth` |
| `NetworkHealthSyncPacketStruct+GStruct414` | `EFT.HealthSystem.SyncHealthPacket+SyncBurnEyes` |
| `NetworkHealthSyncPacketStruct+GStruct408` | `EFT.HealthSystem.SyncHealthPacket+SyncDamageCoeff` |
| `NetworkHealthSyncPacketStruct+GStruct411` | `EFT.HealthSystem.SyncHealthPacket+SyncDestroyedBodyPart` |
| `NetworkHealthSyncPacketStruct+GStruct403` | `EFT.HealthSystem.SyncHealthPacket+SyncEffectMedResource` |
| `NetworkHealthSyncPacketStruct+GStruct400` | `EFT.HealthSystem.SyncHealthPacket+SyncEffectNextState` |
| `NetworkHealthSyncPacketStruct+GStruct401` | `EFT.HealthSystem.SyncHealthPacket+SyncEffectStateTime` |
| `NetworkHealthSyncPacketStruct+GStruct404` | `EFT.HealthSystem.SyncHealthPacket+SyncEffectStimulatorBuff` |
| `NetworkHealthSyncPacketStruct+GStruct402` | `EFT.HealthSystem.SyncHealthPacket+SyncEffectStrength` |
| `NetworkHealthSyncPacketStruct+GStruct413` | `EFT.HealthSystem.SyncHealthPacket+SyncHealerDone` |
| `NetworkHealthSyncPacketStruct+GStruct407` | `EFT.HealthSystem.SyncHealthPacket+SyncHealthFactor` |
| `NetworkHealthSyncPacketStruct+GStruct412` | `EFT.HealthSystem.SyncHealthPacket+SyncHealthRates` |
| `NetworkHealthSyncPacketStruct+GStruct405` | `EFT.HealthSystem.SyncHealthPacket+SyncIsAlive` |
| `NetworkHealthSyncPacketStruct+GStruct399` | `EFT.HealthSystem.SyncHealthPacket+SyncRemoveEffect` |
| `NetworkHealthSyncPacketStruct+GStruct409` | `EFT.HealthSystem.SyncHealthPacket+SyncStaminaCoeff` |
| `GClass3061` | `EFT.HealthSystem.SyncHealthPacketSerialization` |
| `GClass2447` | `EFT.Hideout.AreaBehaviour` |
| `GStruct297` | `EFT.Hideout.AreaDetailsCache` |
| `GClass2448` | `EFT.Hideout.AreaDetailsData` |
| `GClass2449` | `EFT.Hideout.AreaDetailsGroup` |
| `EFT.Hideout.AreaDetailsGroup+GStruct298` | `EFT.Hideout.AreaDetailsGroup+DetailsEnumerator` |
| `GClass2416` | `EFT.Hideout.AreaEffectsPool` |
| `EFT.Hideout.AreasPanel+Class1973` | `EFT.Hideout.AreasPanel+AreasPanelComparer` |
| `ProductionBuildAbstractClass` | `EFT.Hideout.BaseHideoutScheme` |
| `GClass2435` | `EFT.Hideout.BitcoinProducer` |
| `GClass2451` | `EFT.Hideout.CircleOfCultistsAreaStashController` |
| `GClass2456` | `EFT.Hideout.Constants` |
| `GClass2417` | `EFT.Hideout.ConsumptionTimer` |
| `GClass2415` | `EFT.Hideout.ControlledObject` |
| `GClass2432` | `EFT.Hideout.CultistsProducer` |
| `GClass2442` | `EFT.Hideout.CultistsScheme` |
| `GClass2430` | `EFT.Hideout.DefaultProductionStorage` |
| `GClass2454` | `EFT.Hideout.EmptyRelatedData` |
| `EnergyControllerClass` | `EFT.Hideout.EnergyController` |
| `GClass2457` | `EFT.Hideout.FreeSpaceCameraMover` |
| `HideoutControllerClass` | `EFT.Hideout.FuelConsumption` |
| `GClass2421` | `EFT.Hideout.HideoutCustomizationController` |
| `GClass2422` | `EFT.Hideout.HideoutEventSystemSender` |
| `GStruct299` | `EFT.Hideout.HideoutItemReference` |
| `GClass2452` | `EFT.Hideout.HideoutLocalData` |
| `HideoutClass` | `EFT.Hideout.HideoutRepresentation` |
| `HideoutClass+Class404` | `EFT.Hideout.HideoutRepresentation+HideoutLogger` |
| `EFT.Hideout.HideoutScreenRear+GClass3921` | `EFT.Hideout.HideoutScreenRear+HideoutScreenController` |
| `HideoutSettingsClass` | `EFT.Hideout.HideoutSettings` |
| `GClass2425` | `EFT.Hideout.HideoutSkillManager` |
| `GClass2426` | `EFT.Hideout.HideoutSlot` |
| `GInterface242` | `EFT.Hideout.IAmbianceObject` |
| `GInterface257` | `EFT.Hideout.IAreaRelatedPanel` |
| `GInterface259` | `EFT.Hideout.IAreaSpecialActionScreen` |
| `GInterface260` | `EFT.Hideout.ICameraMover` |
| `IHideoutConsumer` | `EFT.Hideout.IConsumer` |
| `GInterface253` | `EFT.Hideout.IConsumerAreaBehaviour` |
| `GInterface248` | `EFT.Hideout.IEnergyDependentBehaviour` |
| `GInterface244` | `EFT.Hideout.IGenerator` |
| `GInterface245` | `EFT.Hideout.IHideoutAreaWrapper` |
| `GInterface246` | `EFT.Hideout.IHideoutMonoBehaviour` |
| `GInterface252` | `EFT.Hideout.IHideoutStart` |
| `GInterface243` | `EFT.Hideout.IInteractiveAmbianceObject` |
| `GInterface255` | `EFT.Hideout.IItemSlotsAreaBehaviour` |
| `GClass2427` | `EFT.Hideout.Improvement` |
| `ImprovementControllerClass` | `EFT.Hideout.ImprovementController` |
| `HideoutImprovementsDataClass` | `EFT.Hideout.ImprovementData` |
| `GClass2453` | `EFT.Hideout.InventoryEquipmentStashLoader` |
| `GInterface251` | `EFT.Hideout.IProduceView` |
| `ICompleteItemsStorage` | `EFT.Hideout.IProductionStorage` |
| `GInterface256` | `EFT.Hideout.IQteAreaBehaviour` |
| `GInterface258` | `EFT.Hideout.IRequirementPanel` |
| `GInterface250` | `EFT.Hideout.ISpecialProductionCoefficient` |
| `GClass2433` | `EFT.Hideout.ItemsProducer` |
| `GClass2431` | `EFT.Hideout.ItemsProducerBase` |
| `GInterface254` | `EFT.Hideout.ITooltipHideoutArea` |
| `GClass2434` | `EFT.Hideout.PermanentProducer` |
| `GClass2438` | `EFT.Hideout.ProducingItemController` |
| `GClass2438+Class1951` | `EFT.Hideout.ProducingItemController+ProducingProcess` |
| `GClass2437` | `EFT.Hideout.ProductionController` |
| `GClass2437+Class1938` | `EFT.Hideout.ProductionController+ProductionCompletedEventData` |
| `HideoutProductionsDataClass` | `EFT.Hideout.ProductionData` |
| `GClass2440` | `EFT.Hideout.ProductionScheme` |
| `GClass2443` | `EFT.Hideout.ProductionSchemesCollection` |
| `GClass2458` | `EFT.Hideout.QTEResult` |
| `GClass2459` | `EFT.Hideout.RailCameraMover` |
| `GClass2418` | `EFT.Hideout.ResourceConsumer` |
| `GClass2436` | `EFT.Hideout.ScavCaseProducer` |
| `GClass2441` | `EFT.Hideout.ScavCaseScheme` |
| `GClass2444` | `EFT.Hideout.ScavProduct` |
| `GStruct296` | `EFT.Hideout.ScavProductVariation` |
| `EFT.Hideout.SelectItemContextMenu+Struct700` | `EFT.Hideout.SelectItemContextMenu+DirectionSettings` |
| `GInterface262` | `EFT.Hideout.ShootingRange.IFoldingTarget` |
| `GInterface261` | `EFT.Hideout.ShootingRange.ITargetScoring` |
| `GClass2461` | `EFT.Hideout.ShootingRange.PopperPhaseTraining` |
| `GClass2462` | `EFT.Hideout.ShootingRange.PopperTargetFoldScenario` |
| `GClass2463` | `EFT.Hideout.ShootingRange.PopperTargetStandScenario` |
| `GClass2464` | `EFT.Hideout.ShootingRange.PopperTargetUnfoldScenario` |
| `GClass2465` | `EFT.Hideout.ShootingRange.RailPhaseTraining` |
| `GClass2466` | `EFT.Hideout.ShootingRange.RailSpeedPhaseTraining` |
| `GClass2467` | `EFT.Hideout.ShootingRange.RailTargetFoldScenario` |
| `GClass2468` | `EFT.Hideout.ShootingRange.RailTargetInspectScenario` |
| `GClass2469` | `EFT.Hideout.ShootingRange.RailTargetShootingScenario` |
| `GClass2470` | `EFT.Hideout.ShootingRange.RailTargetStopScenario` |
| `GClass2471` | `EFT.Hideout.ShootingRange.ShootTrainingScenario` |
| `GClass2472` | `EFT.Hideout.ShootingRange.TargetControl` |
| `GClass2460` | `EFT.Hideout.ShootingRange.TargetScenario` |
| `GClass2445` | `EFT.Hideout.SingleSchemeStorage` |
| `GClass2420` | `EFT.Hideout.SupplyItem` |
| `GClass2455` | `EFT.Hideout.TraderRequirement` |
| `EFT.Hideout.VideoAmbiance+Class1889` | `EFT.Hideout.VideoAmbiance+CurrentVideoClip` |
| `GClass2203` | `EFT.HideoutCounters` |
| `GClass2212` | `EFT.HideoutData` |
| `Class1716` | `EFT.HideoutGrenadeInputTranslator` |
| `HideoutProfileDescriptorClass` | `EFT.HideoutInfo` |
| `EFT.HideoutPlayer+GClass2352` | `EFT.HideoutPlayer+HideoutNightVisionTemplate` |
| `EFT.HideoutPlayer+Class1309` | `EFT.HideoutPlayer+HideoutSlotObserver` |
| `Class1726` | `EFT.HideoutPlayerInputTranslator` |
| `GClass1820` | `EFT.HydrationRegenerationBonus` |
| `GInterface166` | `EFT.IAbstractSession` |
| `IOnItemAdded` | `EFT.IAddHandler` |
| `GInterface172` | `EFT.IAttachedBonus` |
| `GInterface188` | `EFT.IBindHandler` |
| `GInterface220` | `EFT.ICaptchaHandler` |
| `IBackEndSession` | `EFT.IClientSession` |
| `GInterface197` | `EFT.ICompassController` |
| `IViewFilter` | `EFT.ICustomizationFilter` |
| `GInterface211` | `EFT.ICustomRotator` |
| `IdleStateClass` | `EFT.IdlePlayerState` |
| `GInterface187` | `EFT.IDrainHandler` |
| `ISession` | `EFT.IEftSession` |
| `GInterface198` | `EFT.IEmptyHandsController` |
| `GInterface234` | `EFT.IExchangeable` |
| `GInterface200` | `EFT.IFirearmAnimationDataRepresenter` |
| `IFrameIndexer` | `EFT.IFrameIndexer` |
| `IGame` | `EFT.IGame` |
| `GInterface169` | `EFT.IGameLevel` |
| `IHandsThrowController` | `EFT.IGrenadeController` |
| `IHandsController` | `EFT.IHandsController` |
| `GInterface232` | `EFT.IHandsInputTranslator` |
| `GInterface221` | `EFT.IImageLoader` |
| `GInterface177` | `EFT.IInteractive` |
| `GInterface185` | `EFT.IInventoryMagazineCheckHandler` |
| `GInterface171` | `EFT.IItemInfoContainer` |
| `GInterface179` | `EFT.IItemRelatedView` |
| `GInterface183` | `EFT.ILoadMagazineHandler` |
| `GInterface182` | `EFT.IMagazineChangedHandler` |
| `GInterface225` | `EFT.IMatchmakerSession` |
| `GInterface203` | `EFT.IMedsController` |
| `GInterface170` | `EFT.IMetricsHandler` |
| `GClass1447` | `EFT.ImpostorAnimator` |
| `GStruct302` | `EFT.Impostors.CrossFadeStruct` |
| `Interface14` | `EFT.Impostors.IImpostorsCameraContext` |
| `Interface15` | `EFT.Impostors.IImpostorsMainCameraContext` |
| `Interface16` | `EFT.Impostors.IImpostorsOpticCameraContext` |
| `GClass2598` | `EFT.Impostors.ImpostorCameraExtension` |
| `Class2097` | `EFT.Impostors.ImpostorsCameraContextAbstract` |
| `Class2100` | `EFT.Impostors.ImpostorsDrawInstance` |
| `Class2101` | `EFT.Impostors.ImpostorsGroup` |
| `Class2098` | `EFT.Impostors.ImpostorsMainCameraContext` |
| `Class2098+Class2104` | `EFT.Impostors.ImpostorsMainCameraContext+CullingShader` |
| `Class2098+Class2102` | `EFT.Impostors.ImpostorsMainCameraContext+DrawShader` |
| `Class2098+Interface17` | `EFT.Impostors.ImpostorsMainCameraContext+IDrawInstance` |
| `Class2098+Class2103` | `EFT.Impostors.ImpostorsMainCameraContext+SharedShader` |
| `Class2105` | `EFT.Impostors.ImpostorsMaterialLoader` |
| `Class2105+Class2106` | `EFT.Impostors.ImpostorsMaterialLoader+State` |
| `Class2105+Class2107` | `EFT.Impostors.ImpostorsMaterialLoader+StateQualityHigh` |
| `Class2105+Class2108` | `EFT.Impostors.ImpostorsMaterialLoader+StateQualityLow` |
| `Class2105+Class2109` | `EFT.Impostors.ImpostorsMaterialLoader+StateQualityMedium` |
| `Class2099` | `EFT.Impostors.ImpostorsOpticCameraContext` |
| `Struct796` | `EFT.Impostors.ImpostorStruct` |
| `Class2112` | `EFT.Impostors.ImpostorTextureParams` |
| `GStruct303` | `EFT.Impostors.ImpostorWind` |
| `GClass2599` | `EFT.Impostors.ImpostorWindEqualityComparer` |
| `GClass1837` | `EFT.IncreaseCanisterSlotsBonus` |
| `GInterface217` | `EFT.INestable` |
| `Interface13` | `EFT.INetworkGame` |
| `GInterface228` | `EFT.INetworkGameSession` |
| `ResourceKeyManagerAbstractClass` | `EFT.InGameBundles` |
| `GClass1798` | `EFT.InGameResources` |
| `GClass2340` | `EFT.InGameStatus` |
| `LoadingProgressStruct` | `EFT.InitLevelProgress` |
| `GClass2404` | `EFT.InputSystem.AxisUpdater` |
| `GClass2405` | `EFT.InputSystem.AxisUpdaterFactory` |
| `GClass2406` | `EFT.InputSystem.ECommandExtension` |
| `GInterface240` | `EFT.InputSystem.IGameKey` |
| `IInputTree` | `EFT.InputSystem.IInputTree` |
| `GInterface241` | `EFT.InputSystem.IInputUpdater` |
| `GClass2407` | `EFT.InputSystem.InputAxis` |
| `GClass2409` | `EFT.InputSystem.InputAxisCombination` |
| `GClass2409+Class1862` | `EFT.InputSystem.InputAxisCombination+AxisCombinationState` |
| `GClass2409+Class1864` | `EFT.InputSystem.InputAxisCombination+AxisWithKeysState` |
| `GClass2409+Class1865` | `EFT.InputSystem.InputAxisCombination+IdlingState` |
| `GClass2409+Class1863` | `EFT.InputSystem.InputAxisCombination+JustAxisState` |
| `GClass2409+Class1866` | `EFT.InputSystem.InputAxisCombination+KeysPressedState` |
| `GClass2408` | `EFT.InputSystem.InputCombination` |
| `GClass2412` | `EFT.InputSystem.InputKey` |
| `KeyBindingClass` | `EFT.InputSystem.InputKeyCombination` |
| `KeyBindingClass+Class1879` | `EFT.InputSystem.InputKeyCombination+ClickIdlingState` |
| `KeyBindingClass+Class1869` | `EFT.InputSystem.InputKeyCombination+ClickWaitForReleaseState` |
| `KeyBindingClass+Class1878` | `EFT.InputSystem.InputKeyCombination+DoubleClickIdlingState` |
| `KeyBindingClass+Class1875` | `EFT.InputSystem.InputKeyCombination+EmptyState` |
| `KeyBindingClass+Class1870` | `EFT.InputSystem.InputKeyCombination+LongActionState` |
| `KeyBindingClass+Class1871` | `EFT.InputSystem.InputKeyCombination+LongTapPressedState` |
| `KeyBindingClass+Class1868` | `EFT.InputSystem.InputKeyCombination+LongTapWaitForReleaseState` |
| `KeyBindingClass+Class1880` | `EFT.InputSystem.InputKeyCombination+ReleaseIdlingState` |
| `KeyBindingClass+Class1881` | `EFT.InputSystem.InputKeyCombination+ReleasePressedState` |
| `KeyBindingClass+Class1882` | `EFT.InputSystem.InputKeyCombination+ReleaseStuckState` |
| `KeyBindingClass+Class1867` | `EFT.InputSystem.InputKeyCombination+WaitForReleaseState` |
| `KeyBindingClass+Class1872` | `EFT.InputSystem.InputKeyCombination+WaitingForFirstReleaseState` |
| `KeyBindingClass+Class1873` | `EFT.InputSystem.InputKeyCombination+WaitingForSecondPressState` |
| `KeyBindingClass+Class1874` | `EFT.InputSystem.InputKeyCombination+WaitingForSecondReleaseState` |
| `InputBindingsDataClass` | `EFT.InputSystem.InputPreset` |
| `GClass2414` | `EFT.InputSystem.RemoteAxisUpdater` |
| `GClass2414+GStruct295` | `EFT.InputSystem.RemoteAxisUpdater+POINT` |
| `DeleteNoteDescriptorClass` | `EFT.InputSystem.ToggleInputKeyCombination` |
| `DeleteNoteDescriptorClass+Class1876` | `EFT.InputSystem.ToggleInputKeyCombination+ContinuousIdlingToggleState` |
| `DeleteNoteDescriptorClass+Class1877` | `EFT.InputSystem.ToggleInputKeyCombination+ContinuousPressedToggleState` |
| `GDelegate77` | `EFT.InputSystem.TranslateDelegate` |
| `GetActionsClass` | `EFT.InteractionContextHelper` |
| `GStruct254` | `EFT.InteractionInfo` |
| `GStruct225` | `EFT.InteractionPacket` |
| `GClass3702` | `EFT.Interactive.AwaitsManualActivationRequirement` |
| `GClass3712` | `EFT.Interactive.BoundExtension` |
| `GStruct438` | `EFT.Interactive.BrokenWindowPiece` |
| `RagdollClass` | `EFT.Interactive.CorpseRagdoll` |
| `GClass663` | `EFT.Interactive.EditorItemService` |
| `GClass3705` | `EFT.Interactive.EmptyOrSmallerRequirement` |
| `GClass3704` | `EFT.Interactive.EmptySlotRequirement` |
| `GClass3710` | `EFT.Interactive.ExtendedLeafReference` |
| `GClass3709` | `EFT.Interactive.ExtendedNodeReference` |
| `GClass3711` | `EFT.Interactive.ExtendedNonLeafReference` |
| `EFT.Interactive.GarlandSwitcher+Class2713` | `EFT.Interactive.GarlandSwitcher+GarlandSwitcher` |
| `EFT.Interactive.GasLamp+Struct973` | `EFT.Interactive.GasLamp+LightDescriptor` |
| `EFT.Interactive.GasLamp+Struct974` | `EFT.Interactive.GasLamp+MultiFlareDescriptor` |
| `GClass3706` | `EFT.Interactive.HasItemRequirement` |
| `GInterface467` | `EFT.Interactive.ILightSwitcher` |
| `GInterface468` | `EFT.Interactive.IMapEditable` |
| `GClass3703` | `EFT.Interactive.InventoryRequirements` |
| `Interface21` | `EFT.Interactive.IRestrictableZone` |
| `EFT.Interactive.LampController+Class2678` | `EFT.Interactive.LampController+Blinker` |
| `GClass3718` | `EFT.Interactive.LeafReference` |
| `GStruct434` | `EFT.Interactive.LighthouseTraderZonePlayerData` |
| `GStruct433` | `EFT.Interactive.LootableContainersGroupParams` |
| `GClass3715` | `EFT.Interactive.LootPointModeExtension` |
| `GClass3714` | `EFT.Interactive.LootPointNode` |
| `GClass664` | `EFT.Interactive.LootPointService` |
| `GClass3716` | `EFT.Interactive.LootPointsUtils` |
| `GClass3713` | `EFT.Interactive.MapEditableValidateIdProxy` |
| `GClass3713+GDelegate82` | `EFT.Interactive.MapEditableValidateIdProxy+UniqueIdRequestDelegate` |
| `GClass3717` | `EFT.Interactive.NodeReference` |
| `GClass3719` | `EFT.Interactive.NonLeafReference` |
| `GStruct437` | `EFT.Interactive.RelationParameters` |
| `GClass3700` | `EFT.Interactive.ScavCooperationRequirement` |
| `GClass3722` | `EFT.Interactive.SecretExfiltrations.ClientSecretExfilitranionController` |
| `GClass3721` | `EFT.Interactive.SecretExfiltrations.SecretExfilitranionController` |
| `GClass3696` | `EFT.Interactive.SecretExitTransferItemRequirement` |
| `GClass3699` | `EFT.Interactive.SkillLevelRequirement` |
| `GClass3697` | `EFT.Interactive.TimerRequirement` |
| `GClass3698` | `EFT.Interactive.TrainRequirement` |
| `KeyInteractionResultClass` | `EFT.Interactive.UnlockResult` |
| `EFT.Interactive.WindowBreaker+Class2645` | `EFT.Interactive.WindowBreaker+Piece` |
| `EFT.Interactive.WindowBreakerManager+Struct975` | `EFT.Interactive.WindowBreakerManager+BrokenWindowDescription` |
| `EFT.Interactive.WindowBreakerManager+GInterface469` | `EFT.Interactive.WindowBreakerManager+IBreakable` |
| `EFT.Interactive.WindowBreakingConfig+GClass3720` | `EFT.Interactive.WindowBreakingConfig+MeshPiece` |
| `GClass3701` | `EFT.Interactive.WorldEventRequirement` |
| `EFT.Interactive.WorldInteractiveObject+GStruct436` | `EFT.Interactive.WorldInteractiveObject+InteractionParameters` |
| `EFT.Interactive.WorldInteractiveObject+WorldInteractiveDataPacketStruct` | `EFT.Interactive.WorldInteractiveObject+InteractiveObjectStatusInfo` |
| `GDelegate83` | `EFT.Interactive.WorldInteractiveObjectInteract` |
| `GStruct165` | `EFT.InteractiveObjectsStatusPacket` |
| `PlayerInteractPacket` | `EFT.InteractWithBtrPacket` |
| `GStruct215` | `EFT.InteractWithDoorPacket` |
| `InteractPacketStruct` | `EFT.InteractWithEventObjectPacket` |
| `TransitInteractionPacketStruct` | `EFT.InteractWithTransitPacket` |
| `GStruct216` | `EFT.InteractWithTripwirePacket` |
| `GClass2093` | `EFT.InvalidCustomRotator` |
| `GStruct251` | `EFT.InventoryActionPacket` |
| `GStruct252` | `EFT.InventoryCommandPacket` |
| `EFTInventoryClass` | `EFT.InventoryDescriptor` |
| `GClass2211` | `EFT.InventoryEquipmentDescriptor` |
| `GException16` | `EFT.InventoryException` |
| `GStruct226` | `EFT.InventoryInteractionPacket` |
| `GClass3418` | `EFT.InventoryLogic.AbstractMagOperationResult` |
| `GEventArgs2` | `EFT.InventoryLogic.AddItemEventArgs` |
| `GClass3435` | `EFT.InventoryLogic.AddNoteResult` |
| `GClass3405` | `EFT.InventoryLogic.AddResult` |
| `GClass3397` | `EFT.InventoryLogic.AddSuboperation` |
| `AmmoItemClass` | `EFT.InventoryLogic.Ammo` |
| `GClass1562` | `EFT.InventoryLogic.AmmoContainerIsEmptyError` |
| `AmmoPackReloadingClass` | `EFT.InventoryLogic.AmmoPack` |
| `GClass3427` | `EFT.InventoryLogic.ApplyKeyResult` |
| `GClass3442` | `EFT.InventoryLogic.ApplySortItemsPositionResult` |
| `GClass3459` | `EFT.InventoryLogic.AreaStashItemContext` |
| `ArmBandItemClass` | `EFT.InventoryLogic.ArmBand` |
| `ArmBandTemplateClass` | `EFT.InventoryLogic.ArmBandTemplate` |
| `ArmorItemClass` | `EFT.InventoryLogic.Armor` |
| `ArmoredEquipmentItemClass` | `EFT.InventoryLogic.ArmoredEquipment` |
| `ArmoredEquipmentTemplateClass` | `EFT.InventoryLogic.ArmoredEquipmentTemplate` |
| `ArmorPlateItemClass` | `EFT.InventoryLogic.ArmorPlate` |
| `GClass3132` | `EFT.InventoryLogic.ArmorPlatesFormatter` |
| `ArmorPlateTemplateClass` | `EFT.InventoryLogic.ArmorPlateTemplate` |
| `ArmorTemplateClass` | `EFT.InventoryLogic.ArmorTemplate` |
| `AssaultCarbineItemClass` | `EFT.InventoryLogic.AssaultCarbine` |
| `AssaultCarbineTemplateClass` | `EFT.InventoryLogic.AssaultCarbineTemplate` |
| `AssaultRifleItemClass` | `EFT.InventoryLogic.AssaultRifle` |
| `AssaultRifleTemplateClass` | `EFT.InventoryLogic.AssaultRifleTemplate` |
| `AssaultScopeItemClass` | `EFT.InventoryLogic.AssaultScope` |
| `AssaultScopeTemplateClass` | `EFT.InventoryLogic.AssaultScopeTemplate` |
| `GClass1559` | `EFT.InventoryLogic.AutomaticSortFailedError` |
| `GClass1560` | `EFT.InventoryLogic.AutomaticSortNonFilteredItemError` |
| `AuxiliaryModItemClass` | `EFT.InventoryLogic.AuxiliaryMod` |
| `AuxiliaryModTemplateClass` | `EFT.InventoryLogic.AuxiliaryModTemplate` |
| `GClass3387` | `EFT.InventoryLogic.BackEndInventoryController` |
| `GClass3387+GClass3448` | `EFT.InventoryLogic.BackEndInventoryController+FullItemLocation` |
| `BackpackItemClass` | `EFT.InventoryLogic.Backpack` |
| `BackpackTemplateClass` | `EFT.InventoryLogic.BackpackTemplate` |
| `BarrelItemClass` | `EFT.InventoryLogic.Barrel` |
| `BarrelTemplateClass` | `EFT.InventoryLogic.BarrelTemplate` |
| `BarterItemItemClass` | `EFT.InventoryLogic.BarterItem` |
| `BarterItemTemplateClass` | `EFT.InventoryLogic.BarterItemTemplate` |
| `OtherItemClass` | `EFT.InventoryLogic.BarterOther` |
| `OtherTemplateClass` | `EFT.InventoryLogic.BarterOtherTemplate` |
| `GClass3308` | `EFT.InventoryLogic.BaseAssault` |
| `BatteryItemClass` | `EFT.InventoryLogic.Battery` |
| `BatteryTemplateClass` | `EFT.InventoryLogic.BatteryTemplate` |
| `GEventArgs11` | `EFT.InventoryLogic.BindItemEventArgs` |
| `GClass3431` | `EFT.InventoryLogic.BindResult` |
| `BipodItemClass` | `EFT.InventoryLogic.Bipod` |
| `BipodTemplateClass` | `EFT.InventoryLogic.BipodTemplate` |
| `BuildingMaterialItemClass` | `EFT.InventoryLogic.BuildingMaterial` |
| `BuildingMaterialTemplateClass` | `EFT.InventoryLogic.BuildingMaterialTemplate` |
| `BuiltInInsertsItemClass` | `EFT.InventoryLogic.BuiltInInserts` |
| `GClass1557` | `EFT.InventoryLogic.CannotApplyItemError` |
| `GClass1556` | `EFT.InventoryLogic.CannotModifyVitalInRaidError` |
| `GClass1558` | `EFT.InventoryLogic.CannotSortItemError` |
| `GClass3403` | `EFT.InventoryLogic.ChangeDiscardLimitsResult` |
| `GClass3409` | `EFT.InventoryLogic.ChangeVersionResult` |
| `ChargeItemClass` | `EFT.InventoryLogic.Charge` |
| `ChargeTemplateClass` | `EFT.InventoryLogic.ChargeTemplate` |
| `GClass3335` | `EFT.InventoryLogic.ChemLight` |
| `GClass3145` | `EFT.InventoryLogic.ChemLightTemplate` |
| `GClass3366` | `EFT.InventoryLogic.CollectiveItem` |
| `GClass3366+Class2460` | `EFT.InventoryLogic.CollectiveItem+CollectiveItemAddress` |
| `GClass3366+Class2460+Class2479` | `EFT.InventoryLogic.CollectiveItem+CollectiveItemAddress+CollectiveContainerAddResult` |
| `GClass3366+Class2460+Class2478` | `EFT.InventoryLogic.CollectiveItem+CollectiveItemAddress+CollectiveContainerRemoveResult` |
| `CollimatorItemClass` | `EFT.InventoryLogic.Collimator` |
| `CollimatorTemplateClass` | `EFT.InventoryLogic.CollimatorTemplate` |
| `GClass3400` | `EFT.InventoryLogic.CombinedOperationResult` |
| `CompactCollimatorItemClass` | `EFT.InventoryLogic.CompactCollimator` |
| `CompactCollimatorTemplateClass` | `EFT.InventoryLogic.CompactCollimatorTemplate` |
| `CompassItemClass` | `EFT.InventoryLogic.Compass` |
| `CompassTemplateClass` | `EFT.InventoryLogic.CompassTemplate` |
| `CompensatorItemClass` | `EFT.InventoryLogic.Compensator` |
| `CompensatorTemplateClass` | `EFT.InventoryLogic.CompensatorTemplate` |
| `CompoundItemTemplateClass` | `EFT.InventoryLogic.CompoundItemTemplate` |
| `GClass3370` | `EFT.InventoryLogic.ComputableUnitSettings` |
| `GStruct426` | `EFT.InventoryLogic.ConditionalFinishResult` |
| `GClass3414` | `EFT.InventoryLogic.ContainerAddResult` |
| `GClass3248` | `EFT.InventoryLogic.ContainerCollection` |
| `GClass3112` | `EFT.InventoryLogic.ContainerCollectionExtension` |
| `GClass3113` | `EFT.InventoryLogic.ContainerExtensions` |
| `GClass3413` | `EFT.InventoryLogic.ContainerRemoveResult` |
| `GClass3115` | `EFT.InventoryLogic.CornucopiaGrid` |
| `GClass3385` | `EFT.InventoryLogic.CorpseItemController` |
| `GEventArgs14` | `EFT.InventoryLogic.CreateMapMarkerEventArgs` |
| `GClass3438` | `EFT.InventoryLogic.CreateMapMarkerResult` |
| `CultistAmuletItemClass` | `EFT.InventoryLogic.CultistAmulet` |
| `CultistAmuletTemplateClass` | `EFT.InventoryLogic.CultistAmuletTemplate` |
| `GClass3130` | `EFT.InventoryLogic.CurrencyUtil` |
| `GClass3130+GClass3131` | `EFT.InventoryLogic.CurrencyUtil+CurrencyData` |
| `CylinderMagazineItemClass` | `EFT.InventoryLogic.CylinderMagazine` |
| `CylinderMagazineTemplateClass` | `EFT.InventoryLogic.CylinderMagazineTemplate` |
| `GClass3451` | `EFT.InventoryLogic.DefaultItemContext` |
| `GClass3453` | `EFT.InventoryLogic.DefaultItemContext` |
| `GEventArgs16` | `EFT.InventoryLogic.DeleteMapMarkerEventArgs` |
| `GClass3440` | `EFT.InventoryLogic.DeleteMapMarkerResult` |
| `GClass3437` | `EFT.InventoryLogic.DeleteNoteResult` |
| `GClass3401` | `EFT.InventoryLogic.DestroyedMainItemIndicatorResult` |
| `GClass3423` | `EFT.InventoryLogic.DestroyPartiallyResult` |
| `GClass3404` | `EFT.InventoryLogic.DestroyResult` |
| `GClass3224` | `EFT.InventoryLogic.DialogItemTemplate` |
| `GClass1582` | `EFT.InventoryLogic.DiscardLimitsDesyncError` |
| `GClass1583` | `EFT.InventoryLogic.DiscardLimitsReachedError` |
| `GClass3408` | `EFT.InventoryLogic.DiscardResult` |
| `ItemContextClass` | `EFT.InventoryLogic.DragItemContext` |
| `GEventArgs13` | `EFT.InventoryLogic.DrainItemEventArgs` |
| `DrinkItemClass` | `EFT.InventoryLogic.Drink` |
| `DrinkTemplateClass` | `EFT.InventoryLogic.DrinkTemplate` |
| `GClass3467` | `EFT.InventoryLogic.DropdownManipulation` |
| `DrugsItemClass` | `EFT.InventoryLogic.Drugs` |
| `DrugsTemplateClass` | `EFT.InventoryLogic.DrugsTemplate` |
| `GClass3468` | `EFT.InventoryLogic.EditBuildManipulation` |
| `GEventArgs15` | `EFT.InventoryLogic.EditMapMarkerEventArgs` |
| `GClass3439` | `EFT.InventoryLogic.EditMapMarkerResult` |
| `GClass3436` | `EFT.InventoryLogic.EditNoteResult` |
| `ElectronicsItemClass` | `EFT.InventoryLogic.Electronics` |
| `ElectronicsTemplateClass` | `EFT.InventoryLogic.ElectronicsTemplate` |
| `GClass3365` | `EFT.InventoryLogic.EmptyHands` |
| `GClass3247` | `EFT.InventoryLogic.EmptyHandsTemplate` |
| `GClass3450` | `EFT.InventoryLogic.EmptyItemContext` |
| `EquipmentItemClass` | `EFT.InventoryLogic.Equipment` |
| `GClass3452` | `EFT.InventoryLogic.EquipmentBuildItemContext` |
| `EquipmentTemplateClass` | `EFT.InventoryLogic.EquipmentTemplate` |
| `GEventArgs6` | `EFT.InventoryLogic.ExamineItemEventArgs` |
| `GClass3369` | `EFT.InventoryLogic.ExplosionSettings` |
| `ExplosiveItemComponentClass` | `EFT.InventoryLogic.ExplosiveAmmoComponent` |
| `FaceCoverItemClass` | `EFT.InventoryLogic.FaceCover` |
| `FaceCoverTemplateClass` | `EFT.InventoryLogic.FaceCoverTemplate` |
| `GClass3123` | `EFT.InventoryLogic.FailedInventoryResult` |
| `GEventArgs4` | `EFT.InventoryLogic.FireOperationEventArgs` |
| `GClass3457` | `EFT.InventoryLogic.FirstLevelSelectableItemContext` |
| `FlashHiderItemClass` | `EFT.InventoryLogic.FlashHider` |
| `FlashHiderTemplateClass` | `EFT.InventoryLogic.FlashHiderTemplate` |
| `FlashlightItemClass` | `EFT.InventoryLogic.Flashlight` |
| `FlashlightTemplateClass` | `EFT.InventoryLogic.FlashlightTemplate` |
| `FlyerItemClass` | `EFT.InventoryLogic.Flyer` |
| `FlyerTemplateClass` | `EFT.InventoryLogic.FlyerTemplate` |
| `GClass3428` | `EFT.InventoryLogic.FoldResult` |
| `FoodItemClass` | `EFT.InventoryLogic.Food` |
| `FoodDrinkItemClass` | `EFT.InventoryLogic.FoodDrink` |
| `FoodDrinkTemplateClass` | `EFT.InventoryLogic.FoodDrinkTemplate` |
| `FoodTemplateClass` | `EFT.InventoryLogic.FoodTemplate` |
| `ForegripItemClass` | `EFT.InventoryLogic.Foregrip` |
| `ForegripTemplateClass` | `EFT.InventoryLogic.ForegripTemplate` |
| `FuelItemClass` | `EFT.InventoryLogic.Fuel` |
| `FuelTemplateClass` | `EFT.InventoryLogic.FuelTemplate` |
| `FunctionalModItemClass` | `EFT.InventoryLogic.FunctionalMod` |
| `FunctionalModTemplateClass` | `EFT.InventoryLogic.FunctionalModTemplate` |
| `GClass3341` | `EFT.InventoryLogic.GameDisk` |
| `GasblockItemClass` | `EFT.InventoryLogic.Gasblock` |
| `GasblockTemplateClass` | `EFT.InventoryLogic.GasblockTemplate` |
| `GearModItemClass` | `EFT.InventoryLogic.GearMod` |
| `GearModTemplateClass` | `EFT.InventoryLogic.GearModTemplate` |
| `GrenadeLauncherItemClass` | `EFT.InventoryLogic.GrenadeLauncher` |
| `GrenadeLauncherTemplateClass` | `EFT.InventoryLogic.GrenadeLauncherTemplate` |
| `StashGridClass` | `EFT.InventoryLogic.Grid` |
| `StashGridClass+GClass1545` | `EFT.InventoryLogic.Grid+ItemFiltersWontAllowError` |
| `StashGridClass+GClass1546` | `EFT.InventoryLogic.Grid+ItemNotInGridError` |
| `StashGridClass+GClass1548` | `EFT.InventoryLogic.Grid+MaxItemsCountReachedError` |
| `StashGridClass+GClass1547` | `EFT.InventoryLogic.Grid+ModificationUnavailable` |
| `StashGridClass+GClass1544` | `EFT.InventoryLogic.Grid+NoFreeSpaceError` |
| `StashGridClass+GClass1543` | `EFT.InventoryLogic.Grid+PlaceTakenByAnotherItemError` |
| `StashGridClass+Class2458` | `EFT.InventoryLogic.Grid+ProtectedGridItemAddress` |
| `StashGridClass+GClass1542` | `EFT.InventoryLogic.Grid+WontFitToGridError` |
| `GClass3415` | `EFT.InventoryLogic.GridAddResult` |
| `GClass3119` | `EFT.InventoryLogic.GridExtensions` |
| `GClass3393` | `EFT.InventoryLogic.GridItemAddress` |
| `GClass3120` | `EFT.InventoryLogic.GridItemCollection` |
| `GStruct425` | `EFT.InventoryLogic.GridResizeResult` |
| `GClass3121` | `EFT.InventoryLogic.GridSerializer` |
| `GClass3121+GClass3122` | `EFT.InventoryLogic.GridSerializer+GridProps` |
| `HandguardItemClass` | `EFT.InventoryLogic.Handguard` |
| `HandguardTemplateClass` | `EFT.InventoryLogic.HandguardTemplate` |
| `HeadphonesItemClass` | `EFT.InventoryLogic.Headphones` |
| `HeadphonesTemplateClass` | `EFT.InventoryLogic.HeadphonesTemplate` |
| `HeadwearItemClass` | `EFT.InventoryLogic.Headwear` |
| `HeadwearTemplateClass` | `EFT.InventoryLogic.HeadwearTemplate` |
| `HideoutAreaContainerItemClass` | `EFT.InventoryLogic.HideoutAreaContainer` |
| `HideoutAreaContainerItemClass+Class2311` | `EFT.InventoryLogic.HideoutAreaContainer+HideoutAreaGrid` |
| `HideoutAreaContainerTemplateClass` | `EFT.InventoryLogic.HideoutAreaContainerTemplate` |
| `HouseholdGoodsItemClass` | `EFT.InventoryLogic.HouseholdGoods` |
| `HouseholdGoodsTemplateClass` | `EFT.InventoryLogic.HouseholdGoodsTemplate` |
| `GInterface416` | `EFT.InventoryLogic.IAntiRMTItemController` |
| `GInterface408` | `EFT.InventoryLogic.IApplicable` |
| `GInterface383` | `EFT.InventoryLogic.IArmorComponentTemplate` |
| `GInterface384` | `EFT.InventoryLogic.IBarrelComponentTemplate` |
| `GInterface434` | `EFT.InventoryLogic.ICommand` |
| `GInterface407` | `EFT.InventoryLogic.IContainerResizeResult` |
| `IIdGenerator` | `EFT.InventoryLogic.IDatabaseIdGenerator` |
| `IDestroyResult` | `EFT.InventoryLogic.IDestroyResult` |
| `GClass3443` | `EFT.InventoryLogic.IdGenerationResult` |
| `GInterface385` | `EFT.InventoryLogic.IEquipmentPenaltyComponentTemplate` |
| `GInterface386` | `EFT.InventoryLogic.IExplosiveAmmoTemplate` |
| `GInterface387` | `EFT.InventoryLogic.IFaceShieldComponentTemplate` |
| `GInterface436` | `EFT.InventoryLogic.IFavoriteContextComponent` |
| `GInterface388` | `EFT.InventoryLogic.IFireModeComponentTemplate` |
| `GInterface389` | `EFT.InventoryLogic.IFoldableComponentTemplate` |
| `GInterface390` | `EFT.InventoryLogic.IFoodDrinkComponentTemplate` |
| `GClass3402` | `EFT.InventoryLogic.IgnoreDiscardLimitsResult` |
| `GInterface391` | `EFT.InventoryLogic.IGridLayoutComponentTemplate` |
| `GInterface420` | `EFT.InventoryLogic.IHealable` |
| `IHealthEffect` | `EFT.InventoryLogic.IHealthEffectsComponentTemplate` |
| `GInterface418` | `EFT.InventoryLogic.IItemInHandsEventArgs` |
| `GInterface424` | `EFT.InventoryLogic.IItemOperationResult` |
| `GInterface394` | `EFT.InventoryLogic.IKeyComponentTemplate` |
| `GInterface395` | `EFT.InventoryLogic.IKnifeComponentTemplate` |
| `GInterface396` | `EFT.InventoryLogic.ILightComponentTemplate` |
| `GInterface431` | `EFT.InventoryLogic.ILoadMagOperationResult` |
| `GInterface397` | `EFT.InventoryLogic.ILockableComponentTemplate` |
| `Interface19` | `EFT.InventoryLogic.IMagazineLoadingProcess` |
| `GInterface430` | `EFT.InventoryLogic.IMagOperationResult` |
| `GInterface415` | `EFT.InventoryLogic.IMalfunctionController` |
| `GInterface398` | `EFT.InventoryLogic.IMapComponentTemplate` |
| `IMedkitResource` | `EFT.InventoryLogic.IMedKitComponentTemplate` |
| `GInterface435` | `EFT.InventoryLogic.IMissingChildrenContextComponent` |
| `GInterface409` | `EFT.InventoryLogic.IMoveCheckable` |
| `GInterface400` | `EFT.InventoryLogic.IMuzzleComponentTemplate` |
| `InfoItemClass` | `EFT.InventoryLogic.Info` |
| `InfoTemplateClass` | `EFT.InventoryLogic.InfoTemplate` |
| `GInterface401` | `EFT.InventoryLogic.INightVisionComponentTemplate` |
| `GEventArgs17` | `EFT.InventoryLogic.InOutHandsProcessEventArgs` |
| `GClass3421` | `EFT.InventoryLogic.InternalSplitResult` |
| `GStruct423` | `EFT.InventoryLogic.IntRect` |
| `GClass1569` | `EFT.InventoryLogic.InventoryBlockedError` |
| `GClass3372` | `EFT.InventoryLogic.InventoryEquipmentExtension` |
| `InventoryTemplateClass` | `EFT.InventoryLogic.InventoryEquipmentTemplate` |
| `GClass3373` | `EFT.InventoryLogic.InventoryExtension` |
| `GClass3399` | `EFT.InventoryLogic.InventoryOperationExtensions` |
| `GClass3458` | `EFT.InventoryLogic.InventorySelectableItemContext` |
| `GClass3458+Class2484` | `EFT.InventoryLogic.InventorySelectableItemContext+SelectionContextWrapper` |
| `Interface18` | `EFT.InventoryLogic.IOperationHandler` |
| `IRaiseEvents` | `EFT.InventoryLogic.IOperationResult` |
| `GInterface403` | `EFT.InventoryLogic.IPoisonComponentTemplate` |
| `GInterface427` | `EFT.InventoryLogic.IPossibleDestroyResult` |
| `GInterface411` | `EFT.InventoryLogic.IRecodableItem` |
| `GInterface412` | `EFT.InventoryLogic.IRecodableItem` |
| `GInterface410` | `EFT.InventoryLogic.IRecodableItemTemplate` |
| `GInterface425` | `EFT.InventoryLogic.IRemoveToNowhereResult` |
| `GInterface402` | `EFT.InventoryLogic.IRepairableComponentTemplate` |
| `GInterface413` | `EFT.InventoryLogic.IResourceComponent` |
| `GInterface414` | `EFT.InventoryLogic.IResourceItemTemplate` |
| `IronSightItemClass` | `EFT.InventoryLogic.IronSight` |
| `IronSightTemplateClass` | `EFT.InventoryLogic.IronSightTemplate` |
| `GInterface404` | `EFT.InventoryLogic.ISightComponentTemplate` |
| `GInterface419` | `EFT.InventoryLogic.ISingleEventArgs` |
| `GInterface405` | `EFT.InventoryLogic.ISlotBlockerComponentTemplate` |
| `GInterface392` | `EFT.InventoryLogic.IStimulatorBuffsComponentTemplate` |
| `GInterface433` | `EFT.InventoryLogic.ISyncOperationResult` |
| `EFT.InventoryLogic.Item+Class2351` | `EFT.InventoryLogic.Item+ItemComparer` |
| `GClass1584` | `EFT.InventoryLogic.ItemAlreadyInStackSlotError` |
| `ItemAttributeClass` | `EFT.InventoryLogic.ItemAttribute` |
| `GClass3374` | `EFT.InventoryLogic.ItemAttributeNames` |
| `GClass3379` | `EFT.InventoryLogic.ItemComponent` |
| `ItemContextAbstractClass` | `EFT.InventoryLogic.ItemContext` |
| `TraderControllerClass` | `EFT.InventoryLogic.ItemController` |
| `TraderControllerClass+GClass3389` | `EFT.InventoryLogic.ItemController+InventoryLogger` |
| `TraderControllerClass+GClass3389+Class406` | `EFT.InventoryLogic.ItemController+InventoryLogger+InternalInventoryLogger` |
| `TraderControllerClass+Class2455` | `EFT.InventoryLogic.ItemController+ProtectedOwnerItself` |
| `GEventArgs1` | `EFT.InventoryLogic.ItemEventArgs` |
| `GClass3380` | `EFT.InventoryLogic.ItemExtensions` |
| `GClass3380+Class2421` | `EFT.InventoryLogic.ItemExtensions+SameIdGenerator` |
| `GClass3124` | `EFT.InventoryLogic.ItemFilterExtension` |
| `GClass1585` | `EFT.InventoryLogic.ItemFiltersWontAllowError` |
| `GClass3412` | `EFT.InventoryLogic.ItemInContainerOperationResult` |
| `InteractionsHandlerClass` | `EFT.InventoryLogic.ItemManipulator` |
| `InteractionsHandlerClass+GClass1604` | `EFT.InventoryLogic.ItemManipulator+AddCountError` |
| `InteractionsHandlerClass+GClass1598` | `EFT.InventoryLogic.ItemManipulator+CannotLootUnlootableError` |
| `InteractionsHandlerClass+GClass1601` | `EFT.InventoryLogic.ItemManipulator+CannotPutUnlootableError` |
| `InteractionsHandlerClass+GClass1600` | `EFT.InventoryLogic.ItemManipulator+CantRemoveFromEquipmentSlotDuringRaid` |
| `InteractionsHandlerClass+GClass1593` | `EFT.InventoryLogic.ItemManipulator+ContainerLockedError` |
| `InteractionsHandlerClass+GClass1607` | `EFT.InventoryLogic.ItemManipulator+ContainerWithLockedItemError` |
| `InteractionsHandlerClass+GClass1609` | `EFT.InventoryLogic.ItemManipulator+CountLimitError` |
| `InteractionsHandlerClass+GClass1596` | `EFT.InventoryLogic.ItemManipulator+DeepMoveError` |
| `InteractionsHandlerClass+GClass1610` | `EFT.InventoryLogic.ItemManipulator+InstallToFoldedError` |
| `InteractionsHandlerClass+GClass1592` | `EFT.InventoryLogic.ItemManipulator+ItemAlreadyThereError` |
| `InteractionsHandlerClass+GClass1608` | `EFT.InventoryLogic.ItemManipulator+ItemCycleError` |
| `InteractionsHandlerClass+Class1026` | `EFT.InventoryLogic.ItemManipulator+ItemLockSameStateError` |
| `InteractionsHandlerClass+Class1027` | `EFT.InventoryLogic.ItemManipulator+ItemLockWrongContainerError` |
| `InteractionsHandlerClass+GClass1606` | `EFT.InventoryLogic.ItemManipulator+ItemManuallyLockedError` |
| `InteractionsHandlerClass+GClass1591` | `EFT.InventoryLogic.ItemManipulator+MalfunctionError` |
| `InteractionsHandlerClass+GClass1595` | `EFT.InventoryLogic.ItemManipulator+MovingToScavError` |
| `InteractionsHandlerClass+GClass1594` | `EFT.InventoryLogic.ItemManipulator+MovingToTraderError` |
| `InteractionsHandlerClass+GClass1602` | `EFT.InventoryLogic.ItemManipulator+NonQuestItemInQuestStashError` |
| `InteractionsHandlerClass+GClass1599` | `EFT.InventoryLogic.ItemManipulator+NotRaidMovableToSafeContainer` |
| `InteractionsHandlerClass+GClass3394` | `EFT.InventoryLogic.ItemManipulator+ProxyItemAddress` |
| `InteractionsHandlerClass+GClass1603` | `EFT.InventoryLogic.ItemManipulator+QuestItemInNonQuestStashError` |
| `InteractionsHandlerClass+GClass1605` | `EFT.InventoryLogic.ItemManipulator+ResizeError` |
| `InteractionsHandlerClass+GClass1597` | `EFT.InventoryLogic.ItemManipulator+TakeFromRagfairError` |
| `InteractionsHandlerClass+GClass1611` | `EFT.InventoryLogic.ItemManipulator+TryLootUnmovableError` |
| `GClass1553` | `EFT.InventoryLogic.ItemNotApplicable` |
| `GClass1551` | `EFT.InventoryLogic.ItemNotExaminedError` |
| `GClass1587` | `EFT.InventoryLogic.ItemNotInStackSlotError` |
| `GClass1568` | `EFT.InventoryLogic.ItemRestrictionsError` |
| `DestroyedItemsStruct` | `EFT.InventoryLogic.ItemsCount` |
| `GClass3381` | `EFT.InventoryLogic.ItemSorter` |
| `GClass3381+Class2438` | `EFT.InventoryLogic.ItemSorter+ItemSortingComparer` |
| `EFT.InventoryLogic.ItemTemplate+GClass1868` | `EFT.InventoryLogic.ItemTemplate+TemplateSerializer` |
| `GClass3382` | `EFT.InventoryLogic.ItemTemplateIds` |
| `GClass1564` | `EFT.InventoryLogic.ItemTransferError` |
| `GInterface406` | `EFT.InventoryLogic.IThermalVisionComponentTemplate` |
| `GInterface428` | `EFT.InventoryLogic.IToEmptyAddressResult` |
| `GInterface429` | `EFT.InventoryLogic.ITransferOrMergeResult` |
| `GInterface417` | `EFT.InventoryLogic.IUninterruptibleEventArgs` |
| `GInterface432` | `EFT.InventoryLogic.IUnloadMagOperationResult` |
| `IWeapon` | `EFT.InventoryLogic.IWeapon` |
| `JewelryItemClass` | `EFT.InventoryLogic.Jewelry` |
| `JewelryTemplateClass` | `EFT.InventoryLogic.JewelryTemplate` |
| `TemplateIdToObjectMappingsClass` | `EFT.InventoryLogic.JsonTypes` |
| `KeyItemClass` | `EFT.InventoryLogic.Key` |
| `KeycardItemClass` | `EFT.InventoryLogic.Keycard` |
| `KeycardTemplateClass` | `EFT.InventoryLogic.KeycardTemplate` |
| `KeyMechanicalItemClass` | `EFT.InventoryLogic.KeyMechanical` |
| `KeyTemplateClass` | `EFT.InventoryLogic.KeyTemplate` |
| `KnifeItemClass` | `EFT.InventoryLogic.Knife` |
| `KnifeTemplateClass` | `EFT.InventoryLogic.KnifeTemplate` |
| `LauncherItemClass` | `EFT.InventoryLogic.Launcher` |
| `LauncherTemplateClass` | `EFT.InventoryLogic.LauncherTemplate` |
| `LightLaserItemClass` | `EFT.InventoryLogic.LightLaser` |
| `LightLaserTemplateClass` | `EFT.InventoryLogic.LightLaserTemplate` |
| `GEventArgs7` | `EFT.InventoryLogic.LoadMagazineEventArgs` |
| `GClass3419` | `EFT.InventoryLogic.LoadMagOperationResult` |
| `GClass1540` | `EFT.InventoryLogic.LocalizedError` |
| `EFT.InventoryLogic.LockableComponent+GClass1541` | `EFT.InventoryLogic.LockableComponent+BadKeyError` |
| `LockableContainerItemClass` | `EFT.InventoryLogic.LockableContainer` |
| `LockableContainerTemplateClass` | `EFT.InventoryLogic.LockableContainerTemplate` |
| `LootContainerItemClass` | `EFT.InventoryLogic.LootContainer` |
| `LootContainerTemplateClass` | `EFT.InventoryLogic.LootContainerTemplate` |
| `LubricantItemClass` | `EFT.InventoryLogic.Lubricant` |
| `LubricantTemplateClass` | `EFT.InventoryLogic.LubricantTemplate` |
| `MachineGunItemClass` | `EFT.InventoryLogic.MachineGun` |
| `MachineGunTemplateClass` | `EFT.InventoryLogic.MachineGunTemplate` |
| `MagazineItemClass` | `EFT.InventoryLogic.Magazine` |
| `EFT.InventoryLogic.Magazine+GClass1590` | `EFT.InventoryLogic.Magazine+FullMagazineError` |
| `EFT.InventoryLogic.Magazine+GClass1589` | `EFT.InventoryLogic.Magazine+ItemFiltersWontAllowError` |
| `EFT.InventoryLogic.Magazine+GClass1588` | `EFT.InventoryLogic.Magazine+LoadInsertedMagazineError` |
| `MagazineTemplateClass` | `EFT.InventoryLogic.MagazineTemplate` |
| `MagazineTemplateClass+GStruct421` | `EFT.InventoryLogic.MagazineTemplate+VisibleRange` |
| `MapItemClass` | `EFT.InventoryLogic.Map` |
| `MapTemplateClass` | `EFT.InventoryLogic.MapTemplate` |
| `MarkOfUnknownItemClass` | `EFT.InventoryLogic.MarkOfUnknown` |
| `MarkOfUnknownTemplateClass` | `EFT.InventoryLogic.MarkOfUnknownTemplate` |
| `MarksmanRifleItemClass` | `EFT.InventoryLogic.MarksmanRifle` |
| `MarksmanRifleTemplateClass` | `EFT.InventoryLogic.MarksmanRifleTemplate` |
| `MasterModItemClass` | `EFT.InventoryLogic.MasterMod` |
| `MasterModTemplateClass` | `EFT.InventoryLogic.MasterModTemplate` |
| `MedicalItemClass` | `EFT.InventoryLogic.Medical` |
| `MedicalSuppliesItemClass` | `EFT.InventoryLogic.MedicalSupplies` |
| `MedicalSuppliesTemplateClass` | `EFT.InventoryLogic.MedicalSuppliesTemplate` |
| `MedicalTemplateClass` | `EFT.InventoryLogic.MedicalTemplate` |
| `MedKitItemClass` | `EFT.InventoryLogic.MedKit` |
| `MedKitTemplateClass` | `EFT.InventoryLogic.MedKitTemplate` |
| `MedsItemClass` | `EFT.InventoryLogic.Meds` |
| `MedsTemplateClass` | `EFT.InventoryLogic.MedsTemplate` |
| `GClass3417` | `EFT.InventoryLogic.MergeResult` |
| `GClass1612` | `EFT.InventoryLogic.MissingItemsError` |
| `MobContainerItemClass` | `EFT.InventoryLogic.MobContainer` |
| `MobContainerTemplateClass` | `EFT.InventoryLogic.MobContainerTemplate` |
| `GClass3456` | `EFT.InventoryLogic.ModdingSelectableItemContext` |
| `GClass3456+GInterface437` | `EFT.InventoryLogic.ModdingSelectableItemContext+IModdingSelectionContext` |
| `MoneyItemClass` | `EFT.InventoryLogic.Money` |
| `MoneyTemplateClass` | `EFT.InventoryLogic.MoneyTemplate` |
| `MountItemClass` | `EFT.InventoryLogic.Mount` |
| `MountTemplateClass` | `EFT.InventoryLogic.MountTemplate` |
| `GClass3411` | `EFT.InventoryLogic.MoveResult` |
| `MultitoolsItemClass` | `EFT.InventoryLogic.MultiTool` |
| `MultitoolsTemplateClass` | `EFT.InventoryLogic.MultiToolTemplate` |
| `MuzzleComboItemClass` | `EFT.InventoryLogic.MuzzleCombo` |
| `MuzzleComboTemplateClass` | `EFT.InventoryLogic.MuzzleComboTemplate` |
| `MuzzleItemClass` | `EFT.InventoryLogic.MuzzleMod` |
| `MuzzleTemplateClass` | `EFT.InventoryLogic.MuzzleModTemplate` |
| `NightVisionItemClass` | `EFT.InventoryLogic.NightVision` |
| `NightVisionTemplateClass` | `EFT.InventoryLogic.NightVisionTemplate` |
| `GStruct424` | `EFT.InventoryLogic.NoContainerResizeResult` |
| `GClass1549` | `EFT.InventoryLogic.NoFreeSpaceError` |
| `GClass1563` | `EFT.InventoryLogic.NonEmptyCompoundItemError` |
| `GClass1550` | `EFT.InventoryLogic.NoPossibleActionsError` |
| `GClass1555` | `EFT.InventoryLogic.NotModdableWithoutMultitoolError` |
| `GClass1554` | `EFT.InventoryLogic.NotRaidModdableError` |
| `GClass3118` | `EFT.InventoryLogic.ObservedPlayerTempGrid` |
| `GClass3388` | `EFT.InventoryLogic.OfflineInventoryController` |
| `GClass3475` | `EFT.InventoryLogic.Operations.AbstractAsyncOperation` |
| `GClass3512` | `EFT.InventoryLogic.Operations.AbstractMagOperation` |
| `BaseInventoryOperationClass` | `EFT.InventoryLogic.Operations.AbstractOperation` |
| `GClass3515` | `EFT.InventoryLogic.Operations.ActiveSearchContentOperation` |
| `GClass3480` | `EFT.InventoryLogic.Operations.AddNoteOperation` |
| `GClass3481` | `EFT.InventoryLogic.Operations.AddToWishlistOperation` |
| `GClass1994` | `EFT.InventoryLogic.Operations.AddToWishlistOperationDescriptor` |
| `GClass3530` | `EFT.InventoryLogic.Operations.AddToWishlistOperationResult` |
| `GClass3523` | `EFT.InventoryLogic.Operations.ApplyInventoryChangesOperation` |
| `ApplyKeyOperationClass` | `EFT.InventoryLogic.Operations.ApplyKeyOperation` |
| `GClass3471` | `EFT.InventoryLogic.Operations.BaseInventoryCommand` |
| `GClass3519` | `EFT.InventoryLogic.Operations.BaseQuestOperation` |
| `GClass3483` | `EFT.InventoryLogic.Operations.BindItemOperation` |
| `GClass3524` | `EFT.InventoryLogic.Operations.ChangeItemsOperation` |
| `GClass1997` | `EFT.InventoryLogic.Operations.ChangeItemsOperationDescriptor` |
| `GClass3484` | `EFT.InventoryLogic.Operations.ChangeWishlistItemCategoryOperation` |
| `GClass1998` | `EFT.InventoryLogic.Operations.ChangeWishlistItemCategoryOperationDescriptor` |
| `GClass3531` | `EFT.InventoryLogic.Operations.ChangeWishlistItemCategoryOperationResult` |
| `CheckMagazineOperationClass` | `EFT.InventoryLogic.Operations.CheckMagazineOperation` |
| `GException22` | `EFT.InventoryLogic.Operations.ClientBackendOnlyOperationException` |
| `GClass1615` | `EFT.InventoryLogic.Operations.ClientOnlyOperationError` |
| `GException21` | `EFT.InventoryLogic.Operations.ClientOnlyOperationException` |
| `GException23` | `EFT.InventoryLogic.Operations.ClientServerOnlyOperationException` |
| `GClass3472` | `EFT.InventoryLogic.Operations.CommandWithOwner` |
| `GClass3473` | `EFT.InventoryLogic.Operations.CommandWithOwners` |
| `GClass3485` | `EFT.InventoryLogic.Operations.CreateMapMarkerOperation` |
| `GClass3486` | `EFT.InventoryLogic.Operations.DeleteMapMarkerOperation` |
| `GClass3487` | `EFT.InventoryLogic.Operations.DeleteNoteOperation` |
| `GClass3528` | `EFT.InventoryLogic.Operations.EatOperation` |
| `GClass3488` | `EFT.InventoryLogic.Operations.EditMapMarkerOperation` |
| `GClass3489` | `EFT.InventoryLogic.Operations.EditNoteOperation` |
| `GClass3508` | `EFT.InventoryLogic.Operations.ExamineMalfTypeOperation` |
| `GClass3509` | `EFT.InventoryLogic.Operations.ExamineMalfunctionOperation` |
| `ExamineOperationClass` | `EFT.InventoryLogic.Operations.ExamineOperation` |
| `GClass3511` | `EFT.InventoryLogic.Operations.FaceshieldMarkOperation` |
| `FoldOperationClass` | `EFT.InventoryLogic.Operations.FoldOperation` |
| `GClass3529` | `EFT.InventoryLogic.Operations.HealOperation` |
| `GInterface438` | `EFT.InventoryLogic.Operations.IInventoryOperation` |
| `GInterface439` | `EFT.InventoryLogic.Operations.IMultipleItemsOperation` |
| `GInterface446` | `EFT.InventoryLogic.Operations.IObservedOperation` |
| `GInterface443` | `EFT.InventoryLogic.Operations.IOneItemOperation` |
| `GInterface440` | `EFT.InventoryLogic.Operations.IParentOperation` |
| `GInterface442` | `EFT.InventoryLogic.Operations.IPossibleDestroyOperation` |
| `GInterface441` | `EFT.InventoryLogic.Operations.IServerDependentOperation` |
| `GInterface445` | `EFT.InventoryLogic.Operations.ISubOperation` |
| `GInterface444` | `EFT.InventoryLogic.Operations.ITwoItemOperation` |
| `GClass3513` | `EFT.InventoryLogic.Operations.LoadMagOperation` |
| `MergeOperationClass` | `EFT.InventoryLogic.Operations.MergeOperation` |
| `MoveOperationClass` | `EFT.InventoryLogic.Operations.MoveOperation` |
| `GClass3517` | `EFT.InventoryLogic.Operations.NetworkSearchContentOperation` |
| `GClass3527` | `EFT.InventoryLogic.Operations.NetworkSearchSuboperation` |
| `GClass3492` | `EFT.InventoryLogic.Operations.PlantTripwireOperation` |
| `Class2500` | `EFT.InventoryLogic.Operations.PlayerToggleOperation` |
| `GClass3476` | `EFT.InventoryLogic.Operations.PossibleDestroyOperation` |
| `GClass3499` | `EFT.InventoryLogic.Operations.ProfileSetVariableOperation` |
| `GClass3493` | `EFT.InventoryLogic.Operations.PurchaseTraderServiceOperation` |
| `GClass1999` | `EFT.InventoryLogic.Operations.PurchaseTraderServiceOperationDescriptor` |
| `GClass3532` | `EFT.InventoryLogic.Operations.PurchaseTraderServiceOperationResult` |
| `GClass3520` | `EFT.InventoryLogic.Operations.QuestAcceptOperation` |
| `GClass3521` | `EFT.InventoryLogic.Operations.QuestFinishOperation` |
| `GClass3522` | `EFT.InventoryLogic.Operations.QuestHandoverOperation` |
| `GClass3506` | `EFT.InventoryLogic.Operations.RecodeOperation` |
| `GClass3494` | `EFT.InventoryLogic.Operations.RemoveFromWishlistOperation` |
| `GClass2000` | `EFT.InventoryLogic.Operations.RemoveFromWishlistOperationDescriptor` |
| `GClass3533` | `EFT.InventoryLogic.Operations.RemoveFromWishlistOperationResult` |
| `RemoveOperationClass` | `EFT.InventoryLogic.Operations.RemoveOperation` |
| `GClass1613` | `EFT.InventoryLogic.Operations.RestrictedOperationError` |
| `GException19` | `EFT.InventoryLogic.Operations.RestrictedOperationException` |
| `GClass2002` | `EFT.InventoryLogic.Operations.SearchContentOperationDescriptor` |
| `GClass2001` | `EFT.InventoryLogic.Operations.SearchSuboperationDescriptor` |
| `GClass1614` | `EFT.InventoryLogic.Operations.ServerOnlyOperationError` |
| `GException20` | `EFT.InventoryLogic.Operations.ServerOnlyOperationException` |
| `GClass3496` | `EFT.InventoryLogic.Operations.SetDialogProgressOperation` |
| `GClass3496+DialogProgressInventoryCommand+GStruct427` | `EFT.InventoryLogic.Operations.SetDialogProgressOperation+DialogProgressInventoryCommand+DialogProgressBackendData` |
| `GClass3497` | `EFT.InventoryLogic.Operations.SetPinLockOperation` |
| `GClass3497+Class2499` | `EFT.InventoryLogic.Operations.SetPinLockOperation+SetPinLockCommand` |
| `GClass3534` | `EFT.InventoryLogic.Operations.SetPinLockResult` |
| `GClass3498` | `EFT.InventoryLogic.Operations.SetupItemOperation` |
| `SearchContentOperationResultClass` | `EFT.InventoryLogic.Operations.SinglePlayerSearchContentOperation` |
| `SplitOperationClass` | `EFT.InventoryLogic.Operations.SplitOperation` |
| `GClass1995` | `EFT.InventoryLogic.Operations.SplitToNowhereDescriptor` |
| `GClass3525` | `EFT.InventoryLogic.Operations.SplitToNowhereOperation` |
| `GClass3518` | `EFT.InventoryLogic.Operations.StationaryWeaponOperation` |
| `SwapOperationClass` | `EFT.InventoryLogic.Operations.SwapOperation` |
| `GClass3501` | `EFT.InventoryLogic.Operations.TagOperation` |
| `ThrowOperationClass` | `EFT.InventoryLogic.Operations.ThrowOperation` |
| `ToggleOperationClass` | `EFT.InventoryLogic.Operations.ToggleOperation` |
| `GClass1996` | `EFT.InventoryLogic.Operations.TransferFromNowhereDescriptor` |
| `GClass3526` | `EFT.InventoryLogic.Operations.TransferFromNowhereOperation` |
| `TransferOperationClass` | `EFT.InventoryLogic.Operations.TransferOperation` |
| `GClass3504` | `EFT.InventoryLogic.Operations.UnbindItemOperation` |
| `GClass3514` | `EFT.InventoryLogic.Operations.UnloadMagOperation` |
| `GClass3505` | `EFT.InventoryLogic.Operations.WeaponRechamberOperation` |
| `OpticScopeItemClass` | `EFT.InventoryLogic.OpticScope` |
| `OpticScopeTemplateClass` | `EFT.InventoryLogic.OpticScopeTemplate` |
| `GClass3454` | `EFT.InventoryLogic.OtherPlayerProfileItemContext` |
| `GClass3390` | `EFT.InventoryLogic.OwnerItself` |
| `GClass3446` | `EFT.InventoryLogic.OwnerTypeExtensions` |
| `GClass3384` | `EFT.InventoryLogic.PersonItemController` |
| `GClass3371` | `EFT.InventoryLogic.PhysicalSettings` |
| `PistolItemClass` | `EFT.InventoryLogic.Pistol` |
| `PistolGripItemClass` | `EFT.InventoryLogic.PistolGrip` |
| `PistolGripTemplateClass` | `EFT.InventoryLogic.PistolGripTemplate` |
| `PistolTemplateClass` | `EFT.InventoryLogic.PistolTemplate` |
| `PlantingKitsItemClass` | `EFT.InventoryLogic.PlantingKit` |
| `PlantingKitsTemplateClass` | `EFT.InventoryLogic.PlantingKitTemplate` |
| `GClass3407` | `EFT.InventoryLogic.PlantTripwireResult` |
| `GClass1561` | `EFT.InventoryLogic.PlayerIsBusyError` |
| `PmsItemClass` | `EFT.InventoryLogic.Pms` |
| `PmsTemplateClass` | `EFT.InventoryLogic.PmsTemplate` |
| `PocketsItemClass` | `EFT.InventoryLogic.Pockets` |
| `PocketsTemplateClass` | `EFT.InventoryLogic.PocketsTemplate` |
| `PortableRangeFinderItemClass` | `EFT.InventoryLogic.PortableRangeFinder` |
| `PortableRangeFinderTemplateClass` | `EFT.InventoryLogic.PortableRangeFinderTemplate` |
| `GClass3444` | `EFT.InventoryLogic.ProfileSetVariableResult` |
| `GClass3433` | `EFT.InventoryLogic.QuestAcceptResult` |
| `GClass3434` | `EFT.InventoryLogic.QuestHandoverResult` |
| `RadioTransmitterItemClass` | `EFT.InventoryLogic.RadioTransmitter` |
| `RadioTransmitterTemplateClass` | `EFT.InventoryLogic.RadioTransmitterTemplate` |
| `RailCoversItemClass` | `EFT.InventoryLogic.RailCovers` |
| `RailCoversTemplateClass` | `EFT.InventoryLogic.RailCoversTemplate` |
| `GClass3378` | `EFT.InventoryLogic.RangedItemAttribute` |
| `GClass1567` | `EFT.InventoryLogic.ReachingBusyItemError` |
| `ReceiverItemClass` | `EFT.InventoryLogic.Receiver` |
| `ReceiverTemplateClass` | `EFT.InventoryLogic.ReceiverTemplate` |
| `GClass3429` | `EFT.InventoryLogic.RecodeResult` |
| `GClass3116` | `EFT.InventoryLogic.ReferenceGrid` |
| `GClass3116+Class2317` | `EFT.InventoryLogic.ReferenceGrid+GridItemReferenceCollection` |
| `GClass3116+Class2459` | `EFT.InventoryLogic.ReferenceGrid+ReferenceItemAddress` |
| `GEventArgs18` | `EFT.InventoryLogic.RefreshItemEventArgs` |
| `GEventArgs10` | `EFT.InventoryLogic.RemoveFromHandsEventArgs` |
| `GEventArgs3` | `EFT.InventoryLogic.RemoveItemEventArgs` |
| `GClass3410` | `EFT.InventoryLogic.RemoveResult` |
| `GClass3398` | `EFT.InventoryLogic.RemoveSuboperation` |
| `GClass3376` | `EFT.InventoryLogic.RepairBuffAttribute` |
| `GClass3462` | `EFT.InventoryLogic.RepairItemContext` |
| `RepairKitsItemClass` | `EFT.InventoryLogic.RepairKit` |
| `RepairKitsTemplateClass` | `EFT.InventoryLogic.RepairKitTemplate` |
| `GEventArgs5` | `EFT.InventoryLogic.RepairMalfunctionEventArgs` |
| `GClass3416` | `EFT.InventoryLogic.ResizeResult` |
| `RevolverItemClass` | `EFT.InventoryLogic.Revolver` |
| `RevolverTemplateClass` | `EFT.InventoryLogic.RevolverTemplate` |
| `RocketItemClass` | `EFT.InventoryLogic.Rocket` |
| `RocketLauncherItemClass` | `EFT.InventoryLogic.RocketLauncher` |
| `RocketLauncherTemplateClass` | `EFT.InventoryLogic.RocketLauncherTemplate` |
| `RocketTemplateClass` | `EFT.InventoryLogic.RocketTemplate` |
| `GClass3117` | `EFT.InventoryLogic.SearchableGrid` |
| `SearchableItemItemClass` | `EFT.InventoryLogic.SearchableItem` |
| `SearchableItemTemplateClass` | `EFT.InventoryLogic.SearchableItemTemplate` |
| `GClass3455` | `EFT.InventoryLogic.SelectableItemContext` |
| `GClass3445` | `EFT.InventoryLogic.SetDialogProgressResult` |
| `GEventArgs9` | `EFT.InventoryLogic.SetInHandsEventArgs` |
| `GClass3441` | `EFT.InventoryLogic.SetTagResult` |
| `ShaftItemClass` | `EFT.InventoryLogic.Shaft` |
| `ShaftTemplateClass` | `EFT.InventoryLogic.ShaftTemplate` |
| `ShotgunItemClass` | `EFT.InventoryLogic.Shotgun` |
| `ShotgunTemplateClass` | `EFT.InventoryLogic.ShotgunTemplate` |
| `SightsItemClass` | `EFT.InventoryLogic.SightMod` |
| `SightsTemplateClass` | `EFT.InventoryLogic.SightModTemplate` |
| `SilencerItemClass` | `EFT.InventoryLogic.Silencer` |
| `SilencerTemplateClass` | `EFT.InventoryLogic.SilencerTemplate` |
| `SimpleContainerItemClass` | `EFT.InventoryLogic.SimpleContainer` |
| `SimpleContainerTemplateClass` | `EFT.InventoryLogic.SimpleContainerTemplate` |
| `RandomLootContainerItemClass` | `EFT.InventoryLogic.SingleUseContainer` |
| `RandomLootContainerTemplateClass` | `EFT.InventoryLogic.SingleUseContainerTemplate` |
| `EFT.InventoryLogic.Slot+GClass1581` | `EFT.InventoryLogic.Slot+CantAttachWhileFoldedError` |
| `EFT.InventoryLogic.Slot+GClass1580` | `EFT.InventoryLogic.Slot+ConflictingItemError` |
| `EFT.InventoryLogic.Slot+GClass1573` | `EFT.InventoryLogic.Slot+ConflictingSlotBlockedError` |
| `EFT.InventoryLogic.Slot+GClass1570` | `EFT.InventoryLogic.Slot+EquippedLockedSlot` |
| `EFT.InventoryLogic.Slot+GClass1575` | `EFT.InventoryLogic.Slot+InstallNotExaminedError` |
| `EFT.InventoryLogic.Slot+GClass1579` | `EFT.InventoryLogic.Slot+ItemFiltersWontAllowError` |
| `EFT.InventoryLogic.Slot+Class1025` | `EFT.InventoryLogic.Slot+ItemNotInSlotError` |
| `EFT.InventoryLogic.Slot+Struct892` | `EFT.InventoryLogic.Slot+ItemWithConflicting` |
| `EFT.InventoryLogic.Slot+GClass1577` | `EFT.InventoryLogic.Slot+MissingVitalPartsError` |
| `EFT.InventoryLogic.Slot+Class2456` | `EFT.InventoryLogic.Slot+ProtectedSlotItemAddress` |
| `EFT.InventoryLogic.Slot+GClass1572` | `EFT.InventoryLogic.Slot+SlotBlockedError` |
| `EFT.InventoryLogic.Slot+GClass1571` | `EFT.InventoryLogic.Slot+SlotLockedError` |
| `EFT.InventoryLogic.Slot+GClass1578` | `EFT.InventoryLogic.Slot+SlotNotEmptyError` |
| `EFT.InventoryLogic.Slot+GClass1576` | `EFT.InventoryLogic.Slot+TakeNotExaminedError` |
| `EFT.InventoryLogic.Slot+GClass1574` | `EFT.InventoryLogic.Slot+TooLargeStackError` |
| `GClass3391` | `EFT.InventoryLogic.SlotItemAddress` |
| `GClass3396` | `EFT.InventoryLogic.SlotManipulator` |
| `GClass3126` | `EFT.InventoryLogic.SlotSerializer` |
| `GClass3126+GClass3127` | `EFT.InventoryLogic.SlotSerializer+SlotProps` |
| `SmgItemClass` | `EFT.InventoryLogic.Smg` |
| `SmgTemplateClass` | `EFT.InventoryLogic.SmgTemplate` |
| `SniperRifleItemClass` | `EFT.InventoryLogic.SniperRifle` |
| `SniperRifleTemplateClass` | `EFT.InventoryLogic.SniperRifleTemplate` |
| `SortingTableItemClass` | `EFT.InventoryLogic.SortingTable` |
| `SortingTableTemplateClass` | `EFT.InventoryLogic.SortingTableTemplate` |
| `SpecialScopeItemClass` | `EFT.InventoryLogic.SpecialScope` |
| `SpecialScopeTemplateClass` | `EFT.InventoryLogic.SpecialScopeTemplate` |
| `SpecialWeaponItemClass` | `EFT.InventoryLogic.SpecialWeapon` |
| `SpecialWeaponTemplateClass` | `EFT.InventoryLogic.SpecialWeaponTemplate` |
| `SpecItemItemClass` | `EFT.InventoryLogic.SpecItem` |
| `SpecItemTemplateClass` | `EFT.InventoryLogic.SpecItemTemplate` |
| `GClass3424` | `EFT.InventoryLogic.SplitResult` |
| `GClass3422` | `EFT.InventoryLogic.SplitToNowhereResult` |
| `SpringDrivenCylinderItemClass` | `EFT.InventoryLogic.SpringDrivenCylinder` |
| `SpringDrivenCylinderTemplateClass` | `EFT.InventoryLogic.SpringDrivenCylinderTemplate` |
| `StackableItemItemClass` | `EFT.InventoryLogic.StackableItem` |
| `StackableItemTemplateClass` | `EFT.InventoryLogic.StackableItemTemplate` |
| `EFT.InventoryLogic.StackSlot+Class2457` | `EFT.InventoryLogic.StackSlot+ProtectedStackSlotItemAddress` |
| `GClass3392` | `EFT.InventoryLogic.StackSlotItemAddress` |
| `GClass3128` | `EFT.InventoryLogic.StackSlotSerializer` |
| `StashItemClass` | `EFT.InventoryLogic.Stash` |
| `StashItemClass+Class2312` | `EFT.InventoryLogic.Stash+StashGrid` |
| `StashTemplateClass` | `EFT.InventoryLogic.StashTemplate` |
| `StationaryContainerItemClass` | `EFT.InventoryLogic.StationaryContainer` |
| `StationaryContainerTemplateClass` | `EFT.InventoryLogic.StationaryContainerTemplate` |
| `StimulatorItemClass` | `EFT.InventoryLogic.Stimulator` |
| `GClass3377` | `EFT.InventoryLogic.StimulatorBuffAttribute` |
| `StimulatorTemplateClass` | `EFT.InventoryLogic.StimulatorTemplate` |
| `StockItemClass` | `EFT.InventoryLogic.Stock` |
| `StockTemplateClass` | `EFT.InventoryLogic.StockTemplate` |
| `GClass3426` | `EFT.InventoryLogic.SwapResult` |
| `TacticalComboItemClass` | `EFT.InventoryLogic.TacticalCombo` |
| `TacticalComboTemplateClass` | `EFT.InventoryLogic.TacticalComboTemplate` |
| `GClass1552` | `EFT.InventoryLogic.TargetNotExaminedError` |
| `ThermalVisionItemClass` | `EFT.InventoryLogic.ThermalVision` |
| `ThermalVisionTemplateClass` | `EFT.InventoryLogic.ThermalVisionTemplate` |
| `GClass3406` | `EFT.InventoryLogic.ThrowResult` |
| `ThrowWeapItemClass` | `EFT.InventoryLogic.ThrowWeap` |
| `ThrowWeapTemplateClass` | `EFT.InventoryLogic.ThrowWeapTemplate` |
| `GClass3430` | `EFT.InventoryLogic.ToggleResult` |
| `ToolItemClass` | `EFT.InventoryLogic.Tool` |
| `GClass1586` | `EFT.InventoryLogic.TooLargeStackError` |
| `ToolTemplateClass` | `EFT.InventoryLogic.ToolTemplate` |
| `GClass3425` | `EFT.InventoryLogic.TransferResult` |
| `GClass3447` | `EFT.InventoryLogic.Trasaction` |
| `GEventArgs12` | `EFT.InventoryLogic.UnbindItemEventArgs` |
| `GClass3432` | `EFT.InventoryLogic.UnbindResult` |
| `GClass1565` | `EFT.InventoryLogic.UnknownAddressError` |
| `GClass3367` | `EFT.InventoryLogic.UnknownItem` |
| `GClass3367+Class2349` | `EFT.InventoryLogic.UnknownItem+UnknownItemTemplate` |
| `GClass1566` | `EFT.InventoryLogic.UnknownItemError` |
| `GEventArgs8` | `EFT.InventoryLogic.UnloadMagazineEventArgs` |
| `GClass3420` | `EFT.InventoryLogic.UnloadMagOperationResult` |
| `VestItemClass` | `EFT.InventoryLogic.Vest` |
| `VestTemplateClass` | `EFT.InventoryLogic.VestTemplate` |
| `GClass3129` | `EFT.InventoryLogic.VirtualContainer` |
| `VisorsItemClass` | `EFT.InventoryLogic.Visors` |
| `VisorsTemplateClass` | `EFT.InventoryLogic.VisorsTemplate` |
| `GClass3470` | `EFT.InventoryLogic.WeaponAssembler` |
| `GClass3470+Exception4` | `EFT.InventoryLogic.WeaponAssembler+AbortException` |
| `GClass3470+Class2492` | `EFT.InventoryLogic.WeaponAssembler+ModWithSlot` |
| `GClass3469` | `EFT.InventoryLogic.WeaponModdingManipulation` |
| `BaseDescriptorClass` | `EFT.InventoryOperationDescriptor` |
| `IPlayerOwner` | `EFT.IObserverToPlayerBridge` |
| `GInterface192` | `EFT.IOperationInfo` |
| `GInterface212` | `EFT.IPlayerEventsConsumer` |
| `GInterface231` | `EFT.IPlayerInputTranslator` |
| `GInterface209` | `EFT.IPlayerOwner` |
| `GInterface214` | `EFT.IProfileDataContainer` |
| `IPlayerAndPetProfile` | `EFT.IProfileSession` |
| `GInterface219` | `EFT.IProfileUpdatesHandler` |
| `IQuestActions` | `EFT.IQuestSession` |
| `GInterface206` | `EFT.IQuickGrenadeThrowController` |
| `GInterface207` | `EFT.IQuickKnifeKickController` |
| `GInterface204` | `EFT.IQuickUseHandsController` |
| `GInterface205` | `EFT.IQuickUseHandsController` |
| `IOnHandsUseCallback` | `EFT.IQuickUseItem` |
| `GInterface178` | `EFT.IRecodableItemHandler` |
| `GInterface186` | `EFT.IRefreshHandler` |
| `GInterface191` | `EFT.IRemoveFromHandsHandler` |
| `IOnItemRemoved` | `EFT.IRemoveHandler` |
| `GInterface165` | `EFT.IRocketSettings` |
| `IRollback` | `EFT.IRollable` |
| `GInterface215` | `EFT.ISearchableContainer` |
| `IOnSetInHands` | `EFT.ISetInHandsHandler` |
| `GInterface210` | `EFT.IShellCollisionListener` |
| `IChatInteractions` | `EFT.ISocial` |
| `GInterface175` | `EFT.ISpawnDelayModel` |
| `GInterface235` | `EFT.ISurveyAnswer` |
| `IExecute` | `EFT.ISyncOperation` |
| `GClass1950` | `EFT.ItemAddressDescriptor` |
| `EFTItemSerializerClass` | `EFT.ItemBinarySerializer` |
| `GClass1923` | `EFT.ItemComponentDescriptor` |
| `GStruct280` | `EFT.ItemCounter` |
| `InventoryDescriptorClass` | `EFT.ItemDescriptor` |
| `GClass1911` | `EFT.ItemDeserializer` |
| `GClass1911+Class1184` | `EFT.ItemDeserializer+AbstractMemberMetaInfo` |
| `GClass1911+Class1186` | `EFT.ItemDeserializer+FieldMetaInfo` |
| `GClass1911+Class1185` | `EFT.ItemDeserializer+MemberMetaInfo` |
| `GClass1911+Class1187` | `EFT.ItemDeserializer+PropertyMetaInfo` |
| `GClass1911+Class1188` | `EFT.ItemDeserializer+TypeMetaInfo` |
| `ItemFactoryClass` | `EFT.ItemFactory` |
| `ItemFactoryClass+GStruct181` | `EFT.ItemFactory+FlatItemsToResultTree` |
| `ItemFactoryClass+Struct306` | `EFT.ItemFactory+ItemCachedName` |
| `ItemFactoryClass+Class1193` | `EFT.ItemFactory+ItemNamedPreset` |
| `ItemFactoryClass+GClass1536` | `EFT.ItemFactory+NoContainerWithIdError` |
| `ItemFactoryClass+GClass1535` | `EFT.ItemFactory+NoParentWithIdError` |
| `GClass1812` | `EFT.ItemFactoryCreateOperation` |
| `GClass1802` | `EFT.ItemInfo` |
| `GClass1924` | `EFT.ItemInfoDescriptor` |
| `GClass1918` | `EFT.ItemInGridDescriptor` |
| `GClass2725` | `EFT.ItemInHandSubsystem.LeftHandController` |
| `GClass2358` | `EFT.ItemReference` |
| `GClass1913` | `EFT.ItemRelatedViewExtensions` |
| `GInterface189` | `EFT.IUnbindHandler` |
| `GInterface184` | `EFT.IUnloadMagazineHandler` |
| `GInterface216` | `EFT.IUpdatableNestable` |
| `GInterface229` | `EFT.IUpdate` |
| `GInterface202` | `EFT.IUsableItemController` |
| `GInterface218` | `EFT.IVolumeControl` |
| `GInterface199` | `EFT.IWeaponController` |
| `GClass1800` | `EFT.JitWarmUpper` |
| `GClass2296` | `EFT.JobScattering` |
| `GClass2295` | `EFT.JobsScattering` |
| `GClass1861` | `EFT.JsonConverterAdapter` |
| `GClass1946` | `EFT.JsonCorpseDescriptor` |
| `GAttribute24` | `EFT.JsonEnumNameAttribute` |
| `GClass1945` | `EFT.JsonLootItemDescriptor` |
| `JumpLandingStateClass` | `EFT.JumpLandingState` |
| `JumpStateClass` | `EFT.JumpPlayerState` |
| `GClass2346` | `EFT.KarmaClientController` |
| `GClass1940` | `EFT.KeyComponentDescriptor` |
| `GClass2376` | `EFT.KeyTools` |
| `GClass2194` | `EFT.Kick` |
| `Class1743` | `EFT.KnifeInputTranslator` |
| `GClass2083` | `EFT.KnifePacketExtensions` |
| `GStruct167` | `EFT.LampChangeStatePacket` |
| `GStruct240` | `EFT.LauncherRangeStatePacket` |
| `GClass2106` | `EFT.LayHand` |
| `Class1394` | `EFT.LeftHandInteractionsEventConsumer` |
| `GStruct224` | `EFT.LeftHandPacket` |
| `GClass1928` | `EFT.LightComponentDescriptor` |
| `GStruct179` | `EFT.LighthouseTraderZoneData` |
| `GStruct267` | `EFT.LighthouseTraderZoneDebugToolPacket` |
| `FirearmLightStateStruct` | `EFT.LightsState` |
| `GClass2195` | `EFT.LoadingTimeout` |
| `GClass1972` | `EFT.LoadMagOperationDescriptor` |
| `GClass2287` | `EFT.LoadScenesFromPresetOperation` |
| `GClass2287+Class395` | `EFT.LoadScenesFromPresetOperation+Logger` |
| `GClass2347` | `EFT.Locale` |
| `GClass2348` | `EFT.LocalizationExtensions` |
| `GClass2349` | `EFT.LocalizationKeyExtensions` |
| `LocaleManagerClass` | `EFT.LocalizationManager` |
| `LocalGameRunddansControllerClass` | `EFT.LocalRunddansController` |
| `GClass2268` | `EFT.LocalStatisticManager` |
| `LocalGameTransitControllerClass` | `EFT.LocalTransitController` |
| `GClass2061` | `EFT.LocationDescription` |
| `GClass2341` | `EFT.LocationDownloader` |
| `AlreadyTransitDataClass` | `EFT.LocationTransit` |
| `GClass1929` | `EFT.LockableComponentDescriptor` |
| `GClass2308` | `EFT.LoginShowOperation` |
| `Class1481` | `EFT.LoginStore` |
| `GClass1947` | `EFT.LootDataDescriptor` |
| `GStruct228` | `EFT.LootInteractionPacket` |
| `LootingStateClass` | `EFT.LootPlayerState` |
| `GStruct185` | `EFT.LootRayInfo` |
| `LootSyncStruct` | `EFT.LootSyncPacket` |
| `GClass2088` | `EFT.MagazineInHandsVisual` |
| `GClass1971` | `EFT.MagOperationDescriptor` |
| `MainMenuControllerClass` | `EFT.MainMenuShowOperation` |
| `GClass1917` | `EFT.MalfunctionDescriptor` |
| `GClass1930` | `EFT.MapComponentDescriptor` |
| `GClass1864` | `EFT.MaskToStringList` |
| `MasterSkillClass` | `EFT.Mastering` |
| `GClass2262` | `EFT.MasteringLevelComparer` |
| `Class1523` | `EFT.MatchingOperation` |
| `GClass1415` | `EFT.MatchmakerGroupStatus` |
| `GClass1414` | `EFT.MatchmakerPlayersStatus` |
| `GClass1834` | `EFT.MaximumEnergyReserveBonus` |
| `GClass1931` | `EFT.MedKitComponentDescriptor` |
| `Class1746` | `EFT.MedsInputTranslator` |
| `GClass1797` | `EFT.MenuBundles` |
| `MergeDescriptorClass` | `EFT.MergeOperationDescriptor` |
| `GClass1824` | `EFT.MinusInsuranceReturnBonus` |
| `GClass2288` | `EFT.ModernLoadScenesFromPreset` |
| `GClass2288+GClass2289` | `EFT.ModernLoadScenesFromPreset+SceneToken` |
| `GClass2064` | `EFT.MongoIdBinaryConverter` |
| `GClass2062` | `EFT.MongoIDConverter` |
| `GClass2063` | `EFT.MongoIdTypeConverter` |
| `MountingPacketStruct` | `EFT.MountingPacket` |
| `Class1728` | `EFT.MoveInputTranslator` |
| `GClass2076` | `EFT.MovementDirectionExtension` |
| `MovementInfoPacketStruct` | `EFT.MovementInfoPacket` |
| `GStruct214` | `EFT.MovementShortInfoPacket` |
| `MoveDescriptorClass` | `EFT.MoveOperationDescriptor` |
| `RunStateClass` | `EFT.MovePlayerState` |
| `EFT.MovingPlatforms.MovingPlatform+GInterface459` | `EFT.MovingPlatforms.MovingPlatform+IPlatformTransportee` |
| `EFT.MovingPlatforms.MovingPlatform+GClass3596` | `EFT.MovingPlatforms.MovingPlatform+NetworkAdapter` |
| `GClass2370` | `EFT.MultiOptionAnswer` |
| `GClass2374` | `EFT.MultiOptionQuestion` |
| `GClass2343` | `EFT.NarrateScene` |
| `GClass2344` | `EFT.NarrateSceneInfo` |
| `GClass2243` | `EFT.NestableExtension` |
| `GClass1921` | `EFT.NestedItemDescriptor` |
| `GClass2345` | `EFT.Net` |
| `GClass3063` | `EFT.Network.AbstractNetwork` |
| `GClass3066` | `EFT.Network.BaseNetworkCryptography` |
| `GClass3068` | `EFT.Network.BytesSegmentPool` |
| `GClass3069` | `EFT.Network.BytesSerialization` |
| `PacketEncryptorAbstractClass` | `EFT.Network.ClientNetworkCryptography` |
| `GInterface382` | `EFT.Network.ISerializableMessage` |
| `GClass3064` | `EFT.Network.NetworkClient` |
| `GClass3070` | `EFT.Network.NetworkConnectConfiguration` |
| `GClass3071` | `EFT.Network.NetworkConnection` |
| `GClass3072` | `EFT.Network.NetworkConstants` |
| `GStruct416` | `EFT.Network.NetworkMessage` |
| `GClass3073` | `EFT.Network.NetworkMessageHandlers` |
| `GClass3065` | `EFT.Network.NetworkServer` |
| `GClass3104` | `EFT.Network.Quality.NetworkQualityParam` |
| `GClass3105` | `EFT.Network.Quality.NetworkQualityParams` |
| `GClass3106` | `EFT.Network.Quality.NetworkQualityUnionWatcher` |
| `GClass3106+GDelegate78` | `EFT.Network.Quality.NetworkQualityUnionWatcher+KickDelegate` |
| `Class2275` | `EFT.Network.Quality.NetworkQualityWatcher` |
| `Class2275+Class2277` | `EFT.Network.Quality.NetworkQualityWatcher+Core` |
| `Class2275+Class2276` | `EFT.Network.Quality.NetworkQualityWatcher+KickCommand` |
| `GClass3074` | `EFT.Network.SnapshotInterpolator` |
| `GClass3075` | `EFT.Network.SnapshotInterpolator` |
| `GClass3074+GStruct417` | `EFT.Network.SnapshotInterpolator+SnapshotInterpolatorOptions` |
| `GClass3103` | `EFT.Network.Statistics.NetworkAverageFloatStatistics` |
| `GClass3102` | `EFT.Network.Statistics.NetworkAverageIntStatistics` |
| `GStruct420` | `EFT.Network.Statistics.NetworkConnectionStatistics` |
| `GClass3099` | `EFT.Network.Statistics.NetworkCountStatistics` |
| `GClass3100` | `EFT.Network.Statistics.NetworkLoseStatistics` |
| `GClass3098` | `EFT.Network.Statistics.NetworkMessageStatistics` |
| `GClass3097` | `EFT.Network.Statistics.NetworkStatistics` |
| `GClass3101` | `EFT.Network.Statistics.NetworkValueStatistics` |
| `GClass3093` | `EFT.Network.Tools.ArrayPoolExtensions` |
| `GClass3094` | `EFT.Network.Tools.CircularBuffer` |
| `GClass3095` | `EFT.Network.Tools.ConcurrentQueueNonAlloc` |
| `GClass3095+Class2272` | `EFT.Network.Tools.ConcurrentQueueNonAlloc+ObjectPool` |
| `GClass3095+GClass3096` | `EFT.Network.Tools.ConcurrentQueueNonAlloc+Segment` |
| `GClass3095+Struct891` | `EFT.Network.Tools.ConcurrentQueueNonAlloc+VolatileBool` |
| `GStruct419` | `EFT.Network.Tools.DisposableArrayPool` |
| `GClass3078` | `EFT.Network.Transport.ConnectionConnectedState` |
| `GClass3079` | `EFT.Network.Transport.ConnectionConnectingState` |
| `GClass3080` | `EFT.Network.Transport.ConnectionDisconnectedState` |
| `GClass3081` | `EFT.Network.Transport.ConnectionInitialState` |
| `GClass3077` | `EFT.Network.Transport.ConnectionState` |
| `GClass3082` | `EFT.Network.Transport.ConnectionWaitingState` |
| `GStruct418` | `EFT.Network.Transport.DisconnectionInformation` |
| `GClass3083` | `EFT.Network.Transport.IPEndPointNonAlloc` |
| `GClass3084` | `EFT.Network.Transport.IPEndPointNonAllocExtensions` |
| `GClass3085` | `EFT.Network.Transport.NetworkConnection` |
| `GClass3086` | `EFT.Network.Transport.NetworkHost` |
| `GClass3087` | `EFT.Network.Transport.NetworkHostThread` |
| `GClass3087+Struct887` | `EFT.Network.Transport.NetworkHostThread+ConnectQueueData` |
| `GClass3087+Struct888` | `EFT.Network.Transport.NetworkHostThread+DisconnectQueueData` |
| `GClass3087+Struct889` | `EFT.Network.Transport.NetworkHostThread+ReceiveQueueData` |
| `GClass3087+Struct890` | `EFT.Network.Transport.NetworkHostThread+SendQueueData` |
| `GClass3088` | `EFT.Network.Transport.NetworkMessage` |
| `GClass3090` | `EFT.Network.Transport.NetworkMessagePool` |
| `GClass3089` | `EFT.Network.Transport.NetworkMessagePooled` |
| `GClass3091` | `EFT.Network.Transport.NetworkTransport` |
| `GClass3092` | `EFT.Network.Transport.UdpSocket` |
| `Class1466` | `EFT.NetworkConnectionExtension` |
| `EFT.NetworkGame`1+Class1652` | `EFT.NetworkGame`1+CustomUpdateTextureStreamingManager` |
| `EFT.NetworkGameSession+Class399` | `EFT.NetworkGameSession+AnticheatLogger` |
| `EFT.NetworkGameSession+Class400` | `EFT.NetworkGameSession+ResourcesLogger` |
| `GStruct366` | `EFT.NetworkPackets.ArmorUpdate` |
| `GStruct367` | `EFT.NetworkPackets.CompassPacket` |
| `GStruct369` | `EFT.NetworkPackets.CorpseImpulse` |
| `GStruct390` | `EFT.NetworkPackets.DeathInventorySyncPacket` |
| `GStruct368` | `EFT.NetworkPackets.DeathPacket` |
| `GStruct370` | `EFT.NetworkPackets.DetailedHitInfo` |
| `GStruct371` | `EFT.NetworkPackets.EmptyHandPacket` |
| `GStruct372` | `EFT.NetworkPackets.EnableInventoryPacket` |
| `GStruct373` | `EFT.NetworkPackets.FlareShotInfo` |
| `GrenadePacketStruct` | `EFT.NetworkPackets.GrenadePacket` |
| `GStruct375` | `EFT.NetworkPackets.GrenadeThrowData` |
| `GStruct376` | `EFT.NetworkPackets.HideWeaponPacket` |
| `GStruct377` | `EFT.NetworkPackets.HitInfo` |
| `GStruct389` | `EFT.NetworkPackets.InventoryHashPacket` |
| `GStruct378` | `EFT.NetworkPackets.InventoryOperationStatus` |
| `GStruct379` | `EFT.NetworkPackets.KnifeHitInfo` |
| `GStruct380` | `EFT.NetworkPackets.KnifePacket` |
| `GStruct381` | `EFT.NetworkPackets.LauncherReloadInfo` |
| `GStruct382` | `EFT.NetworkPackets.OneAndList` |
| `GClass2984` | `EFT.NetworkPackets.OneAndListExtensions` |
| `GStruct383` | `EFT.NetworkPackets.PhraseCommandPacket` |
| `GStruct384` | `EFT.NetworkPackets.RocketShotInfo` |
| `GClass3003` | `EFT.NetworkPackets.Serialization.ArmorUpdateSerializationExtensions` |
| `GClass2988` | `EFT.NetworkPackets.Serialization.CompassPacketSerializationExtensions` |
| `GClass3002` | `EFT.NetworkPackets.Serialization.CorpseImpulseSerializationExtensions` |
| `GClass3001` | `EFT.NetworkPackets.Serialization.DeathPacketSerializationExtensions` |
| `GClass3007` | `EFT.NetworkPackets.Serialization.DetailedHitInfoSerializationExtensions` |
| `GClass2992` | `EFT.NetworkPackets.Serialization.EmptyHandPacketSerializationExtensions` |
| `GClass2986` | `EFT.NetworkPackets.Serialization.EnableInventoryPacketSerializationExtensions` |
| `GClass2995` | `EFT.NetworkPackets.Serialization.FlareShotInfoSerializationExtensions` |
| `GClass3000` | `EFT.NetworkPackets.Serialization.GrenadePacketSerializationExtensions` |
| `GClass2999` | `EFT.NetworkPackets.Serialization.GrenadeThrowDataSerializationExtensions` |
| `GClass2987` | `EFT.NetworkPackets.Serialization.HideWeaponPacketSerializationExtensions` |
| `GClass3005` | `EFT.NetworkPackets.Serialization.HitInfoSerializationExtensions` |
| `GClass3006` | `EFT.NetworkPackets.Serialization.InventoryOperationStatusSerializationExtensions` |
| `GClass2989` | `EFT.NetworkPackets.Serialization.KnifeHitInfoSerializationExtensions` |
| `GClass2990` | `EFT.NetworkPackets.Serialization.KnifePacketSerializationExtensions` |
| `GClass2993` | `EFT.NetworkPackets.Serialization.LauncherReloadInfoSerializationExtensions` |
| `GClass2997` | `EFT.NetworkPackets.Serialization.PhraseCommandPacketSerializationExtensions` |
| `GClass3004` | `EFT.NetworkPackets.Serialization.PoisonUpdateSerializationExtensions` |
| `GClass2996` | `EFT.NetworkPackets.Serialization.RocketShotInfoSerializationExtensions` |
| `GClass2998` | `EFT.NetworkPackets.Serialization.ShotInfoSerializationExtensions` |
| `GClass2994` | `EFT.NetworkPackets.Serialization.ShotTrajectoryPartSerializationExtensions` |
| `GClass2991` | `EFT.NetworkPackets.Serialization.UsableItemPacketSerializationExtensions` |
| `GClass2985` | `EFT.NetworkPackets.SerializationConstants` |
| `GStruct385` | `EFT.NetworkPackets.ShotTrajectoryPart` |
| `GStruct386` | `EFT.NetworkPackets.SideEffectUpdate` |
| `GStruct387` | `EFT.NetworkPackets.SyncPositionPacket` |
| `GStruct391` | `EFT.NetworkPackets.UsableItemPacket` |
| `GClass2286` | `EFT.NetworkRunddansController` |
| `GClass2237` | `EFT.NetworkSearchController` |
| `GClass1906` | `EFT.NetworkTransitController` |
| `NewsHubClass` | `EFT.NewsHub` |
| `GClass2853` | `EFT.NextObservedPlayer.AbortReloadCylinderMagazineCommandMessage` |
| `GClass2854` | `EFT.NextObservedPlayer.AimingCommandMessage` |
| `GClass2953` | `EFT.NextObservedPlayer.AnimationStateHashDictionary` |
| `GStruct328` | `EFT.NextObservedPlayer.ArenaObservedPlayerSpawnMessage` |
| `GClass2799` | `EFT.NextObservedPlayer.ArmorDurabilityChangedCommandMessage` |
| `GClass2800` | `EFT.NextObservedPlayer.ArmorFullChangeInfoCommandMessage` |
| `GClass2905` | `EFT.NextObservedPlayer.BaseHandsOperation` |
| `GClass2963` | `EFT.NextObservedPlayer.BaseObservedPlayerHandsController` |
| `GClass2893` | `EFT.NextObservedPlayer.BaseObservedPlayerListMessage` |
| `GClass2146` | `EFT.NextObservedPlayer.BaseObservedPlayerState` |
| `GClass2855` | `EFT.NextObservedPlayer.BoltActionReloadAfterFireCommandMessage` |
| `GClass2856` | `EFT.NextObservedPlayer.BreakMeleeComboCombatMessage` |
| `GClass2801` | `EFT.NextObservedPlayer.BtrGoInInteractionMessage` |
| `GClass2802` | `EFT.NextObservedPlayer.BtrGoOutInteractionMessage` |
| `GClass2954` | `EFT.NextObservedPlayer.BundleAnimationBones` |
| `GClass2803` | `EFT.NextObservedPlayer.ChangeEquipCommandMessage` |
| `GClass2857` | `EFT.NextObservedPlayer.ChangeFireModeCommandMessage` |
| `GClass2804` | `EFT.NextObservedPlayer.ChangeModOnItemCommandMessage` |
| `GClass2794` | `EFT.NextObservedPlayer.CommandMessageAutoSender` |
| `GClass2794+GClass2797` | `EFT.NextObservedPlayer.CommandMessageAutoSender+BoolChecker` |
| `GClass2794+GClass2795` | `EFT.NextObservedPlayer.CommandMessageAutoSender+Checker` |
| `GClass2794+GClass2798` | `EFT.NextObservedPlayer.CommandMessageAutoSender+EnumChecker` |
| `GClass2794+GClass2796` | `EFT.NextObservedPlayer.CommandMessageAutoSender+FloatChecker` |
| `GClass2794+GInterface316` | `EFT.NextObservedPlayer.CommandMessageAutoSender+IChecker` |
| `GClass2805` | `EFT.NextObservedPlayer.CompassStateCommandMessage` |
| `GClass2806` | `EFT.NextObservedPlayer.CreateCorpsePacket` |
| `GClass2858` | `EFT.NextObservedPlayer.CylinderCamoraIndexAndHammerStateCommandMessage` |
| `GStruct333` | `EFT.NextObservedPlayer.DefaultHandsOperationResult` |
| `GClass2859` | `EFT.NextObservedPlayer.DischargeAmmoFromCamoraCommandMessage` |
| `GClass2860` | `EFT.NextObservedPlayer.DischargeAmmoFromChamberCommandMessage` |
| `GClass2861` | `EFT.NextObservedPlayer.DischargeAmmoFromUnderbarrelWeaponCommandMessage` |
| `GClass2807` | `EFT.NextObservedPlayer.DoorBreachInteractionMessage` |
| `GClass2808` | `EFT.NextObservedPlayer.DoorUnlockInteractionMessage` |
| `GClass2809` | `EFT.NextObservedPlayer.DryShotFirearmCommandMessage` |
| `GClass2906` | `EFT.NextObservedPlayer.DryShotFireHandsOperation` |
| `GClass2906+GStruct335` | `EFT.NextObservedPlayer.DryShotFireHandsOperation+OperationCallbacks` |
| `GClass2810` | `EFT.NextObservedPlayer.EffectOnPlayerStatusCommandMessage` |
| `GClass2862` | `EFT.NextObservedPlayer.ExamineWeaponCommandMessage` |
| `GClass2811` | `EFT.NextObservedPlayer.FlareShotFirearmCommandMessage` |
| `GClass2812` | `EFT.NextObservedPlayer.FoldCommandMessage` |
| `GClass2813` | `EFT.NextObservedPlayer.GestureCommandMessage` |
| `GClass2904` | `EFT.NextObservedPlayer.HandsOperationAnimatorCallbacks` |
| `GStruct334` | `EFT.NextObservedPlayer.HandsOperationEmptyInput` |
| `GClass2814` | `EFT.NextObservedPlayer.HeadDeviceStatusCommandMessage` |
| `GClass2815` | `EFT.NextObservedPlayer.HeadGearToggleCommandMessage` |
| `GClass2816` | `EFT.NextObservedPlayer.HealthStatusCommandMessage` |
| `GInterface317` | `EFT.NextObservedPlayer.ICommandExecutable` |
| `ICommandMessage` | `EFT.NextObservedPlayer.ICommandMessage` |
| `GClass2863` | `EFT.NextObservedPlayer.IdleStateSyncCommandMessage` |
| `GInterface322` | `EFT.NextObservedPlayer.IHandOperation` |
| `GInterface321` | `EFT.NextObservedPlayer.IHandOperationLifeCircle` |
| `GInterface320` | `EFT.NextObservedPlayer.IHandsOperationResult` |
| `GClass2864` | `EFT.NextObservedPlayer.InsertMagazineCommandMessage` |
| `GClass2817` | `EFT.NextObservedPlayer.InteractCommandMessage` |
| `GClass2818` | `EFT.NextObservedPlayer.InteractionCommandMessage` |
| `GClass2819` | `EFT.NextObservedPlayer.InventoryInteractionCommandMessage` |
| `GClass2865` | `EFT.NextObservedPlayer.InventoryOpenStatusCommandMessage` |
| `GInterface319` | `EFT.NextObservedPlayer.IObservedPlayerStateContext` |
| `GInterface323` | `EFT.NextObservedPlayer.IObservedUsableItem` |
| `GClass2820` | `EFT.NextObservedPlayer.LeftHandCommandMessage` |
| `GClass2866` | `EFT.NextObservedPlayer.LoadAmmoToCamoraCommandMessage` |
| `GClass2867` | `EFT.NextObservedPlayer.LoadAmmoToChamberCommandMessage` |
| `GClass2868` | `EFT.NextObservedPlayer.LoadAmmoToUnderbarrelWeaponCommandMessage` |
| `GClass2869` | `EFT.NextObservedPlayer.MagAndChamberStateCommandMessage` |
| `GClass2870` | `EFT.NextObservedPlayer.MalfunctionCommandMessage` |
| `GClass2821` | `EFT.NextObservedPlayer.MedEffectResourceCommandMessage` |
| `GClass2822` | `EFT.NextObservedPlayer.MedEffectStatusCommandMessage` |
| `GClass2871` | `EFT.NextObservedPlayer.MeleeAttackCommandMessage` |
| `GClass2823` | `EFT.NextObservedPlayer.MountingCommandMessage` |
| `GStruct331` | `EFT.NextObservedPlayer.ObservedPlayerAnimatorModel` |
| `GClass2152` | `EFT.NextObservedPlayer.ObservedPlayerApproachState` |
| `GClass2903` | `EFT.NextObservedPlayer.ObservedPlayerArmorInfo` |
| `GClass2955` | `EFT.NextObservedPlayer.ObservedPlayerArmorInfoController` |
| `GClass2157` | `EFT.NextObservedPlayer.ObservedPlayerBlindFireState` |
| `GClass2956` | `EFT.NextObservedPlayer.ObservedPlayerBodyAnimatorController` |
| `GStruct338` | `EFT.NextObservedPlayer.ObservedPlayerChangeModelJob` |
| `GClass2900` | `EFT.NextObservedPlayer.ObservedPlayerCommandsMessage` |
| `GClass2901` | `EFT.NextObservedPlayer.ObservedPlayerCommandsMessagePool` |
| `GStruct339` | `EFT.NextObservedPlayer.ObservedPlayerCommandsMessagePrepareJob` |
| `GClass2902` | `EFT.NextObservedPlayer.ObservedPlayerCommandsPool` |
| `GStruct336` | `EFT.NextObservedPlayer.ObservedPlayerCommandsProcessJob` |
| `ObservedPlayerControllerClass` | `EFT.NextObservedPlayer.ObservedPlayerController` |
| `GClass2959` | `EFT.NextObservedPlayer.ObservedPlayerControllerFactory` |
| `GClass2958` | `EFT.NextObservedPlayer.ObservedPlayerControllers` |
| `GClass2960` | `EFT.NextObservedPlayer.ObservedPlayerDeadBodyCulling` |
| `GClass2153` | `EFT.NextObservedPlayer.ObservedPlayerDefaultState` |
| `GClass2154` | `EFT.NextObservedPlayer.ObservedPlayerDoorBreachState` |
| `GClass2155` | `EFT.NextObservedPlayer.ObservedPlayerDoorInteractionState` |
| `GClass2964` | `EFT.NextObservedPlayer.ObservedPlayerEmptyHandsController` |
| `GClass2961` | `EFT.NextObservedPlayer.ObservedPlayerEquipmentViewController` |
| `FirearmHandsControllerClass` | `EFT.NextObservedPlayer.ObservedPlayerFirearmHandsController` |
| `GClass2962` | `EFT.NextObservedPlayer.ObservedPlayerGestureController` |
| `GClass2966` | `EFT.NextObservedPlayer.ObservedPlayerGrenadeHandsController` |
| `HandsControllerClass` | `EFT.NextObservedPlayer.ObservedPlayerHandsController` |
| `GClass2156` | `EFT.NextObservedPlayer.ObservedPlayerIdleState` |
| `GClass2974` | `EFT.NextObservedPlayer.ObservedPlayerInfoContainer` |
| `GClass2158` | `EFT.NextObservedPlayer.ObservedPlayerInteractState` |
| `GClass3076` | `EFT.NextObservedPlayer.ObservedPlayerInterpolator` |
| `GClass3386` | `EFT.NextObservedPlayer.ObservedPlayerInventoryController` |
| `GClass2975` | `EFT.NextObservedPlayer.ObservedPlayerInventoryInfo` |
| `GClass2975+Class2199` | `EFT.NextObservedPlayer.ObservedPlayerInventoryInfo+ObservedProfileSkillInfo` |
| `GClass2159` | `EFT.NextObservedPlayer.ObservedPlayerJumpLandingState` |
| `GClass2160` | `EFT.NextObservedPlayer.ObservedPlayerJumpState` |
| `GClass2967` | `EFT.NextObservedPlayer.ObservedPlayerKnifeHandsController` |
| `GClass2894` | `EFT.NextObservedPlayer.ObservedPlayerListCommandsMessage` |
| `GClass2898` | `EFT.NextObservedPlayer.ObservedPlayerListCommandsMessagePool` |
| `GClass2895` | `EFT.NextObservedPlayer.ObservedPlayerListCommandsMessagePooled` |
| `GClass2896` | `EFT.NextObservedPlayer.ObservedPlayerListSnapshotMessage` |
| `GClass2899` | `EFT.NextObservedPlayer.ObservedPlayerListSnapshotMessagePool` |
| `GClass2897` | `EFT.NextObservedPlayer.ObservedPlayerListSnapshotMessagePooled` |
| `GClass2968` | `EFT.NextObservedPlayer.ObservedPlayerMedsController` |
| `GClass2976` | `EFT.NextObservedPlayer.ObservedPlayerMessageJobs` |
| `GClass2977` | `EFT.NextObservedPlayer.ObservedPlayerMessageReceiver` |
| `GStruct341` | `EFT.NextObservedPlayer.ObservedPlayerModel` |
| `GClass2980` | `EFT.NextObservedPlayer.ObservedPlayerMovementController` |
| `GStruct342` | `EFT.NextObservedPlayer.ObservedPlayerMovementModel` |
| `GClass2161` | `EFT.NextObservedPlayer.ObservedPlayerProneMoveState` |
| `GClass2162` | `EFT.NextObservedPlayer.ObservedPlayerProneState` |
| `GClass2163` | `EFT.NextObservedPlayer.ObservedPlayerProneToStandState` |
| `GClass2969` | `EFT.NextObservedPlayer.ObservedPlayerQuickUseItemController` |
| `GClass2164` | `EFT.NextObservedPlayer.ObservedPlayerRunState` |
| `GStruct329` | `EFT.NextObservedPlayer.ObservedPlayerSnapshotMessage` |
| `GStruct340` | `EFT.NextObservedPlayer.ObservedPlayerSnapshotMessagePrepareJob` |
| `GStruct330` | `EFT.NextObservedPlayer.ObservedPlayerSpawnMessage` |
| `GClass2165` | `EFT.NextObservedPlayer.ObservedPlayerSprintState` |
| `GClass2981` | `EFT.NextObservedPlayer.ObservedPlayerStateContext` |
| `GClass2166` | `EFT.NextObservedPlayer.ObservedPlayerStationaryState` |
| `GClass2982` | `EFT.NextObservedPlayer.ObservedPlayerStepsImitator` |
| `GClass2167` | `EFT.NextObservedPlayer.ObservedPlayerTransitionToProneState` |
| `GClass2970` | `EFT.NextObservedPlayer.ObservedPlayerUsableItemController` |
| `GClass2972` | `EFT.NextObservedPlayer.ObservedRadioTrasmitter` |
| `GClass2973` | `EFT.NextObservedPlayer.ObservedRangeFinder` |
| `GStruct337` | `EFT.NextObservedPlayer.ObservedUsableItemUpdatedData` |
| `GClass919` | `EFT.NextObservedPlayer.ObserverPlayerCulling` |
| `GClass2910` | `EFT.NextObservedPlayer.Operations.BoltActionReloadAfterFireHandsOperation` |
| `GClass2910+GStruct343` | `EFT.NextObservedPlayer.Operations.BoltActionReloadAfterFireHandsOperation+OperationCallbacks` |
| `GClass2911` | `EFT.NextObservedPlayer.Operations.BreakMeleeComboHandsOperation` |
| `GClass2912` | `EFT.NextObservedPlayer.Operations.ChangeFireModeHandsOperation` |
| `GClass2913` | `EFT.NextObservedPlayer.Operations.ChangeModOnWeaponOperation` |
| `GClass2914` | `EFT.NextObservedPlayer.Operations.DisableUnderbarrelHandsOperation` |
| `GClass2914+GStruct344` | `EFT.NextObservedPlayer.Operations.DisableUnderbarrelHandsOperation+OperationCallbacks` |
| `GClass2915` | `EFT.NextObservedPlayer.Operations.DiscardSwingHandsOperation` |
| `GClass2916` | `EFT.NextObservedPlayer.Operations.DischargeAmmoFromCamoraHandsOperation` |
| `GClass2916+GStruct345` | `EFT.NextObservedPlayer.Operations.DischargeAmmoFromCamoraHandsOperation+OperationCallbacks` |
| `GClass2917` | `EFT.NextObservedPlayer.Operations.DischargeAmmoFromChamberHandsOperation` |
| `GClass2917+GStruct346` | `EFT.NextObservedPlayer.Operations.DischargeAmmoFromChamberHandsOperation+OperationCallbacks` |
| `GClass2918` | `EFT.NextObservedPlayer.Operations.DischargeAmmoFromUnderbarrelHandsOperation` |
| `GClass2918+GStruct347` | `EFT.NextObservedPlayer.Operations.DischargeAmmoFromUnderbarrelHandsOperation+OperationCallbacks` |
| `GClass2919` | `EFT.NextObservedPlayer.Operations.EnableUnderbarrelHandsOperation` |
| `GClass2919+GStruct348` | `EFT.NextObservedPlayer.Operations.EnableUnderbarrelHandsOperation+OperationCallbacks` |
| `GClass2920` | `EFT.NextObservedPlayer.Operations.ExamineWeaponHandsOperation` |
| `GClass2921` | `EFT.NextObservedPlayer.Operations.FoldHandsOperation` |
| `GClass2921+GStruct349` | `EFT.NextObservedPlayer.Operations.FoldHandsOperation+Input` |
| `GClass2922` | `EFT.NextObservedPlayer.Operations.HighSwingHandsOperation` |
| `GClass2924` | `EFT.NextObservedPlayer.Operations.HighThrowHandsOperation` |
| `GClass2924+GStruct350` | `EFT.NextObservedPlayer.Operations.HighThrowHandsOperation+OperationCallbacks` |
| `GClass2926` | `EFT.NextObservedPlayer.Operations.IdleStateSyncHandsOperation` |
| `GClass2927` | `EFT.NextObservedPlayer.Operations.InsertMagazineHandsOperation` |
| `GClass2927+GStruct351` | `EFT.NextObservedPlayer.Operations.InsertMagazineHandsOperation+OperationCallbacks` |
| `GClass2928` | `EFT.NextObservedPlayer.Operations.InventoryOpenStatusHandsOperation` |
| `GClass2929` | `EFT.NextObservedPlayer.Operations.LoadAmmoToCamoraHandsOperation` |
| `GClass2929+GStruct352` | `EFT.NextObservedPlayer.Operations.LoadAmmoToCamoraHandsOperation+OperationCallbacks` |
| `GClass2930` | `EFT.NextObservedPlayer.Operations.LoadAmmoToChamberHandsOperation` |
| `GClass2930+GStruct353` | `EFT.NextObservedPlayer.Operations.LoadAmmoToChamberHandsOperation+OperationCallbacks` |
| `GClass2931` | `EFT.NextObservedPlayer.Operations.LoadAmmoToUnderbarrelHandsOperation` |
| `GClass2931+GStruct354` | `EFT.NextObservedPlayer.Operations.LoadAmmoToUnderbarrelHandsOperation+OperationCallbacks` |
| `GClass2923` | `EFT.NextObservedPlayer.Operations.LowSwingHandsOperation` |
| `GClass2925` | `EFT.NextObservedPlayer.Operations.LowThrowHandsOperation` |
| `GClass2932` | `EFT.NextObservedPlayer.Operations.MagAndChamberStateHandsOperation` |
| `GClass2933` | `EFT.NextObservedPlayer.Operations.MalfunctionHandsOperation` |
| `GClass2933+GStruct355` | `EFT.NextObservedPlayer.Operations.MalfunctionHandsOperation+OperationCallbacks` |
| `GClass2934` | `EFT.NextObservedPlayer.Operations.MeleeAttackHandsOperation` |
| `GClass2935` | `EFT.NextObservedPlayer.Operations.PlantTripwireOperation` |
| `GClass2936` | `EFT.NextObservedPlayer.Operations.PullOutMagazineHandsOperation` |
| `GClass2936+GStruct356` | `EFT.NextObservedPlayer.Operations.PullOutMagazineHandsOperation+OperationCallbacks` |
| `GClass2937` | `EFT.NextObservedPlayer.Operations.QuickUseItemHandsOperation` |
| `GClass2937+GStruct357` | `EFT.NextObservedPlayer.Operations.QuickUseItemHandsOperation+Input` |
| `GClass2938` | `EFT.NextObservedPlayer.Operations.RechamberHandsOperation` |
| `GClass2938+GStruct358` | `EFT.NextObservedPlayer.Operations.RechamberHandsOperation+OperationCallbacks` |
| `GClass2939` | `EFT.NextObservedPlayer.Operations.ReloadExternalMagazineHandsOperation` |
| `GClass2939+GStruct359` | `EFT.NextObservedPlayer.Operations.ReloadExternalMagazineHandsOperation+OperationCallbacks` |
| `GClass2940` | `EFT.NextObservedPlayer.Operations.ReloadInternalMagHandsOperation` |
| `GClass2941` | `EFT.NextObservedPlayer.Operations.ReloadInternalMagWithOpenBoltHandsOperation` |
| `GClass2942` | `EFT.NextObservedPlayer.Operations.ReloadMultiBarrelWeaponHandsOperation` |
| `GClass2942+GStruct360` | `EFT.NextObservedPlayer.Operations.ReloadMultiBarrelWeaponHandsOperation+OperationCallbacks` |
| `GClass2943` | `EFT.NextObservedPlayer.Operations.ReloadSingleBarrelHandsOperation` |
| `GClass2943+GStruct361` | `EFT.NextObservedPlayer.Operations.ReloadSingleBarrelHandsOperation+OperationCallbacks` |
| `GClass2944` | `EFT.NextObservedPlayer.Operations.RemoveHandsOperation` |
| `GClass2944+GStruct362` | `EFT.NextObservedPlayer.Operations.RemoveHandsOperation+Input` |
| `GClass2945` | `EFT.NextObservedPlayer.Operations.RepairMalfunctionHandsOperation` |
| `GClass2945+GStruct363` | `EFT.NextObservedPlayer.Operations.RepairMalfunctionHandsOperation+OperationCallbacks` |
| `TaskCompletionClass` | `EFT.NextObservedPlayer.Operations.SafeTaskCompleteSource` |
| `GClass2946` | `EFT.NextObservedPlayer.Operations.SetChamberStateHandsOperation` |
| `GClass2947` | `EFT.NextObservedPlayer.Operations.SetExternalMagazineStateHandsOperation` |
| `GClass2948` | `EFT.NextObservedPlayer.Operations.SetFinishReloadInternalMagWithOpenBoltHandsOperation` |
| `GClass2949` | `EFT.NextObservedPlayer.Operations.SpawnHandsOperation` |
| `GClass2950` | `EFT.NextObservedPlayer.Operations.UnderbarrelRangeValueHandsOperation` |
| `GClass2950+GStruct364` | `EFT.NextObservedPlayer.Operations.UnderbarrelRangeValueHandsOperation+OperationCallbacks` |
| `GClass2951` | `EFT.NextObservedPlayer.Operations.UnderbarrelReloadHandsOperation` |
| `GClass2951+GStruct365` | `EFT.NextObservedPlayer.Operations.UnderbarrelReloadHandsOperation+OperationCallbacks` |
| `GClass2952` | `EFT.NextObservedPlayer.Operations.ZombieMeleeAttackOperation` |
| `GClass2824` | `EFT.NextObservedPlayer.PhraseCommandMessage` |
| `GClass2825` | `EFT.NextObservedPlayer.PhysicalParametersCommandMessage` |
| `GClass2826` | `EFT.NextObservedPlayer.PickupCommandMessage` |
| `GClass2872` | `EFT.NextObservedPlayer.PullOutMagCommandMessage` |
| `GClass2873` | `EFT.NextObservedPlayer.RadioTransmitterStatusCommandMessage` |
| `GClass2978` | `EFT.NextObservedPlayer.ReceiveMessageStatistics` |
| `GClass2874` | `EFT.NextObservedPlayer.RechamberCommandMessage` |
| `GClass2875` | `EFT.NextObservedPlayer.ReloadCylinderMagazineCommandMessage` |
| `GClass2907` | `EFT.NextObservedPlayer.ReloadCylinderMagazineHandsOperation` |
| `GClass2876` | `EFT.NextObservedPlayer.ReloadExternalMagazineCommandMessage` |
| `GClass2877` | `EFT.NextObservedPlayer.ReloadInternalMagazineCommandMessage` |
| `GClass2878` | `EFT.NextObservedPlayer.ReloadInternalMagWithOpenBoltMessage` |
| `GClass2879` | `EFT.NextObservedPlayer.ReloadMultiBarrelWeaponCommandMessage` |
| `GClass2880` | `EFT.NextObservedPlayer.RepairMalfunctionCommandMessage` |
| `GClass2827` | `EFT.NextObservedPlayer.RocketLauncherShotCommandMessage` |
| `GClass2881` | `EFT.NextObservedPlayer.RollCylinderCommandMessage` |
| `GClass2908` | `EFT.NextObservedPlayer.RollCylinderHandsOperation` |
| `GClass2828` | `EFT.NextObservedPlayer.ScopeModeToggleCommandMessage` |
| `GStruct332` | `EFT.NextObservedPlayer.ServerFramerateMessage` |
| `GClass2882` | `EFT.NextObservedPlayer.SetAbortReloadInternalMagWithOpenBoltMessage` |
| `GClass2829` | `EFT.NextObservedPlayer.SetAnimatorLayerWeight` |
| `GClass2883` | `EFT.NextObservedPlayer.SetChamberStateCommandMessage` |
| `GClass2884` | `EFT.NextObservedPlayer.SetExternalMagazineStateMessage` |
| `GClass2885` | `EFT.NextObservedPlayer.SetFinishReloadInternalMagWithOpenBoltMessage` |
| `GClass2830` | `EFT.NextObservedPlayer.SetHandsCommandMessage` |
| `GClass2831` | `EFT.NextObservedPlayer.SetLeftStanceCommandMessage` |
| `GClass2832` | `EFT.NextObservedPlayer.SetStationaryWeaponCommandMessage` |
| `GClass2833` | `EFT.NextObservedPlayer.SetUnderRoofStatusMessage` |
| `GClass2834` | `EFT.NextObservedPlayer.SetVoiceMuffledStatusMessage` |
| `GClass2835` | `EFT.NextObservedPlayer.ShotFirearmCommandMessage` |
| `GClass2836` | `EFT.NextObservedPlayer.SkillsParamsCommandMessage` |
| `GClass2837` | `EFT.NextObservedPlayer.SoundDamageInfoCommandMessage` |
| `GClass2886` | `EFT.NextObservedPlayer.StartReloadSingleBarrelCommandMessage` |
| `GClass2838` | `EFT.NextObservedPlayer.StartSearchContentMessage` |
| `GClass2839` | `EFT.NextObservedPlayer.StopSearchContentMessage` |
| `GClass2840` | `EFT.NextObservedPlayer.SwingGrenadeCommandMessage` |
| `GClass2887` | `EFT.NextObservedPlayer.SyncCylinderMagazineCommandMessage` |
| `GClass2909` | `EFT.NextObservedPlayer.SyncCylinderMagazineHandsOperation` |
| `GClass2888` | `EFT.NextObservedPlayer.SyncStationaryMagazineCommandMessage` |
| `GClass2842` | `EFT.NextObservedPlayer.TacticalModeToggleCommandMessage` |
| `GClass2843` | `EFT.NextObservedPlayer.TemperatureCommandMessage` |
| `GClass2841` | `EFT.NextObservedPlayer.ThrowGrenadeCommandMessage` |
| `GClass2844` | `EFT.NextObservedPlayer.ThrowPatronAsLootCommandMessage` |
| `GClass2979` | `EFT.NextObservedPlayer.TimeSpanStatistics` |
| `GClass2845` | `EFT.NextObservedPlayer.ToggleBipodCommandMessage` |
| `GClass2889` | `EFT.NextObservedPlayer.ToggleUnderbarrelCommandMessage` |
| `GClass2846` | `EFT.NextObservedPlayer.TripwireSoundInteractionCommandMessage` |
| `GClass2890` | `EFT.NextObservedPlayer.UnderbarrelRangeValueCommandMessage` |
| `GClass2891` | `EFT.NextObservedPlayer.UnderbarrelReloadCommandMessage` |
| `GClass2847` | `EFT.NextObservedPlayer.UnderbarrelShotCommandMessage` |
| `GClass2848` | `EFT.NextObservedPlayer.VaultingCommandMessage` |
| `GClass2849` | `EFT.NextObservedPlayer.VoIPCommandMessage` |
| `GClass2850` | `EFT.NextObservedPlayer.ZombieAlertUpdateCommandMessage` |
| `GClass2851` | `EFT.NextObservedPlayer.ZombieLostCommandMessage` |
| `GClass2892` | `EFT.NextObservedPlayer.ZombieMeleeAttackCommandMessage` |
| `GClass2168` | `EFT.NextObservedPlayer.ZombieObservedVaultingStates.ObservedZombieDoorInteractionState` |
| `GClass2169` | `EFT.NextObservedPlayer.ZombieObservedVaultingStates.ObservedZombieEndMoveState` |
| `GClass2170` | `EFT.NextObservedPlayer.ZombieObservedVaultingStates.ObservedZombieIdleState` |
| `GClass2171` | `EFT.NextObservedPlayer.ZombieObservedVaultingStates.ObservedZombieMoveState` |
| `GClass2172` | `EFT.NextObservedPlayer.ZombieObservedVaultingStates.ObservedZombieStartMoveState` |
| `GClass2173` | `EFT.NextObservedPlayer.ZombieObservedVaultingStates.ObservedZombieTurnState` |
| `GClass2852` | `EFT.NextObservedPlayer.ZombieSetTurnDeltaAngleMessage` |
| `GClass2150` | `EFT.NextObserver.ObservedClimbUpMovementState` |
| `GClass2147` | `EFT.NextObserver.ObservedVaultingFallDownMovementState` |
| `GClass2148` | `EFT.NextObserver.ObservedVaultingLandingState` |
| `GClass2149` | `EFT.NextObserver.ObservedVaultingMovementState` |
| `GClass2151` | `EFT.NextObserver.ObservedVaultMovementState` |
| `GClass1876` | `EFT.NonWaveGroupScenario` |
| `GClass3107` | `EFT.Notes.Note` |
| `NotesManagerClass` | `EFT.Notes.NotesManager` |
| `NotesManagerClass+GClass3109` | `EFT.Notes.NotesManager+NotesDescriptor` |
| `GClass2399` | `EFT.NPC.NPCEventWithActionManager` |
| `GClass2400` | `EFT.NPC.Reaction` |
| `GClass2086` | `EFT.ObjectInHands` |
| `PoolManagerClass` | `EFT.ObjectsFactory` |
| `PoolManagerClass+GClass725` | `EFT.ObjectsFactory+PoolLogger` |
| `PoolManagerClass+GStruct281` | `EFT.ObjectsFactory+PoolResourceInfo` |
| `PoolManagerClass+Class1448` | `EFT.ObjectsFactory+Pools` |
| `PoolManagerClass+Class1448+Class1449` | `EFT.ObjectsFactory+Pools+AssetPoolData` |
| `PoolManagerClass+GClass2280` | `EFT.ObjectsFactory+ResourceTypeComparer` |
| `ObjectsFactoryDataClass` | `EFT.ObjectsFactoryConfig` |
| `GClass2090` | `EFT.ObservedBeltMagazineInHands` |
| `GClass2108` | `EFT.ObservedPlayerLeftStanceController` |
| `AISearchControllerClass` | `EFT.ObservedPlayerSearchController` |
| `GClass1711` | `EFT.ObserverBridge` |
| `GStruct233` | `EFT.ObserverDebugInfo` |
| `GStruct231` | `EFT.ObserverMovementFrameInfo` |
| `GClass2788` | `EFT.ObstacleCollision.Controllers.CollisionCalculatorController` |
| `GClass2789` | `EFT.ObstacleCollision.Controllers.KinematicController` |
| `GClass2790` | `EFT.ObstacleCollision.Controllers.ObstacleCollisionController` |
| `GInterface313` | `EFT.ObstacleCollision.IKinematicModel` |
| `GClass2784` | `EFT.ObstacleCollision.KinematicModel` |
| `GClass2786` | `EFT.ObstacleCollision.Models.CollisionCalculatorModel` |
| `GInterface314` | `EFT.ObstacleCollision.Models.ICollisionCalculatorModel` |
| `GInterface315` | `EFT.ObstacleCollision.Models.IObstacleCollisionModel` |
| `GClass2787` | `EFT.ObstacleCollision.Models.ObstacleCollisionModel` |
| `GClass2785` | `EFT.ObstacleCollision.ObstacleCollisionFacade` |
| `GClass2270` | `EFT.OfflineStatisticManager` |
| `GStruct175` | `EFT.Oid` |
| `GDelegate70` | `EFT.OnPlayerDead` |
| `GDelegate71` | `EFT.OnPlayerDeadOrUnspawn` |
| `GClass1982` | `EFT.OperateStationaryWeaponOperationDescriptor` |
| `GException17` | `EFT.OperationCanceledByTimeoutException` |
| `GClass2079` | `EFT.OperationStatusExtensions` |
| `GClass1416` | `EFT.OtherPlayerProfile` |
| `GClass1416+GClass1417` | `EFT.OtherPlayerProfile+OtherPlayerInfo` |
| `GClass2213` | `EFT.OtherPlayerProfileDescriptor` |
| `GClass1951` | `EFT.OwnerItselfDescriptor` |
| `GStruct206` | `EFT.PacketAuxiliaryData` |
| `PedometerClass` | `EFT.Pedometer` |
| `GClass1817` | `EFT.PercentageBonus` |
| `PickupStateClass` | `EFT.PickUpState` |
| `GStruct221` | `EFT.PlantItemPacket` |
| `PlantStateClass` | `EFT.PlantPlayerState` |
| `GClass1976` | `EFT.PlantTripwireOperationDescriptor` |
| `GStruct173` | `EFT.PlatformSyncPacket` |
| `EFT.Player+Class1282` | `EFT.Player+BaseKnifeOperation` |
| `EFT.Player+PlayerMovementConstantsClass` | `EFT.Player+Constants` |
| `EFT.Player+GDelegate65` | `EFT.Player+DamageDelegate` |
| `EFT.Player+GDelegate66` | `EFT.Player+DeltaTimeDelegate` |
| `EFT.Player+EmptyHandsController+Class1259` | `EFT.Player+EmptyHandsController+DropBackpackOperation` |
| `EFT.Player+EmptyHandsController+Class1258` | `EFT.Player+EmptyHandsController+EmptyHandsOperation` |
| `EFT.Player+EmptyHandsController+Class1261` | `EFT.Player+EmptyHandsController+Idling` |
| `EFT.Player+EmptyHandsController+Class1262` | `EFT.Player+EmptyHandsController+Remove` |
| `EFT.Player+EmptyHandsController+Class1260` | `EFT.Player+EmptyHandsController+ServerDropBackpackOperation` |
| `EFT.Player+EmptyHandsController+Class1263` | `EFT.Player+EmptyHandsController+SpawnOperation` |
| `EFT.Player+FirearmController+Class1264` | `EFT.Player+FirearmController+AddModOperation` |
| `EFT.Player+FirearmController+GClass2029` | `EFT.Player+FirearmController+AutomaticFireOperation` |
| `EFT.Player+FirearmController+GClass2015` | `EFT.Player+FirearmController+BaseReloadOperation` |
| `EFT.Player+FirearmController+DefaultWeaponOperationClass` | `EFT.Player+FirearmController+BoltActionFireOperation` |
| `EFT.Player+FirearmController+GClass2007` | `EFT.Player+FirearmController+ChamberForReloading` |
| `EFT.Player+FirearmController+GClass2023` | `EFT.Player+FirearmController+DischargeAmmoFromCamoraOperation` |
| `EFT.Player+FirearmController+GClass2014` | `EFT.Player+FirearmController+DischargeAmmoFromUnderbarrelWeapon` |
| `EFT.Player+FirearmController+GClass2025` | `EFT.Player+FirearmController+DischargeMultiBarrelWeaponOperation` |
| `EFT.Player+FirearmController+GClass2024` | `EFT.Player+FirearmController+DischargeOperation` |
| `EFT.Player+FirearmController+GClass2026` | `EFT.Player+FirearmController+DropBackpackOperation` |
| `EFT.Player+FirearmController+GClass2047` | `EFT.Player+FirearmController+ExamineMalfunctionTypeOperation` |
| `EFT.Player+FirearmController+GClass2013` | `EFT.Player+FirearmController+FirearmOperation` |
| `EFT.Player+FirearmController+RevolverFireOperationClass` | `EFT.Player+FirearmController+FireCylinderMagOperation` |
| `EFT.Player+FirearmController+GenericFireOperationClass` | `EFT.Player+FirearmController+FireOperation` |
| `EFT.Player+FirearmController+GClass2028` | `EFT.Player+FirearmController+FireOperationBase` |
| `EFT.Player+FirearmController+FlareGunFireOperationClass` | `EFT.Player+FirearmController+FlareGunFire` |
| `EFT.Player+FirearmController+Class1269` | `EFT.Player+FirearmController+FoldStockOperation` |
| `EFT.Player+FirearmController+GClass2037` | `EFT.Player+FirearmController+Idling` |
| `EFT.Player+FirearmController+GClass2039` | `EFT.Player+FirearmController+InsertMagOperation` |
| `EFT.Player+FirearmController+GClass2005` | `EFT.Player+FirearmController+InsertMagResult` |
| `EFT.Player+FirearmController+GClass2034` | `EFT.Player+FirearmController+LauncherFire` |
| `EFT.Player+FirearmController+GClass2040` | `EFT.Player+FirearmController+LauncherIdling` |
| `EFT.Player+FirearmController+GClass2042` | `EFT.Player+FirearmController+LauncherReload` |
| `EFT.Player+FirearmController+GClass2041` | `EFT.Player+FirearmController+LauncherUtilityOperation` |
| `EFT.Player+FirearmController+GClass2043` | `EFT.Player+FirearmController+LoadAmmoToUnderbarrelWeapon` |
| `EFT.Player+FirearmController+GClass2044` | `EFT.Player+FirearmController+LoadCartridgeToCamora` |
| `EFT.Player+FirearmController+GClass2045` | `EFT.Player+FirearmController+LoadCartridgeToChamber` |
| `EFT.Player+FirearmController+GClass2046` | `EFT.Player+FirearmController+MalfunctionOperation` |
| `EFT.Player+FirearmController+IsOneOffFireOperationClass` | `EFT.Player+FirearmController+OneOffGunFire` |
| `EFT.Player+FirearmController+GClass2050` | `EFT.Player+FirearmController+PullOutMagOperation` |
| `EFT.Player+FirearmController+RechamberOperationClass` | `EFT.Player+FirearmController+RechamberOperation` |
| `EFT.Player+FirearmController+CylinderReloadOperationClass` | `EFT.Player+FirearmController+ReloadCylinderMagOperation` |
| `EFT.Player+FirearmController+GClass2016` | `EFT.Player+FirearmController+ReloadExternalMagOperation` |
| `EFT.Player+FirearmController+GClass2006` | `EFT.Player+FirearmController+ReloadExternalMagResult` |
| `EFT.Player+FirearmController+AmmoPackReloadOperationClass` | `EFT.Player+FirearmController+ReloadInternalMagBase` |
| `EFT.Player+FirearmController+AmmoPackReloadInternalOneChamberOperationClass` | `EFT.Player+FirearmController+ReloadInternalMagOperation` |
| `EFT.Player+FirearmController+AmmoPackReloadInternalBoltOpenOperationClass` | `EFT.Player+FirearmController+ReloadInternalMagWithOpenBoltOperation` |
| `EFT.Player+FirearmController+MutliBarrelReloadOperationClass` | `EFT.Player+FirearmController+ReloadMultiBarrelOperation` |
| `EFT.Player+FirearmController+ReloadMultiBarrelResultClass` | `EFT.Player+FirearmController+ReloadMultiBarrelResult` |
| `EFT.Player+FirearmController+SingleBarrelReloadOperationClass` | `EFT.Player+FirearmController+ReloadSingleBarrelOperation` |
| `EFT.Player+FirearmController+ReloadSingleBarrelResultClass` | `EFT.Player+FirearmController+ReloadSingleBarrelResult` |
| `EFT.Player+FirearmController+GClass2053` | `EFT.Player+FirearmController+Remove` |
| `EFT.Player+FirearmController+GClass2052` | `EFT.Player+FirearmController+RemoveModOperation` |
| `EFT.Player+FirearmController+GClass2010` | `EFT.Player+FirearmController+RepairFeedResult` |
| `EFT.Player+FirearmController+FixMalfunctionOperationClass` | `EFT.Player+FirearmController+RepairMalfunction` |
| `EFT.Player+FirearmController+GClass2036` | `EFT.Player+FirearmController+RocketLauncherFire` |
| `EFT.Player+FirearmController+GClass2054` | `EFT.Player+FirearmController+RollCylinderOperation` |
| `EFT.Player+FirearmController+GClass2027` | `EFT.Player+FirearmController+ServerDropBackpackOperation` |
| `EFT.Player+FirearmController+GClass2055` | `EFT.Player+FirearmController+SpawnOperation` |
| `EFT.Player+FirearmController+GClass2049` | `EFT.Player+FirearmController+StartMalfunction` |
| `EFT.Player+FirearmController+Class1270` | `EFT.Player+FirearmController+ToggleBipodOperation` |
| `EFT.Player+FirearmController+GClass2056` | `EFT.Player+FirearmController+ToggleLauncherOperation` |
| `EFT.Player+FirearmController+UnderbarrelManagerClass` | `EFT.Player+FirearmController+UnderbarrelContainer` |
| `EFT.Player+FirearmController+GClass2038` | `EFT.Player+FirearmController+UtilityOperation` |
| `EFT.Player+GClass2004` | `EFT.Player+Garbage` |
| `EFT.Player+GrenadeHandsController+Class1273` | `EFT.Player+GrenadeHandsController+DropBackpackOperation` |
| `EFT.Player+GrenadeHandsController+Class1272` | `EFT.Player+GrenadeHandsController+GrenadeHandsOperation` |
| `EFT.Player+GrenadeHandsController+Class1275` | `EFT.Player+GrenadeHandsController+HighThrowOperation` |
| `EFT.Player+GrenadeHandsController+Class1277` | `EFT.Player+GrenadeHandsController+Idling` |
| `EFT.Player+GrenadeHandsController+Class1276` | `EFT.Player+GrenadeHandsController+LowThrowOperation` |
| `EFT.Player+GrenadeHandsController+TripwireStateManagerClass` | `EFT.Player+GrenadeHandsController+PlantTripwireOperation` |
| `EFT.Player+GrenadeHandsController+Class1279` | `EFT.Player+GrenadeHandsController+Remove` |
| `EFT.Player+GrenadeHandsController+Class1274` | `EFT.Player+GrenadeHandsController+ServerDropBackpackOperation` |
| `EFT.Player+GrenadeHandsController+Class1280` | `EFT.Player+GrenadeHandsController+SpawnOperation` |
| `EFT.Player+Class1271` | `EFT.Player+GrenadeOperation` |
| `EFT.Player+GClass2060` | `EFT.Player+GrenadeThrowResult` |
| `EFT.Player+Interface10` | `EFT.Player+IBaseKnifeOperation` |
| `EFT.Player+Interface11` | `EFT.Player+IBaseUsableItemOperation` |
| `EFT.Player+GInterface193` | `EFT.Player+IGrenadeOperation` |
| `EFT.Player+Class1310` | `EFT.Player+InventoryOperation` |
| `EFT.Player+Interface9` | `EFT.Player+IQuickUsOperation` |
| `EFT.Player+GClass1537` | `EFT.Player+ItemComponentNotFoundError` |
| `EFT.Player+GClass1538` | `EFT.Player+ItemParentIsWrongError` |
| `EFT.Player+KnifeController+Class1284` | `EFT.Player+KnifeController+DropBackpackOperation` |
| `EFT.Player+KnifeController+Class1286` | `EFT.Player+KnifeController+Idling` |
| `EFT.Player+KnifeController+Class1287` | `EFT.Player+KnifeController+Kick` |
| `EFT.Player+KnifeController+Class1283` | `EFT.Player+KnifeController+KnifeOperation` |
| `EFT.Player+KnifeController+Class1288` | `EFT.Player+KnifeController+Remove` |
| `EFT.Player+KnifeController+Class1285` | `EFT.Player+KnifeController+ServerDropBackpackOperation` |
| `EFT.Player+KnifeController+Class1289` | `EFT.Player+KnifeController+SpawnOperation` |
| `EFT.Player+GStruct182` | `EFT.Player+KnifeRaycastHit` |
| `EFT.Player+MedsController+ObservedMedsControllerClass` | `EFT.Player+MedsController+MedsInHandsOperation` |
| `EFT.Player+BaseAnimationOperationClass` | `EFT.Player+ObjectInHandsOperation` |
| `EFT.Player+PlayerInventoryController+Class1202` | `EFT.Player+PlayerInventoryController+CheckMagazineProcess` |
| `EFT.Player+PlayerInventoryController+Class1204` | `EFT.Player+PlayerInventoryController+LoadMagazineProcess` |
| `EFT.Player+PlayerInventoryController+Class1207` | `EFT.Player+PlayerInventoryController+UnloadMagazineProcess` |
| `EFT.Player+GClass724` | `EFT.Player+PlayerLogger` |
| `EFT.Player+QuickGrenadeThrowHandsController+Class1281` | `EFT.Player+QuickGrenadeThrowHandsController+QuickGrenadeThrowOperation` |
| `EFT.Player+QuickKnifeKickController+Class1290` | `EFT.Player+QuickKnifeKickController+QuickKnifeKickOperation` |
| `EFT.Player+QuickUseItemController+GClass2057` | `EFT.Player+QuickUseItemController+BaseQuickUseOperation` |
| `EFT.Player+QuickUseItemController+GClass2058` | `EFT.Player+QuickUseItemController+QuickUseOperation` |
| `EFT.Player+Class1312` | `EFT.Player+RemoveFromHandsOperation` |
| `EFT.Player+Class1311` | `EFT.Player+SetInHandsOperation` |
| `EFT.Player+GClass2059` | `EFT.Player+SlotObserver` |
| `EFT.Player+UsableItemController+Class1292` | `EFT.Player+UsableItemController+BaseUsableItemOperation` |
| `EFT.Player+UsableItemController+Class1293` | `EFT.Player+UsableItemController+DropBackpackOperation` |
| `EFT.Player+UsableItemController+Class1299` | `EFT.Player+UsableItemController+Idling` |
| `EFT.Player+UsableItemController+Class1302` | `EFT.Player+UsableItemController+Remove` |
| `EFT.Player+UsableItemController+Class1294` | `EFT.Player+UsableItemController+ServerDropBackpackOperation` |
| `EFT.Player+UsableItemController+Class1305` | `EFT.Player+UsableItemController+SpawnOperation` |
| `EFT.Player+GClass1539` | `EFT.Player+WrongComponentStateError` |
| `GClass2096` | `EFT.PlayerAnimatorControllerEventsTable` |
| `EFT.PlayerBody+GInterface233` | `EFT.PlayerBody+ISlotModelPositionTuner` |
| `EFT.PlayerBody+EquipmentSlotClass` | `EFT.PlayerBody+SlotView` |
| `GClass1710` | `EFT.PlayerBridge` |
| `GClass1855` | `EFT.PlayerCustomizationFilter` |
| `GStruct276` | `EFT.PlayerDiedPacket` |
| `GClass2177` | `EFT.PlayerEffectsPauseController` |
| `GStruct230` | `EFT.PlayerEmitterCache` |
| `GClass2180` | `EFT.PlayerGroupExtension` |
| `ShotInfoClass` | `EFT.PlayerHitInfo` |
| `GClass927` | `EFT.PlayerIcons.PlayerIconCreator` |
| `Class1725` | `EFT.PlayerInputTranslator` |
| `GClass2235` | `EFT.PlayerSearchController` |
| `GClass2179` | `EFT.PlayerSideExtension` |
| `FootprintStruct` | `EFT.PlayerSpiritFootprint` |
| `LastPlayerStateClass` | `EFT.PlayerVisualRepresentation` |
| `GClass2214` | `EFT.PlayerVisualRepresentationDescriptor` |
| `GClass2078` | `EFT.PointOfViewExtension` |
| `GClass1926` | `EFT.PoisonComponentDescriptor` |
| `GClass1872` | `EFT.PolymorphicConverter` |
| `GClass1867` | `EFT.PolymorphicSerializer` |
| `EFT.PortableRangeFinderController+Class1297` | `EFT.PortableRangeFinderController+PortableRangeFinderDropBackpackOperation` |
| `EFT.PortableRangeFinderController+Class1300` | `EFT.PortableRangeFinderController+PortableRangeFinderIdling` |
| `EFT.PortableRangeFinderController+Class1303` | `EFT.PortableRangeFinderController+PortableRangeFinderRemove` |
| `EFT.PortableRangeFinderController+Class1306` | `EFT.PortableRangeFinderController+PortableRangeFinderSpawnOperation` |
| `EFT.PortableRangeFinderController+Class1295` | `EFT.PortableRangeFinderController+ServerPortableRangeFinderDropBackpackOperation` |
| `PlayerPrefHelperClass` | `EFT.PrefsUtils` |
| `GClass4026` | `EFT.Prestige.ConditionsConnectorsManagerPrestigeClientBackend` |
| `GClass4031` | `EFT.Prestige.ConditionsConnectorsManagerPrestigeClientGame` |
| `AchievementsBookClass` | `EFT.Prestige.PrestigeBook` |
| `AbstractPrestigeControllerClass` | `EFT.Prestige.PrestigeController` |
| `GClass4001` | `EFT.Prestige.PrestigeControllerClient` |
| `LocalPrestigeControllerClass` | `EFT.Prestige.PrestigeControllerClientBackend` |
| `ClientPlayerPrestigeControllerClass` | `EFT.Prestige.PrestigeControllerClientGame` |
| `GClass3994` | `EFT.Prestige.PrestigeLevel` |
| `GClass4050` | `EFT.Prestige.PrestigeReward` |
| `GClass4050+Struct817` | `EFT.Prestige.PrestigeReward+PrestigeRewardExtraData` |
| `GClass2660` | `EFT.Prestige.PrestigeStatusData` |
| `GClass2661` | `EFT.Prestige.PrestigeTemplate` |
| `GClass2661+GClass2662` | `EFT.Prestige.PrestigeTemplate+ItemsTransferConfig` |
| `GClass2661+GClass2662+GClass2665` | `EFT.Prestige.PrestigeTemplate+ItemsTransferConfig+AbilitiesConfig` |
| `GClass2661+GClass2662+GClass2663` | `EFT.Prestige.PrestigeTemplate+ItemsTransferConfig+TransferStashConfig` |
| `GClass2661+GClass2662+GClass2663+GClass2664` | `EFT.Prestige.PrestigeTemplate+ItemsTransferConfig+TransferStashConfig+ItemFilter` |
| `GClass2661+GClass2662+GClass2663+GClass2664+GClass1716` | `EFT.Prestige.PrestigeTemplate+ItemsTransferConfig+TransferStashConfig+ItemFilter+UnifiedHandbookEntities` |
| `GClass1791` | `EFT.PrestigeSettings` |
| `EFT.Profile+ProfileHealthClass` | `EFT.Profile+HealthInfo` |
| `EFT.Profile+ProfileHealthClass+ProfileBodyPartHealthClass` | `EFT.Profile+HealthInfo+BodyPartInfo` |
| `EFT.Profile+ProfileHealthClass+GClass2206` | `EFT.Profile+HealthInfo+EffectInfo` |
| `EFT.Profile+GClass2209` | `EFT.Profile+MoneyTransferLimitData` |
| `EFT.Profile+GClass2208` | `EFT.Profile+UnlockedInfo` |
| `VoipBanDataClass` | `EFT.ProfileBan` |
| `GClass2222` | `EFT.ProfileBanDescriptor` |
| `ProfileChangesPocoClass` | `EFT.ProfileChanges` |
| `CompleteProfileDescriptorClass` | `EFT.ProfileDescriptor` |
| `GClass2597` | `EFT.ProfileEditor.ProfileEditorItemsSearcher` |
| `InfoClass` | `EFT.ProfileInfo` |
| `ProfileInfoClass` | `EFT.ProfileInfoDescriptor` |
| `RagfairInfoClass` | `EFT.ProfileRagfairInfo` |
| `ProfileInfoSettingsClass` | `EFT.ProfileSettings` |
| `GClass2190` | `EFT.ProfileSettingsExtension` |
| `GClass2192` | `EFT.ProfileSlice` |
| `ProfileEftStatsClass` | `EFT.ProfileStatsDescriptor` |
| `ProfileStatsClass` | `EFT.ProfileStatsSeparatorDescriptor` |
| `ProfileStatusClass` | `EFT.ProfileStatus` |
| `GClass2187` | `EFT.ProfileStatusData` |
| `GClass2331` | `EFT.ProfileUpdatesHandler` |
| `GClass2232` | `EFT.ProfileVariablesStorage` |
| `ProneMoveStateClass` | `EFT.ProneMovePlayerState` |
| `ProneIdleStateClass` | `EFT.PronePlayerState` |
| `ProneAIIdleStateClass` | `EFT.PronePlayerStateAI` |
| `GClass2659` | `EFT.PseudoRandom.RandomXORShift` |
| `PushToTalkSettingsClass` | `EFT.PushToTalkSettings` |
| `GClass1991` | `EFT.QuestAcceptDescriptor` |
| `GClass1990` | `EFT.QuestActionDescriptor` |
| `GStruct274` | `EFT.QuestCondition` |
| `GClass1992` | `EFT.QuestFinishDescriptor` |
| `GClass1993` | `EFT.QuestHandoverDescriptor` |
| `GStruct286` | `EFT.QuestionsPageData` |
| `GClass2367` | `EFT.QuestionTemplate` |
| `GClass1823` | `EFT.QuestMoneyRewardBonus` |
| `LocalPlayerAchievementControllerClass` | `EFT.Quests.AchievementsControllerClientBackend` |
| `AchievementControllerClass` | `EFT.Quests.AchievementsControllerClientGame` |
| `GClass3991` | `EFT.Quests.AchievementsGlobalProgressStorage` |
| `GClass4057` | `EFT.Quests.AchievementTemplatesCollection` |
| `GClass3992` | `EFT.Quests.BackendCounter` |
| `GClass4017` | `EFT.Quests.CompareMethodExtensions` |
| `GClass4036` | `EFT.Quests.CompleteConditionChecker` |
| `AbstractQuestClass` | `EFT.Quests.Conditional` |
| `GClass1634` | `EFT.Quests.ConditionalBook` |
| `GClass3999` | `EFT.Quests.ConditionalController` |
| `GClass3998` | `EFT.Quests.ConditionalExtensions` |
| `GClass4013` | `EFT.Quests.ConditionalHelper` |
| `GClass4055` | `EFT.Quests.ConditionalTemplatesCollection` |
| `GClass4014` | `EFT.Quests.ConditionalTemplatesStorage` |
| `GClass4014+GStruct457` | `EFT.Quests.ConditionalTemplatesStorage+FreeChangesCount` |
| `GStruct458` | `EFT.Quests.ConditionCheck` |
| `GClass1631` | `EFT.Quests.ConditionCollection` |
| `GClass4018` | `EFT.Quests.ConditionComparer` |
| `GClass4037` | `EFT.Quests.ConditionEquipmentProgressChecker` |
| `GClass4038` | `EFT.Quests.ConditionExitNameProgressChecker` |
| `GClass4039` | `EFT.Quests.ConditionExitStatusProgressChecker` |
| `GClass4051` | `EFT.Quests.ConditionExtensions` |
| `GClass4040` | `EFT.Quests.ConditionHealthBuffProgressChecker` |
| `GClass4041` | `EFT.Quests.ConditionHealthEffectProgressChecker` |
| `GClass4042` | `EFT.Quests.ConditionHitProgressChecker` |
| `GClass4043` | `EFT.Quests.ConditionInZoneProgressChecker` |
| `GClass4044` | `EFT.Quests.ConditionLaunchFlareProgressChecker` |
| `GClass4045` | `EFT.Quests.ConditionLocationProgressChecker` |
| `GClass4048` | `EFT.Quests.ConditionProgressCheckersFactory` |
| `QuestControllerAbstractClass` | `EFT.Quests.ConditionsConnectorsManager` |
| `GClass4027` | `EFT.Quests.ConditionsConnectorsManagerAchievementsClientBackend` |
| `GClass4032` | `EFT.Quests.ConditionsConnectorsManagerAchievementsClientGame` |
| `GClass4024` | `EFT.Quests.ConditionsConnectorsManagerClient` |
| `GClass4025` | `EFT.Quests.ConditionsConnectorsManagerClientBackend` |
| `GClass4030` | `EFT.Quests.ConditionsConnectorsManagerClientGame` |
| `GClass4028` | `EFT.Quests.ConditionsConnectorsManagerHideoutCustomizationOffersClientBackend` |
| `GClass4029` | `EFT.Quests.ConditionsConnectorsManagerQuestClientBackend` |
| `GClass4033` | `EFT.Quests.ConditionsConnectorsManagerQuestClientGame` |
| `GClass1871` | `EFT.Quests.ConditionSerializer` |
| `GClass4019` | `EFT.Quests.ConditionTimeComparer` |
| `GClass4046` | `EFT.Quests.ConditionTransitionLocationProgressChecker` |
| `GClass4047` | `EFT.Quests.ConditionUseItemProgressChecker` |
| `GClass3996` | `EFT.Quests.DailyQuest` |
| `GClass1637` | `EFT.Quests.HideoutCustomizationOffersBook` |
| `GClass4015` | `EFT.Quests.HitConditionCheck` |
| `GInterface517` | `EFT.Quests.ICanResetConditionProgress` |
| `GInterface515` | `EFT.Quests.ICondition` |
| `GInterface518` | `EFT.Quests.IConditionalController` |
| `GInterface516` | `EFT.Quests.IConditionHandoverItem` |
| `GClass4016` | `EFT.Quests.LogicalCompareCollectionExtensions` |
| `QuestClass` | `EFT.Quests.Quest` |
| `QuestBookClass` | `EFT.Quests.QuestBook` |
| `GStruct460` | `EFT.Quests.QuestChangeCost` |
| `GStruct459` | `EFT.Quests.QuestChangeRequirement` |
| `GClass4022` | `EFT.Quests.QuestConditionsListSerialized` |
| `AbstractQuestControllerClass` | `EFT.Quests.QuestController` |
| `GClass4005` | `EFT.Quests.QuestControllerClient` |
| `LocalQuestControllerClass` | `EFT.Quests.QuestControllerClientBackend` |
| `GClass4008` | `EFT.Quests.QuestControllerClientGame` |
| `GClass4007` | `EFT.Quests.QuestControllerClientLocalGame` |
| `QuestDataClass` | `EFT.Quests.QuestDataClass` |
| `QuestRewardDataClass` | `EFT.Quests.QuestReward` |
| `RawQuestClass` | `EFT.Quests.QuestTemplate` |
| `DailyQuestClass` | `EFT.Quests.RepeatableQuestsRange` |
| `GClass4054` | `EFT.Quests.RepeatableQuestTemplate` |
| `GClass4056` | `EFT.Quests.RepeatableQuestTemplatesCollection` |
| `GClass4059` | `EFT.Quests.RepeatableQuestUpdater` |
| `TaskConditionCounterClass` | `EFT.Quests.TaskConditionCounter` |
| `GClass4021` | `EFT.Quests.WeaponAssemblyParameter` |
| `GStruct246` | `EFT.QuickReloadMag` |
| `EFT.RadioTransmitterController+Class1298` | `EFT.RadioTransmitterController+RadioTransmitterDropBackpack` |
| `EFT.RadioTransmitterController+Class1301` | `EFT.RadioTransmitterController+RadioTransmitterIdling` |
| `EFT.RadioTransmitterController+Class1304` | `EFT.RadioTransmitterController+RadioTransmitterRemove` |
| `EFT.RadioTransmitterController+Class1307` | `EFT.RadioTransmitterController+RadioTransmitterSpawn` |
| `EFT.RadioTransmitterController+Class1296` | `EFT.RadioTransmitterController+ServerRadioTransmitterDropBackpackOperation` |
| `GStruct180` | `EFT.RadioTransmitterData` |
| `RadioTransmitterHandlerClass` | `EFT.RadioTransmitterHandler` |
| `GStruct266` | `EFT.RadioTransmitterPacket` |
| `GClass2329` | `EFT.RagfairAbstractOperation` |
| `GClass1826` | `EFT.RagFairCommissionBonus` |
| `GClass2330` | `EFT.RagfairGetOffersOperation` |
| `GClass1794` | `EFT.RagfairItemRestrictions` |
| `GClass2357` | `EFT.RagfairOfferSerializer` |
| `GClass2356` | `EFT.RagfairRequirementSerializer` |
| `RagfairSettingsClass` | `EFT.RagfairSettings` |
| `RagfairSettingsClass+GClass1793` | `EFT.RagfairSettings+OfferCount` |
| `GClass1836` | `EFT.ReceiveItemBonus` |
| `GClass1943` | `EFT.RecodableComponentDescriptor` |
| `GClass1818` | `EFT.RegenerationBonus` |
| `GStruct247` | `EFT.ReloadBarrels` |
| `GStruct245` | `EFT.ReloadMagPacket` |
| `GStruct250` | `EFT.ReloadWithAmmo` |
| `GClass1977` | `EFT.RemoveOperationDescriptor` |
| `GClass2381` | `EFT.Rendering.Clouds.AmbientBuffer` |
| `GClass2383` | `EFT.Rendering.Clouds.BuiltinSkyParameters` |
| `GStruct291` | `EFT.Rendering.Clouds.BuiltinSunCookieParameters` |
| `Class1821` | `EFT.Rendering.Clouds.CloudLayerRenderer` |
| `Class1821+Class1817` | `EFT.Rendering.Clouds.CloudLayerRenderer+PrecomputationCache` |
| `Class1821+Class1817+Class1818` | `EFT.Rendering.Clouds.CloudLayerRenderer+PrecomputationCache+RefCountedData` |
| `Class1821+Class1819` | `EFT.Rendering.Clouds.CloudLayerRenderer+PrecomputationData` |
| `Class1821+Class1819+Struct577` | `EFT.Rendering.Clouds.CloudLayerRenderer+PrecomputationData+TextureCache` |
| `Class1821+Struct576` | `EFT.Rendering.Clouds.CloudLayerRenderer+UpdateGuard` |
| `GStruct289` | `EFT.Rendering.Clouds.CloudQualityPreset` |
| `GStruct290` | `EFT.Rendering.Clouds.CloudRemapRecord` |
| `GClass2382` | `EFT.Rendering.Clouds.CloudRemapRecordExtensions` |
| `GClass2384` | `EFT.Rendering.Clouds.CloudRenderer` |
| `GStruct292` | `EFT.Rendering.Clouds.CookieParameters` |
| `Class1820` | `EFT.Rendering.Clouds.HDShaderIDs` |
| `GClass2385` | `EFT.Rendering.Clouds.RenderingUtils` |
| `GClass2385+GClass2386` | `EFT.Rendering.Clouds.RenderingUtils+ObjectPool` |
| `GClass1932` | `EFT.RepairableComponentDescriptor` |
| `GClass1832` | `EFT.RepairArmorBonus` |
| `GClass1942` | `EFT.RepairEnhancementComponentDescriptor` |
| `IRepairInteractions` | `EFT.Repairing.IRepairController` |
| `IRepairer` | `EFT.Repairing.IRepairer` |
| `RepairControllerClass` | `EFT.Repairing.RepairController` |
| `RepairControllerClass+Class2073` | `EFT.Repairing.RepairController+RepairParameters` |
| `GClass1941` | `EFT.RepairKitComponentDescriptor` |
| `GClass1831` | `EFT.RepairWeaponBonus` |
| `GClass2318` | `EFT.RequirementsConverter` |
| `GClass1927` | `EFT.ResourceItemComponentDescriptor` |
| `GClass2281` | `EFT.ResourceKeyExtensions` |
| `RocketLauncherConeBlastClass` | `EFT.RocketLauncher.BackblastModel` |
| `GClass3977` | `EFT.RocketLauncher.Explosion.ArmingModel` |
| `GClass3985` | `EFT.RocketLauncher.Explosion.BackBlastSettings` |
| `GClass3978` | `EFT.RocketLauncher.Explosion.CollisionsHandlerModel` |
| `GStruct455` | `EFT.RocketLauncher.Explosion.ComputableUnit` |
| `GClass3986` | `EFT.RocketLauncher.Explosion.ComputableUnitSettings` |
| `GClass3980` | `EFT.RocketLauncher.Explosion.ExplosionModel` |
| `GClass3983` | `EFT.RocketLauncher.Explosion.ExplosionPropagationModel` |
| `GClass3987` | `EFT.RocketLauncher.Explosion.ExplosionSettings` |
| `EFT.RocketLauncher.Explosion.ExplosionTester+Class3535` | `EFT.RocketLauncher.Explosion.ExplosionTester+VisualSettings` |
| `GInterface508` | `EFT.RocketLauncher.Explosion.IBackBlastSettings` |
| `GInterface505` | `EFT.RocketLauncher.Explosion.ICollisionsHandler` |
| `GInterface509` | `EFT.RocketLauncher.Explosion.IComputableUnitSettings` |
| `GInterface506` | `EFT.RocketLauncher.Explosion.IExplosionModel` |
| `GInterface507` | `EFT.RocketLauncher.Explosion.IExplosionPropagationModel` |
| `GInterface510` | `EFT.RocketLauncher.Explosion.IExplosionSettings` |
| `GInterface511` | `EFT.RocketLauncher.Explosion.IPhysicalSettings` |
| `GInterface512` | `EFT.RocketLauncher.Explosion.IVisualSettings` |
| `GClass3979` | `EFT.RocketLauncher.Explosion.OptimizeComputableUnitComparer` |
| `GStruct456` | `EFT.RocketLauncher.Explosion.OptimizedVector3` |
| `GClass3981` | `EFT.RocketLauncher.Explosion.OptimizeVectorComparer` |
| `GClass3982` | `EFT.RocketLauncher.Explosion.ParticleRenderer` |
| `GClass3982+Struct1283` | `EFT.RocketLauncher.Explosion.ParticleRenderer+Particle` |
| `GClass3988` | `EFT.RocketLauncher.Explosion.PhysicalSettings` |
| `GClass3984` | `EFT.RocketLauncher.Explosion.RocketSoundPlayer` |
| `GClass3989` | `EFT.RocketLauncher.Explosion.VisualSettings` |
| `GStruct248` | `EFT.RollCylinderPacket` |
| `RollStateClass` | `EFT.RollPlayerState` |
| `GClass1687` | `EFT.RpcGameMatchingMessage` |
| `GClass1690` | `EFT.RpcGameStartedMessage` |
| `GClass1688` | `EFT.RpcGameStartingMessage` |
| `GClass1689` | `EFT.RpcGameStartingWithTeleportMessage` |
| `GClass1691` | `EFT.RpcGameStoppedMessage` |
| `GClass1702` | `EFT.RpcReceiveProfileMessage` |
| `GClass1703` | `EFT.RpcSendArtilleryShellingDataMessage` |
| `GClass1693` | `EFT.RpcSendBinaryDataMessage` |
| `GClass1699` | `EFT.RpcSendClientRadioTransmitterDataMessage` |
| `GClass1701` | `EFT.RpcSendCompletedAchievementsDataMessage` |
| `GClass1698` | `EFT.RpcSendLeftHandDataMessage` |
| `GClass1698+GStruct160` | `EFT.RpcSendLeftHandDataMessage+LeftHandData` |
| `GClass1694` | `EFT.RpcSoftStopNotificationMessage` |
| `GClass1695` | `EFT.RpcStartDisconnectionProcedureMessage` |
| `GClass1697` | `EFT.RpcSuccessAirdropFlareEventMessage` |
| `GClass1692` | `EFT.RpcSyncGameTimeMessage` |
| `GClass1700` | `EFT.RpcSyncLighthouseTraderZoneDataMessage` |
| `GClass1696` | `EFT.RpcVoipAbuseNotificationMessage` |
| `RunddansControllerAbstractClass` | `EFT.RunddansController` |
| `GClass1825` | `EFT.ScavCooldownTimerBonus` |
| `ServerScenesDataStruct` | `EFT.ScenePresetLoadConfig` |
| `SceneResourceKeyAbstractClass` | `EFT.Scenes` |
| `FirearmScopeStateStruct` | `EFT.ScopeState` |
| `GClass2234` | `EFT.SearchController` |
| `HideoutSeedDataStruct` | `EFT.Seed` |
| `GStruct260` | `EFT.SelfPlayerInfo` |
| `GClass1803` | `EFT.SerializationContext` |
| `GClass2293` | `EFT.ServerHardwareDescription` |
| `GClass2269` | `EFT.ServerStatisticManager` |
| `RaidEndDescriptorClass` | `EFT.SessionResult` |
| `PostRaidHealthScreenClass` | `EFT.SessionResultShowOperation` |
| `GClass2233` | `EFT.SessionStatistics` |
| `GClass1978` | `EFT.SetDialogProgressOperationDescriptor` |
| `GStruct244` | `EFT.SetLeftStancePacket` |
| `GClass1077` | `EFT.Settings.Control.ControlSettingsController` |
| `ControlSettingsClass` | `EFT.Settings.Control.ControlSettingsGroup` |
| `GClass2398` | `EFT.Settings.Control.ControlSettingsVersions` |
| `GClass2398+Class1844` | `EFT.Settings.Control.ControlSettingsVersions+Version1` |
| `GClass2398+Class1846` | `EFT.Settings.Control.ControlSettingsVersions+Version2` |
| `GClass2398+Class1848` | `EFT.Settings.Control.ControlSettingsVersions+Version3` |
| `GClass2398+Class1849` | `EFT.Settings.Control.ControlSettingsVersions+Version4` |
| `GClass2387` | `EFT.Settings.ControlPressTypeOverride` |
| `GClass1076` | `EFT.Settings.Game.GameSettingsController` |
| `GClass1085` | `EFT.Settings.Game.GameSettingsGroup` |
| `GClass2397` | `EFT.Settings.Game.GameSettingsVersions` |
| `GClass2397+Class1842` | `EFT.Settings.Game.GameSettingsVersions+Version1` |
| `Class1824` | `EFT.Settings.Graphics.EFTAspectHelper` |
| `Class1826` | `EFT.Settings.Graphics.EFTDisplayHelper` |
| `Class1826+Class1827` | `EFT.Settings.Graphics.EFTDisplayHelper+Api` |
| `Class1826+Class1827+Struct584` | `EFT.Settings.Graphics.EFTDisplayHelper+Api+RECT` |
| `GStruct293` | `EFT.Settings.Graphics.EftDisplaySettings` |
| `EFT.Settings.Graphics.EftResolution+Class1831` | `EFT.Settings.Graphics.EftResolution+ComplexComparer` |
| `EFT.Settings.Graphics.EftResolution+Class1830` | `EFT.Settings.Graphics.EftResolution+DefaultComparer` |
| `GClass2392` | `EFT.Settings.Graphics.FullScreenModeConverter` |
| `GClass2393` | `EFT.Settings.Graphics.FullScreenModeJsonConverter` |
| `GClass2394` | `EFT.Settings.Graphics.GraphicsPreset` |
| `GClass1074` | `EFT.Settings.Graphics.GraphicsSettingsCameraController` |
| `GameGraphicsClass` | `EFT.Settings.Graphics.GraphicsSettingsController` |
| `GraphicsSettingsClass` | `EFT.Settings.Graphics.GraphicsSettingsGroup` |
| `GClass2395` | `EFT.Settings.Graphics.GraphicsSettingsVersions` |
| `GClass2395+Class1836` | `EFT.Settings.Graphics.GraphicsSettingsVersions+ResetGraphics` |
| `GClass2395+Class1837` | `EFT.Settings.Graphics.GraphicsSettingsVersions+ResetSSR` |
| `GClass2395+Class1838` | `EFT.Settings.Graphics.GraphicsSettingsVersions+Version1` |
| `GClass2395+Class1839` | `EFT.Settings.Graphics.GraphicsSettingsVersions+Version2` |
| `GClass2395+Class1840` | `EFT.Settings.Graphics.GraphicsSettingsVersions+Version3` |
| `GStruct294` | `EFT.Settings.Graphics.QualityLevelPreset` |
| `GClass2396` | `EFT.Settings.Graphics.StoredDisplaySettings` |
| `GClass1073` | `EFT.Settings.PostFx.PostFxSettingsController` |
| `GClass2391` | `EFT.Settings.PostFx.PostFxSettingsFactory` |
| `GClass1083` | `EFT.Settings.PostFx.PostFxSettingsGroup` |
| `SharedGameSettingsClass` | `EFT.Settings.SettingsManager` |
| `SharedGameSettingsClass+GClass2390` | `EFT.Settings.SettingsManager+SettingsWithController` |
| `SharedGameSettingsClass+GClass2389` | `EFT.Settings.SettingsManager+SettingsWithProvider` |
| `GClass1072` | `EFT.Settings.Sound.SoundSettingsController` |
| `SoundSettingsControllerClass` | `EFT.Settings.Sound.SoundSettingsGroup` |
| `GClass2361` | `EFT.SettingsConverter` |
| `GClass1979` | `EFT.SetupItemOperationDescriptor` |
| `GClass1980` | `EFT.SetVariableOperationDescriptor` |
| `GClass1875` | `EFT.ShellingZoneBotData` |
| `GClass1916` | `EFT.ShellTemplateDescriptor` |
| `GDelegate64` | `EFT.ShotDelegate` |
| `GClass2082` | `EFT.ShotExtension` |
| `GClass2081` | `EFT.ShottypeExtension` |
| `GStruct275` | `EFT.ShowStatNotificationPacket` |
| `GClass1933` | `EFT.SightComponentDescriptor` |
| `GStruct242` | `EFT.SightModeStatus` |
| `GStruct241` | `EFT.SightsModePacket` |
| `GClass1884` | `EFT.SimpleBotSpawnDelayModel` |
| `GClass2369` | `EFT.SingleOptionAnswer` |
| `GClass2373` | `EFT.SingleOptionQuestion` |
| `GClass1680` | `EFT.SizeOf` |
| `SkillClass` | `EFT.Skill` |
| `GClass1827` | `EFT.SkillGroupLevelingBoostBonus` |
| `GClass1828` | `EFT.SkillLevelingBoostBonus` |
| `EFT.SkillManager+GClass2257` | `EFT.SkillManager+BooleanBuff` |
| `EFT.SkillManager+SkillBuffAbstractClass` | `EFT.SkillManager+Buff` |
| `EFT.SkillManager+GClass2258` | `EFT.SkillManager+Buff` |
| `EFT.SkillManager+SkillBuffClass` | `EFT.SkillManager+FloatBuff` |
| `EFT.SkillManager+GClass2255` | `EFT.SkillManager+GainBuff` |
| `EFT.SkillManager+GClass2256` | `EFT.SkillManager+LossBuff` |
| `EFT.SkillManager+GStruct279` | `EFT.SkillManager+MovementParams` |
| `EFT.SkillManager+GClass2254` | `EFT.SkillManager+ProbabilityBuff` |
| `EFT.SkillManager+GClass2251` | `EFT.SkillManager+ShotParams` |
| `EFT.SkillManager+SkillActionClass` | `EFT.SkillManager+SkillAction` |
| `EFT.SkillManager+GClass2260` | `EFT.SkillManager+SkillAction` |
| `EFT.SkillManager+GClass2261` | `EFT.SkillManager+SkillDependency` |
| `EFT.SkillManager+GClass2250` | `EFT.SkillManager+WeaponBuffsInfo` |
| `SkillsDescriptorClass` | `EFT.SkillsDescriptor` |
| `SkillsDescriptorClass+GClass2226` | `EFT.SkillsDescriptor+MasteringInfoDescriptor` |
| `SkillsDescriptorClass+GClass2225` | `EFT.SkillsDescriptor+SkillInfoDescriptor` |
| `GClass1915` | `EFT.SlotDescriptor` |
| `GClass1952` | `EFT.SlotItemAddressDescriptor` |
| `GClass2070` | `EFT.SnapshotExtrapolator` |
| `SocialNetworkClass` | `EFT.SocialNetwork` |
| `GClass1882` | `EFT.SpawnDelayModel` |
| `GClass1885` | `EFT.SpawnDelaysService` |
| `GClass1888` | `EFT.SpawnedWave` |
| `GClass2196` | `EFT.SpawnInfo` |
| `GClass1877` | `EFT.SpawnPointInfo` |
| `GClass1878` | `EFT.SpawnPointSerializer` |
| `LocalGameLoggerClass` | `EFT.SpawnsLogger` |
| `LocalGameLoggerClass+GClass1886` | `EFT.SpawnsLogger+PlayerSpawnData` |
| `LocalGameLoggerClass+GClass1887` | `EFT.SpawnsLogger+SpawnData` |
| `BotWaveDataClass` | `EFT.SpawnWave` |
| `GClass1815` | `EFT.SpecialBonus` |
| `GClass2175` | `EFT.SpeedLimiter` |
| `GClass2176` | `EFT.SpeedLimiterWithCooldown` |
| `EFT.SpeedTree.TreeWind+Settings+Class2093` | `EFT.SpeedTree.TreeWind+Settings+SettingsEqualityComparer` |
| `SplitDescriptorClass` | `EFT.SplitOperationDescriptor` |
| `SplitDescriptorClass+Class1371` | `EFT.SplitOperationDescriptor+SplitIdGenerator` |
| `GClass2091` | `EFT.SpringMagazineVisual` |
| `SprintStateClass` | `EFT.SprintPlayerState` |
| `TransitionStateClass` | `EFT.SprintToIdleTransitionState` |
| `GClass2101` | `EFT.SprintVaultSoundEventConsumer` |
| `GClass1920` | `EFT.StackSlotDescriptor` |
| `GClass1953` | `EFT.StackSlotItemAddressDescriptor` |
| `GClass2337` | `EFT.StashChangesResponse` |
| `GClass1816` | `EFT.StashSizeBonus` |
| `StationaryStateClass` | `EFT.StationaryPlayerState` |
| `StationaryPacketStruct` | `EFT.StationaryWeaponPacket` |
| `GStruct183` | `EFT.StopSearchContentPacket` |
| `GInterface280` | `EFT.StreamingAnimatorSystem.IStreamingAnimator` |
| `GClass1673` | `EFT.StringExtensions` |
| `GStruct265` | `EFT.StringNotificationPacket` |
| `GClass2314` | `EFT.Subtitles` |
| `GClass2314+GClass2315` | `EFT.Subtitles+ActiveCCLine` |
| `GClass1833` | `EFT.SumBonus` |
| `GClass2365` | `EFT.SurveyData` |
| `GClass2366` | `EFT.SurveyTemplate` |
| `GClass1983` | `EFT.SwapOperationDescriptor` |
| `GStruct263` | `EFT.SwitchRenderersPacket` |
| `TripwireLogicClass` | `EFT.SynchronizableObjects.BaseTripwire` |
| `SynchronizableObjectLogicProcessorClass` | `EFT.SynchronizableObjects.ClientSynchronizableObjectLogicProcessor` |
| `GInterface278` | `EFT.SynchronizableObjects.ISyncEnvironment` |
| `ISynchronizableObject` | `EFT.SynchronizableObjects.ISynchronizableLogic` |
| `SyncObjectProcessorClass` | `EFT.SynchronizableObjects.SynchronizableObjectLogicProcessor` |
| `GClass2649` | `EFT.SynchronizableObjects.TripwireManager` |
| `Class1467` | `EFT.SystemInfoExtension` |
| `GStruct239` | `EFT.TacticalComboStatus` |
| `GClass1939` | `EFT.TagComponentDescriptor` |
| `TagDescriptorClass` | `EFT.TagOperationDescriptor` |
| `EFT.TarkovApplication+GClass2301` | `EFT.TarkovApplication+HideoutController` |
| `EFT.TarkovApplication+GClass2302` | `EFT.TarkovApplication+NarrateController` |
| `GClass2227` | `EFT.TaskConditionCounterDescriptor` |
| `GClass2371` | `EFT.TextAnswer` |
| `GClass1850` | `EFT.TextBonus` |
| `GClass2375` | `EFT.TextQuestion` |
| `GClass1897` | `EFT.Thermobaric` |
| `GClass1897+GStruct176` | `EFT.Thermobaric+Cell` |
| `GClass1897+Struct302` | `EFT.Thermobaric+ThermobaricData` |
| `EFT.ThermobaricRenderer+GStruct285` | `EFT.ThermobaricRenderer+ParticleData` |
| `GClass1856` | `EFT.ThirdPersonCustomizationFilter` |
| `GClass3854` | `EFT.ThousandsSeparatorExtensions` |
| `ThrowDescriptorClass` | `EFT.ThrowOperationDescriptor` |
| `GClass1894` | `EFT.TimeFlowTypeExtensions` |
| `GClass1674` | `EFT.TimeSpanExtensions` |
| `GClass1934` | `EFT.TogglableComponentDescriptor` |
| `GClass1986` | `EFT.ToggleOperationDescriptor` |
| `GStruct238` | `EFT.ToggleTacticalComboPacket` |
| `GClass3598` | `EFT.Tools.AnimationDebugging.EditorAnimatorHelperUtility` |
| `GClass3599` | `EFT.Tools.AnimatorTools.AnimatorRebindUtility` |
| `GClass3599+Struct951` | `EFT.Tools.AnimatorTools.AnimatorRebindUtility+AnimatorParamData` |
| `GClass2338` | `EFT.TradeOperationResult` |
| `GClass2338+GClass2339` | `EFT.TradeOperationResult+Sum` |
| `TraderInfoClass` | `EFT.TraderInfoDescriptor` |
| `GStruct264` | `EFT.TraderInfoPacket` |
| `GClass2274` | `EFT.TraderServiceAffordabilityChecker` |
| `TraderServicesClass` | `EFT.TraderServiceAvailabilityData` |
| `GClass2272` | `EFT.TraderServicesHandler` |
| `GClass2273` | `EFT.TraderServicesItemPaymaster` |
| `TraderAssortmentControllerClass` | `EFT.Trading.Assortment` |
| `GClass2570` | `EFT.Trading.FenceTrader` |
| `ITraderInteractions` | `EFT.Trading.ITradingSession` |
| `GClass2573` | `EFT.Trading.LightkeeperDialogReaction` |
| `FleaTaxCalculatorAbstractClass` | `EFT.Trading.PriceCalculator` |
| `GClass2571` | `EFT.Trading.Requisite` |
| `TraderClass` | `EFT.Trading.Trader` |
| `TraderClass+GStruct300` | `EFT.Trading.Trader+ItemPrice` |
| `GClass2326` | `EFT.TradingAbstractOperation` |
| `GClass2327` | `EFT.TradingGetAssortmentOperation` |
| `GClass2328` | `EFT.TradingGetMarketPricesOperation` |
| `GClass2068` | `EFT.TradingLocales` |
| `EFT.TrafficCollectScenario+Struct303` | `EFT.TrafficCollectScenario+Data` |
| `EFT.TrafficCollectScenario+Class394` | `EFT.TrafficCollectScenario+Logger` |
| `GClass1898` | `EFT.TrafficData` |
| `GStruct177` | `EFT.TrafficState` |
| `TransferItemsControllerAbstractClass` | `EFT.TransferItemsController` |
| `GClass1987` | `EFT.TransferOperationDescriptor` |
| `TransitDataClass` | `EFT.Transit` |
| `TransitControllerAbstractClass` | `EFT.TransitController` |
| `TransitionStatusStruct` | `EFT.TransitionStatus` |
| `GClass1901` | `EFT.TransitTransferItemsController` |
| `GInterface268` | `EFT.Tripwire.ISoundInteractionController` |
| `GInterface269` | `EFT.Tripwire.ITripwireSoundController` |
| `GClass2580` | `EFT.Tripwire.PlayerTripwireInteractionSoundController` |
| `GClass2581` | `EFT.Tripwire.TripwireSoundController` |
| `GStruct229` | `EFT.TripwireSoundInteractionPacket` |
| `GClass2379` | `EFT.TweenExtensions` |
| `GStruct446` | `EFT.UI.AcceptQuestChangeArgs` |
| `GClass3756` | `EFT.UI.ArenaEftTransferContextInteractions` |
| `GClass3820` | `EFT.UI.AsyncViewList` |
| `ActionsReturnClass` | `EFT.UI.AvailableInteractionState` |
| `GClass3752` | `EFT.UI.BaseContextInteractions` |
| `EFT.UI.BaseDropDownBox+Struct1160` | `EFT.UI.BaseDropDownBox+DropDownItem` |
| `GClass3775` | `EFT.UI.BaseEmptyContextInteractions` |
| `GClass3757` | `EFT.UI.BaseInventoryItemContextInteractions` |
| `ContextInteractionsAbstractClass` | `EFT.UI.BaseItemContextInteractions` |
| `GClass3833` | `EFT.UI.BaseWindowContext` |
| `GClass3821` | `EFT.UI.BindableAsyncViewList` |
| `GClass3824` | `EFT.UI.BindableOrderedViewList` |
| `GClass3818` | `EFT.UI.BindableScrollableListView` |
| `GClass3823` | `EFT.UI.BindableViewList` |
| `GClass3838` | `EFT.UI.Builds.EditBuildNameWindowContext` |
| `GClass3953` | `EFT.UI.Builds.EquipmentBuild` |
| `EquipmentBuildsStorageClass` | `EFT.UI.Builds.EquipmentBuildsStorage` |
| `EFT.UI.Builds.MagPresetsListView+Class2831` | `EFT.UI.Builds.MagPresetsListView+MagPresetWrapper` |
| `WeaponBuildClass` | `EFT.UI.Builds.WeaponBuild` |
| `WeaponBuildsStorageClass` | `EFT.UI.Builds.WeaponBuildsStorage` |
| `GClass3748` | `EFT.UI.BuildWrapper` |
| `GClass3749` | `EFT.UI.BuildWrapper` |
| `EFT.UI.CameraImage+Struct1174` | `EFT.UI.CameraImage+LevelRenderSettings` |
| `EFT.UI.CaptchaHandler+Class3094` | `EFT.UI.CaptchaHandler+TaskResult` |
| `GClass3814` | `EFT.UI.CategoriesComparer` |
| `GClass3784` | `EFT.UI.Chat.ChatDialogueContextInteractions` |
| `GClass3785` | `EFT.UI.Chat.ChatMemberContextInteractions` |
| `EFT.UI.Chat.ChatMembersPanel+Class3372` | `EFT.UI.Chat.ChatMembersPanel+ChatMemberComparer` |
| `GClass3786` | `EFT.UI.Chat.ChatMessagesContextInteractions` |
| `GClass3933` | `EFT.UI.Chat.DialogueData` |
| `GClass3934` | `EFT.UI.Chat.FriendsRequestResponse` |
| `GClass3935` | `EFT.UI.Chat.MessageData` |
| `GClass3837` | `EFT.UI.Chat.ProfileEventsWindowContext` |
| `GClass3776` | `EFT.UI.ChatContextInteractions` |
| `EFT.UI.ClothingItem+ClothingOfferClass` | `EFT.UI.ClothingItem+FullOffer` |
| `EFT.UI.ClothingItem+GClass3816` | `EFT.UI.ClothingItem+OfferComparer` |
| `GClass3841` | `EFT.UI.CompoundTooltipTextBlockInfo` |
| `GClass3811` | `EFT.UI.ConditionLocalizationGetter` |
| `ItemInfoInteractionsAbstractClass` | `EFT.UI.ContextInteractions` |
| `GClass3746` | `EFT.UI.CursorSwitcher` |
| `GClass3746+Class2810` | `EFT.UI.CursorSwitcher+CursorData` |
| `GClass3834` | `EFT.UI.DialogWindowContext` |
| `GClass3932` | `EFT.UI.DragAndDrop.GuiHelper` |
| `IContainer` | `EFT.UI.DragAndDrop.IContainerView` |
| `GInterface499` | `EFT.UI.DragAndDrop.IResizableGridView` |
| `GClass3464` | `EFT.UI.DragAndDrop.MailTransferItemsItemContext` |
| `EFT.UI.DragAndDrop.ModSlotView+GStruct448` | `EFT.UI.DragAndDrop.ModSlotView+TooltipData` |
| `GClass3465` | `EFT.UI.DragAndDrop.NewOfferItemContext` |
| `GClass3931` | `EFT.UI.DragAndDrop.StringTools` |
| `GClass3460` | `EFT.UI.DragAndDrop.TradingItemContext` |
| `DynamicInteractionClass` | `EFT.UI.DynamicContextInteraction` |
| `EFT.UI.EditBuildScreen+GClass3881` | `EFT.UI.EditBuildScreen+EditBuildScreenController` |
| `GClass3830` | `EFT.UI.EditTagWindowContext` |
| `GClass3747` | `EFT.UI.EffectDescriptionFilter` |
| `EFT.UI.EftAccountSideSelectionScreen+GClass3905` | `EFT.UI.EftAccountSideSelectionScreen+EftAccountSideSelectionScreenController` |
| `EFT.UI.EftBattleUIScreen+GClass3865` | `EFT.UI.EftBattleUIScreen+EftBattleUIScreenController` |
| `EFT.UI.EftBattleUIScreen+GClass3867` | `EFT.UI.EftBattleUIScreen+HideoutBattleUIScreenController` |
| `EFT.UI.EftBattleUIScreen+GClass3866` | `EFT.UI.EftBattleUIScreen+RaidBattleUIScreenController` |
| `EFT.UI.EftLoginScreen+GClass3868` | `EFT.UI.EftLoginScreen+EftLoginScreenController` |
| `GClass3745` | `EFT.UI.EftScreenState` |
| `EFT.UI.EftSetNicknameScreen+GClass3906` | `EFT.UI.EftSetNicknameScreen+EftSetNicknameScreenController` |
| `EFT.UI.EftValidateDeviceIdScreen+GClass3869` | `EFT.UI.EftValidateDeviceIdScreen+EftValidateDeviceIdScreenControllerController` |
| `EFT.UI.EftWelcomeScreen+GClass3907` | `EFT.UI.EftWelcomeScreen+EftWelcomeScreenController` |
| `GClass3777` | `EFT.UI.EmptyContextInteractions` |
| `EFT.UI.EquipItemWindow+Struct1171` | `EFT.UI.EquipItemWindow+EquipItemsGridParameters` |
| `GClass3760` | `EFT.UI.EquipmentBuildContextInteractions` |
| `EFT.UI.EquipmentBuildsScreen+GClass3870` | `EFT.UI.EquipmentBuildsScreen+EquipmentBuildsScreenController` |
| `EFT.UI.EquipmentBuildsScreen+Class3064` | `EFT.UI.EquipmentBuildsScreen+EquipmentBuildsTabController` |
| `EFT.UI.EquipmentBuildsScreen+Class2830` | `EFT.UI.EquipmentBuildsScreen+EquipmentBuildWrapper` |
| `GClass3740` | `EFT.UI.ErrorScreenData` |
| `GClass3835` | `EFT.UI.ErrorWindowContext` |
| `EFT.UI.EventDialogScreen+GClass3863` | `EFT.UI.EventDialogScreen+EventDialogScreenController` |
| `GClass3794` | `EFT.UI.FavoriteQuestManager` |
| `EFT.UI.FilterPanel+Class2832` | `EFT.UI.FilterPanel+FilterRule` |
| `EFT.UI.FilterPanel+Class3065` | `EFT.UI.FilterPanel+FilterTabController` |
| `EFT.UI.FilterPanel+Class2833` | `EFT.UI.FilterPanel+SpawnedInSessionFilterRule` |
| `EFT.UI.FilterPanel+Class2834` | `EFT.UI.FilterPanel+TypeRelatedFilterRule` |
| `EFT.UI.Gestures.GestureBaseItem+GStruct449` | `EFT.UI.Gestures.GestureBaseItem+PointerClick` |
| `GClass3937` | `EFT.UI.Gestures.GestureCommands` |
| `GClass3936` | `EFT.UI.Gestures.GesturesCommandsStorage` |
| `EFT.UI.Gestures.GesturesMenu+GStruct450` | `EFT.UI.Gestures.GesturesMenu+UpdatedGestureBind` |
| `EFT.UI.Gestures.GesturesQuickPanel+Class3399` | `EFT.UI.Gestures.GesturesQuickPanel+SituationPhrase` |
| `EFT.UI.Gestures.PredefinedLayoutGroup+GInterface500` | `EFT.UI.Gestures.PredefinedLayoutGroup+ICanChangeAlignment` |
| `GClass3778` | `EFT.UI.GesturesContextInteractions` |
| `EFT.UI.GrenadeSelector+Class2752` | `EFT.UI.GrenadeSelector+GrenadeDictionaryComparator` |
| `GClass3831` | `EFT.UI.GridWindowContext` |
| `EFT.UI.HandbookFilterPanel+Class2847` | `EFT.UI.HandbookFilterPanel+HandbookFilterTabController` |
| `GClass3750` | `EFT.UI.HandoverExtensions` |
| `EFT.UI.Health.DamagePanel+Class3391` | `EFT.UI.Health.DamagePanel+BodyPartDamageList` |
| `GClass3849` | `EFT.UI.HealthTreatment.EnergyObserver` |
| `GClass3850` | `EFT.UI.HealthTreatment.HealthEffectObserver` |
| `GClass3846` | `EFT.UI.HealthTreatment.HealthFactorObserver` |
| `GClass3847` | `EFT.UI.HealthTreatment.HealthObserver` |
| `GClass3848` | `EFT.UI.HealthTreatment.HydrationObserver` |
| `GInterface493` | `EFT.UI.HealthTreatment.IHealthFactorObserver` |
| `GInterface492` | `EFT.UI.HealthTreatment.IHealthObserver` |
| `GClass3851` | `EFT.UI.HealthTreatment.TreatmentWrapper` |
| `GClass3851+Class3194` | `EFT.UI.HealthTreatment.TreatmentWrapper+TreatmentsComparer` |
| `EFT.UI.HideoutCircleOfCultistsScreen+GClass3903` | `EFT.UI.HideoutCircleOfCultistsScreen+HideoutCircleOfCultistsScreenController` |
| `GClass3761` | `EFT.UI.HideoutContextInteractions` |
| `EFT.UI.HideoutMannequinEquipmentScreen+GClass3904` | `EFT.UI.HideoutMannequinEquipmentScreen+HideoutMannequinEquipmentScreenController` |
| `GInterface472` | `EFT.UI.IBattleUIScreenController` |
| `GInterface473` | `EFT.UI.IButtonAnimation` |
| `GInterface487` | `EFT.UI.IConditionalObjectivesView` |
| `GInterface481` | `EFT.UI.IItemObserverScreen` |
| `GInterface480` | `EFT.UI.ILoginScreenController` |
| `GInterface482` | `EFT.UI.INotificationView` |
| `GInterface483` | `EFT.UI.INotificationViewFactory` |
| `InsuranceCompanyClass` | `EFT.UI.Insurance.InsuranceCompany` |
| `InsuranceCompanyClass+GClass729` | `EFT.UI.Insurance.InsuranceCompany+InsuranceLogger` |
| `InsuranceCompanyClass+GStruct452` | `EFT.UI.Insurance.InsuranceCompany+PriceData` |
| `GClass3774` | `EFT.UI.Insurance.InsuranceContextInteractions` |
| `GClass3466` | `EFT.UI.Insurance.InsuranceItemContext` |
| `ItemClass` | `EFT.UI.Insurance.InsuredItem` |
| `GClass3948` | `EFT.UI.Insurance.InsurePrice` |
| `GClass3949` | `EFT.UI.Insurance.InsurePrices` |
| `GClass3950` | `EFT.UI.Insurance.InsureSummary` |
| `ActionsTypesClass` | `EFT.UI.InteractionAction` |
| `GClass3758` | `EFT.UI.InventoryItemContextInteractions` |
| `EFT.UI.InventoryScreen+GClass3873` | `EFT.UI.InventoryScreen+HideoutInventoryScreenController` |
| `EFT.UI.InventoryScreen+GClass3871` | `EFT.UI.InventoryScreen+InventoryScreenController` |
| `EFT.UI.InventoryScreen+GClass3872` | `EFT.UI.InventoryScreen+LobbyInventoryScreenController` |
| `EFT.UI.InventoryScreen+GClass3874` | `EFT.UI.InventoryScreen+MatchmakingInventoryScreenController` |
| `EFT.UI.InventoryScreen+GClass3875` | `EFT.UI.InventoryScreen+NoTaskBarInventoryScreenController` |
| `EFT.UI.InventoryScreen+GClass3876` | `EFT.UI.InventoryScreen+RaidInventoryScreenController` |
| `GInterface485` | `EFT.UI.IPage` |
| `GInterface476` | `EFT.UI.ISetNicknameScreenController` |
| `GInterface488` | `EFT.UI.IShowable` |
| `GInterface475` | `EFT.UI.ISideSelectionScreenController` |
| `ISubInteractions` | `EFT.UI.ISubInteractionsWrapper` |
| `GInterface486` | `EFT.UI.ITabController` |
| `ContextInteractionSwitcherClass` | `EFT.UI.ItemContextInteractionsSwitcher` |
| `EFT.UI.ItemSelectionCell+GInterface478` | `EFT.UI.ItemSelectionCell+IItemSelectionHandler` |
| `EFT.UI.ItemsPanel+GClass3802` | `EFT.UI.ItemsPanel+ItemsTabController` |
| `EFT.UI.ItemSpecificationPanel+Class2318` | `EFT.UI.ItemSpecificationPanel+FakeSlot` |
| `EFT.UI.ItemUiContext+Class2918` | `EFT.UI.ItemUiContext+WindowData` |
| `GInterface474` | `EFT.UI.ITweenAnimation` |
| `GInterface489` | `EFT.UI.IUIView` |
| `GInterface491` | `EFT.UI.IValidateDeviceIdScreenController` |
| `GInterface490` | `EFT.UI.IValueUpdatable` |
| `GInterface477` | `EFT.UI.IWelcomeScreenController` |
| `GClass3779` | `EFT.UI.LoadMagContextInteractions` |
| `GClass3780` | `EFT.UI.MagPresetContextInteractions` |
| `GInterface501` | `EFT.UI.Map.IPocketMapBundleLoader` |
| `EFT.UI.Map.MapScreen+GClass3805` | `EFT.UI.Map.MapScreen+MapTabController` |
| `GClass3957` | `EFT.UI.Map.SelectEntryPointController` |
| `GClass3958` | `EFT.UI.Map.SimpleMapBundleLoader` |
| `GClass3958+GClass3959` | `EFT.UI.Map.SimpleMapBundleLoader+LoadingBundle` |
| `GClass3759` | `EFT.UI.MatchingInventoryItemContextInteractions` |
| `GClass3930` | `EFT.UI.Matchmaker.BannerWithToggle` |
| `GClass3926` | `EFT.UI.Matchmaker.BaseMatchmakerController` |
| `IMatchmakerPlayersController` | `EFT.UI.Matchmaker.IMatchmakerController` |
| `GClass3915` | `EFT.UI.Matchmaker.KeyAccessScreenController` |
| `EFT.UI.Matchmaker.MatchMakerAcceptScreen+GClass3914` | `EFT.UI.Matchmaker.MatchMakerAcceptScreen+MatchmakerAcceptScreenController` |
| `EFT.UI.Matchmaker.MatchmakerFinalCountdown+FinalCountdownScreenClass` | `EFT.UI.Matchmaker.MatchmakerFinalCountdown+FinalCountdownScreenController` |
| `EFT.UI.Matchmaker.MatchmakerInsuranceScreen+GClass3913` | `EFT.UI.Matchmaker.MatchmakerInsuranceScreen+InsuranceScreenController` |
| `EFT.UI.Matchmaker.MatchmakerMapPointsScreen+GClass3916` | `EFT.UI.Matchmaker.MatchmakerMapPointsScreen+MapPointScreenController` |
| `EFT.UI.Matchmaker.MatchmakerOfflineRaidScreen+CreateRaidSettingsForProfileClass` | `EFT.UI.Matchmaker.MatchmakerOfflineRaidScreen+OfflineRaidScreenController` |
| `MatchmakerPlayerControllerClass` | `EFT.UI.Matchmaker.MatchmakerPlayersController` |
| `EFT.UI.Matchmaker.MatchMakerSelectionLocationScreen+GClass3918` | `EFT.UI.Matchmaker.MatchMakerSelectionLocationScreen+SelectionLocationScreenController` |
| `EFT.UI.Matchmaker.MatchMakerSideSelectionScreen+GClass3919` | `EFT.UI.Matchmaker.MatchMakerSideSelectionScreen+RaidSideSelectionScreenController` |
| `EFT.UI.Matchmaker.MatchmakerTimeHasCome+GClass3925` | `EFT.UI.Matchmaker.MatchmakerTimeHasCome+ReconnectTimeHasComeScreenController` |
| `EFT.UI.Matchmaker.MatchmakerTimeHasCome+TimeHasComeScreenClass` | `EFT.UI.Matchmaker.MatchmakerTimeHasCome+TimeHasComeScreenController` |
| `GClass3928` | `EFT.UI.Matchmaker.MatchmakerUpdatableGroup` |
| `ContextInteractionsClass` | `EFT.UI.Matchmaker.RaidGroupContextInteractions` |
| `GroupPlayerViewModelClass` | `EFT.UI.Matchmaker.RaidPlayer` |
| `EFT.UI.Matchmaker.RaidReadyList+GClass3929` | `EFT.UI.Matchmaker.RaidReadyList+RaidPlayerComparer` |
| `EFT.UI.MenuScreen+GClass3877` | `EFT.UI.MenuScreen+MainMenuBaseScreenController` |
| `EFT.UI.MenuScreen+GClass3879` | `EFT.UI.MenuScreen+MainMenuReconnectScreenController` |
| `EFT.UI.MenuScreen+GClass3878` | `EFT.UI.MenuScreen+MainMenuScreenController` |
| `EFT.UI.MenuScreen+GClass3880` | `EFT.UI.MenuScreen+RaidMainMenuScreenController` |
| `GClass3762` | `EFT.UI.ModdingContextInteractions` |
| `GStruct445` | `EFT.UI.MoneyString` |
| `GClass3843` | `EFT.UI.MultiLineInfo` |
| `EFT.UI.NewsHubScreen+GClass3882` | `EFT.UI.NewsHubScreen+NewsHubScreenController` |
| `EFT.UI.NotifierView+GInterface484` | `EFT.UI.NotifierView+IProfileChangeHandler` |
| `EFT.UI.ObtainPrestigeScreen+GClass3908` | `EFT.UI.ObtainPrestigeScreen+ObtainPrestigeScreenController` |
| `GClass3763` | `EFT.UI.OtherPlayerProfileItemContextInteraction` |
| `EFT.UI.OtherPlayerProfileScreen+GClass3883` | `EFT.UI.OtherPlayerProfileScreen+OtherPlayerProfileScreenController` |
| `GClass3764` | `EFT.UI.OtherPlayerProfileSimpleItemContextInteraction` |
| `EFT.UI.OverallScreen+GClass3803` | `EFT.UI.OverallScreen+OverallTabController` |
| `GClass3836` | `EFT.UI.PlayerEquipmentWindowContext` |
| `GClass3781` | `EFT.UI.PocketMapContextInteractions` |
| `EFT.UI.ProfileLoadingScreen+GClass3884` | `EFT.UI.ProfileLoadingScreen+ProfileLoadingScreenController` |
| `GClass3765` | `EFT.UI.QuestItemContextInteraction` |
| `GClass3795` | `EFT.UI.QuestLocationComparer` |
| `GClass3797` | `EFT.UI.QuestProgressComparer` |
| `GClass3796` | `EFT.UI.QuestStatusComparer` |
| `GClass3798` | `EFT.UI.QuestStringFieldComparer` |
| `GClass3744` | `EFT.UI.QuickUseSelectorUtil` |
| `GClass3947` | `EFT.UI.Ragfair.AvailabilityWarning` |
| `GClass1633` | `EFT.UI.Ragfair.BindableFilterList` |
| `GClass3941` | `EFT.UI.Ragfair.CancelableFilterUtil` |
| `GClass3940` | `EFT.UI.Ragfair.CancellableFilter` |
| `GClass3942` | `EFT.UI.Ragfair.CancellableFilters` |
| `GClass3944` | `EFT.UI.Ragfair.Data` |
| `GClass3773` | `EFT.UI.Ragfair.NewOfferContextInteractions` |
| `EFT.UI.Ragfair.Offer+GClass3939` | `EFT.UI.Ragfair.Offer+Merchant` |
| `GClass3945` | `EFT.UI.Ragfair.OfferData` |
| `GClass3787` | `EFT.UI.Ragfair.OfferIdContextInteractions` |
| `GStruct451` | `EFT.UI.Ragfair.OffersData` |
| `GClass1632` | `EFT.UI.Ragfair.OffersWithNodes` |
| `RagFairClass` | `EFT.UI.Ragfair.RagFair` |
| `RagFairClass+Class3406` | `EFT.UI.Ragfair.RagFair+Cache` |
| `RagFairClass+Class3404` | `EFT.UI.Ragfair.RagFair+CachedRagfairInfo` |
| `GClass3772` | `EFT.UI.Ragfair.RagfairContextInteractions` |
| `GClass3943` | `EFT.UI.Ragfair.RagfairSearch` |
| `GClass3946` | `EFT.UI.Ragfair.UpdateData` |
| `IconLoaderClass` | `EFT.UI.RagfairIconsLoader` |
| `RagfairOfferSellHelperClass` | `EFT.UI.RagfairNewOfferContext` |
| `EFT.UI.ReconnectionScreen+GClass3885` | `EFT.UI.ReconnectionScreen+ReconnectionScreenController` |
| `GClass3461` | `EFT.UI.ReferenceItemContext` |
| `EFT.UI.RestorePasswordScreen+GClass3886` | `EFT.UI.RestorePasswordScreen+RestorePasswordScreenController` |
| `EFT.UI.ScavengerInventoryScreen+GClass3887` | `EFT.UI.ScavengerInventoryScreen+ScavengerInventoryScreenController` |
| `GClass3920` | `EFT.UI.Screens.EftAsyncScreenController` |
| `GClass3912` | `EFT.UI.Screens.EftMatchmakerScreenController` |
| `CurrentScreenSingletonClass` | `EFT.UI.Screens.EftScreenManager` |
| `CurrentScreenSingletonClass+GClass3861` | `EFT.UI.Screens.EftScreenManager+EftScreenController` |
| `GClass3900` | `EFT.UI.Screens.EftSequenceScreenController` |
| `GInterface495` | `EFT.UI.Screens.IBaseScreenController` |
| `GInterface494` | `EFT.UI.Screens.IScreenController` |
| `GInterface496` | `EFT.UI.Screens.IScreenManager` |
| `UserInterfaceClass` | `EFT.UI.Screens.ScreenManager` |
| `EFT.UI.Screens.ScreenManager`1+GClass3860` | `EFT.UI.Screens.ScreenManager`1+ScreenController` |
| `EFT.UI.Screens.UIScreen+Class410` | `EFT.UI.Screens.UIScreen+UIScreenLogger` |
| `GClass3807` | `EFT.UI.ScreenVisibilityTabController` |
| `GStruct447` | `EFT.UI.SessionEnd.ExperienceArticle` |
| `GClass3855` | `EFT.UI.SessionEnd.ExperienceSection` |
| `EFT.UI.SessionEnd.HealthTreatmentScreen+GClass3898` | `EFT.UI.SessionEnd.HealthTreatmentScreen+HealthTreatmentScreenController` |
| `GClass3856` | `EFT.UI.SessionEnd.SessionExperience` |
| `EFT.UI.SessionEnd.SessionResultExitStatus+GClass3899` | `EFT.UI.SessionEnd.SessionResultExitStatus+ExitStatusScreenController` |
| `EFT.UI.SessionEnd.SessionResultExperienceCount+GClass3909` | `EFT.UI.SessionEnd.SessionResultExperienceCount+SessionExperienceScreenController` |
| `EFT.UI.SessionEnd.SessionResultKillList+GClass3910` | `EFT.UI.SessionEnd.SessionResultKillList+KillListScreenController` |
| `EFT.UI.SessionEnd.SessionResultStatistics+GClass3911` | `EFT.UI.SessionEnd.SessionResultStatistics+SessionStatisticsScreenController` |
| `EFT.UI.SessionEnd.SessionResultStatistics+GClass3857` | `EFT.UI.SessionEnd.SessionResultStatistics+StatGroup` |
| `GClass3852` | `EFT.UI.Settings.ColorSchemeExtension` |
| `EFT.UI.Settings.SettingsScreen+GClass3896` | `EFT.UI.Settings.SettingsScreen+RaidSettingsScreenController` |
| `EFT.UI.Settings.SettingsScreen+Struct1190` | `EFT.UI.Settings.SettingsScreen+SettingsGroupObjects` |
| `EFT.UI.Settings.SettingsScreen+GClass3897` | `EFT.UI.Settings.SettingsScreen+SettingsInMatchingScreenController` |
| `EFT.UI.Settings.SettingsScreen+GClass3895` | `EFT.UI.Settings.SettingsScreen+SettingsScreenController` |
| `EFT.UI.Settings.SettingsScreen+GClass3895+GClass3853` | `EFT.UI.Settings.SettingsScreen+SettingsScreenController+SettingsGroups` |
| `GClass3799` | `EFT.UI.SimpleTabController` |
| `GClass3806` | `EFT.UI.SimpleUIElementTabController` |
| `GClass3842` | `EFT.UI.SingleLineInfo` |
| `EFT.UI.SkillsAndMasteringScreen+GClass3804` | `EFT.UI.SkillsAndMasteringScreen+SkillsAndMasteringTabController` |
| `EFT.UI.SortingTableWindow+GClass3832` | `EFT.UI.SortingTableWindow+SortingTableWindowContext` |
| `GClass3751` | `EFT.UI.SpawnedInSessionItemComparer` |
| `GClass3793` | `EFT.UI.StashMoneyController` |
| `GClass3791` | `EFT.UI.StatInfoFactory` |
| `EFT.UI.SurveyScreen+GClass3801` | `EFT.UI.SurveyScreen+SurveyTabController` |
| `GClass3808` | `EFT.UI.TabGroup` |
| `GClass3812` | `EFT.UI.TaskRewardValuesTextGetter` |
| `GClass3819` | `EFT.UI.TemplateList` |
| `AddNoteOperationClass` | `EFT.UI.TemporaryGrid` |
| `GClass3742` | `EFT.UI.TextGameLocationData` |
| `GClass3743` | `EFT.UI.TextGameMockData` |
| `EFT.UI.TMP_FPSCounter+Class2799` | `EFT.UI.TMP_FPSCounter+CounterLevel` |
| `GClass3817` | `EFT.UI.ToggleTab` |
| `EFT.UI.TraderDealScreen+Class3067` | `EFT.UI.TraderDealScreen+TraderLoyaltyTabController` |
| `EFT.UI.TraderDealScreen+Class3066` | `EFT.UI.TraderDealScreen+TraderModeTabController` |
| `EFT.UI.TraderDialogScreen+BTRDialogClass` | `EFT.UI.TraderDialogScreen+TraderDialogScreenController` |
| `EFT.UI.TraderScreensGroup+GClass3889` | `EFT.UI.TraderScreensGroup+DialogTraderScreenController` |
| `EFT.UI.TraderScreensGroup+GClass3888` | `EFT.UI.TraderScreensGroup+TraderScreenController` |
| `GClass3809` | `EFT.UI.TraderTabGroup` |
| `GClass3809+GClass3810` | `EFT.UI.TraderTabGroup+LoyaltyLevelTabsConverter` |
| `GClass3766` | `EFT.UI.TradingContextInteractions` |
| `GClass3767` | `EFT.UI.TradingPlayerContextInteractions` |
| `EFT.UI.TradingScreen+GClass3892` | `EFT.UI.TradingScreen+RagfairScreenController` |
| `EFT.UI.TradingScreen+GClass3891` | `EFT.UI.TradingScreen+TradersScreenController` |
| `EFT.UI.TradingScreen+GClass3890` | `EFT.UI.TradingScreen+TradingScreenController` |
| `GClass3768` | `EFT.UI.TransferFromScavContextInteractions` |
| `GClass3769` | `EFT.UI.TransferItemHideoutAreaStashContextInteractions` |
| `GClass3770` | `EFT.UI.TransferItemPlayerContextInteractions` |
| `GClass3771` | `EFT.UI.TransferItemSenderContextInteractions` |
| `EFT.UI.TransferItemsInRaidScreen+GClass3893` | `EFT.UI.TransferItemsInRaidScreen+TransferItemsInRaidScreenController` |
| `EFT.UI.TransferItemsScreen+GClass3894` | `EFT.UI.TransferItemsScreen+TransferItemsScreenController` |
| `GClass3844` | `EFT.UI.Tutorial.Key` |
| `GClass3845` | `EFT.UI.Tutorial.KeyBinding` |
| `EFT.UI.TypeWriterComponent+Struct1157` | `EFT.UI.TypeWriterComponent+RichTextChar` |
| `GClass3825` | `EFT.UI.UICanvasScalerController` |
| `GClass3800` | `EFT.UI.UIElementTabController` |
| `GClass3826` | `EFT.UI.UIExtensions` |
| `AddViewListClass` | `EFT.UI.UIParent` |
| `GClass3840` | `EFT.UI.UISetExtensions` |
| `EFT.UI.Utilities.LightScroller.LightScroller+Class3178` | `EFT.UI.Utilities.LightScroller.LightScroller+CollectionCache` |
| `EFT.UI.Utilities.LightScroller.LightScroller+Class3178+Class3179` | `EFT.UI.Utilities.LightScroller.LightScroller+CollectionCache+ItemCache` |
| `EFT.UI.Utilities.LightScroller.LightScroller+Interface22` | `EFT.UI.Utilities.LightScroller.LightScroller+ICollectionCache` |
| `EFT.UI.Utilities.LightScroller.LightScroller+GDelegate87` | `EFT.UI.Utilities.LightScroller.LightScroller+LightScrollerDataTypeGetter` |
| `EFT.UI.Utilities.LightScroller.LightScroller+GDelegate86` | `EFT.UI.Utilities.LightScroller.LightScroller+LightScrollerViewFactory` |
| `EFT.UI.ValidationInputField+Struct1167` | `EFT.UI.ValidationInputField+Pair` |
| `GClass3822` | `EFT.UI.ViewList` |
| `GClass3839` | `EFT.UI.VisualExtensions` |
| `GClass3839+Class3167` | `EFT.UI.VisualExtensions+CanvasGroupBlocker` |
| `GClass3792` | `EFT.UI.VoicePreviewSpeaker` |
| `GClass3828` | `EFT.UI.WaitForGraphicsRebuild` |
| `GClass3827` | `EFT.UI.WaitForLayoutRebuilding` |
| `EFT.UI.WeaponModding.WeaponModdingScreen+GClass3922` | `EFT.UI.WeaponModding.WeaponModdingScreen+WeaponModdingScreenController` |
| `GClass3829` | `EFT.UI.WindowContext` |
| `GClass3782` | `EFT.UI.WishlistContextInteractions` |
| `GClass3790` | `EFT.UI.ZombieEventLocationInfectionController` |
| `GClass1988` | `EFT.UnbindItemOperationDescriptor` |
| `GClass4062` | `EFT.UnityProfilerWrapper.Profiler` |
| `GClass4062+Struct1306` | `EFT.UnityProfilerWrapper.Profiler+Marker` |
| `GClass4062+GStruct464` | `EFT.UnityProfilerWrapper.Profiler+ReleaseToken` |
| `GClass4062+GStruct463` | `EFT.UnityProfilerWrapper.Profiler+Token` |
| `GClass2299` | `EFT.UnitySerializedDictionary` |
| `GClass1973` | `EFT.UnloadMagOperationDescriptor` |
| `GClass1842` | `EFT.UnlockAddOfferBonus` |
| `GClass1849` | `EFT.UnlockArmorRepair` |
| `GClass1839` | `EFT.UnlockBonus` |
| `GClass1847` | `EFT.UnlockItemChargeBonus` |
| `GClass1844` | `EFT.UnlockItemCraftBonus` |
| `GClass1845` | `EFT.UnlockItemPassiveCreationBonus` |
| `GClass1841` | `EFT.UnlockModificationBonus?` |
| `GClass1846` | `EFT.UnlockRandomItemCreationBonus` |
| `GClass1840` | `EFT.UnlockScavPlayBonus` |
| `GClass1843` | `EFT.UnlockUniqueIdBonus` |
| `GClass1848` | `EFT.UnlockWeaponRepair` |
| `GClass1863` | `EFT.UnparsedDataConverter` |
| `GStruct166` | `EFT.UpdateExfiltrationPointPacket` |
| `Class1128` | `EFT.UrlsExtension` |
| `Class1744` | `EFT.UsableItemInputTranslator` |
| `GClass2643` | `EFT.Utilities.BenchmarkScreenshot` |
| `GClass2613` | `EFT.Utilities.BinMetricCollector` |
| `MetricsClass` | `EFT.Utilities.ClientMetrics` |
| `MetricsCollectorClass` | `EFT.Utilities.ClientMetricsCollector` |
| `MetricsConfigClass` | `EFT.Utilities.ClientMetricsConfig` |
| `MetricsEventsClass` | `EFT.Utilities.ClientMetricsEvents` |
| `GClass2644` | `EFT.Utilities.CpuAffinityHelper` |
| `GClass2644+Struct802` | `EFT.Utilities.CpuAffinityHelper+CACHE_DESCRIPTOR` |
| `GClass2644+Struct801` | `EFT.Utilities.CpuAffinityHelper+NUMANODE` |
| `GClass2644+Struct800` | `EFT.Utilities.CpuAffinityHelper+PROCESSORCORE` |
| `GClass2644+Struct804` | `EFT.Utilities.CpuAffinityHelper+SYSTEM_LOGICAL_PROCESSOR_INFORMATION` |
| `GClass2644+Struct803` | `EFT.Utilities.CpuAffinityHelper+SYSTEM_LOGICAL_PROCESSOR_INFORMATION_UNION` |
| `GClass2634` | `EFT.Utilities.ExceptionHelper` |
| `GClass2608` | `EFT.Utilities.FastRndom` |
| `GClass2608+GClass2610` | `EFT.Utilities.FastRndom+OwnSeedRnd` |
| `GClass2608+GClass2609` | `EFT.Utilities.FastRndom+Unrepeated` |
| `GClass2614` | `EFT.Utilities.FixedUpdateBinMetricCollector` |
| `GClass2615` | `EFT.Utilities.FrameBinMetricCollector` |
| `GClass2616` | `EFT.Utilities.FrameWithoutFixedUpdatesBinMetricCollector` |
| `GClass2617` | `EFT.Utilities.GameUpdateBinMetricCollector` |
| `GClass2645` | `EFT.Utilities.GetDriveTypeUtility` |
| `GClass2645+Struct807` | `EFT.Utilities.GetDriveTypeUtility+ATA_PASS_THROUGH_EX` |
| `GClass2645+Struct808` | `EFT.Utilities.GetDriveTypeUtility+ATAIdentifyDeviceQuery` |
| `GClass2645+Struct806` | `EFT.Utilities.GetDriveTypeUtility+DEVICE_SEEK_PENALTY_DESCRIPTOR` |
| `GClass2645+Struct809` | `EFT.Utilities.GetDriveTypeUtility+DISK_EXTENT` |
| `GClass2645+Struct805` | `EFT.Utilities.GetDriveTypeUtility+STORAGE_PROPERTY_QUERY` |
| `GClass2645+Struct810` | `EFT.Utilities.GetDriveTypeUtility+VOLUME_DISK_EXTENTS` |
| `QuestDictionaryClass` | `EFT.Utilities.GlobalsArray` |
| `GClass2635` | `EFT.Utilities.GlobalsArrayConverter` |
| `GClass2638` | `EFT.Utilities.GlobalsDictionary` |
| `GClass2637` | `EFT.Utilities.GlobalsDictionaryConverter` |
| `GInterface276` | `EFT.Utilities.IGlobalsArray` |
| `GInterface274` | `EFT.Utilities.IMetricsCollector` |
| `ICurrentRaidNumber` | `EFT.Utilities.IRaidCounter` |
| `GClass2618` | `EFT.Utilities.MaxClientServerTimeDiffBinMetricCollector` |
| `GClass2619` | `EFT.Utilities.MaxClientServerTimeDiffByPlayerBinMetricCollector` |
| `GClass2620` | `EFT.Utilities.MaxLossBinMetricCollector` |
| `GClass2621` | `EFT.Utilities.MaxPacketsQueueCountBinMetricCollector` |
| `GClass2622` | `EFT.Utilities.MaxPacketsQueueTimeBinMetricCollector` |
| `GClass2623` | `EFT.Utilities.MaxRttBinMetricCollector` |
| `GClass2627` | `EFT.Utilities.MemoryMetricCollector` |
| `GClass2611` | `EFT.Utilities.Metrics` |
| `GClass2611+GClass2612` | `EFT.Utilities.Metrics+Timing` |
| `MetricsCollectorAbstractClass` | `EFT.Utilities.MetricsCollector` |
| `GClass2624` | `EFT.Utilities.ReceivedPacketsCountBinMetricCollector` |
| `GClass2625` | `EFT.Utilities.RenderBinMetricCollector` |
| `CacheResourcesPopAbstractClass` | `EFT.Utilities.ResourcesCache` |
| `GClass2631` | `EFT.Utilities.ServerMetrics` |
| `ClientMetricsClass` | `EFT.Utilities.ServerMetricsCollector` |
| `GClass2632` | `EFT.Utilities.ServerMetricsConfig` |
| `GClass2639` | `EFT.Utilities.SharedSettingsClientMetricsInfo` |
| `GClass2626` | `EFT.Utilities.UnprocessedPacketsCountBinMetricCollector` |
| `GClass2677` | `EFT.Vaulting.AutoMoveRestrictions` |
| `GClass2681` | `EFT.Vaulting.BaseVaultingAudioController` |
| `GClass2672` | `EFT.Vaulting.BaseVaultingMoveModel` |
| `GClass2675` | `EFT.Vaulting.BaseVaultingMoveRestrictions` |
| `GClass2673` | `EFT.Vaulting.ClimbMoveModel` |
| `GClass2717` | `EFT.Vaulting.Controllers.GridMoverController` |
| `GClass2718` | `EFT.Vaulting.Controllers.GridSurfaceCalculatorController` |
| `GClass2719` | `EFT.Vaulting.Controllers.HitPointsApproximatorController` |
| `GInterface305` | `EFT.Vaulting.Controllers.IGridCalculatorControllerDebug` |
| `GClass2720` | `EFT.Vaulting.Controllers.VaultingStateController` |
| `GClass2721` | `EFT.Vaulting.Controllers.WeightCalculatorController` |
| `GClass2692` | `EFT.Vaulting.Debug.Controller.ApproximationPageController` |
| `GClass2693` | `EFT.Vaulting.Debug.Controller.AutomaticVaultingPageController` |
| `GClass2694` | `EFT.Vaulting.Debug.Controller.DiscreteSurfacePageController` |
| `GClass2701` | `EFT.Vaulting.Debug.Controller.EditorControllers.EditorGridController` |
| `GClass2695` | `EFT.Vaulting.Debug.Controller.GridOptionsPageController` |
| `GInterface288` | `EFT.Vaulting.Debug.Controller.IDiscreteSurfacePageController` |
| `GInterface289` | `EFT.Vaulting.Debug.Controller.IVaultingDebugPageController` |
| `GClass2696` | `EFT.Vaulting.Debug.Controller.PageController` |
| `GClass2698` | `EFT.Vaulting.Debug.Controller.PageControllers.MainInfoPageController` |
| `GClass2699` | `EFT.Vaulting.Debug.Controller.PageControllers.StartPageController` |
| `GClass2700` | `EFT.Vaulting.Debug.Controller.PageControllers.VaultingRestrictionsPageController` |
| `GClass2697` | `EFT.Vaulting.Debug.Controller.VaultingDebugToolController` |
| `GClass2702` | `EFT.Vaulting.Debug.EditorControllers.EditorApproximationController` |
| `GClass2703` | `EFT.Vaulting.Debug.EditorControllers.EditorController` |
| `GStruct311` | `EFT.Vaulting.Debug.Models.ApproximationVaultingDataModel` |
| `GStruct312` | `EFT.Vaulting.Debug.Models.AutomaticVaultingDataModel` |
| `GStruct316` | `EFT.Vaulting.Debug.Models.DataModels.GridPointsDataModel` |
| `GStruct317` | `EFT.Vaulting.Debug.Models.DataModels.MotionParameters` |
| `GStruct318` | `EFT.Vaulting.Debug.Models.DataModels.SurfaceParameters` |
| `GStruct313` | `EFT.Vaulting.Debug.Models.DiscreteSurfaceDataModel` |
| `GStruct314` | `EFT.Vaulting.Debug.Models.GridOptionsDataModel` |
| `GStruct315` | `EFT.Vaulting.Debug.Models.VaultingRestrictionsPageModel` |
| `GClass2684` | `EFT.Vaulting.Debug.View.ApproximationPageView` |
| `GClass2685` | `EFT.Vaulting.Debug.View.AutomaticVaultingPageView` |
| `GClass2686` | `EFT.Vaulting.Debug.View.DiscreteSurfacePageView` |
| `GClass2687` | `EFT.Vaulting.Debug.View.GridOptionsPageView` |
| `GInterface284` | `EFT.Vaulting.Debug.View.IApproximationVaultingPageView` |
| `GInterface285` | `EFT.Vaulting.Debug.View.IAutomaticVaultingPageView` |
| `GInterface286` | `EFT.Vaulting.Debug.View.IDiscreteSurfacePageView` |
| `GInterface287` | `EFT.Vaulting.Debug.View.IVaultingDebugPageView` |
| `GClass2688` | `EFT.Vaulting.Debug.View.Pages.MainInfoPageView` |
| `GClass2689` | `EFT.Vaulting.Debug.View.Pages.RestrictionsPageView` |
| `GClass2690` | `EFT.Vaulting.Debug.View.Pages.StartPageView` |
| `GClass2682` | `EFT.Vaulting.FirstPersonVaultingAudioController` |
| `GInterface283` | `EFT.Vaulting.IVaultingContext` |
| `GInterface282` | `EFT.Vaulting.IVaultingMove` |
| `GClass2705` | `EFT.Vaulting.Models.AutomaticVaultingRestrictionsModel` |
| `GStruct322` | `EFT.Vaulting.Models.AutoMoveRestrictionsTransferModel` |
| `GStruct325` | `EFT.Vaulting.Models.DiscreteSurfaceSectionModel` |
| `GClass2708` | `EFT.Vaulting.Models.DouglasPeuckerSurfaceApproximator` |
| `GClass2709` | `EFT.Vaulting.Models.GridPointsModel` |
| `GClass2710` | `EFT.Vaulting.Models.GridRootMoverModel` |
| `GStruct319` | `EFT.Vaulting.Models.GridRootMoverTransferModel` |
| `GStruct320` | `EFT.Vaulting.Models.GridSettingsDataTransferModel` |
| `GClass2706` | `EFT.Vaulting.Models.GridSettingsModel` |
| `GStruct321` | `EFT.Vaulting.Models.GridSurfaceCalculatorDataTransferModel` |
| `GInterface291` | `EFT.Vaulting.Models.IAutomaticVaultingModel` |
| `GInterface297` | `EFT.Vaulting.Models.IGridPointsModel` |
| `GInterface298` | `EFT.Vaulting.Models.IGridRootMoverModel` |
| `GInterface294` | `EFT.Vaulting.Models.IGridRootMoverTransferModel` |
| `GInterface295` | `EFT.Vaulting.Models.IGridSettingsDataTransferModel` |
| `GInterface292` | `EFT.Vaulting.Models.IGridSettingsModel` |
| `GInterface299` | `EFT.Vaulting.Models.IObstacleCalculatorModel` |
| `GInterface300` | `EFT.Vaulting.Models.IStairsCalculator` |
| `GInterface296` | `EFT.Vaulting.Models.ISurfaceApproximatorModel` |
| `GInterface301` | `EFT.Vaulting.Models.IVaulingMovesModel` |
| `GInterface304` | `EFT.Vaulting.Models.IVaultingModel` |
| `GInterface293` | `EFT.Vaulting.Models.IVaultingRestrictionsModel` |
| `GInterface302` | `EFT.Vaulting.Models.IVaultingStateModel` |
| `GInterface303` | `EFT.Vaulting.Models.IWeightCalculatorModel` |
| `GStruct323` | `EFT.Vaulting.Models.MoveRestrictionsTransferModel` |
| `GClass2711` | `EFT.Vaulting.Models.ObstacleCalculatorModel` |
| `GClass2712` | `EFT.Vaulting.Models.StairsCalculatorModel` |
| `GClass2716` | `EFT.Vaulting.Models.VaultingModel` |
| `GClass2713` | `EFT.Vaulting.Models.VaultingMovesModel` |
| `GClass2707` | `EFT.Vaulting.Models.VaultingRestrictionsModel` |
| `GStruct324` | `EFT.Vaulting.Models.VaultingStateDataTransferModel` |
| `GClass2714` | `EFT.Vaulting.Models.VaultingStateModel` |
| `GClass2715` | `EFT.Vaulting.Models.WeightCalculatorModel` |
| `GClass2676` | `EFT.Vaulting.MoveRestrictions` |
| `GClass2683` | `EFT.Vaulting.ObservedVaultingAudioController` |
| `ObservedVaultingParametersClass` | `EFT.Vaulting.ObservedVaultingParameters` |
| `GClass2679` | `EFT.Vaulting.VaultingComponent` |
| `GClass2680` | `EFT.Vaulting.VaultingGameplayRestrictions` |
| `GStruct310` | `EFT.Vaulting.VaultingTransferModel` |
| `GClass2674` | `EFT.Vaulting.VaultMoveModel` |
| `GInterface290` | `EFT.Vaulting.Views.IVaultingView` |
| `GClass2704` | `EFT.Vaulting.Views.VaultingView` |
| `GClass2136` | `EFT.VaultingFallDownState` |
| `GClass2137` | `EFT.VaultingMovementState` |
| `GStruct223` | `EFT.VaultingPacket` |
| `GClass2102` | `EFT.VaultSoundsEventConsumer` |
| `ClimbOverStateClass` | `EFT.VaultState` |
| `GClass1675` | `EFT.VectorExtensions` |
| `GClass2298` | `EFT.VectorTools` |
| `BTRControllerClass` | `EFT.Vehicle.BtrController` |
| `BTRDataPacketStruct` | `EFT.Vehicle.ShapshotBTRMessage` |
| `GClass3541` | `EFT.Vehicle.VehicleMessageReceiver` |
| `GClass2342` | `EFT.VendorScenePresets` |
| `VersionNumberClass` | `EFT.Version` |
| `GClass2201` | `EFT.VictimStats` |
| `GStruct268` | `EFT.ViewPacket` |
| `GClass2291` | `EFT.VirtualGroup` |
| `GInterface236` | `EFT.Visual.IDress` |
| `GClass2241` | `EFT.VisualsOnlySearchController` |
| `GClass2276` | `EFT.VoipQualitySettings` |
| `VoipSettingsClass` | `EFT.VoipSettings` |
| `GClass1881` | `EFT.WDictionary` |
| `GInterface281` | `EFT.WeaponMounting.Debug.View.Pages.IMountingPage` |
| `GClass2668` | `EFT.WeaponMounting.Debug.View.Pages.MountingGridOptionsPage` |
| `GClass2669` | `EFT.WeaponMounting.Debug.View.Pages.MountingPageViewer` |
| `GClass2670` | `EFT.WeaponMounting.Debug.View.Pages.MountingRecoilAndStaminaPage` |
| `GClass2671` | `EFT.WeaponMounting.Debug.View.Pages.MountingStartPage` |
| `GClass2666` | `EFT.WeaponMounting.MountingPointDetectionSystem` |
| `GClass2666+Class2141` | `EFT.WeaponMounting.MountingPointDetectionSystem+CoroutineWithData` |
| `GClass2666+Struct818` | `EFT.WeaponMounting.MountingPointDetectionSystem+HorizontalHits` |
| `GClass2667` | `EFT.WeaponMounting.WeaponMountingComponent` |
| `IdleWeaponMountingStateClass` | `EFT.WeaponMountingStates.IdleWeaponMountingState` |
| `GStruct278` | `EFT.WeaponOverheatPacket` |
| `GClass1989` | `EFT.WeaponRechamberOperationDescriptor` |
| `GClass2579` | `EFT.Weapons.AudioWeaponUtils` |
| `WeaponSkillClass` | `EFT.WeaponSkill` |
| `GClass1796` | `EFT.WeaponsSettingExtension` |
| `GClass2600` | `EFT.Weather.CloudinessTypeExtensions` |
| `EFT.Weather.FactoryWinterController+Class2113` | `EFT.Weather.FactoryWinterController+AbstractState` |
| `EFT.Weather.FactoryWinterController+Class2114` | `EFT.Weather.FactoryWinterController+StateDefault` |
| `EFT.Weather.FactoryWinterController+Class2115` | `EFT.Weather.FactoryWinterController+StateWinter` |
| `GStruct304` | `EFT.Weather.FogRemapRecordV2Result` |
| `GClass2603` | `EFT.Weather.FogTypeExtensions` |
| `GClass2602` | `EFT.Weather.RainTypeExtensions` |
| `SeasonsSettingsClass` | `EFT.Weather.SeasonsSettings` |
| `GStruct305` | `EFT.Weather.SHDataInput` |
| `GClass2607` | `EFT.Weather.SphericalHarmonicsL2JobExtensions` |
| `EFT.Weather.ToDController+Struct797` | `EFT.Weather.ToDController+ComputeSphericalHarmonicsContainerJob` |
| `EFT.Weather.ToDController+GStruct306` | `EFT.Weather.ToDController+SphericalHarmonicsContainer` |
| `EFT.Weather.TODSkySimple+Struct798` | `EFT.Weather.TODSkySimple+SphericalHarmonicsContainer` |
| `WeatherClass` | `EFT.Weather.WeatherNode` |
| `GClass2606` | `EFT.Weather.WeatherSerializer` |
| `GStruct307` | `EFT.Weather.Wind` |
| `Class2117` | `EFT.Weather.WindCalculator` |
| `GStruct308` | `EFT.Weather.WindParams` |
| `Class2116` | `EFT.Weather.WindParamsHelper` |
| `GStruct309` | `EFT.Weather.WindParamsSet` |
| `GClass2601` | `EFT.Weather.WindSpeedExtensions` |
| `GClass1908` | `EFT.WeatherEventSettings` |
| `GStruct168` | `EFT.WindowHitPacket` |
| `GClass2183` | `EFT.WishlistItem` |
| `GClass2067` | `EFT.WishlistManager` |
| `GClass2103` | `EFT.ZombieFireBulletEventConsumer` |
| `GClass2104` | `EFT.ZombieFireEndEventConsumer` |
| `GClass2143` | `EFT.ZombieMovementStates.EndMoveZombieState` |
| `IdleZombieStateClass` | `EFT.ZombieMovementStates.IdleZombieState` |
| `MoveZombieStateClass` | `EFT.ZombieMovementStates.MoveZombieState` |
| `GClass2144` | `EFT.ZombieMovementStates.StartMoveZombieState` |
| `GClass2141` | `EFT.ZombieMovementStates.TurnZombieState` |
| `GAttribute16` | `EFTools.ReadOnlyInInspectorAttribute` |
| `GClass690` | `EllipseCalculator` |
| `GClass690+GStruct28` | `EllipseCalculator+Ellipse` |
| `GClass13` | `EmbeddedProfiler` |
| `GClass923` | `EmptyShaderReplacer` |
| `GClass542` | `EnemyPartVision` |
| `GClass543` | `EnemyVision` |
| `GAttribute10` | `EnumBitMaskAttribute` |
| `GAttribute5` | `EnumFlagsAttribute` |
| `GClass866` | `EnumHelper` |
| `GClass866+Class488` | `EnumHelper+EnumComparer` |
| `GClass866+Class489` | `EnumHelper+EnumEqualityComparer` |
| `EnvironmentManagerBase+GInterface24` | `EnvironmentManagerBase+IAABB` |
| `GStruct37` | `EPlayerStateComparer` |
| `GClass882` | `ErrorHandler` |
| `GClass1369` | `ExceptionsHelper` |
| `GClass75` | `ExfiltrationLayer` |
| `GClass728` | `ExfiltrationLogger` |
| `GClass829` | `ExponentiallySmoothedMovingAverage` |
| `GClass721` | `ExportLogger` |
| `Class702` | `Extension` |
| `GClass1002` | `Extensions` |
| `GClass1002+GStruct71` | `Extensions+CommandBuffers` |
| `GClass326` | `ExUsecAbstractStrategy` |
| `ExUsecBrainClass` | `ExUsecLayersStrategy` |
| `GClass83` | `ExUsecPeacefulRequestLayer` |
| `EyeBurn+Class611` | `EyeBurn+EyeBurnSpot` |
| `GClass982` | `Face` |
| `GClass700` | `FarestListDebug` |
| `GClass1329` | `FastAnimatorStateDebugger` |
| `CurrentStateAbstractClass` | `FastAnimatorSystem.AbstractAnimatorControllerState` |
| `GClass1320` | `FastAnimatorSystem.AbstractBlendTreeState` |
| `GClass1332` | `FastAnimatorSystem.AbstractFastStateConverter` |
| `GClass1315` | `FastAnimatorSystem.AbstractInnerStateMachine` |
| `GClass1326` | `FastAnimatorSystem.AbstractMotion` |
| `GClass1312` | `FastAnimatorSystem.AbstractState` |
| `GClass1313` | `FastAnimatorSystem.AbstractStateMachine` |
| `GClass1322` | `FastAnimatorSystem.AnimatedState` |
| `GClass1327` | `FastAnimatorSystem.AnimationClipInfo` |
| `TransitionClass` | `FastAnimatorSystem.AnimatorControllerTransition` |
| `SpeedAnimParamClass` | `FastAnimatorSystem.AnimatorParameter` |
| `GClass1323` | `FastAnimatorSystem.AnimatorStatesManager` |
| `GClass713` | `FastAnimatorSystem.AnimatorSystemLogger` |
| `ThresholdClass` | `FastAnimatorSystem.AnimatorValue` |
| `FastAnimatorControllerClass` | `FastAnimatorSystem.FastAnimatorController` |
| `FastAnimatorProcessorClass` | `FastAnimatorSystem.FastAnimatorProcessor` |
| `FastAnimatorProcessorClass+GClass1342` | `FastAnimatorSystem.FastAnimatorProcessor+FastAnimatorCache` |
| `GClass1343` | `FastAnimatorSystem.FastControllerInfo` |
| `GClass1344` | `FastAnimatorSystem.FastLayerInfo` |
| `GClass1328` | `FastAnimatorSystem.FastStateBehavior` |
| `GInterface122` | `FastAnimatorSystem.IFastStateConverter` |
| `GAttribute18` | `FastAnimatorSystem.IgnoreInFastAnimationSystemAttribute` |
| `IValueListener` | `FastAnimatorSystem.IParameterValueChangedListener` |
| `GInterface123` | `FastAnimatorSystem.IPlayableAnimator` |
| `GInterface124` | `FastAnimatorSystem.IPlayableAnimatorCuller` |
| `GInterface125` | `FastAnimatorSystem.IPlayableLayerProcessor` |
| `GClass1346` | `FastAnimatorSystem.JsonSerialization.FastAnimatorControllerJsonSerializator` |
| `GClass1346+GClass1350` | `FastAnimatorSystem.JsonSerialization.FastAnimatorControllerJsonSerializator+FlatAnimatorControllerTransition` |
| `GClass1346+GClass1352` | `FastAnimatorSystem.JsonSerialization.FastAnimatorControllerJsonSerializator+FlatAnimatorParameter` |
| `GClass1346+GClass1347` | `FastAnimatorSystem.JsonSerialization.FastAnimatorControllerJsonSerializator+FlatFastAnimatorController` |
| `GClass1346+GClass1348` | `FastAnimatorSystem.JsonSerialization.FastAnimatorControllerJsonSerializator+FlatFastAnimatorControllerEntity` |
| `GClass1346+GClass1349` | `FastAnimatorSystem.JsonSerialization.FastAnimatorControllerJsonSerializator+FlatMotion` |
| `GClass1346+Class908` | `FastAnimatorSystem.JsonSerialization.FastAnimatorControllerJsonSerializator+FlatToRealContext` |
| `GClass1346+GClass1351` | `FastAnimatorSystem.JsonSerialization.FastAnimatorControllerJsonSerializator+FlatTransitionCondition` |
| `GClass1316` | `FastAnimatorSystem.LayerStateMachine` |
| `GClass1321` | `FastAnimatorSystem.OneDBlendTreeState` |
| `GClass1340` | `FastAnimatorSystem.PlayableAnimatorCuller` |
| `GClass1337` | `FastAnimatorSystem.PlayableClipBlender` |
| `GClass1338` | `FastAnimatorSystem.PlayableLayerProcessor` |
| `LootStateClass` | `FastAnimatorSystem.PlayableNodeConnector` |
| `GAttribute19` | `FastAnimatorSystem.StateBehaviorConverterAttribute` |
| `GClass1317` | `FastAnimatorSystem.StateMachine` |
| `GClass1345` | `FastAnimatorSystem.TransitionCondition` |
| `GClass103` | `FightKojaniyAbstractLayer` |
| `GClass84` | `FightRequestLayer` |
| `GClass868` | `FileUtils` |
| `GDelegate5` | `FindNextPointDelegate` |
| `GClass870` | `FindObjectsProxy` |
| `Class56` | `FindOffersByIdRequestParams` |
| `GClass909` | `FirstPersonStrategy` |
| `GClass909+Struct106` | `FirstPersonStrategy+StoredWorldPosition` |
| `GClass208` | `FlankMove` |
| `GClass188` | `FlashedNode` |
| `GClass804` | `FloatExponentialMovingAverageCalculator` |
| `GClass821` | `FloatingSpeed` |
| `GClass822` | `FloatingSum` |
| `GClass947` | `FloatNumericOperations` |
| `GClass1370` | `FloatQuantizerExtensions` |
| `Class933` | `FlyingWormConsole3.LiteNetLib.BaseChannel` |
| `GClass1470` | `FlyingWormConsole3.LiteNetLib.ConnectionRequest` |
| `DisconnectionInfoStruct` | `FlyingWormConsole3.LiteNetLib.DisconnectInfo` |
| `GClass1472` | `FlyingWormConsole3.LiteNetLib.EventBasedNatPunchListener` |
| `GClass1472+GDelegate60` | `FlyingWormConsole3.LiteNetLib.EventBasedNatPunchListener+OnNatIntroductionRequest` |
| `GClass1472+GDelegate61` | `FlyingWormConsole3.LiteNetLib.EventBasedNatPunchListener+OnNatIntroductionSuccess` |
| `GClass1471` | `FlyingWormConsole3.LiteNetLib.EventBasedNetListener` |
| `GInterface139` | `FlyingWormConsole3.LiteNetLib.IDeliveryEventListener` |
| `INATIntroductionListener` | `FlyingWormConsole3.LiteNetLib.INatPunchListener` |
| `IOnNetworkEvent` | `FlyingWormConsole3.LiteNetLib.INetEventListener` |
| `GInterface142` | `FlyingWormConsole3.LiteNetLib.INetLogger` |
| `GInterface140` | `FlyingWormConsole3.LiteNetLib.INtpEventListener` |
| `GException11` | `FlyingWormConsole3.LiteNetLib.InvalidPacketException` |
| `GClass1489` | `FlyingWormConsole3.LiteNetLib.Layers.Crc32cLayer` |
| `GClass1488` | `FlyingWormConsole3.LiteNetLib.Layers.PacketLayerBase` |
| `GClass1490` | `FlyingWormConsole3.LiteNetLib.Layers.XorEncryptLayer` |
| `GClass1473` | `FlyingWormConsole3.LiteNetLib.NatPunchModule` |
| `GClass1473+Class936` | `FlyingWormConsole3.LiteNetLib.NatPunchModule+NatIntroduceRequestPacket` |
| `GClass1473+Class937` | `FlyingWormConsole3.LiteNetLib.NatPunchModule+NatIntroduceResponsePacket` |
| `GClass1473+Class938` | `FlyingWormConsole3.LiteNetLib.NatPunchModule+NatPunchPacket` |
| `GClass1473+Struct255` | `FlyingWormConsole3.LiteNetLib.NatPunchModule+RequestEventData` |
| `GClass1473+Struct256` | `FlyingWormConsole3.LiteNetLib.NatPunchModule+SuccessEventData` |
| `Class943` | `FlyingWormConsole3.LiteNetLib.NetConnectAcceptPacket` |
| `Class942` | `FlyingWormConsole3.LiteNetLib.NetConnectRequestPacket` |
| `GClass1474` | `FlyingWormConsole3.LiteNetLib.NetConstants` |
| `GClass1475` | `FlyingWormConsole3.LiteNetLib.NetDebug` |
| `Class939` | `FlyingWormConsole3.LiteNetLib.NetEvent` |
| `GClass1476` | `FlyingWormConsole3.LiteNetLib.NetManager` |
| `GClass1476+Class940` | `FlyingWormConsole3.LiteNetLib.NetManager+IPEndPointComparer` |
| `GClass1476+GStruct149` | `FlyingWormConsole3.LiteNetLib.NetManager+NetPeerEnumerator` |
| `Class941` | `FlyingWormConsole3.LiteNetLib.NetPacket` |
| `Class944` | `FlyingWormConsole3.LiteNetLib.NetPacketPool` |
| `GClass1483` | `FlyingWormConsole3.LiteNetLib.NetPacketReader` |
| `GClass1477` | `FlyingWormConsole3.LiteNetLib.NetPeer` |
| `GClass1477+Class945` | `FlyingWormConsole3.LiteNetLib.NetPeer+IncomingFragments` |
| `Class946` | `FlyingWormConsole3.LiteNetLib.NetSocket` |
| `GClass1478` | `FlyingWormConsole3.LiteNetLib.NetStatistics` |
| `GClass1479` | `FlyingWormConsole3.LiteNetLib.NetUtils` |
| `Class934` | `FlyingWormConsole3.LiteNetLib.ReliableChannel` |
| `Class934+Struct257` | `FlyingWormConsole3.LiteNetLib.ReliableChannel+PendingPacket` |
| `Class935` | `FlyingWormConsole3.LiteNetLib.SequencedChannel` |
| `GException12` | `FlyingWormConsole3.LiteNetLib.TooBigPacketException` |
| `GClass1480` | `FlyingWormConsole3.LiteNetLib.Utils.CRC32C` |
| `GClass1481` | `FlyingWormConsole3.LiteNetLib.Utils.FastBitConverter` |
| `GClass1481+Struct258` | `FlyingWormConsole3.LiteNetLib.Utils.FastBitConverter+ConverterHelperDouble` |
| `GClass1481+Struct259` | `FlyingWormConsole3.LiteNetLib.Utils.FastBitConverter+ConverterHelperFloat` |
| `GInterface143` | `FlyingWormConsole3.LiteNetLib.Utils.INetSerializable` |
| `GException13` | `FlyingWormConsole3.LiteNetLib.Utils.InvalidTypeException` |
| `GClass1482` | `FlyingWormConsole3.LiteNetLib.Utils.NetDataReader` |
| `GClass1484` | `FlyingWormConsole3.LiteNetLib.Utils.NetDataWriter` |
| `GClass1485` | `FlyingWormConsole3.LiteNetLib.Utils.NetPacketProcessor` |
| `GClass1485+Class947` | `FlyingWormConsole3.LiteNetLib.Utils.NetPacketProcessor+HashCache` |
| `GClass1486` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer` |
| `GClass1486+Class974` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+BoolSerializer` |
| `GClass1486+Class970` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+ByteSerializer` |
| `GClass1486+Class959` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+CharSerializer` |
| `GClass1486+Class978` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+ClassInfo` |
| `GClass1486+Class979` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+CustomType` |
| `GClass1486+Class981` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+CustomTypeClass` |
| `GClass1486+Class982` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+CustomTypeStatic` |
| `GClass1486+Class980` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+CustomTypeStruct` |
| `GClass1486+Class973` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+DoubleSerializer` |
| `GClass1486+Class976` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+EnumByteSerializer` |
| `GClass1486+Class977` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+EnumIntSerializer` |
| `GClass1486+Class956` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+FastCall` |
| `GClass1486+Class963` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+FastCallClass` |
| `GClass1486+Class957` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+FastCallSpecific` |
| `GClass1486+Class958` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+FastCallSpecificAuto` |
| `GClass1486+Class961` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+FastCallStatic` |
| `GClass1486+Class962` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+FastCallStruct` |
| `GClass1486+Class972` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+FloatSerializer` |
| `GClass1486+Class964` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+IntSerializer` |
| `GClass1486+Class960` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+IPEndPointSerializer` |
| `GClass1486+Class968` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+LongSerializer` |
| `GClass1486+Class971` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+SByteSerializer` |
| `GClass1486+Class966` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+ShortSerializer` |
| `GClass1486+Class975` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+StringSerializer` |
| `GClass1486+Class965` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+UIntSerializer` |
| `GClass1486+Class969` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+ULongSerializer` |
| `GClass1486+Class967` | `FlyingWormConsole3.LiteNetLib.Utils.NetSerializer+UShortSerializer` |
| `GClass1487` | `FlyingWormConsole3.LiteNetLib.Utils.NtpPacket` |
| `Class983` | `FlyingWormConsole3.LiteNetLib.Utils.NtpRequest` |
| `GException14` | `FlyingWormConsole3.LiteNetLib.Utils.ParseException` |
| `GClass414` | `FoliageGroupPoint` |
| `GClass329` | `FollowerBigPipeLayersStrategy` |
| `GClass330` | `FollowerBirdEyeLayersStrategy` |
| `GClass58` | `FollowerBoarFigthLayer` |
| `GClass331` | `FollowerBoarLayersStrategy` |
| `GClass82` | `FollowerBoarStationaryLayer` |
| `GClass332` | `FollowerBullyLayersStrategy` |
| `GClass143` | `FollowerBullyProtectLayer` |
| `GClass564` | `FollowerClose` |
| `GClass565` | `FollowerCloseCoverBoss` |
| `GClass566` | `FollowerCloseCoverBossWide` |
| `GClass567` | `FollowerCloseCoverBossWithStop` |
| `GClass454` | `FollowerGluhar` |
| `GClass67` | `FollowerGluharAssaultFightLayer` |
| `GClass339` | `FollowerGluharAssaultLayersStrategy` |
| `GClass144` | `FollowerGluharFightProtectLayer` |
| `GClass340` | `FollowerGluharProtectLayersStrategy` |
| `GClass68` | `FollowerGluharScoutFightLayer` |
| `GClass341` | `FollowerGluharScoutLayersStrategy` |
| `GClass524` | `FollowerGluharScoutSubTactic` |
| `GClass105` | `FollowerKojaniyLayer` |
| `BossKojaniyBrainClass` | `FollowerKojaniyLayersStrategy` |
| `GClass455` | `FollowerKolontay` |
| `GClass344` | `FollowerKolontayAssaultStrategy` |
| `GClass112` | `FollowerKolontayFightProtectLayer` |
| `GClass107` | `FollowerKolontaySecurityPatrol` |
| `GClass345` | `FollowerKolontaySecutiryLayersStrategy` |
| `GClass86` | `FollowerPatrolLayer` |
| `GStruct25` | `FollowerPatrolTargetStruct` |
| `GClass148` | `FollowerSanitarFightLayer` |
| `GClass333` | `FollowerSanitarLayersStrategy` |
| `GClass568` | `FollowerScout` |
| `GClass569` | `FollowerStayAtPlace` |
| `GClass525` | `FollowerStormtrooperSubTactic` |
| `GClass439` | `FollowerTagilla` |
| `GClass334` | `FollowerTagillaLayersStrategy` |
| `GClass475` | `FollowerZryachiyEnemyChooser` |
| `GClass335` | `FollowerZryachiyLayersStrategy` |
| `GClass592` | `FollowMeRequest` |
| `GClass72` | `FollowPlayerLayerEvent` |
| `GClass87` | `ForcedForHelpAssaultLayer` |
| `GClass262` | `FriendlyTiltNode` |
| `Class41` | `FriendRequestRequestParams` |
| `GClass939` | `FrustumScanner` |
| `FrustumScanner+Struct144` | `FrustumScanner+RendererInfo` |
| `GClass134` | `FullMapPatrolLayer` |
| `GClass895` | `Gag` |
| `GClass896` | `GagSoundLimiter` |
| `GClass631` | `GainSightStat` |
| `GClass6` | `GameObjectExtensions` |
| `Class591` | `GameObjectPathFinder` |
| `Class24` | `GameStatusRequestParams` |
| `GClass823` | `GeometryUtilityExtensions` |
| `GClass263` | `GestureNode` |
| `Class52` | `GetCaptchaRequestParams` |
| `Class31` | `GetCharServersRequestParams` |
| `Class33` | `GetDialogListRequestParams` |
| `Class34` | `GetDialogMessageRequestParams` |
| `Class280` | `GetInCoverRequest` |
| `Class15` | `GetInsurancePriceRequestParams` |
| `Class55` | `GetMarketPricesRequestParams` |
| `Class54` | `GetOffersRequestParams` |
| `Class32` | `GetOtherPlayerProfileRequestParams` |
| `BotProfileDataClass` | `GetProfileDataParams` |
| `ProfileDataClass` | `GetProfileDataSide` |
| `GClass687` | `GetProfileParams` |
| `GClass89` | `GifterLayer` |
| `GClass336` | `GifterLayersStrategy` |
| `GClass192` | `GiftNode` |
| `GClass639` | `GitVersion` |
| `GClass850` | `GizmoUtils` |
| `GClass977` | `GlitchController` |
| `BotEventHandler` | `GlobalEventDispatcher` |
| `BotEventHandler+GClass692` | `GlobalEventDispatcher+PhraseDelegateInfo` |
| `GClass457` | `GluhalBossFollowers` |
| `GClass337` | `GluharAbstractLayersStrategy` |
| `GClass64` | `GluharAsKillaLayer` |
| `GClass65` | `GluharFightAbstractLayer` |
| `GClass476` | `GluharFollowerEnemyChooser` |
| `GClass90` | `GluharTargetLayer` |
| `GClass539` | `GoalTargetSearchPoint` |
| `GClass243` | `GoLeaveNode` |
| `GClass211` | `GoToBody` |
| `GClass212` | `GoToCoverPoint` |
| `GClass238` | `GoToCoverTactical` |
| `GClass214` | `GoToDoorOpen` |
| `GClass223` | `GoToEnemy` |
| `GClass225` | `GoToEnemyZigZag` |
| `GClass244` | `GoToExfiltrationPointNode` |
| `GClass215` | `GoToFollowRequest` |
| `GClass216` | `GoToGrenadeRequestNode` |
| `GClass245` | `GoToLootPointNode` |
| `GClass593` | `GoToPointRequest` |
| `GClass217` | `GoToPointRequestNode` |
| `GClass239` | `GoToPointTacticalNode` |
| `GClass218` | `GoToResrevPlace` |
| `GClass219` | `GoToSomePoint` |
| `GClass220` | `GoToSuppressionFire` |
| `GClass221` | `GoToSuppressionFireRequest` |
| `GClass1257` | `GPUInstancer.GPUInstancerAPI` |
| `GClass1258` | `GPUInstancer.GPUInstancerCell` |
| `GClass1262` | `GPUInstancer.GPUInstancerConstants` |
| `GClass1262+GClass1263` | `GPUInstancer.GPUInstancerConstants+BufferToTextureKernelPoperties` |
| `GClass1262+GClass1266` | `GPUInstancer.GPUInstancerConstants+CopyTextureKernelProperties` |
| `GClass1262+GClass1267` | `GPUInstancer.GPUInstancerConstants+GrassKernelProperties` |
| `GClass1262+GClass1269` | `GPUInstancer.GPUInstancerConstants+RuntimeModificationKernelProperties` |
| `GClass1262+GClass1265` | `GPUInstancer.GPUInstancerConstants+SetDataKernelProperties` |
| `GClass1262+GClass1268` | `GPUInstancer.GPUInstancerConstants+TreeKernelProperties` |
| `GClass1262+GClass1264` | `GPUInstancer.GPUInstancerConstants+VisibilityKernelPoperties` |
| `GClass1259` | `GPUInstancer.GPUInstancerDetailCell` |
| `GPUInstancer.GPUInstancerManager+GClass1261` | `GPUInstancer.GPUInstancerManager+GPUIThreadData` |
| `GClass1260` | `GPUInstancer.GPUInstancerPrefabCell` |
| `GClass1271` | `GPUInstancer.GPUInstancerPrototypeLOD` |
| `GClass1272` | `GPUInstancer.GPUInstancerRenderer` |
| `GClass1270` | `GPUInstancer.GPUInstancerRuntimeData` |
| `GInterface117` | `GPUInstancer.GPUInstancerShaderBindingsExtension` |
| `GClass1273` | `GPUInstancer.GPUInstancerSpatialPartitioningData` |
| `GClass1274` | `GPUInstancer.GPUInstancerUtility` |
| `GStruct115` | `GPUInstancer.GrassData` |
| `GStruct116` | `GPUInstancer.GrassPrefabData` |
| `GStruct114` | `GPUInstancer.GrassPrefabStruct` |
| `GInterface118` | `GPUInstancer.IPrefabVariationData` |
| `GClass1256` | `GPUInstancer.MouseLook` |
| `GClass1275` | `GPUInstancer.PrefabVariationData` |
| `GraphAnimation+Class90` | `GraphAnimation+InnerAnimation` |
| `GClass972` | `GraphicsHelper` |
| `GraphManager+GStruct1` | `GraphManager+GPUDataPair` |
| `GraphManager+GClass11` | `GraphManager+GPUGraphData` |
| `GraphManager+GClass12` | `GraphManager+GraphManagerInstance` |
| `GraphManager+GStruct0` | `GraphManager+Matrix4x4Wrapper` |
| `GClass581` | `GrenadeDangerPoint` |
| `GrenadeEmission+Class625` | `GrenadeEmission+PSMaterial` |
| `GrenadeFactoryClass` | `GrenadeFactory` |
| `GClass194` | `GrenadeSuicideNode` |
| `GClass195` | `GrenadeSuppressNode` |
| `GClass703` | `GripBlender` |
| `GClass88` | `GroupAttackLayer` |
| `Class27` | `GroupInviteRequestParams` |
| `GClass393` | `GroupPointInaGame` |
| `GClass875` | `GuidManager` |
| `GClass875+Struct92` | `GuidManager+GuidInfo` |
| `GClass876` | `GuidReferenceEqualityComparer` |
| `GUILabelDebugger+Class330` | `GUILabelDebugger+DebugLabel` |
| `Class682` | `GUIMaskTex` |
| `Class685` | `GUIProgressBar` |
| `Class683` | `GUIScreenTex` |
| `Class686` | `GUITextLabel` |
| `Class684` | `GUITiledTex` |
| `HairRenderer+Class690` | `HairRenderer+MeshSorter` |
| `HairRenderer+Class690+Class692` | `HairRenderer+MeshSorter+Patch` |
| `HairRenderer+Class690+Struct162` | `HairRenderer+MeshSorter+SortablePatch` |
| `HairRenderer+Class690+Class691` | `HairRenderer+MeshSorter+Triangle` |
| `GClass61` | `HalloweenHideFromInfectedLayer` |
| `GClass824` | `HardwareTime` |
| `HBAO_Core+Class618` | `HBAO_Core+MersenneTwister` |
| `HBAO_Core+GAttribute14` | `HBAO_Core+SettingsGroup` |
| `GAttribute15` | `HBAO_MinMaxSliderAttribute` |
| `GClass196` | `HealAnotherNode` |
| `GClass197` | `HealNode` |
| `GAttribute11` | `HelpAttribute` |
| `GClass940` | `Helpers` |
| `GClass151` | `HideAndSuicideLayer` |
| `GAttribute27` | `HideInInspectorButNotInDebugAttribute` |
| `Class71` | `HideoutCircleOfCultistProductionStartOperationParams` |
| `Class84` | `HideoutCustomizationApplyOperationParams` |
| `Class85` | `HideoutCustomizationSetMannequinPoseOperationParams` |
| `Class74` | `HideoutImproveAreaOperationParams` |
| `Class72` | `HideoutOperationParams` |
| `Class70` | `HideoutProductionOperationParams` |
| `Class80` | `HideoutQuickTimeEventOperationParams` |
| `Class69` | `HideoutSingleProductionStartOperationParams` |
| `Class76` | `HideoutTakeItemsFromAreaSlotsOperationParams` |
| `Class75` | `HideoutToggleAreaOperationParams` |
| `Class73` | `HideoutUpgradeCompleteOperationParams` |
| `GClass594` | `HideRequest` |
| `HighLightMesh+Class617` | `HighLightMesh+Part` |
| `GClass91` | `HoldNearBossLayer` |
| `GClass101` | `HoldOrCoverFightLayer` |
| `GClass100` | `HoldOrCoverTargetLayer` |
| `GClass278` | `HoldPosition` |
| `GClass279` | `HoldPositionByRequest` |
| `GClass595` | `HoldPositionRequest` |
| `GException4` | `HTTPNetworkException` |
| `GException5` | `HTTPParsingResponseException` |
| `GException3` | `HTTPTransportException` |
| `DataHandlerClass` | `HTTPTransportManager` |
| `DataHandlerClass+Struct29` | `HTTPTransportManager+HTTPRequestResult` |
| `DataHandlerClass+Class314` | `HTTPTransportManager+IVPoolStrategy` |
| `Class319` | `HttpWebSender` |
| `GClass914` | `HWEcho` |
| `Class46` | `HwMetricsRequestParams` |
| `GInterface13` | `IAITaskUpdatable` |
| `GInterface41` | `IAutumnMaterial` |
| `IBackendStatus` | `IBackEnd` |
| `GInterface17` | `IBackendCache` |
| `GInterface19` | `IBackendSession` |
| `GInterface8` | `IBossAskingForSuppress` |
| `GInterface6` | `IBossKojaniy` |
| `GInterface7` | `IBossSanitar` |
| `IBotCreator` | `IBotCreator` |
| `GInterface4` | `IBotDevelopService` |
| `GInterface21` | `IBotProfileCreator` |
| `IBackendInterface` | `IClientBackEnd` |
| `GInterface3` | `IClosePoint` |
| `GInterface31` | `IComponent` |
| `GInterface32` | `IComponentSystem` |
| `GClass924` | `IconCreatorBase` |
| `GClass924+Struct115` | `IconCreatorBase+IconRenderSettings` |
| `GClass931` | `IconCreatorGraphicsSettings` |
| `GClass931+Struct128` | `IconCreatorGraphicsSettings+T2DInfo` |
| `GClass928` | `IconsHash` |
| `IBot` | `ICoverSearchBot` |
| `GInterface55` | `ICullable` |
| `Interface0` | `IDebugCoverSearchGraph` |
| `GInterface56` | `IDisablerCullingObjectEditor` |
| `GClass777` | `IdlePlayerInertia` |
| `IActorEvents` | `IEventsConsumer` |
| `GInterface52` | `IFumeEmitter` |
| `GInterface50` | `IHeatHazeEmitter` |
| `IKillableLootItem` | `IKillable` |
| `GClass1466` | `IKSolverFastTrigonometric` |
| `GInterface25` | `IMoveByPath` |
| `GClass782` | `ImpostorCharacterController` |
| `GInterface53` | `IMuzzleParticlePivot` |
| `GDelegate32` | `IncomingToDestinationEventHandler` |
| `GClass998` | `IndexedList` |
| `GInterface5` | `INetPoint` |
| `GClass323` | `InfectedAssaultLayersStrategy` |
| `GClass98` | `InfectedAttackLayer` |
| `GClass467` | `InfectedBotWeaponSelector` |
| `GClass85` | `InfectedFightRequestLayer` |
| `GClass324` | `InfectedLayersStrategy` |
| `GClass499` | `InfectedLookData` |
| `GClass99` | `InfectedPatrolLayer` |
| `GClass137` | `InfectedPatrolStayAtPositionLayer` |
| `GClass140` | `InfectedPeacefulRequestLayer` |
| `Class101` | `InfectedTargetLayer` |
| `Class102` | `InfectedWaitLayer` |
| `GClass816` | `InfOrNonChecker` |
| `GClass941` | `InfoUtility` |
| `MemoryControllerClass` | `InGameMemoryManagement` |
| `GClass942` | `InputFieldExtensions` |
| `Class16` | `InsureOperationParams` |
| `GClass679` | `IntContainer` |
| `GClass995` | `InteractionAgent` |
| `Class87` | `InteractionContextHelperKeycardWrapper` |
| `Class88` | `InteractionContextHelperKeycardWrapperWrapper` |
| `InteractionReciver+Class694` | `InteractionReciver+MicroLocation` |
| `Class44` | `InterGameTransferOperationParams` |
| `GClass1301` | `Interpolation.AbstractInterpolator` |
| `GClass1306` | `Interpolation.DiscreteInterpolationStrategy` |
| `GClass1304` | `Interpolation.DynamicArray` |
| `GClass1311` | `Interpolation.EBoundTypeExtensions` |
| `GInterface120` | `Interpolation.IInterpolationStrategy` |
| `GClass1307` | `Interpolation.ImpulseInterpolationStrategy` |
| `GStruct127` | `Interpolation.InterpolateFrame` |
| `GClass1305` | `Interpolation.InterpolationFunctions` |
| `GClass1303` | `Interpolation.Interpolator` |
| `GClass1302` | `Interpolation.InterpolatorBase` |
| `GClass1310` | `Interpolation.InterpolatorConstants` |
| `GStruct128` | `Interpolation.InterpolatorSpan` |
| `GClass1308` | `Interpolation.LinearInterpolationStrategy` |
| `GClass1308+GDelegate43` | `Interpolation.LinearInterpolationStrategy+LinearInterpolationDelegate` |
| `GClass1309` | `Interpolation.PlayerRotationLinearInterpolationStrategy` |
| `GStruct130` | `Interpolation.SpanBound` |
| `TimeRangeInfoStruct` | `Interpolation.TimeBound` |
| `GStruct131` | `Interpolation.TimeStampedValue` |
| `GClass946` | `IntNumericOperations` |
| `XYCellSizeStruct` | `IntVec2` |
| `GInterface47` | `INumericOperations` |
| `GInterface9` | `IPathTargetPoint` |
| `IProductionUpdate` | `IPatrolLook` |
| `GInterface10` | `IPatrolMove` |
| `IBossLogic` | `IPatrolMoveBossStayAtPlace` |
| `GInterface28` | `IPhysical` |
| `GInterface14` | `IPointPatrol` |
| `IBotController` | `IPreProcessHandler` |
| `GInterface38` | `IProceduralAnimationStrategy` |
| `GInterface51` | `IRenderer` |
| `GInterface37` | `IRepairStrategy` |
| `GInterface39` | `IResourceIcon` |
| `GInterface42` | `ISeasonMaterial` |
| `GInterface29` | `ISeasonsController` |
| `GInterface43` | `ISeasonsMaterial` |
| `Interface2` | `ISender` |
| `GInterface40` | `IShaderReplacer` |
| `GInterface54` | `ISparksEmitter` |
| `GInterface44` | `ISpringMaterial` |
| `GInterface30` | `IStaticLoot` |
| `GInterface45` | `ISummerMaterial` |
| `GClass929` | `ItemIcon` |
| `GClass930` | `ItemIconCache` |
| `GClass926` | `ItemIconCreator` |
| `GClass926+Struct124` | `ItemIconCreator+T2DInfo` |
| `GClass707` | `ItemRotationExtensions` |
| `Class6` | `ItemsMovingRequestParams` |
| `GInterface0` | `ITODSky` |
| `GInterface22` | `ITokenGetter` |
| `GInterface12` | `IVoxelChecker` |
| `GInterface26` | `IWeaponGripPose` |
| `GInterface49` | `IWinterEventVisual` |
| `GInterface46` | `IWinterMaterial` |
| `Class3646` | `JobReflectionRegistration` |
| `JsonParserClass` | `JsonExtensions` |
| `GenericParsedJsonResponseClass` | `JsonResponse` |
| `GClass648` | `JsonResponse` |
| `GClass1386` | `JsonType.AirdropContainerData` |
| `GClass1389` | `JsonType.AirdropEventResponse` |
| `LocationExitClass` | `JsonType.BackendExitTriggerSettings` |
| `GClass1432` | `JsonType.BackendSecretExitTriggerSettings` |
| `GClass1392` | `JsonType.BackendUrls` |
| `BotPresetClass` | `JsonType.BotPreset` |
| `GClass1395` | `JsonType.ClientQueueCallback` |
| `GClass1441` | `JsonType.ClientSettingsResponse` |
| `GClass1443` | `JsonType.DamageEffectSpecification` |
| `FlatItemsDataClass` | `JsonType.FlatItem` |
| `GClass1379` | `JsonType.GameServer` |
| `GameServerClass` | `JsonType.GameServerPing` |
| `GClass1385` | `JsonType.GameSettingsData` |
| `BackendConfigClass` | `JsonType.GlobalConfigurationResponse` |
| `GClass1387` | `JsonType.HalloweenEventResponse` |
| `GClass1444` | `JsonType.HealthEffectSpecification` |
| `InsuredItemClass` | `JsonType.InsuredProfileItems` |
| `GInterface132` | `JsonType.ISpecification` |
| `GClass1436` | `JsonType.IssueTokenResponse` |
| `GClass1405` | `JsonType.ItemPreset` |
| `GClass1406` | `JsonType.ItemPresetSerializer` |
| `GClass1408` | `JsonType.ItemTemplates` |
| `GClass1433` | `JsonType.ItemToHandover` |
| `GClass1402` | `JsonType.JsonCorpse` |
| `LootItemPositionClass` | `JsonType.JsonLootItem` |
| `GClass1440` | `JsonType.LocalServerSettings` |
| `GClass1430` | `JsonType.LocationParams` |
| `GClass1400` | `JsonType.LocationResponse` |
| `LocationSettingsClass` | `JsonType.LocationSettings` |
| `LocationSettingsClass+Location+GClass1423` | `JsonType.LocationSettings+Location+AirdropParameters` |
| `LocationSettingsClass+Location+GClass1425` | `JsonType.LocationSettings+Location+BotHalloween2024` |
| `LocationSettingsClass+Location+EventsDataClass` | `JsonType.LocationSettings+Location+BotLocationEvents` |
| `LocationSettingsClass+Location+GClass1427` | `JsonType.LocationSettings+Location+CrowdAttackSpawnParam` |
| `LocationSettingsClass+Location+GClass1420` | `JsonType.LocationSettings+Location+Limit` |
| `LocationSettingsClass+Location+GClass1428` | `JsonType.LocationSettings+Location+LocationBanner` |
| `LocationSettingsClass+Location+GClass1422` | `JsonType.LocationSettings+Location+LocationBannerLocalization` |
| `LocationSettingsClass+Location+GClass1421` | `JsonType.LocationSettings+Location+LootContainer` |
| `LocationSettingsClass+Location+GClass1426` | `JsonType.LocationSettings+Location+VSRFDespawn` |
| `LocationSettingsClass+GClass1419` | `JsonType.LocationSettings+LocationInfo` |
| `LocationSettingsClass+GClass1429` | `JsonType.LocationSettings+LocationPath` |
| `LoginResponseClass` | `JsonType.LoginDataResponse` |
| `GClass1404` | `JsonType.LootData` |
| `GClass1403` | `JsonType.LootItemSerializer` |
| `GClass1398` | `JsonType.MatchingData` |
| `GClass1434` | `JsonType.MetricDataEntity` |
| `GClass1437` | `JsonType.NotifierParams` |
| `GClass1410` | `JsonType.PlayerInfo` |
| `GClass1384` | `JsonType.PlayersResponse` |
| `ProfileInsuranceClass` | `JsonType.ProfileInsurance` |
| `QuestItemClass` | `JsonType.QuestItem` |
| `GClass1393` | `JsonType.RegenerateTokenResponse` |
| `GClass1407` | `JsonType.RegisterMatchData` |
| `ResourceTypeStruct` | `JsonType.ResourceTypeInfo` |
| `GClass1388` | `JsonType.SeasonChangedEvent` |
| `GClass1435` | `JsonType.SelectProfileResponse` |
| `GStruct140` | `JsonType.ServerMapBTRSettings` |
| `GClass1381` | `JsonType.Summon` |
| `GClass1383` | `JsonType.SummonedGroup` |
| `GClass1382` | `JsonType.SummonedProfile` |
| `GClass1409` | `JsonType.TaxonomyColorExtension` |
| `GStruct138` | `JsonType.TransformSync` |
| `RaidTransitionInfoClass` | `JsonType.TransitSettings` |
| `WeatherRequestClass` | `JsonType.WeatherResponse` |
| `GClass845` | `JsonWebClient` |
| `GClass73` | `KhorovodLayer` |
| `GClass480` | `KillaEnemyChooser` |
| `GClass342` | `KillaLayersStrategy` |
| `GClass627` | `KillInfo` |
| `GClass1210` | `Koenigz.PerfectCulling.BakedIndexBuffer` |
| `GClass1204` | `Koenigz.PerfectCulling.BakeInformation` |
| `GClass1230` | `Koenigz.PerfectCulling.DefaultActiveSamplingProvider` |
| `GClass1236` | `Koenigz.PerfectCulling.EFT.BakeGroupContentFilter` |
| `GStruct110` | `Koenigz.PerfectCulling.EFT.BakeSessionParameters` |
| `GClass1242` | `Koenigz.PerfectCulling.EFT.BoundsExtensions` |
| `GDelegate39` | `Koenigz.PerfectCulling.EFT.ContentFilter` |
| `GDelegate40` | `Koenigz.PerfectCulling.EFT.CullingCellReadCallback` |
| `GClass1237` | `Koenigz.PerfectCulling.EFT.CullingGridContentSwitcher` |
| `GClass1237+Struct235` | `Koenigz.PerfectCulling.EFT.CullingGridContentSwitcher+DynamicVisibilityUpdateJob` |
| `GClass1237+Struct236` | `Koenigz.PerfectCulling.EFT.CullingGridContentSwitcher+StaticVisibilityQueueUpdateJob` |
| `GClass1237+Struct237` | `Koenigz.PerfectCulling.EFT.CullingGridContentSwitcher+StaticVisibilityTestJob` |
| `GStruct111` | `Koenigz.PerfectCulling.EFT.CullingGridVisibilityQueryResult` |
| `GClass1238` | `Koenigz.PerfectCulling.EFT.CullingGridVisibilitySampler` |
| `GClass1238+Struct238` | `Koenigz.PerfectCulling.EFT.CullingGridVisibilitySampler+TempRuntimeDecompress` |
| `GClass1249` | `Koenigz.PerfectCulling.EFT.CullingGroupDataExtensions` |
| `Class850` | `Koenigz.PerfectCulling.EFT.DeflateUtils` |
| `GInterface116` | `Koenigz.PerfectCulling.EFT.IBakedLODDelegate` |
| `GClass1234` | `Koenigz.PerfectCulling.EFT.LightParameters` |
| `Class839` | `Koenigz.PerfectCulling.EFT.LightVolumeGeometryUtility` |
| `GClass1243` | `Koenigz.PerfectCulling.EFT.ListExtensions` |
| `GClass1244` | `Koenigz.PerfectCulling.EFT.LODGroupCameraExtensions` |
| `GClass1240` | `Koenigz.PerfectCulling.EFT.LODGroupExtensions` |
| `GClass1250` | `Koenigz.PerfectCulling.EFT.PackedCullingGridData` |
| `GClass1250+GClass1251` | `Koenigz.PerfectCulling.EFT.PackedCullingGridData+IndexDataDecompressor` |
| `GClass1250+GStruct112` | `Koenigz.PerfectCulling.EFT.PackedCullingGridData+SerializedOrientedBounds` |
| `GClass1252` | `Koenigz.PerfectCulling.EFT.PackedCullingGroupData` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Class858` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+CameraState` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Class857` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+GridTaskParameters` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Struct246` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+OverlapCellJob` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Struct247` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+RecomputeVisibilityJob` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Struct245` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+SnapFillJob` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Struct244` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+SnapUpdateJob` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Class855` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+WorkItem` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Class856` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+WorkJob` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Class856+Struct242` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+WorkJob+PrepareVolumesJob` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Class856+Struct243` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+WorkJob+UpdateVisibilityJob` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+Class854` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneSampler+WorkThreadParams` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneVolume+GClass1254` | `Koenigz.PerfectCulling.EFT.PerfectCullingCrossSceneVolume+RuntimeCrossGroupVolume` |
| `GException8` | `Koenigz.PerfectCulling.EFT.PerfectCullingException` |
| `GClass712` | `Koenigz.PerfectCulling.EFT.PerfectCullingLog` |
| `GClass1245` | `Koenigz.PerfectCulling.EFT.PerfectCullingSamplingBuffer` |
| `Koenigz.PerfectCulling.EFT.PerfectCullingSamplingBuffer+GClass1246` | `Koenigz.PerfectCulling.EFT.PerfectCullingSamplingBuffer+AllocationData` |
| `GClass1239` | `Koenigz.PerfectCulling.EFT.PerfectCullingSharedOccluderGenerator` |
| `GClass1255` | `Koenigz.PerfectCulling.EFT.RaycastHitExtensions` |
| `GClass1255+Class863` | `Koenigz.PerfectCulling.EFT.RaycastHitExtensions+ReflectionData` |
| `GClass1247` | `Koenigz.PerfectCulling.EFT.StreamingVolumeBakeDataGrid` |
| `GClass1248` | `Koenigz.PerfectCulling.EFT.StreamingVolumeBakeDataUtil` |
| `GStruct113` | `Koenigz.PerfectCulling.EFT.TemporaryCullingCellData` |
| `GClass1241` | `Koenigz.PerfectCulling.EFT.TreeProxyGenerator` |
| `GClass1211` | `Koenigz.PerfectCulling.ExchangeBuffer` |
| `VisibilityIndicesClass` | `Koenigz.PerfectCulling.FastArray` |
| `GInterface115` | `Koenigz.PerfectCulling.IActiveSamplingProvider` |
| `GInterface111` | `Koenigz.PerfectCulling.IBakingBehaviour` |
| `GClass1209` | `Koenigz.PerfectCulling.IndexBuffer` |
| `GClass1209+Class824` | `Koenigz.PerfectCulling.IndexBuffer+BufferIterator` |
| `GDelegate38` | `Koenigz.PerfectCulling.IndexConvertDelegate` |
| `GClass1205` | `Koenigz.PerfectCulling.IndexOnlyObjectSampleSet` |
| `GClass1206` | `Koenigz.PerfectCulling.IndexOnlyObjectSampleSetFactory` |
| `GClass1207` | `Koenigz.PerfectCulling.IndexOnlySamplingTaskResult` |
| `GClass1233` | `Koenigz.PerfectCulling.IO.AdaptiveBVH` |
| `GClass1231` | `Koenigz.PerfectCulling.IO.BitStreamReader` |
| `GClass1232` | `Koenigz.PerfectCulling.IO.BitStreamWriter` |
| `GInterface112` | `Koenigz.PerfectCulling.IObjectSampleSet` |
| `GInterface113` | `Koenigz.PerfectCulling.IObjectSampleSetFactory` |
| `GInterface114` | `Koenigz.PerfectCulling.ISamplingTaskResult` |
| `GClass1223` | `Koenigz.PerfectCulling.LockableQueue` |
| `GClass1212` | `Koenigz.PerfectCulling.PerfectCullingBakeAllocator` |
| `GClass1213` | `Koenigz.PerfectCulling.PerfectCullingBakeGroupComparer` |
| `GClass1216` | `Koenigz.PerfectCulling.PerfectCullingBakingManager` |
| `GClass1224` | `Koenigz.PerfectCulling.PerfectCullingConstants` |
| `GClass1225` | `Koenigz.PerfectCulling.PerfectCullingMath` |
| `GClass1226` | `Koenigz.PerfectCulling.PerfectCullingMeshSplitting` |
| `GClass1226+Class828` | `Koenigz.PerfectCulling.PerfectCullingMeshSplitting+SplitMeshData` |
| `GClass1226+Class829` | `Koenigz.PerfectCulling.PerfectCullingMeshSplitting+TriangleData` |
| `GClass1226+Class830` | `Koenigz.PerfectCulling.PerfectCullingMeshSplitting+TupleComparer` |
| `GClass1217` | `Koenigz.PerfectCulling.PerfectCullingSceneColor` |
| `GClass1227` | `Koenigz.PerfectCulling.PerfectCullingTemp` |
| `GClass1228` | `Koenigz.PerfectCulling.PerfectCullingUtil` |
| `GClass1218` | `Koenigz.PerfectCulling.PixelDataObjectSampleSet` |
| `GClass1219` | `Koenigz.PerfectCulling.PixelDataSamplingTaskResult` |
| `GClass1220` | `Koenigz.PerfectCulling.PixelObjectSampleSetFactory` |
| `GClass1229` | `Koenigz.PerfectCulling.RendererExtensions` |
| `GClass1221` | `Koenigz.PerfectCulling.SamplingTask` |
| `GStruct109` | `Koenigz.PerfectCulling.SamplingTaskCellResult` |
| `GClass106` | `KojaniyTargetLogicLayer` |
| `GClass108` | `KolontayAbstractFightLayer` |
| `GClass113` | `KolontayAssaultProtectLayer` |
| `GClass114` | `KolontayEnemyNoAtMyHouse` |
| `GClass115` | `KolontayForceAttackLayer` |
| `GClass92` | `KolontayHoldNearBossLayer` |
| `GClass116` | `KolontayTargetLayer` |
| `LActionState+GClass915` | `LActionState+LActionStateContext` |
| `GClass401` | `LastCoversSearchData` |
| `LayerMaskClass` | `LayersMaskController` |
| `GClass198` | `LayNode` |
| `Class103` | `LeaveMapLayer` |
| `GClass834` | `ListPool` |
| `GClass1889` | `LocalBotSpawner` |
| `GClass688` | `LocalDebugProfileDataParams` |
| `GClass733` | `LogConfigurator` |
| `GClass851` | `LogExtensions` |
| `LoggerFactoryClass` | `LoggerFactoryClass` |
| `LoggerFactoryClass+Class401` | `LoggerFactoryClass+AbstractILogger` |
| `LoggerFactoryClass+Class401+Class1814` | `LoggerFactoryClass+AbstractILogger+Scope` |
| `LoggerFactoryClass+Class402` | `LoggerFactoryClass+LoggerT` |
| `GClass2069` | `LogLevelExtensions` |
| `LookAllDataClass` | `LookAllData` |
| `GClass395` | `LookAround` |
| `GClass199` | `LookoutBody` |
| `GClass609` | `LookSensorShootPosition` |
| `GClass610` | `LookSensorShootPositionBtr` |
| `GClass826` | `LoopedQueue` |
| `GClass117` | `LootPatrolLayer` |
| `GClass118` | `MalfunctionLayer` |
| `GClass844` | `ManualCoroutine` |
| `MarginsStruct` | `MarginsRect` |
| `GClass40` | `MarksmanEnemyLayer` |
| `GClass346` | `MarksmanLayersStrategy` |
| `GClass119` | `MarksmanTargetLayer` |
| `Class82` | `MarkSurveyAsViewedRequestParams` |
| `Class78` | `MatchEndRequestParams` |
| `GClass935` | `MaterialExtension` |
| `GClass869` | `MathUtil` |
| `MBOIT_Scattering+Struct0` | `MBOIT_Scattering+MboitScatterParameters` |
| `GClass759` | `MeleeAnimator` |
| `GClass827` | `MemoryInfo` |
| `GClass827+GStruct50` | `MemoryInfo+ProcessMemoryCounters` |
| `MgBelt+GClass913` | `MgBelt+WaveInfo` |
| `MineDirectional+GClass704` | `MineDirectional+MineDirectionSerializer` |
| `GClass705` | `MineDirectionalManager` |
| `GClass799` | `MinMaxAverageDouble` |
| `GClass800` | `MinMaxAverageFloat` |
| `GAttribute6` | `MinMaxVec2Attribute` |
| `GAttribute13` | `MinValueAttribute` |
| `GClass1294` | `Mirror.AccurateInterval` |
| `GClass1295` | `Mirror.Compression` |
| `GClass1296` | `Mirror.ConcurrentPool` |
| `GClass1297` | `Mirror.DeltaCompression` |
| `GStruct124` | `Mirror.ExponentialMovingAverage` |
| `GClass1298` | `Mirror.Extensions` |
| `GClass1299` | `Mirror.Mathd` |
| `EFTReaderClass` | `Mirror.NetworkReader` |
| `GClass1285` | `Mirror.NetworkReaderExtensions` |
| `PacketToEFTReaderAbstractClass` | `Mirror.NetworkReaderPool` |
| `GClass1283` | `Mirror.NetworkReaderPooled` |
| `EFTWriterClass` | `Mirror.NetworkWriter` |
| `GClass1290` | `Mirror.NetworkWriterExtensions` |
| `GClass1290+Struct251` | `Mirror.NetworkWriterExtensions+UIntDouble` |
| `GClass1291` | `Mirror.NetworkWriterPool` |
| `GClass1288` | `Mirror.NetworkWriterPooled` |
| `GClass1300` | `Mirror.Pool` |
| `GClass1284` | `Mirror.Reader` |
| `GInterface119` | `Mirror.Snapshot` |
| `GClass1293` | `Mirror.SnapshotInterpolation` |
| `GClass1292` | `Mirror.SortedListExtensions` |
| `GStruct125` | `Mirror.TimeSample` |
| `GStruct119` | `Mirror.TimeSnapshot` |
| `GStruct120` | `Mirror.Vector2Byte` |
| `GStruct121` | `Mirror.Vector2Short` |
| `GStruct122` | `Mirror.Vector3Byte` |
| `GStruct126` | `Mirror.Vector3Long` |
| `GStruct123` | `Mirror.Vector3Short` |
| `GClass1289` | `Mirror.Writer` |
| `GClass1279` | `MirzaBeig.Scripting.Effects.CreateLUT` |
| `MirzaBeig.Scripting.Effects.ParticleFlocking+GStruct118` | `MirzaBeig.Scripting.Effects.ParticleFlocking+Voxel` |
| `GClass7` | `MonoBehaviourExtensions` |
| `GClass978` | `MotionBlurController` |
| `GClass912` | `MountingStrategy` |
| `GClass912+Struct107` | `MountingStrategy+StoredWorldPosition` |
| `GClass200` | `MoveNode` |
| `GClass210` | `MoveStealthy` |
| `GClass31` | `MoveToCoverActionResultData` |
| `GClass222` | `MoveToEnemy` |
| `GClass224` | `MoveToEnemyZigZag` |
| `GClass828` | `MovingAverage` |
| `GClass831` | `MovingMaximum` |
| `GClass1024` | `MultiFlare.BatchCollection` |
| `GClass1025` | `MultiFlare.CameraRenderer` |
| `GClass1027` | `MultiFlare.FlareBatch` |
| `GClass1031` | `MultiFlare.FlareBlindnessController` |
| `GStruct74` | `MultiFlare.FlareData` |
| `GStruct75` | `MultiFlare.FlareGpuData` |
| `GStruct76` | `MultiFlare.FlareLightData` |
| `GClass1023` | `MultiFlare.FlareManager` |
| `GClass1029` | `MultiFlare.FlareRenderer` |
| `GClass1028` | `MultiFlare.FlashLightBatch` |
| `GClass1026` | `MultiFlare.GameCameraRenderer` |
| `GStruct77` | `MultiFlare.GrabPositionsJob` |
| `GInterface58` | `MultiFlare.IFlareBatch` |
| `GInterface59` | `MultiFlare.IFlareRenderer` |
| `GInterface60` | `MultiFlare.ILightStorage` |
| `GClass1030` | `MultiFlare.LightStorage` |
| `GStruct78` | `MultiFlare.ManageFlareOverlap` |
| `GStruct79` | `MultiFlare.PrepareGpuData` |
| `GClass622` | `MultiKeyDictionary` |
| `Class36` | `MutePlayerRequestParams` |
| `MuzzleParticleContainer+GStruct68` | `MuzzleParticleContainer+MuzzleParticlePlayerData` |
| `MuzzleSmoke+Class651` | `MuzzleSmoke+Point` |
| `GClass856` | `MyExtensions` |
| `GClass832` | `NativeArrayExtensions` |
| `GClass416` | `NavGraphAStarDebugger` |
| `GClass415` | `NavGraphAStarDebuggerStepData` |
| `GClass417` | `NavGraphBuilderCachePathes` |
| `ReachableClass` | `NavGraphEditorPointReachable` |
| `GClass390` | `NavGraphFindDebugSerializer` |
| `GClass420` | `NavGraphWayAstar` |
| `GClass421` | `NavGraphWayCalc` |
| `GClass636` | `NavMeshCutController` |
| `GClass371` | `NavMeshPathExtension` |
| `GClass391` | `NearCoverGroupsCache` |
| `GClass368` | `NetCalcSortedList` |
| `GClass21` | `NetMeasurer` |
| `ClientNetworkGrenadeFactoryClass` | `NetworkClientGrenadeFactory` |
| `GClass727` | `NetworkConnectionLogger` |
| `GClass726` | `NetworkMessagesLogger` |
| `GClass717` | `NetworkSendMessagesLogger` |
| `GClass582` | `NeutralSound` |
| `Class21` | `NicknameRequestParams` |
| `GClass943` | `NonAllocLineCaster` |
| `GClass518` | `NoSuppressData` |
| `GStruct32` | `OBB` |
| `GClass739` | `OBBTrigger` |
| `Class100` | `ObdolbosEventFightLayer` |
| `GClass74` | `ObdolbosEventPatrolLayer` |
| `GClass325` | `ObdolbosLayersStrategy` |
| `GClass835` | `ObjectPool` |
| `GClass833` | `ObjectVisibility` |
| `GClass833+GStruct51` | `ObjectVisibility+Settings` |
| `ObservedCullingManager+Struct165` | `ObservedCullingManager+CullingItem` |
| `ObservedCullingManager+Struct164` | `ObservedCullingManager+ObservedCullingJob` |
| `GClass999` | `ObservedCullingObject` |
| `GClass762` | `ObservedPlayerFrame` |
| `GClass764` | `ObservedPlayerFrameExtension` |
| `GClass921` | `ObservedPlayerHealthController` |
| `LocalPlayerCullingHandlerClass` | `OfflinePlayerCulling` |
| `GClass242` | `OneMeleeAttackNode` |
| `GDelegate7` | `OnEnemySounHeardedDelegate` |
| `GClass1890` | `OnlineBotSpawner` |
| `GDelegate6` | `OnReportEnemyDelegate` |
| `GDelegate0` | `OnSearchPointEnd` |
| `GDelegate1` | `OnSearchPointInner` |
| `GClass596` | `OpenDoorRequest` |
| `GClass259` | `OpenDoorRequestDecision` |
| `Class86` | `OpenRandomLootContainerOperationParams` |
| `GClass740` | `OverlapBoxCollider` |
| `GStruct33` | `OverlapBoxJob` |
| `GStruct33+GClass741` | `OverlapBoxJob+OverlapBoxJobParameters` |
| `GClass742` | `OverlapBoxSearcher` |
| `GClass742+GStruct34` | `OverlapBoxSearcher+ScheduledExecute` |
| `GClass375` | `PairSegmentsWithAng` |
| `GClass120` | `PanicLayer` |
| `GClass260` | `PanicSitNode` |
| `GClass121` | `PartisanBadSavageLayer` |
| `GClass122` | `PartisanBasePlantingLayer` |
| `GClass125` | `PartisanFightBaseLayer` |
| `GClass126` | `PartisanFightLayer` |
| `GClass127` | `PartisanFightManyLayer` |
| `GClass129` | `PartisanPersuitLayer` |
| `GClass123` | `PartisanPlantingTargetLayer` |
| `GClass124` | `PartisanPlantingTargetManyLayer` |
| `GClass130` | `PartisanStalkeringLayer` |
| `GClass131` | `PartisanStalkeringManyLayer` |
| `GClass128` | `PartisanZeroSavageLayer` |
| `GClass544` | `PartLineOfSightCheckResult` |
| `GClass132` | `PatrolActionsLayer` |
| `GClass133` | `PatrolAssaultLayer` |
| `GClass246` | `PatrolAxeTarget` |
| `GClass264` | `PatrolDropItemsNode` |
| `GClass563` | `PatrolFollowerAIBase` |
| `GClass505` | `PatrolFollowerPlayer` |
| `GClass247` | `PatrollingAlternative` |
| `GClass248` | `PatrollingFollower` |
| `GClass249` | `PatrollingFollowerPlayer` |
| `GClass506` | `PatrolLookAroundFollower` |
| `GClass508` | `PatrolLookAroundNoNextPoint` |
| `GClass507` | `PatrolLookAroundSimple` |
| `GClass511` | `PatrolMoveBossCovers` |
| `GClass512` | `PatrolMoveBossCoversStay` |
| `GClass513` | `PatrolMoveBossStayAtPlace` |
| `GClass514` | `PatrolMoveRoundBoss` |
| `GClass510` | `PatrolMoveSimple` |
| `GClass509` | `PatrolPathControl` |
| `GClass555` | `PatrolPointChooseByName` |
| `GClass556` | `PatrolPointChooseGluhar` |
| `GClass557` | `PatrolPointChooserBoss` |
| `GClass558` | `PatrolPointChooserBossGluhar` |
| `GClass559` | `PatrolPointChooserBossKilla` |
| `GClass560` | `PatrolPointChooserByData` |
| `GClass561` | `PatrolPointChooserFollower` |
| `GClass562` | `PatrolPointChooserGroup` |
| `GDelegate4` | `PatrolPointFilterDelegate` |
| `GClass250` | `PatrolSimpleNode` |
| `GClass135` | `PatrolStayAtPositionLayer` |
| `GClass138` | `PatrolStayAtPositionLayerWithIndoor` |
| `GClass265` | `PatrolTakeItemsNode` |
| `GClass15` | `PauseReasonExtension` |
| `GClass877` | `pc_renderer` |
| `GClass877+GStruct57` | `pc_renderer+NativeMeshData` |
| `GClass877+GStruct59` | `pc_renderer+NativeMeshRenderers` |
| `GClass877+GStruct58` | `pc_renderer+NativeRendererTransformation` |
| `GClass877+GClass878` | `pc_renderer+pc_renderer_settings` |
| `GClass347` | `PeacefullZryachiyEventLayersStrategy` |
| `GClass266` | `PeacefulNode` |
| `GClass139` | `PeacefulRequestLayer` |
| `GClass267` | `PeaceHardAimNode` |
| `GClass268` | `PeaceLookNode` |
| `GClass93` | `PeaceZryachiyPatrol` |
| `GClass640` | `PerformanceLogger` |
| `GClass814` | `PerformanceTestLogger` |
| `GClass814+Class389` | `PerformanceTestLogger+Logger` |
| `GClass1003` | `PhotoManager` |
| `PlayerPhysicalClass` | `Physical` |
| `PlayerPhysicalClass+GClass773` | `Physical+Consumption` |
| `BasePhysicalClass` | `PhysicalBase` |
| `BasePhysicalClass+PhysicalStateStruct` | `PhysicalBase+StaminaStruct` |
| `EFTPhysicsClass` | `PhysicsExtensions` |
| `EFTPhysicsClass+Class421` | `PhysicsExtensions+Overseer` |
| `EFTPhysicsClass+SyncTransformsClass` | `PhysicsExtensions+Simulation` |
| `EFTPhysicsClass+GClass745` | `PhysicsExtensions+UpdateController` |
| `EFTPhysicsClass+GClass745+GClass746` | `PhysicsExtensions+UpdateController+Quality` |
| `EFTPhysicsClass+GClass745+GStruct35` | `PhysicsExtensions+UpdateController+RigidbodyData` |
| `EFTPhysicsClass+GClass747` | `PhysicsExtensions+Worlds` |
| `EFTPhysicsClass+GClass747+GClass748` | `PhysicsExtensions+Worlds+AwaitMultiWorldsOverlapBoxAsyncData` |
| `EFTPhysicsClass+GClass747+GClass750` | `PhysicsExtensions+Worlds+DefaultWorld` |
| `EFTPhysicsClass+GClass747+GClass751` | `PhysicsExtensions+Worlds+DisablerCullingObjectTriggersWorld` |
| `EFTPhysicsClass+GClass747+GClass752` | `PhysicsExtensions+Worlds+VolumePropagationAndEnvironmentSwitcherTriggersWorld` |
| `EFTPhysicsClass+GClass747+GClass749` | `PhysicsExtensions+Worlds+World` |
| `GClass753` | `PhysicsMath` |
| `GClass979` | `PixelationController` |
| `GClass553` | `PlaceTargetPoint` |
| `GDelegate3` | `PlantedAIMineDelegate` |
| `GClass272` | `PlantMineNode` |
| `GClass642` | `PlayerAlertState` |
| `PlayerBones+GStruct41` | `PlayerBones+TransitStruct` |
| `GClass778` | `PlayerCharacterController` |
| `GClass922` | `PlayerClippingRules` |
| `GClass781` | `PlayerConstants` |
| `GClass204` | `PlayerFollowNode` |
| `GClass761` | `PlayerFrame` |
| `GClass763` | `PlayerFrameExtension` |
| `GClass932` | `PlayerIconRequest` |
| `SonicInfoClass` | `PlayerIcons.PlayerIconCreatorMaterialChanger` |
| `GClass1041` | `PlayerIcons.PlayerIconCreatorModelView` |
| `GClass660` | `PlayerLoopSystemHelpers` |
| `PlayerMotor+GClass765` | `PlayerMotor+Constants` |
| `GClass785` | `PlayerSpiritCharacterController` |
| `GClass1335` | `PlayerStateContainerBehaviourConverter` |
| `GClass766` | `PlayerStateInfo` |
| `GClass767` | `PlayerStateInfoExtension` |
| `GClass899` | `PlayerVoiceLoader` |
| `GClass899+Struct99` | `PlayerVoiceLoader+BringVoice` |
| `GClass589` | `PlayerVoxelChecker` |
| `GClass428` | `PlayerWarnData` |
| `GClass141` | `PmcBearLayer` |
| `GClass348` | `PmcBearLayersStrategy` |
| `GClass142` | `PmcLayer` |
| `GClass349` | `PmcLayersStrategy` |
| `Class104` | `PmcPveTargetLayer` |
| `GClass145` | `PmcUsecLayer` |
| `GClass350` | `PmcUsecLayersStrategy` |
| `GClass366` | `Point` |
| `GClass392` | `PointAtCounter` |
| `GClass583` | `PointForCheck` |
| `GClass394` | `PointsSearchHelper` |
| `GClass606` | `PointToCheck` |
| `GClass376` | `PointWithSegment` |
| `GClass944` | `PoolWithoutAlloc` |
| `GClass784` | `PoseTypeExtensions` |
| `GClass682` | `PositionNote` |
| `GClass422` | `PriorityQueue` |
| `GClass422+Struct8` | `PriorityQueue+InnerNote` |
| `GClass945` | `ProfileDataContainerExtension` |
| `GClass14` | `ProfilerHelper` |
| `GClass16` | `ProfilerSpikeAnalyzer` |
| `GClass16+Class97` | `ProfilerSpikeAnalyzer+RecorderData` |
| `GClass16+Struct5` | `ProfilerSpikeAnalyzer+SpikeFile` |
| `Class25` | `ProfileSettingsRequestParams` |
| `ProfileStats+GClass787` | `ProfileStats+StatInfo` |
| `GClass789` | `ProfileStatsSeparator` |
| `GStruct2` | `ProfilingRecorderConfig` |
| `GClass948` | `ProgressAggregator` |
| `Prone2StandStateClass` | `Prone2StandState` |
| `ProneAIMoveStateClass` | `ProneMovePlayerStateAI` |
| `Class105` | `PursuitLayer` |
| `GClass41` | `PushAndSuppressLayer` |
| `GClass0` | `qb_Point` |
| `GClass1` | `qb_RaycastResult` |
| `GClass2` | `qb_Stroke` |
| `GClass3` | `qb_TemplateSignature` |
| `GClass961` | `QuadNode` |
| `GClass962` | `Quadrant` |
| `GClass965` | `QuadTree` |
| `Class63` | `QuestCompleteOperationParams` |
| `Class64` | `QuestHandoverOperationParams` |
| `Class59` | `QuestListRequestParams` |
| `GClass731` | `QuestLogger` |
| `Class60` | `QuestOperationParams` |
| `GClass836` | `QueueSum` |
| `Class47` | `RagFairAddOfferOperationParams` |
| `Class50` | `RagFairBuyOfferOperationParams` |
| `Class51` | `RagFairBuyOfferOperationParamsOffer` |
| `Class48` | `RagFairRemoveOfferOperationParams` |
| `Class49` | `RagFairRenewOfferOperationParams` |
| `GClass985` | `RainCondensatorHelper` |
| `RainController+Class668` | `RainController+AbstractState` |
| `RainController+Class669` | `RainController+AbstractStateSummer` |
| `RainController+Class675` | `RainController+AbstractStateWinter` |
| `RainController+Class673` | `RainController+StateAutumn` |
| `RainController+Class674` | `RainController+StateAutumnLate` |
| `RainController+Class672` | `RainController+StateSpring` |
| `RainController+Class671` | `RainController+StateSpringEarly` |
| `RainController+Class670` | `RainController+StateSummer` |
| `RainController+Class676` | `RainController+StateWinter` |
| `RainController+Class677` | `RainController+StateWinterStorm` |
| `RainController+Class678` | `RainController+StateWinterStormReconnect` |
| `GClass986` | `RainScreenDropsPlacer` |
| `GClass8` | `RandomExtensions` |
| `GClass837` | `RangeTrend` |
| `GClass477` | `RavangeZryachiyEnemiesChooser` |
| `GClass94` | `RavangeZryachiyEnemy` |
| `GClass351` | `RavangeZryachiyEventLayersStrategy` |
| `GStruct82` | `RaycastJobs.RaycastAllCommand` |
| `GStruct82+Struct181` | `RaycastJobs.RaycastAllCommand+CombineResultsJob` |
| `GStruct82+Struct180` | `RaycastJobs.RaycastAllCommand+CreateCommandsJob` |
| `GStruct82+Struct182` | `RaycastJobs.RaycastAllCommand+RestoreDistancesJob` |
| `GStruct83` | `RaycastJobs.SpherecastAllCommand` |
| `GStruct83+Struct184` | `RaycastJobs.SpherecastAllCommand+CombineResultsJob` |
| `GStruct83+Struct183` | `RaycastJobs.SpherecastAllCommand+CreateCommandsJob` |
| `GStruct83+Struct185` | `RaycastJobs.SpherecastAllCommand+RestoreDistancesJob` |
| `Class38` | `ReadDialogsRequestParams` |
| `Class45` | `ReadEncyclopediaOperationParams` |
| `GDelegate31` | `ReadyToDepartureEventHandler` |
| `Class68` | `RecordShootingRangePointsOperationParams` |
| `GClass960` | `RectExtensions` |
| `GClass949` | `RectTransformExtensions` |
| `Class58` | `RedeemProfileRewardOperationParams` |
| `GClass24` | `ReleaseProfilerSpikeAnalyser` |
| `GClass24+GStruct6` | `ReleaseProfilerSpikeAnalyser+SpikeSample` |
| `Class39` | `RemoveFromFriendsListRequestParams` |
| `Class28` | `RemovePlayerFromGroupRequestParams` |
| `GClass860` | `RendererExtensions` |
| `Class57` | `RepairKitOperationParams` |
| `GClass904` | `RepairKitsCollection` |
| `GClass273` | `RepairMalfunctionNode` |
| `Class61` | `RepeatableQuestAcceptOperationParams` |
| `Class62` | `RepeatableQuestCompleteOperationParams` |
| `BotReportsDataClass` | `ReportAiData` |
| `GDelegate8` | `RequestFailHandler` |
| `GClass632` | `RequestsStats` |
| `GClass650` | `ResponseData` |
| `Class77` | `RestoreHealthOperationParams` |
| `GClass754` | `RigidbodyExtentions` |
| `RoadSplineGenerator+GStruct61` | `RoadSplineGenerator+Point` |
| `GClass934` | `RoadSplineMaterialsPool` |
| `RoadsTerrainAligner+Class575` | `RoadsTerrainAligner+Triangle` |
| `GClass1459` | `RootMotion.AxisTools` |
| `GClass1460` | `RootMotion.BipedNaming` |
| `RootMotion.BipedReferences+GStruct144` | `RootMotion.BipedReferences+AutoDetectParams` |
| `RootMotion.Demos.CharacterThirdPerson+GStruct145` | `RootMotion.Demos.CharacterThirdPerson+AnimState` |
| `RootMotion.Demos.UserControlThirdPerson+GStruct146` | `RootMotion.Demos.UserControlThirdPerson+State` |
| `RootMotion.FinalIK.GrounderQuadruped+GStruct147` | `RootMotion.FinalIK.GrounderQuadruped+Foot` |
| `RootMotion.FinalIK.RagdollUtility+GClass1468` | `RootMotion.FinalIK.RagdollUtility+Child` |
| `RootMotion.FinalIK.RagdollUtility+GClass1467` | `RootMotion.FinalIK.RagdollUtility+Rigidbone` |
| `GClass1461` | `RootMotion.Hierarchy` |
| `GClass1462` | `RootMotion.Interp` |
| `GAttribute20` | `RootMotion.LargeHeader` |
| `GClass1458` | `RootMotion.LayerMaskExtensions` |
| `GClass1463` | `RootMotion.QuaTools` |
| `GClass1464` | `RootMotion.V3Tools` |
| `GClass1465` | `RootMotion.Warning` |
| `GClass152` | `RunAndHideFightLayer` |
| `GClass230` | `RunAwayArtillery` |
| `GClass231` | `RunAwayBTR` |
| `GClass232` | `RunAwayGrenade` |
| `GClass1011` | `RuntimeInspector.DWindow` |
| `GClass1011+GStruct72` | `RuntimeInspector.DWindow+FieldObject` |
| `GClass1012` | `RuntimeInspector.EditorGUIImitation` |
| `GClass1012+Class709` | `RuntimeInspector.EditorGUIImitation+SliderState` |
| `GClass1013` | `RuntimeInspector.N` |
| `GClass1014` | `RuntimeInspector.NArray` |
| `GClass1015` | `RuntimeInspector.NClass` |
| `GClass1016` | `RuntimeInspector.NList` |
| `GClass1017` | `RuntimeInspector.NValue` |
| `GClass1018` | `RuntimeInspector.ValueViewer` |
| `GClass1019` | `RuntimeInspector.ViewInfo` |
| `GClass228` | `RunToCover` |
| `GClass229` | `RunToCoverZigZag` |
| `GClass227` | `RunToEnemy` |
| `GClass226` | `RunToEnemyZigZag` |
| `GClass234` | `RunToStationary` |
| `GClass233` | `RunToSuppressionFire` |
| `GClass527` | `SanitarBotRandomPlanItemDropper` |
| `GClass487` | `SanitarFirstAid` |
| `GClass427` | `SanitarHealTarget` |
| `GClass490` | `SanitarSurgialKit` |
| `GClass149` | `SanitarTargetLayer` |
| `Class65` | `SaveEquipmentBuildOperationParams` |
| `GClass900` | `SavWav` |
| `GClass696` | `ScavsTogetherDebug` |
| `GClass696+GClass697` | `ScavsTogetherDebug+ScavsTogetherDebugPointCheck` |
| `GClass936` | `ScreenLocker` |
| `Screenshot360+Class596` | `Screenshot360+HiddenGO` |
| `GAttribute8` | `ScriptOrder` |
| `GClass661` | `ScriptOrders` |
| `GClass235` | `SearchInvisibleEnemy` |
| `Class443` | `Seasons` |
| `Class443+Class388` | `Seasons+SeasonsLogger` |
| `Class444` | `SeasonsController` |
| `Class444+Class445` | `SeasonsController+AbstractState` |
| `Class444+Interface3` | `SeasonsController+IState` |
| `Class444+Class449` | `SeasonsController+StateAutumn` |
| `Class444+Class450` | `SeasonsController+StateAutumnLate` |
| `Class444+Class455` | `SeasonsController+StateFactoryDefault` |
| `Class444+Class456` | `SeasonsController+StateFactoryWinter` |
| `Class444+Class447` | `SeasonsController+StateSpring` |
| `Class444+Class448` | `SeasonsController+StateSpringEarly` |
| `Class444+Class451` | `SeasonsController+StateStorm` |
| `Class444+Class452` | `SeasonsController+StateStormReconnect` |
| `Class444+Class446` | `SeasonsController+StateSummer` |
| `Class444+Class454` | `SeasonsController+StateUnknown` |
| `Class444+Class453` | `SeasonsController+StateWinter` |
| `GClass352` | `SectactPriestEventStrategy` |
| `GClass359` | `SectantCoreLayersStrategy` |
| `GClass153` | `SectantMeleeLayer` |
| `GClass353` | `SectantOniLayersStrategy` |
| `GClass361` | `SectantPredvestnikLayersStrategy` |
| `GClass362` | `SectantPriestLayersStrategy` |
| `GClass96` | `SectantPriestSummoning` |
| `GClass363` | `SectantPrizrakLayersStrategy` |
| `GClass154` | `SectantRunAndStrikeLayer` |
| `GClass95` | `SectantSummoningBase` |
| `GClass155` | `SectantSupSootLayer` |
| `GClass360` | `SectantWarriorLayersStrategy` |
| `GClass365` | `SegmentPoints` |
| `GClass662` | `SelfInitializedSingleton` |
| `Class12` | `SellAllFromSavageOperationParams` |
| `Class18` | `SendDisconnectEventRequestParams` |
| `GClass651` | `SenderHelper` |
| `GClass651+GClass711` | `SenderHelper+SenderLogger` |
| `Class40` | `SendFriendRequestRequestParams` |
| `Class26` | `SendGroupInviteRequestParams` |
| `Class43` | `SendMessageRequestParams` |
| `Class30` | `SendReportRequestParams` |
| `LegacyParamsStruct` | `SendRequest` |
| `GClass373` | `SerializablePathExtension` |
| `GClass881` | `SerializationExtensions` |
| `GClass689` | `ServerDebugProfileDataParams` |
| `Class83` | `SetFavoriteItemsOperationParams` |
| `Class66` | `SetVariableValueOperationParams` |
| `GClass933` | `ShaderReplacer` |
| `GClass933+Struct133` | `ShaderReplacer+MaterialPath` |
| `GClass872` | `ShadersFinder` |
| `GClass274` | `ShallThrowGrenade` |
| `GClass275` | `Shoot` |
| `GClass354` | `ShooterBTRLayersStrategy` |
| `GClass277` | `ShootFromCover` |
| `GClass276` | `ShootFromPlace` |
| `GClass280` | `ShootFromStationary` |
| `GClass28` | `ShootHoldResultParams` |
| `GClass281` | `ShootSuppressNode` |
| `ShootPointClass` | `ShootToPoint` |
| `GClass659` | `ShotSharedMethods` |
| `Class89` | `ShowInternalLocationWrapper` |
| `SideStepStateClass` | `SideStepPlayerState` |
| `GClass630` | `SightStat` |
| `GClass892` | `SimpleAudioSample` |
| `GClass1621` | `SimpleAverage` |
| `EquipmentClass` | `SimpleBetterAudioQueue` |
| `SimpleCharacterController+GClass755` | `SimpleCharacterController+CollidersArray` |
| `SimpleCharacterController+GClass755+GStruct36` | `SimpleCharacterController+CollidersArray+CollisionInfo` |
| `GClass23` | `SimpleProfiler` |
| `GClass23+GStruct5` | `SimpleProfiler+SampleReport` |
| `GClass23+GStruct4` | `SimpleProfiler+Token` |
| `GClass987` | `SingleDrop` |
| `GClass852` | `SingleMonoBehaviour` |
| `GClass792` | `Skinner` |
| `SmokeGrenadeDataPacketStruct` | `SmokeGrenadeNetworkData` |
| `GClass805` | `SmoothDampCalculator` |
| `SnowFlakes+Struct161` | `SnowFlakes+LightProperties` |
| `Class688` | `SnowFlakesMeshFactory` |
| `Class679` | `SnowRenderer` |
| `Class679+Class680` | `SnowRenderer+Data` |
| `Struct160` | `SnowRendererData` |
| `SonicBulletSoundPlayer+GClass898` | `SonicBulletSoundPlayer+SonicInfo` |
| `SonicBulletSoundPlayer+Class522` | `SonicBulletSoundPlayer+SonicTimeQueueItem` |
| `GClass950` | `SoundOcclusionObstacleChecker` |
| `GClass951` | `Spacer` |
| `GClass951+Class598` | `Spacer+Group` |
| `GClass902` | `SpatialAudioRoomComparer` |
| `GStruct23` | `SpawnDelayDebugModel` |
| `GClass698` | `SpawnPointDebugStruct` |
| `GClass699` | `SpawnSystemDebugCollector` |
| `GClass701` | `SpawnSystemFarestPointLogsCollector` |
| `GClass976` | `SpeedTreeCombiner` |
| `SpeedTreeTerrainProcessor+Class652` | `SpeedTreeTerrainProcessor+Prototype` |
| `SpeedTreeTerrainProcessor+Class653` | `SpeedTreeTerrainProcessor+PrototypeRenderer` |
| `GClass774` | `Stamina` |
| `GClass355` | `StandardAssaultLayersStrategy` |
| `GClass174` | `StandByLogicLayer` |
| `GClass282` | `StandByNode` |
| `Class23` | `StartGameRequestParams` |
| `Class22` | `StartMatchingRequestParams` |
| `Class687` | `StateSwitcher` |
| `GClass968` | `StaticDeferredDecalDrawInstance` |
| `GClass963` | `StaticDeferredDecalQuadrant` |
| `GClass963+GStruct65` | `StaticDeferredDecalQuadrant+TextureMaxSize` |
| `GClass966` | `StaticDeferredDecalQuadTree` |
| `GClass966+Class605` | `StaticDeferredDecalQuadTree+UpdateParams` |
| `GClass966+Class604` | `StaticDeferredDecalQuadTree+WorkThreadParams` |
| `GClass969` | `StaticDeferredDecalQuadTreeDrawInstance` |
| `StaticDeferredDecalRenderer+Class606` | `StaticDeferredDecalRenderer+CameraDecalsCommandBuffers` |
| `StaticDeferredDecalRenderer+GClass970` | `StaticDeferredDecalRenderer+DecalsData` |
| `GClass992` | `StaticUtils` |
| `GClass911` | `StationaryStrategy` |
| `GClass81` | `StationaryWithSuppressLayer` |
| `GClass269` | `StayAndLookNode` |
| `GClass136` | `StayAtGeneratorPositionLayer` |
| `GClass270` | `StayNode` |
| `GClass974` | `StencilShadowByPriorityComparer` |
| `GClass283` | `StimulatorsNode` |
| `GClass356` | `StrategyLayersWithCorePositions` |
| `GClass839` | `StringBuilderExtension` |
| `GClass591` | `StubAIData` |
| `GClass590` | `StubAIDataRoomLogic` |
| `GClass980` | `StuckFPSController` |
| `GClass97` | `SummoningPriestPatrol` |
| `GClass193` | `SummonNode` |
| `GClass893` | `SuperAudioSample` |
| `GClass890` | `SuperBetterAudioQueue` |
| `GClass70` | `SuppressEnemiesBTRLayer` |
| `GClass602` | `SuppressionData` |
| `GClass597` | `SuppressionFireRequest` |
| `GClass284` | `SuppressStationaryNode` |
| `Class393` | `SurprisesLogger` |
| `GClass585` | `SuspetionPlace` |
| `AirplaneDataPacketStruct` | `SynchronizableObjectPacket` |
| `AirplaneDataPacketStruct+GStruct47` | `SynchronizableObjectPacket+Data` |
| `GClass793` | `SynchronizableObjectPacketExtensions` |
| `GClass702` | `SyncModule` |
| `Systems.Effects.Effects+GStruct73` | `Systems.Effects.Effects+EffectEmitDescription` |
| `LightAllocationPoolClass` | `Systems.Effects.LightPool` |
| `LightAllocationPoolClass+Class712` | `Systems.Effects.LightPool+LightStruct` |
| `GClass1021` | `Systems.Effects.PerformanceMeter` |
| `GClass1022` | `Systems.Effects.TextureHelper` |
| `GClass236` | `TaclicalMoveNode` |
| `GClass481` | `TagillaEnemyChooser` |
| `GClass364` | `TagillaHelperAgroStrategy` |
| `GClass163` | `TagillaSearchLayer` |
| `GClass285` | `TakeInPlaceForChecking` |
| `GClass634` | `TargetStats` |
| `GClass258` | `TeleportNode` |
| `GClass794` | `TemplatesDownloader` |
| `GClass1010` | `TerrainStitch.IntArrayComparer` |
| `GClass795` | `TerrainTextureMixData` |
| `GClass1005` | `TerrainTreeAndGrassCleaner` |
| `GClass482` | `TestEnemyChooser` |
| `GClass164` | `TestLayer` |
| `GClass165` | `TestSecondLayer` |
| `GClass1004` | `Texture2DExtensionDrawing` |
| `TextureDecalsPainter+GStruct67` | `TextureDecalsPainter+DecalDescription` |
| `GClass975` | `TextureGenerator3D` |
| `GClass971` | `TextureQuadrantInfo` |
| `GClass967` | `TextureQuadTree` |
| `GClass967+Class607` | `TextureQuadTree+ThreadResults` |
| `GClass967+Class609` | `TextureQuadTree+UpdateParams` |
| `GClass967+Class608` | `TextureQuadTree+WorkThreadParams` |
| `GClass964` | `TextureTreeQuadrant` |
| `GClass964+GStruct66` | `TextureTreeQuadrant+TextureMaxSize` |
| `GClass990` | `TexUtils` |
| `GClass910` | `ThirdPersonStrategy` |
| `GClass286` | `ThrowGrenadeFromPlaceNode` |
| `GClass599` | `ThrowGrenadePlaceRequest` |
| `GClass600` | `ThrowGrenadePlayerRequest` |
| `GClass601` | `ThrowGrenadePointRequest` |
| `GClass598` | `ThrowGrenadeRequest` |
| `GClass287` | `ThrowGrenadeRequestNode` |
| `GClass952` | `TimeQueue` |
| `GClass952+GInterface48` | `TimeQueue+ITimeQueueItem` |
| `GClass952+Struct145` | `TimeQueue+TimeAction` |
| `TimerClass` | `Timer` |
| `GClass641` | `TimerManager` |
| `GClass641+IBotTimer` | `TimerManager+ITimer` |
| `GClass641+Class297` | `TimerManager+Timer` |
| `GAttribute1` | `TOD_MaxAttribute` |
| `GAttribute0` | `TOD_MinAttribute` |
| `GAttribute2` | `TOD_RangeAttribute` |
| `GClass5` | `TOD_Util` |
| `GClass4` | `TODSkyProvider` |
| `Class79` | `TokenIssueRequestParams` |
| `TracersLight+Class654` | `TracersLight+TracerInfo` |
| `TracerSystem+Class632` | `TracerSystem+Particle` |
| `Class81` | `TraderDialogRequestParams` |
| `Class14` | `TraderRepairOperationParams` |
| `Class29` | `TransferGroupLeadershipRequestParams` |
| `TransformHelperClass` | `TransformTools` |
| `Transit2ProneStateClass` | `Transit2ProneState` |
| `GClass953` | `Transliteration` |
| `TriggerColliderSearcher+Class422` | `TriggerColliderSearcher+Core` |
| `GClass576` | `TrigonometryAngs` |
| `GClass623` | `TriplPair` |
| `GStruct45` | `TripwireDataPacket` |
| `GClass288` | `TurnAwayNode` |
| `GClass624` | `TwoDimensionalDictionary` |
| `GClass665` | `TypesDictionary` |
| `GAttribute7` | `UberDrawAttribute` |
| `UBHelper+Class501` | `UBHelper+Styles` |
| `UI.Hideout.BaseHideoutAreaTransferItemsScreen`2+GClass3901` | `UI.Hideout.BaseHideoutAreaTransferItemsScreen`2+BaseHideoutAreaTransferItemsScreenController` |
| `UI.Hideout.HideoutAreaTransferItemsScreen+GClass3902` | `UI.Hideout.HideoutAreaTransferItemsScreen+HideoutAreaTransferItemsScreenController` |
| `UI.Hideout.HideoutCustomizationOptionsPanel+Class3062` | `UI.Hideout.HideoutCustomizationOptionsPanel+TabController` |
| `UI.Hideout.HideoutCustomizationScreen+Class3063` | `UI.Hideout.HideoutCustomizationScreen+TabController` |
| `GClass854` | `UIDebug` |
| `UISoundsWrapper+Class391` | `UISoundsWrapper+UISoundsLogger` |
| `GClass605` | `UnderbarrelLauncherBotAiming` |
| `GAttribute12` | `UniqueIdentifierAttribute` |
| `GClass1469` | `Unity.NativeProfiling.SimpleTraceMarkers` |
| `GClass841` | `UnityAsyncOperationsExtensions` |
| `GClass1353` | `UnityDiagnostics.AvarageMeasureStatistics` |
| `GClass1354` | `UnityDiagnostics.AvgMeasurer` |
| `GClass1355` | `UnityDiagnostics.DiagnosticsManager` |
| `GClass1357` | `UnityDiagnostics.FrameMeasurer` |
| `GClass1357+GClass714` | `UnityDiagnostics.FrameMeasurer+FrameMeasurerLogger` |
| `GClass1357+GClass714+GClass1358` | `UnityDiagnostics.FrameMeasurer+FrameMeasurerLogger+Config` |
| `IFPSMeasureStatistics` | `UnityDiagnostics.IMeasureStatistics` |
| `GClass1359` | `UnityDiagnostics.IncrementalMeasurer` |
| `GClass1360` | `UnityDiagnostics.MaxMeasurer` |
| `GStruct132` | `UnityDiagnostics.MeasurementData` |
| `GClass1356` | `UnityDiagnostics.NetworkQuality` |
| `GClass1361` | `UnityDiagnostics.TimeMeasurer` |
| `GClass1362` | `UnityDiagnostics.ValueDiffStatisticsMeasurer` |
| `GClass861` | `UnityResourcesProxy` |
| `GClass861+Class390` | `UnityResourcesProxy+UnityResourcesProxyLogger` |
| `Class705` | `UnitySourceGeneratedAssemblyMonoScriptTypes_v1` |
| `Class705+Struct177` | `UnitySourceGeneratedAssemblyMonoScriptTypes_v1+MonoScriptData` |
| `GClass842` | `UnityUtils` |
| `UnityUtils+GClass843` | `UnityUtils+RRTExtension` |
| `Class320` | `UnityWebSender` |
| `GClass846` | `UnparsedData` |
| `GClass652` | `UnparsedDataExtension` |
| `Class67` | `UpdatePingOperationParams` |
| `Class0` | `UpdateStatusRequestParams` |
| `GClass855` | `Utils` |
| `GClass855+Class468` | `Utils+IntContainer` |
| `GClass857` | `UtilsCos` |
| `GClass989` | `UtilsScreen` |
| `Class53` | `ValidateCaptchaRequestParams` |
| `GClass1801` | `Validator` |
| `GClass907` | `ValProcessor` |
| `GClass19` | `ValueChangeMeasurer` |
| `GClass19+GClass20` | `ValueChangeMeasurer+Counter` |
| `GClass2126` | `VaultingLandingState` |
| `GStruct53` | `Vector3NullableSerializer` |
| `GStruct52` | `Vector3Serializer` |
| `GClass858` | `VectorChecksExtensions` |
| `GClass372` | `VectorExtension` |
| `GClass550` | `VectorTargetBotPath` |
| `GClass554` | `VectorTargetPoint` |
| `GClass1006` | `VolumetricBounds` |
| `GClass1007` | `VolumetricExplosion` |
| `VolumetricFog+Struct157` | `VolumetricFog+AreaLightParams` |
| `VolumetricFog+Struct158` | `VolumetricFog+FogEllipsoidParams` |
| `VolumetricFog+Struct155` | `VolumetricFog+PointLightParams` |
| `VolumetricFog+Struct156` | `VolumetricFog+TubeLightParams` |
| `VolumetricFog+Struct154` | `VolumetricFog+Vector3i` |
| `VoxelAmbientTest+Class620` | `VoxelAmbientTest+Image` |
| `GClass954` | `WaitForJobCompleted` |
| `Class281` | `WaitPlayerRequest` |
| `GClass290` | `WarnPlayerAttentionNode` |
| `GClass289` | `WarnPlayerDecision` |
| `GClass166` | `WarnPlayerLayer` |
| `GClass251` | `WarnPlayerRequestGoNode` |
| `GClass271` | `WatchSecondWeaponNode` |
| `WaterForSSR+GClass983` | `WaterForSSR+WaterObject` |
| `WaterForSSRv2+GClass984` | `WaterForSSRv2+WaterObject` |
| `GClass678` | `WavesCountControlScenario` |
| `BotSettingsRepoClass` | `WildSpawnTypeExtension` |
| `GClass790` | `WildSpawnTypeSettings` |
| `WindowsManager+Struct176` | `WindowsManager+PiecesQueueElement` |
| `Class706` | `WindowsManagerUtilities.CameraRenderData` |
| `WindowsManagerUtilities.GeometryBuffers+Struct178` | `WindowsManagerUtilities.GeometryBuffers+UInt2` |
| `Class707` | `WindowsManagerUtilities.GeometryComputeBuffers` |
| `WindowsManagerUtilities.GeometryComputeBuffers+Struct179` | `WindowsManagerUtilities.GeometryComputeBuffers+IntPair` |
| `Class708` | `WindowsManagerUtilities.PieceOffsets` |
| `WinterScript+GClass993` | `WinterScript+AudioLerper` |
| `WinterScript+GClass994` | `WinterScript+TerrainDetailsRepaint` |
| `WinterScript+GClass994+Class689` | `WinterScript+TerrainDetailsRepaint+DetailColorLerper` |
| `GClass38` | `WithCutDistLayer` |
| `GClass1157` | `WorldDrawUtility` |
| `GClass653` | `WsBackendContract` |
| `Struct36` | `WsConnectionParams` |
| `GClass654` | `WsRequest` |
| `GClass655` | `WsRequestJson` |
| `GClass656` | `WsRequestsQueue` |
| `GClass657` | `WsResponseJson` |
| `GClass657+GClass658` | `WsResponseJson+WsSenderResponseError` |
| `GException7` | `WSTimeoutException` |
| `GException6` | `WSTransportException` |
| `Class321` | `WsTransportManager` |
| `GClass635` | `ZigZagWayBuilder` |
| `GClass645` | `ZoneEventShellingProcess` |
| `GClass644` | `ZoneShellingProcess` |
| `GClass168` | `ZryachiyAbstractLayer` |
| `GClass167` | `ZryachiyBaseLayer` |
| `GClass173` | `ZryachiyCheckCloseEnemiesLayer` |
| `GClass169` | `ZryachiyCloseFightLayer` |
| `GClass473` | `ZryachiyEnemyController` |
| `GClass541` | `ZryachiyEnemyInfo` |
| `GClass170` | `ZryachiyFightLayer` |
| `GClass488` | `ZryachiyFirstAid` |
| `GClass171` | `ZryachiyFollowerFightLayer` |
| `GClass172` | `ZryachiyPatrolLayer` |


====================================================================================================
DOCUMENT: Client Mod Migration - 4.0 to 4.1
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/SPT_41/Client_40_to_41.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/SPT_41/Client_40_to_41.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Client Mod Migration - 4.0 to 4.1
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/SPT_41/Client_40_to_41.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13, SPT 4.1.x / 4.1.0
-->

---
title: Client Mod Migration - 4.0 to 4.1
description: What changed for client mods between SPT 4.0 and 4.1, and how to fix it.
published: true
date: 2026-07-21T00:00:00.000Z
tags: modding, migration, client
editor: markdown
dateCreated: 2026-07-21T00:00:00.000Z
---

> This page applies to SPT version `4.1`
{.is-info}

> Every 4.0 client mod needs rebuilding against 4.1. The game assemblies your mod references have changed, so a 4.0 build will not load.
{.is-warning}

## Everything got its real name back

The 4.0 client was obfuscated. Classes were named `GClass680`, `GStruct80` and so on, with no namespaces, and 4.0 shipped a partial rename layer that turned some of them into flat aliases like `LoggerClass`.

4.1 deobfuscates the client. Types now have real names and live in real namespaces. `GClass680` is `ABotProfileCreator`, `GStruct80` is `AbsolutDecals.DecalMeshVertexData`, and so on.

This is the one change that touches nearly every client mod. Anywhere your code names a game type, whether directly or in a Harmony patch target, that name has changed. The build errors will point you at each one.

The full old-to-new list is on its own page:

- [Client Class Name Mappings](/en/SPT_41/modding/client/Class_Name_Mappings)

Work through the mappings table for each type your mod references and swap the old name for the new one. Because types now sit in namespaces, you will also need the matching `using` for wherever the type ended up.


====================================================================================================
DOCUMENT: Common Pitfalls
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Reporting_Issues.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Reporting_Issues.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Common Pitfalls
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Reporting_Issues.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Reporting Issues
description: How to effectively ask for help.
published: false
date: 2025-12-23T15:02:53.442Z
tags: 
editor: markdown
dateCreated: 2025-12-23T15:02:53.442Z
---

# Common Pitfalls

For a lot of people they have never previously asked for support online. There are many known pitfalls that aren't immediately obvious or intuitive.

## [Don't Ask to Ask](https://dontasktoask.com/)

> "Any experts in configuring X mod?"

Quoting directly from the linked website:

"There are plenty of reasons why people who DO have the knowledge would not admit to it. By asking, you're asking for more than what you think you're asking.

You're asking people to take responsibility. You're questioning people's confidence in their abilities. You're also unnecessarily walling other people out. I often answer questions related to languages or libraries I have never used, because the answers are (in a programmer kind of way) common sense."

It makes perfect sense to ask such a question while in a conversation with another person. However, when you ask that in any online public chat, your question will just be ignored.
In the first example, if nobody who saw your message considered themselves an "expert" on a mod, your question would simply be left answered. If you instead asked the question you wanted answered first, chances are somebody would know the answer to it:

> "How can I configure X mod to do Y?"
> "It's in Z config under Y."

## [XY Problem](https://xyproblem.info/)

> "My SPT installer doesn't work but did a few days ago."
> "So you already have SPT installed?"
> "Yes."
> "Then why do you want to install SPT again if you already have it installed?"
> "I installed a mod I don't want anymore."
> "Then just [uninstall the mod](/Uninstalling_Mods)."

It's very common that some will "jump ahead" several steps in an attempt to fix their issue and to then ask for help for that solution, instead of describing the actual issue they have. It's not to discourage anyone from trying to solve their own issues, but to provide context for their requests:

> "I'm trying to reinstall SPT as I installed a mod I don't want, but the SPT installer isn't working."
> "You don't need to reinstall SPT as you can just [uninstall the mod](/Uninstalling_Mods)."

## [Category Mistake](https://en.wikipedia.org/wiki/Category_mistake)

> "What is the latest version of the SPT installer?"
> "The installer updates itself. Why do you ask?"
> "I want to install the latest version of SPT."
> "The SPT installer [always installs the latest version of SPT](https://wiki.sp-tarkov.com/How_SPT_Works#installation) regardless of its version."

Similar to the XY problem, the category mistake is the misattribution of a property as being linked to something unrelated. We are evolutionarily wired to find patterns in everything, so it's only natural that is happens. Just as with the XY problem, add context for the questions you ask:

> "What version of the SPT installer will install the latest version of SPT?"
> "The SPT installer [always installs the latest version of SPT](https://wiki.sp-tarkov.com/How_SPT_Works#installation) regardless of its version."

# Reporting Bugs

If you are reporting a bug in SPT or a mod, you should do the following:

- Verify that the bug happens because of it. 
  - If it's a bug with SPT, remove all mods. 
  - If it's a bug with a mod, remove all other mods.
  - If it's a bug when two mods are used together, remove all other mods.
- Provide reproducable steps to trigger the bug. The developer will need to recreate the bug to be able to fix it, so list all steps that you need to take to reproduce it.
  - If the bug happens randomly or intermittently, list out a few examples of when and how it occured.

[add more stuff here]

# SPT Support

[add more stuff here]

====================================================================================================
DOCUMENT: Console Commands
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/guides-and-advanced-topics/console-commands.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/guides-and-advanced-topics/console-commands.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Console Commands
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/guides-and-advanced-topics/console-commands.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Console Commands
description: A list of the few console commands SPT adds that can be used in-game.
published: true
date: 2026-07-14T18:37:09.285Z
tags: 
editor: markdown
dateCreated: 2026-07-14T18:37:09.285Z
---

All standard EFT console commands are available in SPT. They can be found [here](<https://escapefromtarkov.fandom.com/wiki/Debug_Console>). 
The default keybind to open the console is <kbd>`</kbd> or <kbd>~</kbd>, which can be remapped in the controls section of in-game settings.

SPT itself only adds 2 commands for use in-raid:

| Command | Usage |
|-|-|
| `botmon [0/1]` | Displays a list of all bots, their properties and their total numbers. `1` enables it, `0` disables it. |
| `debug_extract [Survived, Killed, Runner, MissingInAction, Transit]` | Extract from the raid with the given status. |


====================================================================================================
DOCUMENT: EFT 1.0
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/FAQs_40.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/FAQs_40.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: EFT 1.0
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/FAQs_40.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13, SPT 4.1.x / 4.1.0
-->

---
title: FAQs
description: Answers to frequently asked questions.
published: true
date: 2026-06-17T19:44:40.240Z
tags: 
editor: markdown
dateCreated: 2025-10-10T12:23:08.957Z
---

> This page applies to SPT version `4.0`
{.is-info}

## Why are there so many files in the new `\SPT` folder?
To allow modders to use method patching, all the DLLs need to be 'loose' and not stored inside the server executable.

## Why are `SPT.Launcher` and `SPT.Server` shortcuts?
As part of the restructuring explained above.
The actual exe files are in your `[game folder]\SPT` folder, and the installer creates shortcuts in your `[game folder]` for your convenience.

## Where is my `user` folder?
Also in `[game folder]\SPT`.

## What version of Tarkov is SPT running?
Version `0.16.9.0.40087`, released 2 October 2025.

## Is (insert content here) in SPT now?
Refer to the previous question. If you're curious about something specific, please see the official [Tarkov changelog](<https://escapefromtarkov.fandom.com/wiki/Changelog>).

## Is Labyrinth in `4.0`?
Yes.
<https://escapefromtarkov.fandom.com/wiki/The_Labyrinth>

## Is the Softcore/Hardcore wipe in SPT? 
No. The hardcore wipe only made changes to the PVP mode. SPT `4.0` is using EFT version `0.16.9.0.40087` which came before the softcore wipe changes were added to PVE.
You can easily recreate either using mods.

## Will `4.0` be updated to include the latest EFT patches?
No. EFT patches made after the release of SPT `4.0` will only be available in SPT `4.1`.

## Is performance better in `4.0` than in `3.11`?
Short answer: A bit.
Long answer: BSG optimised culling on several maps, and alongside other changes, did somewhat improve performance between EFT `0.16.1.3.35392` and `0.16.9.0.40087`. It's most noticeable if your SPT is GPU limited and will vary. The [Performance Tuning](/Performance_Tuning) guide is still relevant even on `4.0`.

## Can I use my profile and mods from `3.11`?
***If*** the `3.11` profile was ***un-modded***, yes. Otherwise A new profile will be required. None of your `3.11` mods are compatible.
See the guide on [Updating SPT](/Updating_SPT) for more details.

## I miss `3.11`, can I re-download it?
Yes. `SPT 3.11` is in Long Term Distribution. However, you will need to manually install it and we offer no support for it.
See [this guide](https://github.com/sp-tarkov/build/wiki/3.11-Manual-Installation-Instructions) for instructions.

## When is (insert mod here) going to update to `4.0`?
Nobody knows when certain mods are going to update, not even the authors themselves. Do not pester mod authors about updates to their mods.

## Will a mod marked compatible for `4.0.0` work on future versions of `4.0`?
Mods made for previous hotfix versions should work on the latest version. Those that don't might have received an update to address that.
Mods known to be incompatible with be stated in the `Mod compatibility` section of SPT's [Release page](<https://github.com/sp-tarkov/build/releases/latest>) and in [Known Mod Issues](/Known_Mod_Issues_40).
For an explanation of how SPT versions work and how to update your SPT, read through the [Updating SPT](<https://wiki.sp-tarkov.com/Updating_SPT>) Wiki page.

## Bot spawns
SPT uses EFT's PvE bot spawning system. Bots will continuously spawn up to a map-specific limit. When enough are killed, more will spawn to replace them. Bot spawns aren't checked for the distance to you or other bots which can let bots can spawn next to you. 
Use a [bot spawning mod](<https://wiki.sp-tarkov.com/Recommended_Mods_40#mods-for-better-bot-spawns>) to change this system.

## Need space on your drive? Don't play live?
After you install SPT, you cannot completely uninstall live EFT, but you can delete the `EscapeFromTarkov_Data` folder from your live EFT folder if you really need the space.

You **will** have to validate files through the BSG launcher if you need to reinstall SPT again by going into the BSG Launcher's `Game Settings` and clicking on `Integrity check`.

## RAM Usage
It's [recommended](<https://wiki.sp-tarkov.com/en/system-requirements>) to have at least 32gb of RAM to play SPT without issues.
EFT has over the years become more demanding on system resources. In the past, 16gb was just enough to play without issue. Nowadays it's not.

Some people are still able to play SPT with 16gb of RAM. That's due to the pagefile, which is a cache located on your storage device. If your RAM is filling up, Windows will start moving files to and from it. It will lead to stuttering and overall lower performance, as even the fastest NVMe SSD is much slower than RAM.

For an even smaller subset of people there’s an underlying issue with their Windows install, where the pagefile does not work as intended. While this should be fixed, it can be [set manually as a temporary fix](<https://wiki.sp-tarkov.com/Performance_Tuning#pagefile>).

## Why are bots not moving from their spawn location?
Bots in EFT are not programmed to move from their spawn location outside of combat. Only PMC bots are given tasks to loot areas, if they spawned near them. By design, bots will stand where they spawned until they spot the player. This is a design decision made by BSG and not SPT.

There are currently no mods for SPT `4.0` that make bots move around the map. 

[SAIN](<https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement>) **doesn't** make bots move around the map, as it *only* affects combat behaviour.

# EFT 1.0
### Will we have `1.0` soon in SPT?
There is no active development effort targeting EFT's `1.0` update.
### Is it possible to install SPT with EFT `1.0`?
Yes. You can [install SPT](<https://wiki.sp-tarkov.com/en/Installation_Guide>) while having EFT `1.0` installed.
### Is it possible to install SPT with the Steam copy of EFT?
Yes. See the [install guide](<https://wiki.sp-tarkov.com/en/Installation_Guide>).
### Can I update EFT or will that break my existing SPT install?
That's not how SPT works. The installer makes a **copy** of your EFT files to a **separate** location. Update EFT as much as you want.


# Troubleshooting tips
- Do not install mods until you've launched SPT at least once. Verify your SPT install works, then install mods.
- Do not install out of date mods.
- Do not install multiple mods at once (unless they're dependencies). Install mods one at a time or in small batches. That way when something goes wrong, you'll know exactly what mod is responsible.
- Read mod pages. Not only is it just common courtesy to read the mod page __before__ asking for help, chances are the mod page has exactly the information you need. What the mod does, how to install it, how to use it, and known issues or incompatibility with other mods.

##### "I'm still having issues and it wasn't the last mod I installed, what do I do?" 
Start removing mods one at a time, or if you have a lot of mods, follow the [50/50 Method](<https://wiki.sp-tarkov.com/en/5050-method>).
If none of that helps, then it's time to create a support ticket. Join our [Discord Server](http://discord.sp-tarkov.com/) and read through the [#support-guidelines](https://discord.com/channels/875684761291599922/1172733248317694022) for instructions.

# Old versions of SPT
We currently host two version of SPT: version `4.0`, using EFT version `0.16.9.0.40087`, released `2 October 2025` and a Long Term Distribution version of SPT: version `3.11.4` released `1 September 2025`, using EFT version `0.16.1.3.35392` released `5 March 2025`.

While you can install version `4.0` using the [SPT Installer](<https://forge.sp-tarkov.com/installer>), installing `3.11.4` can only be done manually by following [this guide](/SPT_311/Manual-Installation-Instructions_311). We do not offer support for `3.11.4`.

We do not host older versions of SPT because each SPT version is specifically designed to work with a particular version of EFT. Since EFT is a live service game that receives frequent updates, every SPT version requires a dedicated patcher to downgrade your local EFT installation to the compatible version. Maintaining multiple older SPT versions would necessitate actively maintaining multiple downgrade patchers, which includes updating these patchers after each and every EFT update. Our team simply does not have the time to dedicate to this level of ongoing maintenance.

# How much free space is necessary to install SPT?
This is the current space requirements (compounding) to install SPT:
- Patcher: 8GB (Always `C:\` drive)
- Client: 70GB
- Extract/Copy Patcher: 14GB
- Post-patcher: ~35GB

So while the final install size is ~60GB, the maximum allocated for SPT and associated install files _during the install process_ is ~100GB combined.

# Known Issues
- [Known EFT Issues](/Known_EFT_Issues_40)
- [Known SPT Issues](/Known_SPT_Issues_40)
- [Known Mod Issues](/Known_Mod_Issues_40)


====================================================================================================
DOCUMENT: Enum Extensions
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/SPT_41/modding/EnumExtensions.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/SPT_41/modding/EnumExtensions.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Enum Extensions
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/SPT_41/modding/EnumExtensions.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.1.x / 4.1.0
-->

---
title: Enum Extensions
description: Extending Enums in the server and the client.
published: true
date: 2026-07-26T06:49:50.856Z
tags: modding, server, client, enum
editor: markdown
dateCreated: 2026-07-21T14:20:18.887Z
---

> This page applies to SPT version `4.1`
{.is-info}

A prepatch adds constants, fields, or other image data to an assembly before the assembly containing that code is loaded.

SPT supports enum prepatching on both sides:

- Server enum constants are declared in a JSON file and added to `SPTarkov.Server.Core`.
- Client enum constants are registered by a server mod, sent to the client as JSON, and added to `Assembly-CSharp`.

Prepatchers are declarative. You no longer create a prepatcher DLL, inherit `AbstractPrepatch`, or edit assemblies directly with Mono.Cecil.

## Do you actually need one?

Enum fields are compile time constants that are baked in when code is compiled, so a new named constant must be added before the relevant assembly loads.

You may need one, when for example you do any of the following:
- When you want to add a new bot type.
- When you want to add a new skill.
- Anything else that requires a new Enum entry.

> The server and client definitions are separate. A JSON file in `user\patchers` is not automatically sent to the client.
{.is-warning}

## Server-side prepatching

### Folder layout

Server prepatch definitions live in `[game folder]\SPT\user\patchers\`, not `user\mods`.

Each mod gets a directory named after its GUID:

```text
user\patchers\com.example.my-mod\MyModPrepatch.json
```

The directory name must match the mod's `ModGuid`. The directory must contain exactly one JSON file at its top level. The filename itself can be anything.

If the mod ships a server enum extension declaration, set `HasEnumExtensions = true` in your mod's metadata:

```csharp
public sealed class MyModMetadata : IModMetadata
{
    // ...
    public bool HasPrepatcher { get; init; } = true;
}
```

### Writing the definition

The file must contain a non-empty JSON array:

```json
[
  {
    "enumType": "SPTarkov.Server.Core.Models.Enums.SkillTypes",
    "constantName": "MySkill",
    "constantValue": 99
  }
]
```

Each entry supports the following properties:

| Property | Required | Description |
| --- | --- | --- |
| `enumType` | Yes | Fully qualified name of the enum to extend |
| `constantName` | Yes | Name of the new enum constant |
| `constantValue` | Yes | Numeric value of the new constant |
| `jsonEnumName` | No | Client-only serialization name; ignored by the server patcher |

For nested enum types, separate the containing and nested types with `+`:

```json
{
  "enumType": "Some.Namespace.ContainingType+NestedEnum",
  "constantName": "MyValue",
  "constantValue": 100
}
```

`constantValue` is read as a signed 64-bit integer and converted to the enum's actual underlying type. Startup reports an error if the value does not fit that type.

### How it works

Before loading server mods, the server:

1. Reads the prepatch directories.
2. Loads `SPTarkov.Server.Core` into memory.
3. Applies definitions in deterministic order by mod GUID and definition path.
4. Writes `SPTarkov.Server.Core.Patched.dll` and its `.pdb`.
5. Starts the server using the patched Core assembly.

The patched assembly and symbols are deleted and rebuilt on every start. Removing the prepatch directory therefore restores an unmodified server on the next run.

Definitions are processed before mod assemblies load, so a server prepatch cannot run mod code, resolve dependencies, access the database, or perform arbitrary Mono.Cecil edits.

### Packaging the definition

For example, a project can copy its definition after building:

```xml
<ItemGroup>
  <PrepatchDefinition Include="$(ProjectDir)MyModPrepatch.json" />
</ItemGroup>

<Target Name="CopyPrepatchDefinition" AfterTargets="Build">
  <Copy
    SourceFiles="@(PrepatchDefinition)"
    DestinationFolder="$(GamePath)\SPT\user\patchers\com.example.my-mod"
  />
</Target>
```

Adjust `$(GamePath)` to match your project setup.

### Verifying the server Enum extension

Your mod loads against the patched Core, so it can verify that the new constant exists:

```csharp
[Injectable(TypePriority = OnLoadOrder.PostLoad + 1)]
public class MyMod(ISptLogger<MyMod> logger) : IOnLoad
{
    public Task OnLoadAsync(CancellationToken cancellationToken)
    {
        if (Enum.TryParse<SkillTypes>("MySkill", out var injected))
        {
            logger.Info($"Server prepatch applied: MySkill = {(int)injected}");
        }
        else
        {
            logger.Warning("Server prepatch NOT applied: MySkill is missing");
        }

        return Task.CompletedTask;
    }
}
```

## Client-side Enum extensions

Client enum definitions are registered by a server mod through the `ClientEnumDefinitions` service.

When the game starts, SPT's built-in client prepatcher requests the registered definitions from the server and applies them to `Assembly-CSharp` before that assembly loads.

> Do not place a custom prepatcher DLL in BepInEx for this purpose.
{.is-info}

### Registering client definitions

Inject `ClientEnumDefinitions` into a server mod class and register the entries during server startup:

```csharp
using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.DI;
using SPTarkov.Server.Core.Models.Spt.Mod;

[Injectable(TypePriority = OnLoadOrder.PostLoad + 1)]
public class MyMod(ClientEnumDefinitions clientEnumDefinitions) : IOnLoad
{
    public Task OnLoadAsync(CancellationToken cancellationToken)
    {
        clientEnumDefinitions.Add(
            "com.example.my-mod",
            new EnumEntryDefinition
            {
                EnumType = "EFT.EBuffId",
                ConstantName = "MyBuff",
                ConstantValue = 10000,
                JsonEnumName = "my_buff",
            }
        );

        return Task.CompletedTask;
    }
}
```

The key passed to `Add` should be the mod's GUID.

Use `AddRange` to register several definitions:

```csharp
clientEnumDefinitions.AddRange(
    "com.example.my-mod",
    [
        new EnumEntryDefinition
        {
            EnumType = "EFT.EBuffId",
            ConstantName = "MyFirstBuff",
            ConstantValue = 10000,
            JsonEnumName = "my_first_buff",
        },
        new EnumEntryDefinition
        {
            EnumType = "EFT.EBuffId",
            ConstantName = "MySecondBuff",
            ConstantValue = 10001,
            JsonEnumName = "my_second_buff",
        },
    ]
);
```

A mod that only registers client definitions does not need `HasPrepatcher = true` or a directory under `user\patchers`.

### Client definition fields

Client definitions use the same `EnumEntryDefinition` model:

| Property | Description |
| --- | --- |
| `EnumType` | Fully qualified enum type from `Assembly-CSharp`, such as `EFT.EBuffId` |
| `ConstantName` | Name of the new enum field |
| `ConstantValue` | Numeric value assigned to the field |
| `JsonEnumName` | Optional value for EFT's `JsonEnumNameAttribute` |

When `JsonEnumName` is set, the client prepatcher attaches `EFT.JsonEnumNameAttribute` to the new field. Use it when the enum has a separate string representation in JSON. It may be different from `ConstantName`.

### How client definitions reach the game

The client prepatcher:

1. Reads the backend URL passed by the SPT Launcher.
2. Requests `/singleplayer/customEnumEntries` from the server.
3. Deserializes the returned JSON definitions.
4. Adds them to their target enums in `Assembly-CSharp`.
5. Allows the game to continue loading with the patched assembly.

The server must be running and the definitions must be registered before the game starts.

### Verifying the client patch

A normal client plugin loads after `Assembly-CSharp` has been patched, so it can verify the constant with `Enum.TryParse`:

```csharp
if (Enum.TryParse<EFT.EBuffId>("MyBuff", out var injected))
{
    Logger.LogInfo($"Client prepatch applied: MyBuff = {(int)injected}");
}
else
{
    Logger.LogError("Client prepatch NOT applied: MyBuff is missing");
}
```

## Using matching server and client values

When the same logical value exists on both sides, register it separately for each assembly and keep the name and number synchronized.

For example, the server definition could contain:

```json
[
  {
    "enumType": "SPTarkov.Server.Core.Models.Enums.SomeServerEnum",
    "constantName": "MyValue",
    "constantValue": 100
  }
]
```

The server mod would register the corresponding client definition:

```csharp
clientEnumDefinitions.Add(
    "com.example.my-mod",
    new EnumEntryDefinition
    {
        EnumType = "EFT.SomeClientEnum",
        ConstantName = "MyValue",
        ConstantValue = 100,
        JsonEnumName = "MyValue",
    }
);
```

The server and client enum types do not need to have the same fully qualified name, but their numeric values must agree if the value crosses the client/server boundary.

## Things to know

**Names and values must be unique.** Both patchers reject an entry when the target enum already contains its name or numeric value.

**Values must fit the enum's underlying type.** For example, a value outside the range of a byte-backed enum is rejected.

**Type and constant names are case-sensitive.** Use the exact names from the target assembly.

**Your changes are global.** A patched enum affects every mod using that server or client assembly.

**Other mods may patch the same enum.** Do not rely on another mod's definition being applied before yours. Coordinate enum value ranges when mods extend shared types.

**Keep server and client definitions synchronized.** A mismatched numeric value can serialize correctly on one side but be interpreted as a different value on the other.

## Related

- [Server Mod Migration - 4.0 to 4.1](/SPT_41/Server_40_to_41)


====================================================================================================
DOCUMENT: Largest heading
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Style_Guide.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Style_Guide.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Largest heading
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Style_Guide.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13, Any SPT version
-->

---
title: Style Guide
description: Keep a consistent style across the Wiki.
published: true
date: 2026-02-03T02:42:28.732Z
tags: 
editor: markdown
dateCreated: 2025-08-28T19:25:07.078Z
---

Here's a rudimentary style guide for the Wiki. Nothing here is set in stone or enforced, and it'll see many changes as the Wiki develops.
Its main purpose is to keep the initial set of pages semi-consistent with each other.

## Markdown
The SPT Wiki can use many different types of formatting. The easiest to use is [Markdown](https://daringfireball.net/projects/markdown/). You can see which Markdown features are supported on the [Wiki.js documentation page](https://docs.requarks.io/editors/markdown). There are many resources online for Markdown, however it's entirely doable in just Notepad or Github's text editor.


## There's no need for initial titles

The Wiki already includes the page's title and short description as part of its page layout. It's unnecessary to add a second title stating the same right underneath it.

## Version disclaimer

To ensure information doesn't get applied to the incorrect SPT version, include this disclaimer at the top of your page:

```
> This page applies to SPT version `4.0`
{.is-info}
```

Replace `4.0` with the appropriate version for the contents of the page.
If the information applies to any SPT version, simply have it state `This page applies to any SPT version`

## File paths

To remove any ambiguity, you should include the full filepath. For example, if you want to refer to the `profiles` folder: `[game folder]\SPT\user\profiles`

Once written in full, additional references to it can be shortened to `\SPT\user\profiles`, or just `\profiles`.

## Links

To include a link to an external website, you should make it an inserted link. It can be easily done like this:

```
[clickable word](website url)
```

For example:
> Read the SPT Wiki's [Style Guide](https://wiki.sp-tarkov.com/en/Style_Guide) to see how you can contribute to the Wiki.

Is written like this:

```
Read the SPT Wiki's [Style Guide](https://wiki.sp-tarkov.com/en/Style_Guide) to see how you can contribute to the Wiki.
```

Conveniently, links to pages on this Wiki can be done by just referencing its location. The above example can also be written like this:

```
Read the SPT Wiki's [Style Guide](/Style_Guide) to see how you can contribute to the Wiki.
```

## Header sizes

There are 6 different header sizes available. `#` will give you the largest title, while `######` will be the smallest.
Note that using any header will allow for direct linking to that section of a page e.g.: https://wiki.sp-tarkov.com/en/Style_Guide#header-sizes

You can copy the direct link to a header by hovering over it, right clicking `¶` and copying the link.

```
# Largest heading
Useful for the "See also" section. If a section on a page could use this header size, consider making it a separate page instead.

## Second largest
The perfect size for section headings. All headings on this page use this size.

### Third largest 
To separate larger lists which might required external linking to. Use instead of ordered/unordered lists.

#### Forth largest 
It's too small to work as a heading. Same applies for the two smaller headings.

##### Fifth largest

###### Sixth largest
```

While it won't be reflected in the actual website, leave an extra line before and after headers to make future editing of the page easier.

## Lists and bulletpoints

Ordered lists should be used for a series of steps, while unordered lists should be used in all other cases.
Full stops should be used if a bulletpoint is a longer sentence, however this determination should mostly be made by how it looks on the page.

- Apples
- Bananas are yellow
- Oranges are orange and are the fruit of a tree.

## Images

Images are best handled by using HTML:

```
<img src="/image.png" alt="image title" width=400 style="display: block; margin: 0 auto;">
```

Embedded images can be hosted on external websites:

```
<img src="https://ImageHostingWebsite.com/image.png" alt="image title" width=400 style="display: block; margin: 0 auto;">
```

This will imbed the image in the middle of the screen, with a width of 400 px. Use 600 for images with smaller text.
However, this will put the image directly next to the text with no space in-between. Use the HTML code of `<br>` to seperate images from non-header text above it. Header text doesn't need it as it already spaces itself from images.

The examples below have `width=200` and `margin: 0 left` for demonstration purposes.

Here is an image without the use of `<br>`:

<img src="/mod-install-v1.gif" alt="image title" width=200 style="display: block; margin: 0 left;">

Notice how the top text is right against the image.
<br>
<img src="/mod-install-v1.gif" alt="image title" width=200 style="display: block; margin: 0 left;">

And this image, with the use of `<br>` has space above between it and the text.

You can also use `<div style="margin-top: 10px;"></div>` for finer control over the size of the gap. Change the `10px` to a value that works best.

Finally, if you want a caption underneath your image, use centre justified text just beneath the image:
```
<div style='text-align: center;'>
Example text.
</div>
```
The above will results in this:
<div style='text-align: center;'>
Example text.
</div>

Remember to add a `<br>` or a margin between the image and the caption.

## Text formatting
The most subjective section. Use of bold and italicised text should still be standardised across the wiki.

- **Bold** text should be used to highlight the most important part of a sentence:
  - "You should always **read the mod pages** of the mods you're installing."
  - "**DO NOT** install to a protected location such as Documents or Desktop."
- *Italics* should be used for emphasis:
  - "If the mod archive has a `BepInEx` or `user` or *both* folders, drag and drop the contents of the archive to the empty space in your SPT folder."
- When you want to differenciate two concepts, assign one concept to be **bold** and the other as *italicised*:
   - "The selected difficulty in the **Pre-Raid Setting** determines which *difficulty classes* are allowed to spawn in your raid:
     - **As in online**: Mix of *Easy*, *Medium*, and *Hard* classes can spawn.
     - **Easy**: Only *Easy* class bots will spawn.
     - **Medium**: Only *Medium* class bots will spawn."
- _Underlines_ should be **avoided**, as clickable links are also underlined. Bold or italicised text should be used instead.
- `Code blocks` should be used when referring to folder names, file names, values, text strings from config files and interactable things with that name:
  - "If the mod archive has a `SPT`, `BepInEx` or *both* folders, drag and drop the contents of the archive to the empty space in your SPT folder."
  - "Disable `Nvidia Reflex` in the graphics settings."
- <kbd>Keyboard keys</kbd> should be used when referring to a keyboard key:
  - "...configure the client-side settings in the <kbd>F12</kbd> menu."

# See also
[How to Contribute](/how_to_contribute)

====================================================================================================
DOCUMENT: Location Reference Sheet
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/references/location-information.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/references/location-information.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Location Reference Sheet
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/references/location-information.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Location Reference Sheet
description: Reference sheet for location data, including IDs, names, spawn types.
published: true
date: 2025-11-02T03:51:47.618Z
tags: locations, mods
editor: markdown
dateCreated: 2025-06-06T07:36:05.708Z
---

# Location Reference Sheet
### Location Details
Location details are used in various locations in the SPT Server. There is a MongoID for the location as well as a Target Name string for each location. They are used in specific spots depending on how you are referencing the location.
>
> Friendly Names are not used in code.

| Friendly Name | ID | Target Name |
| :--- | :--- | :--- |
| Factory (Day) | 55f2d3fd4bdc2d5f408b4567 | factory4_day |
| Factory (Night) | 59fc81d786f774390775787e | factory4_night |
| Customs | 56f40101d2720b2a4d8b45d6 | bigmap |
| Woods | 5704e3c2d2720bac5b8b4567 | Woods |
| Lighthouse | 5704e4dad2720bb55b8b4567 | Lighthouse |
| Shoreline | 5704e554d2720bac5b8b456e | Shoreline |
| Reserve | 5704e5fad2720bc05b8b4567 | RezervBase |
| Interchange | 5714dbc024597771384a510d | Interchange |
| Laboratory | 5b0fc42d86f7744a585f9105 | laboratory |
| Streets Of Tarkov | 5714dc692459777137212e12 | TarkovStreets |
| Ground Zero (Level <= 20) | 653e6760052c01c1c805532f | Sandbox |
| Ground Zero (Level > 20) | 653e6760052c01c1c805532f | Sandbox_high |
| Labyrinth | 6733700029c367a3d40b02af | Labyrinth |

====================================================================================================
DOCUMENT: Manual Installation Instructions for SPT 3.11
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/SPT_311/Manual-Installation-Instructions_311.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/SPT_311/Manual-Installation-Instructions_311.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Manual Installation Instructions for SPT 3.11
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/SPT_311/Manual-Installation-Instructions_311.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Manual Installation Instructions for SPT 3.11
description: 
published: true
date: 2026-07-17T16:16:20.063Z
tags: 
editor: markdown
dateCreated: 2025-10-10T18:56:40.239Z
---

> This page applies to SPT version `3.11`
{.is-info}

## What you need to do before you install Single Player Tarkov
Verify that your Escape From Tarkov is fully up-to-date, through the BSG Launcher.
SPT requires that your EFT is on the latest version. This is so the downpatcher can patch them down to the same EFT client version that SPT 3.11 runs on.

Verify that your Escape From Tarkov works, and that you can load up to at least the main menu or stash.
This is particularly important if you have just installed Escape From Tarkov so all necessary files can be generated.

> You CANNOT install SPT 3.11 using the Steam version of Escape From Tarkov. You will need to install [SPT 4.0](https://wiki.sp-tarkov.com/Installation_Guide)
{.is-danger}


## Manually installing and running SPT 3.11

1. You will need to download a patcher to downgrade your game files. 
	- Each version of SPT requires a specific version of EFT. `SPT 3.11.4` requires `EFT 16.1.3.35392`. The following downgrade is currently available:
	- [](PATCHER)[1.0.6.5.46221 to 16.1.3.35392](https://spt-legacy.modd.in/Patcher_1.0.6.5.46221_to_16.1.3.35392.7z)
  - If live is newer than the above downgrade patch, **please wait**, a new downgrade patch will be created eventually.
2. Create a new folder for SPT. A good location would be `C:\Games\SPT 3.11`.
3. Copy the content of your live Escape From Tarkov game folder into your `SPT` folder.
	- **DON'T** delete the original EFT installation to save space, it must remain in the original install location for SPT to function.
4. Extract the contents of the downgrade patcher into your `SPT 3.11` folder, and run `patcher.exe`.
	- Make sure to use the tool [7Zip](https://www.7-zip.org/) to do this.
5. Download the [`SPT 3.11.4` release archive](https://github.com/sp-tarkov/build/releases/download/3.11.4/SPT-3.11.4-35392-96e5b73.7z).
6. Extract the contents of the SPT release archive into your `SPT 3.11` folder.
7. Open your `SPT 3.11` folder.
8. Run `SPT.Server`.
 - Wait for the green text that says `Server has started, happy playing`.
9. Run `SPT.Launcher` and follow the onscreen instructions.
 - DO NOT COPY YOUR LIVE EFT SETTINGS. Copying your settings will result in the game hanging on load.
 	- If you copied your live game settings, go to the SPT Launcher Settings and click Clear Game Settings.
 - You can use any username you want. It is recommend that you **do not** use your EFT account username. Especially if you plan on recording or streaming SPT.
 - `Login Automatically` will always log into the last profile you loaded. You can disable this by clicking `Logout` in the bottom right, then unchecking the option.
 - Select your desired game version. Each version has a description box summarising what is included. Once you have picked your chosen game version click `Register`. You can pick *any* game version you want from the profile list, you do not need to own the corresponding EFT version. Once chosen, you cannot change the edition a profile is using.
10. Click `Start Game` and load into the main menu.

Once you have completed the above, you can now play SPT and install mods found on [The Forge](https://forge.sp-tarkov.com/). 
Make sure to download the `3.11` versions of mods. You can see old version of mods in the `Versions` tab on their mod pages.

## Common Installation and Start-up Issues
Below you can find some common issues that users encounter when installing or first starting SPT, along with the solution to fixing it. If your issue is not listed then join our [Discord Server](http://discord.sp-tarkov.com/) and ask in the [`#support-3-11`](https://discord.com/channels/875684761291599922/1172730102119944222) channel.

<details>
<summary>The application had a critical error and failed to run "Watermark" error.</summary>

<img src="/failedshortcuts.png" style="border: 2px solid grey;" alt="Watermark Error">

This happens because you have moved the `SPT.Server` and/or the `SPT.Launcher`, out of your `SPT` folder. 
You will need to move these back into your `SPT` folder and create desktop shortcuts of these. You can do this by right-clicking the executables and then `Send To > Desktop (create shortcut)`.
</details>






====================================================================================================
DOCUMENT: Map Scenes Reference Sheet
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/references/map-scenes.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/references/map-scenes.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Map Scenes Reference Sheet
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/references/map-scenes.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Map Scenes Reference Sheet
description: A reference page for mod authors who are interested in maps.
published: true
date: 2026-06-04T00:36:42.297Z
tags: mods, maps
editor: markdown
dateCreated: 2026-06-04T00:36:42.297Z
---

# Map Scenes Reference Sheet

This page references all scenes from which maps are constructed and bundles that contain them

Updated as of 4.0.13

## Navigation

- [Customs](#customs)
- [Factory (Day)](#factory-day)
- [Factory (Night)](#factory-night)
- [Laboratory](#laboratory)
- [Lighthouse](#lighthouse)
- [Reserve](#reserve)
- [Interchange](#interchange)
- [Shoreline](#shoreline)
- [Woods](#woods)
- [Streets of Tarkov](#streets-of-tarkov)
- [Labyrinth](#labyrinth)
- [Ground Zero (Level Low)](#ground-zero-level-low)
- [Ground Zero (Level High)](#ground-zero-level-high)

## General Information

`Bundle` is given relative to `Escape from Tarkov\EscapeFromTarkov_Data` for brevity<br>
`Scene` is given without `.unity` extension and relative to `Assets/Content/Locations` for brevity

### Customs

| Bundle | Scene |
| :--- | :--- |
| level4 | Custom/custom_AI |
| level5 | Custom/custom_multiScene |
| level6 | Custom/custom_AZS |
| level7 | Custom/custom_AZS_old |
| level8 | Custom/custom_DesignStuff |
| level9 | Custom/custom_Garage |
| level10 | Custom/custom_Obshezhitie |
| level11 | Custom/custom_Obshezhitie_1_indoor |
| level12 | Custom/custom_Obshezhitie_2_indoor |
| level13 | Custom/custom_Light |
| level14 | Custom/custom_Road |
| level15 | Custom/custom_Scripts |
| level16 | Custom/custom_Tamozhnya |
| level17 | Custom/custom_Terrain |
| level18 | Custom/custom_TrailerPark |
| level19 | Custom/custom_background |
| level20 | Custom/custom_city |
| level21 | Custom/custom_factoryStorageZone |
| level22 | Custom/custom_mazuto |
| level170 | Custom/Custom_Expansion_Temp/custom_Abandoned_Lab |
| level171 | Custom/Custom_Expansion_Temp/custom_Abandoned_Plant |
| level172 | Custom/Custom_Expansion_Temp/Custom_ChemicalFactory |
| level173 | Custom/Custom_Expansion_Temp/Custom_Construction_Factory |
| level174 | Custom/Custom_Expansion_Temp/Custom_Expansion |
| level175 | Custom/Custom_Expansion_Temp/custom_Pump_Station |
| level176 | Custom/Custom_Expansion_Temp/Custom_RepairBox |
| level511 | Custom/Custom_Sound |
| level514 | Custom/custom_DesignMain |
| level515 | Custom/custom_Culling |

### Factory (Day)

| Bundle | Scene |
| :--- | :--- |
| level525 | Factory_Rework/Factory_Rework_Day_Scripts |
| level526 | Factory_Rework/Factory_Rework_Day_Light |
| level527 | Factory_Rework/Factory_Rework_Areas |
| level528 | Factory_Rework/Factory_Rework_Main_Building |
| level529 | Factory_Rework/Factory_Rework_Basement |
| level530 | Factory_Rework/Factory_Rework_Admin_Office |
| level531 | Factory_Rework/Factory_Rework_Laboratory |
| level532 | Factory_Rework/Factory_Rework_Background |
| level533 | Factory_Rework/Factory_Rework_DesignStuff |
| level534 | Factory_Rework/Factory_Rework_DesignMain |
| level535 | Factory_Rework/Factory_Rework_Quests |
| level536 | Factory_Rework/Factory_Rework_AI |
| level537 | Factory_Rework/Factory_Sound_Rework |
| level538 | Factory_Rework/Factory_Rework_Day_Culling |

### Factory (Night)

| Bundle | Scene |
| :--- | :--- |
| level527 | Factory_Rework/Factory_Rework_Areas |
| level528 | Factory_Rework/Factory_Rework_Main_Building |
| level529 | Factory_Rework/Factory_Rework_Basement |
| level530 | Factory_Rework/Factory_Rework_Admin_Office |
| level531 | Factory_Rework/Factory_Rework_Laboratory |
| level532 | Factory_Rework/Factory_Rework_Background |
| level533 | Factory_Rework/Factory_Rework_DesignStuff |
| level534 | Factory_Rework/Factory_Rework_DesignMain |
| level536 | Factory_Rework/Factory_Rework_AI |
| level537 | Factory_Rework/Factory_Sound_Rework |
| level539 | Factory_Rework/Factory_Rework_Night_Culling |
| level540 | Factory_Rework/Factory_Rework_Night_Scripts |
| level541 | Factory_Rework/Factory_Rework_Night_Light |
| level542 | Factory_Rework/Factory_Rework_Night_Quests |

### Laboratory

| Bundle | Scene |
| :--- | :--- |
| level67 | Laboratory/Laboratory_Scripts |
| level71 | Laboratory/Laboratory_work_zone |
| level72 | Laboratory/Laboratory_relax_zone |
| level73 | Laboratory/Laboratory_Medical_corridor_toilets_floor_1 |
| level74 | Laboratory/Laboratory_Office_Above_Boiler_Room_floor_1 |
| level75 | Laboratory/Laboratory_Medical_corridor_toilets_floor_2 |
| level76 | Laboratory/Laboratory_Medical_block_floor_1 |
| level77 | Laboratory/Laboratory_Medical_block_floor_2 |
| level78 | Laboratory/Laboratory_Medical_corridors_ladder_walls |
| level79 | Laboratory/Laboratory_Medical_corridor_floor_1 |
| level80 | Laboratory/Laboratory_Medical_corridor_floor_2 |
| level81 | Laboratory/Laboratory_Recreation_toilets |
| level82 | Laboratory/Laboratory_Hangar |
| level83 | Laboratory/Laboratory_Server_Room_floor_1 |
| level84 | Laboratory/Laboratory_Server_Room_Corridor_floor_1 |
| level85 | Laboratory/Laboratory_ControlServerRoom_floor_2 |
| level86 | Laboratory/Laboratory_parking |
| level87 | Laboratory/Laboratory_Cafe |
| level88 | Laboratory/Laboratory_Gym |
| level89 | Laboratory/Laboratory_reception |
| level90 | Laboratory/Laboratory_Office_block_toilets |
| level91 | Laboratory/Laboratory_Boiler_Room_floor_1 |
| level92 | Laboratory/Laboratory_Office_block |
| level93 | Laboratory/Laboratory_parking_corridorL_floor_1 |
| level94 | Laboratory/Laboratory_Recreation_corridors |
| level95 | Laboratory/Laboratory_parking_corridorR_floor_1 |
| level96 | Laboratory/Laboratory_Presentation_room |
| level97 | Laboratory/Laboratory_Research_Test_Room |
| level98 | Laboratory/Laboratory_RnD_lab |
| level99 | Laboratory/Laboratory_basement_corridors_01 |
| level100 | Laboratory/Laboratory_basement_corridors_02 |
| level101 | Laboratory/Laboratory_Accumulation_collector |
| level102 | Laboratory/Laboratory_basement_Collector_tunnel |
| level103 | Laboratory/Laboratory_Security_block |
| level104 | Laboratory/Laboratory_basement_Electropanelboard_room_01 |
| level105 | Laboratory/Laboratory_basement_Electropanelboard_room_02 |
| level106 | Laboratory/Laboratory_basement_Thermal_point |
| level107 | Laboratory/Laboratory_basement_Boiler_room_02 |
| level108 | Laboratory/Laboratory_basement_Autonomous_power_station |
| level109 | Laboratory/Laboratory_basement_Ventilation_room_02 |
| level110 | Laboratory/Laboratory_basement_Bunker |
| level111 | Laboratory/Laboratory_basement_Electropanelboard_room_03 |
| level112 | Laboratory/Laboratory_Collector_Exit |
| level113 | Laboratory/Laboratory_AI |
| level114 | Laboratory/Laboratory_LIGHT |
| level115 | Laboratory/Laboratory_DesignStuff |
| level400 | Laboratory/Laboratory_Sound |
| level516 | Laboratory/Laboratory_DesignMain |
| level517 | Laboratory/Laboratory_Culling |

### Lighthouse

| Bundle | Scene |
| :--- | :--- |
| level183 | Lighthouse/Lighthouse_Abadonned_pier |
| level184 | Lighthouse/Lighthouse_AI |
| level185 | Lighthouse/Lighthouse_Background |
| level186 | Lighthouse/Lighthouse_Bus_Stop |
| level187 | Lighthouse/Lighthouse_Chalet |
| level188 | Lighthouse/Lighthouse_Complex |
| level189 | Lighthouse/Lighthouse_DesignStuff |
| level190 | Lighthouse/Lighthouse_Fisher_Village |
| level191 | Lighthouse/Lighthouse_Light |
| level192 | Lighthouse/Lighthouse_Logistics_Terminal |
| level193 | Lighthouse/Lighthouse_Main |
| level194 | Lighthouse/Lighthouse_Marina |
| level195 | Lighthouse/Lighthouse_Roads |
| level196 | Lighthouse/Lighthouse_Scripts |
| level197 | Lighthouse/Lighthouse_Small_RLS_base |
| level198 | Lighthouse/Lighthouse_SummerHotel |
| level199 | Lighthouse/Lighthouse_SwampVillage |
| level200 | Lighthouse/Lighthouse_Terrain |
| level201 | Lighthouse/Lighthouse_Tower |
| level202 | Lighthouse/Lighthouse_TrainStation |
| level203 | Lighthouse/Lighthouse_Tunnel |
| level204 | Lighthouse/Lighthouse_Water_filter_facility_01 |
| level205 | Lighthouse/Lighthouse_Water_filter_facility_02 |
| level206 | Lighthouse/Lighthouse_Water_filter_facility_03 |
| level207 | Lighthouse/Lighthouse_WaterStation |
| level208 | Lighthouse/Lighthouse_island |
| level209 | Lighthouse/Lighthouse_Culling |
| level404 | Lighthouse/Lighthouse_Sound |
| level524 | Lighthouse/Lighthouse_DesignMain |

### Reserve

| Bundle | Scene |
| :--- | :--- |
| level116 | Reserve_Base/Reserve_Base_DesignStuff |
| level117 | Reserve_Base/Reserve_Base_Academy_and_Kitchens |
| level118 | Reserve_Base/Reserve_Base_BunkersBig |
| level119 | Reserve_Base/Reserve_Base_Casarms |
| level120 | Reserve_Base/Reserve_Base_HQ |
| level121 | Reserve_Base/Reserve_Base_Main_Checkpoint |
| level122 | Reserve_Base/Reserve_Base_MilitaryDorms |
| level123 | Reserve_Base/Reserve_Base_Platz |
| level124 | Reserve_Base/Reserve_Base_Repairing_base |
| level125 | Reserve_Base/Reserve_Base_RLS_Block |
| level126 | Reserve_Base/Reserve_Base_Storages |
| level127 | Reserve_Base/Reserve_Base_TrainStation |
| level128 | Reserve_Base/Reserve_Base_VOHR_Camps |
| level129 | Reserve_Base/Reserve_Base_basement_transition |
| level130 | Reserve_Base/Reserve_Base_basement_shaft |
| level131 | Reserve_Base/Reserve_Base_basement_Block_A |
| level132 | Reserve_Base/Reserve_Base_basement_Block_B |
| level133 | Reserve_Base/Reserve_Base_basement_ClimatControl_room |
| level134 | Reserve_Base/Reserve_Base_basement_Corridor_A |
| level135 | Reserve_Base/Reserve_Base_basement_Corridor_B |
| level136 | Reserve_Base/Reserve_Base_AI |
| level137 | Reserve_Base/Reserve_Base_RLS_Station |
| level138 | Reserve_Base/Reserve_Base_Main_RTS |
| level139 | Reserve_Base/Reserve_Base_Scripts |
| level140 | Reserve_Base/Reserve_Base_Terrain |
| level141 | Reserve_Base/Reserve_Base_Mortar_Position |
| level142 | Reserve_Base/Reserve_Base_outside_BLOCK_11 |
| level143 | Reserve_Base/Reserve_Base_Background |
| level144 | Reserve_Base/Reserve_Base_Roads |
| level145 | Reserve_Base/Reserve_Base_basement_Exit |
| level146 | Reserve_Base/Reserve_Base_Light |
| level147 | Reserve_Base/Reserve_Base_PTOR |
| level148 | Reserve_Base/Reserve_Base_outside_BLOCK_2 |
| level149 | Reserve_Base/Reserve_Base_outside_BLOCK_3 |
| level150 | Reserve_Base/Reserve_Base_outside_BLOCK_1 |
| level151 | Reserve_Base/Reserve_Base_outside_BLOCK_4 |
| level152 | Reserve_Base/Reserve_Base_outside_BLOCK_6 |
| level153 | Reserve_Base/Reserve_Base_outside_BLOCK_5 |
| level154 | Reserve_Base/Reserve_Base_outside_BLOCK_7 |
| level155 | Reserve_Base/Reserve_Base_outside_BLOCK_8 |
| level156 | Reserve_Base/Reserve_Base_outside_BLOCK_9 |
| level157 | Reserve_Base/Reserve_Base_outside_BLOCK_10 |
| level158 | Reserve_Base/Reserve_Base_Bunkers |
| level159 | Reserve_Base/Reserve_Base_Train |
| level168 | Reserve_Base/Reserve_Base_vegetable_warehouse |
| level169 | Reserve_Base/Rezerv_Base_Bunkers2 |
| level401 | Reserve_Base/Reserve_Sound |
| level518 | Reserve_Base/Reserve_Base_DesignMain |
| level519 | Reserve_Base/Reserve_Base_Culling |

### Interchange

| Bundle | Scene |
| :--- | :--- |
| level52 | Shopping_Mall/Shopping_Mall_DesignStuff |
| level53 | Shopping_Mall/Shopping_Mall_Scripts |
| level54 | Shopping_Mall/Shopping_Mall_2 |
| level55 | Shopping_Mall/Shopping_Mall_GOSHAN |
| level56 | Shopping_Mall/Shopping_Mall_IDEA |
| level57 | Shopping_Mall/Shopping_Mall_OLI |
| level58 | Shopping_Mall/Shopping_Mall_Shops |
| level59 | Shopping_Mall/Shopping_Mall_Shops_Floor2 |
| level60 | Shopping_Mall/Shopping_Mall_indoor |
| level61 | Shopping_Mall/Shopping_Mall_indoor_buildup |
| level62 | Shopping_Mall/Shopping_Mall_outdoor |
| level63 | Shopping_Mall/Shopping_Mall_Terrain |
| level64 | Shopping_Mall/Shopping_Mall_light |
| level65 | Shopping_Mall/Shopping_Mall_parking_work |
| level66 | Shopping_Mall/Shopping_Mall_AI |
| level403 | Shopping_Mall/Shopping_Mall_Sound |
| level520 | Shopping_Mall/Shopping_Mall_DesignMain |
| level521 | Shopping_Mall/Shopping_Mall_Culling |

### Shoreline

| Bundle | Scene |
| :--- | :--- |
| level23 | shorline/Shoreline_North |
| level24 | shorline/shoreline_AI |
| level25 | shorline/shoreline_Terrain |
| level26 | shorline/shoreline_azs |
| level27 | shorline/Shoreline_Culling |
| level28 | shorline/Shoreline_East |
| level29 | shorline/Shoreline_DesignMain |
| level30 | shorline/Shoreline_Middle |
| level31 | shorline/shoreline_DesignStuff |
| level32 | shorline/shoreline_meteostation |
| level33 | shorline/shoreline_parking_sanatorium |
| level34 | shorline/Shoreline_South |
| level35 | shorline/shoreline_pirs02 |
| level36 | shorline/shoreline_sanatorium |
| level37 | shorline/Shoreline_Sanatorium_indoor |
| level38 | shorline/shoreline_scripts |
| level39 | shorline/Shoreline_West |
| level40 | shorline/shoreline_tunel |
| level41 | shorline/Shoreline_Light |
| level402 | shorline/Shoreline_Sound |

### Woods

| Bundle | Scene |
| :--- | :--- |
| level42 | Woods/woods_AI |
| level43 | Woods/woods_combined |
| level164 | Woods/woods_Scripts |
| level165 | Woods/woods_terrain |
| level166 | Woods/woods_design_stuff |
| level167 | Woods/woods_light |
| level399 | Woods/Woods_Sound |
| level522 | Woods/woods_DesignMain |
| level523 | Woods/woods_Culling |

### Streets of Tarkov

| Bundle | Scene |
| :--- | :--- |
| level211 | City/City_Scripts |
| level212 | City/City_AI |
| level213 | City/City_culling |
| level214 | City/City_Areas/City_NE_01/City_NE_01_buildings_back |
| level215 | City/City_Areas/City_NE_01/City_NE_01_courtyard_A |
| level216 | City/City_Areas/City_NE_02/City_NE_02_buildings_back |
| level217 | City/City_Areas/City_NE_02/City_NE_02_courtyard |
| level218 | City/City_Areas/City_NE_02/City_NE_02_TD_Klimova |
| level219 | City/City_Areas/City_NE_02/City_NE_02_TD_Klimova_courtyard |
| level220 | City/City_Areas/City_NW_01/City_NW_01_Cardinal |
| level221 | City/City_Areas/City_NW_01/City_NW_01_courtyard |
| level222 | City/City_Areas/City_NW_02/City_NW_02_courtyard |
| level223 | City/City_Areas/City_NW_02/City_NW_02_buildings_back |
| level224 | City/City_Areas/City_NW_03/City_NW_03_courtyard_A |
| level225 | City/City_Areas/City_NW_03/City_NW_03_buildings_back |
| level226 | City/City_Areas/City_SE_01/City_SE_01_courtyard_A |
| level227 | City/City_Areas/City_SE_01/City_SE_01_courtyard_B |
| level228 | City/City_Areas/City_SE_01/City_SE_01_Klimova_24 |
| level229 | City/City_Areas/City_SE_01/City_SE_01_Lenina_74 |
| level230 | City/City_Areas/City_SE_01/City_SE_01_Nikitskaya_1 |
| level231 | City/City_Areas/City_SE_01/City_SE_01_Nikitskaya_1_Indoor |
| level232 | City/City_Areas/City_SE_01/City_SE_01_Pinewood_Hotel |
| level233 | City/City_Areas/City_SE_01/City_SE_01_Pinewood_Hotel_indoor |
| level234 | City/City_Areas/City_SE_02/City_SE_02_courtyard_A |
| level235 | City/City_Areas/City_SE_02/City_SE_02_courtyard_B |
| level236 | City/City_Areas/City_SE_02/City_SE_02_Lenina_78 |
| level237 | City/City_Areas/City_SE_02/City_SE_02_Lenina_76 |
| level238 | City/City_Areas/City_SE_02/City_SE_02_Malevicha_1 |
| level239 | City/City_Areas/City_SE_02/City_SE_02_Malevicha_1_indoor |
| level240 | City/City_Areas/City_SE_02/CIty_SE_02_Malevicha_2 |
| level241 | City/City_Areas/City_SE_02/CIty_SE_02_Malevicha_2_indoor |
| level242 | City/City_Areas/City_SE_02/City_SE_02_Malevicha_3 |
| level243 | City/City_Areas/City_SE_02/City_SE_02_Malevicha_3_Indoor |
| level244 | City/City_Areas/City_SE_02/City_SE_02_Malevicha_5 |
| level245 | City/City_Areas/City_SE_02/CIty_SE_02_Nikitskaya_2 |
| level246 | City/City_Areas/City_SE_02/CIty_SE_02_Nikitskaya_2_indoor |
| level247 | City/City_Areas/City_SE_02/City_SE_02_Nikitskaya_4 |
| level248 | City/City_Areas/City_SE_02/City_SE_02_Nikitskaya_6 |
| level249 | City/City_Areas/City_SE_02/City_SE_02_Nikitskaya_6_indoor |
| level250 | City/City_Areas/City_SE_02/City_SE_02_Nikitskaya_8 |
| level251 | City/City_Areas/City_SE_02/City_SE_02_Nikitskaya_8_Indoor |
| level252 | City/City_Areas/City_SE_02/City_SE_02_Nikitskaya_10 |
| level253 | City/City_Areas/City_SE_02/City_SE_02_Nikitskaya_10_indoor |
| level254 | City/City_Areas/City_SE_02/City_SE_02_Nikitskaya_10a |
| level255 | City/City_Areas/City_SE_02/City_SE_02_Nikitskaya_10a_indoor |
| level256 | City/City_Areas/City_SE_02/City_SE_02_Primorskiy_49 |
| level257 | City/City_Areas/City_SE_02/City_SE_02_Primorskiy_49_indoor |
| level258 | City/City_Areas/City_SE_02/City_SE_02_Primorskiy_51 |
| level259 | City/City_Areas/City_SE_02/City_SE_02_Primorskiy_51_indoor |
| level260 | City/City_Areas/City_SE_02/City_SE_02_Verhnyaya_Sadovaya_1 |
| level261 | City/City_Areas/City_SE_02/City_SE_02_Verhnyaya_Sadovaya_3 |
| level262 | City/City_Areas/City_SE_02/City_SE_02_Verhnyaya_Sadovaya_3_indoor |
| level263 | City/City_Areas/City_SE_03/City_SE_03_Cinema |
| level264 | City/City_Areas/City_SE_03/City_SE_03_Cinema_indoor |
| level265 | City/City_Areas/City_SE_03/City_SE_03_Cinema_Street |
| level266 | City/City_Areas/City_SE_03/City_SE_03_Lenina_80 |
| level267 | City/City_Areas/City_SE_03/City_SE_03_Square_Gagarina |
| level268 | City/City_Areas/City_SE_03/City_SE_03_Verhnyaya_Sadovaya_4 |
| level269 | City/City_Areas/City_SE_04/City_SE_04_courtyard |
| level270 | City/City_Areas/City_SE_04/City_SE_04_Lenina_84 |
| level271 | City/City_Areas/City_SE_04/City_SE_04_Nizhnyaya_Sadovaya_2 |
| level272 | City/City_Areas/City_SE_04/City_SE_04_Nizhnyaya_Sadovaya_4 |
| level273 | City/City_Areas/City_SE_04/City_SE_04_Nizhnyaya_Sadovaya_4_indoor |
| level274 | City/City_Areas/City_SE_04/City_SE_04_Nizhnyaya_Sadovaya_4a |
| level275 | City/City_Areas/City_SE_04/City_SE_04_Nizhnyaya_Sadovaya_6 |
| level276 | City/City_Areas/City_SE_04/City_SE_04_Nizhynaya_Sadovaya_8 |
| level277 | City/City_Areas/City_SE_04/City_SE_04_Primorskiy_53 |
| level278 | City/City_Areas/City_SE_04/City_SE_04_Primorskiy_53_indoor |
| level279 | City/City_Areas/City_SE_04/City_SE_04_Primorskiy_55 |
| level280 | City/City_Areas/City_SE_04/City_SE_04_Primorskiy_57 |
| level281 | City/City_Areas/City_SE_05/City_SE_05_buildings_back |
| level282 | City/City_Areas/City_SE_05/City_SE_05_courtyard |
| level283 | City/City_Areas/City_SE_05/City_SE_05_Lenina_75 |
| level284 | City/City_Areas/City_SE_05/City_SE_05_Nikitskiy_Market |
| level285 | City/City_Areas/City_SE_06/City_SE_06_courtyard |
| level286 | City/City_Areas/City_SE_06/City_SE_06_buildings_back |
| level287 | City/City_Areas/City_SE_07/City_SE_07_courtyard |
| level288 | City/City_Areas/City_SE_07/City_SE_07_buildings_back |
| level289 | City/City_Areas/City_SW_01_A/City_SW_01_A_Chekannaya_15 |
| level290 | City/City_Areas/City_SW_01_A/City_SW_01_A_Chekannaya_15_indoor |
| level291 | City/City_Areas/City_SW_01_A/City_SW_01_A_courtyard |
| level292 | City/City_Areas/City_SW_01_A/City_SW_01_A_Klimova_18 |
| level293 | City/City_Areas/City_SW_01_A/City_SW_01_A_Klimova_20 |
| level294 | City/City_Areas/City_SW_01_A/City_SW_01_A_Primorskiy_44 |
| level295 | City/City_Areas/City_SW_01_A/City_SW_01_A_Primorskiy_44_indoor |
| level296 | City/City_Areas/City_SW_01_A/City_SW_01_A_Primorskiy_46 |
| level297 | City/City_Areas/City_SW_01_A/City_SW_01_A_Primorskiy_46_indoor |
| level298 | City/City_Areas/City_SW_01_A/City_SW_01_A_Primorskiy_48 |
| level299 | City/City_Areas/City_SW_01_A/City_SW_01_A_Primorskiy_48_indoor |
| level300 | City/City_Areas/City_SW_01_A/City_SW_01_A_Primorskiy_50 |
| level301 | City/City_Areas/City_SW_01_A/City_SW_01_A_Primorskiy_50_indoor |
| level302 | City/City_Areas/City_SW_01_A/City_SW_01_A_Primorskiy_52 |
| level303 | City/City_Areas/City_SW_01_A/City_SW_01_A_Primorskiy_52_indoor |
| level304 | City/City_Areas/City_SW_01_A/City_SW_01_A_Zmeiskiy_1 |
| level305 | City/City_Areas/City_SW_01_A/City_SW_01_A_Zmeiskiy_3 |
| level306 | City/City_Areas/City_SW_01_A/City_SW_01_A_Zmeiskiy_3_indoor |
| level307 | City/City_Areas/City_SW_01_A/City_SW_01_A_Zmeiskiy_3a |
| level308 | City/City_Areas/City_SW_01_A/City_SW_01_A_Zmeiskiy_3a_indoor |
| level309 | City/City_Areas/City_SW_01_A/City_SW_01_A_Zmeiskiy_5 |
| level310 | City/City_Areas/City_SW_01_A/City_SW_01_A_Zmeiskiy_5_indoor |
| level311 | City/City_Areas/City_SW_01_B/City_SW_01_B_Chekannaya_13 |
| level312 | City/City_Areas/City_SW_01_B/City_SW_01_B_courtyard |
| level313 | City/City_Areas/City_SW_01_B/City_SW_01_B_Kamchatskaya_5b |
| level314 | City/City_Areas/City_SW_01_B/City_SW_01_B_Klimova_16 |
| level315 | City/City_Areas/City_SW_01_B/City_SW_01_B_Klimova_16a |
| level316 | City/City_Areas/City_SW_01_B/City_SW_01_B_School_30 |
| level317 | City/City_Areas/City_SW_01_B/City_SW_01_B_Zmeiskiy_2 |
| level318 | City/City_Areas/City_SW_01_B/City_SW_01_B_Zmeiskiy_4 |
| level319 | City/City_Areas/City_SW_01_B/City_SW_01_B_Zmeiskiy_4a |
| level320 | City/City_Areas/City_SW_01_B/City_SW_01_B_Zmeiskiy_6 |
| level321 | City/City_Areas/City_SW_01_B/City_SW_01_B_Zmeiskiy_8 |
| level322 | City/City_Areas/City_NW_03/City_NW_03_Sportmarket_Lermontova |
| level323 | City/City_Areas/City_SW_02/City_SW_02_Construction |
| level324 | City/City_Areas/City_SW_02/City_SW_02_Construction_indoor |
| level325 | City/City_Areas/City_SW_02/City_SW_02_Construction_outdoor |
| level326 | City/City_Areas/City_SW_02/City_SW_02_LexOs_AutoService |
| level327 | City/City_Areas/City_SW_02/City_SW_02_LexOs_AutoService_courtyard |
| level328 | City/City_Areas/City_SW_02/City_SW_02_LexOs_AutoService_indoor |
| level329 | City/City_Areas/City_SW_02/City_SW_02_LexOs_blockpost |
| level330 | City/City_Areas/City_SW_02/City_SW_02_LexOs_RemBox |
| level331 | City/City_Areas/City_SW_02/City_SW_02_LexOs_RemBox_indoor |
| level332 | City/City_Areas/City_SW_02/City_SW_02_Primorskiy_56 |
| level333 | City/City_Areas/City_SW_02/City_SW_02_Primorskiy_56_indoor |
| level334 | City/City_Areas/City_SW_02/City_SW_02_Razvedchikov_7 |
| level335 | City/City_Areas/City_SW_02/City_SW_02_Razvedchikov_7_indoor |
| level336 | City/City_Areas/City_SW_02/City_SW_02_Razvedchikov_9 |
| level337 | City/City_Areas/City_SW_02/City_SW_02_Razvedchikov_9_indoor |
| level338 | City/City_Areas/City_SW_02/City_SW_02_Razvedchikov_9_Parking |
| level339 | City/City_Areas/City_SW_02/City_SW_02_Razvedchikov_Courtyard_A |
| level340 | City/City_Areas/City_SW_02/City_SW_02_Sparja |
| level341 | City/City_Areas/City_SW_02/City_SW_02_Sparja_courtyard |
| level342 | City/City_Areas/City_SW_02/City_SW_02_Sparja_indoor |
| level343 | City/City_Areas/City_SW_03/City_SW_03_buildings_back |
| level344 | City/City_Areas/City_SW_03/City_SW_03_courtyad_B |
| level345 | City/City_Areas/City_SW_04/City_SW_04_courtyard |
| level346 | City/City_Areas/City_SW_04/City_SW_04_Primorskiy_58 |
| level347 | City/City_Areas/City_SW_04/City_SW_04_Primorskiy_58_indoor |
| level348 | City/City_Areas/City_SW_04/City_SW_04_Primorskiy_60 |
| level349 | City/City_Areas/City_NW_03/City_NW_03_Sportmarket_Lermontova_indoor |
| level350 | City/City_Areas/City_SW_05/City_SW_05_courtyard_A |
| level351 | City/City_Areas/City_SW_05/City_SW_05_courtyard_B |
| level352 | City/City_Areas/City_SW_05/City_SW_05_Building_Back |
| level353 | City/City_Areas/City_Roads/City_Roads_Chekannaya |
| level354 | City/City_Areas/City_Roads/City_Roads_Kamchatskaya |
| level355 | City/City_Areas/City_Roads/City_Roads_Klimova |
| level356 | City/City_Areas/City_Roads/City_Roads_Lenina |
| level357 | City/City_Areas/City_Roads/City_Roads_Malevicha |
| level358 | City/City_Areas/City_Roads/City_Roads_Nikitskaya |
| level359 | City/City_Areas/City_Roads/City_Roads_Primorskiy |
| level360 | City/City_Areas/City_Roads/City_Roads_Razvedchikov |
| level361 | City/City_Areas/City_Roads/City_Roads_Rohlina |
| level362 | City/City_Areas/City_Roads/City_Roads_Sadovaya |
| level363 | City/City_Areas/City_Roads/City_Roads_Tunnel |
| level364 | City/City_Areas/City_Roads/City_Roads_Underground |
| level365 | City/City_Areas/City_Roads/City_Roads_Zmeiskiy |
| level366 | City/City_Areas/City_NW_03/City_NW_03_Klimova_1a |
| level367 | City/City_Areas/City_Light/City_NE_02_Light |
| level368 | City/City_Areas/City_Light/City_NW_01_Light |
| level369 | City/City_Areas/City_NW_03/City_NW_03_Senator |
| level370 | City/City_Areas/City_Light/City_NW_03_Light |
| level371 | City/City_Areas/City_Light/City_Roads_Light |
| level372 | City/City_Areas/City_Light/City_SE_01_Light |
| level373 | City/City_Areas/City_Light/City_SE_02_Light |
| level374 | City/City_Areas/City_Light/City_SE_03_Light |
| level375 | City/City_Areas/City_Light/City_SE_04_Light |
| level376 | City/City_Areas/City_Light/City_SE_05_Light |
| level377 | City/City_Areas/City_Light/City_SE_06_Light |
| level378 | City/City_Areas/City_NW_03/City_NW_03_Klimova_1a_indoor |
| level379 | City/City_Areas/City_Light/City_SW_01_A_Light |
| level380 | City/City_Areas/City_Light/City_SW_01_B_Light |
| level381 | City/City_Areas/City_Light/City_SW_02_Light |
| level382 | City/City_Areas/City_Light/City_SW_04_Light |
| level383 | City/City_Areas/City_Light/City_SW_05_Light |
| level384 | City/City_Areas/City_DesignStuff/City_Roads_DesignStuff |
| level385 | City/City_Areas/City_DesignStuff/City_SE_01_DesignStuff |
| level386 | City/City_Areas/City_DesignStuff/City_SE_02_DesignStuff |
| level387 | City/City_Areas/City_DesignStuff/City_SE_03_DesignStuff |
| level388 | City/City_Areas/City_DesignStuff/City_SE_04_DesignStuff |
| level389 | City/City_Areas/City_DesignStuff/City_SW_01_A_DesignStuff |
| level390 | City/City_Areas/City_DesignStuff/City_SW_02_DesignStuff |
| level391 | City/City_Areas/City_DesignStuff/City_SW_04_DesignStuff |
| level392 | City/City_Areas/City_Light/City_Portals |
| level393 | City/City_Areas/City_Light/City_Stencil |
| level394 | City/City_Areas/City_Grass |
| level395 | City/City_Quests |
| level396 | City/City_Design_Main |
| level397 | City/City_Sound |
| level405 | City/City_Areas/City_NE_02/City_NE_02_Primorskiy_43 |
| level406 | City/City_Areas/City_NE_02/City_NE_02_Primorskiy_45 |
| level407 | City/City_Areas/City_NE_02/City_NE_02_Primorskiy_45_indoor |
| level408 | City/City_Areas/City_NE_02/City_NE_02_TD_Klimova_Beluga_indoor |
| level409 | City/City_Areas/City_NE_02/City_NE_02_TD_Klimova_Foodcourt_indoor |
| level410 | City/City_Areas/City_NE_02/City_NE_02_TD_Klimova_indoor |
| level411 | City/City_Areas/City_NE_02/City_NE_02_TD_Klimova_Toy_Store_indoor |
| level412 | City/City_Areas/City_NE_02/City_NE_02_Transtechexport |
| level413 | City/City_Areas/City_NE_02/City_NE_02_Transtechexport_indoor |
| level414 | City/City_Areas/City_NE_02/City_NE_02_Tyaglovoy_Per_1 |
| level415 | City/City_Areas/City_NW_01/City_NW_01_Cardinal_indoor |
| level416 | City/City_Areas/City_NW_02/City_NW_02_Tetris |
| level417 | City/City_Areas/City_Roads/City_Roads_Sahalinskaya |
| level418 | City/City_Areas/City_Roads/City_Roads_Tyaglovoy_Per |
| level419 | City/City_Areas/City_SE_04/City_SE_04_Nizhnyaya_Sadovaya_4a_indoor |
| level420 | City/City_Areas/City_SW_01_A/City_SW_01_A_Klimova_18_Indoor |
| level421 | City/City_Areas/City_SW_01_B/City_SW_01_B_Chekannaya_13_indoor |
| level422 | City/City_Areas/City_SW_01_B/City_SW_01_B_Kamchatskaya_1 |
| level423 | City/City_Areas/City_SW_01_B/City_SW_01_B_Kamchatskaya_1a |
| level424 | City/City_Areas/City_SW_01_B/City_SW_01_B_Kamchatskaya_1a_indoor |
| level425 | City/City_Areas/City_SW_01_B/City_SW_01_B_Kamchatskaya_3 |
| level426 | City/City_Areas/City_SW_01_B/City_SW_01_B_Kamchatskaya_3_indoor |
| level427 | City/City_Areas/City_SW_01_B/City_SW_01_B_Kamchatskaya_5 |
| level428 | City/City_Areas/City_SW_01_B/City_SW_01_B_Kamchatskaya_5b_indoor |
| level429 | City/City_Areas/City_SW_01_B/City_SW_01_B_Klimova_12 |
| level430 | City/City_Areas/City_SW_01_B/City_SW_01_B_Klimova_14 |
| level431 | City/City_Areas/City_SW_01_B/City_SW_01_B_Klimova_14a |
| level432 | City/City_Areas/City_SW_01_B/City_SW_01_B_Klimova_14a_indoor |
| level433 | City/City_Areas/City_SW_01_B/City_SW_01_B_Klimova_16_indoor |
| level434 | City/City_Areas/City_SW_01_B/City_SW_01_B_Klimova_16a_indoor |
| level435 | City/City_Areas/City_SW_01_B/City_SW_01_B_School_30_indoor |
| level436 | City/City_Areas/City_SW_01_B/City_SW_01_B_Zmeiskiy_2_indoor |
| level437 | City/City_Areas/City_SW_01_B/City_SW_01_B_Zmeiskiy_4a_indoor |
| level438 | City/City_Areas/City_SW_01_B/City_SW_01_B_Zmeiskiy_8_indoor |
| level439 | City/City_Areas/City_SW_03/City_SW_03_courtyad_A |
| level440 | City/City_Areas/City_SW_03/City_SW_03_Kamchatskaya_2 |
| level441 | City/City_Areas/City_SW_03/City_SW_03_Kamchatskaya_4 |
| level442 | City/City_Areas/City_SW_03/City_SW_03_Klimova_2 |
| level443 | City/City_Areas/City_SW_03/City_SW_03_Klimova_6 |
| level444 | City/City_Areas/City_SW_03/City_SW_03_Klimova_8 |
| level445 | City/City_Areas/City_SW_03/City_SW_03_Klimova_10 |
| level446 | City/City_Areas/City_SW_04/City_SW_04_Primorskiy_58_str1 |
| level447 | City/City_Areas/City_SW_04/City_SW_04_Primorskiy_58_str1_indoor |
| level448 | City/City_Areas/City_SW_05/City_SW_05_A_Kamchatskaya_12 |
| level449 | City/City_Areas/City_SW_05/City_SW_05_A_Kamchatskaya_16 |
| level450 | City/City_Areas/City_SW_05/City_SW_05_A_Razvedchikov_5 |
| level451 | City/City_Areas/City_SW_05/City_SW_05_B_Razvedchikov_4 |
| level452 | City/City_Areas/City_SW_05/City_SW_05_B_Razvedchikov_4_indoor |
| level453 | City/City_Areas/City_SW_05/City_SW_05_B_Razvedchikov_6 |
| level454 | City/City_Areas/City_DesignStuff/City_NE_02_DesignStuff |
| level455 | City/City_Areas/City_DesignStuff/City_NW_01_DesignStuff |
| level456 | City/City_Areas/City_DesignStuff/City_NW_03_DesignStuff |
| level457 | City/City_Areas/City_DesignStuff/City_SW_05_DesignStuff |
| level458 | City/City_LevelBorders |
| level459 | City/City_Areas/City_Light/City_NW_02_Light |
| level460 | City/City_Areas/City_NW_02/City_NW_02_Tetris_indoor |
| level461 | City/City_Areas/City_SE_01/City_SE_01_Lenina_74_Indoor |
| level462 | City/City_Areas/City_SE_02/City_SE_02_Malevicha_5_indoor |
| level463 | City/City_Areas/City_SE_04/City_SE_04_Nizhnyaya_Sadovaya_2_indoor |
| level464 | City/City_Areas/City_SW_01_B/City_SW_01_B_Zmeiskiy_6_indoor |

### Labyrinth

| Bundle | Scene |
| :--- | :--- |
| level544 | Labyrinth/Labyrinth_Scripts |
| level545 | Labyrinth/Labyrinth_Area_01 |
| level546 | Labyrinth/Labyrinth_Area_02 |
| level547 | Labyrinth/Labyrinth_Area_03 |
| level548 | Labyrinth/Labyrinth_Area_04 |
| level549 | Labyrinth/Labyrinth_Area_05 |
| level550 | Labyrinth/Labyrinth_Area_06 |
| level551 | Labyrinth/Labyrinth_Light |
| level552 | Labyrinth/Labyrinth_DesignStuff |
| level553 | Labyrinth/Labyrinth_DesignMain |
| level554 | Labyrinth/Labyrinth_Quests |
| level555 | Labyrinth/Labyrinth_AI |
| level556 | Labyrinth/Labyrinth_Sound |
| level557 | Labyrinth/Labyrinth_Culling |

### Ground Zero (Level Low)

| Bundle | Scene |
| :--- | :--- |
| level465 | Sandbox/Sandbox_Scripts |
| level466 | Sandbox/Sandbox_Areas/Sandbox_bottom_area |
| level467 | Sandbox/Sandbox_Areas/Sandbox_roads |
| level468 | Sandbox/Sandbox_Areas/Sandbox_Area_01 |
| level469 | Sandbox/Sandbox_Areas/Sandbox_Area_01_courtyard |
| level470 | Sandbox/Sandbox_Areas/Sandbox_Area_01_indoor |
| level471 | Sandbox/Sandbox_Areas/Sandbox_Area_02 |
| level472 | Sandbox/Sandbox_Areas/Sandbox_Area_02_courtyard |
| level473 | Sandbox/Sandbox_Areas/Sandbox_Area_02_indoor |
| level474 | Sandbox/Sandbox_Areas/Sandbox_Area_03 |
| level475 | Sandbox/Sandbox_Areas/Sandbox_Area_03_courtyard |
| level476 | Sandbox/Sandbox_Areas/Sandbox_Area_03_indoor |
| level477 | Sandbox/Sandbox_Areas/Sandbox_Area_04 |
| level478 | Sandbox/Sandbox_Areas/Sandbox_Area_04_courtyrad |
| level479 | Sandbox/Sandbox_Areas/Sandbox_Area_04_indoor |
| level480 | Sandbox/Sandbox_Areas/Sandbox_Area_05 |
| level481 | Sandbox/Sandbox_Areas/Sandbox_Area_05_courtyard |
| level482 | Sandbox/Sandbox_Areas/Sandbox_Area_05_indoor |
| level483 | Sandbox/Sandbox_Areas/Sandbox_Area_07 |
| level484 | Sandbox/Sandbox_Areas/Sandbox_Area_07_courtyard |
| level485 | Sandbox/Sandbox_Areas/Sandbox_Area_07_indoor |
| level486 | Sandbox/Sandbox_Areas/Sandbox_Area_08 |
| level487 | Sandbox/Sandbox_Areas/Sandbox_Area_08_courtyard |
| level488 | Sandbox/Sandbox_Areas/Sandbox_Area_08_indoor |
| level489 | Sandbox/Sandbox_Areas/Sandbox_background_01 |
| level490 | Sandbox/Sandbox_Areas/Sandbox_background_02 |
| level491 | Sandbox/Sandbox_Grass |
| level492 | Sandbox/Sandbox_Light/Sandbox_Portals |
| level493 | Sandbox/Sandbox_Light/Sandbox_Stencil |
| level494 | Sandbox/Sandbox_Light/Sandbox_Area_01_Light |
| level495 | Sandbox/Sandbox_Light/Sandbox_Area_02_Light |
| level496 | Sandbox/Sandbox_Light/Sandbox_Area_03_Light |
| level497 | Sandbox/Sandbox_Light/Sandbox_Area_04_Light |
| level498 | Sandbox/Sandbox_Light/Sandbox_Area_05_Light |
| level499 | Sandbox/Sandbox_Light/Sandbox_Area_07_Light |
| level500 | Sandbox/Sandbox_Light/Sandbox_Area_08_Light |
| level501 | Sandbox/Sandbox_Light/Sandbox_bottom_area_Light |
| level502 | Sandbox/Sandbox_Light/Sandbox_background_Light |
| level503 | Sandbox/Sandbox_Light/Sandbox_roads_Light |
| level504 | Sandbox/Sandbox_Design_Stuff |
| level505 | Sandbox/Sandbox_Design_Main |
| level506 | Sandbox/Sandbox_Quests |
| level507 | Sandbox/Sandbox_LevelBorders |
| level508 | Sandbox/Sandbox_AI |
| level509 | Sandbox/Sandbox_Sound |
| level510 | Sandbox/Sandbox_culling |

### Ground Zero (Level High)

| Bundle | Scene |
| :--- | :--- |
| level465 | Sandbox/Sandbox_Scripts |
| level466 | Sandbox/Sandbox_Areas/Sandbox_bottom_area |
| level467 | Sandbox/Sandbox_Areas/Sandbox_roads |
| level468 | Sandbox/Sandbox_Areas/Sandbox_Area_01 |
| level469 | Sandbox/Sandbox_Areas/Sandbox_Area_01_courtyard |
| level470 | Sandbox/Sandbox_Areas/Sandbox_Area_01_indoor |
| level471 | Sandbox/Sandbox_Areas/Sandbox_Area_02 |
| level472 | Sandbox/Sandbox_Areas/Sandbox_Area_02_courtyard |
| level473 | Sandbox/Sandbox_Areas/Sandbox_Area_02_indoor |
| level474 | Sandbox/Sandbox_Areas/Sandbox_Area_03 |
| level475 | Sandbox/Sandbox_Areas/Sandbox_Area_03_courtyard |
| level476 | Sandbox/Sandbox_Areas/Sandbox_Area_03_indoor |
| level477 | Sandbox/Sandbox_Areas/Sandbox_Area_04 |
| level478 | Sandbox/Sandbox_Areas/Sandbox_Area_04_courtyrad |
| level479 | Sandbox/Sandbox_Areas/Sandbox_Area_04_indoor |
| level480 | Sandbox/Sandbox_Areas/Sandbox_Area_05 |
| level481 | Sandbox/Sandbox_Areas/Sandbox_Area_05_courtyard |
| level482 | Sandbox/Sandbox_Areas/Sandbox_Area_05_indoor |
| level483 | Sandbox/Sandbox_Areas/Sandbox_Area_07 |
| level484 | Sandbox/Sandbox_Areas/Sandbox_Area_07_courtyard |
| level485 | Sandbox/Sandbox_Areas/Sandbox_Area_07_indoor |
| level486 | Sandbox/Sandbox_Areas/Sandbox_Area_08 |
| level487 | Sandbox/Sandbox_Areas/Sandbox_Area_08_courtyard |
| level488 | Sandbox/Sandbox_Areas/Sandbox_Area_08_indoor |
| level489 | Sandbox/Sandbox_Areas/Sandbox_background_01 |
| level490 | Sandbox/Sandbox_Areas/Sandbox_background_02 |
| level491 | Sandbox/Sandbox_Grass |
| level492 | Sandbox/Sandbox_Light/Sandbox_Portals |
| level493 | Sandbox/Sandbox_Light/Sandbox_Stencil |
| level494 | Sandbox/Sandbox_Light/Sandbox_Area_01_Light |
| level495 | Sandbox/Sandbox_Light/Sandbox_Area_02_Light |
| level496 | Sandbox/Sandbox_Light/Sandbox_Area_03_Light |
| level497 | Sandbox/Sandbox_Light/Sandbox_Area_04_Light |
| level498 | Sandbox/Sandbox_Light/Sandbox_Area_05_Light |
| level499 | Sandbox/Sandbox_Light/Sandbox_Area_07_Light |
| level500 | Sandbox/Sandbox_Light/Sandbox_Area_08_Light |
| level501 | Sandbox/Sandbox_Light/Sandbox_bottom_area_Light |
| level502 | Sandbox/Sandbox_Light/Sandbox_background_Light |
| level503 | Sandbox/Sandbox_Light/Sandbox_roads_Light |
| level504 | Sandbox/Sandbox_Design_Stuff |
| level505 | Sandbox/Sandbox_Design_Main |
| level506 | Sandbox/Sandbox_Quests |
| level507 | Sandbox/Sandbox_LevelBorders |
| level509 | Sandbox/Sandbox_Sound |
| level510 | Sandbox/Sandbox_culling |
| level512 | Sandbox/Sandbox_AI_high |


====================================================================================================
DOCUMENT: Maunal Installation Instructions for SPT 4.0
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/SPT_40/Manual-Installation-Instructions_40.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/SPT_40/Manual-Installation-Instructions_40.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Maunal Installation Instructions for SPT 4.0
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/SPT_40/Manual-Installation-Instructions_40.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Maunal Installation Instructions for SPT 4.0
description: 
published: true
date: 2026-08-01T23:01:55.423Z
tags: 
editor: markdown
dateCreated: 2026-07-31T22:35:05.885Z
---

## What you need to do before you manually install SPT

Verify that your Escape From Tarkov works, and that you can load up to at least the main menu or stash.
This is particularly important if you have just installed Escape From Tarkov so all necessary files can be generated.

## Manually installing and running SPT

1. Verify that your Escape From Tarkov is fully up-to-date through the BSG Launcher.
2. Create a new folder for SPT. A good location would be `C:\Games\SPT 4.0`.
3. Copy the contents of your live Escape From Tarkov game folder into your `C:\Games\SPT 4.0` folder.
	- **DO NOT** delete the original EFT installation to save space, it must remain in the original install location for SPT to function.
4. Download the patcher from [here](https://spt-patches.modd.in/Patcher_1.0.6.5.46221_to_16.9.0.40087.7z) (requires [7-Zip](https://www.7-zip.org/)).
	- If EFT is newer than the above downgrade patch, **please wait**, a new downgrade patch will be created eventually.
5. Extract this archive to your `C:\Games\SPT 4.0` folder.
6. Run the `patcher.exe` and wait for it to finish.
7. Download the SPT release archive from [here](https://spt-patches.modd.in/SPT-4.0.13-40087-2891fd4.7z).
8. Extract the contents of the SPT release archive into your `C:\Games\SPT 4.0` folder.
9. Open your `C:\Games\SPT 4.0\SPT` folder.
10. Run `SPT.Server`.
 - Wait for the green text that says `Server has started, happy playing`.
11. Run `SPT.Launcher` and follow the onscreen instructions.
 - You can use any username you want. It is recommend that you **do not** use your EFT account username. Especially if you plan on recording or streaming SPT.
 - `Login Automatically` will always log into the last profile you loaded. You can disable this by clicking `Logout` in the bottom right, then unchecking the option.
 - Select your desired game version. Each version has a description box summarising what is included. Once you have picked your chosen game version click `Register`. You can pick *any* game version you want from the profile list, you do not need to own the corresponding EFT version. Once chosen, you cannot change the edition a profile is using.
12. To make it easier to launch SPT in the future, you can right click `SPT.Server` and `SPT.Launcher`, select `Send to > Desktop (create shortcut)`. These are located in the `[game folder]\SPT` folder and should not be moved out.
13. Click `Start Game` and load into the main menu.

Once you have completed the above, you can now play SPT and install mods found on [The Forge](https://forge.sp-tarkov.com/). You can find a guide on how to correctly install SPT mods on the [Installing Mods](https://wiki.sp-tarkov.com/Installing_Mods) Wiki page. **Make sure to only install versions of mods made for 4.0 and not 4.1.**

## Common Installation and Start-up Issues
Below you can find some common issues that users encounter when installing or first starting SPT, along with the solution to fixing it. If your issue is not listed then join our [Discord Server](http://discord.sp-tarkov.com/) and ask in the [`#spt-support`](https://discord.com/channels/875684761291599922/1172730102119944222) channel.

<details>
<summary>SPT Server crashing instantly or not opening up at all?</summary>
  
See the solution [here](https://wiki.sp-tarkov.com/Known_SPT_Issues_40#server-doesnt-launch-or-closes-immediately).

</details>

<details>
<summary>The application had a critical error and failed to run "Watermark" error.</summary>

<img src="/failedshortcuts.png" style="border: 2px solid grey;" alt="Watermark Error">

This happens because you have moved the `SPT.Server` and/or the `SPT.Launcher`, out of your `[game folder]\SPT` folder. 
You will need to move these back into your `[game folder]\SPT` folder and create desktop shortcuts of these. You can do this by right-clicking the executables and then `Send To > Desktop (create shortcut)`.
</details>

## Old mods and profiles
You cannot use any of your old mod files in a newer SPT version. If you want to use the same mods, you need to download updated versions of them once they have been updated to the latest SPT version.

Some old profiles can work. See the [version numbers](https://wiki.sp-tarkov.com/Updating_SPT#version-numbers) section for more details.





====================================================================================================
DOCUMENT: Mod Web Pages
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/SPT_41/modding/server/Mod_Web_Pages.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/SPT_41/modding/server/Mod_Web_Pages.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Mod Web Pages
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/SPT_41/modding/server/Mod_Web_Pages.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.1.x / 4.1.0
-->

---
title: Mod Web Pages
description: Adding Blazor pages, static assets and config editor entries to a server mod.
published: true
date: 2026-07-21T00:00:00.000Z
tags: modding, web
editor: markdown
dateCreated: 2026-07-21T00:00:00.000Z
---

> This page applies to SPT version `4.1`
{.is-info}

The server hosts a web interface. Mods can add their own pages to it, serve static files, expose API endpoints, and register their config so users can edit it in the browser instead of hand-editing JSON.

Everything here is opt-in. A mod that doesn't implement `IModBlazorMetadata` is untouched by any of it.

## Opting in

Implement `IModBlazorMetadata` alongside `IModMetadata` on your metadata class.

```csharp
public sealed class MyModMetadata : IModMetadata, IModBlazorMetadata
{
    public string ModGuid { get; init; } = "com.example.my-mod";
    // ... rest of IModMetadata

    public string? WWWRootUrl { get; init; }
    public string? HomePage { get; init; } = "/my-mod";
    public string? HomePageDescription { get; init; } = "Settings for My Mod";
}
```

The interface is just a marker. Implementing it tells the server to link your `wwwroot` directory, register your Blazor components and pages for routing, and register your MVC controllers.

| Property | What it does |
| --- | --- |
| `WWWRootUrl` | URL segment your static files are served under. Leave `null` to use your assembly name. |
| `HomePage` | Path to your page. Setting this puts a card for your mod in the SIC mod links section. Leave `null` for no card. |
| `HomePageDescription` | The description shown on that card. |

Your project needs `Microsoft.NET.Sdk.Web` rather than the plain SDK, and `<OutputType>Library</OutputType>`.

```xml
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <OutputType>Library</OutputType>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="SPTarkov.Server.Core" Version="4.1.0" />
    <PackageReference Include="SPTarkov.Server.Web" Version="4.1.0" />
  </ItemGroup>
</Project>
```

## Adding a page

Blazor pages go anywhere in your project. The server picks them up from your assembly.

```razor
@using Microsoft.AspNetCore.Components.Web
@rendermode InteractiveServer
@page "/my-mod"

<h3>My Mod</h3>

<p>Current count: @count</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int count = 0;

    private void IncrementCount()
    {
        count++;
    }
}
```

Make the `@page` route match the `HomePage` you set in your metadata, otherwise the card links nowhere.

Pick a route that won't collide with another mod. Prefixing everything with your mod name is usually enough.

## Static files

Put files in a `wwwroot` folder in your mod directory and they're served under `/<WWWRootUrl>/`, or `/<AssemblyName>/` if you left `WWWRootUrl` null.

```razor
<img src="/MyMod/logo.png" alt="My Mod" />
```

Two mods claiming the same `wwwroot` URL is a hard startup failure, not a warning. If you set `WWWRootUrl` manually, make it specific.

Your build needs to copy `wwwroot` to the mod's output folder alongside the DLL. It's easy to forget and the symptom is just missing files.

## API endpoints

Standard MVC controllers work, and are registered from your assembly automatically.

```csharp
public class MyModController : Controller
{
    [HttpGet("/my-mod/ping")]
    public IActionResult Ping()
    {
        return Content("Pong");
    }
}
```

These are strictly for your own endpoints, things your web page calls, or tooling you're exposing outside the game.

Anything the game client talks to still goes through the router system. If you're handling a Tarkov route, overriding one of ours, or responding to something the client sends, write a router. See [Routers](/en/SPT_41/Server_40_to_41#routers).

## Registering your config for editing

Register a config object and it becomes editable in the server's config editor, with changes written back to your JSON file. You need two things: the config class itself, and a provider that describes it.

**The config**

A plain class. Use `[JsonPropertyName]` so the names in the file stay stable if you rename things in code.

```csharp
public class MyModConfig
{
    [JsonPropertyName("enabled")]
    public bool Enabled { get; set; } = true;

    [JsonPropertyName("spawnMultiplier")]
    public double SpawnMultiplier { get; set; } = 1.25;

    [JsonPropertyName("allowedMaps")]
    public List<string> AllowedMaps { get; set; } = ["factory4_day", "bigmap"];

    [JsonPropertyName("features")]
    public Dictionary<string, bool> Features { get; set; } = new() { ["someFeature"] = false };
}
```

Give every setting a getter and a setter. Applying an edit copies the changed values onto the instance you registered, but only properties that are both readable and writable get copied. An `init` or get-only property is skipped without complaint.

Don't put `[Injectable]` on the config class if it's loaded from a file. That has the container build a fresh instance from your defaults and your JSON is never read. Load it yourself and register the instance through `IOnDIConstruct`, covered in [Registering your config into DI](/en/SPT_41/Server_40_to_41#registering-your-config-into-di).

**The provider**

Implement `IConfigEditorConfigProvider` and hand back a registration.

```csharp
[Injectable(InjectionType.Singleton)]
public class MyModConfigEditorProvider(MyModConfig config) : IConfigEditorConfigProvider
{
    public IEnumerable<ConfigEditorConfigRegistration> GetConfigs()
    {
        yield return ConfigEditorConfigRegistration.Create(
            "com.example.my-mod",
            "My Mod Config",
            config,
            Path.Combine("user", "mods", "MyMod", "config.json")
        );
    }
}
```

`Create` takes an id (use your mod GUID), the display name shown in the editor, the config instance, and the path to persist to. The path is relative to the server folder.

`GetConfigs` returns a sequence, so a mod with several config files can `yield return` one registration per file.

The editor builds its UI from your config's shape, so you don't write any UI for it. If you want something more custom than what it gives you, make your own page instead.

Applying and saving are separate. Applying copies the edited values onto your live instance, saving writes them to your file. A user can do one without the other, so don't assume an edit you can see in memory has been persisted, or the reverse.

`Create` covers the common case. If you need to hide sections from the structured editor, or take over how the config is loaded, saved or applied, construct `ConfigEditorConfigRegistration` directly and set the optional members on it. Note that the load, save and apply hooks replace the default behaviour rather than running alongside it.

## Related

- [Server Mod Migration - 4.0 to 4.1](/en/SPT_41/Server_40_to_41#web-pages), where `IModWebMetadata` was renamed to `IModBlazorMetadata`


====================================================================================================
DOCUMENT: Modding Resources
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/Modding_Resources.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/Modding_Resources.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Modding Resources
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/Modding_Resources.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Modding Resources
description: 
published: true
date: 2026-07-25T12:06:37.463Z
tags: modding
editor: markdown
dateCreated: 2025-07-23T16:46:34.874Z
---

> This page applies to SPT version `4.0`
{.is-info}

Resources to get started making mods. It is recommended to begin with server mods.

### [SPT Discord server](http://discord.sp-tarkov.com/) mod development channels:
- [#mods-resources](https://discord.com/channels/875684761291599922/875806757836951575)
- [#mods-development](https://discord.com/channels/875684761291599922/875803116409323562)

### General modding resources:
- [Semantic versioning](<https://semver.org/>)
- [SPT Item database](<https://db.sp-tarkov.com/>)
- [Tarkov-Dev](<https://api.tarkov.dev/>)
- [Tarkynator](<https://tarkynator.com/>)
- [Rider SPT ID Highlighter Plugin](<https://github.com/madmanbeavisx/spt-id-highlighter>)
- [SPT Technical Documentation](<https://deepwiki.com/sp-tarkov/server-csharp/1-overview>)

### C# Resources:
- [Microsoft interactive C# tutorials](https://learn.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/tutorials/)
- [Server mod examples](https://github.com/sp-tarkov/server-mod-examples)
- [Jehree's beginner write up to get started with client modding](/modding/tutorials/Client_Modding_Quick_Guide)
- [Tutorial: How to debug the game client with dnSpy](/modding/tutorials/debug_dnSpy)
- [Bepinex docs](https://docs.bepinex.dev/)
- [Harmony docs](https://harmony.pardeike.net/articles/intro.html)

### Item Creation
- [Tutorial: How to SDK Creating Custom Weapon](<https://docs.google.com/document/d/1miWuhu9Jgr-P_HKsAaYMxiz3i4wbq7hn1FSDGEJzo1A/>)
- [Tutorial: WTT - Item Creation Guides Vol. 1: Intro to Static Objects](/modding/tutorials/WTT_Vol1)
- [WTT Discord server](https://discord.gg/Nz6VX78xRa)

====================================================================================================
DOCUMENT: Prerequisites
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/tutorials/debug_dnSpy.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/tutorials/debug_dnSpy.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Prerequisites
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/tutorials/debug_dnSpy.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Tutorial: How to debug the game client with dnSpy
description: 
published: true
date: 2026-04-11T04:32:19.163Z
tags: modding
editor: markdown
dateCreated: 2025-10-31T20:02:47.426Z
---

> This page applies to SPT version `4.0`
{.is-info}

# Prerequisites
- [dnSpy](https://github.com/dnSpyEx/dnSpy)
- SPT `4.0.0` or newer (guide was tested and verified with SPT `4.0.2`)
- At least 2 monitors highly recommended (see the Notes and Tips section 3 for an explanation)

## Chapter 1: Preparing the client

1. Download [this prepared archive](https://mega.nz/file/38w1lQjC#kqKSaYBdcWzOASflUpwsYPC6I6DOqXzuq3157LPoLRg) (if you do not trust the download, then see Chapter 4 for how to prepare your own). 
2. Backup these game files:
	- `\BepInEx\config\BepInEx.cfg`
	- `\EscapeFromTarkov_Data\boot.config`
	- `UnityPlayer.dll`
	- `WinPixEventRuntime.dll` (if it exists) 
3. Overwrite all game files with the ones from the previously downloaded archive
4. Make sure the `\EscapeFromTarkov_Data\boot.config` file is set to Read-Only. Otherwise, the changes to it might get overwritten on game start.
5. Go to the `\user\launcher\config.json` file and open it in a text editor (Notepad++ recommended).
6. Add `"WinPixEventRuntime.dll"` to the string array setting `"ExcludeFromCleanup"`. Ex.: `"ExcludeFromCleanup": ["WinPixEventRuntime.dll"],`
7. Start the SPT Server & Launcher. If you've done everything correctly, the game will launch without issues and the text "Development Build" will be visible in the bottom-right of the screen.
8. Start dnSpy. Make sure your Assembly Explorer is clear (optional, but highly recommended - see Notes and Tips section 5).
9. In dnSpy, click `Debug` in the top bar, and then `Attach to Process (Unity)...`. Then, select the `EscapeFromTarkov.exe` process from the list.
10. After the game process has been attached, open the assembly you want to debug in one of two ways:
	1. (Recommended) Open the loaded module view `Debug -> Windows -> Modules` -OR- `Ctrl+Alt+U` and search for the assembly you need.
	2. Open the assembly file you want to debug `File -> Open...` -OR- `Ctrl+O` (see Notes and Tips section 6).
  
That's it! Keep reading for some notes on debugging oddities and how to work around them.

## Chapter 2: Common Issues

- If you're getting an error about a missing "WinPixEventRuntime.dll" when starting the game, please make sure you properly set the SPT Launcher's config to not delete the necessary DLL file on game start.

- If the game is not appearing in the Unity process list in dnSpy, please double-check and make sure that your "boot.config" file has the Read-Only flag set. If it doesn't, then the game will have overwritten it's contents and you'll need to replace the file from the downloaded archive again.
  - This can also happen if you have multiple network interfaces, disable all of them except your primary one.

- If the game fails to load properly, such as by getting stuck in the loading screen - please check the BepInEx logs and see if any of the SPT plugins failed to load. The Unity development build has some extra checks in place that might produce errors which are not present when running the regular version of EFT. If such a scenario occurs, then please contact me and let me know about the issue!

- If the game crashes with strange errors when attempting to start it, then it's possible that the prepared archive's DLLs are outdated and EFT has had an engine update since this guide was written. Please go to Chapter 4 and try to create your own Development Build files.


## Chapter 3: Notes and Tips

- With the development build enabled, if any client-side errors occur, a Unity debugging console will appear. These errors can usually be ignored, and the console itself can be closed safely. Some client mods might generate a constant stream of errors, preventing the console from being dismissed - in that case I recommend temporarily removing such mods.

- Currently, Mono debugging might have an issue with the "Step-Over" function, which can cause it to behave in unexpected ways. I would recommend avoiding it and instead adding breakpoints to upcoming code lines that you want to inspect, instead of stepping over.

- When a breakpoint is hit, all game threads are frozen, including the renderer. This causes the game window to freeze and will prevent minimizing the game in any way. This is easiest to mitigate by having more than one monitor, so you can keep the dnSpy window on a monitor separate from the game to avoid issues.

- Game performance and load times are expected to be slower than usual, due to debugging builds being more performance-intensive. I would not recommend for anyone to play the game casually with the debugging build active.

- If an assembly was added to the Assembly Explorer in dnSpy before the game process was attached, no debugging symbols may be loaded and breakpoints may not work. That's why I generally recommend clearing the workspace before starting.

- Any DLLs that are patched with preloader patches in BepInEx will be dumped to `\BepInEx\DumpedAssemblies\EscapeFromTarkov` when using the recommended BepInEx config (included in the prepared archive). Keep this in mind if you're trying to manually add assemblies into the workspace.

- To return the game to a regular, non-development build, simply restore the files you had backed up previously.

## Chapter 4: Preparing your own development build files

Go to the Unity Download Archive and download the Unity Editor version that matches EFT's current engine version. You can find out which exact version is needed by checking the game's `UnityPlayer.dll` file version in the Details tab. You do not need any additional build support installers. Alternatively, you can use the Unity Hub to download the correct editor version.


1. Go the directory where you installed the Unity Editor and navigate to this folder: `\Editor\Data\PlaybackEngines\windowsstandalonesupport\Variations\win64_development_mono`
2. Copy `UnityPlayer.dll` and `WinPixEventRuntime.dll` over to your game directory. Please backup any files before overwriting!
3. Open the `\EscapeFromTarkov_Data\boot.config` file and add the following line: `player-connection-debug=1`. Make sure to set the file to Read-Only mode after editing it!
4. Open the `\BepInEx\config\BepInEx.cfg` file and apply the following changes:
	- Change `HarmonyBackend` value to `cecil`
	- Change `DumpAssemblies` value to `true`
	- Change `LoadDumpedAssemblies` value to `true`


# Sources

Initial guide on how to convert EFT into a debug build and debug it: [dnspy Wiki on GitHub](https://github.com/dnSpy/dnSpy/wiki/Debugging-Unity-Games#turning-a-release-build-into-a-debug-build)

Additional information for loading game assemblies in dnSpy with BepInEx: [BepInEx documentation](https://docs.bepinex.dev/articles/advanced/debug/assemblies_dnSpy.html)

Archive for Unity Editor versions, from which the prepared archive of 2022.3.43f1debugging DLLs was created: [Unity Download Archive](https://unity.com/releases/editor/archive)

====================================================================================================
DOCUMENT: Profiles
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Profiles.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Profiles.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Profiles
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Profiles.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Any SPT version
-->

---
title: Profiles
description: How profiles work in SPT.
published: true
date: 2025-10-20T16:36:09.376Z
tags: guide
editor: markdown
dateCreated: 2025-10-18T07:59:57.279Z
---

> This page applies to any SPT version
{.is-info}

## What are profiles?

- In SPT your profiles are your save files. They store all the information of your in-game character: items, quests, stats, hideout progress, skills etc. It does not contain your in-game or mod settings.

- You can have as many profiles as you want of any edition you want. There are no restrictions on either, as they are both stored locally on your PC and are only used by SPT. Each profile contains one in-game character.

- You can name your profiles however you want. The name you choose while creating them is only what will be displayed in the SPT Launcher. It will not be your in-game username, as that is set during character creation.

- The SPT Launcher will keep track of all profiles you have. If you want to make or access another profile, simply press `Logout` to go back to the profile selection screen. From there, you can select any profile or make a new one.

## Where are my profiles?

Your profiles are stored in your `[game folder]\SPT\user\profiles` folder. They are in the `.json` format, which is a way of formatting text files. They are named `[profile's ID].json`. You can see which profile is which by opening it in a text editor like Notepad and seeing what `username` it is.

<div style="margin-top: 10px;"></div>
<img src="/profiles/profile top.png" alt="profile" width=400 style="display: block; margin: 0 auto;">
<div style="margin-top: 10px;"></div>
<div style='text-align: center;'>
The first few lines of a profile file.
</div>
<br>

**We do not support manually editing your profiles**. It is extremely easy to mess up and make your profile unusable. Even if you don't make any formatting errors it's extremely easy to edit something that will break your profile. That might manifest long after you made that edit with no way of reverting it.

Your profile file can be copied and moved freely. If you worry about a mod breaking your profile, you can copy and paste it somewhere safe. To go back to that copy, simply copy it back into the `\profiles` folder, overriding the one that's there. Note that SPT must be closed completely while doing so.

## Backups

SPT automatically makes copies of your profiles. They are located in `[game folder]\SPT\user\profiles\backups`. They are in folders named after the date and time they were created on. They also include a `activeMods.json` file, which will display which mods were running when that backup was made.

To restore a backup of a profile:
1. Close your game, launcher and server.
2. Copy your profile from the backup folder you want.
3. Paste it into `[game folder]\SPT\user\profiles`. Override the file when prompted.

## Mods

Nearly all mods can be added to an existing profile. However, **removing some mods might be impossible without making a new profile**. Mods that add new traders, quests, or items fall under that category. Always **read the modpage**, as the author should specify if a mod is unsafe to remove from a profile.

If you removed a mod that broke your profile, SPT can try fixing it. **This is not guaranteed to work**. SPT will do the best it can to remove any item that's in your profile from the removed mod, but some mods make irreversible changes to your profile.

1. Open `[game folder]\SPT\SPT_Data\Server\configs\core.json` in a text editor like Notepad.
2. Set `removeModItemsFromProfile` from `false` to `true`.
3. Set `removeInvalidTradersFromProfile` from `false` to `true`.
4. Save your changes.
5. Launch SPT.

> The above should be viewed as a "last resort" solution. Even a profile "fixed" by this method can exhibit issues like random crashing, bots not spawning, and some maps being unloadable.
{.is-info}


====================================================================================================
DOCUMENT: Quest Value Reference Sheet
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/references/quest-values.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/references/quest-values.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Quest Value Reference Sheet
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/references/quest-values.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Quest Value Reference Sheet
description: A reference page for mod authors who are interested in quest creation or modification.
published: true
date: 2026-04-07T00:36:42.297Z
tags: mods, quests
editor: markdown
dateCreated: 2025-06-05T22:26:29.852Z
---

# Quest Value Reference Sheet

This page contains various values used during quest creation or modification. Please utilize the quick links to jump between various areas.

Updated as of 3.11

## Navigation

-	[General Information](/modding/references/quest-values#general-information)
{.links-list}
	- [Useful Links](/modding/references/quest-values#useful-links)
  	- [Skill Names](/modding/references/quest-values#skill-names)
    - [Quest Types](/modding/references/quest-values#quest-types)
    - [Quest Status](/modding/references/quest-values#quest-status)
    - [Quest Properties](/modding/references/quest-values#properties)
  	- [Quest Structure](/modding/references/quest-values#quest-structure)
- [Visibility Conditions](/modding/references/quest-values#visibility-conditions)
-	[Available For Finish Conditions](/modding/references/quest-values#available-for-finish-conditions)
	- [Handover Item](/modding/references/quest-values#handover-item)
	- [Find Item](/modding/references/quest-values#find-item)
	- [Skill Requirement](/modding/references/quest-values#skill-requirement)
	- [Leave Item At Location](/modding/references/quest-values#leave-item-at-location)
	- [Place Beacon](/modding/references/quest-values#place-beacon)
	- [Visit Place](/modding/references/quest-values#visit-place)
	- [Weapon Assembly](/modding/references/quest-values#weapon-assembly)
	- [Kills](/modding/references/quest-values#kills)
	- [Exit Status](/modding/references/quest-values#exit-status)
	- [Exit Name](/modding/references/quest-values#exit-name)
	- [Trader Loyalty](/modding/references/quest-values#trader-loyalty)
	- [Location Requirement](/modding/references/quest-values#location-requirement)
  	- [Counter Creator](/modding/references/quest-values#counter-creator)
- [Available For Start Requirements](/modding/references/quest-values#available-for-start-requirements)
- [Fail Conditions](/modding/references/quest-values#fail-conditions)
- [Rewards](/modding/references/quest-values#rewards)
	- [Experience](/modding/references/quest-values#experience)
	- [Item](/modding/references/quest-values#item)
	- [Trader Standing](/modding/references/quest-values#trader-standing)
	- [Skill](/modding/references/quest-values#skill)
	- [Stash Rows](/modding/references/quest-values#stash-rows)
	- [Achievement](/modding/references/quest-values#achievement)

---
## General Information
Below you will find all general information related to quests, including vanilla trader IDs, location information and IDs, quest types, and properties. You will also find an example quest pulled directly from BSG.
### Useful Links
[Item Finder](https://db.sp-tarkov.com/search)
[Vanilla Quest Data](https://github.com/sp-tarkov/server/blob/master/project/assets/database/templates/quests.json)
[Bot Types & Names Reference Sheet](/modding/references/bot-types)
[Trader IDs](/modding/references/trader-information)
[Location IDs](/modding/references/location-information)


### Skill Names
Below is a table of all currently used or previously used Skill Names for EFT. 
>
>Some values have been removed from the game but at still listed here for clarity for updating mods or modding previous versions of SPT.
>
| Skill Name | Value | Validity |
| :--- | :--- | :--- |
| Bot Reload | `"BotReload"` | Hidden Skill/Do Not Use for Quests |
| Bot Sound | `"BotSound"` | Hidden Skill/Do Not Use for Quests |
| Hideout Management | `"HideoutManagement"` | Valid |
| Crafting | `"Crafting"` | Valid |
| Metabolism | `"Metabolism"` | Valid |
| Immunity | `"Immunity"` | Valid |
| Endurance | `"Endurance"` | Valid |
| Strength | `"Strength"` | Valid |
| Vitality | `"Vitality"` | Valid |
| Health | `"Health"` | Valid |
| StressResistance | `"StressResistance"` | Valid |
| Throwing | `"Throwing"` | Valid |
| Recoil Control | `"RecoilControl"` | Removed as of 3.9 |
| Convert Movement | `"CovertMovement"` | Valid |
| Perception | `"Perception"` | Valid |
| Intellect | `"Intellect"` | Valid |
| Attention | `"Attention"` | Valid |
| Charisma | `"Charisma"` | Valid |
| Memory | `"Memory"` | Removed as of 3.9 |
| Melee | `"Melee"` | Valid |
| Surgery | `"Surgery"` | Valid |
| Aim Drills | `"AimDrills"` | Valid |
| Troubleshooting | `"TroubleShooting"` | Valid |
| First Aid | `"FirstAid"` | Valid |
| Light Vests | `"LightVests"` | Valid |
| Heavy Vests | `"HeavyVests"` | Valid |
| Weapon Treatment | `"WeaponTreatment"` | Valid |
| Mag Drills | `"MagDrills"` | Valid |
| Snipers | `"Sniper"` | Valid |
| Pistols | `"Pistol"` | Valid |
| Revolvers | `"Revolver"` | Valid |
| SMGs | `"SMG"` | Valid |
| Assault Rifles | `"Assault"` | Valid |
| Shotguns | `"Shotgun"` | Valid |
| LMGs | `"LMG"` | Valid |
| DMRs | `"DMR"` | Valid |

### Quest Types
Quest types are required and will display specific ways on the players Task List as well as in the trader Tasks page.
>
> All quests must have a type.
> Quest types will display the name and BSG Icon on the task list on the players client.
> The type does not have to match the conditions of the quest, but it is encouraged to match it for player clarity.
>

>
> I have added typical quest usage to the valid types table below. **_You do not have to follow these suggestions, they are common uses in BSG quests._** 
>You can do whatever you want for quest types _on the quest itself_, but conditions much match properly per the condition types.
{.is-info}

| Type | Typical Quest Usage |
| :--- | :--- |
| PickUp | Find/Handover |
| Elimination | Kill |
| Discover | LeaveItemAtLocation |
| Completion | Multi Conditional |
| Exploration | VisitPlace |
| Levelling | Prestige/Achievement/Level (Unused) |
| Experience | Experience (Unused) |
| Standing | TraderLoyalty |
| Loyalty | Branching quests (Like choosing one trader or another) |
| Merchant | Handing money over to a trader |
| Skill | Skill Requirements |
| Multi | Multi Conditional |
| WeaponAssembly | WeaponAssembly |
| ArenaWinMatch | Unused - Untested if works in SPT |
| ArenaWinRound | Unused - Untested if works in SPT |

### Quest Status
Quest Statuses are set automatically by the condition counters during raids, and out of raids. They can also be used in Available For Start requirements.
>
> All quests will always have a status. This status is stored in the users profile json.
>
| Status | Value | Description |
| :--- | :--- | :--- |
| Locked | 0 | Quest is locked and not available to the player |
| AvailableForStart | 1 | Quest is available to player |
| Started | 2 | Quest is available to the player, and they have accepted it |
| AvailableForFinish | 3 | Quest is available to the player, they have accepted it, and it is ready to turn in |
| Success | 4 | Quest has been completed by the player |
| Fail | 5 | Player has failed the quest and it is not marked restartable |
| FailRestartable | 6 | Player has failed the quest, and can restart it |
| MarkedAsFailed | 7 | Quest has been marked to fail but did not flip to status 5 or 6 yet |
| Expired | 8 | Quest has expired |
| AvailableAfter | 9 | Quest is available, but is delayed from being shown to the player |

### Properties

The below table is a list of all currently known properties for quests. 
>
> While not all properties are *required* for use, it is _best to have every single property, whether or not you are utilizing it_.
>
| Property Name | Required? | Example Value | Type |
| :--- | :--- | :--- | :--- |
| QuestName | Yes | `"Building Our First Quest!"` | string |
| _id | Yes | `"68423056128053531e5a5bf6"` | MongoID string |
| acceptPlayerMessage | No | `"68423056128053531e5a5bf6 acceptPlayerMessage"` | string |
| acceptanceAndFinishingSource | No | `"eft"` | string |
| arenaLocations | No | `[]` | array |
| canShowNotificationsInGame | Yes | `true` | boolean |
| changeQuestMessageText | No | `"68423056128053531e5a5bf6 changeQuestMessageText"` | string |
| completePlayerMessage | No | `"68423056128053531e5a5bf6 completePlayerMessage"` | string |
| conditions | Yes | | object ([AvailableForFinish](/modding/references/quest-values#available-for-finish-conditions)/[AvailableForStart](/modding/references/quest-values#available-for-start-requirements)/[Fail](/modding/references/quest-values#fail-conditions))|
| declinePlayerMessage | No | `"68423056128053531e5a5bf6 declinePlayerMessage"` | string |
| description | No | `"68423056128053531e5a5bf6 description"` | string |
| failMessageText | No | `"68423056128053531e5a5bf6 failMessageText"` | string |
| gameModes | No | `[]` | array |
| image | No | `"/files/quest/icon/quest_icon.png"` | string |
| instantComplete | No | `false` | boolean |
| isKey | No | `false` | boolean |
| location | Yes | `"5704e4dad2720bb55b8b4567"` | MongoID string ([Location IDs](/modding/references/location-information)) |
| name | Yes | `"68423056128053531e5a5bf6 name"` | string |
| note | No | `"68423056128053531e5a5bf6 note"` | string |
| progressSource | No | `"eft"` | string |
| rankingModes | No | `[]` | array |
| restartable | Yes | `false` | boolean |
| rewards | No | | object ([Rewards](/modding/references/quest-values#rewards)) |
| secretQuest | No | `false` | boolean |
| side | Yes | `"Pmc"` | string |
| startedMessageText | No | `"68423056128053531e5a5bf6 name"` | string |
| successMessageText | No | `"68423056128053531e5a5bf6 name"` | string |
| traderId | Yes | `"54cb50c76803fa8b248b4571"` | MongoID string ([Trader IDs](/modding/references/trader-information)) |
| type | Yes | `"Skill"` | string ([Quest Type Table](/modding/references/quest-values#quest-types)) |

### Quest Structure
Below is an example quest that was created by BSG.

The following information can be found while reading through the quest structure. There is plenty more information that can be found, and I will not list all details here. You can read through the actual quest data yourself below and see what you can find!

- The Quest Name is "Debut"
- The quest ID is 5936d90786f7742b1420ba5b.
	- As you can see, this ID is also used in the various locale strings, such as "**acceptPlayerMessage**".
- The quest will show in-game notifications when a subtask is completed, as indicated by the "**canShowNotificationsInGame**" being true.
- The quest is an "**Elimination**" quest, so the player task list will have a skull and be branded "Elimination"
- The kills are required to be any non-PMC
	- Bosses & Scavs are classified as "**Savage**" and the role is not defined, so any non-PMC is a valid target.
	- The number of kills required is 5.
- The item being required to hand over is the "MP-133 12ga pump-action shotgun" as indicated by the target "**54491c4f4bdc2db1078b4568**".
	- These shotguns are not required to be FIR as indicated by "**onlyFoundInRaid**" being false.
- This quest unlocks at level 1, but the player must also have completed the quest ID "**657315df034d76585f032e01**"
	- The quest ID that is required is the quest named "Shooting Cans"
- This quest rewards experience, trader standing, items (including built weapons), and a trader assort unlock for Prapor.


```json
{
  "5936d90786f7742b1420ba5b": {
    "QuestName": "Debut",
    "_id": "5936d90786f7742b1420ba5b",
    "acceptPlayerMessage": "5936d90786f7742b1420ba5b acceptPlayerMessage",
    "acceptanceAndFinishingSource": "eft",
    "arenaLocations": [],
    "canShowNotificationsInGame": true,
    "changeQuestMessageText": "5936d90786f7742b1420ba5b changeQuestMessageText",
    "completePlayerMessage": "5936d90786f7742b1420ba5b completePlayerMessage",
    "conditions": {
      "AvailableForFinish": [
        {
          "completeInSeconds": 0,
          "conditionType": "CounterCreator",
          "counter": {
            "conditions": [
              {
                "bodyPart": [],
                "compareMethod": ">=",
                "conditionType": "Kills",
                "daytime": {
                  "from": 0,
                  "to": 0
                },
                "distance": {
                  "compareMethod": ">=",
                  "value": 0
                },
                "dynamicLocale": false,
                "enemyEquipmentExclusive": [],
                "enemyEquipmentInclusive": [],
                "enemyHealthEffects": [],
                "id": "5967379786f774620e763ea8",
                "resetOnSessionEnd": false,
                "savageRole": [],
                "target": "Savage",
                "value": 1,
                "weapon": [],
                "weaponCaliber": [],
                "weaponModsExclusive": [],
                "weaponModsInclusive": []
              }
            ],
            "id": "5967379186f77463860dadd5"
          },
          "doNotResetIfCounterCompleted": false,
          "dynamicLocale": false,
          "globalQuestCounterId": "",
          "id": "5967379186f77463860dadd6",
          "index": 0,
          "isNecessary": false,
          "isResetOnConditionFailed": false,
          "oneSessionOnly": false,
          "parentId": "",
          "type": "Elimination",
          "value": 5,
          "visibilityConditions": []
        },
        {
          "conditionType": "HandoverItem",
          "dogtagLevel": 0,
          "dynamicLocale": false,
          "globalQuestCounterId": "",
          "id": "596737cb86f77463a8115efd",
          "index": 3,
          "isEncoded": false,
          "maxDurability": 100,
          "minDurability": 0,
          "onlyFoundInRaid": false,
          "parentId": "",
          "target": [
            "54491c4f4bdc2db1078b4568"
          ],
          "value": 2,
          "visibilityConditions": []
        }
      ],
      "AvailableForStart": [
        {
          "compareMethod": ">=",
          "conditionType": "Level",
          "dynamicLocale": false,
          "globalQuestCounterId": "",
          "id": "658471a72957dfa0e01552d1",
          "index": 0,
          "parentId": "",
          "value": 1,
          "visibilityConditions": []
        },
        {
          "availableAfter": 0,
          "conditionType": "Quest",
          "dispersion": 0,
          "dynamicLocale": false,
          "globalQuestCounterId": "",
          "id": "658471a35740d10d154dac8f",
          "index": 1,
          "parentId": "",
          "status": [
            4,
            5
          ],
          "target": "657315df034d76585f032e01",
          "visibilityConditions": []
        }
      ],
      "Fail": []
    },
    "declinePlayerMessage": "5936d90786f7742b1420ba5b declinePlayerMessage",
    "description": "5936d90786f7742b1420ba5b description",
    "failMessageText": "5936d90786f7742b1420ba5b failMessageText",
    "gameModes": [],
    "image": "/files/quest/icon/596b465486f77457ca186188.jpg",
    "instantComplete": false,
    "isKey": false,
    "location": "any",
    "name": "5936d90786f7742b1420ba5b name",
    "note": "5936d90786f7742b1420ba5b note",
    "progressSource": "eft",
    "rankingModes": [],
    "restartable": false,
    "rewards": {
      "Fail": [],
      "Started": [],
      "Success": [
        {
          "availableInGameEditions": [],
          "id": "5fe305df8a67d12f5f24c8aa",
          "index": 0,
          "type": "Experience",
          "unknown": false,
          "value": 1700
        },
        {
          "availableInGameEditions": [],
          "id": "60c89c0c80b2027f403dd992",
          "index": 0,
          "target": "54cb50c76803fa8b248b4571",
          "type": "TraderStanding",
          "unknown": false,
          "value": 0.02
        },
        {
          "availableInGameEditions": [],
          "findInRaid": false,
          "id": "5fe305d9c646836c3b6fc562",
          "index": 0,
          "items": [
            {
              "_id": "67d82e6e4f4b5340e611a2d7",
              "_tpl": "5449016a4bdc2d6f028b456f",
              "upd": {
                "StackObjectsCount": 15000
              }
            }
          ],
          "target": "67d82e6e4f4b5340e611a2d7",
          "type": "Item",
          "unknown": false,
          "value": 15000
        },
        {
          "availableInGameEditions": [],
          "findInRaid": true,
          "id": "60cb4643f09d61072d6cf21a",
          "index": 0,
          "items": [
            {
              "_id": "67d82e6e4f4b5340e611a2d8",
              "_tpl": "57d14d2524597714373db789",
              "upd": {
                "StackObjectsCount": 1
              }
            },
            {
              "_id": "67d82e6e4f4b5340e611a2d9",
              "_tpl": "57d152ec245977144076ccdf",
              "parentId": "67d82e6e4f4b5340e611a2d8",
              "slotId": "mod_pistol_grip"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2da",
              "_tpl": "57d1519e24597714373db79d",
              "parentId": "67d82e6e4f4b5340e611a2d8",
              "slotId": "mod_magazine"
            }
          ],
          "target": "67d82e6e4f4b5340e611a2d8",
          "type": "Item",
          "unknown": false,
          "value": 1
        },
        {
          "availableInGameEditions": [],
          "findInRaid": true,
          "id": "60cb467f7c496e588343a193",
          "index": 0,
          "items": [
            {
              "_id": "67d82e6e4f4b5340e611a2dd",
              "_tpl": "65702606cfc010a0f5006a3e",
              "upd": {
                "SpawnedInSession": true,
                "StackObjectsCount": 1
              }
            },
            {
              "_id": "67d82e6e4f4b5340e611a2de",
              "_tpl": "573718ba2459775a75491131",
              "parentId": "67d82e6e4f4b5340e611a2dd",
              "slotId": "cartridges",
              "upd": {
                "SpawnedInSession": true,
                "StackObjectsCount": 50
              }
            },
            {
              "_id": "67d82e6e4f4b5340e611a2df",
              "_tpl": "65702606cfc010a0f5006a3e",
              "upd": {
                "SpawnedInSession": true,
                "StackObjectsCount": 1
              }
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e0",
              "_tpl": "573718ba2459775a75491131",
              "parentId": "67d82e6e4f4b5340e611a2df",
              "slotId": "cartridges",
              "upd": {
                "SpawnedInSession": true,
                "StackObjectsCount": 50
              }
            }
          ],
          "target": "67d82e6e4f4b5340e611a2df",
          "type": "Item",
          "unknown": false,
          "value": 2
        },
        {
          "availableInGameEditions": [],
          "id": "5ac64f3786f774056634a1cb",
          "index": 0,
          "items": [
            {
              "_id": "67d82e6e4f4b5340e611a2e1",
              "_tpl": "5839a40f24597726f856b511",
              "upd": {
                "FireMode": {
                  "FireMode": "single"
                },
                "Foldable": {
                  "Folded": false
                }
              }
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e2",
              "_tpl": "5649ad3f4bdc2df8348b4585",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_pistol_grip"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e3",
              "_tpl": "57dc347d245977596754e7a1",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_stock"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e4",
              "_tpl": "564ca99c4bdc2d16268b4589",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_magazine"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e5",
              "_tpl": "57ffb0e42459777d047111c5",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_muzzle"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e6",
              "_tpl": "5839a7742459773cf9693481",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_reciever"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e7",
              "_tpl": "59d36a0086f7747e673f3946",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_gas_block"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e8",
              "_tpl": "57dc32dc245977596d4ef3d3",
              "parentId": "67d82e6e4f4b5340e611a2e7",
              "slotId": "mod_handguard"
            }
          ],
          "loyaltyLevel": 1,
          "target": "67d82e6e4f4b5340e611a2e1",
          "traderId": "54cb50c76803fa8b248b4571",
          "type": "AssortmentUnlock",
          "unknown": false
        },
        {
          "availableInGameEditions": [],
          "id": "629f016390948017ee17bb3b",
          "index": 0,
          "target": "5c0647fdd443bc2504c2d371",
          "type": "TraderStanding",
          "unknown": false,
          "value": 0.01
        }
      ]
    },
    "secretQuest": false,
    "side": "Pmc",
    "startedMessageText": "5936d90786f7742b1420ba5b startedMessageText",
    "status": 0,
    "successMessageText": "5936d90786f7742b1420ba5b successMessageText",
    "traderId": "54cb50c76803fa8b248b4571",
    "type": "Elimination"
  }
```
## Visibility Conditions
Visibility Conditions are an advanced feature available in creating quests for SPT. Most mod authors do not utilize these values, but they are extremely useful.

The use case for Visibility Conditions is if you have tasks in a quest that you may not want the player to see until they complete the relevant condition first. You can use these to "surprise" a player with additional tasks that do not appear in the task list until they are ready to be engaged with.

>
> Conditions "hiding" in a Visibility Condition do not track or count any values until they are visible to a player.
>

An example of this will be the "Background Check" quest from BSG.

This quest has 2 **FindItem** conditions and a **HandoverItem** condition. We don't actually care about one of the **FindItem** conditions, so that will not be included in the example.
The **HandoverItem** does not appear in the players task list until they complete the condition for finding the "Bronze pocket watch on a chain"

As you can see in the below example, the **HandoverItem** condition has a **visibilityCondition**. This condition requires the "conditionType" of **"CompleteCondition"** which means the _target_ must be completed before the **HandoverItem** condition becomes visible to player.

The _conditionType_ must be "CompleteCondition"
The _id_ must be a unique ID for the visibility array entry itself.
The _target_ is the condition ID that you are requiring to be completed before the condition itself becomes visible.

>
> You can have multiple requirements for a task to become visible, this example only has 1 condition that must be completed for the HandoverItem to be visible. If you would like an example of a quest that has multiple requirements for a condition, see "The Blood of War - Part 3" in the Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links)
>
```json
{
  "conditionType": "FindItem",
  "countInRaid": false,
  "dogtagLevel": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5968ec9986f7741ddd6c1012",
  "index": 0,
  "isEncoded": false,
  "maxDurability": 100,
  "minDurability": 0,
  "onlyFoundInRaid": false,
  "parentId": "",
  "target": [
    "5937fd0086f7742bf33fc198"
  ],
  "value": 1,
  "visibilityConditions": []
},
{
  "conditionType": "HandoverItem",
  "dogtagLevel": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5967920f86f77468d219d632",
  "index": 1,
  "isEncoded": false,
  "maxDurability": 100,
  "minDurability": 0,
  "onlyFoundInRaid": false,
  "parentId": "",
  "target": [
    "5937fd0086f7742bf33fc198"
  ],
  "value": 1,
  "visibilityConditions": [
    {
      "conditionType": "CompleteCondition",
      "id": "5a5778c986f7740ad83cd652",
      "target": "5968ec9986f7741ddd6c1012"
    }
  ]
}
```


## Available For Finish Conditions
### Handover Item
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| conditionType | `"HandoverItem"` | string | HandoverItem condition |
| dogtagLevel | `0` | int | Required if handing over DogTag |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| isEncoded | `false` | boolean | Required if requiring DSP Transmitter handover |
| maxDurability | `100` | int | Required for medical items, weapons, armour, etc |
| minDurability | `0` | int | Required for medical items, weapons, armour, etc |
| onlyFoundInRaid | `false` | boolean | If item is required to be FIR or not |
| parentId | `""` | MongoID string | Used to create optional sub-tasks for a task - see `"Bad Rep Evidence"` in the Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links) --- Leave this as an empty string if not needed. |
| target | `["54491c4f4bdc2db1078b4568"]` | MongoID string array | ItemID that is to be handed over, you can have multiple items in the array for multiple choice. If wanting a dogtag handed over, it will only be the specified ID - if you want all of them to be accepted you will need to populate the array for every ID for dogtags. |
| value | `2` | int | Amount of items in target that are required to be handed over to complete subtask |
| visibilityConditions | `[]` | array | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage |

Example:
```json
				{
          "conditionType": "HandoverItem",
          "dogtagLevel": 0,
          "dynamicLocale": false,
          "globalQuestCounterId": "",
          "id": "596737cb86f77463a8115efd",
          "index": 3,
          "isEncoded": false,
          "maxDurability": 100,
          "minDurability": 0,
          "onlyFoundInRaid": false,
          "parentId": "",
          "target": [
            "54491c4f4bdc2db1078b4568"
          ],
          "value": 2,
          "visibilityConditions": []
        }
```

### Find Item
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| conditionType | `"FindItem"` | string | HandoverItem condition |
| countInRaid | `false` | boolean | Currently unused, should always be false |
| dogtagLevel | `0` | int | Required if finding DogTag of specific level |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| isEncoded | `false` | boolean | Required if requiring DSP Transmitter handover |
| maxDurability | `100` | int | Required for medical items, weapons, armour, etc |
| minDurability | `0` | int | Required for medical items, weapons, armour, etc |
| onlyFoundInRaid | `false` | boolean | If item is required to be FIR or not |
| parentId | `""` | MongoID string | Used to create optional sub-tasks for a task - see `"Bad Rep Evidence"` in the Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links) --- Leave this as an empty string if not needed. |
| target | `["54491c4f4bdc2db1078b4568"]` | MongoID string array | ItemID that is to be found, you can have multiple items in the array for multiple choice. If wanting a dogtag handed over, it will only count the specified IDs - if you want all of them to be accepted you will need to populate the array for every ID for dogtags. |
| value | `2` | int | Amount of items in target that are required to be found to complete subtask |
| visibilityConditions | `[]` | array | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage |

Example:
```json
{
  "conditionType": "FindItem",
  "countInRaid": false,
  "dogtagLevel": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5ac502a786f7740bde1b000c",
  "index": 0,
  "isEncoded": false,
  "maxDurability": 100,
  "minDurability": 0,
  "onlyFoundInRaid": true,
  "parentId": "",
  "target": [
    "59e36c6f86f774176c10a2a7"
  ],
  "value": 2,
  "visibilityConditions": []
}
```
### Skill Requirement
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| compareMethod | `">="` | string | Method to compare player skill to required skill (example shows player must have higher than or equal to the example value) |
| conditionType | `"Skill"` | string | HandoverItem condition |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| parentId | `""` | MongoID string | Used to create optional sub-tasks for a task - see `"Bad Rep Evidence"` in the Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links) --- Leave this as an empty string if not needed. |
| target | `"Charisma"` | string | Skill name that the condition targets - see [Skill Table](/modding/references/quest-values#skill-names) |
| value | `10` | int | Amount of items in target that are required to be found to complete subtask |
| visibilityConditions | `[]` | array | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage |

Example:
```json
{
  "compareMethod": ">=",
  "conditionType": "Skill",
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5ae9c29386f77427153c7fb0",
  "index": 0,
  "parentId": "",
  "target": "Charisma",
  "value": 10,
  "visibilityConditions": []
}
```
### Leave Item At Location
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

>
> This quest type is NOT the same as PlaceBeacon. They have different in game behaviours. Beacon is persistent and can be removed/destroyed and will impact the players progress. LeaveItemAtLocation is completed and the item disappears as soon as it's placed.
>

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| conditionType | `"LeaveItemAtLocation"` | string | LeaveItemAtLocation condition |
| dogtagLevel | `0` | int | Required if finding DogTag of specific level |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| isEncoded | `false` | boolean | Required if requiring DSP Transmitter handover |
| maxDurability | `100` | int | Required for medical items, weapons, armour, etc |
| minDurability | `0` | int | Required for medical items, weapons, armour, etc |
| onlyFoundInRaid | `false` | boolean | If item to be placed is required to be FIR or not |
| parentId | `""` | MongoID string | Used to create optional sub-tasks for a task - see `"Bad Rep Evidence"` in the Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links) --- Leave this as an empty string if not needed. |
| plantTime | `30` | int | Time in seconds that it takes the player to "place" the item |
| target | `["54491c4f4bdc2db1078b4568"]` | MongoID string array | ItemID that is to be placed, you can have multiple items in the array for multiple choice. If wanting a dogtag to be placed, it will only count the specified IDs - if you want all of them to be acceptable you will need to populate the array for every ID for dogtags. |
| value | `2` | int | Amount of items in target that are required to be found to complete subtask |
| visibilityConditions | `[]` | array | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage |
| zoneId | `"ter_017_area_1"` | string | This value is required and must match the `placeitem` zone that you have created (or use a vanilla zone ID). This zone indicates where the item must be placed. For zone creation, you may consider using the mod VCQL by Virtual. |

Example:
```json
{
  "conditionType": "LeaveItemAtLocation",
  "dogtagLevel": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5a687a1c86f7745f2152168c",
  "index": 2,
  "isEncoded": false,
  "maxDurability": 100,
  "minDurability": 0,
  "onlyFoundInRaid": false,
  "parentId": "",
  "plantTime": 30,
  "target": [
    "590c5a7286f7747884343aea"
  ],
  "value": 3,
  "visibilityConditions": [],
  "zoneId": "ter_017_area_1"
}
```
### Place Beacon

>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

>
> This quest type is NOT the same as LeaveItemAtLocation. They have different in game behaviours. Beacon is persistent and can be removed/destroyed and will impact the players progress. LeaveItemAtLocation is completed and the item disappears as soon as it's placed.
>

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| conditionType | `"PlaceBeacon"` | string | PlaceBeacon condition |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| parentId | `""` | MongoID string | Used to create optional sub-tasks for a task - see `"Bad Rep Evidence"` in the Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links) --- Leave this as an empty string if not needed. |
| plantTime | `30` | int | Time in seconds that it takes the player to "place" the item |
| target | `["5991b51486f77447b112d44f"]` | MongoID string array | You should **only use** the ID for the MS2000 Marker (`5991b51486f77447b112d44f`) or the Radio Repeater (`63a0b2eabea67a6d93009e52`). Since the item persists after placing, I believe these two IDs are the only ones currently used for this quest type.|
| value | `1` | int | Amount of beacons that must be placed to complete the task. |
| visibilityConditions | `[]` | array | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage |
| zoneId | `"gazel"` | string | This value is required and must match the `placeitem` zone that you have created (or use a vanilla zone ID). This zone indicates where the item must be placed. For zone creation, you may consider using the mod VCQL by Virtual. |

Example:
```json
{
  "conditionType": "PlaceBeacon",
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5998366886f77455853b2d9f",
  "index": 1,
  "parentId": "",
  "plantTime": 30,
  "target": [
    "5991b51486f77447b112d44f"
  ],
  "value": 1,
  "visibilityConditions": [],
  "zoneId": "gazel"
}
```

### Visit Place

>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

>
> Notice that the quest structure for this type is actually inside a "CounterCreator" condition.
> "CounterCreator" conditions hold various condition types, and must be used for this condition type.
{.is-info}

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| conditionType | `"VisitPlace"` | string | VisitPlace condition |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| target | `"place_peacemaker_001"` | string | This value is required and must match the `visit` zone that you have created (or use a vanilla zone ID). This zone indicates where the player must visit. For zone creation, you may consider using the mod VCQL by Virtual. |
| value | `1` | int | This is always 1. The actual value of how many times you must complete the "VisitPlace" condition is the `value` property on the `CounterCreator` itself, and not the one within the `VisitPlace` condition. |

Example:
```json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "conditionType": "VisitPlace",
        "dynamicLocale": false,
        "id": "5a3ba1c286f7742c9d4f5d49",
        "target": "place_peacemaker_001",
        "value": 1
      }
    ],
    "id": "5a3ba11786f7742c9d4f5d28"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5a3ba11786f7742c9d4f5d29",
  "index": 1,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Exploration",
  "value": 1,
  "visibilityConditions": []
}
```

### Weapon Assembly
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

>
> These types of quest conditions are personally the hardest to get correct. It is very easy to mess up a compare method or use an invalid value.
> Double, triple, and quadruple check these quests as you build them. Test. Them.
{.is-warning}

| Property Name | Example Value | Type | Child Property Name | Child Example Value | Child Type | Notes |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| conditionType | `"WeaponAssembly"` | string | | | | WeaponAssembly condition |
| id | `"5accd5e386f77463027e9397"` | MongoID string | | | | Unique ID for the condition |
| index | `0` | int | | | | Currently unused (suspected added via BSG Tooling to build quests) |
| dynamicLocale | `""` | string | | | | Currently unused |
| globalQuestCounterId | `""` | string | | | | Currently unused |
| containsItems | `["5aa66be6e5b5b0214e506e97"]` | MongoID string array | | | | List of ItemIDs in an array that the weapon must have attached |
| parentId | `""` | MongoID string | | | | Used to create optional sub-tasks for a task - see `"Bad Rep Evidence"` in the Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links) --- Leave this as an empty string if not needed. |
| baseAccuracy | - | object | compareMethod | >= | string | Weapon MOA Requirements |
| | | | value | 0 | int | |
| durability | - | object | compareMethod | >= | string | Current durability requirements |
| | | | value | 60 | int | |
| effectiveDistance | - | object | compareMethod | >= | string | Sighting Range requirements |
| | | | value | 60 | int | |
| emptyTacticalSlot | - | object | compareMethod | >= | string | How many empty tactical slots are required |
| | | | value | 60 | int | |
| ergonomics | - | object | compareMethod | >= | string | Ergonomics requirements |
| | | | value | 60 | int | |
| hasItemFromCategory | `["55818b164bdc2ddc698b456c"]` | MongoID string array | | | | List of Item Category IDs that the weapon must have attached |
| height | - | object | compareMethod | <= | string | Number of vertical grid cells the weapon must have in the stash |
| | | | value | 2 | int | |
| magazineCapacity | - | object | compareMethod | <= | string | Requirements for size of the attached magazine |
| | | | value | 50 | int | |
| muzzleVelocity | - | object | compareMethod | >= | string | Velocity Requirements (Velocity * SpeedFactor) |
| | | | value | 0 | int | |
| recoil | - | object | compareMethod | <= | string | Sum of Horizontal & Vertical recoil is the value to compare |
| | | | value | 300 | int | |
| target | `["5bfea6e90db834001b7347f3"]` | MongoID string array |  |  |  | The ItemID of the weapon to be built |
| value | `1` | int |  |  |  | The number of weapons that must be built and handed over that match the requirements (untested over 1) |
| visibilityConditions | `[]` | array | | | | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage |
| weight | - | object | compareMethod | <= | string | Weapon must match the comparison of the value to be valid |
| | | | value | 4.5 | float | |
| width | - | object | compareMethod | <= | string | Number of horizontal grid cells the weapon must have in the stash |
| | | | value | 8 | int | |

Example:
```json
{
  "baseAccuracy": {
    "compareMethod": ">=",
    "value": 0
  },
  "conditionType": "WeaponAssembly",
  "containsItems": [],
  "durability": {
    "compareMethod": ">=",
    "value": 60
  },
  "dynamicLocale": false,
  "effectiveDistance": {
    "compareMethod": ">=",
    "value": 0
  },
  "emptyTacticalSlot": {
    "compareMethod": ">=",
    "value": 0
  },
  "ergonomics": {
    "compareMethod": ">=",
    "value": 47
  },
  "globalQuestCounterId": "",
  "hasItemFromCategory": [
    "55818b164bdc2ddc698b456c"
  ],
  "height": {
    "compareMethod": "<=",
    "value": 1
  },
  "id": "5accd5e386f77463027e9397",
  "index": 0,
  "magazineCapacity": {
    "compareMethod": ">=",
    "value": 5
  },
  "muzzleVelocity": {
    "compareMethod": ">=",
    "value": 0
  },
  "parentId": "",
  "recoil": {
    "compareMethod": "<=",
    "value": 850
  },
  "target": [
    "54491c4f4bdc2db1078b4568"
  ],
  "value": 1,
  "visibilityConditions": [],
  "weight": {
    "compareMethod": ">=",
    "value": 0
  },
  "width": {
    "compareMethod": "<=",
    "value": 4
  }
}
```

### Kills

>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

>
> Notice that the quest structure for this type is actually inside a "CounterCreator" condition.
> "CounterCreator" conditions hold various condition types, and must be used for this condition type.
> See [CounterCreator]()
{.is-info}

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| bodyPart | `["Head"]` | string array | If populated, requires specific kill shots to count. See [Body Part Values](/modding/references/body-part-reference) |
| compareMethod | `">="` | string | Compare method, there's really no reason to use anything other than `">="`
| conditionType | `"Kills"` | string | Kills condition |
| daytime | see example below | object | In game hour requirement, not required - if either value is not 0 then it is enforced for the kill to count (typically used for night raids). Leave `from` & `to` both at `0` to not have a time requirement |
| distance | see example below | object | Distance requirement, not required - if either value is not 0 then it is enforced for the kill to count (typically used for night raids). Set `compareMethod` to `">="` & `value` to `0` to not have a distance requirement. Value is distance in meters. |
| dynamicLocale | `false` | boolean | Currently unused |
| enemyEquipmentExclusive | `[]` | boolean | If populated, requires specific equipment to not be worn by enemy when killed (Not Used by BSG, untested) |
| enemyEquipmentInclusive | `[]` | boolean | If populated, requires specific equipment to be worn by enemy when killed (Not Used by BSG, untested) |
| enemyHealthEffects | `[]` | boolean | If populated, requires specific health ailments to be active on enemy when killed (Not Used by BSG, untested) |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| resetOnSessionEnd | `false` | boolean | Whether the condition resets to 0 if not completed by session end (Exfil/death/etc) - In otherwords, the kill condition must be completed in 1 raid or it resets if `true` |
| savageRole | `[]` | string array | If specified, then the kill will only count if the player kills that specific bot type. See [Bot Type & Name Reference Sheet](/modding/references/bot-types) |
| target | `"AnyPmc"` | string | Must be `"AnyPmc"`, `"Savage"`, or `"Any"`. See [Bot Type & Name Reference Sheet](/modding/references/bot-types) for clarification on what is a Savage or Pmc. Specifying `"Any"` will count any kill no matter what. |
| value | `1` | int | This is always 1. The actual value of how many kills you must achieve to complete the condition is the `value` property on the `CounterCreator` itself, and not the one within the `Kills` condition. |
| weapon | `[]` | string array | Array of weapons that must make the killing blow to count towards the condition. Can be empty.|
| weaponCaliber | `[]` | string array | Unused |
| weaponModsExclusive | `[]` | string array | Array of weapon attachments - if the killing weapon has any of these attachments then the kill will not count. |
| weaponModsInclusive | `[]` | string array | Array of weapon attachments - the killing weapon must have these attachments to be counted. |

Example:
```json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "bodyPart": [],
        "compareMethod": ">=",
        "conditionType": "Kills",
        "daytime": {
          "from": 22,
          "to": 7
        },
        "distance": {
          "compareMethod": ">=",
          "value": 20
        },
        "dynamicLocale": false,
        "enemyEquipmentExclusive": [],
        "enemyEquipmentInclusive": [],
        "enemyHealthEffects": [],
        "id": "5edab65ececc0069284c0ec3",
        "resetOnSessionEnd": false,
        "savageRole": [
          "bossSanitar"
        ],
        "target": "Savage",
        "value": 1,
        "weapon": [],
        "weaponCaliber": [],
        "weaponModsExclusive": [],
        "weaponModsInclusive": []
      }
    ],
    "id": "5edab5a6cecc0069284c0ec1"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5edab5a6cecc0069284c0ec2",
  "index": 0,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Elimination",
  "value": 1,
  "visibilityConditions": []
}
```
### Exit Status
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

>
> Notice that the quest structure for this type is actually inside a "CounterCreator" condition.
> "CounterCreator" conditions hold various condition types, and must be used for this condition type.
{.is-info}

>
> Exit Status conditions can be paired with Exit Name conditions within a "CounterCreator" to also require a specific exfil to have been taken by the player to count. See the example.
{.is-info}

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| conditionType | `"ExitStatus"` | string | ExitStatus condition |
| dynamicLocale | `false` | boolean | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| status | `["Survived", "Transit", "Runner"]` | string array | Depending on what you populate in the array, those are the available exfil statuses that can complete the condition. If you specify the example to the left and the player is killed, the counter remains at 0, because you did not specify "Killed" as a status. If they Transit, they will complete this condition. For valid statuses, see below table. |


| Status Name | Requirements |
| :--- | :--- |
| "Survived" | Player earned 200+ XP or spent at least 7 minutes in raid, and successfully exfilled - not transit. |
| "Killed" | Player dies in raid. |
| "Left" | Player left raid. (Does not apply in SPT) |
| "Runner" | Player exfilled before 7 minutes in raid and did not earn at least 200 XP. |
| "MissingInAction" | Player did not exfil or transit prior to raid time expiring. |
| "Transit" | Player activated a transit and moved to another map. |

Example:
```json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "conditionType": "ExitStatus",
        "dynamicLocale": false,
        "id": "669fb170617a3971bb525b2a",
        "status": [
          "Survived",
          "Transit"
        ]
      },
      {
        "conditionType": "ExitName",
        "dynamicLocale": false,
        "exitName": "Gate_o",
        "id": "66c0a86de55c52cd17921935"
      }
    ],
    "id": "669fb12ec1fbcb64b49837ab"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "669fb12eb01ceef19a5b4ebc",
  "index": 0,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Completion",
  "value": 1,
  "visibilityConditions": []
}
```
### Exit Name
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

>
> Notice that the quest structure for this type is actually inside a "CounterCreator" condition.
> "CounterCreator" conditions hold various condition types, and must be used for this condition type.
{.is-info}

>
> Exit Name conditions can be paired with Exit Status conditions within a "CounterCreator" to also require a specific exfiltration status by the player to count. See the example.
{.is-info}

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| conditionType | `"ExitName"` | string | ExitStatus condition |
| dynamicLocale | `false` | boolean | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| exitName | `"EXFIL_Train"` | string | Name of the exfil that the player must take to complete the condition. For valid exfil names, see [SPT Location Data](https://github.com/sp-tarkov/server/tree/master/project/assets/database/locations) on the GitHub, and view the `allExtracts.json` for the location you are interested in requiring players to exfil from. |

Example:
```json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "conditionType": "ExitStatus",
        "dynamicLocale": false,
        "id": "669fb170617a3971bb525b2a",
        "status": [
          "Survived",
          "Runner",
          "Transit"
        ]
      },
      {
        "conditionType": "ExitName",
        "dynamicLocale": false,
        "exitName": "Gate_o",
        "id": "66c0a86de55c52cd17921935"
      }
    ],
    "id": "669fb12ec1fbcb64b49837ab"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "669fb12eb01ceef19a5b4ebc",
  "index": 0,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Completion",
  "value": 1,
  "visibilityConditions": []
}
```
### Trader Loyalty
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| compareMethod | `">="` | string | Compare method, no reason to really change this unless you want to require them to be lower loyalty levels, which may cause the player to be unable to complete this |
| conditionType | `"TraderLoyalty"` | string | TraderLoyalty condition |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| target | `"54cb50c76803fa8b248b4571"` | MongoID string | Trader ID for the value requirement of the loyalty level. See [Trader IDs](/modding/references/trader-information) |
| value | `3` | float | Loyalty Level required for the player to compare against using the `compareMethod` |
| visibilityConditions | `[]` | array | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage |

Example:
```json
{
  "compareMethod": ">=",
  "conditionType": "TraderLoyalty",
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5dbadfd186f77449467d1482",
  "index": 0,
  "parentId": "",
  "target": "54cb50c76803fa8b248b4571",
  "value": 3,
  "visibilityConditions": []
}
```
### Location Requirement

>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

>
> Notice that the quest structure for this type is actually inside a "CounterCreator" condition.
> "CounterCreator" conditions hold various condition types, and must be used for this condition type.
> You pair this condition with others, this will require the other conditions inside the `CounterCreator` to have been completed on the specified map.
{.is-info}

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| conditionType | `"Location"` | string | Location condition |
| dynamicLocale | `false` | boolean | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| target | `["Interchange"]` | string array | Use `Target Name` data for the locations - see [Location Information](/modding/references/location-information) |

Example:
```json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "conditionType": "ExitStatus",
        "dynamicLocale": false,
        "id": "5a577b4186f7743e797f6f04",
        "status": [
          "Survived",
          "Runner"
        ]
      },
      {
        "conditionType": "Location",
        "dynamicLocale": false,
        "id": "5bf5393d86f77458f17c1993",
        "target": [
          "factory4_day",
          "factory4_night"
        ]
      }
    ],
    "id": "5977784486f774285402cf51"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5977784486f774285402cf52",
  "index": 2,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Completion",
  "value": 1,
  "visibilityConditions": [
    {
      "conditionType": "CompleteCondition",
      "id": "5a5779e486f774411f6c321f",
      "target": "59674fe586f7744f4e358aa2"
    }
  ]
}
```
### Counter Creator
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

Counter Creator's are used to combine multiple conditions together within a single task of a quest, or even by itself with a single condition because it is required. It is highly advised to have read the relevant documentation for the type of condition you are trying to create.

Do not be afraid to mess around the multiple conditions inside a count creator to understand how it functions and how you can utilize it to create unique quests that others (including BSG!) may not have thought to do.

There are two very different examples of use cases for this condition below.

>
> Many quest conditions are nested inside a Counter Creator. For their specific behaviour within a counter creator, please read the relevant sections for that condition type.
{.is-info}

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| completeInSeconds | `0` | int | Currently unused |
| conditionType | `"CounterCreator"` | string | CounterCreator condition |
| counter | | object | See relevant condition documentation |
| doNotResetIfCounterCompleted | `false` | boolean | Works in tandem with `isResetOnConditionFailed` and on its own. If true, and `value` is less than condition value, can set the condition value to 0. In some scenarios, it will check the `isResetOnConditionFailed` property first. Largely unused. See the quest `"Chemistry Closet"` in the Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links) for usage. |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| isNecessary | `false` | boolean | Used in tandem with parentId. If true, and parentId used for optional condition, requires it instead of being optional. Largely unused. |
| isResetOnConditionFailed | `false` | boolean | Used in tandem with `doNotResetIfCounterCompleted`. If true, and `doNotResetIfCounterCompleted` is true - Will reset the value of the counter to 0 if any conditions are not met when starting a raid. This has never been used, untested if works properly. |
| oneSessionOnly | `false` | boolean | Currently unused |
| parentId | `""` | MongoID string | Used to create optional sub-tasks for a task - see `"Bad Rep Evidence"` in the Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links) --- Leave this as an empty string if not needed. |
| type | `"Elimination"` | string | Type of condition for the counter creator. |
| value | `5` | int | Number of nested condition counts required to count the `CounterCreator` condition as completed. (Ie, 5 kills, 5 visits, etc) |
| visibilityConditions | `[]` | array | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage |

25 Scav kills on a specific Map example:
```json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "bodyPart": [],
        "compareMethod": ">=",
        "conditionType": "Kills",
        "daytime": {
          "from": 0,
          "to": 0
        },
        "distance": {
          "compareMethod": ">=",
          "value": 0
        },
        "dynamicLocale": false,
        "enemyEquipmentExclusive": [],
        "enemyEquipmentInclusive": [],
        "enemyHealthEffects": [],
        "id": "5ae44ef386f774149f15ed84",
        "resetOnSessionEnd": false,
        "savageRole": [],
        "target": "Savage",
        "value": 1,
        "weapon": [],
        "weaponCaliber": [],
        "weaponModsExclusive": [],
        "weaponModsInclusive": []
      },
      {
        "conditionType": "Location",
        "dynamicLocale": false,
        "id": "5ae44efd86f774149d4cc6a4",
        "target": [
          "Interchange"
        ]
      }
    ],
    "id": "5ae44ecd86f77414a13c970d"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5ae44ecd86f77414a13c970e",
  "index": 0,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Elimination",
  "value": 25,
  "visibilityConditions": []
}
```
Player exfil 7 times from a specific location, with a specific status, from a specific exfil example:
```json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "conditionType": "Location",
        "dynamicLocale": false,
        "id": "5ae9e46686f77440d37ce046",
        "target": [
          "Interchange"
        ]
      },
      {
        "conditionType": "ExitName",
        "dynamicLocale": false,
        "exitName": "Saferoom Exfil",
        "id": "63929163c115f907b14700bb"
      },
      {
        "conditionType": "ExitStatus",
        "dynamicLocale": false,
        "id": "5bb60cc688a4507f2f385a76",
        "status": [
          "Survived"
        ]
      }
    ],
    "id": "5ae9e44f86f7746b6a466a8d"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5bb60cbc88a45011a8235cc5",
  "index": 0,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Completion",
  "value": 7,
  "visibilityConditions": []
}
```
## Available For Start Requirements
>
All Start Requirements can be combined to have multiple different requirements. 
You can get creative with this and even force players to be between specific levels while also having completed specific quests for a quest to become available. 
I usually recommend only using 2-3 requirements. 

>You can have multiple quest requirements, a good quest to look at for this would be `"Collector"` in the Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links) - the vanilla quest that by far, has the most individual quest requirements out of every quest in Tarkov. 
{.is-info}

>Every condition must be met for a quest to become available for a player to accept it.
{.is-warning}

### Level Start Requirement
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| compareMethod | `">="` | string | Compare method, no reason to really change this unless you want to require the player to be a lower level than dictated to receive the quest, which may cause the player to be unable to ever see this quest depending on other requirements |
| conditionType | `"Level"` | string | Level condition |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| parentId | `""` | string | Currently unused for Quest Start requirements |
| value | `10` | float | Player Side Level required for the player to compare against using the `compareMethod` |
| visibilityConditions | `[]` | array | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage. **This is unused for Start Requirements, I would not advise using it.** |

Example:
```json
{
  "availableAfter": 0,
  "conditionType": "Quest",
  "dispersion": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "66796ea13b61733d65fc59a6",
  "index": 0,
  "parentId": "",
  "status": [
    2,
    5,
    4
  ],
  "target": "657315ddab5a49b71f098853",
  "visibilityConditions": []
}
```
### Quest Start Requirement
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| availableAfter | `0` | int | Seconds that must have passed since completing the quest target for this quest to become available. |
| conditionType | `"Quest"` | string | Quest condition |
| dispersion | `0` | int | Currently unused |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| parentId | `""` | string | Currently unused for Quest Start requirements |
| status | `[4, 5]` | int array | Possible quest statuses for the target quest within the players profile. The target quest must be one of these statuses to become available. See [Quest Status](/modding/references/quest-values#quest-status) for possible values. |
| target | `"657315ddab5a49b71f098853"` | MongoID string | Quest ID of the quest that is checked for the status conditions to control availability of the quest you are building this requirement for. |
| visibilityConditions | `[]` | array | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage. **This is unused for Start Requirements, I would not advise using it.** |

Example:
```json
{
  "availableAfter": 0,
  "conditionType": "Quest",
  "dispersion": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "66796ea13b61733d65fc59a6",
  "index": 0,
  "parentId": "",
  "status": [
    2,
    5,
    4
  ],
  "target": "657315ddab5a49b71f098853",
  "visibilityConditions": []
}
```
### Trader Standing Requirement
>
> As with all properties in quests - you should use all available properties regardless of if you need them or not.
> BSG Quests uses all properties regardless of whether or not they are related to the item being handed over.
>

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| compareMethod | `">="` | string | Compare method, no reason to really change this unless you want to require the player to be a lower loyalty level than dictated to receive the quest, which may cause the player to be unable to ever see this quest depending on other requirements |
| conditionType | `"TraderStanding"` | string | TraderStanding condition |
| dynamicLocale | `false` | boolean | Currently unused |
| globalQuestCounterId | `""` | string | Currently unused |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the condition |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| parentId | `""` | string | Currently unused for Quest Start requirements |
| target | `"579dc571d53a0658a154fbec"` | MongoID string | Trader ID for the value requirement of the loyalty level. See [Trader IDs](/modding/references/trader-information) |
| value | `3` | float | Loyalty Level required for the player to compare against using the `compareMethod` |
| visibilityConditions | `[]` | array | see [Visibility Conditions](/modding/references/quest-values#visibility-conditions) for example usage. **This is unused for Start Requirements, I would not advise using it.** |

Example:
```json
{
  "compareMethod": ">=",
  "conditionType": "TraderStanding",
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "6672daa3a5f158174abeaab2",
  "index": 0,
  "parentId": "",
  "target": "579dc571d53a0658a154fbec",
  "value": 4,
  "visibilityConditions": []
}
```
## Fail Conditions
Fail conditions can get extremely complicated and are very easy to break. It is highly suggest that as you add conditions that may cause the quest to fail, you **test** them. You can use a USEC Dev account to test quest failure conditions, as when the profile is created, all quests are started and accepted without needing to do `AvailableForStart` conditions.

> If you add fail conditions and you want the player to be able to restart it, make sure that you flip `restartable` to `true` in the quest properties. If you fail to do this, and they fail the quest - it is permanently failed.
{.is-warning}

Fail conditions work the exact same way as `AvailableForStart` and `AvailableForFinish` conditions. Please refer to that documentation on how to create Fail Conditions. The only difference is that the conditions go within the `Fail` array, and not the `AvailableForStart` or `AvailableForFinish` array.

Using vanilla quests is a very good way to build your fail conditions. See Vanilla Quests Data -> [Useful Links](/modding/references/quest-values#useful-links)

## Rewards
### Experience
| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| availableInGameEditions | `[]` | string array | If you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the reward |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| type | `"Experience"` | string | Experience reward |
| unknown | `false` | boolean | Whether or not the reward will be shown, or if it will display a `?` on the trader task page. |
| value | `85000` | int | Amount of experience to grant to the player upon quest completion |

Example:
```json
{
  "availableInGameEditions": [],
  "id": "60c8c2d02238043a5267864d",
  "index": 0,
  "type": "Experience",
  "unknown": false,
  "value": 7500
}
```
### Item
> I would highly suggest that you look at how vanilla quests are structured for item rewards. These can be complicated when starting out.

> There are multiple examples in this secion on doing item rewards. Pay attention to the `StackObjectsCount` inside the `items` array compared to the `value` property on the reward object. It is very easy to mess this up.
{.is-warning}

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| availableInGameEditions | `[]` | string array | If you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array |
| findInRaid | `false` | boolean | Whether the item being rewarded is marked as FIR or not |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the reward |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| items | | object array | See examples |
| target | `"67d82e6f4f4b5340e611a4cb"` | MongoID string | The target is the `_id` of the item you are rewarding. This target ID is targetted to a different `_id` depending on if it's a single item reward, multi item reward, or a weapon/armour reward (item that has children). See the examples. |
| type | `"Item"` | string | Will always be `"Item"` for an Item reward |
| unknown | `false` | boolean | Whether or not the reward will be shown, or if it will display a `?` on the trader task page. |
| value | `1` | int | The value here is dependent on how many items you are rewarding, or what type of item you are rewarding. Stackable single item rewards will match the `StackObjectsCount` of the item in the `items` array. Multiple of the same item will be the sum of the `StackObjectsCount` inside the `items` array, but the `items` array must only contain the same `_tpl` item to be valid. Rewarding a weapon/armour/etc, this value will always be 1 since they cannot stack. |

Rouble reward (single item reward) example:
```json
{
  "availableInGameEditions": [],
  "findInRaid": false,
  "id": "60cb694077dc197c77424fcd",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6f4f4b5340e611a4cb",
      "_tpl": "5449016a4bdc2d6f028b456f",
      "upd": {
        "StackObjectsCount": 75000
      }
    }
  ],
  "target": "67d82e6f4f4b5340e611a4cb",
  "type": "Item",
  "unknown": false,
  "value": 75000
}
```

Single item reward example:
```json
{
  "availableInGameEditions": [],
  "findInRaid": true,
  "id": "60cb69576a2a1958fc522d04",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6f4f4b5340e611a4cd",
      "_tpl": "5d02778e86f774203e7dedbe",
      "upd": {
        "SpawnedInSession": true,
        "StackObjectsCount": 1
      }
    }
  ],
  "target": "67d82e6f4f4b5340e611a4cd",
  "type": "Item",
  "unknown": false,
  "value": 1
}
```

Multiple item reward example:
```json
{
  "availableInGameEditions": [],
  "findInRaid": true,
  "id": "5ac6643e86f774055a77c730",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6f4f4b5340e611a646",
      "_tpl": "5673de654bdc2d180f8b456d",
      "upd": {
        "SpawnedInSession": true,
        "StackObjectsCount": 1
      }
    },
    {
      "_id": "67d82e6f4f4b5340e611a647",
      "_tpl": "5673de654bdc2d180f8b456d",
      "upd": {
        "SpawnedInSession": true,
        "StackObjectsCount": 1
      }
    },
    {
      "_id": "67d82e6f4f4b5340e611a648",
      "_tpl": "5673de654bdc2d180f8b456d",
      "upd": {
        "SpawnedInSession": true,
        "StackObjectsCount": 1
      }
    },
    {
      "_id": "67d82e6f4f4b5340e611a649",
      "_tpl": "5673de654bdc2d180f8b456d",
      "upd": {
        "SpawnedInSession": true,
        "StackObjectsCount": 1
      }
    }
  ],
  "target": "67d82e6f4f4b5340e611a649",
  "type": "Item",
  "unknown": false,
  "value": 4
}
```

Weapon reward example:
```json
{
  "availableInGameEditions": [],
  "findInRaid": true,
  "id": "60d062e01bdece56c249cc0b",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6e4f4b5340e611a3d5",
      "_tpl": "59f9cabd86f7743a10721f46",
      "upd": {
        "StackObjectsCount": 1
      }
    },
    {
      "_id": "67d82e6e4f4b5340e611a3d6",
      "_tpl": "5998517986f7746017232f7e",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_pistol_grip"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3d7",
      "_tpl": "599851db86f77467372f0a18",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_stock"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3d8",
      "_tpl": "5998529a86f774647f44f421",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_magazine"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3d9",
      "_tpl": "5998598e86f7740b3f498a86",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_muzzle"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3da",
      "_tpl": "59985a8086f77414ec448d1a",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_reciever"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3db",
      "_tpl": "599860e986f7743bb57573a6",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_sight_rear"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3dc",
      "_tpl": "59ccd11386f77428f24a488f",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_gas_block"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3dd",
      "_tpl": "5648b1504bdc2d9d488b4584",
      "parentId": "67d82e6e4f4b5340e611a3dc",
      "slotId": "mod_handguard"
    }
  ],
  "target": "67d82e6e4f4b5340e611a3d5",
  "type": "Item",
  "unknown": false,
  "value": 1
}
```
### Assortment Unlock
> I would highly suggest that you look at how custom traders are structured for item unlocks. 
> These can be complicated when starting out. 
> If you are altering a vanilla trader you will also need to adjust the traders assort to have these items in them, and you will need to adjust the traders `questassort.json` to have the relevant quest ID to match to the assort ID unlock. These steps are also required when doing unlocks for custom traders.

> There are multiple examples in this section on doing item unlocks. This behaviour has slightly changed in 3.11 for unlocks as the targets no longer have to match the assorts.
{.is-warning}

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| availableInGameEditions | `[]` | string array | If you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the reward |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| items | | object array | See examples. This array should only have 1 entry unless you are adding an item that has children (weapon, armour, etc). |
| loyaltyLevel | `1` | int | Loyalty Level for the Unlock. Must match the Quest Assort Loyalty Level for the trader. |
| target | `"67d82e6f4f4b5340e611a4cb"` | MongoID string | The target is the `_id` of the item you are rewarding as an unlock. The `_tpl` of that target is the item that is actually going to be unlocked, only if that `_tpl` has an entry in the assort and the quest ID for this condition is in the `questassort.json` for the `traderId` being targetted...and that `questassort` entry for the questID is targetted to the `id` of the assort entry for the `_tpl`. You can see how this is confusing, **_use custom traders or vanilla traders as a reference_.** |
| traderId | `"58330581ace78e27b8b10cee"` | MongoID string | Trader ID for the assortment unlock. See [Trader IDs](/modding/references/trader-information) | |
| type | `"AssortmentUnlock"` | string | Will always be `"Item"` for an Item reward |
| unknown | `false` | boolean | Whether or not the reward will be shown, or if it will display a `?` on the trader task page. |

Weapon assort unlock example (Will unlock this specific weapon, with these specific attachments in the assort): 
```json
{
  "availableInGameEditions": [],
  "id": "63a1a03b4ebcff1c995dc341",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6e4f4b5340e611a312",
      "_tpl": "5a7828548dc32e5a9c28b516"
    },
    {
      "_id": "67d82e6e4f4b5340e611a313",
      "_tpl": "5a787f7ac5856700177af660",
      "parentId": "67d82e6e4f4b5340e611a312",
      "slotId": "mod_barrel"
    },
    {
      "_id": "67d82e6e4f4b5340e611a314",
      "_tpl": "5a788089c5856700142fdd9c",
      "parentId": "67d82e6e4f4b5340e611a312",
      "slotId": "mod_handguard"
    },
    {
      "_id": "67d82e6e4f4b5340e611a315",
      "_tpl": "5a7882dcc5856700177af662",
      "parentId": "67d82e6e4f4b5340e611a312",
      "slotId": "mod_magazine"
    },
    {
      "_id": "67d82e6e4f4b5340e611a316",
      "_tpl": "5a7880d0c5856700142fdd9d",
      "parentId": "67d82e6e4f4b5340e611a312",
      "slotId": "mod_stock"
    }
  ],
  "loyaltyLevel": 1,
  "target": "67d82e6e4f4b5340e611a312",
  "traderId": "58330581ace78e27b8b10cee",
  "type": "AssortmentUnlock",
  "unknown": false
}
```

Single item unlock example: 
```json
{
  "availableInGameEditions": [],
  "id": "5ac667f686f77403df401d1d",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6f4f4b5340e611a5ec",
      "_tpl": "584984812459776a704a82a6"
    }
  ],
  "loyaltyLevel": 1,
  "target": "67d82e6f4f4b5340e611a5ec",
  "traderId": "58330581ace78e27b8b10cee",
  "type": "AssortmentUnlock",
  "unknown": false
}
```

### Trader Standing
| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| availableInGameEditions | `[]` | string array | If you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the reward |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| target | `"5a7c2eca46aef81a7ca2145d"` | MongoID string | Trader ID that the condition targets - see [Trader IDs](/modding/references/trader-information) |
| type | `"TraderStanding"` | string | Will always be `"TraderStanding"` for an TraderStanding reward |
| unknown | `false` | boolean | Whether or not the reward will be shown, or if it will display a `?` on the trader task page. |
| value | `0.45` | float | How many loyalty points to award to the player for the targetted Trader |

Example:
```json
{
  "availableInGameEditions": [],
  "id": "60cc7aff179f8541b8469273",
  "index": 0,
  "target": "5a7c2eca46aef81a7ca2145d",
  "type": "TraderStanding",
  "unknown": false,
  "value": 0.02
}
```
### Skill
| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| availableInGameEditions | `[]` | string array | If you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the reward |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| target | `"Attention"` | string | Skill name that the condition targets - see [Skill Table](/modding/references/quest-values#skill-names) |
| type | `"Skill"` | string | Will always be `"Skill"` for a Skill reward |
| unknown | `false` | boolean | Whether or not the reward will be shown, or if it will display a `?` on the trader task page. |
| value | `100` | int | How many points to award to the target skill |

Example:
```json
{
  "availableInGameEditions": [],
  "id": "629f0a7650f43060015c5382",
  "index": 0,
  "target": "Attention",
  "type": "Skill",
  "unknown": false,
  "value": 300
}
```
### Stash Rows
>
> Stash Row rewards will not display on the players stash until they restart the EFT client, or they run and exfil from a raid.
{.is-warning}

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| availableInGameEditions | `[]` | string array | If you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the reward |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) |
| type | `"StashRows"` | string | Will always be `"StashRows"` for a StashRows reward |
| unknown | `false` | boolean | Whether or not the reward will be shown, or if it will display a `?` on the trader task page. |
| value | `2` | int | How many rows to award to the player's stash |

Example:
```json
{
  "availableInGameEditions": [],
  "id": "668858720221bbe5f306b4e7",
  "index": 0,
  "type": "StashRows",
  "unknown": false,
  "value": "2"
}
```
### Achievement
>
> Achievement rewards require custom code to import the achievement data and icon to award to the player properly, unless you are rewarding an existing achievement.
{.is-warning}

>
> Referring to the Server `achievements.json` file in the server database templates is advised to understand the actual structure of achievements. This reference sheet will not go into detail on how to properly add achievements to the server.
{.is-info}

| Property Name | Example Value | Type | Notes |
| :--- | :--- | :--- | :--- |
| availableInGameEditions | `[]` | string array | If you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array |
| id | `"5a3fbdb086f7745a554f0c31"` | MongoID string | Unique ID for the reward |
| index | `0` | int | Currently unused (suspected added via BSG Tooling to build quests) ||
| target | `"664f1f8768508d74604bf556"` | MongoID string | Unique AchievementID, this is the achievement that will be rewarded |
| type | `"Achievement"` | string | Will always be `"Achievement"` for an Achievement reward |
| unknown | `false` | boolean | Whether or not the reward will be shown, or if it will display a `?` on the trader task page |

Example:
```json
{
  "availableInGameEditions": [],
  "id": "664f249468508d74604bf55f",
  "index": 0,
  "target": "664f1f8768508d74604bf556",
  "type": "Achievement",
  "unknown": false
}
```

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/5050-method.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/5050-method.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/5050-method.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: 50/50 Method
description: How to use the 50/50 Method to find the mod causing your issues.
published: true
date: 2026-06-08T14:24:52.351Z
tags: guide, mods
editor: markdown
dateCreated: 2025-10-05T01:29:38.525Z
---

> This page applies to SPT version `4.0`
{.is-info}


## What is the 50/50 Method?
The 50/50 Method, or a [binary search](https://en.wikipedia.org/wiki/Binary_search), is a method quickly checking all your mods for a singular mod that's causing issues. It's much faster than individually checking each one, which is also known as a [linear search](https://en.wikipedia.org/wiki/Linear_search).

If you need to check **50** mods, the 50/50 Method will only take **7** tests, while checking each mod individually could take **50** tests.
If you need to check **100** mods, the 50/50 Method will only take **8** tests, while checking each mod individually could take **100** tests.

## 50/50 Method
First, verify that the issue you have is due to a mod by running SPT without any installed. See the [Uninstalling Mods](/Uninstalling_Mods) page on how to uninstall mods. Note that there's no need to delete your mods, simply move them to a temporary folder, and create a new test profile [so your main profile isn't affected](https://wiki.sp-tarkov.com/Uninstalling_Mods#profiles).
If you have the storage space, you can test if the issue is due to mods by installing a new copy of SPT and seeing if the issue is present without any mods.

1. Copy your `[game folder]/SPT` and `[game folder]/BepInEx` folders to a new folder (e.g.: a new folder called `my mods` on your desktop).
  - This will allow you to restore all your mods, profiles, and settings after you find the issue-causing mod.
2. Make a new test profile.
3. Create a new folder outside of your game folder called `test mods`.
	- It will be helpful to recreate `\SPT\user\mods` and `\BepInEx\plugins` folders inside `test mods`, to avoid accidentally reinstalling a mod in the incorrect location later on.
4. Move half of your installed mods to `test mods`.
  - Some mods have parts in `\SPT\user\mods` and `BepInEx\plugins`. Make sure you move both parts of a mod out of your game folder at the same time.
  - Some mods depend on other mods to function. You can move a mod out of your SPT folder without its dependencies, but don't move a dependency without mods that use it.
  - **Do not move your `\BepInEx\plugins\spt`**. It contains core SPT files and no mod files.
  - Very few mods have files in `\BepInEx\patchers`. If this folder contains only `spt-prepatch.dll`, then you can ignore it. If not, make sure to move the mod files with its other parts.
5. Launch SPT and see if the issue you had is still present.
  - If the issue is still present, the mod at fault is one that's still installed in your SPT.
    - Delete the mod files from `test mods`.
  - If the issue goes away, the mod at fault is one that's inside `test mods`.
	  - Delete your currently installed mods.
    - Reinstall the mods from `test mods` to your SPT.
6. Repeat step 4 and 5 until you're left with a single mod.
7. Move or delete the mod that's causing the issue from your `my mods` folder.
8. Copy the files from `my mods` folder into your SPT folder. This will reinstall all your mods, except the one causing the issue. Override all files when prompted.

After you identified which mod causes your issue, you should report it to the mod author on their [Forge](https://forge.sp-tarkov.com/) mod page.

## Alternative Methods

- While it might be tempting to instead install a new copy of SPT and then install your mods half at a time to it, this new install will not have the same game and mod settings as your main SPT install. If you make every setting match, or manually go through each mod to copy its settings files, you will just end up with a copy of your main SPT install, possibly with small differences you might have missed.
- Instead, if you have the storage space, you can also copy your entire SPT folder elsewhere and perform the 50/50 Method on it instead.
- This method should highlight why it's important to install your mods one at a time or in small batches, as that would let you catch the issue as being one of the mods you recently installed. However, if you didn't install mods gradually, or the issue didn't present itself immediately after installing mods, then the 50/50 Method is your best option.
- If instead you want to find a mod that's incompatible with another, you can also use this method. Leave the mod installed when following the method until you're left with it and the mod that's incompatible. 

# See also
[Installing Mods](/Installing_Mods)
[Uninstalling Mods](/Uninstalling_Mods)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/How_SPT_Works.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/How_SPT_Works.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/How_SPT_Works.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Any SPT version
-->

---
title: How SPT Works
description: The basics of how SPT works.
published: true
date: 2026-02-21T08:41:43.759Z
tags: 
editor: markdown
dateCreated: 2025-11-11T22:39:55.471Z
---

> This page applies to any SPT version
{.is-info}

## Installation
<div style="margin-top: 20px;"></div>
<img src="/how_spt_works/spt_installer.png" alt="SPT installer" width=800 style="display: block; margin: 0 auto;">
<div style="margin-top: 10px;"></div>

- The [SPT installer](https://forge.sp-tarkov.com/installer) makes a copy of your EFT files, and if necessary, automatically downgrades them to an older version.
- The installer always installs the latest version of SPT.
- Each SPT version is made for a specific version of EFT. You can see what version of EFT is used on that SPT version's [Release page](<https://github.com/sp-tarkov/build/releases>).
- This means that, once installed, SPT is completely seperate from your EFT files. You can update EFT as much as you want, and it will not affect your SPT install.
	- After you install SPT, you cannot completely uninstall EFT, but you can delete the `EscapeFromTarkov_Data` folder from your live EFT folder if you really need the space.
	- If you own EFT through Steam you will need to disable auto-updates for EFT to prevent Steam from re-downloading said folder.
- Once installed, you can freely copy, move or delete your SPT install.
	- If you make a copy of your SPT, you will need to tweak the shortcuts inside it, as they will be pointing towards the original SPT folder.
- The SPT developers need to make a new SPT version to include new content released for EFT. No deadline is given, but it usually takes several month. A new SPT version is usually announced a week before release.

For a guide on installing SPT, see the [Installation Guide](/Installation_Guide) page.

## Can I get banned?
- You cannot get banned for using SPT so long as you don't run SPT and EFT at the same time, that includes the launcher.
	- Don't install SPT to the same folder as Live EFT.
	- Don't brag to Nikita himself or flaunt it in their Discord while screaming your Live EFT username.
- You can play EFT whenever you want so long as you're not also running SPT.

We have no verified reports of people being banned on Live EFT just for playing SPT. Many developers for SPT would be banned on Live by now if this were true.

## Updates

- Your SPT can be updated between hotfix versions (e.g.: `4.0.1` → `4.0.4`) by simply applying the new release files to your existing SPT install. There is no need to install a new copy of SPT.
- You cannot update an older version of SPT (e.g.: `3.11.4` → `4.0.0`). You have to install a new copy of SPT. You don't need to delete your old install.
- Your profiles will work on a new hotfix version.
- All mods made for an older hotfix version will should work on a newer one. So a mod made for `4.0.0` should work on `4.0.4`.
- Mods not made for the version of SPT you have installed will not work. A mod made for `3.11.4` will not work on `4.0.4`.

For a guide on updating SPT, see the [Updating SPT](/Updating_SPT) page.

## In-game

- When creating a profile, you can choose any edition you want. It's not limited to the EFT edition you own.
- SPT has all the functionality of EFT's PvE mode:
	- All quests, items and traders are available (for the version of EFT that SPT is using).
	- Flea market is emulated with randomly generated offers.
	- All progress you make is saved on a raid's end.
- AI PMCs will gain better gear as you level up.
- SPT uses EFT's practice raid system to work. This means that you're always running a "practice raid", however your loot and quest progress will get saved.
- Practice mode's settings will apply to your raids.
- If you <kbd>Alt</kbd> + <kbd>F4</kbd> or crash in the middle of your raid, no progress will be saved. It will be as if the raid never happened.
- You do not need to have your SPT server running for insurance, flea, or Hideout crafts to continue. Once you reopen SPT, those will "catch-up" to where they should be.

# See also
[Beginner's Guide](/Beginners_Guide)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/how_to_contribute.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/how_to_contribute.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/how_to_contribute.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: How to Contribute
description: Learn how to contribute to the SPT Wiki.
published: true
date: 2025-10-14T01:37:55.434Z
tags: guide
editor: markdown
dateCreated: 2025-10-12T15:47:12.223Z
---

## Wiki.js
[Wiki.js](https://js.wiki/) is the framework the SPT Wiki uses. However, this framework currently does not directly support edit requests.
Trusted community members are given the ability to directly edit the Wiki. You can leave suggestions in the [`#website-wiki`](https://discord.com/channels/875684761291599922/1426941224324960266) channel on our [Discord server](http://discord.sp-tarkov.com/).
If instead you'd like to submit or edit a page, you'd need to make a pull request on the [Wiki's Github page](<https://github.com/sp-tarkov/wiki/>).

## Pull requests
To set up a pull request, first you'll need to create a fork of the Wiki. 
1. On the [Wiki's Github page](<https://github.com/sp-tarkov/wiki/>), simply click the `Fork` button.
2. This will create a fork, or a seperate copy, of the Wiki under your control. You will be able to add or edit pages freely to it.
3. Once you're happy with the changes you made, you'll be able to create a pull request. That is a request to merge the changes you made in your fork to the actual Wiki.
4. On your fork's `Pull requests` page, press the `New pull request` button. Github should automatically select the correct repositories. It will let you know if the pull request is `Able to merge`.
5. Press `Create pull request`. If approved, your changes will be made to the SPT Wiki.

## Markdown
The SPT Wiki can use many different types of formatting. The easiest to use is [Markdown](https://daringfireball.net/projects/markdown/). You can see which Markdown features are supported on the [Wiki.js documentation page](https://docs.requarks.io/editors/markdown). There are many resources online for Markdown, however it's entirely doable in just Notepad or Github's text editor.

**Note**: If you're submitting a new page, the file must have the `.md` file extension, and include this header at its beginning:

```
---
title: title
description: summary
published: true
date: 2025-10-12T12:00:00.000Z
tags: 
editor: markdown
dateCreated: 2025-10-12T12:00:00.000Z
---
```
Only the `title` and `description` fields need to be edited. The `date` and `dateCreated` fields should be updated to the date of your page's creation, but it's not stricly necessary. Already created pages have this header included if you'd like to see examples.

# See also

[Style Guide](/Style_Guide)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Installation_Guide.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Installation_Guide.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Installation_Guide.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Installation Guide
description: A step by step guide on how to install and initially setup Single Player Tarkov.
published: true
date: 2025-12-20T03:41:04.264Z
tags: 
editor: markdown
dateCreated: 2025-06-05T14:00:12.568Z
---

> This page applies to SPT version `4.0`
{.is-info}


## What you need to do before you install Single Player Tarkov
Verify that your Escape From Tarkov is fully up-to-date, through the BSG Launcher or Steam.
SPT requires that your EFT is on the latest version. This is so the downpatcher can copy your EFT files and patch them down to the same EFT client version that SPT runs on.

Verify that your Escape From Tarkov works, and that you can load up to at least the main menu or stash.
This is particularly important if you have just installed Escape From Tarkov so all necessary files can be generated.

## Installing and running Single Player Tarkov

1. Download the [SPT Installer](https://forge.sp-tarkov.com/installer).
 - The installer will always download & install the latest SPT version, it **does not** update a current SPT install.
2. Run the SPT Installer.
3. Read the Installer Info page, then click next.
 - This page contains information as to what the installer does and does not do. It also answers many common questions that users have which is why it is there.
4. Select an install path. 
 - **DO NOT** install to a protected location such as Documents or Desktop as you might encounter Windows permission issues. **DO NOT** install into your Live EFT folder. A good location would be `C:\Games\SPT`.
5. Click 'Start Install' and wait for it to complete.
 - Once complete you will be asked if you want to open the Install Folder or Add a Desktop Shortcuts. Tick or untick to your preference.
  - If you decide against the shortcuts, you can run the `SPT.Server` and `SPT.Launcher` from inside your SPT folder. They are shortcuts which you can copy to any location on your computer.
6. Run `SPT.Server`.
 - Wait for the green text that says `Server has started, happy playing`.
 - Your server needs to be running while you play. It can just be closed when you are done playing.
7. Run `SPT.Launcher` and follow the onscreen instructions.
 - If you want to copy over your EFT in-game settings, click `OK`. 
 - You can use any username you want. It is recommend that you **do not** use your EFT account username. Especially if you plan on recording or streaming SPT.
 - `Login Automatically` will always log into the last profile you loaded. You can disable this by clicking `Logout` in the bottom right, then unchecking the option.
 - Select your desired game version. Each version has a description box summarising what is included. Once you have picked your chosen game version click `Register`. You can pick *any* game version you want from the profile list, you do not need to own the corresponding EFT version. Once chosen, you cannot change the edition a profile is using.
8. Click `Start Game` and load into the main menu.

Once you have completed the above, you can now play SPT and install mods found on [The Forge](https://forge.sp-tarkov.com/). You can find a guide on how to correctly install SPT mods on the [Installing Mods](https://wiki.sp-tarkov.com/Installing_Mods) Wiki page.

## Common Installation and Start-up Issues
Below you can find some common issues that users encounter when installing or first starting SPT, along with the solution to fixing it. If your issue is not listed then join our [Discord Server](http://discord.sp-tarkov.com/) and ask in the [`#spt-support`](https://discord.com/channels/875684761291599922/1172730102119944222) channel.

<details>
<summary>Could not find a downgrade patcher for the version of EFT you have installed.</summary>

<img src="/installernewpatch.png" style="border: 2px solid grey;" alt="Patcher Error">

  There is a new EFT update and either the SPT Development Team needs to update the downpatcher or you have not updated your EFT via the BSG Launcher.

</details>

<details>
<summary>SPT Server crashing instantly or not opening up at all?</summary>
  
See the solution [here](https://wiki.sp-tarkov.com/Known_SPT_Issues_40#server-doesnt-launch-or-closes-immediately).

</details>


<details>
<summary>The application had a critical error and failed to run "Watermark" error.</summary>

<img src="/failedshortcuts.png" style="border: 2px solid grey;" alt="Watermark Error">

This happens because you have moved the `SPT.Server` and/or the `SPT.Launcher`, out of your `[game folder]\SPT` folder. 
You will need to move these back into your `[game folder]\SPT` folder and create desktop shortcuts of these. You can do this by right-clicking the executables and then Send To > Desktop (Shortcut). The shortcuts to the two are made by the installer automatically, which you can find in the root folder of your SPT install.
</details>

## Old mods and profiles
You cannot use any of your old mod files in a newer SPT version. If you want to use the same mods, you need to download updated versions of them once they have been updated to the latest SPT version.

Some old profiles can work. See the [version numbers](https://wiki.sp-tarkov.com/Updating_SPT#version-numbers) section for more details.

# See also
[System Requirements](/system-requirements)
[Updating SPT](/Updating_SPT)
[Installing Mods](/Installing_Mods)
[Frequently Asked Questions](/FAQs_40)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Installing_Mods.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Installing_Mods.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Installing_Mods.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Installing Mods
description: General guide on adding mods to your game.
published: true
date: 2026-06-15T23:40:33.304Z
tags: guide, mods
editor: markdown
dateCreated: 2025-06-12T18:59:03.228Z
---

> This page applies to SPT version `4.0`
{.is-info}


## Before installing your mods

- **Read the mod pages** of the mods you want to install. They include information on how to install, configure and **incompatibilities** with other mods.

- [The Forge](https://forge.sp-tarkov.com/mods) is the main source for finding and downloading mods for SPT. We only offer support for mods downloaded from it.

- Install [7-Zip](https://www.7-zip.org/) to open and extract mod archives. Other archiving programs, such as WinRAR or Windows itself, are known to corrupt files upon extracting without telling you.

- [Notepad++](https://notepad-plus-plus.org/) is another useful tool to have installed. It simplifies editing config files, and will let you know if there's any formatting issues with the edits you made.

- Make sure that **you have loaded your SPT install up to the main menu at least once** before installing mods.

- **Only install mods that are marked compatible with your version of SPT.** Mods for older SPT versions will not work, and will break things. If you are unsure what version of SPT you are on, you can see the SPT version in the top left of the server window or in the bottom left while in-game.

- **Close everything SPT related** when installing or removing mods. Your server needs to be closed when configuring [server mods](https://wiki.sp-tarkov.com/en/Mod_Types#server-mods).

- Install mods in **small batches** and verify they work before installing more. If you encounter an issue, you will know it's one of the few mods you just installed.

## Installing mods

1. Open the mod archive using 7zip.
2. If the mod archive has a `SPT`, `BepInEx` or *both* folders, drag and drop **all** the contents of the archive to the empty space in your game  folder as seen in the gif below.
3. If the mod archive **isn't** structured like that, let us know in our [Discord Server](http://discord.sp-tarkov.com/)'s [`#mod-questions-4-0`](https://discord.com/channels/875684761291599922/1315885344532467822) channel. Mods are *required* to be structured correctly as of SPT `4.0`.

&nbsp;
<img src="https://i.imgur.com/3N6gTe2.gif" alt="mod install" width=600 style="display: block; margin: 0 auto;">

## Profiles

Nearly all mods can be added to an existing profile. However, **removing some mods might be impossible without making a new profile**. Mods that add new traders, quests, or items fall under that category. Always **read the modpage**, as the author should specify if a mod is unsafe to remove from a profile.

If you removed a mod that broke your profile, SPT can try fixing it. **This is not guaranteed to work**. SPT will do the best it can to remove any item that's in your profile from the removed mod, but some mods make irreversible changes to your profile.

For instructions, see the [Mods](https://wiki.sp-tarkov.com/Profiles#mods) section on the [Profiles](/Profiles) page.


## Updating mods
Most mods can be updated by simply reinstalling their files, overriding any files when prompted.

However, some mods move, delete or rename files between versions. While the mod authors should make a note of it, sometimes it's missed.

If you are experiencing issues after updating a mod, or a mod has a large number of individual files, you should delete and reinstall it.

You can use a tool like [Check Mods](<https://forge.sp-tarkov.com/mod/2471/check-mods>) to see which of your mods require updating.

### Replacing files

When you drag and drop a folder into a directory, which has the same named folders/files, it will merge them and overwrite only duplicate files. **It will not delete any non-duplicates.**

&nbsp;
<video width="450" height="297" controls style="display: block; margin: 0 auto;">
	<source src="https://i.imgur.com/Wy5bijG.mp4" type="video/mp4">
</video>

# See also

[Uninstalling Mods](/Uninstalling_Mods)
[Mod Types](/Mod_Types)
[Profiles](/Profiles)




====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Known_EFT_Issues_40.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Known_EFT_Issues_40.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Known_EFT_Issues_40.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Known EFT Issues
description:  Known EFT issues and possible fixes for SPT 4.0.
published: true
date: 2026-02-16T02:06:10.516Z
tags: 
editor: markdown
dateCreated: 2025-10-10T12:31:17.069Z
---

> This page applies to SPT version `4.0`
{.is-info}

## [Github tracked issues](<https://github.com/sp-tarkov/build/wiki/Known-non-SPT-issues>)
- BSG have blacklisted a lot of high-level items from the flea. You can disable this blacklist by using a mod/editing configs/ragfair.json/dynamic/blacklist/enableBsgList/false
- Rogues are insanely difficult, their behavior is the same as live
- Tagging items in raid with special characters, e.g. , or " can corrupt the profile on exiting the raid
- Using horde mode on maps such as Customs will cause large numbers of sniper scavs to spawn together in clumps, avoid using horde mode on all maps except factory
- Receive All shows when nothing can be collected from mail
- The first time you turn the generator on inside the hideout causes a bug where the client asks for it to be switched off instead of on, clicking the power button on/off again fixes this
- Completing some quests does not immediately open up another quest. Some quests have multi-hour waits before appearing on a traders quest page
- Buying an equipment preset that contains a weapon does not purchase the weapon base, only the attachments.
  - Ensure you have Show only functional items un-ticked
- When in a trader buy screen, purchasing an item causes the players inventory filter icons to stop working
- The Streets and Ground zero navigation mesh has issues, this can cause bots to become stuck and causes the game logging hundreds of bot navigation errors, resulting in very low FPS until raid exit
- Cancelled offers on flea get stuck until game is restarted
- It's possible to pick up the hard drive quest item without triggering Access the office in the quest Saving the mole by entering the room through a route other than the door
- M4 bb magazines can be found as loot (this is by design)
- Money must be in pockets or tactical vest to be used for in-raid services
- New areas in woods/labs has reduced loot
- Many wooden medical crates appear as technical crates
- Clicking the 'eye' icon multiple times to view inventory while loading into a raid causes the secure container to disappear
- BSG run a lot of code on a bots death, this causes a lot of stuttering
- A Threshold durability should never be negative on an active repair buff error occurs in client log
- Searching a container in raid sometimes shows 3 duplicates
- ZSH helmet + plague mask appear together on bots, BSG have not flagged this combo as incompatable
- Locales are replaced with long strings of letters and numbers when creating a character



## Game crashing when the deploy timer hits 0?
Disable any applications that add overlays to EFT such as Blitz.

## Extreme stuttering in-raid, very high RAM usage
If you have `Texture Quality` set to `High` or `Ultra`, try `Medium` or `Low`.

## When inspecting trader items `Compatible with available` is blank
No known fix.

## Transits to Labs or Labyrinth consume two keycards
Only have one of the necessary items in your inventory when transiting to those locations.
Alternatively, install [Gilded Key Storage](<https://forge.sp-tarkov.com/mod/865/gilded-key-storage>).

## Bots phase through doors
BSG's attempt at fixing bots getting stuck on doors. [SAIN](<https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement>) fixes it, however it can make bots get stuck on doors instead.

## Can't click `Select Weapon` in the Build menu
No known fix. To apply builds to a weapon, right click it and press `Edit build`.

## PMC bots belonging to the same faction (BEAR, USEC) won't fight each other
Install [ABPS](<https://forge.sp-tarkov.com/mod/2097/abps-acids-bot-placement-system>).

## SPT Installer not recognising your Steam EFT install
1. Open your BSG Launcher by launching EFT through Steam. 
2. Click on `Game Settings` then click on `Set the path to existing game installation`.
3. In the window that pops up, select the `...\common\Escape From Tarkov\build` folder.

## Posting on flea randomly causes a stuck game with flashing items
Install [UI Fixes](<https://forge.sp-tarkov.com/mod/1342/ui-fixes>). Otherwise, restart the game when it occurs.

## NVGs don't work in the hideout
They will work in-raid.


# See also
[Frequently Asked Questions](/FAQs_40)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Known_Mod_Issues_40.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Known_Mod_Issues_40.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Known_Mod_Issues_40.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Known Mod Issues
description: Known EFT issues and possible fixes for SPT 4.0.
published: true
date: 2026-08-01T10:44:36.590Z
tags: 
editor: markdown
dateCreated: 2025-10-10T12:36:39.787Z
---

> This page applies to SPT version `4.0`
{.is-info}

## Infinite loading after installing mods
This happens most often due to installing mods not made for your version of SPT.
- Outdated [**server**](<https://wiki.sp-tarkov.com/en/Mod_Types#server-mods>) mods will either flag red errors in your SPT server terminal and prevent any mods from being loaded, or not load at all.
- Outdated [**client**](<https://wiki.sp-tarkov.com/en/Mod_Types#client-mods>) mods will **not** throw errors in the SPT server terminal window and **will** allow the game to launch, but then might encounter infinite loading or other issues.

When selecting the mods you want to install, make sure that you **only install mods that have been marked compatible with [your SPT version](<https://wiki.sp-tarkov.com/en/Updating_SPT#version-numbers>)**. Mods for incompatible SPT versions will not work, and will break things. If you are unsure what version of SPT you are on, you can see the SPT version in the top left of the server window or in the bottom left while in-game.

Read the [Uninstalling Mods](<https://wiki.sp-tarkov.com/Uninstalling_Mods>) Wiki page to see how to remove your outdated mods.

If you verified all your mods to be compatible with your version of SPT and you still have infinite loading, then join our [Discord server](http://discord.sp-tarkov.com/) and follow the [`#support-guidelines`](https://discord.com/channels/875684761291599922/1172733248317694022) on opening a new support thread.

## BTR Driver chat instantly closes
Update [Fika](https://forge.sp-tarkov.com/mod/2326/project-fika).

## Raid doesn't get saved after extracting/dying
If enabled, turn off `Practice Mode` in [SVM](<https://forge.sp-tarkov.com/mod/236/server-value-modifier-svm>)'s `Raid Settings > Raid startup settings`.
Don't use old presets in newer versions of SVM, and make sure you have the latest version of SVM.

## With [SAIN](<https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement>) bots don't move nor react unless shot at or grenaded 
If you're using the any custom preset from the Forge, try using one of the default presets instead.

## `Error handling request: /client/repeatalbeQuests/activityPeriods`, unable to launch profile
Update [Quest Tweaks](<https://forge.sp-tarkov.com/mod/1537/sgtlaggys-quest-tweaks>), and restore a backup of your profile per the [Backups](<https://wiki.sp-tarkov.com/Profiles#backups>) section.

## ``Error adding locale `ID` to en, duplicate key``
[Update your SPT.](/Updating_SPT)

## `An item with the same key has already been added` when using [Expanded Task Text](<https://forge.sp-tarkov.com/mod/2389/expanded-task-text>) and [Gilded Key Storage](<https://forge.sp-tarkov.com/mod/865/gilded-key-storage>)
Update [Gilded Key Storage](<https://forge.sp-tarkov.com/mod/865/gilded-key-storage>).

## [Task Automation](<https://forge.sp-tarkov.com/mod/2238/task-automation>) stops working
Update it and [Expanded Task Text](<https://forge.sp-tarkov.com/mod/2389/expanded-task-text>).

## `ReflectionTypeLoadException` error while [UnityToolkit](<https://forge.sp-tarkov.com/mod/1426/unitytoolkit>) is installed
Delete `[game folder]\BepInEx\patchers\FixPluginTypeSerialization` folder.

## No Hideout crafts when using [Skills Extended](<https://forge.sp-tarkov.com/mod/2383/skills-extended>) and [UI Fixes](<https://forge.sp-tarkov.com/mod/1342/ui-fixes>) when not using English locale
Update [Skills Extended](<https://forge.sp-tarkov.com/mod/2383/skills-extended>).

## `Critical exception, stopping server... at raidrecord_v0._5.`
Update [Raid Record](<https://forge.sp-tarkov.com/mod/2341/raidrecord>).

## After dying you're frozen, gun detaches from your hands
Update [MoreBotsAPI](<https://forge.sp-tarkov.com/mod/2426/morebotsapi>).

## Empty Ragman inventory with [Pack 'n' Strap](<https://forge.sp-tarkov.com/mod/1278/wtt-pack-n-strap>) and [Peltor TEP-300 backport](<https://forge.sp-tarkov.com/mod/2420/peltor-tep-300-earplugs-backport-and-fixes>) installed
Update [Pack 'n' Strap](<https://forge.sp-tarkov.com/mod/1278/wtt-pack-n-strap>) and [Peltor TEP-300 backport](<https://forge.sp-tarkov.com/mod/2420/peltor-tep-300-earplugs-backport-and-fixes>).

## `Item "PGU-13/B HEI High Explosive Incendiary" traderPrice is null`
Update [Item Info](<https://forge.sp-tarkov.com/mod/2430/odts-item-info-spt-40>).

## Freezing on raid start
Update [Pack n Strap](<https://forge.sp-tarkov.com/mod/1278/wtt-pack-n-strap>).

## `Shared bot type file ruafRifleman not found...` warning in server console
Harmless warning you can ignore.

## `No locale files found or loaded from... \Badger\Locales`
Harmless warning you can ignore.
## `No C# type for taxonomy node with id... Node name: CustomContainerTemplate`
Install [WTT - CommonLib](<https://forge.sp-tarkov.com/mod/2310/wtt-commonlib>) and [Use Items Anywhere](<https://forge.sp-tarkov.com/mod/2386/use-items-anywhere>).

## Error converting value `#xxxxxx` to type `JsonType.TaxonomyColor`
Install [Color Converter API](<https://forge.sp-tarkov.com/mod/1090/color-converter-api>).

## My flea prices are extreme when using [Live Flea Prices](<https://forge.sp-tarkov.com/mod/1131/live-flea-prices>)
Those are the prices of items on the Live flea right now. You can check the Live flea on websites like <https://tarkov.dev/>.
By default, SPT uses the base handbook price of items +/- some variance when simulating the flea.
To get "normal" flea prices:
- Wait for the Live flea prices to stabilise.
- Set `"pvePrices"` to `true` inside Live Flea Prices' config file to use the PvE Live flea prices instead.
- [Uninstall](<https://wiki.sp-tarkov.com/Uninstalling_Mods>) Live Flea Prices.

## Handbook gun descriptions are broken with `So descriptive`
[Uninstall](<https://wiki.sp-tarkov.com/en/Uninstalling_Mods>) [Preview Sizer](<https://forge.sp-tarkov.com/mod/2339/preview-sizer>).

## You are "invisible" to bots
If installed, tweak [Ombarella](<https://forge.sp-tarkov.com/mod/2315/ombarella>). If you can't tweak it to your liking, [uninstall it](<https://wiki.sp-tarkov.com/Uninstalling_Mods>).

## `The given key '67c5412bb032bbdb530201ba Name' was not present in the dictionary`
[Marlin MXLR](<https://forge.sp-tarkov.com/mod/2484/marlin-mxlr-308-me-lever-action-rifle>) is incompatible with many mods, including [Item Info](<https://forge.sp-tarkov.com/mod/2430/odts-item-info-spt-40>). You will need to either [uninstall it](<https://wiki.sp-tarkov.com/en/Uninstalling_Mods>) or any mod that conflicts with it.

## `Method not found:... ArmorDurability ...` error in server console
Update [APBS](<https://forge.sp-tarkov.com/mod/1594/apbs-acids-progressive-bot-system>).

## Bots aren't hostile while using [SAIN](<https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement>) after uninstalling a custom bot mod
Delete your `[game folder]\BepInEx\plugins\SAIN\Default Bot Config Values` folder. SAIN will regenerate it on game launch.

## Trying to reach Prestige 6 from [Content Backport - Prestiges](<https://forge.sp-tarkov.com/mod/2540/content-backport-prestiges>) shows a blank screen
Update [Content Backport - Prestiges](<https://forge.sp-tarkov.com/mod/2540/content-backport-prestiges>).

## `ObjectId must be a 24-character hex string. (Parameter '..._BOOBS...')` when using the Cultist Circle
Update [AES](<https://forge.sp-tarkov.com/mod/874/aes>).

## `Field not found:... EFT.Profile.Hideout` error message
Update [Boss Notifier](<https://forge.sp-tarkov.com/mod/2543/bossnotifier>).

## `The given key '[UNTAR/RUAF/blackdiv]' was not present in the dictionary` error after uninstalling a custom bot mod
You did not fully uninstall said mod. See the [Uninstalling Mods](<https://wiki.sp-tarkov.com/Uninstalling_Mods>) Wiki page how and where you should uninstall your mods.

## No snow even with the Christmas event enabled
Update [Project Fika](<https://forge.sp-tarkov.com/mod/2326/project-fika>).

## Stuck on loading hideout with [SALCO's Arsenal](<https://forge.sp-tarkov.com/mod/2585/salcos-arsenal-reboot#versions>) installed
Update [SALCO's Arsenal](<https://forge.sp-tarkov.com/mod/2585/salcos-arsenal-reboot#versions>).

## Ragman has no clothes for sale
Update [SVM](<https://forge.sp-tarkov.com/mod/236/server-value-modifier-svm>).

## Screen flickers black when using [DERP](<https://forge.sp-tarkov.com/mod/2200/dynamic-external-resolution-patch-derp>)
The black flicker only occurs when using DLSS or FSR. You can avoid it by using TAA and the Sampling Downgrade slider instead.
Note that setting the same Scaling Mode in DERP's F12 settings as in your Graphics settings will effectively disable its functionality.

## Infinite loading after installing [Tarkov DLSS 4.5](<https://forge.sp-tarkov.com/mod/2621/tarkov-dlss-45>)
Uninstall the mod, set DLSS to any preset after **Preset J**, and reinstall the mod.

## Guns gain extreme firerate with [Artem](<https://forge.sp-tarkov.com/mod/1023/wtt-artem>) and [Borkel's Realistic NVGs](<https://forge.sp-tarkov.com/mod/954/borkels-realistic-night-vision-goggles-nvgs-and-t-7>)
Known issue when using the Black GPNVGs from Artem. Borkel's includes an option black texture for the vanilla item inside `[game folder]\SPT\user\mods\BRNVG_N-15Adapter\optional black GPNVG-18`.
This issue also affects bots. You will need to use a mod like [APBS](<https://forge.sp-tarkov.com/mod/1594/apbs-acids-progressive-bot-system>) to blacklist that item from bot loadouts. The ID for the Black GPNVGs is `66326bfd46817c660d015146`.

## `Nullable object must have a value` server error with [MassivesoftWeapons](<https://forge.sp-tarkov.com/mod/2588/massivesoftweapons>) installed
Update [MassivesoftWeapons](<https://forge.sp-tarkov.com/mod/2588/massivesoftweapons>).

## `Object reference not set to an instance of an object` when loading into raid/hideout with [Amands's Graphics](<https://forge.sp-tarkov.com/mod/592/amandss-graphics>) and [Borkel's Realistic NVGs](<https://forge.sp-tarkov.com/mod/954/borkels-realistic-night-vision-goggles-nvgs-and-t-7>) installed
The two mods are incompatible. Uninstall one of them.

## Equipped mod clothing resets to default after game restart
Change `removeModItemsFromProfile` and `removeInvalidTradersFromProfile` back to `false` in `[game folder]\SPT\SPT_Data\configs\core.json`.

# See also
[Frequently Asked Questions](/FAQs_40)




====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Known_SPT_Issues_40.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Known_SPT_Issues_40.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Known_SPT_Issues_40.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13, SPT 4.1.x / 4.1.0
-->

---
title: Known SPT Issues
description: Known SPT issues and possible fixes for SPT 4.0.
published: true
date: 2026-08-01T22:31:51.707Z
tags: 
editor: markdown
dateCreated: 2025-10-10T12:33:53.585Z
---

> This page applies to SPT version `4.0`
{.is-info}

## [Github tracked issues](<https://github.com/sp-tarkov/build/wiki/Known-SPT-issues>)
- Some quests need PMCs to spawn in map locations with no bot spawns, making them impossible to complete (e.g. kill x PMCs in scav fortress/base).
- Selecting the overview tab as a scav can break your client, <kbd>Alt</kbd> + <kbd>F4</kbd> to revert the raid.
- Your active flea offers are marked as expired when the server is offline and items are returned in the mail.
- Flea categories don't always show the correct number of offers when filtering by item.
- The server will not load when placed in a folder path containing certain unicode characters (Japanese and Korean characters especially).
- Looting a PMC dogtag doesn't always show their name on the post-raid kill screen.
- Insured quest items that are consumed in a quest can be returned to the player.
- Failed quests that're restarted retain their task completion status until client is restarted (e.g. `Bullshit` - Shooting a scav after collecting the flash drive results in that task remaining completed).
- Using a low hp medpack while extracting can result in a 0 resource item being left in your inventory.
- Lightkeeper does not give rewards in-game, they are sent by mail.
- The bitcoin counter in hideout is slightly desynced to your game client, your game will say a bitcoin is ready to collect but the server is ~5 minutes behind.
- Replacing a daily/weekly quest with another from the same trader will cause a client soft lock, restarting the client fixes the issue.

## The server has unexpectedly stopped... : Decoded string is not a valid IDN name.
Remove any trailing symbols from your PC's name (e.g.: `My-PC-` > `My-PC`).
The 15th character of your PC name can't be a symbol either. 
Your PC name should also not use any special characters. Only `a-z`, `A-Z`, `0-9` and `-` are valid (e.g.: `My-PÇ` > `My-PC`). 
You can rename your PC by searching for `View your PC name` in the Start menu, and clicking on `Rename this PC`.

## Server mods don't appear in the SPT Launcher
[Update your SPT.](/Updating_SPT)
Note that [Client mods](/Mod_Types) won't show up in the SPT Server nor Launcher.

## There are little to no PMCs in your Scav runs
[Update your SPT](<https://wiki.sp-tarkov.com/Updating_SPT>), and make sure you don't have an extended raid timer, as EFT's spawning system tends to break with them.

## Empty flea with `404 not found` errors
[Update your SPT](<https://wiki.sp-tarkov.com/Updating_SPT>).

## Server doesn't launch or closes immediately
For SPT 4.0.13: From [here](https://dotnet.microsoft.com/en-us/download/dotnet/9.0)
For SPT 4.1.0: From [here](https://dotnet.microsoft.com/en-us/download/dotnet/10.0)

Download the latest version of **both**
- `ASP.NET Core Runtime`
- `.NET Desktop Runtime`

If it tells you that you already have them installed, then use the repair option. Restart your PC after.

<div style="margin-top: 20px;"></div>
<img src="/runtimes.png" alt=".NET runtimes" width=400 style="display: block; margin: 0 auto;">

If that didn't help, verify that your SPT install path doesn't have any special characters (`;,[]{}` etc.).

## Kollontay still spawns on high level Ground Zero
[Update your SPT.](<https://wiki.sp-tarkov.com/Updating_SPT>)

## Crisis does not unlock new crafts
[Update your SPT.](<https://wiki.sp-tarkov.com/Updating_SPT>)

## SPT Launcher doesn't do anything when you click Play
[Update your SPT.](<https://wiki.sp-tarkov.com/Updating_SPT>)

## `Not a valid Win32 FileTime` when using the Hijri calendar
[Update your SPT.](<https://wiki.sp-tarkov.com/Updating_SPT>)

## Festive Airdrops have no loot
No known fix.

## `Enable Bosses` being disabled stops spawning PMC bots
[Update your SPT.](<https://wiki.sp-tarkov.com/Updating_SPT>)

## Loading in as a PMC when you selected scav
[Update your SPT.](<https://wiki.sp-tarkov.com/Updating_SPT>)

## `Access to the path '\\?\C:\Users\[username]\OneDrive\Desktop\SPT\SPT\user\profiles\backups\[date] is denied.`
You have moved SPT onto your OneDrive enabled desktop. Move it back to a folder like `C:\Games\SPT`, and delete the profile backup mentioned in the error message.


# See also
[Frequently Asked Questions](/FAQs_40)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Manual-Install-Instructions.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Manual-Install-Instructions.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Manual-Install-Instructions.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.1.x / 4.1.0
-->

---
title: Manual Install Instructions
description: 
published: true
date: 2026-08-02T03:15:35.309Z
tags: 
editor: markdown
dateCreated: 2025-10-21T23:42:29.093Z
---

> This page applies to SPT version `4.1`
{.is-info}

It's always preferable to use the [SPT Installer](/Installation_Guide) instead of manually updating. If you run into issues with it join our [Discord Server](http://discord.sp-tarkov.com/) and ask for support in the [`#spt-support`](https://discord.com/channels/875684761291599922/1172730102119944222) channel.

## What you need to do before you manually install Single Player Tarkov

Verify that your Escape From Tarkov works, and that you can load up to at least the main menu or stash.
This is particularly important if you have just installed Escape From Tarkov so all necessary files can be generated.

## Manually installing and running SPT

1. Verify that your Escape From Tarkov is fully up-to-date through the BSG Launcher.
2. Create a new folder for SPT. A good location would be `C:\Games\SPT`.
3. Copy the contents of your live Escape From Tarkov game folder into your `SPT` folder.
	- **DO NOT** delete the original EFT installation to save space, it must remain in the original install location for SPT to function.
4. Download the corresponding patcher for your version of EFT from [here](https://mirror.spt.dev/patchers/) (requires [7-Zip](https://www.7-zip.org/)).
	- If EFT is newer than the above downgrade patch, **please wait**, a new downgrade patch will be created eventually.
5. Extract this archive to your `SPT` folder.
6. Run the `patcher.exe` and wait for it to finish.
7. Download the SPT release archive under the `Direct Download` section of the latest [release page](https://github.com/sp-tarkov/build/releases/latest).
8. Extract the contents of the SPT release archive into your `SPT` folder.
9. Open your `SPT_Runtime` folder.
10. Run `SPT.Server`.
 - Wait for the green text that says `Server has started, happy playing`.
11. Run `SPT.Launcher` and follow the onscreen instructions.
 - If you want to copy over your EFT in-game settings, click `OK`. **This has been temporarily removed due to it causing infinite loading.** 
 - You can use any username you want. It is recommend that you **do not** use your EFT account username. Especially if you plan on recording or streaming SPT.
 - `Login Automatically` will always log into the last profile you loaded. You can disable this by clicking `Logout` in the bottom right, then unchecking the option.
 - Select your desired game version. Each version has a description box summarising what is included. Once you have picked your chosen game version click `Register`. You can pick *any* game version you want from the profile list, you do not need to own the corresponding EFT version. Once chosen, you cannot change the edition a profile is using.
12. To make it easier to launch SPT in the future, you can right click `SPT.Server` and `SPT.Launcher`, select `Send to > Desktop (create shortcut)`. These are located in the `SPT_Runtime` folder and should not be moved out.
13. Click `Start Game` and load into the main menu.

Once you have completed the above, you can now play SPT and install mods found on [The Forge](https://forge.sp-tarkov.com/). You can find a guide on how to correctly install SPT mods on the [Installing Mods](https://wiki.sp-tarkov.com/Installing_Mods) Wiki page.

## Common Installation and Start-up Issues
Below you can find some common issues that users encounter when installing or first starting SPT, along with the solution to fixing it. If your issue is not listed then join our [Discord Server](http://discord.sp-tarkov.com/) and ask in the [`#spt-support`](https://discord.com/channels/875684761291599922/1172730102119944222) channel.

<details>
<summary>SPT Server crashing instantly or not opening up at all?</summary>
  
See the solution [here](https://wiki.sp-tarkov.com/Known_SPT_Issues_40#server-doesnt-launch-or-closes-immediately).

</details>

<details>
<summary>The application had a critical error and failed to run "Watermark" error.</summary>

<img src="/failedshortcuts.png" style="border: 2px solid grey;" alt="Watermark Error">

This happens because you have moved the `SPT.Server` and/or the `SPT.Launcher`, out of your `SPT_Runtime` folder. 
You will need to move these back into your `SPT_Runtime` folder and create desktop shortcuts of these. You can do this by right-clicking the executables and then `Send To > Desktop (create shortcut)`.
</details>

## Old mods and profiles
You cannot use any of your old mod files in a newer SPT version. If you want to use the same mods, you need to download updated versions of them once they have been updated to the latest SPT version.

Some old profiles can work. See the [version numbers](https://wiki.sp-tarkov.com/Updating_SPT#version-numbers) section for more details.

# See also
[System Requirements](/system-requirements)
[Updating SPT](/Updating_SPT)
[Installing Mods](/Installing_Mods)
[Frequently Asked Questions](/FAQs_40)




====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Mod_Types.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Mod_Types.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Mod_Types.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Mod Types
description: Learn the difference between server mods and client mods.
published: true
date: 2025-12-19T07:06:19.658Z
tags: guide, mods
editor: markdown
dateCreated: 2025-07-22T08:23:52.210Z
---

> This page applies to SPT version `4.0`
{.is-info}


SPT mods are divided into two categories: server mods, and client mods. Server mods, which are installed in the `[game folder]\SPT\user\mods` folder, and client mods, which are installed in the `BepInEx` folder.

## Server mods
Server mods interact with the SPT server, which handles everything a live EFT server would: your profiles, traders, quests, items, the flea etc, etc. While less "powerful" than client mods, they still let mod authors create custom traders, quests, weapons and items. They can also tweak things like insurance rates, skill gain or bot spawning.

Server mods are installed in the `[game folder]\SPT\user\mods` folder. They are configured either by `config` files, or by a mod-included configuration tool. **Your game and server must be closed** to configure server mods.

Most server mods can be added to an existing profile. However, **removing some mods might be impossible without making a new profile**. Mods that add new traders, quests, or items fall under that category. Always **read the modpage**, as the author should specify if a mod is unsafe to remove from a profile. See the section on [Mods](https://wiki.sp-tarkov.com/en/Profiles#mods) for a "last resort" to fix a profile with those mods removed.

Only server mods will show up in your Server console and Launcher.

Server mods made for SPT `4.0` are written in C#.

## Client mods

Client mods interact directly with the game. They are capable of changing anything in it given enough effort. The most comprehensive mods are usually client mods. They are capable of completely altering bot behaviour, adding new animations and mechanics or adding new elements to the HUD.

Client mods are installed in the `\BepInEx\plugins` folder. Few mods also include a `prepatcher` file that goes into the `\BepInEx\patchers` folder. The vast majority of client mods are configured from the <kbd>F12</kbd> menu in-game. Some have a dedicated button for opening their configuration menu. Few include config files inside `Bepinex\plugins` for manual editing. Changes made in the <kbd>F12</kbd> menu should apply immediately to your game unless the setting states otherwise.

Client mods will only show up in your <kbd>F12</kbd> menu if they have settings to configure. Some client mods don't, which means there's no good way to check if they are installed and running or not, except to see if they do what they are meant to.

Nearly all client mods can be added to an existing profile. Always **read the modpage**, as the author should specify if a mod is unsafe to remove from a profile.

All client mods are written in C#.

## Combination mods
Some mods include both a server and a client component. Some changes are easier to make in one or the other. While you can configure the client-side settings in the <kbd>F12</kbd> menu, they can have separate config files inside their folder in `user\mods`. 

## Making mods
The easiest mods to start with are server mods. With basic knowledge of C# you can open any of the provided [mod examples](https://github.com/sp-tarkov/server-mod-examples) and make your mod from them. See the [Modding Resources](/modding/Modding_Resources) page for more tools and information to get started.

The best place to get guidance is in our Discord's [`#mod-development`](https://discord.com/channels/875684761291599922/875803116409323562) channel. Note that it's a channel dedicated only to mod developers, not users. Make best effort to describe the issue you have in detail, provide a snippet of the code you're working on, and one of the many knowledgeable modders will be happy to help you.

# See also
[Installing Mods](/Installing_Mods)
[Uninstalling Mods](/Uninstalling_Mods)
[Modding Resources](/modding/Modding_Resources)
[Profiles](/Profiles)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/tutorials/Client_Modding_Quick_Guide.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/tutorials/Client_Modding_Quick_Guide.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/tutorials/Client_Modding_Quick_Guide.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Any SPT version
-->

---
title: Client Modding Quick Guide
description: A basic guide on getting started with Client mods.
published: true
date: 2025-12-16T16:27:35.797Z
tags: modding
editor: markdown
dateCreated: 2025-10-14T00:46:02.669Z
---

> This page applies to any SPT version
{.is-info}

In order to write client mods for SPT (or any other Unity game with BepInEx) you will need to know how to program in C#. See the resources section to get started if you are new to programming.

## Resources:
- [C# Learning resource](https://dotnet.microsoft.com/en-us/learn/csharp)
- [BepInEx docs](https://docs.bepinex.dev/)
- [Harmony 2 docs](https://harmony.pardeike.net/articles/intro.html)
- [Client mod examples repo](https://github.com/Jehree/SPTClientModExamples)

## Step 0: Installing needed programs

1. Install [Visual Studio](https://visualstudio.microsoft.com/)
	- Click `Download Visual Studio`.
	- Once the installer is downloaded, run it. Click `Available` at the top, then click `Install under Visual Studio Community 2022`.
	- Scroll down under the `Workloads` tab until you see `Game development with Unity`. Check the box next to that workload, and click `Install` in the bottom right.
2. Install .NET runtime (miniumum version: 6.0, latest should work fine) [downloads](https://dotnet.microsoft.com/en-us/download/dotnet).
3. Install [dnSpy](https://github.com/dnSpyEx/dnSpy/releases/latest).
	- Scroll to the bottom of that release to the `Assets` section, and select either `dn-spy-net-win32.zip` or `dn-spy-net-win64.zip` depending on your system.
	- Create a `C:\dnSpy` folder, then drag the contents of the zip you downloaded into that folder.
	- Optionally, right click `dnSpy.exe` and create a shortcut, then place it on your desktop.

## Step 1: SPT development install setup

1. Create a fresh SPT install to use for development.
2. Create a Development folder to hold your mod projects in the root directory of your new SPT install e.g.: `[spt install folder]/Development` .
	- Doing this is nice because when it is time to update your mod to a new SPT version, you can just paste the whole Development folder into that install and get to work without needing to update reference paths, etc. (thank Drakia for the idea!).
3. Download the `Mono` version of `BIE 5.X` of [Unity Explorer](https://github.com/sinai-dev/UnityExplorer/releases/latest). Install it like any other client mod.
4. Navigate to `[spt install folder]/BepInEx/config` and open `BepInEx.cfg`, set `LogChannels = all` and `Enabled = true` under the [Logging.Console] section. This will cause the BepInEx console to launch when you launch SPT. All logging done in your mod will appear in this console.
5. Make sure to run your dev install once, all the way to the main menu and then quit. This deobfuscates the assembly.

## Step 2: Export Assembly-CSharp.dll file to view Tarkov’s decompiled source

We do this so we can study the Tarkov source code to see what we may want to change, as well as where to change it. I suggest creating a Visual Studio project to contain the decompiled source. Fortunately, dnSpy has the ability to do this for us!


1. Create a folder to store your decompiled source. I suggest naming it after the SPT version the source is for, to differentiate it from future assemblies you decompile when SPT updates to a new EFT client version e.g.: `SPT400_assembly` .
2. Open dnSpy.
3. Go to `File > Open` and navigate to this path: `[game folder]/EscapeFromTarkov_Data/Managed`, select the `Assembly-CSharp.dll` file and click `Open`.
4. Once the `Assembly-CSharp.dll` file is open, you should see it in dnSpy. You can look through the code inside dnSpy if you prefer, but I suggest creating a Visual Studio project to hold it. You can do so by going to `File > Export to Project…` then selecting the folder we created in step 1.
5. Open the project! Run `Assembly-CSharp.sln` in the project folder dnSpy created to do so.

You can use <kbd>CTRL</kbd> + <kbd>Shift</kbd> + <kbd>F</kbd> to search the entire solution for code. Go ahead and try and search for something like “Jump” or “Door” to see what you can dig up!

## Step 3: Mod project setup

0. Set up and log in to a GitHub account (https://github.com/), then head to [the example repo](https://github.com/Jehree/SPTClientModExamples).
1. Click the green `Use this template > Create a new repository` button at the top right of the example repo's GitHub page.
2. Use something like GitBash to clone your new repo into a folder on your computer (https://git-scm.com/downloads) or download it manually with `Code > Download ZIP`.
   * Make sure you are cloning **YOUR** new repo, not the example repo itself.
3. Rename the following files from `SPTClientModExamples` to your new mod name:
    * Folder the project is in
    * **.csproj** file
    * **.sln** file
4. Open the **.sln** file with a text editor, <kbd>CTRL</kbd> + <kbd>F</kbd> for `SPTClientModExamples` and replace ll with your new mod name.
5. Open the **.csproj** file with a text editor, <kbd>CTRL</kbd> + <kbd>F</kbd> for `SPTClientModExamples` and replace all with your new mod name.
6. Open your solution by double clicking your **.sln** file, double click **Plugin.cs**.
7. Press <kbd>CTRL</kbd> + <kbd>Shift</kbd> + <kbd>F</kbd>, click Replace in Files:
    * make sure `Look in` is set to `Entire solution`
    * in `Find` field, enter: `SPTClientModExamples`
    * in `Replace` field, enter your new mod name
    * click `Replace All` in bottom right, click yes if prompted 

## Step 4: Start coding!

1. Play around with the examples from [the example repo](https://github.com/Jehree/SPTClientModExamples) to get your hands dirty!
2. Once you’re ready to test, go to `Build > Build Solution` or press <kbd>F6</kbd> to build your mod. If your project solution is correctly placed in `YourSPTInstall/Development`, the compiled plugin should be automatically copied into `BepInEx/plugins`, so all you should have to do is build and launch the game to test.
3. Have fun!



## Credit to the cool peeps:

To those who have helped me learn all this shiz and gave me feedback on this doc, you guys ROCK. Thank you so much!

DrakiaXYZ
Cj
Arys
Kiki
mpstark
Tyfon

# See also
[Modding Resources](/modding/Modding_Resources)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/tutorials/WTT_Vol1.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/tutorials/WTT_Vol1.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/tutorials/WTT_Vol1.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Any SPT version
-->

---
title: WTT - Item Creation Guides Vol. 1: Intro to Static Objects
description: 
published: true
date: 2025-11-01T19:47:34.344Z
tags: modding
editor: markdown
dateCreated: 2025-11-01T08:26:02.663Z
---

> This page applies to any SPT version
{.is-info}

<img src="https://i.ibb.co/nsqLjRn4/AA8i-VLt-JUP9fe-Cgw9f-Tz-We9mpzhf-Zhuk-T05z-Z-1h-Ua-XXVR79o-W1x-HEz-Ch-T9j6-CZ14c-Aiq-HSMx-RCcm-MK72.png" alt="baby" width=600 style="display: block; margin: 0 auto;">

## Prerequisites

- [Blender (v3.0+ recommended)](https://www.blender.org/)
- [Unity Hub](https://unity.com/unity-hub)
- [Escape from Tarkov SDK](https://github.com/S3RAPH-1M/EscapeFromTarkov-SDK)
- A 3D Model Sources:
	- [Sketchfab](https://sketchfab.com/) (filter by Low Poly + Free Download)
	- [TurboSquid](https://www.turbosquid.com/) (search for Game Ready models)
	- Create a model, or source it yourself!
- A Server Mod ready for you to add your item and test it in game.

**NOTE: This guide does NOT cover server modding - just item creation.**



## 1. What You’ll Learn

This guide teaches you how to add static objects (loot, quest items, etc) to Escape from Tarkov using Blender and Unity. By the end, you’ll be able to:

- Import and scale 3D models to match Tarkov’s scale.
- Configure Tarkov-specific scripts inside Unity to prepare your item.
- Build a custom asset bundle, ready for use in-game.

Difficulty: Beginner

Time Required: 30 mins - 1 hour


## 2. Source Your Model


What to Do:

1. Have your 3D model ready, create one, or download a low-poly model (`.fbx`, `.obj`, or `.blend`) from Sketchfab/TurboSquid.
	- Try to avoid models over 10k triangles (use Blender’s Statistics panel to check). Exceptions can be made, but try and remain as low-poly as possible.
2. Example Search Terms: “Keycard Low Poly”, “Military Crate Game Ready.”

For this tutorial, we will be using these [Russian GP5 Filters](https://sketchfab.com/3d-models/russian-gp5-filters-695d7745151b4796a46b4e070811a596).
<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/hFgB56qh/Screenshot-2025-02-24-064041.png" alt="gas filters" width=800 style="display: block; margin: 0 auto;">

> **Pro Tip**: Always check the model’s licenses.
{.is-info}


## 3. Import into Blender

What to Do:

1. Start with a clean scene: Select all default objects and delete them.
2. Import your custom model:
	- For `.blend` files: `File > Open`
	- For `.fbx/.obj/etc` files: `File > Import`
  
<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/NzZ11Km/Screen-Recording-2025-02-24-162322.gif" alt="import" width=800 style="display: block; margin: 0 left;">

3. Import the Tarkov PMC example model for scale reference:
	- You can find this model inside the `Escape From Tarkov SDK/Assets/Examples/Models/ExampleCharacter.fbm/ExampleCharacter.fbx` .
	- In Blender: `File` > `Import` > `FBX` → Select the `ExampleCharacter` file.
  
<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/Z6qksNf6/Screen-Recording-2025-02-24-163455.gif" alt="model import" width=800 style="display: block; margin: 0 left;">

4. Scale & Position:
	- Press <kbd>S</kbd> to scale. Use <kbd>S</kbd> + <kbd>X</kbd>/<kbd>Y</kbd>/<kbd>Z</kbd> to adjust individual axes.
	- Press <kbd>G</kbd> to grab your model. Use <kbd>G</kbd> + <kbd>X</kbd>/<kbd>Y</kbd>/<kbd>Z</kbd> to move individual axes.
	- Match your object to the PMC’s scale as closely as you can for your desired object.
  
<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/tTDP5hDp/Screen-Recording-2025-02-24-163541.gif" alt="scale" width=800 style="display: block; margin: 0 left;">

5. Apply Transforms:
	- Right-click model → `Set Origin` → `Origin to Geometry`. This will set the objects origin to the center of its geometry.
	- Press <kbd>Ctrl</kbd> + <kbd>A</kbd> → Apply `Rotation & Scale` to finalize object size.
  
<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/CKJjrNvF/Screen-Recording-2025-02-24-163615.gif" alt="transform" width=800 style="display: block; margin: 0 left;">

6. Center the Object & Save:
	- Press <kbd>Alt</kbd> + <kbd>G</kbd> to clear all transforms, setting your object back to Blender's World's Origin of `0, 0, 0`.
	- Delete the example character (Armature and Meshes) once you're done.
	- Save your file! You're done with the Blender portion!

<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/v4Yj5B0N/Screen-Recording-2025-02-24-164033.gif" alt="transform" width=800 style="display: block; margin: 0 left;">

> **Troubleshooting**: If scaling looks wrong in Unity, re-apply transforms in Blender.
{.is-info}


## 4. Import into Unity

What to Do:

1. Drag your `.blend` file into Unity’s **Assets** folder.

<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/gnWBhZh/Screen-Recording-2025-02-24-195229.gif" alt="assets" width=800 style="display: block; margin: 0 left;">

2. Extract material (and textures if there are any) from model:
	- Click the `.blend` file → `Inspector > Materials > Extract Embedded Materials`. You can choose a folder to extract them to, or just hit okay and they'll extract to the same location as the `.blend` file.
  
<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/7tMwn4Nw/Screen-Recording-2025-02-24-195310.gif" alt="extract" width=800 style="display: block; margin: 0 left;">

3. Assign Tarkov shaders:
	- Select material → `Shader > Bumped Specular Smap` (Tarkov's most used shader).
	- If you don't have textures assigned, now would be the time to drag them onto the material. Diffuse(Specular), Normal, and Gloss if you have one. Tarkov uses a specular shader, meaning the specularness is baked into the actual diffuse texture.
	- Every texture is going to differ, especially if you have an actual proper texture with a baked specular. However, for a baseline on items that *DON'T* have proper textures (Like our example GP5 Model) I usually start with:

|-|-|
| Main Color 				|	White |
| Specularness 			|	`0.35` |
| Glossness 				|	`1` |
| Reflection Color	|	Black (or almost) |
| Specular Vals 		|	`1 1 0 0` |
| Defuse Vals				|	`1 1 0 0` |

- From here, you need to adjust the values per-material in order to get it to look the way you want.
- Once you have your shader setup and textures applied, it should automatically apply to your imported model. If it doesn't, just drag the material onto your model during the next steps.

<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/yFMfBx81/Screen-Recording-2025-02-24-195347.gif" alt="shader" width=800 style="display: block; margin: 0 left;">

> **Important Note**: Install Blender on your system first. Unity requires it to process `.blend` files natively!
{.is-warning}


## 5. Setting Up the GameObject

What to Do:

1. Drag your `.blend` file into the scene heirarchy (top left window), right-click it and `Unpack Prefab Completely`.

<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/7tDY3Z8b/Screen-Recording-2025-02-25-072543.gif" alt="unpack" width=800 style="display: block; margin: 0 left;">

2. Setup your GameObject heirarchy exactly like this:
	- Create an empty gameobject: Right-click `Hierarchy` → `Create Empty` → Rename to your desired GameObject Name.
	- Position at `0, 0, 0`.
	- Drag your model into the empty GameObject.

<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/cSmw4x2L/Screen-Recording-2025-02-25-072733.gif" alt="gameobject" width=800 style="display: block; margin: 0 left;">

3. Setup your GameObject scripts exactly like this:
	- Select the `child mesh (your model) → Add Component → Mesh Collider → Check the Convex option to simplify the collider` .
	- Attach the `PreviewPivot` script to your Main Empty Gameobject.
	- Configure the preview pivot:
		- Open the SDK's `Preview Pivot Editor` (Window > Item Preview).
		- Drag the empty gameobject with the preview pivot component into the top entry of the Item Preview Window.
		- Drag the object around to move its rotation.
		- Once you're satisfied with the position, hit `Save current rotation to PreviewPivot` and `Render Icon`.

<div style="margin-top: 10px;"></div>
<img src="https://i.imgur.com/v4iVF5P.gif" alt="pivot" width=800 style="display: block; margin: 0 left;">


> **Pro Tips**:
	- Use a consistent naming scheme (e.g.: `Item_Quest_[Name]`) to avoid confusion.
	- If your preview window doesn't show the item, try adjusting the window size and checking to make sure your object's origin is centered.
	- You can adjust the size of the object and icon in the Item Preview Window
	- You may need to close and re-open the preview pivot window to see your changes applied.
{.is-info}

## 6. Build the Asset Bundle

What to Do:

1. Create a prefab:
	- Drag your GameObject into the `Assets` folder.
2. Assign labels:
	- Select `prefab` → `Inspector` → `Asset Label` → Add your prefab name and the bundle extension.
3. Build the bundle:
	- Open `Window → Asset Bundle Browser`.
	- Open the `Build` tab → Click `Build`.

<div style="margin-top: 10px;"></div>
<img src="https://i.imgur.com/AvkTqXk.gif" alt="build" width=800 style="display: block; margin: 0 left;">



> **Critical**:
Ensure you wait until Unity becomes FULLY RESPONSIVE after the build process, or your shaders might not appear in game.
If the AssetBundle Label entry doesn't let you type, either click off of it and then try again OR hold down your left mouse button on the entry as you type. I know, it's the worst...
{.is-danger}

## 7. Test in Tarkov

What to Do:

1. Debug issues:
	- **Purple Model?** Reassign textures shaders in Unity.
	- **Preview Pivot off-center?** Adjust your origins in blender, or manually move the coordinates in the preview pivot component.
	-	**Item Falls through the Ground?** You might have forgot to add a mesh collider to your model, or put it on the wrong GameObject.

<div style="margin-top: 10px;"></div>
<img src="https://i.ibb.co/mr6bQVWm/Screenshot-2025-02-25-091314.png" alt="build" width=800 style="display: block; margin: 0 left;">

# See also

[Tutorial: How to SDK Creating Custom Weapon](https://docs.google.com/document/d/1miWuhu9Jgr-P_HKsAaYMxiz3i4wbq7hn1FSDGEJzo1A/)
[WTT Discord server](https://discord.gg/Nz6VX78xRa)




====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Performance_Tuning.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Performance_Tuning.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Performance_Tuning.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Any SPT version
-->

---
title: Performance Tuning
description: Tips for improving FPS and stability.
published: true
date: 2026-07-26T18:35:19.897Z
tags: performance, guide
editor: markdown
dateCreated: 2025-07-22T03:38:27.428Z
---

> This page applies to any SPT version
{.is-info}

SPT's performance will generally be worse than a live PVP or online PVE raid, where bot AI logic (scavs, PMCs, bosses) is running on BSG servers. SPT and local PVE runs all of the bot AI logic locally on your PC, which has a significant impact on your performance due to severe CPU bottlenecking.

This manifests as low usage of both your GPU and CPU. Your GPU cannot run at full power because it's busy waiting on instructions from your CPU, and your CPU cannot run at full power because it has to slowly process all the bots. To see this in action, disable bots in either Pre-Raid Settings, or the bot spawning mod you installed.

CPUs with powerful single-threaded performance will improve your in-game FPS the most. AMD's X3D CPUs are optimal for this reason.

## Optimisations
- Use [Waypoints](https://forge.sp-tarkov.com/mod/827/waypoints-expanded-navmesh) to optimise AI pathfinding.
- Use [VRAM Cleaner](https://forge.sp-tarkov.com/mod/2173/vram-cleaner) to free up VRAM usage of your GPU.
- If using [Dynamic Maps](https://forge.sp-tarkov.com/mod/1431/dynamic-maps) disable the minimap.
- Set vaulting from `Auto` to `Press` in the in-game settings.
- Disable `Nvidia Reflex` and `V-Sync` in the graphics settings.
- Set your texture quality to `Low` or `Medium`.
- Use `Low texture mode for Streets` to further minimise GPU memory usage.
- If you're using Vulkan on Linux or DXVK on Windows, do not use the `Unheard` menu background.
- Remove mods that add new functions to AI.
  - As bots are the main cause of performance issues, mods that add new functions to them will impact performance.
- Use [AI Limit](https://forge.sp-tarkov.com/mod/1945/ai-limit).
  - AI Limit works by disabling distant AIs. This will have an impact on gameplay, but will improve performance.
  - Some mods are incompatible with AI Limit.
  - [Questing Bots](https://forge.sp-tarkov.com/mod/1109/questing-bots) already includes an AI limiter. Use it instead if you have it installed.
- Tweak your bot spawning mod to spawn less bots.
  - Less bots mean less demand on your system, but it will make raid feel "less alive" if lowered too much.

## Boot.config
Your `boot.config` file is located in `[game folder]\EscapeFromTarkov_Data`. 
Editing it brings **no performance improvements**.
By default, it contains this:

```
gfx-enable-gfx-jobs=1
gfx-enable-native-gfx-jobs=1
wait-for-native-debugger=0
hdr-display-enabled=0
gc-max-time-slice=3
single-instance=
build-guid=[some ID]
```

That's what it should look like to avoid any issues.

## Pagefile

The pagefile in Windows is used as "storage" for your RAM. If your RAM is filling up, Windows will start moving files to and from it. Even an SSD will be much slower than RAM, hence why it's used sparingly. Windows should automatically increase it as required.

Your pagefile should be set to `Automatically manage paging file size for all drives`. To check if it is:

1. Press <kbd>Win</kbd> and search for "View advanced system settings" and open the link. 
2. Under `Performance`, go into `Settings`, then the `Advanced` tab.
3. Under `Virtual memory` press `Change`.
4. Ensure you have `Automatically manage paging file size for all drives` enabled.

If you experience crashes related to memory, make sure your drives have more than 30GB of free space available.

`RAM Cleaner Fix` at best won't help you with any issues you might have, and at worst will cause your pagefile to be overused, which will instead cause issues. You shouldn't use it.

However, if you still have crashes due to running out of memory even when the pagefile is automatically managed, then there's an underlying issue with your Windows install. You should try to fix it by verifying your Windows files. However, you can manually set your pagefile as a temporary fix:

> Manually setting your pagefile can lead to system crashes if it gets overfilled.
{.is-warning}

1. Follow the above steps to get to the pagefile settings.
2. Disable `Automatically manage paging file size for all drives`.
3. Select your fastest drive and select `Custom size`.
4. Set the `Initial size` and `Maximum size` according to the amount of RAM you have:

| Amount of RAM | Initial size | Maximum size |
| - | - | - |
| 16 GB | 16000 | 40000 |
| 32 GB | 32000 | 80000 |

> If you encounter system crashes or BSODs after setting your pagefile manually, you should revert those changes by enabling automatic management as described in the beginning of this section.
{.is-info}


## Further tweaks
- You will see minor improvements by changing your graphic settings. Follow any graphics guide for EFT.
- In the case you're severely GPU limited, [CWX's MegaMod](https://forge.sp-tarkov.com/mod/1454/cwx-megamod)'s `GrassCutter` and `EnvironmentEnjoyer` features might help your performance.
- Enabling Nvidia's `Smooth motion` (for 40 and 50 series GPUs), or AMD's `Fluid Motion Frames` for EFT will let your GPU interpolate extra frames, using the unused part of your GPU.
  - If neither are available to you, use [Lossless Scaling](https://store.steampowered.com/app/993090/Lossless_Scaling)'s Frame Generation.
  - Any form of frame generation will result in some increase in latency.
- For further tweaks and discussion, visit the [Optimization Megathread](https://discord.com/channels/875684761291599922/1163777314862149683) in our [Discord server](http://discord.sp-tarkov.com/).

## Headless client

> This is an advanced setup requiring technical knowledge and an understanding of how SPT works.
{.is-warning}

> While Project Fika is a mod available on the Forge, we do not offer support with it installed. If you wish to receive support while you are using Fika, you must seek support from Fika's [Discord server](https://discord.gg/project-fika). 
{.is-warning}

As stated in the introduction, the main performance impact on your game is bots. EFT does not efficiently utilise your system resources, using the same CPU thread to process bots and render your game. When you play an online raid in EFT, all bot processing happens on BSG's servers, letting your CPU "concentrate" on rendering the game. If your game is not processing the bots, SPT's performance becomes much closer to Live EFT. You should then become GPU bottlenecked, so your graphics will become the primary source of your performance.

[Fika](https://forge.sp-tarkov.com/mod/2326/project-fika) allows you to host a raid on a different computer as the one you're playing on. This lets you recreate the conditions of a live EFT raid while still using SPT. To set up a headless client, [follow this guide](https://project-fika.gitbook.io/wiki/advanced-features/headless-client).


It's also possible to use it to the raid on the same computer as the one you're playing on, letting one part of your CPU render the game, while another processes the bots. You could further use a program like Process Lasso to manually delegate your CPU cores if you are an advanced user, but it's not necessary. Please note that **support from Project Fika is limited if you choose to run the headless client on the same PC where you are playing SPT**. This is not the officially supported configuration and may lead to:
- Performance degradation.
- Increased incidence of crashes.
- Significant increase in page file usage.
- General instability that may adversely affect the entire PC or operating system.

# See also
[System Requirements](/system-requirements)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Recommended_Mods_40.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Recommended_Mods_40.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Recommended_Mods_40.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Recommended Mods
description: A selection of recommended mods to improve your SPT experience.
published: true
date: 2026-07-27T13:14:03.069Z
tags: mods
editor: markdown
dateCreated: 2025-10-10T12:57:31.380Z
---

> This page applies to SPT version `4.0`
{.is-info}

This page contains a curated selection of mods. They all vaguely fall under the category of "vanilla+", hence why it does not contain any content mods or overhauls.
**These mods aren't meant to be installed all at once.** They aren't vetted for cross-compatibility, nor are their dependencies or incompatibilities included, as they are present on their mod pages. This isn't a "modlist", but rather a list of recommendations to consider adding to your SPT.


- Read the [Mod installation](/Installing_Mods) page to see how to install mods.

- **Always read the mod pages of the mods you're installing.**

- **Only install versions of mods made for your version of SPT.**

To discuss these recommendations or suggest new ones, head over to our [Discord server](http://discord.sp-tarkov.com/)'s [`#website-wiki`](https://discord.com/channels/875684761291599922/1426941224324960266) channel.

## Mods for better AI
[SAIN](https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement), [Questing Bots](https://forge.sp-tarkov.com/mod/1109/questing-bots), [Looting Bots](https://forge.sp-tarkov.com/mod/812/looting-bots), [Nerf Bot Grenades](https://forge.sp-tarkov.com/mod/1925/nerfbotgrenades)

## Mods for better performance

[AI Limit](https://forge.sp-tarkov.com/mod/1945/ai-limit), [DERP](https://forge.sp-tarkov.com/mod/2200/dynamic-external-resolution-patch-derp), [Picture in Picture Disabler](https://forge.sp-tarkov.com/mod/2667/picture-in-picture-disabler)

See [Performance Tuning](/Performance_Tuning) for further information.

## Mods for better bot spawns

[Acid's Bot Placement System](https://forge.sp-tarkov.com/mod/2097/abps-acids-bot-placement-system)

You should only have **one** bot spawning mod installed to avoid issues.

## Mods for better bot progression

[Acid's Progressive Bot System](https://forge.sp-tarkov.com/mod/1594/apbs-acids-progressive-bot-system)

You should only have **one** bot progression mod installed to avoid issues.

## Mods for better visuals and HUD

- Visuals
[Borkel's Realistic NVGs](https://forge.sp-tarkov.com/mod/954/borkels-realistic-night-vision-goggles-nvgs-and-t-7), [HollywoodFX](https://forge.sp-tarkov.com/mod/2003/hollywoodfx)

- HUD
[Amands' Sense](https://forge.sp-tarkov.com/mod/2521/amands-sense-updated), [Game Panel HUD](https://forge.sp-tarkov.com/mod/456/game-panel-hud)

## Mods for better quality of life

- Fixes
[EOTech Fix](https://forge.sp-tarkov.com/mod/2502/eotech-fix), [FOV Fix](https://forge.sp-tarkov.com/mod/701/fontaines-fov-fix), [Hands Are Not Busy](https://forge.sp-tarkov.com/mod/1298/handsarenotbusy), [Item Attribute Fix](https://forge.sp-tarkov.com/mod/910/item-attribute-fix), [Let Me Out](https://forge.sp-tarkov.com/mod/2240/let-me-out), [Search Open Containers](https://forge.sp-tarkov.com/mod/934/search-open-containers), [Shadow Flicker Fix](https://forge.sp-tarkov.com/mod/1621/shadow-flicker-fix), [Stop Hotkey Auto-Vault](https://forge.sp-tarkov.com/mod/1652/stop-hotkey-auto-vault), [Task List Fixes](https://forge.sp-tarkov.com/mod/824/task-list-fixes), [Un-flashbang Hideout](https://forge.sp-tarkov.com/mod/1425/un-flashbang-hideout)

- UI
[AutoDeposit](https://forge.sp-tarkov.com/mod/1469/autodeposit), [Dynamic Maps](https://forge.sp-tarkov.com/mod/1431/dynamic-maps), [Expanded Task Text](https://forge.sp-tarkov.com/mod/2389/expanded-task-text), [Item Context Menu Extended](https://forge.sp-tarkov.com/mod/940/item-context-menu-extended), [Quest Tracker](https://forge.sp-tarkov.com/mod/1140/quest-tracker), [Trader Scrolling](https://forge.sp-tarkov.com/mod/1089/kaeno-traderscrolling), [UI Fixes](https://forge.sp-tarkov.com/mod/1342/ui-fixes)

- Inventory and Stash
[Foldables](https://forge.sp-tarkov.com/mod/2422/foldables), [Quick Move to Containers](https://forge.sp-tarkov.com/mod/1341/quick-move-to-containers), [Quick Sell](https://forge.sp-tarkov.com/addon/1/quick-sell), [Show Me The Money](https://forge.sp-tarkov.com/mod/2299/show-me-the-money-item-pricing), [Trader Modding And Improved Weapon Building](https://forge.sp-tarkov.com/mod/1283/trader-modding-and-improved-weapon-building)

- Looting and Items
[All Quest Checkmarks](https://forge.sp-tarkov.com/mod/2025/all-quests-checkmarks), [Better Keys](https://forge.sp-tarkov.com/mod/1888/better-keys-ng), [Gilded Key Storage](https://forge.sp-tarkov.com/mod/865/gilded-key-storage), [Item Info](https://forge.sp-tarkov.com/mod/2430/odts-item-info-spt-40), [Let Me Right Click](https://forge.sp-tarkov.com/mod/2405/letmerightclick), [Merge Consumables](https://forge.sp-tarkov.com/mod/1657/mergeconsumables), [MoreCheckmarks](https://forge.sp-tarkov.com/mod/861/morecheckmarks), [Reach Extender](https://forge.sp-tarkov.com/mod/1260/reach-extender), [Use Loose Loot](https://forge.sp-tarkov.com/mod/933/use-loose-loot)

## Mods for better player experience

- Ease of play
[Audio Accessibility Indicators](https://forge.sp-tarkov.com/mod/1760/audio-accessibility-indicators), [Bright Lasers](https://forge.sp-tarkov.com/mod/1358/brightlasers), [Configurable End Raid Status](https://forge.sp-tarkov.com/mod/1978/configurable-end-raid-status), [Deminvincibility](https://forge.sp-tarkov.com/mod/1117/deminvincibility), [Enemy Markers](<https://forge.sp-tarkov.com/mod/1858/enemy-markers>), [Instant Insurance](https://forge.sp-tarkov.com/mod/2394/instant-insurance), [Janky's Visual Assist](https://forge.sp-tarkov.com/mod/2213/jankys-visual-assist), [Keep Starting Gear](https://forge.sp-tarkov.com/mod/2470/keep-starting-gear), [Pause](https://forge.sp-tarkov.com/mod/2046/pause), [Plant Time Modifier](https://forge.sp-tarkov.com/mod/1965/plant-time-modifier-updated-by-crocodilejonesy), [Simple Crosshair](https://forge.sp-tarkov.com/mod/1387/simple-crosshair), [Simple Workout QTE](https://forge.sp-tarkov.com/mod/1437/simple-workout-qte), [Use Items Anywhere](https://forge.sp-tarkov.com/mod/2386/use-items-anywhere)

- Gameplay
[AutoRun](https://forge.sp-tarkov.com/mod/1477/autorun), [Better Rear Sights](https://forge.sp-tarkov.com/mod/1591/better-rear-sights), [Bosses Have GP Coins](https://forge.sp-tarkov.com/mod/2523/bosses-have-gp-coins), [Bosses Have Lega Medals](https://forge.sp-tarkov.com/mod/1539/bosses-have-lega-medals), [Bush Whacker](https://forge.sp-tarkov.com/mod/2329/bushwhacker-standalone), [Continuous Healing](https://forge.sp-tarkov.com/mod/1884/continuous-healing), [Healing Autocancel](https://forge.sp-tarkov.com/mod/1274/healing-autocancel), [Increase Climb Height](https://forge.sp-tarkov.com/mod/1575/increase-climb-height), [Keycard Door Simplify Breach](https://forge.sp-tarkov.com/mod/2494/keycard-door-simplify-breach), [Ref - SPT Friendly Quests](https://forge.sp-tarkov.com/mod/1538/ref-spt-friendly-quests), [Set Speed](https://forge.sp-tarkov.com/mod/994/set-speed-set-player-speed-with-hotkeys)

- Tweaking
[CWX's MegaMod](https://forge.sp-tarkov.com/mod/1454/cwx-megamod), [Lacy's PvE Tweaks](https://forge.sp-tarkov.com/mod/2395/lacys-pve-tweaks), [QCAdjustments](https://forge.sp-tarkov.com/mod/1867/qcadjustments), [Quest Tweaks](https://forge.sp-tarkov.com/mod/1537/sgtlaggys-quest-tweaks), [Server Tweaks](https://forge.sp-tarkov.com/mod/2360/server-tweaks-discount-svm), [SVM](https://forge.sp-tarkov.com/mod/236/server-value-modifier-svm)


# See also
[Performance Tuning](/Performance_Tuning)
[Mod Types](/Mod_Types)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/SPT_311/Recommended_Mods_311.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/SPT_311/Recommended_Mods_311.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/SPT_311/Recommended_Mods_311.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Recommended Mods for SPT 3.11
description: A selection of recommended mods to improve your SPT experience.
published: true
date: 2025-10-14T01:36:02.455Z
tags: mods
editor: markdown
dateCreated: 2025-07-23T12:05:23.561Z
---

> This page applies to SPT version `3.11`
{.is-info}

- Always read the mod pages of the mods you're installing.

- Only install versions of mods made for your version of SPT. You can access old versions of a mod by going to the `Versions` tab on the mod page.


## Mods for better AI

[Looting Bots](https://forge.sp-tarkov.com/mod/812/looting-bots), [Questing Bots](https://forge.sp-tarkov.com/mod/1109/questing-bots), [SAIN](https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement), [Ombarella](https://forge.sp-tarkov.com/mod/2315/ombarella), [Nerf Bot Grenades](https://forge.sp-tarkov.com/mod/1925/nerfbotgrenades), [No Boss PMCs](https://forge.sp-tarkov.com/mod/2095/no-boss-pmcs)^*^, [Separate Hostility](https://forge.sp-tarkov.com/mod/2248/separate-hostility)^*^

^*^Mod incompatible with SAIN

## Mods for better performance
[Waypoints](https://forge.sp-tarkov.com/mod/827/waypoints-expanded-navmesh), [RAM Cleaner Fix](https://forge.sp-tarkov.com/mod/1311/ram-cleaner-fix)^*^, [VRAM Cleaner](https://forge.sp-tarkov.com/mod/2173/vram-cleaner), [AI Limit](https://forge.sp-tarkov.com/mod/1945/ai-limit), [Body Disposal Service Maid](https://forge.sp-tarkov.com/mod/1159/bdsm-body-disposal-service-maid)

^*^Most useful if you have less than 32gb of RAM

See [Performance Tuning](/Performance_Tuning) for further information.

## Mods for better bot spawns

You should only have **one** bot spawning mod installed to avoid issues.

[Acid's Bot Placement System](https://forge.sp-tarkov.com/mod/2097/abps-acids-bot-placement-system), [MOAR](https://forge.sp-tarkov.com/mod/789/moar-bagels-ultra-lite-spawn-mod), [Unda](https://forge.sp-tarkov.com/mod/1173/unda)

## Mods for better bot progression

You should only have **one** bot progression mod installed to avoid issues.

[Valen's Progression](https://forge.sp-tarkov.com/mod/562/valens-progression), [Acid's Progressive Bot System](https://forge.sp-tarkov.com/mod/1594/apbs-acids-progressive-bot-system), [Algorithmic Level Progression](https://forge.sp-tarkov.com/mod/1015/alp-algorithmic-level-progression)

## Mods for better visuals and HUD

- Visuals
[Amands's Graphics](https://forge.sp-tarkov.com/mod/592/amandss-graphics), [HollywoodFX](https://forge.sp-tarkov.com/mod/2003/hollywoodfx)

- HUD 
[Dynamic Maps](https://forge.sp-tarkov.com/mod/1431/dynamic-maps), [Game Panel HUD](https://forge.sp-tarkov.com/mod/456/game-panel-hud), [Quest Tracker](https://forge.sp-tarkov.com/mod/1140/quest-tracker)

## Mods for better quality of life

- Fixes
[UI Fixes](https://forge.sp-tarkov.com/mod/1342/ui-fixes), [HandsAreNotBusy](https://forge.sp-tarkov.com/mod/1298/handsarenotbusy), [Shadow Flicker Fix](https://forge.sp-tarkov.com/mod/1621/shadow-flicker-fix), [FOV Fix](https://forge.sp-tarkov.com/mod/701/fontaines-fov-fix), [Let Me Out](https://forge.sp-tarkov.com/mod/2240/let-me-out)

- UI
[Item Context Menu Extended](https://forge.sp-tarkov.com/mod/940/item-context-menu-extended),[More Checkmarks](https://forge.sp-tarkov.com/mod/861/morecheckmarks), [Expanded Task Text](https://forge.sp-tarkov.com/mod/2153/expanded-task-text-ett), [Item Info](https://forge.sp-tarkov.com/mod/2142/odts-item-info-311-update-added-colored-name), [Interacable Exfils API](https://forge.sp-tarkov.com/mod/1676/interactable-exfils-api)

- Inventory and Stash
[Stash Search](https://forge.sp-tarkov.com/mod/2148/stash-search), [Quick Sell](https://forge.sp-tarkov.com/mod/1698/quicksell), [AutoDeposit](https://forge.sp-tarkov.com/mod/1469/autodeposit), [Quick Move to Containers](https://forge.sp-tarkov.com/mod/1341/quick-move-to-containers), [Gilded Key Storage](https://forge.sp-tarkov.com/mod/865/gilded-key-storage)

- Looting
[Loot Radius](https://forge.sp-tarkov.com/mod/1349/loot-radius), [Search Open Containers](https://forge.sp-tarkov.com/mod/934/search-open-containers), [Use Loose Loot](https://forge.sp-tarkov.com/mod/933/use-loose-loot)

## Mods for better player experience

- Ease of play
[Custom Raid Times](https://forge.sp-tarkov.com/mod/551/custom-raid-times), [Enemy Markers](https://forge.sp-tarkov.com/mod/1858/enemy-markers), [Dad Gamer Mode](https://forge.sp-tarkov.com/mod/1875/props-dad-gamer-mod-for-39), [Loot Highlighter](https://forge.sp-tarkov.com/mod/2136/loot-highlighter), [No Save on Death](https://forge.sp-tarkov.com/mod/2150/no-save-on-death-respawned), [Keep Starting Gear](https://forge.sp-tarkov.com/mod/2250/blackhorse311-keep-starting-gear-spt-311x)

- Gameplay
[Bright Lasers](https://forge.sp-tarkov.com/mod/1358/brightlasers), [Use Items Anywhere](https://forge.sp-tarkov.com/mod/2177/use-items-anywhere), [Old Tarkov Movement](https://forge.sp-tarkov.com/mod/1860/old-tarkov-movement-no-inertia), [Simple Workout QTE](https://forge.sp-tarkov.com/mod/1437/simple-workout-qte), [Headbob Reducer](https://forge.sp-tarkov.com/mod/707/fontaines-headbob-reducer)

- Tweaking
[Skill Multiplier](https://forge.sp-tarkov.com/mod/2162/skill-multiplier), [Medical Attention](https://forge.sp-tarkov.com/mod/147/medical-attention), [Server Value Modifier](https://forge.sp-tarkov.com/mod/236/server-value-modifier-svm)

# See also
[Performance Tuning](/Performance_Tuning)
[Mod Types](/Mod_Types)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Uninstalling_Mods.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Uninstalling_Mods.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Uninstalling_Mods.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Uninstalling Mods
description: A guide on uninstalling SPT mods.
published: true
date: 2025-11-01T16:17:47.480Z
tags: guide, mods
editor: markdown
dateCreated: 2025-09-25T10:46:32.773Z
---

> This page applies to SPT version `4.0`
{.is-info}

## Uninstalling mods

1. Close your game, launcher and server.
2. **Read the mod page of the mod you're uninstalling**. Some, like Realism, Raid Overhaul or SVM, have extra steps you'll need to do beforehand.
3. Generally, to uninstall a mod, move or delete its files from `[game folder]\SPT\user\mods`, `\BepInEx\plugins` and/or `\BepInEx\patchers`.
  - The easiest way to see what files a mod has is to look inside its archive you downloaded.
  - **Do not remove** your `\BepInEx\plugins\spt` folder and `\BepInEx\patchers\spt-prepatch.dll` file.


## Profiles

Nearly all mods can be added to an existing profile. However, **removing some mods might be impossible without making a new profile**. Mods that add new traders, quests, or items fall under that category. Always **read the modpage**, as the author should specify if a mod is unsafe to remove from a profile.

If you removed a mod that broke your profile, SPT can try fixing it. **This is not guaranteed to work**. SPT will do the best it can to remove any item that's in your profile from the removed mod, but some mods make irreversible changes to your profile.

For instructions, see the [Mods](https://wiki.sp-tarkov.com/Profiles#mods) section on the [Profiles](/Profiles) page.

# See also
[50/50 Method](/5050-method)
[Installing Mods](/Installing_Mods)
[Mod Types](/Mod_Types)
[Profile](/Profiles)

====================================================================================================
DOCUMENT: See also
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Updating_SPT.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Updating_SPT.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: See also
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Updating_SPT.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Any SPT version
-->

---
title: Updating SPT
description: Learn how to update your SPT installation.
published: true
date: 2026-06-12T17:12:28.269Z
tags: guide
editor: markdown
dateCreated: 2025-08-09T12:01:16.553Z
---

> This page applies to any SPT version
{.is-info}

> This method can only be used to update to a new hotfix patch. An update from ex. `3.11.4 > 4.0.0` requires a new install of SPT.
{.is-warning}


1. Download the SPT files from the Direct Download section at the **bottom** of the [Release page](https://github.com/sp-tarkov/build/releases/latest).
<div style="margin-top: 20px;"></div>
<img src="/direct_download.png" alt="Direct Download" width=400 style="display: block; margin: 0 auto;">

2. Close your game, launcher, and server.
3. Open the downloaded SPT files using [7zip](https://www.7-zip.org/).
4. Copy contents of the 7z file into your **existing** folder, **overwrite all files**.
5. **Update all of your mods to their latest release versions**.
 - Mods made for previous hotfix versions should work on the latest version. Those that don't might have received an update to address that.
  - You can use a tool like [Check Mods](<https://forge.sp-tarkov.com/mod/2471/check-mods>) to see which of your mods require updating.
> This will only overwrite base SPT files. It will __not__ overwrite or remove your profile(s), mods or mod configs.
{.is-info}

### Replacing files

When you drag and drop a folder into a directory, which has the same named folders/files, it will merge them and overwrite only duplicate files. **It will not delete any non-duplicates.**

&nbsp;
<video width="450" height="297" controls style="display: block; margin: 0 auto;">
	<source src="https://i.imgur.com/Wy5bijG.mp4" type="video/mp4">
</video>

## Version numbers
SPT follows the [Semantic Versioning](https://semver.org/) schema for its version numbers, which works as follows:

`SPT Version X.Y.Z`

`X` = Major update
- A large refactor of SPT or EFT
- Requires reinstalling SPT anew
- Old mods **won't work**
- Unmodded old profiles *might* work

`Y` = Minor update
- A new version of EFT is being used
- Requires reinstalling SPT anew
- Old mods **won't work**
- Unmodded old profiles *might* work

`Z` = Patch/Hotfix
- Bug fixes for the previous Minor version
- Generally doesn't require a reinstall
- Generally works with mods made for the previous hotfix version
- Old profiles **will work**
- **Can be used to update your SPT if it's on the same Minor version**

You can always check if a hotfix patch will be compatible with your installed mods on the [Release page](<https://github.com/sp-tarkov/build/releases>):
&nbsp;
<img src="/patch_compat.png" alt="Direct Download" width=400 style="display: block; margin: 0 auto;">
<div style="margin-top: 10px;"></div>
<div style='text-align: center;'>
Example of the compatibility section for SPT 3.11.3.
</div>


# See also
[New to SPT? Start here!](/Beginners_Guide)
[Installing SPT](/Installation_Guide)

====================================================================================================
DOCUMENT: Server Mod Migration - 4.0 to 4.1
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/SPT_41/Server_40_to_41.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/SPT_41/Server_40_to_41.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Server Mod Migration - 4.0 to 4.1
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/SPT_41/Server_40_to_41.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13, SPT 4.1.x / 4.1.0
-->

---
title: Server Mod Migration - 4.0 to 4.1
description: What changed for server mods between SPT 4.0 and 4.1, and how to fix it.
published: true
date: 2026-07-21T00:00:00.000Z
tags: modding, migration
editor: markdown
dateCreated: 2026-07-21T00:00:00.000Z
---

> This page applies to SPT version `4.1`
{.is-info}

> Every 4.0 server mod needs rebuilding against 4.1. The server checks which version of `SPTarkov.Server.Core` your mod was built against and refuses to load it if that doesn't match.
{.is-warning}

A rundown of what changed for server mods between 4.0 and 4.1, and what to do about each one.

## Metadata

`AbstractModMetadata` was an abstract record. It's now an interface, which makes what a mod has to provide clearer.

**4.0**
```csharp
public record MyModMetadata : AbstractModMetadata
{
    public override string ModGuid { get; init; } = "com.example.my-mod";
    public override Range SptVersion { get; init; } = new("~4.0.0");
    public override bool? IsBundleMod { get; init; }
    // ...
}
```

**4.1**
```csharp
public record MyModMetadata : IModMetadata
{
    public string ModGuid { get; init; } = "com.example.my-mod";
    public Range SptVersion { get; init; } = new("~4.1.0");
    // ...
}
```

Remove every `override`, and remove `IsBundleMod`.

## Load and update

Both lifecycle methods are async and receive a token that's cancelled when the server shuts down (CTRL+C).

**4.0**
```csharp
public Task OnLoad() { ... }
public Task<bool> OnUpdate(long secondsSinceLastRun) { ... }
```

**4.1**
```csharp
public Task OnLoadAsync(CancellationToken cancellationToken) { ... }
public Task<bool> OnUpdateAsync(long secondsSinceLastRun, CancellationToken cancellationToken) { ... }
```

Propagate the token to anything that takes one, such as file I/O, HTTP calls and delays, so the server can shut down smoothly. For long synchronous work, call `cancellationToken.ThrowIfCancellationRequested()` periodically.

Let `OperationCanceledException` propagate. Cancellation is not an error.

## Load order

Load order matters a lot less than it used to. The database and config files are already loaded by the time anything starts, so there's no stage where the data isn't there yet.

If your mod ran on `PostDBModLoader`, run it on `PostLoad`.

If you're adding your own data to the database, do it at `Preload` as the database is already fully loaded (This is to prevent issues from appearing where profiles might not load due to items or traders not existing)

Full list, low to high: `Watermark`, `Preload`, `GameCallbacks`, `TraderRegistration`, `Routers`, `HandbookCallbacks`, `SaveCallbacks`, `TraderCallbacks`, `PresetCallbacks`, `RagfairCallbacks`, `PostLoad`.

The gaps between values are 100000, so there's room to slot in between stages if you do need to.

### Routers

Routers now respect priority. They were always registered through DI, but the priority you gave them was ignored. Every built-in router sits on `OnLoadOrder.Routers` exactly, so you position yours relative to that.

Which offset you want depends on whether you're overriding one of SPT's routes or adding a new one.

**A custom route**, on a URL SPT doesn't already handle, always goes one above:

```csharp
[Injectable(TypePriority = OnLoadOrder.Routers + 1)]
```

Nothing of ours answers that URL, so there's nobody to order against and no reason to sit below us. Use whatever offset your mod needs, `Routers + 1`, `Routers + 5`, and so on, but always base it on `OnLoadOrder.Routers` rather than picking a raw number.

**Overriding an SPT route**, on a URL we already handle, is where the choice matters:

```csharp
[Injectable(TypePriority = OnLoadOrder.Routers - 1)] // you handle it first
[Injectable(TypePriority = OnLoadOrder.Routers + 1)] // SPT handles it first
```

Go below if you want to take the request before SPT sees it, for example to replace the response entirely. Go above if you want SPT to do its work first and then act on the result.

Be aware that two mods overriding the same route are ordering against each other as well as against us, and the one that wins is whoever ended up first.

### Every route action takes a CancellationToken

Route actions gained a `CancellationToken` parameter, sourced from `HttpContext.RequestAborted`. This applies to every router, so all of your actions need the extra parameter whether you use it or not.

```diff
- (url, info, sessionId, output) => { ... }
+ (url, info, sessionId, output, cancellationToken) => { ... }
```

Pass it on to anything that accepts one so a dropped request doesn't leave work running.

`RouteAction<TRequest>` is also constrained to `IRequestData` now, where before it was any `class`.

### Typed route bodies

`RouteAction<TRequest>` and `ItemRouteAction<TRequest>` carry the body type, so the body arrives already typed and you don't cast it yourself.

For item event routers this is new. In 4.0 you were handed a `BaseInteractionRequestData` and wrote `body as MyActionRequest` at the top of every case. Declare the type on the route instead and the cast is gone, along with the separate converter registration that used to be needed to make the deserialisation work at all.

If a body doesn't match the declared type you get an exception naming the route and both types, rather than a null from a failed cast surfacing somewhere later.

## Item event routers

Item event routers were rewritten. If you have one, it needs restructuring.

`ItemEventRouterDefinition` is now `ItemEventRouter`, in `SPTarkov.Server.Core.DI.Routing`. Instead of overriding two methods and switching on the URL, you pass your routes to the base constructor as `ItemRouteAction` records.

**4.0**
```csharp
[Injectable]
public class MyItemEventRouter(MyCallbacks callbacks) : ItemEventRouterDefinition
{
    protected override List<HandledRoute> GetHandledRoutes()
    {
        return [new("MyAction", false)];
    }

    protected override ValueTask<ItemEventRouterResponse> HandleItemEventInternal(
        string url,
        PmcData pmcData,
        BaseInteractionRequestData body,
        MongoId sessionID,
        ItemEventRouterResponse output
    )
    {
        switch (url)
        {
            case "MyAction":
                return new ValueTask<ItemEventRouterResponse>(callbacks.DoThing(pmcData, body as MyActionRequest, sessionID));
            default:
                throw new Exception($"MyItemEventRouter being used when it cant handle route {url}");
        }
    }
}
```

**4.1**
```csharp
[Injectable(TypePriority = OnLoadOrder.Routers)]
public sealed class MyItemEventRouter(MyCallbacks callbacks)
    : ItemEventRouter([
        new ItemRouteAction<MyActionRequest>(
            "MyAction",
            async (url, pmcData, body, sessionID, output, cancellationToken) => await callbacks.DoThing(pmcData, body, sessionID)
        ),
    ]) { }
```

The URL switch, the `GetHandledRoutes` override and the default-case throw all go away. Routes are declared once and dispatched for you.

### BaseInteractionRequestDataConverter is gone

`BaseInteractionRequestDataConverter` has been removed, and with it `RegisterModDataHandler`.

In 4.0 the converter owned a switch over every action, mapping it to the request type to deserialise into. A custom item event meant registering a handler with it separately from writing the router, and forgetting to do so threw at deserialise time complaining the converter didn't handle your action.

```csharp
BaseInteractionRequestDataConverter.RegisterModDataHandler(
    "MyAction",
    json => JsonSerializer.Deserialize<MyActionRequest>(json)
);
```

All of that folded into the router. `ItemRouteAction<MyActionRequest>` already states the type, so the route is the single place your action is declared. Delete the registration call and the handler with it.

## Registering your config into DI

New in 4.1. `IOnDIConstruct` lets a mod add to the service collection before the provider is built.

Use this for your config files. Load your config, register the instance, and every class in your mod can then take it as a constructor parameter through DI injection, the same way SPT's own configs work.

```csharp
public class MyModConfigRegistration : IOnDIConstruct
{
    public static async Task OnDIConstructAsync(IServiceCollection serviceCollection)
    {
        MyModConfig config = await LoadConfigFromDiskAsync();
        serviceCollection.AddSingleton(config);
    }
}
```

Anything in your mod can then take it:

```csharp
[Injectable]
public class MyService(MyModConfig config)
{
    // config is the instance registered above
}
```

`OnDIConstructAsync` is `static abstract` on the interface, so it runs before anything is constructed.

**This is not the way to register your own classes.** Put `[Injectable]` on them and let the container pick them up, as you would have in 4.0. Reach for `IOnDIConstruct` when you have an object the container can't build for itself, which in practice means your config files or anything else that can't be constructed easily with `[Injectable]`.

## Tables and configs are injectable

**`DatabaseServer`, `DatabaseService` and `ConfigServer` no longer exist.** Every database table and every config is registered in DI as a singleton, so you ask for the one you want in your constructor.

**4.0**
```csharp
[Injectable]
public class MyService(DatabaseService databaseService, ConfigServer configServer)
{
    private readonly InsuranceConfig _config = configServer.GetConfig<InsuranceConfig>();

    public void DoThing()
    {
        var globals = databaseService.GetGlobals();
        var items = databaseService.GetItems();
    }
}
```

**4.1**
```csharp
[Injectable]
public class MyService(GlobalTable globalTable, TemplateTable templateTable, InsuranceConfig insuranceConfig)
{
    public void DoThing()
    {
        var items = templateTable.Items;
    }
}
```

Configs are injected by their concrete type. `configServer.GetConfig<InsuranceConfig>()` becomes an `InsuranceConfig` constructor parameter. If the type isn't mapped to a config file, the server fails at startup instead of when your code first runs.

Tables were also renamed to say what they are. Each of these getters becomes an injected table:

| 4.0 | 4.1 |
| --- | --- |
| `databaseService.GetBots()` | `BotTable` |
| `databaseService.GetGlobals()` | `GlobalTable` |
| `databaseService.GetHideout()` | `HideoutTable` |
| `databaseService.GetLocales()` | `LocaleTable` |
| `databaseService.GetLocations()` | `LocationTable` |
| `databaseService.GetMatch()` | `MatchTable` |
| `databaseService.GetTemplates()` | `TemplateTable` |
| `databaseService.GetTraders()` | `TradersTable` |
| `databaseService.GetServer()` | `ServerTable` |
| `databaseService.GetSettings()` | `SettingsTable` |

All of them are in `SPTarkov.Server.Core.Models.Spt.Tables`.

The rest of the getters were shortcuts to a property on the templates table, so inject `TemplateTable` and go through the property:

| 4.0 | 4.1 |
| --- | --- |
| `databaseService.GetItems()` | `templateTable.Items` |
| `databaseService.GetQuests()` | `templateTable.Quests` |
| `databaseService.GetHandbook()` | `templateTable.Handbook` |
| `databaseService.GetPrices()` | `templateTable.Prices` |
| `databaseService.GetCustomization()` | `templateTable.Customization` |
| `databaseService.GetAchievements()` | `templateTable.Achievements` |
| `databaseService.GetCustomAchievements()` | `templateTable.CustomAchievements` |
| `databaseService.GetProfileTemplates()` | `templateTable.Profiles` |
| `databaseService.GetLocationServices()` | `templateTable.LocationServices` |

The two by-id lookups moved onto their tables and kept their names:

| 4.0 | 4.1 |
| --- | --- |
| `databaseService.GetLocation(id)` | `locationTable.GetLocation(id)` |
| `databaseService.GetTrader(id)` | `tradersTable.GetTrader(id)` |

There is no replacement for `GetTables()`. If you genuinely need several, list them all as parameters.

## Namespace moves

The common ones:

| 4.0 | 4.1 |
| --- | --- |
| `Helpers.ItemHelper` | `Helpers.Items.ItemHelper` |
| `Helpers.ProfileHelper` | `Helpers.Profile.ProfileHelper` |
| `Helpers.InventoryHelper` | `Helpers.Profile.InventoryHelper` |
| `Helpers.HideoutHelper` | `Helpers.Profile.HideoutHelper` |
| `Helpers.QuestHelper` | `Helpers.Quest.QuestHelper` |
| `Helpers.TraderHelper` | `Helpers.Traders.TraderHelper` |
| `Helpers.BotHelper` | `Helpers.Bot.BotHelper` |
| `Helpers.ModHelper` | `Helpers.Server.ModHelper` |
| `Services.Mod.CustomItemService` | `Services.Modding.Custom.CustomItemService` |
| `Services.Mod.CustomQuestService` | `Services.Modding.Custom.CustomQuestService` |
| `Services.ServerLocalisationService` | `Services.Locales.ServerLocalisationService` |
| `Models.Eft.Common.Globals` | `Models.Spt.Tables.GlobalTable` |

<details>
<summary>Everything else that moved</summary>

**Generators**
| 4.0 | 4.1 |
| --- | --- |
| `Generators.BotEquipmentModGenerator` | `Generators.Bot.BotEquipmentModGenerator` |
| `Generators.BotGenerator` | `Generators.Bot.BotGenerator` |
| `Generators.BotInventoryGenerator` | `Generators.Bot.BotInventoryGenerator` |
| `Generators.BotLevelGenerator` | `Generators.Bot.BotLevelGenerator` |
| `Generators.BotWeaponGenerator` | `Generators.Bot.BotWeaponGenerator` |
| `Generators.PlayerScavGenerator` | `Generators.Bot.PlayerScavGenerator` |
| `Generators.BotLootGenerator` | `Generators.Loot.BotLootGenerator` |
| `Generators.LocationLootGenerator` | `Generators.Loot.LocationLootGenerator` |
| `Generators.LootGenerator` | `Generators.Loot.LootGenerator` |
| `Generators.PMCLootGenerator` | `Generators.Loot.PMCLootGenerator` |
| `Generators.RagfairAssortGenerator` | `Generators.Ragfair.RagfairAssortGenerator` |
| `Generators.RagfairOfferGenerator` | `Generators.Ragfair.RagfairOfferGenerator` |
| `Generators.RepeatableQuestGeneration.*` | `Generators.RepeatableQuests.*` |
| `Generators.WeaponGen.*` | `Generators.Weapons.*` |
| `Generators.WeatherGenerator` | `Generators.Weather.WeatherGenerator` |
| `Generators.WeatherGen.AbstractWeatherPresetGeneratorBase` | `Generators.Weather.AbstractWeatherPreset` |
| `Generators.WeatherGen.CloudyWeatherGenerator` | `Generators.Weather.CloudyPreset` |
| `Generators.WeatherGen.RainyWeatherGenerator` | `Generators.Weather.RainyPreset` |
| `Generators.WeatherGen.SunnyWeatherGenerator` | `Generators.Weather.SunnyPreset` |

**Helpers**
| 4.0 | 4.1 |
| --- | --- |
| `Helpers.BotDifficultyHelper` | `Helpers.Bot.BotDifficultyHelper` |
| `Helpers.BotGeneratorHelper` | `Helpers.Bot.BotGeneratorHelper` |
| `Helpers.BotWeaponGeneratorHelper` | `Helpers.Bot.BotWeaponGeneratorHelper` |
| `Helpers.DurabilityLimitsHelper` | `Helpers.Bot.DurabilityLimitsHelper` |
| `Helpers.PaymentHelper` | `Helpers.Commerce.PaymentHelper` |
| `Helpers.RewardHelper` | `Helpers.Commerce.RewardHelper` |
| `Helpers.TradeHelper` | `Helpers.Commerce.TradeHelper` |
| `Helpers.CounterTrackerHelper` | `Helpers.InRaid.CounterTrackerHelper` |
| `Helpers.InRaidHelper` | `Helpers.InRaid.InRaidHelper` |
| `Helpers.WeatherHelper` | `Helpers.InRaid.WeatherHelper` |
| `Helpers.PresetHelper` | `Helpers.Items.PresetHelper` |
| `Helpers.DialogueHelper` | `Helpers.Profile.DialogueHelper` |
| `Helpers.HandbookHelper` | `Helpers.Profile.HandbookHelper` |
| `Helpers.HealthHelper` | `Helpers.Profile.HealthHelper` |
| `Helpers.PrestigeHelper` | `Helpers.Profile.PrestigeHelper` |
| `Helpers.ProfileValidatorHelper` | `Helpers.Profile.ProfileValidatorHelper` |
| `Helpers.QuestRewardHelper` | `Helpers.Quest.QuestRewardHelper` |
| `Helpers.RepeatableQuestHelper` | `Helpers.Quest.RepeatableQuestHelper` |
| `Helpers.RagfairHelper` | `Helpers.Ragfair.RagfairHelper` |
| `Helpers.RagfairOfferHelper` | `Helpers.Ragfair.RagfairOfferHelper` |
| `Helpers.RagfairSellHelper` | `Helpers.Ragfair.RagfairSellHelper` |
| `Helpers.RagfairServerHelper` | `Helpers.Ragfair.RagfairServerHelper` |
| `Helpers.RagfairSortHelper` | `Helpers.Ragfair.RagfairSortHelper` |
| `Helpers.RepairHelper` | `Helpers.Ragfair.RepairHelper` |
| `Helpers.HttpServerHelper` | `Helpers.Server.HttpServerHelper` |
| `Helpers.NotificationSendHelper` | `Helpers.Server.NotificationSendHelper` |
| `Helpers.NotifierHelper` | `Helpers.Server.NotifierHelper` |
| `Helpers.AssortHelper` | `Helpers.Traders.AssortHelper` |
| `Helpers.TraderAssortHelper` | `Helpers.Traders.TraderAssortHelper` |

**Services**
| 4.0 | 4.1 |
| --- | --- |
| `Services.BotEquipmentFilterService` | `Services.Bot.BotEquipmentFilterService` |
| `Services.BotEquipmentModPoolService` | `Services.Bot.BotEquipmentModPoolService` |
| `Services.BotInventoryContainerService` | `Services.Bot.BotInventoryContainerService` |
| `Services.BotLootCacheService` | `Services.Bot.BotLootCacheService` |
| `Services.BotNameService` | `Services.Bot.BotNameService` |
| `Services.BotWeaponModLimitService` | `Services.Bot.BotWeaponModLimitService` |
| `Services.MatchBotDetailsCacheService` | `Services.Bot.MatchBotDetailsCacheService` |
| `Services.PmcChatResponseService` | `Services.Bot.PmcChatResponseService` |
| `Services.FenceService` | `Services.Commerce.FenceService` |
| `Services.GiftService` | `Services.Commerce.GiftService` |
| `Services.InsuranceService` | `Services.Commerce.InsuranceService` |
| `Services.MailSendService` | `Services.Commerce.MailSendService` |
| `Services.PaymentService` | `Services.Commerce.PaymentService` |
| `Services.RepairService` | `Services.Commerce.RepairService` |
| `Services.TraderPurchasePersisterService` | `Services.Commerce.TraderPurchasePersisterService` |
| `Services.CircleOfCultistService` | `Services.Hideout.CircleOfCultistService` |
| `Services.MapMarkerService` | `Services.Hideout.MapMarkerService` |
| `Services.AirdropService` | `Services.InRaid.AirdropService` |
| `Services.BtrDeliveryService` | `Services.InRaid.BtrDeliveryService` |
| `Services.CustomLocationWaveService` | `Services.InRaid.CustomLocationWaveService` |
| `Services.LocationLifecycleService` | `Services.InRaid.LocationLifecycleService` |
| `Services.MatchLocationService` | `Services.InRaid.MatchLocationService` |
| `Services.OpenZoneService` | `Services.InRaid.OpenZoneService` |
| `Services.RaidTimeAdjustmentService` | `Services.InRaid.RaidTimeAdjustmentService` |
| `Services.RaidWeatherService` | `Services.InRaid.RaidWeatherService` |
| `Services.ItemBaseClassService` | `Services.Items.ItemBaseClassService` |
| `Services.ItemFilterService` | `Services.Items.ItemFilterService` |
| `Services.LocaleService` | `Services.Locales.LocaleService` |
| `Services.InMemoryCacheService` | `Services.Modding.InMemoryCacheService` |
| `Services.Mod.ModItemCacheService` | `Services.Modding.ModItemCacheService` |
| `Services.BackupService` | `Services.Profile.BackupService` |
| `Services.CreateProfileService` | `Services.Profile.CreateProfileService` |
| `Services.ProfileActivityService` | `Services.Profile.ProfileActivityService` |
| `Services.ProfileFixerService` | `Services.Profile.ProfileFixerService` |
| `Services.ProfileValidatorService` | `Services.Profile.ProfileMigrationService` |
| `Services.RagfairCategoriesService` | `Services.Ragfair.RagfairCategoriesService` |
| `Services.RagfairLinkedItemService` | `Services.Ragfair.RagfairLinkedItemService` |
| `Services.RagfairOfferService` | `Services.Ragfair.RagfairOfferService` |
| `Services.RagfairPriceService` | `Services.Ragfair.RagfairPriceService` |
| `Services.RagfairRequiredItemsService` | `Services.Ragfair.RagfairRequiredItemsService` |
| `Services.RagfairTaxService` | `Services.Ragfair.RagfairTaxService` |
| `Services.NotificationService` | `Services.Server.NotificationService` |
| `Services.PostDbLoadService` | `Services.Server.PostDbLoadService` |
| `Services.ReleaseCheckService` | `Services.Server.ReleaseCheckService` |
| `Services.SeasonalEventService` | `Services.Server.SeasonalEventService` |

**Models**
| 4.0 | 4.1 |
| --- | --- |
| `Models.Eft.Common.Globals` | `Models.Spt.Tables.GlobalTable` |
| `Models.Eft.Common.Tables.Match` | `Models.Spt.Tables.MatchTable` |
| `Models.Spt.Bots.Bots` | `Models.Spt.Tables.BotTable` |
| `Models.Spt.Hideout.Hideout` | `Models.Spt.Tables.HideoutTable` |
| `Models.Spt.Server.LocaleBase` | `Models.Spt.Tables.LocaleTable` |
| `Models.Spt.Server.Locations` | `Models.Spt.Tables.LocationTable` |
| `Models.Spt.Server.ServerBase` | `Models.Spt.Tables.ServerTable` |
| `Models.Spt.Server.SettingsBase` | `Models.Spt.Tables.SettingsTable` |
| `Models.Spt.Templates.Templates` | `Models.Spt.Tables.TemplateTable` |
| `Models.Spt.Config.PmcChatResponse` | `Models.Spt.Config.PmcChatResponseConfig` |

</details>

## Logging

`ISptLogger` lives in `SPTarkov.Common` now, not Core.

```diff
- using SPTarkov.Server.Core.Models.Utils;
+ using SPTarkov.Common.Models.Logging;
```

`LogLevel` is now `Microsoft.Extensions.Logging.LogLevel`. SPT's own copy of the enum is gone. Three of the names differ:

| 4.0 | 4.1 |
| --- | --- |
| `Fatal` | `Critical` |
| `Warn` | `Warning` |
| `Info` | `Information` |

`Trace`, `Debug` and `Error` keep their names. The logger's own methods are unchanged, so `logger.Info(...)` and `logger.Warning(...)` still read the same, this only affects levels you pass to `Log()` or `IsLogEnabled()`.

Be careful if you compared levels numerically. SPT's enum started at `Fatal` and counted up to `Trace`; Microsoft's runs the other way, from `Trace` up to `Critical`.

Colours use Spectre.Console now. `LogWithColor` still takes both a text colour and a background colour, but the `LogTextColor` and `LogBackgroundColor` enums are gone and both parameters are a `Spectre.Console.Color`.

```diff
- void LogWithColor(string data, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null, Exception? ex = null);
+ void LogWithColor(string data, Color? textColor = null, Color? backgroundColor = null, Exception? ex = null);
```

So the call itself barely changes, only the type you reach for:

```diff
- logger.LogWithColor("Loaded", LogTextColor.Green, LogBackgroundColor.Black);
+ logger.LogWithColor("Loaded", Color.Green, Color.Black);
```

`Log()` takes the same pair of colour parameters and changed the same way.

## Bundles

`IsBundleMod` is gone. The server checks for `bundles.json` in your mod folder instead. The flag was redundant, and a mod that shipped bundles but forgot to set it just silently didn't load them.

## Patching

Patches are DI managed now. Mark them `[Injectable]`, then inject `IEnumerable<IRuntimePatch>` and enable them.

```csharp
[Injectable]
public class MyPatch : AbstractPatch
{
    protected override MethodBase GetTargetMethod() { ... }

    [PatchPostfix]
    public static void PatchPostfix() { ... }
}
```

Enable them at `Preload`, so they're applied before any of the code you're patching gets a chance to run:

```csharp
[Injectable(TypePriority = OnLoadOrder.Preload + 1)]
public class MyModPatches(IEnumerable<IRuntimePatch> patches) : IOnLoad
{
    public Task OnLoadAsync(CancellationToken cancellationToken)
    {
        foreach (var patch in patches)
        {
            patch.Enable();
        }

        return Task.CompletedTask;
    }
}
```

Always offset from a stage rather than picking a raw number, and use whatever offset your mod needs.

You get every patch in your own assembly from that one injection, so a single loop covers the lot and adding a patch later needs no extra wiring.

`AbstractPatch` implements the new `IRuntimePatch` interface, which is what the container resolves against. In 4.0 you constructed each patch yourself with `new MyPatch().Enable()`. Now you let the container build them and enable what you're handed.

### Getting dependencies into a patch

**`ServiceLocator` has been removed.** In 4.0 it was the only way for a patch to reach the container, because patches were constructed outside DI. It was marked obsolete in 4.0 with this change already planned.

Patches are constructed by the container now, so ask for what you need in the constructor. Harmony patch methods have to be static, so assign the dependency to a static field:

```csharp
[Injectable]
public class MyPatch : AbstractPatch
{
    private static ISptLogger<MyPatch> _logger = default!;
    private static ItemHelper _itemHelper = default!;

    public MyPatch(ISptLogger<MyPatch> logger, ItemHelper itemHelper)
    {
        _logger = logger;
        _itemHelper = itemHelper;
    }

    protected override MethodBase GetTargetMethod() { ... }

    [PatchPostfix]
    public static void PatchPostfix()
    {
        // _logger and _itemHelper are usable here
    }
}
```

Anything the container knows about works here: helpers and services, tables and configs (see [Tables and configs are injectable](#tables-and-configs-are-injectable)), and your own classes registered through `IOnDIConstruct`.

Replace every `ServiceLocator.ServiceProvider.GetService<T>()` call with a constructor parameter. If a type can't be resolved, the server now fails at startup with a clear error rather than handing your patch a null at runtime.

Ownership is enforced, not assumed. `Enable()` and `Disable()` silently do nothing when called from an assembly that didn't create the patch, and `IsYourPatch` tells you whether you own one.

Patch failures now throw `PatchException` naming the target method, instead of a bare `Exception`.

## Web pages

`IModWebMetadata` is now `IModBlazorMetadata`, in `SPTarkov.Server.Web`. Rename the interface and add the three new properties:

```csharp
public sealed class MyModMetadata : IModMetadata, IModBlazorMetadata
{
    // ...
    public string? WWWRootUrl { get; init; }
    public string? HomePage { get; init; } = "/my-mod";
    public string? HomePageDescription { get; init; } = "My mod's config page";
}
```

`HomePage` and `HomePageDescription` register a card for your mod in the SIC mod links section. Mods implementing this interface also no longer have their `.js` and `.ts` files treated as loadable server content.

There's a lot more to this in 4.1, including a config editor that lets users edit your mod's settings in the browser. See [Mod Web Pages](/en/SPT_41/modding/server/Mod_Web_Pages).

## Prepatching

New in 4.1. Prepatchers extend Core's enums before it loads, which runtime patching can't do.

Most mods don't need this. If yours does, see [Prepatching](/en/SPT_41/modding/server/Prepatching).

## Smaller changes

- `ModHelper` can read files relative to your own mod folder, so you don't have to work out your install path yourself.
- Custom items can skip handbook and flea price entries.
- `MongoId` was reworked. Existing usage should be unaffected.


====================================================================================================
DOCUMENT: Single Player Tarkov Wiki
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/home.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/home.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Single Player Tarkov Wiki
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/home.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: Home
description: 
published: true
date: 2026-07-14T18:38:01.943Z
tags: 
editor: markdown
dateCreated: 2025-04-30T03:54:07.869Z
---

# Single Player Tarkov Wiki

Your community-driven resource for everything related to SPT. Whether you're new to SPT or a seasoned modder, this wiki aims to be your central hub for information.

## What is Single Player Tarkov?

SPT allows you to experience Escape From Tarkov offline, in a single-player environment complete with progression, quests, AI Scavs, and AI PMCs. It uses server emulation and client modifications to create a highly customizable, personal Tarkov experience, completely separate from the live online game. **A legitimate, purchased copy of Escape From Tarkov is required.**

## Getting Started

- [New to SPT? Start Here!](/Beginners_Guide): A beginner's overview of the SPT project.
- [System Requirements](/system-requirements): The system requirements to run SPT.
- [How SPT Works](/How_SPT_Works): The basics of how SPT works.
- [Installation Guide](/Installation_Guide): A step by step guide on how to install and initially setup SPT.
- [Updating SPT](/Updating_SPT): Learn how to update your SPT installation.
- [Profiles](/Profiles): How profiles work in SPT.

## Exploring Mods

Dive into the world of SPT modding to tailor your experience:

- [Understanding Mod Types](/Mod_Types): Learn the difference between server mods and client mods.
- [Installing Mods](/Installing_Mods): General guide on adding mods to your game.
  - [Profiles](https://wiki.sp-tarkov.com/Installing_Mods#profiles)
  - [Updating Mods](https://wiki.sp-tarkov.com/en/Installing_Mods#updating-mods)
- [Uninstalling Mods](/Uninstalling_Mods): A guide on uninstalling SPT mods.
- [Recommended Mods](/Recommended_Mods_40): A selection of recommended mods to improve your SPT experience.

## Troubleshooting

Running into issues? Find solutions here:

- [Performance Tuning](/Performance_Tuning): Tips for improving FPS and stability.
- [Frequently Asked Questions (FAQs)](/FAQs_40): Answers to frequently asked questions:
	- [SPT 4.0](https://wiki.sp-tarkov.com/en/FAQs_40#spt-40)
	- [EFT 1.0](https://wiki.sp-tarkov.com/en/FAQs_40#eft-10)
	- [Troubleshooting tips](https://wiki.sp-tarkov.com/en/FAQs_40#troubleshooting-tips)
	- [Old versions of SPT](https://wiki.sp-tarkov.com/en/FAQs_40#old-versions-of-spt)
	- [Known EFT Issues](/Known_EFT_Issues_40)
	- [Known SPT Issues](/Known_SPT_Issues_40)
	- [Known Mod Issues](/Known_Mod_Issues_40)
- [50/50 Method](/5050-method): How to use the 50/50 Method to find the mod causing your issues.
- [Reporting Issues](#)^WIP^: How to effectively ask for help.

## Guides & Advanced Topics

- [Bot Difficulties](/Bot_Difficulties): Learn how SPT and mods handle bots' difficulty.
- [SPT & Commando Bots](/SPT_and_Commando_Bots): How to use SPT & Commando bots in SPT.
- [Console Commands](/guides-and-advanced-topics/console-commands): A list of the few console commands SPT adds that can be used in-game.

## For Mod Developers

Interested in creating your own content for SPT?

- [Modding Resources](/modding/Modding_Resources): Resources to start creating SPT mods.
- [Modding Introduction](#)^WIP^: Getting started with SPT mod development.
- [Modding Tools](#)^WIP^: Useful software for creating mods.


## SPT 3.11

Pages specific for the Long Term Distribution version of SPT.

- [Manual Install Instructions for 3.11](/SPT_311/Manual-Installation-Instructions_311): How to install SPT 3.11.
- [Frequently Asked Questions (FAQs) for SPT 3.11](/SPT_311/FAQs_311): Answers to frequently asked questions about SPT 3.11.
- [Recommended Mods for 3.11](/SPT_311/Recommended_Mods_311): A selection of recommended mods to improve your SPT 3.11 experience.

## Contribute!

For discussions and suggestions about the Wiki, visit the [`#website-wiki`](https://discord.com/channels/875684761291599922/1426941224324960266) channel on our [Discord server](http://discord.sp-tarkov.com/).
You can contribute to the Wiki by reading the [How to Contribute](/how_to_contribute) page. Make sure to follow the [Style Guide](/Style_Guide).

====================================================================================================
DOCUMENT: Skill Reference Sheet
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/references/skills-reference.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/references/skills-reference.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Skill Reference Sheet
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/references/skills-reference.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Skills Reference Sheet
description: A reference for skill related things
published: true
date: 2026-04-13T17:48:13.769Z
tags: client, reference, server, skills
editor: markdown
dateCreated: 2025-11-02T03:49:55.394Z
---

# Skill Reference Sheet
### Skill Enum
Skills are defined as enum constants. The client uses `ESkillId` while the server uses `SkillTypes`. The integer constants and the naming are the same between them although the type name varies. Not all skills are implemented thus some of these values are unused.

> When making quests or using `Commando` you should use the `Enum Name` column.

| Enum Name | Constant | Localized Name |
| :--- | :--- | :--- | 
| Endurance | 0 | Endurance
| Strength | 1 | Strength
| Vitality | 2 | Vitality
| Health | 3 | Health
| StressResistance | 4 | Stress Resistance
| Metabolism | 5 | Metabolism
| Immunity | 6 | Immunity
| Perception | 7 | Perception
| Intellect | 8 | Intellect
| Attention | 9 | Attention
| Charisma | 10 | Charisma
| Memory | 11 | Memory
| MagDrills | 12 | Mag Drills
| Pistol | 13 | Pistol
| Revolver | 14 | Revolver
| SMG | 15 | Submachine Guns
| Assault | 16 | Assault Rifles
| Shotgun | 17 | Shotguns
| Sniper | 18 | Bolt-action Rifles
| LMG | 19 | Light Machine Guns
| HMG | 20 | Heavy Machine Guns
| Launcher | 21 | Grenade Launchers
| AttachedLauncher | 22 | Underbarrel Launchers
| Throwing | 23 | Throwables
| Misc | 24 | Misc
| Melee | 25 | Melee
| DMR | 26 | DMRs
| DrawMaster | 27 | Draw Master
| AimMaster | 28 | Aim Master
| RecoilControl | 29 | Recoil Control
| TroubleShooting | 30 | Troubleshooting
| Sniping | 31 | Sniping
| CovertMovement | 32 | Covert Movement
| ProneMovement | 33 | Prone Movement
| FirstAid | 34 | First Aid
| FieldMedicine | 35 | Field Medicine
| Surgery | 36 | Surgery
| LightVests | 37 | Light Vests
| HeavyVests | 38 | Heavy Vests
| WeaponModding | 39 | Weapon Modding
| AdvancedModding | 40 | Advanced Modding
| NightOps | 41 | Night Ops
| SilentOps | 42 | Silent Ops
| Lockpicking | 43 | Lockpicking
| Search | 44 | Search
| WeaponTreatment | 45 | Weapon Maintenance
| Freetrading | 46 | Free Trading
| Auctions | 47 | Auctions
| Cleanoperations | 48 | Clean Operations
| Barter | 49 | Barter
| Shadowconnections | 50 | Shadow Connections
| Taskperformance | 51 | Task Performance
| BearAssaultoperations | 52 | BEAR Assault Operations
| BearAuthority | 53 | BEAR Authority
| BearAksystems | 54 | BEAR AK Systems
| BearHeavycaliber | 55 | BEAR Heavy Caliber
| BearRawpower | 56 | BEAR Raw Power
| UsecArsystems | 57 | NOT LOCALIZED
| UsecDeepweaponmodding | 58 | NOT LOCALIZED
| UsecLongrangeoptics | 59 | NOT LOCALIZED
| UsecNegotiations | 60 | NOT LOCALIZED
| UsecTactics | 61 | NOT LOCALIZED
| BotReload | 62 | NOT LOCALIZED
| BotSound | 63 | NOT LOCALIZED
| AimDrills | 64 | Aim Drills
| HideoutManagement | 65 | Hideout Management
| Crafting | 66 | Crafting


### SkillClass Enum
Skill classes are the category of the skill. The client uses `ESkillClass` while the server uses `SkillClass`. These values are only used to display the correct icon in the client, they are not used in the server.

| Enum Name | Constant |
| :--- | :--- |
| Physical | 0
| Combat | 1
| Special | 2
| Practical | 3
| Mental | 4

### EBuffType Enum
`EBuffType` is client side only. It is used for determining how to display buffs to players.

| Enum Name | Constant |
| :--- | :--- |
| Simple | 0
| Elite | 1
| Switching | 2
| Plebian | 3



====================================================================================================
DOCUMENT: SPT & Commando Bots
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/SPT_and_Commando_Bots.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/SPT_and_Commando_Bots.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: SPT & Commando Bots
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/SPT_and_Commando_Bots.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: Any SPT version
-->

---
title: SPT & Commando Bots
description: How to use SPT & Commando bots in SPT.
published: true
date: 2026-07-14T19:58:51.082Z
tags: guide
editor: markdown
dateCreated: 2025-10-05T07:40:42.709Z
---

> This page applies to any SPT version
{.is-info}


SPT automatically adds two friends to your in-game friendslist: **SPT** and **Commando**:
- **SPT** is used to redeem gift codes.
- **Commando** is used to execute commands.

To open a new chat with the bots, click on `Messenger > Friends > SPT/Commando > Start Chat`.

## SPT

To use these gift codes send the code as a chat message to **SPT**.
Note that the codes are case-sensitive and need to be sent exactly as they are listed.

<details>
<summary>Item Gift Codes</summary>
Majority of these can only be used once on each profile.
  
| Code 									| Gifted items |
| - | - |
| NewYear2023 					| VSK-94 9x39 rifle, 4 x A-91 mags, 210 x 9x39mm SP-5 gs ammo, NeoSteel High Cut Helmet, RK-PT-25 Backpack, Balaclava, Milk, Vodka, Condensed Milk, Violet Ornament, Silver Ornament, Red Ornament |
| NewYear2021						| Mk 17 LB, 4 x Mk17 30-round mags, 120 x 7.62x51mm M80 ammo, Ammo box, 3 x RGN Hand grenade, 3 x M7290 Flash Bang grenade, Keycards holder case, Fake white beard |
| Christmas2022     		| Large Christmas gift, 2 x Small Christmas gifts, Ammo box, Buckwheat |
| 1CLICKDRESSUP     		| MDR 7.62x51 Killtube, Death Knight mask, Crye Precision CPC plate carrier (Goons Edition), Weapon case |
| BARMALEY          		| RSh-12 12.7x55 revolver, Chiappa Rhino 50DS .357 revolver, 120 x 12.7x55mm PS12B ammo, 120 x .357 Magnum HP ammo, Moonshine, 2 x Ammo boxes |
| S00NS00N          		| Medicine case, Keycards holder case, 5 x Labs access keycards, Propital stim, eTG-c stim, Zagustin stim, Morphine stim, SJ6 stim |
| TRAMBON           		| LBT-6094A Slick Plate Carrier, FORT Redut-M body armor, CQC Osprey MK4A plate carrier (Protection, MTP), Armor repair kit |
| PINEWOOD          		| Mk-18 Mjolnir, 20 x .338 Lapua Magnum AP ammo, Chekannaya 15 apartment key |
| HESOYAM           		| 250,000 Roubles |
| PraporGiftDay1    		| CSA chest rig, CMS surgical kit, Salewa first aid kit |
| PraporGiftDay2    		| WARTECH Berkut BB-102 Backpack, AI-2 medkit, Army bandage |
| MechanicGiftDay1  		| Construction measuring tape |
| KAPPA4U           		| Secure container Kappa |
| ENDOFWIPE         		| 1,000,000 Roubles |
| IAMADIRTYLITTLEGOBLIN | Dev Balaclava |
| CHOMP                 | Raven figurine |
| CWX                   | 2 x Toilet paper |
| VALENS                | Sprinfield Armory M1A 7.62x51 rifle block, Knight's Armament Company SR-25 7.62x51 marksman rifle block |
| TERKOIZ               | SMW car key |
| WAFFLE                | Milk, Oatflakes |
| NIGHTWING             | Milk, Oatflakes |
| BSGBIRTHDAY2023       | NPP KIASS Kora-Kulon body armor, DIY IDEA chest rig, MSA ACH TC-2001 MICH Series helmet, Walker's XCEL 500BT Digital headset, MP-43 12ga sawed-off double-barrel shotgun, SVT-40 7.62x54R rifle (Sniper), Moonshine |
| GROUNDZERO            | Injector case |
| IAMMIGHTY             | HighCom Trooper TFO body armor, HK G28 7.62x51 marksman rifle (Patrol), M4A1 5.56x45 assault rifle (SAI) |
| ARMORPLATES           | ANA Tactical M1 plate carrier, Crye Precision AVS plate carrier, ULACH IIIA helmet (Tan) |
| RICHANDEXPENSIVE      | 2 x Propital stims, 2 x Zagustin stims, 2 x Meldonin stims, 2 x Trimadol stims, 2 x eTG-c stims |
| LEFTHANDHEADEYES      | Phased array element (AESA), Intelligence folder, Metal fuel tank |
| TWITCHNEWYEARS2023    | VSK-94 9x39 rifle (Tactical), PPSh-41 7.62x25 submachine gun, AK-545 Short 5.45x39 carbine, Sprinfield Armory M1A 7.62x51 rifle (EBR), MP-133 12ga pump-action shotgun, MP-153 12ga semmi-automatic shotgun, 60 x 5.56x45mm M855 ammo, Poyas-A + Poyas-B gear rig, Hazard 4 Takedown sling backpack, Slender mask, AFAK first aid kit, 2 x Surv12 field surgical kits, MRE ration pack, Gunpowder "Kite", 2 x Gunpowder "Eagle", Analog thermometer, Power supply unit, 3 x CPU fans |
| LUNARNEWYEAR2024      | TDI KRISS Vector Gen.2 .45 ACP submachine gun, 3 x G30 MagEx 30-round mags, 90 x .45 ACP Lasermatch FMJ ammo, AFAK first aid kit, Vita juice, Hot Rod, TarCola, 4 x Buckwheat |
| ETSREWARD             | FN SCAR-L 5.56x45 assualt rifle (Contract Wars), 6 x Mk16 30-round mags, 300 x 5.56x45mm M855A1 ammo, Weapons case, Keycards holder case |
| KONTOROVICH           | AKS-74UN 5.45x39 assault rifle (Zenit), SIG P226R 9x19 pistol (Tactical), 100 x 9x19mm Luger CCI ammo |
| UNHEARD               | 250 Dollars |
| HIDEOUTCAT            | Mr Kerman's cat hologram |
| KILLA                 | Graphics Card, Injector case |
| BITCOIN               | 2 x ComTac IV, HighCom Trooper TFO body armor (MultiCam), Spear 6.8, M4A1 SAI |
| GROUNDZERO2           | BNTI Gzhel-K body armor, CQC Osprey MK4A plate carrier (Protection, MTP), 2 x HighCom Striker ULACH IIIA helmet (Desert Tan), Grenade case |
| OBDOLBOS              | 2 x Propital, 2 x Zagustin, 2 x Meldonin, 2 x Trimadol, 2 x eTG-c, 2 x Perfotoran, 2 x Golden Star, 2 x M.U.L.E |
| THICC                 | Kalashnikov PKM 7.62x54R machine gun, NFM THOR Integrated Carrier body armor, Physical bitcoin, Intelligence |
| STREAMERLOOT          | Streamer Item Case, Twitch Drops Summer 2024 case (Epic), Twitch Drops Summer 2024 case (Rare), Twitch Drops |
| 500CIGARETTES         | Strike Cigarettes |
| STASHQOL              | 2 x Ammunition case, Lucky Scav Junk box, T H I C C item case, Item case, Weapon case, Medicine case, Mr. Holodilnick thermal bag, Magazine case, 2 x Documents case, Key tool, Dogtag case, S I C C organizational pouch |
| SPLASH                | 3 x RSP-30 reactive signal cartridge (Blue) |
| NewYear2024           | MPS Auto Assault-12 Gen 1 12ga automatic shotgun TerraGroup Labs, 3 x AA-12 12ga 20-round drum magazine, 60 x 12/70 RIP, 2 x Bottle of Tarkovskaya vodka, 2 x Bottle of Dan Jackiel whiskey, MTEK FLUX Ballistic helmet (MultiCam Alpine), Spiritus Systems Bank Robber chest rig (MultiCam Alpine), LBT-1476A 3Day Pack (MultiCam Alpine) |
| TOKTOK1M              | 1,000,000 Roubles, Labrys access keycard (Only works in v4.0.0 and above) |
| CUPSERIES             | LBT-2670 Slim Field Med Pack (Black), M.U.L.E. stimulant injector, SJ1 TGLabs combat stimulant injector, Adrenaline injector, SJ9 TGLabs combat stimulant injector, Obdolbos 2 cocktail injector, 3 x Ibuprofen painkillers, AFAK tactical individual first aid kit, 3 x CALOK-B hemostatic applicator, Grizzly medical kit, Vaseline balm (Only works in v4.0.0 and above) |
| ARENABATTLE           | Geneburn concert advertisement, Chain with Prokill medallion, 5 x GP coin, Arena poster (Only works in v4.0.0 and above) |
| ROADMAP               | DevTac Ronin Respirator, Ars Arma CPC MOD.1 plate carrier (A-TACS FG), Eberlestock F5 Switchblade backpack (Dry Earth), 240 x 5.56x45mm M995, 3 x AR-15 5.56x45 Magpul PMAG 30 GEN M3 W STANAG 30-round magazine (FDE), Lone Star TX-15 DML 5.56x45 carbine (Only works in v4.0.0 and above) |
</details>

<details>
  <summary>Special Gift Codes</summary>

  These are special codes or chat commands which result in various changes to your game state or profile. **Use with caution!**

| Code            | Outcome |
| - | - |
| GIVEMESPACE     | Adds 2 rows of additional stash space. Can be used up to 15 times. Requires game client restart to take effect |
| HOHOHO          | Enable christmas event |
| VERYSPOOKY      | Enable halloween event with zombies |
| ITSONLYSNOWALAN | Enable snow for every raid after the following one |
| GIVEMESUNSHINE  | Force enable summer season |
| EDITPROFILE     | Debug gift to assist with profile testing |
| TOURNAMENTGIFT  | Large assortment of items and various profile changes such as player level, skillpoints, Trader levels, etc. **WARNING THIS MAKES IRREVERSIBLE, POTENTIALLY UNWANTED, CHANGES TO YOUR PROFILE SUCH AS LESS TRADER STOCK AND NO FLEA**. |

</details>


## Commando

To use these commands send them as a chat message to **Commando**.
<details>
  <summary>Commands</summary>

| Command | Outcome | Example |
| - | - | - |
| `help` | Lists out all available commands in the Messenger and how to use them. | `help` |
| | | |
| `spt profile` |||
| `spt profile level [desired level]` 					| Sets your profile level. | `spt profile level 20` |
| `spt profile skill [skill name] [quantity]` 	| Sets a skill level to the given number. You can find skill names [here](https://wiki.sp-tarkov.com/en/modding/references/skills-reference). You will need to use the `Enum Name` value. | `spt profile skill metabolism 51` |
| `spt profile examine` 												| Examines every item. | `spt profile examine` |
| | | |
| `spt trader` |||
| `spt trader [trader name] rep [quantity]` 		| Sets a trader's reputation to the given number. | `spt trader prapor rep 2` |
| `spt trader [trader name] spend [quantity]` 	| Sets a trader's money spent to a given number. | `spt trader therapist spend 1000000` |
| |  Note that some traders have different internal names: <details><summary>Internal Names</summary>Ref: `Arena`<br>Lightkeeper: `caretaker`<br>BTR Driver: `APC` </details> | |
| | | |
| `spt give` |||
| `spt give [item ID] [quantity]` 					| Sends items by item ID. They can be found [here](https://db.sp-tarkov.com/search). | `spt give 5449016a4bdc2d6f028b456f 2` |
| `spt give "[item name]" [quantity]` 					| Sends items by their name. If a name entered isn't an exact match, will give a number of search results, selectable by sending `spt give [search result number]` | `spt give "pack of sugar" 10` |
| `spt give [locale] "[item name]" [quantity]`	| Sends items by their name in a chosen language. |`spt give fr "figurine de chat" 3` |

</details>

====================================================================================================
DOCUMENT: SPT 3.11
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/SPT_311/FAQs_311.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/SPT_311/FAQs_311.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: SPT 3.11
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/SPT_311/FAQs_311.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: FAQs for SPT 3.11
description: Answers to frequently asked questions about SPT 3.11.
published: true
date: 2025-11-14T12:41:33.884Z
tags: 
editor: markdown
dateCreated: 2025-08-09T12:45:37.740Z
---

> This page applies to SPT version `3.11`
{.is-info}

# SPT 3.11
### Is performance better on 3.11 than 3.10?
Users in both the live and SPT communities have reported an improvement in performance over version 0.15.5 and a decrease in stutters.

### What version of Tarkov is SPT running?
Version `0.16.1.3.35392`, released 5 March 2025.

### Is (insert content here) in SPT now?
Refer to the previous question. If you're curious about something specific, please see the official [Tarkov changelog](<https://escapefromtarkov.fandom.com/wiki/Changelog>).

### Is Labyrinth in SPT?
No. Labyrinth came out after 5 March 2025.

### Will 3.11 be updated to include the latest EFT patches?
No. EFT patches made after the release of SPT v3.11 will only be available in SPT 4.0, which is still in active development.

### Can I use my profile and mods from 3.10?
***If*** the `3.10` profile was ***un-modded***, yes. Otherwise A new profile will be required. None of your `3.10` mods are compatible.
See the guide on [Updating SPT](/Updating_SPT) for more details.

### I miss 3.10, can I re-download it?
No. Support for 3.10 is gone. If you plan on updating to 3.11 just remember that you do not have to delete your old files.

### How do I install 3.11?
Follow the [Installation Guide](/Installation_Guide).

### When is (insert mod here) going to update to 3.11?
Nobody knows when certain mods are going to update, not even the authors themselves. Do not pester mod authors about updates to their mods.

### Bots keep spawning endlessly? How do bot spawns work?
BSG made changes in the way the bot spawn system works which means that bots will continue to spawn in an attempt to keep the raid full for the duration of the raid. 
At raid start, bots will spawn until the max defined value for each map is reached (Approximately 20 bots, though it varies per map). When enough bots have been killed (4), more bots will be spawned in to get the bot count back up to the defined maximum value.

# Troubleshooting tips
- Do not install mods until you've launched SPT at least once. Verify your SPT install works, then install mods.
- Do not install out of date mods.
- Do not install multiple mods at once (unless they're dependencies). Install mods one at a time or in small batches. That way when something goes wrong, you'll know exactly what mod is responsible.
- Read mod pages. Not only is it just common courtesy to read the mod page __before__ asking for help, chances are the mod page has exactly the information you need. What the mod does, how to install it, how to use it, and known issues or incompatibility with other mods.
### "I'm still having issues and it wasn't the last mod I installed, what do I do?" 
Start removing mods one at a time until you find the mod causing the issue. When you've identified the mod responsible, check the mod page to see if it's actually an issue or an intended feature. Check the comments section to see if anyone else reported the same problem you're experiencing.

# Old versions of SPT
We do not host old versions of SPT because each SPT version is specifically designed to work with a particular version of EFT. Since EFT is a live service game that receives frequent updates, every SPT version requires a dedicated patcher to downgrade your local EFT installation to the compatible version. Maintaining multiple older SPT versions would necessitate actively maintaining multiple downgrade patchers, which includes updating these patchers after each and every EFT update. Our team simply does not have the time to dedicate to this level of ongoing maintenance.

This decision is firm and will not be changed by further requests or complaints. Repeatedly asking or arguing about this will unfortunately result in administrative action.

**HOWEVER**, we are pleased to announce that the SPT 3.11 release has been designated as a Long-Term Support (LTS) version. This means it will be maintained and available for download (along with its corresponding downgrade patcher) for an extended period.

# SPT 4.0 Bleeding Edge test build
***It is for testing purposes only***. You will not get any help __installing__ or __using__ it. It is assumed that if you are running the Bleeding Edge built of SPT that you already know what you're doing. No one has time to hold your hand. The watermark is there ***on purpose*** and cannot be removed.

- Do not ask for help installing 4.0 BE
- 3.11 mods will not work on 4.0 BE. You shouldn't even be *trying* to load mods. You're supposed to be finding bugs.
- Do not ask if mod authors will update their mods for 4.0
- Do not attempt to load your 3.11 profile on 4.0 BE and do not expect to keep your profile after 4.0 leaves testing

### How can I contribute to the Bleeding Edge test build?
- Join our [Discord Server](http://discord.sp-tarkov.com/)
- Obtain the BE Tester role in the [Info channel](https://discord.com/channels/875684761291599922/875758493351694396)
- Visit [#dev-build](https://discord.com/channels/875684761291599922/1324955991393177631) for the latest version of BE files
- Visit [#be-testing](https://discord.com/channels/875684761291599922/980558564693274694) for discussion concerning BE
- Report any bugs you find while testing on [Github](<https://github.com/sp-tarkov/server-csharp/issues>)

Users found abusing the Bleeding Edge test program will be __removed__ from the program and could lose access to other channels as well. It's not for playing, it's for __testing__.

# Known mod issues
> Always read the mod pages of the mods you're installing.
{.is-info}
### Spawning in the same spot every raid
Remove the custom player spawn points from [MOAR](https://forge.sp-tarkov.com/mod/789/moar-bagels-ultra-lite-spawn-mod)'s `user\mods\DewardianDev-MOAR\config\spawns\playerspawns.json`. Make each entry look like this:
```json
"bigmap": [],
"factory4_day": [],
...
```
### Partisan spawning right next to you
Also [MOAR](https://forge.sp-tarkov.com/mod/789/moar-bagels-ultra-lite-spawn-mod). Tweak it or disable Partisan.

### Random crashing
Triple check that you have the `3.11` version of [Simple Declutter](https://forge.sp-tarkov.com/mod/2139/simple-declutter) installed. The version for `3.10` was the default download, and both are marked as `v1.0.0`.
If that didn't help, disable `Decal Declutter`.
If that also didn't help, remove that mod.

### Bots freeze after death
Update [Quests Extended](https://forge.sp-tarkov.com/mod/2106/quests-extended).

### Glitchy grenades
Update [Borkel's NVGs](https://forge.sp-tarkov.com/mod/954/borkels-realistic-night-vision-goggles-nvgs-and-t-7).

### Weird movement after using a key
Update [Plant Time Modifier](https://forge.sp-tarkov.com/mod/1965/plant-time-modifier-updated-by-crocodilejonesy).

### SAIN is throwing errors about bot brains
Remove any mod marked incompatible on [SAIN](https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement)'s mod page.

### Item cards have some info with `blablabla`
Remove [Volkov Trader](https://forge.sp-tarkov.com/mod/2009/volkov-trader). Follow the instructions for [removing trader mods from a profile](https://wiki.sp-tarkov.com/Installing_Mods#profiles).

### Random black flickering / flashing in game
This is an issue with [Questing Bots](https://forge.sp-tarkov.com/mod/1109/questing-bots) and AI spawning in. Mod author is aware.

### PMCs missing or grey faces
Set [ALP](https://forge.sp-tarkov.com/mod/1015/alp-algorithmic-level-progression)'s `leveledClothing` to false in `user\mods\AlgorithmicLevelProgression\config\config.json`.

### Audio cuts out
Update [SAIN](https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement). If that doesn't fix it, then it's a binaural audio bug. Recent update force-enabled it for everyone.

### Unable to complete SSL connection
A mod is overloading the SPT server with requests. Mods that display the value of items are the most common cause.

### Error converting value `#xxxxxx` to type `JsonType.TaxonomyColor`
Install [Color Converter API](https://forge.sp-tarkov.com/mod/1090/color-converter-api).

### Could not convert string to double: `Infinity0.1234`
Run your profile through the [Profile Fixer](<https://drakiaxyz.github.io/spt-profile-fix/>)

### All bots converge on me after I fire my gun
If you're using [SAIN](https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement), decrease bots' maximum hearing range and/or aggressiveness.

### Traders are unclickable because they are behind the profile
Install [Kaeno's Trader Scrolling](https://forge.sp-tarkov.com/mod/1089/kaeno-traderscrolling) or enable `Intermediate trader menu` in your game settings.

### Bot brains being destroyed when running Realism, SAIN and Questing Bots
Update [Realism](https://forge.sp-tarkov.com/mod/416/spt-realism-mod).

### Bot brains being destroyed when running SAIN and Jiang Hu
Set `bosspms` to `false` inside `user\mods\Jiang Hu\config\config.jsonc`.

### `An attempt was made to transition a task...` error message when using WTT - W.A.A.C.
Using any of the custom voices causes this error. There's no known fix except to not use those custom voices.

### Lag and a forever growing `_traces.log` file after a raid
An incompatibility between Separate Hostility and SAIN. Remove one or the other.

### Mechanic has no items for sale when using MassiveSoft's mod
Install the [fix](<https://forge.sp-tarkov.com/mod/2309/zzzmassivesoft-mechanic-fix>).

# Known EFT issues
> Always read the mod pages of the mods you're installing.
{.is-info}
### Stuck animations? Can't Interact with anything
Bug named *busy hands*. Close SPT or extract from raid as it cannot be fixed mid raid. Use the [HandsAreNotBusy](<https://forge.sp-tarkov.com/mod/1298/handsarenotbusy>) mod to help avoid the bug in the future. Do note that it does not guarantee a fix for all scenarios of the bug. Closing SPT during raid will revert your profile to pre-raid state.

### AI flying or despawning after you kill them?
An issue with BSGs ragdoll physics. [HollywoodFX](<https://forge.sp-tarkov.com/mod/2003/hollywoodfx>) helps alleviate this.

### Missing secure container when you enter raid?
You pushed the `eye` icon in the pre-raid screen too many times. This is a *visual* bug. Restart your SPT. Closing SPT during raid will revert your profile to pre-raid state.

### In-game headset volume is low?
This is as intended by BSG on the current patch that SPT is on. SPT **does not** touch audio.

### Stuck in place on raid start? Unable to move or use weapons?
Restart SPT and unbind the `Compass` from your hotbar. Closing SPT using <kbd>Alt</kbd>+<kbd>F4</kbd> during raid will revert your profile to pre-raid state.

### Icons loading infinitely?
Disable `Mip Streaming` in your in-game settings.

### Hideout turning white?
Disable `Resampling` in your in-game settings, or use [Un-flashbang Hideout](<https://forge.sp-tarkov.com/mod/1425/un-flashbang-hideout>).

### Bots phasing through doors?
There's no known fix. [SAIN](https://forge.sp-tarkov.com/mod/791/sain-solarints-ai-modifications-full-ai-combat-system-replacement) attempts to fix it, but there have been reports of bots doing it even with it installed.




====================================================================================================
DOCUMENT: System Requirements
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/system-requirements.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/system-requirements.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: System Requirements
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/system-requirements.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT 4.0.x / 4.0.13
-->

---
title: System Requirements
description: The system requirements to run SPT.
published: true
date: 2025-10-19T04:48:16.302Z
tags: 
editor: markdown
dateCreated: 2025-08-28T18:53:33.574Z
---

> This page applies to SPT version `4.0`
{.is-info}

# System Requirements
SPT requires more system resources than just running Escape From Tarkov due to its offline nature, where your system is running all parts of a raid locally, of which bots are the main performance impact.

The following are the minimum requirements we have found necessary to reliably run SPT.

| | Minimum Requirements |
|------------------|----------|
| Operating System | Windows 10/11 64-bit |
| CPU              | `Intel Core i5-10400F`/`AMD Ryzen 5 5600` or newer |
| Memory           | 32GB or more |
| GPU              | DX11 compatible with 8GB+ of VRAM |
| Storage          | SSD with 70GB+ of free space |
| Dependencies     | [Escape from Tarkov](https://www.escapefromtarkov.com/purchase) |
|                  | [.Net 4.7.2](https://dotnet.microsoft.com/download/dotnet-framework/thank-you/net472-developer-pack-offline-installer) |
|                  | [.NET Runtime 9.0.10](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-desktop-9.0.10-windows-x64-installer) |
|                  | [ASP.NET 9.0.10](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-aspnetcore-9.0.10-windows-x64-installer) |

# See also
[Performance Tuning](/Performance_Tuning)

====================================================================================================
DOCUMENT: thank you
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/thank-you.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/thank-you.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: thank you
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/thank-you.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

## A thank you from me to everyone

I am so happy I got to work on this project with so many talented people for so many years. I hope working with me wasn't too bad.

Thank you to everyone who sent me kind messages over the years, I look over them often for motivation.

I'm happy this project for a janky russian game has brought enjoyment to so many people. We tried so hard to stay on the developers good side, piracy checks in the code, legit copy checks before people get support, it wasn't enough.

There are so many people to thank and if I forget someone, it isn't intentional!

- Refringe - You've put so much time and effort into the backend infrastructure and even learning entirely new languages to contribute. You even made the Forge! Thank you.
- Drakia - You've spent so much time and effort between organising support/coding it's unreal. Thank you.
- CWX - You went from no coding experience to seasoned veteran who did a gigantic chunk of the TS > C# conversion. Your launcher work is amazing. Thank you.
- Kaeno - You made the uwuifier mod, the best mod on the hub. You spent SO MANY hours making the hideout wall work. Thank you.
- Stealthsuit - Your endless supply of testing time ensured we released as bug free as possible. SPT would be a worse experience without you. Thank you.
- Lacyway - WOLFPACK AWOOO. Your project is a large reason ours is so popular. We became the mod to your project. You also became a good friend. Thank you.
- Clodan - I still have PTSD nightmares from the JS to TS conversion project. I am so glad you were there doing it with me. Your push to introduce concepts like DI made the code so much easier to work with. Thank you.
- Cj - Your work on the low level code has been vital to the project. Directing WTT members to attack people who considered you a friend broke my heart.
- Ghost - SVM is probably the most used mod for SPT ever made. You've maintained it across 3 different programming languages and are always trying to make it better. Thank you.
- Rai - You have a knack for wording things, so many announcements were made so much better because of you. Thank you.
- Waffle - You've maintained every downgrade patch for years at your own expense, even making tooling to help automate it. Thank you.
- Arch - You provided so many code improvements to the project and always with a great sense of humor. Thank you.
- Phantom - You wrote so many excellent bug reports and always wanted the project to be as accurate as possible. Thank you.
- Bepis - You've helped us out in so many tricky spots. Without BepinEx there would be no SPT. Thank you.
- McDewgle - You're always there helping people in chat, day after day. Thank you.
- Crow - Helping out with ensuring we had accurate values in the project. Thank you.
- Terk - You kept the project running smoothly for so long and are a wonderful person to spend time with. Thank you.
- Senk - You let me contribute to your project, adding loot Ids to PMC backpacks, thank you for giving me a chance.
- Eresh - We butted heads but you ran a tight ship when you were in charge. Thank you.
- Nu - We butted heads years ago but you're a good person. Thank you.
- Data dumpers - You helped ensure the project had accurate data every release. Thank you for trusting me.
- Testers - Thank you for writing up so many bug reports, they helped us fix so many problems.
- Helpers - You're there in support helping people with problems every day for free. Thank you.
- Moderators - Seeing the amount of harassment/death threats you deal with gave me a huge appreciation for what it takes to keep a community pleasant to be in. Thank you.
- Modders - You created content for our project and were the main drive for people to use SPT. I am constantly astounded at the creativity you have, It humbles em to think I was able to help you express that creativity. Thank you.
- Choccy - Always your happy, bubbly self, seeing another of your mods on the hub was always a joy. Thank you.
- Chatters - You kept the community going, I may not have talked much in chat but I did read it. Thank you.
- A great many others - I want to ensure your privacy but there are a lot of others who helped contribute over the years. Thank you.

My biggest regret is making the trader mod example. It birthed SO MANY anime trader mods...

If you see me around in other games say hi!

Love Chomp


====================================================================================================
DOCUMENT: Trader Reference Sheet
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/modding/references/trader-information.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/modding/references/trader-information.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Trader Reference Sheet
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/modding/references/trader-information.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Trader Reference Sheet
description: Reference sheet for Trader Information, including IDs, names, and other information.
published: true
date: 2025-06-06T21:18:14.582Z
tags: mods, traders
editor: markdown
dateCreated: 2025-06-06T07:34:59.592Z
---

# Trader Reference Sheet

### Trader IDs
Trader IDs are used in various locations in the SPT Server. The below table maps the known friendly name for a trader to their coded ID.

>
> If you are creating a custom trader, **_the custom trader will not load if it is not a unique MongoID._**
>

| Friendly Name | ID |
| :--- | :---: |
| Prapor | 54cb50c76803fa8b248b4571 |
| Therapist | 54cb57776803fa99248b456e |
| Fence | 579dc571d53a0658a154fbec |
| Skier | 58330581ace78e27b8b10cee |
| Peacekeeper | 5935c25fb3acc3127c3d8cd9 |
| Mechanic | 5a7c2eca46aef81a7ca2145d |
| Ragman | 5ac3b934156ae10c4430e83c |
| Jaeger | 5c0647fdd443bc2504c2d371 |
| Ref (Arena) | 6617beeaa9cfa777ca915b7c |

====================================================================================================
DOCUMENT: Welcome to SPT!
SOURCE: https://github.com/sp-tarkov/wiki/blob/main/Beginners_Guide.md
ARCHIVE PATH: SPT/Official_Wiki/SEARCHABLE/Beginners_Guide.md
====================================================================================================

<!--
OFFLINE ARCHIVE METADATA
Title: Welcome to SPT!
Source repository: https://github.com/sp-tarkov/wiki
Source URL: https://github.com/sp-tarkov/wiki/blob/main/Beginners_Guide.md
Source branch: main
Source commit: ba82cdff8b2690885a4f240fc0c479e4997b506c
Snapshot UTC: 2026-08-02T12:22:05+00:00
Detected applicability: SPT - version not explicitly stated
-->

---
title: Beginner's Guide
description: A beginner's overview of the SPT project.
published: true
date: 2025-12-19T07:08:18.427Z
tags: 
editor: markdown
dateCreated: 2025-07-22T10:13:29.789Z
---

# Welcome to SPT!

## What is SPT?
SPT is a modding framework for Escape From Tarkov made for people who want to play offline singleplayer with progression similar to live. It's made by fans for fans

## Features
- Offline: No internet connection required, completely offline, no connection to BSG's servers in any shape or form.
- Progression: You can progress through the game as you would in live.
- Accurate: Many of the game's systems behave exactly the same as live.
- Stable: No disconnects mid-raid, no cheaters to ruin your raid.
- Moddable: Completely configurable to your need through the modding system.
- Legit: It requires a legally purchased copy of the game to play.
- Free of charge: You don't need to buy the software or the source code of the project to play.
- Open source: You are free to inspect, fork and build the project from our source code for non-commercial purposes.

## Official links
- [Official website](https://www.sp-tarkov.com/)
- [SPT Forge](https://forge.sp-tarkov.com/) - The home of the community and mods
- [Discord Server](http://discord.sp-tarkov.com/) - The other home of the community and best place to ask for support
- [Documentation](https://docs.sp-tarkov.com/)
- [Development](https://dev.sp-tarkov.com/)
- [Github](https://github.com/sp-tarkov/)
- [Patreon](https://www.patreon.com/sptarkov)

## Getting started
- [System Requirements](/system-requirements): The system requirements to run SPT.
- [How SPT Works](/How_SPT_Works): The basics of how SPT works.
- [Installation Guide](/Installation_Guide): A step by step guide on how to install and initially setup SPT.
- [Frequently Asked Questions (FAQs)](/FAQs_40): Answers to frequently asked questions.
- [Profiles](/Profiles): How profiles work in SPT.
- [Understanding Mod Types](/Mod_Types): Learn the difference between server mods and client mods.
- [Installing Mods](/Installing_Mods): General guide on adding mods to your game.
- [Recommended Mods](/Recommended_Mods_40): A selection of recommended mods to improve your SPT experience.
- [Performance Tuning](/Performance_Tuning): Tips for improving FPS and stability.

## Helping out
The best way to help is to give some of your time and energy to keep this place running!
- Be an active community member and keep this place lively!
- Have your friends join our [Discord](http://discord.sp-tarkov.com/) server.
- Contribute to the project (feel free to ask how to best contribute over at ⁠[`#dev-community`](https://discord.com/channels/875684761291599922/875707258074447904).
- Help translate the project on [Crowdin](https://crowdin.com/project/spt-translation).
- Make mods.
- Write tutorials and documentation for the community.
- Help covering server hosting costs by subscribing to our [Patreon](https://www.patreon.com/sptarkov).