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(), }), 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 }), }), mr: new SchemaField({ mod: new NumberField({ required: true, integer: true }), }), lep: 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 }), }), 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 }), }), ini: 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", ] } }