179 lines
6.3 KiB
JavaScript
179 lines
6.3 KiB
JavaScript
export default class CharacterDataModel extends foundry.abstract.TypeDataModel {
|
|
static defineSchema() {
|
|
const { fields } = foundry.data
|
|
const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra })
|
|
const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial })
|
|
const boolField = (initial = false) => new fields.BooleanField({ required: true, initial })
|
|
const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true })
|
|
|
|
const aspectField = (label, chinese) =>
|
|
new fields.SchemaField({
|
|
chinese: stringField(chinese),
|
|
label: stringField(label),
|
|
value: numberField(15, { min: 0 }),
|
|
})
|
|
|
|
const skillField = (label) =>
|
|
new fields.SchemaField({
|
|
label: stringField(label),
|
|
specialities: stringField(""),
|
|
value: numberField(0, { min: 0 }),
|
|
})
|
|
|
|
const resourceField = (label) =>
|
|
new fields.SchemaField({
|
|
label: stringField(label),
|
|
specialities: stringField(""),
|
|
value: numberField(0, { min: 0 }),
|
|
debt: boolField(false),
|
|
})
|
|
|
|
const componentField = () =>
|
|
new fields.SchemaField({
|
|
value: stringField(""),
|
|
})
|
|
|
|
const magicSpecialityField = () =>
|
|
new fields.SchemaField({
|
|
check: boolField(false),
|
|
})
|
|
|
|
const magicField = () =>
|
|
new fields.SchemaField({
|
|
visible: boolField(true),
|
|
value: numberField(0, { min: 0 }),
|
|
speciality: new fields.SchemaField({
|
|
essence: magicSpecialityField(),
|
|
mind: magicSpecialityField(),
|
|
purification: magicSpecialityField(),
|
|
manipulation: magicSpecialityField(),
|
|
aura: magicSpecialityField(),
|
|
acupuncture: magicSpecialityField(),
|
|
elixirs: magicSpecialityField(),
|
|
poisons: magicSpecialityField(),
|
|
arsenal: magicSpecialityField(),
|
|
potions: magicSpecialityField(),
|
|
curse: magicSpecialityField(),
|
|
transfiguration: magicSpecialityField(),
|
|
necromancy: magicSpecialityField(),
|
|
climatecontrol: magicSpecialityField(),
|
|
goldenmagic: magicSpecialityField(),
|
|
invocation: magicSpecialityField(),
|
|
tracking: magicSpecialityField(),
|
|
protection: magicSpecialityField(),
|
|
punishment: magicSpecialityField(),
|
|
domination: magicSpecialityField(),
|
|
neutralization: magicSpecialityField(),
|
|
divination: magicSpecialityField(),
|
|
earthlyprayer: magicSpecialityField(),
|
|
heavenlyprayer: magicSpecialityField(),
|
|
fungseoi: magicSpecialityField(),
|
|
}),
|
|
})
|
|
|
|
const treasureBranch = () =>
|
|
new fields.SchemaField({
|
|
value: numberField(0, { min: 0 }),
|
|
max: numberField(0, { min: 0 }),
|
|
min: numberField(0, { min: 0 }),
|
|
})
|
|
|
|
const treasureLevel = () =>
|
|
new fields.SchemaField({
|
|
san: treasureBranch(),
|
|
zing: treasureBranch(),
|
|
})
|
|
|
|
const schema = {
|
|
concept: stringField(""),
|
|
guardian: numberField(0, { min: 0, max: 5 }),
|
|
initiative: numberField(1, { min: 0 }),
|
|
anti_initiative: numberField(24, { min: 0 }),
|
|
description: htmlField(""),
|
|
prefs: new fields.SchemaField({
|
|
typeofthrow: new fields.SchemaField({
|
|
check: boolField(true),
|
|
choice: stringField("0"),
|
|
}),
|
|
}),
|
|
prompt: new fields.SchemaField({
|
|
typeofthrow: new fields.SchemaField({
|
|
check: boolField(true),
|
|
choice: stringField("0"),
|
|
}),
|
|
configure: new fields.SchemaField({
|
|
numberofdice: numberField(0),
|
|
aspect: numberField(0),
|
|
bonus: numberField(0),
|
|
bonusauspiciousdice: numberField(0),
|
|
typeofthrow: numberField(0),
|
|
aspectskill: numberField(0),
|
|
bonusmalusskill: numberField(0),
|
|
aspectspeciality: numberField(0),
|
|
rolldifficulty: numberField(0),
|
|
bonusmalusspeciality: numberField(0),
|
|
}),
|
|
}),
|
|
aspect: new fields.SchemaField({
|
|
fire: aspectField("CDE.Fire", "㊋"),
|
|
earth: aspectField("CDE.Earth", "㊏"),
|
|
metal: aspectField("CDE.Metal", "㊎"),
|
|
water: aspectField("CDE.Water", "㊌"),
|
|
wood: aspectField("CDE.Wood", "㊍"),
|
|
}),
|
|
skills: new fields.SchemaField({
|
|
art: skillField("CDE.Art"),
|
|
investigation: skillField("CDE.Investigation"),
|
|
erudition: skillField("CDE.Erudition"),
|
|
knavery: skillField("CDE.Knavery"),
|
|
wordliness: skillField("CDE.Wordliness"),
|
|
prowess: skillField("CDE.Prowess"),
|
|
sciences: skillField("CDE.Sciences"),
|
|
technologies: skillField("CDE.Technologies"),
|
|
kungfu: skillField("CDE.KungFu"),
|
|
rangedcombat: skillField("CDE.RangedCombat"),
|
|
}),
|
|
resources: new fields.SchemaField({
|
|
supply: resourceField("CDE.Supply"),
|
|
inquiry: resourceField("CDE.Inquiry"),
|
|
influence: resourceField("CDE.Influence"),
|
|
}),
|
|
component: new fields.SchemaField({
|
|
one: componentField(),
|
|
two: componentField(),
|
|
three: componentField(),
|
|
four: componentField(),
|
|
five: componentField(),
|
|
six: componentField(),
|
|
seven: componentField(),
|
|
eight: componentField(),
|
|
nine: componentField(),
|
|
zero: componentField(),
|
|
}),
|
|
magics: new fields.SchemaField({
|
|
internalcinnabar: magicField(),
|
|
alchemy: magicField(),
|
|
masteryoftheway: magicField(),
|
|
exorcism: magicField(),
|
|
geomancy: magicField(),
|
|
}),
|
|
threetreasures: new fields.SchemaField({
|
|
heiyang: new fields.SchemaField({ value: numberField(0, { min: 0 }), max: numberField(0, { min: 0 }) }),
|
|
heiyin: new fields.SchemaField({ value: numberField(0, { min: 0 }), max: numberField(0, { min: 0 }) }),
|
|
dicelevel: new fields.SchemaField({
|
|
level0d: treasureLevel(),
|
|
level1d: treasureLevel(),
|
|
level2d: treasureLevel(),
|
|
}),
|
|
}),
|
|
experience: new fields.SchemaField({
|
|
value: numberField(0, { min: 0 }),
|
|
max: numberField(0, { min: 0 }),
|
|
min: numberField(0, { min: 0 }),
|
|
}),
|
|
}
|
|
|
|
return schema
|
|
}
|
|
}
|