Changelog
Страница для тех, кто держит что-то поверх наших контрактов: датасет, импортёр, редактор, встроенный лист. Сюда попадает только то, что видно снаружи — новые поля, новые проверки, изменения в опубликованных схемах и файлах. Правки интерфейса и внутренняя кухня живут не здесь.
Схемы по постоянным URL (/schema/v1/…) всегда отражают текущий прод: если
что-то разошлось с этой страницей, верна схема.
2026-10-29 — выборы игрока: развилки внутри черт и выбор нескольких черт
Заголовок раздела «2026-10-29 — выборы игрока: развилки внутри черт и выбор нескольких черт»Две вещи. Именованный pick-one стал полноценным каналом контента, а новый
грант feat-choice даёт выбрать несколько черт из списка — воззвания, метамагию,
приёмы, боевые стили. Ломающих изменений нет: всё новое аддитивно, старые наборы
работают как раньше. Обзор того, что теперь можно собрать, — в
«Датасетах».
Новый грант feat-choice
Заголовок раздела «Новый грант feat-choice»Слот на count черт категории category, с устойчивым id, по которому хранится
выбор игрока. «Ещё одно воззвание на 5 уровне» — отдельный такой грант в
уровневой строке. Выбранные черты едут на лист как обычный feat, со всеми своими
грантами.
Черта без repeatable берётся один раз на персонажа: визард блокирует её в
других слотах и там, где её уже выдали напрямую. Флаг classFeature: true у слота
кладёт выбранное в «Умения и способности» вместо «Черт» — для способностей класса
вроде воззваний. Подробности и рецепты — в
«Датасетах».
Новые поля черты
Заголовок раздела «Новые поля черты»minLevel— уровень персонажа, с которого черту можно выбрать в слоте;repeatable— черту можно взять больше одного раза.
Категория черты — произвольная строка
Заголовок раздела «Категория черты — произвольная строка»category у черты и у слота больше не ограничена пятью значениями из схемы. Своя
механика «выбери из списка» — это просто черты своей категории и слот этой
категории. Опечатку в категории ловит проверка «слот, под который нет ни одной
черты».
Уровневые строки в языках, инструментах и чувствах
Заголовок раздела «Уровневые строки в языках, инструментах и чувствах»Языки, инструменты, именное оружие и чувства теперь собираются и из уровневых
строк, до уровня персонажа. Раньше language-fixed на уровневой строке молча не
появлялся.
Именованный pick-one работает где угодно
Заголовок раздела «Именованный pick-one работает где угодно»Развилка с id и options[].id теперь работает в любом месте датасета:
- у самой сущности — как и раньше;
- в уровневой строке (
leveledGrants) — появляется у игрока с этого уровня; - внутри черты — рисуется под карточкой черты, у выданной и у выбранной в слоте;
- внутри выбранной ветки другой именованной развилки.
Выбранная ветка доезжает во все каналы ровно как гранты, выданные напрямую: числа, текст, счётчики, языки, инструменты, чувства, заклинания, навыки и экспертиза. Раньше из ветки доезжали только числа и слоты навыков, а трейт, счётчик или заклинание внутри ветки молча не появлялись. До ответа игрока ветка не даёт ничего.
Типичный случай — черта «владение ИЛИ экспертиза» (Наблюдатель, Проницательный ум). Пример — в «Датасетах».
feat с featId: "any" у класса и подкласса
Заголовок раздела «feat с featId: "any" у класса и подкласса»Открытый слот черты на классе или подклассе теперь применяется: выбранная черта едет на лист со всеми своими грантами. Раньше игрок мог выбрать черту в визарде, но на лист она не попадала. Её счётчики тоже читаются, в том числе у черты, выданной на уровне.
Что изменится у существующих персонажей
Заголовок раздела «Что изменится у существующих персонажей»Правка ретроактивна, как любая правка датасета:
- если игрок уже ответил на развилку сущности, а в выбранной ветке лежат трейт, счётчик или заклинание, они появятся на листе;
- если у класса есть слот
anyи игрок уже выбрал в нём черту, черта появится на листе.
Блок черты с развилкой пересобирается, когда игрок меняет ветку, — правки игрока внутри этого блока при этом теряются. У черт без развилки ничего не меняется.
Проверки линта
Заголовок раздела «Проверки линта»feat-choiceбезidили сcountменьше 1 — ошибка;idслота, совпадающий с другим слотом или развилкой, — ошибка;minLevelчерты не целое от 1 до 20 — ошибка;classFeatureу слота вида, линии или предыстории — предупреждение: флаг работает только у класса и подкласса;- повторяемая черта с именованной развилкой — предупреждение: у всех копий один ответ;
- проверка «слот черты без кандидатов» распространяется на
feat-choice; - Исправлено: проверка уникальности
idразвилки считала развилку внутри черты по разу на каждую сущность, которая выдаёт эту черту, и отклоняла такой набор при импорте. Теперь черта считается один раз. - Счётчик в ветке именованной развилки больше не вызывает предупреждения: его читают. Счётчик внутри безымянной развилки (снаряжение или золото) — по-прежнему предупреждение: её открывает только канал снаряжения.
2026-10-22 — эффекты, преимущество и помеха бонусом, бонусы к атакам и урону
Заголовок раздела «2026-10-22 — эффекты, преимущество и помеха бонусом, бонусы к атакам и урону»Ломающих изменений нет: всё новое аддитивно, старые персонажи открываются как раньше. Подробности — в «Формате персонажа».
Новое поле data.effects
Заголовок раздела «Новое поле data.effects»Эффекты игрока — именованные наборы бонусов, которые включаются целиком:
{ id, name, description?, disabled?, icon?, tone?, ends?, shown? }. Бонусы эффекта —
обычные записи в data.bonuses с source: { kind: "effect", refId: <id эффекта> }. Пока
эффект выключен или записи нет, его бонусы не действуют.
Режимы advantage и disadvantage
Заголовок раздела «Режимы advantage и disadvantage»У бонуса появились mode: "advantage" и "disadvantage" — преимущество или помеха вместо
числа. Значения у такого слоя нет, в число поля он не входит, его читает бросок. Действует
только на целях бросков к20.
Новые цели бонусов
Заголовок раздела «Новые цели бонусов»check.all,save.all— все проверки характеристик (вместе с навыками и инициативой) и все спасброски;attack.all— атаки оружием и заклинаниями;damage.weapon— урон любого оружия;stat.<характеристика>.attack,stat.<характеристика>.damage— атаки и урон оружием этой характеристики;weapon.<id строки>.attack,weapon.<id строки>.damage— одна строкаweaponsList.
У целей урона бонус — формула с костями: add добавляет слагаемое, set заменяет формулу
оружия, set с приоритетом перезаписи — весь урон.
Состояния и истощение применяются сами
Заголовок раздела «Состояния и истощение применяются сами»Лист строит механику conditions и exhaustion по редакции персонажа и показывает её с
source.kind: "condition". В data.bonuses эти слои не пишутся — генератору тоже не нужно их
писать, иначе они применятся дважды. В conditions кладите только отмеченные состояния:
выводимые (incapacitated от paralyzed) лист добавит сам.
2026-10-18 — заклинания персонажа по слагу
Заголовок раздела «2026-10-18 — заклинания персонажа по слагу»Ломающих изменений нет: id в spells.prepared/book работают как раньше.
Слаг вместо id в книге заклинаний
Заголовок раздела «Слаг вместо id в книге заклинаний»В spells.prepared и spells.book файла персонажа теперь можно писать слаг
("cure-wounds"), английское имя ("Cure Wounds") или имя как в базе
("Исцеление ран [Cure Wounds]"). Лист находит заклинание сам — в SRD
редакции персонажа, затем в гримуаре владельца, — а ненайденное показывает
списком в настройках заклинаний. Подробности — в
«Формате персонажа».
Новое поле spells.pending
Заголовок раздела «Новое поле spells.pending»Сюда сервер откладывает слаги при создании персонажа: { slug, list }[], где
list — "prepared" или "book". Писать его самим не нужно. В экспорте оно
встретится у персонажа, у которого остались ненайденные заклинания; при
повторном импорте его можно оставить как есть.
srd-spell-slugs-{2014,2024}.json: id и классы
Заголовок раздела «srd-spell-slugs-{2014,2024}.json: id и классы»К слагу, имени и кругу добавлены id заклинания и classes — в чьём списке
оно есть. Старые поля не менялись.
{ "slug": "cure-wounds", "id": "698197c2a5dc6923c7028c8c", "name": "Исцеление ран [Cure Wounds]", "level": 1, "classes": ["artificer", "bard", "cleric", "druid", "paladin", "ranger"] }Гранты spell-fixed на заклинания не из SRD
Заголовок раздела «Гранты spell-fixed на заклинания не из SRD»Грант, ссылающийся слагом на заклинание из гримуара игрока, теперь действительно его выдаёт. Раньше заклинание находилось, но на лист не попадало.
2026-08-18 — заклинательство
Заголовок раздела «2026-08-18 — заклинательство»Крупная выкатка: заклинания стали настоящими объектами на листе, а ячейки — выдаваемыми по классу и уровню. Для авторов датасетов это одно ломающее изменение и довольно много нового.
🔴 Ломающее: spellcasting.spellList
Заголовок раздела «🔴 Ломающее: spellcasting.spellList»Что было. Лист подмешивал список заклинаний волшебника любому классу с id
fighter или rogue — хардкодом, чтобы Мистический рыцарь и Арканный ловкач
хоть как-то работали.
Что стало. Список берётся из spellcasting.spellList, а если поля нет — из
id класса.
Кого ломает. Любой заклинатель, который черпает не из своего списка:
- подкласс-гибрид вроде Мистического рыцаря —
classId: "fighter"резолвится в список «воина», которого не существует; - любой собственный класс — его id в базе заклинаний не значится ничем.
Симптом: ячейки есть, потолок круга правильный, а выбрать нечего — список пуст.
Ни ошибки, ни предупреждения при этом нет нигде: линт про spellList не знает,
а сервер честно отвечает пустотой.
Лечится одной строкой на класс или подкласс:
{ "type": "spellcasting", "ability": "int", "casterType": "memory", "progression": "third", "spellList": "wizard" }Значение — id класса, чей список используется: "wizard", "cleric", "druid"
и так далее.
Новое в гранте spellcasting
Заголовок раздела «Новое в гранте spellcasting»| Поле | Что даёт |
|---|---|
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.1…spellSlot.9 и pactSlot.1…pactSlot.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 у персонажа, собранного визардом, стал базой свёртки, а не
итогом: поверх лежат выданные классом ячейки и правка игрока, и на листе видно
другое число.
Подробности — «Датасеты» и «Формат персонажа».
