Перейти к основному содержимому

Условия (condition)

Условия — универсальный язык, который используется буквально везде: в вариантах текста стадии (texts), в переходах (transfers), в точках на карте, в отрядах NPC и в чекпоинтах заданий. Выучив его один раз, вы сможете управлять видимостью и доступностью чего угодно в игре — без кода.

Условие — это объект вида { ключ: [значение] }. Пустой объект {} означает «условие всегда выполнено».

Проверка наличия (has / !has)

{ "has": ["дело_сидоровича"] }
{ "!has": ["дело_сидоровича"] }

has проверяет, есть ли у игрока в инвентаре предмет или произвольный текстовый флаг. Флаг — это просто строка-метка без визуального представления, которую можно выдать действием add и использовать как «переменную состояния» истории (например, "дело_сидоровича" как отметку «квест начат»). !has — отрицание: условие выполняется, если у игрока нет такого предмета/флага.

Это самый частый способ хранить прогресс истории: не нужен отдельный механизм «стадий состояния» — прогресс целиком описывается набором флагов и предметов в инвентаре.

Сравнение переменных

{ "money>=": ["500"] }
{ "xp<": ["1000"] }
{ "Разум>=": ["1"] }

Ключ — это <имя_переменной><оператор>, доступные операторы: =, ==, ===, !=, <, <=, >, >=. Встроенные переменные — money (деньги) и xp (опыт), но можно использовать и собственное имя переменной, заведённое автором истории (как Разум в примере выше) — движок хранит такие пользовательские счётчики в параметрах игрока (parametersMap) наравне со встроенными.

Кастомные переменные — мощный приём

Собственные числовые переменные удобны для морали/репутации персонажа, счётчика выполненных заданий фракции, уровня доверия конкретного NPC и т.п. — всего, что не сводится к простому «есть/нет предмета». Меняются такие переменные действием add с числовым значением.

Как выбирается подходящий вариант

Условия в списках (texts, transfers) проверяются по порядку, побеждает первый подошедший элемент. Поэтому специфичные условия принято ставить в начало списка, а вариант «по умолчанию» (condition: {}) — в конец.

Где ещё используются условия

ГдеЭффект условия
texts[].conditionКакой вариант текста показать
transfers[].conditionПоказывать ли этот вариант ответа/перехода
Точка на карте (points[].condition)Видна ли точка на карте игроку прямо сейчас
Отряд NPC (spawns[].condition)Появляется ли отряд на локации
Чекпоинт задания (checkpoints[].condition)Засчитан ли этап задания

Например, точка на карте с условием { "has": ["ключ_от_склада"] } физически не отображается на карте, пока игрок не получит ключ, — и появляется сама, без дополнительного кода, как только условие выполняется.

Далее