Переменные и флаги
В историях 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, которые движок подставляет
в текст на лету при показе игроку — они не хранятся как состояние, а просто читают текущие данные профиля.
Полный список — в разделе «Стадии и диалоги».
Как проектировать состояние истории
- Для «да/нет» прогресса (взял/не взял, встретил/не встретил) — используйте флаги через
has/!has. - Для «сколько» (репутация, счётчики) — заводите собственную числовую переменную.
- Не переиспользуйте одно и то же имя флага в разных, не связанных друг с другом историях — состояние общее на уровне инвентаря игрока, а не изолировано по истории.
- Не забывайте «убирать за собой»: если флаг был нужен только для отслеживания одного шага, заберите его
действием
remove, когда шаг пройден, — это упрощает отладку условий на поздних стадиях.