Перейти к содержимому

Changelog

Страница для тех, кто держит что-то поверх наших контрактов: датасет, импортёр, редактор, встроенный лист. Сюда попадает только то, что видно снаружи — новые поля, новые проверки, изменения в опубликованных схемах и файлах. Правки интерфейса и внутренняя кухня живут не здесь.

Схемы по постоянным URL (/schema/v1/…) всегда отражают текущий прод: если что-то разошлось с этой страницей, верна схема.

Крупная выкатка: заклинания стали настоящими объектами на листе, а ячейки — выдаваемыми по классу и уровню. Для авторов датасетов это одно ломающее изменение и довольно много нового.

Что было. Лист подмешивал список заклинаний волшебника любому классу с id fighter или rogue — хардкодом, чтобы Мистический рыцарь и Арканный ловкач хоть как-то работали.

Что стало. Список берётся из spellcasting.spellList, а если поля нет — из id класса.

Кого ломает. Любой заклинатель, который черпает не из своего списка:

  • подкласс-гибрид вроде Мистического рыцаря — classId: "fighter" резолвится в список «воина», которого не существует;
  • любой собственный класс — его id в базе заклинаний не значится ничем.

Симптом: ячейки есть, потолок круга правильный, а выбрать нечего — список пуст. Ни ошибки, ни предупреждения при этом нет нигде: линт про spellList не знает, а сервер честно отвечает пустотой.

Лечится одной строкой на класс или подкласс:

{ "type": "spellcasting", "ability": "int", "casterType": "memory",
"progression": "third", "spellList": "wizard" }

Значение — id класса, чей список используется: "wizard", "cleric", "druid" и так далее.

Поле Что даёт
progression из него теперь растут ячейки на листе, а не только потолок круга
slotsByLevel собственная таблица ячеек класса, 21 строка × 9 кругов
cantripsByLevel, knownByLevel, preparedFormula, bookAtFirst, bookPerLevel счётчики «сколько можно взять»

preparedFormula принимает три значения: mod+level, mod+half-level (половина вниз) и mod+half-level-up (половина вверх).

spell-fixed — именное всегда-подготовленное заклинание по слагу. spell-choice — N заклинаний круга, которые игрок выбирает сам из указанного списка. Общие поля выдачи: ability, uses, withSlots, alwaysPrepared.

У счётчика uses есть shortRestRegain — сколько возвращает короткий отдых, формулой. Без него короткий отдых наполняет счётчик целиком.

Заклинание в гранте называется слагом — слагифицированным английским именем (hellish-rebuke). Из русского названия он не выводится. Опубликованы два файла, они же гейт линта:

  • https://longstoryshort.app/datasets/srd-spell-slugs-2014.json — 318 записей
  • https://longstoryshort.app/datasets/srd-spell-slugs-2024.json — 339 записей

Ссылка на не-SRD заклинание легальна: она резолвится у игрока, который уже загрузил ваш файл заклинаний.

spellSlot.1spellSlot.9 и pactSlot.1pactSlot.9 — ячейки стали целями системы бонусов.

  • spell-choice без count, круга или spellList — ошибка;
  • два spell-choice одного круга на одной сущности — ошибка;
  • uses без count и без countExpr, или сразу с обоими — ошибка;
  • uses.shortRestRegain, который не вычисляется в число — ошибка;
  • slotsByLevel короче 21 записи — ошибка;
  • слаг вне опубликованного списка SRD — предупреждение.

spells.granted (выданные датасетом, вне лимита подготовленных), spells.slotless (за что нельзя заплатить ячейкой), spellsInfo.charges (привязка «заклинание → счётчик») и spellsInfo.abilities (характеристика конкретного заклинания). Всё аддитивно.

data.spells у персонажа, собранного визардом, стал базой свёртки, а не итогом: поверх лежат выданные классом ячейки и правка игрока, и на листе видно другое число.

Подробности — «Датасеты» и «Формат персонажа».