Fix city generation retries and remove city-wide economy mechanics

This commit is contained in:
mrleo1nid committed 2026-10-30 22:54:06 +03:00
1 parent 85df37c26e
commit 63f0c72ff3
21 files changed
+252 -585

No files matched your search

+14 -24
View File
@@ -25,7 +25,10 @@
Ник уникален в комнате, сессия выдаётся сервером. Пауза и скорости 1/2/4
принимаются большинством более половины подключённых игроков. Голосование
длится 20 с; интервал предложений игрока — 30 с. Владелец и привилегии
создателя отсутствуют. Создание ограничено одним запросом с IP в минуту.
создателя отсутствуют. Создание ограничено одним новым городом и одной новой
комнатой с IP в минуту (независимые лимиты). Повторный запрос той же области
возвращает уже принятую задачу без расхода лимита. Отказ 429 содержит
`Retry-After` и `retryAfterSeconds` с оставшимся временем ожидания.
Снимки Protobuf кодируются и записываются отдельным ограниченным по очереди
потоком, атомарно заменяются и ротируются; голоса и подключения
@@ -53,6 +56,10 @@
`CityJob` из общей схемы передаются по HTTP как `application/x-protobuf`.
Каталог и создание комнаты используют JSON. Задания очереди не переживают
перезапуск; готовые города и снимки комнат сохраняются на диске.
Ссылка `/?create-city&job=ID` возобновляет ожидание после обновления страницы.
Серверные запросы Overpass используют User-Agent приложения и таймаут 90 с
(браузерный отладочный генератор — 45 с). Прогресс включает выбранный сервер
и повторные попытки; технический stderr воркера остаётся в логах сервера.
`/health` проверяет доступность; `/metrics` отдаёт число игроков/комнат,
тик, время последнего и максимального шага, число сущностей и байты очереди рассылки каждой
@@ -73,27 +80,10 @@ LOD и выводят трафик, выборку длительности ти
Compose, постоянные тома, лимиты, healthcheck и профиль Prometheus описаны
в [deploy/README.md](../deploy/README.md).
## Игровой слой
## Совместимость сохранений
Голод, усталость и настроение моделируются как усреднённые показатели
населения комнаты. Они меняются по игровому календарю независимо от камеры.
Сон ночью восстанавливает силы; питание трижды в день тратит запасы еды.
Голод и усталость снижают производство и доход казны в рабочие часы.
Почасовые события (урожай, болезнь, дождь) детерминированы seed и временем.
История ограничена 16 событиями. Это базовая экономика общего города;
индивидуальные кошельки, машины и детальное использование мебели не включены.
Все игроки имеют одинаковые права на три команды: покупка запасов
(2 единицы казны на жителя), общий обед (1), отдых (3). Цена списывается
при приёме, действие исполняется в следующую игровую минуту. Сервер проверяет
ресурсы, паузу, очередь (до 8), общий интервал 60 игровых минут и интервал
сессии 30 реальных секунд. Общий интервал переживает переподключение.
Пауза и скорость по-прежнему требуют большинства голосов.
Снимки v2 сохраняют экономику, потребности, историю, очередь и общий интервал.
Для v1 игровой слой инициализируется по числу жителей и сохранённому времени;
позиции, seed и расписания сохраняются. Неизвестные версии не перезаписываются.
Квота проверяется под общей блокировкой писателей комнат; при нехватке места
прежние снимки остаются. Один снимок ограничен 128 МиБ.
`/?admin` и API с Bearer-токеном показывают каталог, ошибки, квоту
и позволяют сохранить активную комнату.
Снимки v3 загружаются вместе с прежними v1/v2. Удалённые поля городской
экономики отбрасываются; жители, маршруты, время и seed сохраняются.
Общегородская казна, запасы, усреднённые потребности и массовые команды удалены.
Пауза и скорость по-прежнему принимаются голосованием.
Квота снимков и администрирование продолжают работать.