# Переменные строки в локализации

В Настройках игры доступна функция настройки клавиши отдачи команд и назначения для действий в игре горячих клавиш. В связи с этим возникает необходимость идентификации соответствующих клавиш в файлах локализации. Для этого используются переменные строки.

## Типы переменных строк

### Отдача команд в игре

`<&mouse_action_key>`&#x20;

{% hint style="info" %}
Способ отдачи команд в игре задается в `Настройках` игры. \
По умолчанию работает управление по ПКМ. \
При выставленном флажке в поле "Команды левой клавишей мыши" команды будут отдаваться по ЛКМ.
{% endhint %}

<figure><img src="/files/NGJLl76WwqLzokFqsX5l" alt=""><figcaption><p>Переключение в настройках игры команд с правой кнопки мыши на левую</p></figcaption></figure>

### Указание действия в игре

`<&optkey:anyAction>`

При выводе локализационных текстов вместо  `<&optkey:anyAction>` будет подставляться значение, соотвествующее настройкам пользователя, записанное в файле `keys.opt`

<details>

<summary>Пример указания в локализационных текстах горячих клавиш для действий</summary>

Допустим, действие "`отмена"` `[cancel]` назначено на клавишу Z.\
Тогда в файле `keys.opt` будут строки:

```
{"actions/cancel"
    {value KEY_Z}
}
```

&#x20;Для действия `actions/cancel` строки локализации могут выглядеть следующим образом:

```
{"stand_still" "Для отмены приказа нажмите хоткей <&optkey:actions/cancel>."}
```

Соответственно, игре в тексте на месте  переменной строки `<&optkey:actions/cancel>` будет выводиться буква `Z` и игрок увидит текст:

"**Для отмены приказа нажмите хоткей Z.**"

**Примечание:** чтобы действие находилось по хоткею необходимо, чтобы в файле `action.set` для соответствующего действия был прописан параметр  `key`.

&#x20;`{...{name "[action_name]"} ...{key "actions/[action_name]"}...}`

Если нужно добавить возможность вызвать действие по хоткею, можно создать файл `action+.set` и воспользоваться блоком с параметром `modify`. \
Например, для действия "Отмена":

```
{modify "cancel"...{key "actions/cancel"}...}
```

</details>

### &#x20;Указание конкретной кнопки

`<&key:keycode>`

Используется для указания конкретной кнопки клавиатуры.&#x20;

<details>

<summary>Пример указания в локализационных текстах конкретной кнопки</summary>

Для клавиши пробел переменная строка будет выглядеть как&#x20;

```
<&key:key_space>
```

</details>

Для указания кнопок необходимо использовать значения из списка keycode.

<details>

<summary>Список значений keycode для клавиш клавиатуры</summary>

Примечание: для повышения читабельности необходимо писать в нижнем регистре

keymap\["KEY\_ESCAPE"] = 0x01;

keymap\["KEY\_1"] = 0x02;

keymap\["KEY\_2"] = 0x03;

keymap\["KEY\_3"] = 0x04;

keymap\["KEY\_4"] = 0x05;

keymap\["KEY\_5"] = 0x06;

keymap\["KEY\_6"] = 0x07;

keymap\["KEY\_7"] = 0x08;

keymap\["KEY\_8"] = 0x09;

keymap\["KEY\_9"] = 0x0A;

keymap\["KEY\_0"] = 0x0B;

keymap\["KEY\_MINUS"] = 0x0C;

keymap\["KEY\_EQUALS"] = 0x0D;

keymap\["KEY\_BACK"] = 0x0E;

keymap\["KEY\_TAB"] = 0x0F;

keymap\["KEY\_Q"] = 0x10;

keymap\["KEY\_W"] = 0x11;

keymap\["KEY\_E"] = 0x12;

keymap\["KEY\_R"] = 0x13;

keymap\["KEY\_T"] = 0x14;

keymap\["KEY\_Y"] = 0x15;

keymap\["KEY\_U"] = 0x16;

keymap\["KEY\_I"] = 0x17;

keymap\["KEY\_O"] = 0x18;

keymap\["KEY\_P"] = 0x19;

keymap\["KEY\_LBRACKET"] = 0x1A;

keymap\["KEY\_RBRACKET"] = 0x1B;

keymap\["KEY\_RETURN"] = 0x1C;

keymap\["KEY\_LCONTROL"] = 0x1D;

keymap\["KEY\_A"] = 0x1E;

keymap\["KEY\_S"] = 0x1F;

keymap\["KEY\_D"] = 0x20;

keymap\["KEY\_F"] = 0x21;

keymap\["KEY\_G"] = 0x22;

keymap\["KEY\_H"] = 0x23;

keymap\["KEY\_J"] = 0x24;

keymap\["KEY\_K"] = 0x25;

keymap\["KEY\_L"] = 0x26;

keymap\["KEY\_SEMICOLON"] = 0x27;

keymap\["KEY\_APOSTROPHE"] = 0x28;

keymap\["KEY\_GRAVE"] = 0x29;

keymap\["KEY\_LSHIFT"] = 0x2A;

keymap\["KEY\_BACKSLASH"] = 0x2B;

keymap\["KEY\_Z"] = 0x2C;

keymap\["KEY\_X"] = 0x2D;

keymap\["KEY\_C"] = 0x2E;

keymap\["KEY\_V"] = 0x2F;

keymap\["KEY\_B"] = 0x30;

keymap\["KEY\_N"] = 0x31;

keymap\["KEY\_M"] = 0x32;

keymap\["KEY\_COMMA"] = 0x33;

keymap\["KEY\_PERIOD"] = 0x34;

keymap\["KEY\_SLASH"] = 0x35;

keymap\["KEY\_RSHIFT"] = 0x36;

keymap\["KEY\_MULTIPLY"] = 0x37;

keymap\["KEY\_LALT"] = 0x38;

keymap\["KEY\_SPACE"] = 0x39;

keymap\["KEY\_CAPSLOCK"] = 0x3A;

keymap\["KEY\_F1"] = 0x3B;

keymap\["KEY\_F2"] = 0x3C;

keymap\["KEY\_F3"] = 0x3D;

keymap\["KEY\_F4"] = 0x3E;

keymap\["KEY\_F5"] = 0x3F;

keymap\["KEY\_F6"] = 0x40;

keymap\["KEY\_F7"] = 0x41;

keymap\["KEY\_F8"] = 0x42;

keymap\["KEY\_F9"] = 0x43;

keymap\["KEY\_F10"] = 0x44;

keymap\["KEY\_NUMLOCK"] = 0x45;

keymap\["KEY\_SCROLL"] = 0x46;

keymap\["KEY\_NUMPAD7"] = 0x47;

keymap\["KEY\_NUMPAD8"] = 0x48;

keymap\["KEY\_NUMPAD9"] = 0x49;

keymap\["KEY\_SUBTRACT"] = 0x4A;

keymap\["KEY\_NUMPAD4"] = 0x4B;

keymap\["KEY\_NUMPAD5"] = 0x4C;

keymap\["KEY\_NUMPAD6"] = 0x4D;

keymap\["KEY\_ADD"] = 0x4E;

keymap\["KEY\_NUMPAD1"] = 0x4F;

keymap\["KEY\_NUMPAD2"] = 0x50;

keymap\["KEY\_NUMPAD3"] = 0x51;

keymap\["KEY\_NUMPAD0"] = 0x52;

keymap\["KEY\_DECIMAL"] = 0x53;

keymap\["KEY\_F11"] = 0x57;

keymap\["KEY\_F12"] = 0x58;

keymap\["KEY\_F13"] = 0x64;

keymap\["KEY\_F14"] = 0x65;

keymap\["KEY\_F15"] = 0x66;

keymap\["KEY\_KANA"] = 0x70;

keymap\["KEY\_CONVERT"] = 0x79;

keymap\["KEY\_NOCONVERT"] = 0x7B;

keymap\["KEY\_YEN"] = 0x7D;

keymap\["KEY\_NUMPADEQUALS"] = 0x8D;

keymap\["KEY\_CIRCUMFLEX"] = 0x90;

keymap\["KEY\_AT"] = 0x91;

keymap\["KEY\_COLON"] = 0x92;

keymap\["KEY\_UNDERLINE"] = 0x93;

keymap\["KEY\_KANJI"] = 0x94;

keymap\["KEY\_STOP"] = 0x95;

keymap\["KEY\_AX"] = 0x96;

keymap\["KEY\_UNLABELED"] = 0x97;

keymap\["KEY\_NUMPADENTER"] = 0x9C;

keymap\["KEY\_RCONTROL"] = 0x9D;

keymap\["KEY\_NUMPADCOMMA"] = 0xB3;

keymap\["KEY\_DIVIDE"] = 0xB5;

keymap\["KEY\_SYSRQ"] = 0xB7;

keymap\["KEY\_RALT"] = 0xB8;

keymap\["KEY\_PAUSE"] = 0xC5;

keymap\["KEY\_HOME"] = 0xC7;

keymap\["KEY\_UP"] = 0xC8;

keymap\["KEY\_PRIOR"] = 0xC9;

keymap\["KEY\_LEFT"] = 0xCB;

keymap\["KEY\_RIGHT"] = 0xCD;

keymap\["KEY\_END"] = 0xCF;

keymap\["KEY\_DOWN"] = 0xD0;

keymap\["KEY\_NEXT"] = 0xD1;

keymap\["KEY\_INSERT"] = 0xD2;

keymap\["KEY\_DELETE"] = 0xD3;

keymap\["KEY\_LWIN"] = 0xDB;

keymap\["KEY\_RWIN"] = 0xDC;

keymap\["KEY\_APPS"] = 0xDD;

keymap\["KEY\_ESC"] = KEY\_ESCAPE;

keymap\["KEY\_ENTER"] = KEY\_ENTER;

keymap\["KEY\_BACKSPACE"] = KEY\_BACK;

keymap\["KEY\_NUMPADSTAR"] = KEY\_MULTIPLY;

keymap\["KEY\_NUMPADMINUS"] = KEY\_SUBTRACT;

keymap\["KEY\_NUMPADPLUS"] = KEY\_ADD;

keymap\["KEY\_NUMPADPERIOD"] = KEY\_DECIMAL;

keymap\["KEY\_NUMPADSLASH"] = KEY\_DIVIDE;

keymap\["KEY\_UPARROW"] = KEY\_UP;

keymap\["KEY\_PGUP"] = KEY\_PRIOR;

keymap\["KEY\_LEFTARROW"] = KEY\_LEFT;

keymap\["KEY\_RIGHTARROW"] = KEY\_RIGHT;

keymap\["KEY\_DOWNARROW"] = KEY\_DOWN;

keymap\["KEY\_PGDN"] = KEY\_NEXT;

keymap\["MOUSE0"] = MOUSE0;

keymap\["MOUSE1"] = MOUSE1;

keymap\["MOUSE2"] = MOUSE2;

keymap\["MOUSE3"] = MOUSE3;

keymap\["MOUSE4"] = MOUSE4;

keymap\["MOUSE5"] = MOUSE5;

keymap\["MOUSE6"] = MOUSE6;

keymap\["MOUSE7"] = MOUSE7;

keymap\["MOUSE\_LEFT"] = MOUSE\_LEFT;

keymap\["MOUSE\_RIGHT"] = MOUSE\_RIGHT;

keymap\["MOUSE\_MIDLE"] = MOUSE\_MIDLE;

keymap\["KEY\_CONTROL"] = KEY\_CONTROL;

keymap\["KEY\_ALT"] = KEY\_ALT;

keymap\["KEY\_SHIFT"] = KEY\_SHIFT;

keymap\["ALT"] = KF\_ALT;

keymap\["CTRL"] = KF\_CTRL;

keymap\["SHIFT"] = KF\_SHIFT;

keymap\["DOUBLE"] = KF\_DOUBLE;

keymap\["\~ALT"] = KF\_NOALT;

keymap\["\~CTRL"] = KF\_NOCTRL;

keymap\["\~SHIFT"] = KF\_NOSHIFT;

keymap\["\~DOUBLE"] = KF\_NODOUBLE.

</details>

### &#x20;Для действий из Хотбара&#x20;

`<&hotbar_key:anyAction>`

Алгоритм работы

1. Если указанное действие находится на панели Хотбара, то игра в тексте на месте переменной строки выведет значение соответствующей клавиши хотбара
2. Если указанного действия нет на панели Хотбара, то выведет значение хоткея для экшена, если он задан.\
   Иначе, выведет пустое значение `[]`

<details>

<summary>Пример использования переменной строки для действий из Хотбара</summary>

```
<&hotbar_key:actions/cancel>
```

</details>

## Пример использования переменных строк в локализации

Фрагмент .lng файла с использованием переменных строк:

{"02" " Чтобы возвести бруствер, выделите стрелков и нажмите `<&hotbar_key:barricade>`. После выберите место для начала бруствера и нажмите `<&mouse_action_key>`. Тяните курсор мыши, чтобы задать длину укрепления. Нажмите `<&mouse_action_key>` повторно, чтобы отдать приказ о возведении бруствера. "}

## Файлы настроек

<table><thead><tr><th width="331">Название файла</th><th>Назначение</th></tr></thead><tbody><tr><td><code>keys.opt</code></td><td>Настройки соответствия действий в игре [actions] хоткеям</td></tr><tr><td><code>scene\hud2\action.set</code></td><td>Файл с описаниями действий [actions] в игре</td></tr><tr><td><code>interface\text\#ingame+.lng</code></td><td>Файл локализации действий в игре</td></tr><tr><td><code>*.lng</code></td><td>Файлы локализации</td></tr></tbody></table>


---

# 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://bestway-1.gitbook.io/documentation/gem-rts-v1-ru/lokalizaciya/peremennye-stroki-v-lokalizacii.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.
