# Режимы редактирования

Sanny Builder поддерживает разные игры и платформы в серии Grand Theft Auto. Для этого в его состав входит конфигурация для каждой поддерживаемой игры, которая называется **режимом редактирования**.

Режим редактирования определяет следующую информацию:

* целевая игра
* пути к игровым файлам
* пути к файлам со вспомогательной информацией (имена [меток](/ru/edit-modes.md#labels), [переменных](/ru/edit-modes.md#variables), [констант](/ru/edit-modes.md#constants))

Sanny Builder хранит настройки режимов в папке `data`. Если любая из папок в этой директории содержит файл `mode.xml`, этот файл автоматически загружается как новый режим редактирования.

{% hint style="info" %}
Версии Sanny Builder до 3.9 хранили настройки режимов редактирования в файле `data\modes.xml`. Начиная с версии 3.9 этот файл был разделен на отдельные XML файлы для каждого режима.
{% endhint %}

Режимы редактирования загружаются автоматически при старте Sanny Builder. В случае необходимости, они могут быть перезагружены путем запуска Sanny Builder с [опцией](/ru/editor/cli.md#x) `-x`.

Допускается изменение и расширение существующих режимов, а также создание новых.

## Формат файла

`mode.xml` - документ в формате `XML`, который может редактироваться в любом текстовом редакторе.

Файл начинается с объявления

```xml
<?xml version="1.0" encoding="UTF-8"?>
```

После него должен идти корневой элемент `<mode>`. В файле может быть только один корневой элемент.&#x20;

`<mode>` имеет как обязательные, так и необязательные атрибуты, описанные ниже. Содержимое `<mode>` представляет собой набор различных тэгов (элементов), определяющих пути к папкам и файлам.

### Атрибуты режима

#### id

`id` - это обязательный и неповторяющийся идентификатор режима. Sanny Builder использует его для сохранения некоторых пользовательских настроек режима, например выбранной [директории игры](/ru/editor/options/general.md#direktoriya-igry).

Допустимым значением атрибута является последовательность символов, которая не используется как идентификатор другого режима редактирования.

#### extends

Режим может наследовать свойства другого режима (родительский режим), чтобы уменьшить число повторяющихся параметров. Это полезно для разных версий одной игры, где большая часть конфигурации одинакова, за исключением некоторых параметров. Родительский режим может наследовать свойства другого режима.

Если в конфигурации режима отсутствует какой-то параметр, Sanny Builder рекурсивно проходит по всем родительским режимам, чтобы найти его значение.

Допустимым значением атрибута является идентификатор другого режима редактирования, описанного в этом же файле.

#### title

`title` задает отображаемое имя режима. Из-за ограничений интерфейса избегайте длинных имен и используйте имена короче `24` символов.

#### game

Атрибут `game` определяет целевую игру для данного режима. Допустимыми значениями являются:

* `gta3`
* `vc`
* `sa`
* `lcs`
* `vcs`
* `vc_mobile`
* `sa_mobile`

Перед началом работы со скриптом, убедитесь что выбран правильный режим редактирования. Каждая игра имеет свой собственный формат скриптов, который несовместим с другими играми. Даже если компиляция прошла без ошибок, в игре может возникнуть ошибка при попытке чтения скрипта в неизвестном ей формате.

{% hint style="info" %}
В скомпилированном файле может [храниться информация](/ru/editor/options/general.md#dobavlyat-dopolnitelnuyu-informaciyu-v-scm) о целевой игре для данного скрипта. Перед началом дизассемблирования такого скрипта Sanny Builder предлагает переключить режим редактирования на нужный. Игнорирование такого предложения может привести к ошибке, т.к. формат скрипта может отличаться от того, что ожидает дизассемблер.
{% endhint %}

Для удобства пользователей Sanny Builder отображает иконку целевой игры напротив имени режима.&#x20;

#### type

Один из режимов для каждой целевой игры должен быть режимом по умолчанию. Это означает, что Sanny Builder использует его при запуске с [опцией](/ru/editor/cli.md#game) `--game`.

Допустимым значением атрибута является `default.` Не указывайте этот атрибут для остальных режимов.

### Параметры режима

#### arrays

путь к [`CustomArrays.ini`](/ru/coding/arrays.md)

#### classes

путь к [`classes.db`](/ru/coding/classes.md)

#### constants

путь к[`constants.txt`](/ru/coding/constants.md)

#### copy-directory <a href="#copy-directory" id="copy-directory"></a>

путь к директории, в которую нужно скопировать скрипт при запуске `Компилировать и сделать копию`:

Имеет обязательный атрибут `type`:\
`type="scm"` - применяется к обычным `.scm` скриптам \
`type="cleo"` - применяется к скриптам с [директивой](/ru/coding/directives.md#usdcleo)  `{$CLEO}`

#### data

путь к директории режима редактирования

**enums**

путь к [enums.txt](/ru/edit-modes/enums.txt.md)

#### ide

путь к `.ide` или `.dat` файлу:\
`.ide` файлы содержат [имена моделей](/ru/coding/data-types.md#imena-modelei) и их характеристики\
`.dat` файлы содержат пути к другим `.ide` файлам

Элемент `ide` имеет необязательный атрибут `base`, который задает папку, относительно которой расчитываются пути, определенные внутри `.dat` файла:

```xml
<ide base="@game:\">default.dat</ide>
```

Без `base` все пути расчитываются относительно папки с `.dat` файлом.

Режим редактирования может иметь несколько элементов `<ide>`.

#### keywords

путь к файлу со списком [ключевых слов](/ru/coding/keywords.md)

#### labels

путь к [`CustomLabels.ini`](/ru/edit-modes/customlabels.ini.md)

#### missions

путь к [`missions.txt`](/ru/editor/features.md#ispolzovanie-originalnykh-imen-missii)

#### `library`

путь к JSON файлу с определениями скриптовых команд, используемых в целевой [игре](/ru/edit-modes.md#game). доступен для скачивания в [Sanny Builder Library](/ru/editor/features.md#integration-with-sanny-builder-library),&#x20;

#### opcodes

путь к файлу со [списком опкодов](/ru/edit-modes/opcodes-list-scm.ini.md). может использоваться неоднократно для подключения нескольких файлов. является необязательным параметром, если используется **library** (см. выше).

#### templates

путь к файлу с [эксклюзивными шаблонами](/ru/edit-modes/code-templates.md)

Имеет обязательный атрибут `type`:\
`type="default"` - путь к файлу с шаблонами, включенными в состав Sanny Builder\
`type="custom"` - путь к файлу с пользовательскими шаблонами, [добавленными](/ru/edit-modes/code-templates.md#adding-a-new-template) из редактора

#### text

путь к `.gxt` файлу

`<text>` имеет обязательный атрибут: `format`. Допустимыми значениями являются:

`gta3`: `.gxt` с одной таблицей, текстовыми ключами, кодировкой ANSI\
`vc`: `.gxt` с несколькими таблицами, текстовыми ключами, кодировкой ANSI\
`sa`: `.gxt` с несколькими таблицами, зашифрованными ключами, кодировкой ANSI\
`sa_mobile`: `.gxt` с несколькими таблицами, зашифрованными ключами, кодировкой UTF-16

#### variables

путь к [`CustomVariables.ini`](/ru/coding/variables.md)

#### examples

путь к [`opcodes.txt`](/ru/editor/opcode-search-tool.md)

### Доступные переменные

Sanny предоставляет несколько переменных, которые могут использоваться в параметрах и атрибутах (там, где это применимо).

`@game:` - путь к [папке с игрой](/ru/editor/options/general.md#direktoriya-igry), которая выбрана в настройках\
`@sb:` - путь к папке Sanny Builder (где находится `sanny.exe`)

Оба пути не включают в себя завершающий слеш (`/`).

## Список режимов

Sanny Builder предлагает много различных режимов, их количество может меняться от версии к версии:

| Название                | Id          | Имена опкодов  | Порядок параметров | Игра                                                                                               |
| ----------------------- | ----------- | -------------- | ------------------ | -------------------------------------------------------------------------------------------------- |
| GTA III                 | gta3        | сообщество     | измененный         | все версии GTA III                                                                                 |
| GTA VC (SBL)            | vc\_sbl     | Rockstar       | первоначальный     | все версии Vice City                                                                               |
| ~~GTA VC~~              | ~~vc~~      | ~~сообщество~~ | ~~измененный~~     | <p>все версии Vice City<br>режим устарел, начиная с версии 4.0, используйте новый режим VC SBL</p> |
| GTA SA (v1.0 - SBL)     | sa\_sbl     | Rockstar       | первоначальный     | SA версия 1.0                                                                                      |
| ~~GTA SA v1.0~~         | ~~sa~~      | ~~сообщество~~ | ~~измененный~~     | <p>SA версия 1.0;<br>режим устарел, начиная с версии 4.0, используйте новый режим SA SBL</p>       |
| GTA SA v2.0             | sa\_v2      | сообщество     | измененный         | SA версия 2.0                                                                                      |
| ~~GTA SA (v1.0 - SCR)~~ | ~~sa\_scr~~ | ~~Rockstar~~   | ~~первоначальный~~ | <p>SA версия 1.0;<br>режим удален в версии 4.0, используйте новый режим SA SBL</p>                 |
| GTA LCS                 | lcs         | Rockstar       | первоначальный     | все версии Liberty City Stories                                                                    |
| GTA VCS (PSP)           | vcs\_psp    | Rockstar       | первоначальный     | VCS для PSP                                                                                        |
| GTA VCS (PS2)           | vcs\_ps2    | Rockstar       | первоначальный     | VCS для PS2                                                                                        |
| VC Mobile               | vc\_mobile  | сообщество     | измененный         | версия для Android и iOS                                                                           |
| SA Mobile               | sa\_mobile  | сообщество     | измененный         | версия для Android и iOS                                                                           |

Колонка `Имена опкодов` определяет способ именования опкодов. Первые имена неизвестным опкодам были даны в результате анализа игрового кода, проводимого сообществом скриптеров в течение многих лет. Так появились такие термины как "актёр" ("actor") или "поток" ("thread"). Альтернативой является оригинальная терминология, использованная разработчиками игры (соответственно, "персонаж" ("char") или "скрипт" ("script")). Эта терминология вместе со списком оригинальных названий всех опкодов оказались доступны в коде игры GTA SA: Mobile.  &#x20;

`Порядок параметров` определяет как расположены параметры опкода относительно друг друга. В первоначальном порядке все параметры находятся в той последовательности, как было задумано разработчиками игры, от параметра с наименьшим индексом к параметру с наибольшим индексом. Измененный порядок подразумевает, что в некоторых опкодах параметры переставлены местами для повышения читаемости кода или по иным причинам.

Сочетание оригинальной терминологии и сохранение порядка следования параметров обеспечивает максимальное сходство скриптов с тем языком, который использовали разработчики игры.

## Переключение режимов

Чтобы переключить режим редактирования, кликните в правом нижнем углу программы. Появится список доступных режимов. Выберите нужный и кликните по нему. Sanny Builder загрузит все требуемые файлы и вы сразу можете продолжить работу.

![](/files/-M11n8tgn2zH-yLlRZmJ)

Выбрать режим через командную строку можно с [опцией](/ru/editor/cli.md#mode) `--mode`. Чтобы выбрать режим по умолчанию для какой-либо игры, используйте [опцию](/ru/editor/cli.md#game) `--game`.

Запуск Sanny Builder с [опцией](/ru/editor/cli.md#x) `-x` перезагружает режимы редактирования и обновляет список доступных режимов.

{% hint style="info" %}
Вы можете зарегистрировать новое сочетание клавиш для быстрого обновления режимов редактирования без необходимости перезапуска Sanny Builder. Добавьте новый элемент в [меню внешних приложений](/ru/editor/features.md#menyu-vneshnikh-prilozhenii):

Путь: `sanny.exe`\
Параметры: `-x --no-splash`\
Shortcut: `<any combo of your choice>`

<img src="/files/rDJtGkfiFONxOLeokFOU" alt="" data-size="original">
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sannybuilder.com/ru/edit-modes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
