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

+10 -10
View File
@@ -4,7 +4,7 @@
## 1. Цель и рамки
Игра: симулятор бога в духе RimWorld, но с меньшим влиянием игрока. Город живёт сам (жители, машины, потребности, события), игроки в основном наблюдают и ограниченно вмешиваются. По запросу автора от 2026-10-30 этап 5 включает базовые команды вмешательства.
Игра: симулятор бога в духе RimWorld, но с меньшим влиянием игрока. Город живёт сам (жители, машины, потребности, события), игроки в основном наблюдают и ограниченно вмешиваются. Конкретные механики вмешательства требуют отдельного согласования.
Исходные требования:
@@ -172,13 +172,13 @@
- [x] Оптимизация протокола и рендера.
Бинарные дельты, квантизация, объединение пропущенных обновлений под бюджетом трафика, ограничение видимых сущностей и кэш тайлов; динамика пока на Canvas.
**Этап 5. Базовый игровой слой**
- [x] Потребности, события, экономика.
Усреднённые голод, усталость и настроение населения; сон, питание, производство еды и доход казны. События урожая, болезни и дождя воспроизводятся из seed и игрового времени. Индивидуальный ИИ жителей пока остаётся расписанием дом–работа.
- [x] Ограниченное влияние игроков (команды, права, очереди, лимиты).
Покупка запасов, общий обед и отдых; одинаковые права подключённых игроков, цена из общей казны, ограниченная очередь, общий часовой игровой интервал и интервал сессии. Пауза/скорость остаются голосованием.
**Этап 5. Игровой слой**
- [ ] Потребности, события, экономика.
Общегородская казна, запасы и усреднённые потребности удалены по просьбе автора. Индивидуальный ИИ жителей пока остаётся расписанием дом–работа.
- [ ] Ограниченное влияние игроков (команды, права, очереди, лимиты).
Массовые команды запасов, обеда и отдыха удалены. Пауза/скорость остаются голосованием.
- [x] Сохранения, восстановление комнат, админка.
Схема v2 сохраняет игровой слой и очередь, v1 мигрируется при открытии. Добавлены общая квота снимков, защита прежних файлов при переполнении и админский интерфейс/API с отдельным токеном оператора.
Схема v3 загружает снимки v1/v2, отбрасывая удалённую экономику. Общая квота снимков, защита прежних файлов при переполнении и админский интерфейс/API с отдельным токеном оператора сохраняются.
**Этап 6. Эксплуатация**
- [x] Подготовка Compose, мониторинг (метрики тика, число сущностей, трафик), логи.
@@ -187,7 +187,7 @@
Проверка минимальной сцены: `npm run demo`, `npm run build`, `npm run server:dev`, затем `http://localhost:3000/?play`.
Имя репозитория остаётся `citygen`; генератор и существующий рендер сохраняют свои пути в `src/`, новые сетевые модули находятся в `client/`.
Состояние и ограничения реализации описаны в `server/README.md`, запуск Compose — в `deploy/README.md`. Этап 5 реализует базовую городскую модель, этап 6 — подготовку Compose в согласованном объёме.
Состояние и ограничения реализации описаны в `server/README.md`, запуск Compose — в `deploy/README.md`. Игровые механики этапа 5 остаются незавершёнными; этап 6 — подготовка Compose в согласованном объёме.
## 10. Риски
@@ -271,8 +271,8 @@
- Реальная нагрузка, 2026-10-30: Бальцерс, 1 000 000 жителей, 30 WebSocket-клиентов, 20 с, фоновые сохранения каждые 2 с. Выборка длительности тиков через метрики: p95 36,5 мс; максимум всех тиков по счётчику комнаты 44,7 мс. Средний трафик 4,8 КБ/с на клиента, максимальный 44,7 КБ/с. Ошибок, разрывов и срабатываний ограничения трафика не было. Это короткий локальный тест с небольшими AOI, а не гарантия для любого города, плотности, диска и целевого сервера. Пиковая память процесса со статикой и буферами — около 272 МиБ; память одной ECS отдельно не измерялась.
- Браузер: повторный вход в сохранённую миллионную комнату до загруженной области — 1,31 с в локальном Chrome.
- Этапы 5–6: 17 TS-тестов, 11 Rust unit-тестов и 2 интеграционных теста проходят. Проверены миграция v1→v2, сохранение очереди команды, детерминизм экономики/событий, влияние потребностей на производство, расход еды, квота без потери последнего снимка, отказ без админского токена и подтверждение записи через API.
- Chrome: отображение казны/еды/потребностей, команда «Обед» со списанием ресурсов и снижением голода, пауза, этаж/масштаб, админское сохранение. Загрузка области — 1,12 с локально.
- После удаления городской экономики: 18 TS-тестов, 9 Rust unit-тестов и 2 интеграционных теста. Проверяются миграция v1/v2→v3 с отбрасыванием удалённых полей, детерминизм жителей, квота, авторизация админки и запись снимков.
- Chrome: загрузка города, общий календарь, пауза, этаж/масштаб, админское сохранение; возобновление ожидания генерации без повторного POST.
Дальнейшее развитие за пределами базового слоя: индивидуальные потребности и
выбор целей, детальные переходы между этажами, использование мебели и