35 lines
2.4 KiB
Markdown
35 lines
2.4 KiB
Markdown
# Фаза 4. Моды и редактор в create
|
||
|
||
## Зависимости
|
||
|
||
- [Фаза 1](01-manager-shell.md)
|
||
- [Фаза 3](03-defs-map.md)
|
||
|
||
## Зачем
|
||
|
||
Игрок выбирает моды, правит или стирает дефолтную карту, создаёт школу. Внутри школы дерево и
|
||
панель локации читают снимок, не заглушки.
|
||
|
||
## Задачи
|
||
|
||
- [ ] `GET` списка модов: `core` как обязательный, остальные папки `mods/`
|
||
- [ ] `GET` каталога с `?lang=ru|en` (типы + локали) для `core` + выбранных id
|
||
- [ ] Hello несёт тот же locale; снимок карты при OpenSchool на этом языке
|
||
- [ ] `POST /api/schools` принимает доп. моды и раскладку; сервер всегда подставляет `core` первым и валидирует
|
||
- [ ] В диалоге создания: чекбоксы модов (`core` нельзя снять), редактор дерева/связей/слотов или сброс к дефолту
|
||
- [ ] При `OpenSchool` — один снимок карты (дерево + локации: имя, предметы, пустые персонажи и действия на месте, должности). Не на каждый клик, не 20 Гц
|
||
- [ ] Клиент фильтрует выбранный узел; часы как сейчас
|
||
- [ ] Протокол/HTTP описать в `docs/protocol.md` в том же коммите, что кодек
|
||
- [ ] Тесты API: create с картой, отказ на дырявый граф, открытие отдаёт снимок
|
||
|
||
## Критерий готовности
|
||
|
||
- Создать школу с ванильной картой и с упрощённой своей
|
||
- Открыть: дерево кликается, локация показывает имя/предметы/должности, персонажи и действия на месте пустые, события пустые
|
||
- Перезапуск сервера поднимает эту школу с той же раскладкой
|
||
- `dotnet test` и клиентский `npm test` / `build` проходят
|
||
|
||
## Стоп
|
||
|
||
Не приказы «сесть». Не лента событий. Не `OpenLocation` на сервер.
|