> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ss14.art/llms.txt
> Use this file to discover all available pages before exploring further.

# Content Bundles

<Warning>
  В разработке, ещё не финальная версия
</Warning>

Launcher имеет возможность напрямую запускать «content bundles» без подключения к серверу. Content bundles — это самодостаточные zip-файлы, содержащие контент, который будет загружен клиентом игры. Content bundles также могут базироваться на обычной загруженной версии контента, и в этом случае сначала будут загружены и смонтированы эти ресурсы.

Изначальный вариант использования content bundles — это реплеи в Space Station 14. Пакет содержит данные реплея вместе с необходимыми метаданными, чтобы заставить launcher загрузить соответствующую версию игры. Это упрощает распространение реплеев в виде простых zip-файлов, которые можно легко передать в launcher администраторам или игрокам.

Content bundles — это универсальная система, поэтому она также может быть полезна для распространения других вещей.

## Формат

Content bundles — это обычные zip-файлы. [Вы знаете, что это такое](https://en.wikipedia.org/wiki/ZIP_\(file_format\)).

Содержимое zip-файла монтируется непосредственно в корень VFS игры. `/foo.txt` будет доступен как `/foo.txt` для игры.

Если указана базовая сборка (см. ниже), контент для базовой сборки будет загружен и также загружен вместе с content bundle. Такой контент базовой сборки имеет приоритет над content bundle, поэтому заменить файлы в базовой сборке невозможно.

Специальный файл `/rt_content_bundle.json` интерпретируется игрой для получения базовых метаданных, необходимых для работы, таких как версия engine.

### `rt_content_bundle.json`

Вот JSON-данные, которые могут быть в `rt_content_bundle.json`:

```json theme={null}
// JSON-комментарии не принимаются launcher, они только для пояснения.
{
  // Обязательно: версия engine для использования.
  "engine_version": "0.124.0.0",
  // Опционально: удалённая сборка для загрузки как базовая.
  // Если не указана, удалённая сборка не загружается.
  "base_build": {
    // Эти свойства в основном эквивалентны тому, что возвращается через HTTP /info API сервера.
    "fork_id": "wizards",
    "version": "2f6d909e443ecb501b916b69a2996acb351cc216",
    "download_url": "https://cdn.centcomm.spacestation14.com/builds/wizards/builds/2f6d909e443ecb501b916b69a2996acb351cc216/SS14.Client.zip",
    "hash": "a306c7b16b6bca9d7bd56a017c6fb50ba6205bd9f58b40752fe9ed9bd21ed195",
    "manifest_download_url": "https://cdn.centcomm.spacestation14.com/cdn/version/2f6d909e443ecb501b916b69a2996acb351cc216/download",
    "manifest_url": "https://cdn.centcomm.spacestation14.com/cdn/version/2f6d909e443ecb501b916b69a2996acb351cc216/manifest",
    "manifest_hash": "1657E0BD25D640946453E11F1B7E95D5FAF5B4E1087330D0692BAB2EFD1E6F00"
  }
}
```

## Безопасность side-loading

Content bundles теоретически делают довольно лёгким внедрение читов в игру вместе с остальным официальным контентом сервера. Теоретически можно создать content bundle, который просто содержит дополнительный читательский код в `/Assemblies/` и в остальном загружает последнюю версию любого сервера, к которому вы подключаетесь.

Для смягчения этого [Content Manifests](../../robust-toolbox/content-manifests) позволяют ограничить список сборок, которые будут загружены из `/Assemblies/`, через свойство `clientAssemblies`. Так как content bundles всегда загружаются *после* содержимого игры, они не могут заменить какие-либо файлы, и серверы могут ограничить загружаемые сборки только теми, которые они предоставляют.

## Аутентификация

Content bundles запускаются с **отключённой** аутентификацией. Launcher не будет предоставлять клиенту токен аутентификации, поэтому невозможно подключиться к серверам с аутентификацией через content bundle (чтобы вы там ни пытались сделать...).

(Да, я знаю, что только что написал целый раздел про side-loading выше. Я передумал и не хочу его удалять. Аааа.)
