foundry-dsa41-game/src/module/data/character.mjs

209 lines
8.4 KiB
JavaScript

import {Skill} from "../documents/skill.mjs";
import {SkillDataModel} from "./skill.mjs";
const {
SchemaField, NumberField, StringField, EmbeddedDocumentField, DocumentIdField, ArrayField, ForeignDocumentField
} = foundry.data.fields;
export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
name: new StringField(),
meta: new SchemaField({
spezies: new StringField(),
kultur: new StringField(),
professions: new ArrayField(new StringField()),
geschlecht: new StringField(),
haarfarbe: new StringField(),
groesse: new NumberField({ required: true, integer: false }),
augenfarbe: new StringField(),
geburtstag: new StringField(),
alter: new NumberField({ required: true, integer: true }),
gewicht: new NumberField({ required: true, integer: true }),
aussehen: new ArrayField(new StringField()),
familie: new ArrayField(new StringField()),
titel: new StringField(),
stand: new StringField(),
}),
ini: new SchemaField({
aktuell: new NumberField({ required: true, integer: true, initial: 0 }),
mod: new NumberField({ required: true, integer: true, initial: 0 }),
wuerfel: new NumberField({ required: true, integer: true, initial: 1}),
}),
lep: new SchemaField({
aktuell: new NumberField({ required: true, integer: true, initial: 0 }),
mod: new NumberField({ required: true, integer: true }),
}),
mr: new SchemaField({
mod: new NumberField({ required: true, integer: true }),
}),
aup: new SchemaField({
mod: new NumberField({ required: true, integer: true }),
}),
asp: new SchemaField({
mod: new NumberField({ required: true, integer: true }),
}),
kap: new SchemaField({
mod: new NumberField({ required: true, integer: true }),
}),
attribute: new SchemaField({
mu: new SchemaField({
start: new NumberField({ required: true, integer: true }),
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
kl: new SchemaField({
start: new NumberField({ required: true, integer: true }),
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
in: new SchemaField({
start: new NumberField({ required: true, integer: true }),
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
ch: new SchemaField({
start: new NumberField({ required: true, integer: true }),
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
ff: new SchemaField({
start: new NumberField({ required: true, integer: true }),
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
ge: new SchemaField({
start: new NumberField({ required: true, integer: true }),
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
ko: new SchemaField({
start: new NumberField({ required: true, integer: true }),
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
kk: new SchemaField({
start: new NumberField({ required: true, integer: true }),
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
at: new SchemaField({
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
pa: new SchemaField({
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
fk: new SchemaField({
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
so: new SchemaField({
start: new NumberField({ required: true, integer: true }),
aktuell: new NumberField({ required: true, integer: true }),
mod: new NumberField({ required: true, integer: true }),
}),
gilde: new StringField(),
}),
vornachteile: new ArrayField(new SchemaField({
vornachteil: new DocumentIdField(Item),
wert: new NumberField({ required: false, integer: true }),
})),
sonderfertigkeiten: new ArrayField(new SchemaField({
name: new StringField(),
auswahlen: new ArrayField(new StringField()),
})),
talente: new ArrayField(new DocumentIdField(Item)),
zauber: new ArrayField(new SchemaField({
talent: new DocumentIdField(),
zfw: new NumberField({integer: true, required: true}),
})),
liturgien: new ArrayField(new SchemaField({
name: new StringField(),
})),
kampfwerte: new ArrayField(new SchemaField({
name: new StringField(),
at: new NumberField({ required: true, integer: true }),
pa: new NumberField({ required: true, integer: true }),
})),
notizen: new ArrayField(new SchemaField({
key: new StringField(),
notiz: new StringField(),
})),
heldenausruestung: new ArrayField(
new SchemaField({
links: new DocumentIdField(),
rechts: new DocumentIdField(),
brust: new DocumentIdField(),
ruecken: new DocumentIdField(),
kopf: new DocumentIdField(),
fernkampf: new DocumentIdField(),
munition: new DocumentIdField(),
armlinks: new DocumentIdField(),
armrechts: new DocumentIdField(),
bauch: new DocumentIdField(),
beinlinks: new DocumentIdField(),
beinrechts: new DocumentIdField(),
}), {min: 0, max: 3}
)
}
}
_initialize(options) {
super._initialize(options);
}
_initializeSource(data, options) {
if (data.heldenausruestung.length === 0) {
let sets = [];
for (let i = 0; i < 3; i++) {
const preppedSet = {}
PlayerCharacterDataModel.getSlots().forEach(slot => {
preppedSet[slot] = null;
})
sets.push(preppedSet);
}
data.heldenausruestung = sets
}
console.log(data)
return super._initializeSource(data, options);
}
async _onCreate(data, options, userId) {
}
static getSlots() {
return [
"links",
"rechts",
"brust",
"ruecken",
"kopf",
"fernkampf",
"munition",
"armlinks",
"armrechts",
"bauch",
"beinlinks",
"beinrechts",
]
}
}