Skip to content

Переменные и состояние ​

По умолчанию среда выполнения скриптов является изолированной. Любые локальные переменные, объявленные внутри скрипта, существуют только в момент его выполнения и уничтожаются сразу после завершения работы кода.

Для сохранения данных между запусками скриптов и передачи информации в игровой клиент используется объект контекста ctx и Редактор переменных.

Области видимости контекста ​

Объект ctx предоставляет доступ к двум уровням состояния:

  • ctx.team (Командные переменные) — хранят состояние для конкретной команды. Каждая команда имеет свой независимый набор этих переменных. Если в Редакторе переменных заведена командная переменная money, в скрипте она доступна как ctx.team.money.
  • ctx.game (Глобальные переменные) — хранят общее состояние для всего квеста, единое для всех команд. Изменение глобальной переменной одной командой отразится на данных, доступных всем остальным командам.

Редактор переменных и сохранение данных ​

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

Любые свойства, добавленные в ctx.team или ctx.game исключительно через код и не зарегистрированные в Редакторе переменных, будут уничтожены после завершения текущего запуска скрипта.

Инициализация сложных структур данных ​

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

javascript
// Проверка на то, что конфигурация еще не задана
if (!(ctx.game.state && ctx.game.state.intitialized)) {
  ctx.game.state = {
    intitialized: true,  
    shots: 6,
    maxHP: 1000,
    items: []
  }; 
}

TIP

Вложенные свойства объекта state не нужно отдельно заводить в Редакторе переменных, достаточно зарегистрировать саму переменную state.*

Вывод данных в игровой клиент ​

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

Движок накладывает строгие ограничения на типы данных для отображения в клиенте:

  1. В клиенте можно отображать только примитивные значения — числа и строки.
  2. Вывести значение свойства объекта, массив или элемент массива напрямую в клиент нельзя.

Копирование значений для вывода ​

Если игровая логика опирается на сложные объекты (как в примере с ctx.game.state), для отображения конкретного параметра игрокам необходимо скопировать его значение в отдельную примитивную переменную, заранее созданную в Редакторе переменных.

Пример: Предположим, необходимо показать игроку текущее количество выстрелов из глобального объекта state.

  1. В Редакторе переменных создается командная переменная displayShots.
  2. В скрипте выполняется обновление данных и копирование нужного значения:
javascript
// Игровая логика: уменьшаем количество выстрелов в объекте
ctx.game.state.shots -= 1;

// Копируем примитивное значение (число) в переменную для вывода в клиент
ctx.team.displayShots = ctx.game.state.shots;

В интерфейсе игрового клиента настраивается вывод переменной displayShots.