> For the complete documentation index, see [llms.txt](https://docs.bestway.com.ua/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bestway.com.ua/gem-rts-v1-ru/lokalizaciya/peremennye-stroki-v-lokalizacii.md).

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

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

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

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

`<&mouse_action_key>`

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

<figure><img src="https://2052154247-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fx2fkAZ6oKGGdByFhKPpa%2Fuploads%2FDQsHsy0pWeONLyjIRDSt%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202024-03-11%20%D0%B2%2018.57.03.png?alt=media&amp;token=d84c8520-14b7-4d00-9e4f-3e32b9b498be" alt=""><figcaption><p>Переключение в настройках игры команд с правой кнопки мыши на левую</p></figcaption></figure>

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

`<&optkey:anyAction>`

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

<details>

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

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

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

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

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

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

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

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

`{...{name "[action_name]"} ...{key "actions/[action_name]"}...}`

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

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

</details>

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

`<&key:keycode>`

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

<details>

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

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

```
<&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>

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

`<&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>
