# Типы данных

Код разделен на отдельные элементы, каждый из которых обозначается по-своему и играет свою роль в скрипте.

## Переменные

Если перед именем переменной (комбинация букв, цифр, и `_`) стоит знак `$` - это [глобальная переменная](/ru/coding/variables.md#globalnye-peremennye).

```
0004: $MyVar = 100
```

Именем [локальной переменной](/ru/coding/variables.md#lokalnye-peremennye) может быть только число, после которого стоит `@`.  Это число является индексом в списке локальных переменных, [выделенных](/ru/scm-documentation/gta-limits.md) для текущего скрипта или миссии.

```
0006: 100@ = 10
```

Переменная `ADMA` (**A**dvanced **D**irect **M**emory **A**ccess, усовершенствованный доступ к памяти) - это указатель на определенный адрес внутри файла `main.scm`. Они используются так же как глобальные переменные, но в отличие от них `ADMA` могут читать и писать значения по любому адресу в пределах `main.scm`.&#x20;

```
$myVar = &0 // прочитать первые 4 байта main.scm и записать значение в $myVar
&57 += &120(&231,4i) // также могут использоваться как элементы массива
```

`ADMA` переменные не влияют на размер буфера для глобальных переменных, выделенного в заголовке `main.scm`.

## Метки

Метки указывают на определенную строку кода и используются в условных (опкод `004D`) и безусловных переходах (опкоды `0002`, `0050`). Имя метки состоит из букв, цифр и `_` и всегда начинается с `:`

```
:MyLabel
```

Чтобы использовать такую метку в опкоде замените `:` на `@`

```
0002: jump @MyLabel
```

Если имя метки написано как самостоятельное выражение с парой скобок в конце, это представляет собой вызов подпрограммы командой `gosub`:

```
// следующие выражения эквивалентны
MyLabel()
gosub @MyLabel
```

## Строковые литералы

Текст,  обрамленный одинарными кавычками `' '`, - это короткий строковый литерал (до `15` символов).

```
03A4: script_name 'MAIN'
```

Текст,  обрамленный двойными кавычками `" "`, - это длинный строковый литерал (максимальная длина определяется опкодом).

Если внутри литерала используется кавычка, она должна быть заэкранирована при помощи обратного слэша`\`

```
0662: write_debug_message "Hello, \"world\"! \n 'Here we go!'"
```

Допускается использование пустых строк `''` или `""`.

## Строковые переменные

Глобальные переменные, содержащие короткий строковый литерал, начинаются с `s$`.

```
05A9: s$MyString = 'GLOBAL'
```

Локальные переменные, содержащие короткий строковый литерал, заканчиваются на `@s`.&#x20;

```
05AA: 1@s = 'LOCAL'
```

Глобальные переменные, содержащие длинный строковый литерал, начинаются с  `v$`.&#x20;

```
06D1: v$MyString = "LONG_GLOBAL"
```

Локальные переменные, содержащие длинный строковый литерал, заканчиваются на `@v`.&#x20;

```
06D2: 1@v = "LONG_LOCAL"
```

## Имена моделей

Вместо ID моделей из `.ide` файлов могут использоваться их имена, перед которыми стоит `#`&#x20;

```
0247: request_model #CELLPHONE
```

## Числа в 16-ричном формате <a href="#hex-numbers" id="hex-numbers"></a>

`0x` - число в шестнадцатиричном формате\
`-0x` - отрицательное число в шестнадцатиричном формате

```
0004: $var = -0xBB08
```

Разрешенный диапазон шестнадцатиричных чисел лежит между `-80000000` и `7FFFFFFF`.


---

# 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/coding/data-types.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.
