Сердце современного квеста: один движок дирижирует всеми комнатами, светом, звуком, видео и механикой — по сценарию, который вы пишете в простом YAML. Слушает устройства по MQTT, исполняет правила «событие → условие → действие» и ведёт конечный автомат квеста.
Вся логика квеста — в одном месте, а не размазана по контроллерам в стенах. Устройства остаются «глупыми» и заменяемыми, а весь ум живёт в сценарии.
Конечный автомат под контролем движка: idle → prepare → active → win, игровой таймер, переменные и десятки отложенных действий — всё в одном согласованном состоянии.
MQTT-сообщение (regex с именованными группами) или изменение переменной (from→to); список = ИЛИ.
Безопасный мини-язык (не eval): статус квеста, переменные, статус и «пройдена ли» каждой задачи, таймеры.
Публикация в любые топики, смена переменных, переход статуса, отмена; шаблоны {vars.x}, {match.n}.
«Через 87 с включить лазер» — можно перепланировать и отменять по имени.
max_fires«Только один раз за игру» — без флагов-костылей.
restart, set:players:5, vars_dump; свои команды — правилами сценария.
Свет, звук, видео и механика разных комнат — синхронно, с точностью до миллисекунд.
# запускается оркестровка на 90 секунд - id: положили жука с меткой on: {topic: eye_table/report, match: "^bug_tag$"} if: quest.status == 'active' max_fires: 1 do: - pub: {to: entrance-mp/command, msg: "play:f2.mp4"} # видео - pub: {to: [lamp1/command, lamp2/command], msg: "fire:set_brightness,10,2000"} - pub: {to: eye_table/command, msg: "laser:on"} delay: 87000 name: лазер # лазер — ровно через 87 с - pub: {to: sun_bug/command, msg: "set_status:active"} delay: 87000 name: вторая_комната # и одновременно оживает 2-я комната
Операция на живом сердце
Движок следит за файлом сценария и применяет изменения на лету — команду не нужно останавливать, игру прерывать не нужно.
max_fires-правила не сбрасывают счётчики.restart: unless-stopped + healthcheck по heartbeat — зависший процесс перезапустится сам.docker logs и в дневные файлы; каждое правило именовано (видно, что сработало).# запуск — три команды cp .env.example .env cp scenario.example.yaml scenario.yaml docker compose up -d --build
Расскажите о проекте — предложим сценарий и внедрение под ключ.
Написать нам