Формат персонажа
Формат персонажа для генерации и импорта в лист Long Story Short.
Артефакты
Заголовок раздела «Артефакты»| Артефакт | URL |
|---|---|
Схема содержимого data |
https://longstoryshort.app/schema/v1/character.json |
| Готовый пример персонажа (валиден по схеме) | https://longstoryshort.app/schema/v1/character-example.json |
JSON Schema — draft-07.
Документ персонажа
Заголовок раздела «Документ персонажа»Персонаж — это объект с несколькими полями верхнего уровня, один из которых
(data) — вложенный JSON, закодированный строкой:
| Поле | Тип | Описание |
|---|---|---|
jsonType |
"character" |
Константа, тип документа. |
version |
"2" |
Версия формата файла. |
edition |
"2014" | "2024" |
Механическая редакция правил. По умолчанию "2024". |
sheetEdition |
"2014" | "2024" |
Косметическая редакция — вёрстка классического листа (печатная форма). Независима от edition. |
spells |
объект | Настройки книги заклинаний: mode ("cards" | "text"), prepared и book — массивы id заклинаний из базы Long Story Short (эти id нельзя придумать, только взять реальные). |
disabledBlocks |
объект | Какие блоки листа скрыты, по спискам ключей блоков: info-left, info-right, subinfo-left, subinfo-right, notes-left, notes-right. Пустые массивы — ничего не скрыто. |
data |
строка (JSON) | Всё содержимое листа персонажа — имя, характеристики, класс, снаряжение, заклинания, заметки. Описано схемой ниже. |
Пример верхнего уровня:
{ "jsonType": "character", "version": "2", "edition": "2024", "sheetEdition": "2024", "spells": { "mode": "cards", "prepared": [], "book": [] }, "disabledBlocks": { "info-left": [], "info-right": [], "subinfo-left": [], "subinfo-right": [], "notes-left": [], "notes-right": [] }, "data": "{ ...см. ниже... }"}Содержимое data
Заголовок раздела «Содержимое data»data — это отдельный JSON-объект, закодированный строкой (значение поля —
строка, а не вложенный объект: соберите объект по описанной ниже модели,
затем примените к нему JSON.stringify). Полная схема со всеми полями,
типами и допустимыми значениями — character.json (ссылка выше); ниже —
обзор структуры.
| Поле | Что это |
|---|---|
name |
Имя персонажа, { value }. |
template |
Визуальная тема листа (default, aime, …). |
info |
Класс, подкласс, уровень, предыстория, раса, мировоззрение, опыт, размер. |
subInfo |
Возраст, рост, вес, глаза, кожа, волосы. |
spellsInfo |
Блок каста: базовая характеристика, кастомные DC/атака. |
spells / spellsPact |
Счётчик слотов заклинаний по уровням. |
bonuses |
Массив числовых бонусов (единственный канал — см. ниже). |
proficiency / proficiencyCustom |
Бонус мастерства и его переопределение. |
stats |
Характеристики (str/dex/con/int/wis/cha), поле score. |
saves |
Спасброски, владение по характеристикам. |
skills |
18 навыков SRD, владение/экспертиза по каждому. |
vitality |
HP, кости хитов, AC, скорость, щит, инициатива, состояние умирания. |
attunementsList |
Слоты присоединения к магическим предметам. |
weaponsList |
Список оружия: урон, характеристика атаки, владение. |
text |
Текстовые блоки (черты, снаряжение, заметки, личность и т.д.). |
coins |
Монеты по номиналам. |
resources |
Именованные счётчики (использования способностей и т.п.). |
conditions |
Активные состояния. |
exhaustion, inspiration, avatar, prof |
Истощение, вдохновение, портрет, владения бронёй/оружием. |
Все обычные редактируемые поля обёрнуты в { value: ... }.
Три разных «spells»
Заголовок раздела «Три разных «spells»»Не путайте — в модели три независимых сущности с похожим именем:
| Где | Что это |
|---|---|
spells (верхний уровень документа) |
настройки книги заклинаний: режим отображения, id реальных заклинаний из базы |
data.spellsInfo |
блок каста: базовая характеристика, кастомные DC/атака |
data.spells / data.spellsPact |
счётчик слотов заклинаний по уровням, не содержимое книги |
Содержимое книги заклинаний (какие заклинания известны/подготовлены) — ссылки на реальные заклинания в базе Long Story Short; сгенерировать их «из головы» нельзя.
Правила заполнения
Заголовок раздела «Правила заполнения»Единственный канал числовых бонусов — массив data.bonuses. У каждого —
цель (target, закрытый список в схеме), величина или формула, источник.
Текстовые блоки (text.<ключ>.value.data) — документ форматированного
редактора, не HTML-строка. Минимально валидный:
{ "type": "doc", "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "..." }] }] }Дайс/формула-нотация: <количество>d<грани> или <количество>к<грани>
(кириллица наравне с латиницей), переменные в [КВАДРАТНЫХ_СКОБКАХ]:
[STR]/[DEX]/… (МОДИФИКАТОР характеристики, не значение), плюс
[PROF]/[LVL].
Регистр переменной важен не везде: в большинстве формульных полей (ac,
speed, shield.mod, initiative, кастомные DC/атака каста, переопределения
бонуса навыка/спасброска, формулы ресурсов, expr у бонуса) переменную нужно
писать строго заглавными — 10+[DEX], не 10+[dex]. Единственное
исключение — урон оружия (weaponsList[*].dmg), там регистр не важен. Если
сомневаетесь — пишите везде заглавными, это работает во всех полях.
Что схема ловит, а что нет
Заголовок раздела «Что схема ловит, а что нет»Схема проверяет форму, а не смысл.
| Схема поймает | Схема не поймает |
|---|---|
| Вычисляемое поле там, где должно быть только «сырое» (например, модификатор характеристики, итоговый урон) | info.charClass.id, не указывающий на существующий класс датасета |
| Бонус на несуществующий или неживой таргет | Бонус на оружие с id, которого нет в weaponsList |
| Отсутствие обязательного навыка/характеристики/спасброска | Ресурс, чей location не указывает на реальный текстовый блок |
| Устаревший канал бонусов на верхнем уровне | Формулу, которая не вычисляется |
| Опечатку в имени поля | Дубли id внутри списков |
