mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 19:51:08 +01:00
160 lines
7.3 KiB
JavaScript
160 lines
7.3 KiB
JavaScript
import { defaultRestOptions } from '../../config/generalConfig.mjs';
|
|
import { ActionsField } from '../fields/actionField.mjs';
|
|
|
|
const currencyField = (initial, label) =>
|
|
new foundry.data.fields.SchemaField({
|
|
enabled: new foundry.data.fields.BooleanField({ required: true, initial: true }),
|
|
label: new foundry.data.fields.StringField({
|
|
required: true,
|
|
initial,
|
|
label
|
|
})
|
|
});
|
|
|
|
export default class DhHomebrew extends foundry.abstract.DataModel {
|
|
static defineSchema() {
|
|
const fields = foundry.data.fields;
|
|
return {
|
|
maxFear: new fields.NumberField({
|
|
required: true,
|
|
integer: true,
|
|
min: 0,
|
|
initial: 12,
|
|
label: 'DAGGERHEART.SETTINGS.Homebrew.FIELDS.maxFear.label'
|
|
}),
|
|
maxLoadout: new fields.NumberField({
|
|
required: true,
|
|
integer: true,
|
|
min: 0,
|
|
initial: 5,
|
|
label: 'DAGGERHEART.SETTINGS.Homebrew.FIELDS.maxLoadout.label'
|
|
}),
|
|
maxDomains: new fields.NumberField({
|
|
required: true,
|
|
integer: true,
|
|
min: 1,
|
|
initial: 2,
|
|
label: 'DAGGERHEART.SETTINGS.Homebrew.FIELDS.maxDomains.label'
|
|
}),
|
|
traitArray: new fields.ArrayField(new fields.NumberField({ required: true, integer: true }), {
|
|
initial: () => [2, 1, 1, 0, 0, -1]
|
|
}),
|
|
currency: new fields.SchemaField({
|
|
title: new fields.StringField({
|
|
required: true,
|
|
initial: 'Gold',
|
|
label: 'DAGGERHEART.SETTINGS.Homebrew.currency.currencyName'
|
|
}),
|
|
coins: currencyField('Coins', 'DAGGERHEART.SETTINGS.Homebrew.currency.coinName'),
|
|
handfuls: currencyField('Handfuls', 'DAGGERHEART.SETTINGS.Homebrew.currency.handfulName'),
|
|
bags: currencyField('Bags', 'DAGGERHEART.SETTINGS.Homebrew.currency.bagName'),
|
|
chests: currencyField('Chests', 'DAGGERHEART.SETTINGS.Homebrew.currency.chestName')
|
|
}),
|
|
restMoves: new fields.SchemaField({
|
|
longRest: new fields.SchemaField({
|
|
nrChoices: new fields.NumberField({ required: true, integer: true, min: 1, initial: 2 }),
|
|
moves: new fields.TypedObjectField(
|
|
new fields.SchemaField({
|
|
name: new fields.StringField({ required: true }),
|
|
icon: new fields.StringField({ required: true }),
|
|
img: new fields.FilePathField({
|
|
initial: 'icons/magic/life/cross-worn-green.webp',
|
|
categories: ['IMAGE'],
|
|
base64: false
|
|
}),
|
|
description: new fields.HTMLField(),
|
|
actions: new ActionsField()
|
|
}),
|
|
{ initial: defaultRestOptions.longRest() }
|
|
)
|
|
}),
|
|
shortRest: new fields.SchemaField({
|
|
nrChoices: new fields.NumberField({ required: true, integer: true, min: 1, initial: 2 }),
|
|
moves: new fields.TypedObjectField(
|
|
new fields.SchemaField({
|
|
name: new fields.StringField({ required: true }),
|
|
icon: new fields.StringField({ required: true }),
|
|
img: new fields.FilePathField({
|
|
initial: 'icons/magic/life/cross-worn-green.webp',
|
|
categories: ['IMAGE'],
|
|
base64: false
|
|
}),
|
|
description: new fields.HTMLField(),
|
|
actions: new ActionsField()
|
|
}),
|
|
{ initial: defaultRestOptions.shortRest() }
|
|
)
|
|
})
|
|
}),
|
|
domains: new fields.TypedObjectField(
|
|
new fields.SchemaField({
|
|
id: new fields.StringField({ required: true }),
|
|
label: new fields.StringField({ required: true, initial: '', label: 'DAGGERHEART.GENERAL.label' }),
|
|
src: new fields.FilePathField({
|
|
categories: ['IMAGE'],
|
|
base64: false,
|
|
label: 'Image'
|
|
}),
|
|
description: new fields.HTMLField()
|
|
})
|
|
),
|
|
adversaryTypes: new fields.TypedObjectField(
|
|
new fields.SchemaField({
|
|
id: new fields.StringField({ required: true }),
|
|
label: new fields.StringField({ required: true, label: 'DAGGERHEART.GENERAL.label' }),
|
|
description: new fields.StringField()
|
|
})
|
|
),
|
|
itemFeatures: new fields.SchemaField({
|
|
weaponFeatures: new fields.TypedObjectField(
|
|
new fields.SchemaField({
|
|
name: new fields.StringField({ required: true }),
|
|
img: new fields.FilePathField({
|
|
initial: 'icons/magic/life/cross-worn-green.webp',
|
|
categories: ['IMAGE'],
|
|
base64: false
|
|
}),
|
|
description: new fields.HTMLField(),
|
|
actions: new ActionsField(),
|
|
effects: new fields.ArrayField(new fields.ObjectField())
|
|
})
|
|
),
|
|
armorFeatures: new fields.TypedObjectField(
|
|
new fields.SchemaField({
|
|
name: new fields.StringField({ required: true }),
|
|
img: new fields.FilePathField({
|
|
initial: 'icons/magic/life/cross-worn-green.webp',
|
|
categories: ['IMAGE'],
|
|
base64: false
|
|
}),
|
|
description: new fields.HTMLField(),
|
|
actions: new ActionsField(),
|
|
effects: new fields.ArrayField(new fields.ObjectField())
|
|
})
|
|
)
|
|
})
|
|
};
|
|
}
|
|
|
|
/** @inheritDoc */
|
|
_initializeSource(source, options = {}) {
|
|
source = super._initializeSource(source, options);
|
|
source.currency.coins = {
|
|
enabled: source.currency.coins.enabled ?? true,
|
|
label: source.currency.coins.label || source.currency.coins
|
|
};
|
|
source.currency.handfuls = {
|
|
enabled: source.currency.handfuls.enabled ?? true,
|
|
label: source.currency.handfuls.label || source.currency.handfuls
|
|
};
|
|
source.currency.bags = {
|
|
enabled: source.currency.bags.enabled ?? true,
|
|
label: source.currency.bags.label || source.currency.bags
|
|
};
|
|
source.currency.chests = {
|
|
enabled: source.currency.chests.enabled ?? true,
|
|
label: source.currency.chests.label || source.currency.chests
|
|
};
|
|
return source;
|
|
}
|
|
}
|