114 lines
5.5 KiB
JavaScript
114 lines
5.5 KiB
JavaScript
/**
|
|
* Data model for Item items
|
|
*/
|
|
export default class BoLItemDataModel extends foundry.abstract.TypeDataModel {
|
|
static defineSchema() {
|
|
const fields = foundry.data.fields;
|
|
const requiredInteger = { required: true, nullable: false, integer: true };
|
|
const nullableNumber = { required: false, nullable: true, initial: null };
|
|
|
|
return {
|
|
// Base fields
|
|
category: new fields.StringField({ initial: "" }),
|
|
subtype: new fields.StringField({ initial: "default" }),
|
|
description: new fields.HTMLField({ initial: "" }),
|
|
properties: new fields.SchemaField({
|
|
// Base flags
|
|
ranged: new fields.BooleanField({ initial: false }),
|
|
melee: new fields.BooleanField({ initial: false }),
|
|
spell: new fields.BooleanField({ initial: false }),
|
|
protection: new fields.BooleanField({ initial: false }),
|
|
weapon: new fields.BooleanField({ initial: false }),
|
|
armor: new fields.BooleanField({ initial: false }),
|
|
helm: new fields.BooleanField({ initial: false }),
|
|
shield: new fields.BooleanField({ initial: false }),
|
|
equipable: new fields.BooleanField({ initial: false }),
|
|
consumable: new fields.BooleanField({ initial: false }),
|
|
magical: new fields.BooleanField({ initial: false }),
|
|
"2H": new fields.BooleanField({ initial: false }),
|
|
reloadable: new fields.BooleanField({ initial: false }),
|
|
bow: new fields.BooleanField({ initial: false }),
|
|
crossbow: new fields.BooleanField({ initial: false }),
|
|
throwing: new fields.BooleanField({ initial: false }),
|
|
|
|
// Equipment
|
|
stackable: new fields.BooleanField({ initial: false }),
|
|
stacksize: new fields.NumberField({ ...nullableNumber }),
|
|
slot: new fields.StringField({ initial: "-" }),
|
|
|
|
// Weapon flags
|
|
natural: new fields.BooleanField({ initial: false }),
|
|
concealable: new fields.BooleanField({ initial: false }),
|
|
ignoreshield: new fields.BooleanField({ initial: false }),
|
|
attackBonusDice: new fields.BooleanField({ initial: false }),
|
|
attackMalusDice: new fields.BooleanField({ initial: false }),
|
|
onlymodifier: new fields.BooleanField({ initial: false }),
|
|
bashing: new fields.BooleanField({ initial: false }),
|
|
throwable: new fields.BooleanField({ initial: false }),
|
|
damageReroll1: new fields.BooleanField({ initial: false }),
|
|
|
|
// Weapon stats
|
|
attackAttribute: new fields.StringField({ initial: "vigor" }),
|
|
attackAptitude: new fields.StringField({ initial: "melee" }),
|
|
attackModifiers: new fields.NumberField({ ...nullableNumber }),
|
|
weaponSize: new fields.StringField({ initial: "unarmed" }),
|
|
damage: new fields.StringField({ initial: "0" }),
|
|
damageAttribute: new fields.StringField({ initial: "" }),
|
|
damageModifiers: new fields.NumberField({ ...nullableNumber }),
|
|
damageMultiplier: new fields.StringField({ initial: "1" }),
|
|
range: new fields.NumberField({ ...nullableNumber }),
|
|
reload: new fields.NumberField({ ...nullableNumber }),
|
|
|
|
// Protection
|
|
armorQuality: new fields.StringField({ initial: "" }),
|
|
soak: new fields.SchemaField({
|
|
formula: new fields.StringField({ initial: "" }),
|
|
value: new fields.NumberField({ initial: 0, nullable: true }),
|
|
modifier: new fields.NumberField({ initial: 0, nullable: true }),
|
|
}),
|
|
blocking: new fields.SchemaField({
|
|
malus: new fields.NumberField({ initial: 0, nullable: true }),
|
|
blocking1: new fields.BooleanField({ initial: false }),
|
|
blockingAll: new fields.BooleanField({ initial: false }),
|
|
}),
|
|
modifiers: new fields.SchemaField({
|
|
init: new fields.NumberField({ initial: 0, nullable: true }),
|
|
agility: new fields.NumberField({ initial: 0, nullable: true }),
|
|
powercost: new fields.NumberField({ initial: 0, nullable: true }),
|
|
social: new fields.BooleanField({ initial: false }),
|
|
}),
|
|
|
|
// Spell
|
|
circle: new fields.NumberField({ initial: 0, nullable: true }),
|
|
difficulty: new fields.StringField({ initial: "" }),
|
|
ppcost: new fields.NumberField({ initial: 0, nullable: true }),
|
|
duration: new fields.StringField({ initial: "" }),
|
|
nbmandatoryconditions: new fields.NumberField({ initial: 0, nullable: true }),
|
|
mandatoryconditions: new fields.ArrayField(new fields.StringField()),
|
|
optionnalconditions: new fields.ArrayField(new fields.StringField()),
|
|
|
|
// Alchemy
|
|
alchemytype: new fields.StringField({ initial: "" }),
|
|
pccost: new fields.NumberField({ initial: 0, nullable: true }),
|
|
pccurrent: new fields.NumberField({ initial: 0, nullable: true }),
|
|
|
|
// Vehicle weapon
|
|
isfiredamage: new fields.BooleanField({ initial: false }),
|
|
ishulldamage: new fields.BooleanField({ initial: false }),
|
|
iscrewdamage: new fields.BooleanField({ initial: false }),
|
|
isboarding: new fields.BooleanField({ initial: false }),
|
|
isspur: new fields.BooleanField({ initial: false }),
|
|
isbreakrow: new fields.BooleanField({ initial: false }),
|
|
}),
|
|
|
|
// Equipment fields
|
|
quantity: new fields.NumberField({ ...requiredInteger, initial: 1 }),
|
|
weight: new fields.NumberField({ initial: 0 }),
|
|
price: new fields.NumberField({ initial: 0 }),
|
|
worn: new fields.BooleanField({ initial: false })
|
|
};
|
|
}
|
|
|
|
static LOCALIZATION_PREFIXES = ["BOL.Item"];
|
|
}
|