40 lines
2.4 KiB
Markdown
40 lines
2.4 KiB
Markdown
# Фаза 23. Настоящий пример мода
|
||
|
||
## Зависимости
|
||
|
||
- [Фаза 22](22-mod-identity.md) — пример должен нести удостоверение, как все
|
||
|
||
## Зачем
|
||
|
||
Дорога от папки на диске до школы не проверена ни разу: в `mods/` лежит только `core`, а last-wins
|
||
и патчи живут в тестах на документах в памяти. Один маленький настоящий пак делает весь путь
|
||
проверяемым — и заодно служит образцом для мод-автора.
|
||
|
||
## Задачи
|
||
|
||
- [x] Пак `mods/example` рядом с `core`: `pack.jsonc`, свои локали, пара черт, набор имён,
|
||
патч чужого def и одна комната
|
||
- [x] Пак нарочно скучный: он образец и фикстура, а не контент. Ванильную игру он не меняет,
|
||
пока не выбран
|
||
- [x] Пак едет в вывод сборки тестов теми же правилами, что и `core`
|
||
- [x] Короткий `README.md` внутри пака: что где лежит и как добавить своё
|
||
- [x] Ориентир в [`../design/defs.md`](../design/defs.md) показывает на него как на образец
|
||
|
||
## Тесты, без которых фаза не закрыта
|
||
|
||
- [x] `GET /api/catalog?mods=example` отдаёт типы и подписи пака поверх `core`
|
||
- [x] Школа создаётся с паком и поднимается с ним после перезапуска
|
||
- [x] Патч пака виден в каталоге школы, а без пака его нет
|
||
- [x] Одинаковый `defName` в `core` и в паке — побеждает пак, в логе предупреждение
|
||
- [x] Карта пака проходит валидацию и годится для создания школы
|
||
|
||
## Критерий готовности
|
||
|
||
- Создать школу с включённым паком и увидеть его содержимое внутри школы
|
||
- Снять пак — школа создаётся прежней
|
||
- `dotnet test` проходит
|
||
|
||
## Стоп
|
||
|
||
Не превращать пример в контент-пак: чем он меньше, тем дольше проживёт.
|