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

Переменные и флаги

В историях Stalker PDA нет отдельной «базы данных квеста» — всё состояние хранится в том же инвентаре и параметрах, что и обычные игровые предметы. Это осознанное упрощение движка, и его стоит понимать, прежде чем проектировать длинную историю с множеством развилок.

Флаги как метки прогресса

Флаг — это произвольная текстовая строка, которую действие add кладёт в инвентарь игрока, а condition (has / !has) потом проверяет. У флага нет иконки и веса — для игрока он не отличим от обычной записи в журнале заданий, если вы его правильно назовёте.

// Стадия «Принять задание»
"actions": { "add": ["дело_сидоровича"] }

// Более поздняя стадия проверяет прогресс
"transfers": [
{ "text": "Что по заданию?", "stage": "stage_progress", "condition": { "has": ["дело_сидоровича"] } }
]

// Стадия завершения задания забирает флаг
"actions": { "remove": ["дело_сидоровича"], "add": ["награда_за_дело"] }
Соглашение об именовании

Используйте понятные, уникальные по всей истории названия флагов (например, quest_sidorovich_started, quest_sidorovich_done) — это snapshot-подобные метки, а не переменные с типами, поэтому опечатка в названии молча сломает условие, а не выдаст ошибку.

Числовые переменные

Кроме флагов, есть встроенные числовые переменные money и xp, а также собственные переменные, которые вы вольны завести сами — движок хранит их в общей карте параметров игрока (parametersMap) и сравнивает операторами =, !=, <, <=, >, >= (см. условия).

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

"actions": { "add": ["Доверие_Сидоровича:1"] }
"condition": { "Доверие_Сидоровича>=": ["3"] }

Плейсхолдеры в тексте

Отдельно от флагов/переменных состояния работают текстовые плейсхолдеры вида @name, которые движок подставляет в текст на лету при показе игроку — они не хранятся как состояние, а просто читают текущие данные профиля. Полный список — в разделе «Стадии и диалоги».

Как проектировать состояние истории

  1. Для «да/нет» прогресса (взял/не взял, встретил/не встретил) — используйте флаги через has/!has.
  2. Для «сколько» (репутация, счётчики) — заводите собственную числовую переменную.
  3. Не переиспользуйте одно и то же имя флага в разных, не связанных друг с другом историях — состояние общее на уровне инвентаря игрока, а не изолировано по истории.
  4. Не забывайте «убирать за собой»: если флаг был нужен только для отслеживания одного шага, заберите его действием remove, когда шаг пройден, — это упрощает отладку условий на поздних стадиях.