Hooks.once("init", function() { console.log("INIT"); CONFIG.Actor.dataModels.Player = DSA41_CharacterData; CONFIG.Item.dataModels.Gegenstaende = DSA41_GegenstaendeData; //DocumentSheetConfig.unregisterSheet(Actor, "core", ActorSheet); DocumentSheetConfig.registerSheet(Actor, "dsa41", DSA41_ActorSheet, { makeDefault: true, types: [ "Player", ] }); //DocumentSheetConfig.unregisterSheet(Item, "core", ItemSheet); DocumentSheetConfig.registerSheet(Item, "dsa41", DSA41_ItemSheet, { makeDefault: true, types: [ "Gegenstaende", "Waffen", "Ruestungen", ] }); }); const { SchemaField, NumberField, StringField } = foundry.data.fields; class AttributeField extends foundry.data.fields.SchemaField { constructor() { return super({ initial: new NumberField({ integer: true, initial: 8, min: 8, max: 14, }), advancement: new NumberField({ integer: true, initial: 0, min: 0, max: 4, }), modifier: new NumberField({ integer: true, initial: 0, min: 0, }), }); } } class CombatTalentField extends foundry.data.fields.SchemaField { constructor() { return super({ talentwert: new NumberField({ integer: true, initial: 0 }), attacke: new NumberField({ integer: true, initial: 0 }), parade: new NumberField({ integer: true, initial: 0 }), }); } } class DSA41_CharacterData extends foundry.abstract.TypeDataModel { static defineSchema() { return { race: new StringField(), culture: new StringField(), profession: new StringField(), attributes: new SchemaField({ courage: new AttributeField(), cleverness: new AttributeField(), intuition: new AttributeField(), charisma: new AttributeField(), dexterity: new AttributeField(), agility: new AttributeField(), constitution: new AttributeField(), strength: new AttributeField(), }), kampf_talente: new SchemaField({ anderthalbhaender: new CombatTalentField(), armbrust: new CombatTalentField(), belagerungswaffen: new CombatTalentField(), blasrohr: new CombatTalentField(), bogen: new CombatTalentField(), diskus: new CombatTalentField(), dolche: new CombatTalentField(), fechtwaffen: new CombatTalentField(), hiebwaffen: new CombatTalentField(), infanteriewaffen: new CombatTalentField(), kettenstaebe: new CombatTalentField(), kettenwaffen: new CombatTalentField(), lanzenreiten: new CombatTalentField(), peitsche: new CombatTalentField(), raufen: new CombatTalentField(), ringen: new CombatTalentField(), saebel: new CombatTalentField(), schleuder: new CombatTalentField(), schwerter: new CombatTalentField(), speere: new CombatTalentField(), staebe: new CombatTalentField(), wurfbeile: new CombatTalentField(), wurfmesser: new CombatTalentField(), wurfspeere: new CombatTalentField(), zweihandflegel: new CombatTalentField(), zweihand_hiebwaffen: new CombatTalentField(), zweihandschwerter: new CombatTalentField(), }), talente: new SchemaField({ koerperliche: new SchemaField({ akrobatik: new NumberField({ integer: true, initial: 0 }), athletik: new NumberField({ integer: true, initial: 0 }), fliegen: new NumberField({ integer: true, initial: 0 }), gaukeleien: new NumberField({ integer: true, initial: 0 }), klettern: new NumberField({ integer: true, initial: 0 }), koerperbeherrschung: new NumberField({ integer: true, initial: 0 }), reiten: new NumberField({ integer: true, initial: 0 }), schleichen: new NumberField({ integer: true, initial: 0 }), schwimmen: new NumberField({ integer: true, initial: 0 }), selbstbeherrschung: new NumberField({ integer: true, initial: 0 }), sich_verstecken: new NumberField({ integer: true, initial: 0 }), singen: new NumberField({ integer: true, initial: 0 }), sinnenschärfe: new NumberField({ integer: true, initial: 0 }), skifahren: new NumberField({ integer: true, initial: 0 }), stimmen_imitieren: new NumberField({ integer: true, initial: 0 }), tanzen: new NumberField({ integer: true, initial: 0 }), taschendiebstahl: new NumberField({ integer: true, initial: 0 }), zechen: new NumberField({ integer: true, initial: 0 }), }), gesellschaftliche: new SchemaField({ betoeren: new NumberField({ integer: true, initial: 0 }), etikette: new NumberField({ integer: true, initial: 0 }), gassenwissen: new NumberField({ integer: true, initial: 0 }), lehren: new NumberField({ integer: true, initial: 0 }), menschenkenntnis: new NumberField({ integer: true, initial: 0 }), schauspielerei: new NumberField({ integer: true, initial: 0 }), schriftlicher_ausdruck: new NumberField({ integer: true, initial: 0 }), sich_verkleiden: new NumberField({ integer: true, initial: 0 }), ueberreden: new NumberField({ integer: true, initial: 0 }), ueberzeugen: new NumberField({ integer: true, initial: 0 }), }), natur: new SchemaField({ faehrtensuchen: new NumberField({ integer: true, initial: 0 }), fallenstellen: new NumberField({ integer: true, initial: 0 }), fesseln: new NumberField({ integer: true, initial: 0 }), fischen: new NumberField({ integer: true, initial: 0 }), orientierung: new NumberField({ integer: true, initial: 0 }), wettervorhersage: new NumberField({ integer: true, initial: 0 }), wildnisleben: new NumberField({ integer: true, initial: 0 }), }), wissens: new SchemaField({ anatomie: new NumberField({ integer: true, initial: 0 }), baukunst: new NumberField({ integer: true, initial: 0 }), brett_kartenspiel: new NumberField({ integer: true, initial: 0 }), geographie: new NumberField({ integer: true, initial: 0 }), geschichtswissen: new NumberField({ integer: true, initial: 0 }), gesteinskunde: new NumberField({ integer: true, initial: 0 }), goetter_kulte: new NumberField({ integer: true, initial: 0 }), heraldik: new NumberField({ integer: true, initial: 0 }), huettenkunde: new NumberField({ integer: true, initial: 0 }), kriegskunst: new NumberField({ integer: true, initial: 0 }), kryptographie: new NumberField({ integer: true, initial: 0 }), magiekunde: new NumberField({ integer: true, initial: 0 }), mechanik: new NumberField({ integer: true, initial: 0 }), pflanzenkunde: new NumberField({ integer: true, initial: 0 }), philosophie: new NumberField({ integer: true, initial: 0 }), rechnen: new NumberField({ integer: true, initial: 0 }), rechtskunde: new NumberField({ integer: true, initial: 0 }), sagen_legenden: new NumberField({ integer: true, initial: 0 }), schaetzen: new NumberField({ integer: true, initial: 0 }), sprachenkunde: new NumberField({ integer: true, initial: 0 }), staatskunst: new NumberField({ integer: true, initial: 0 }), sternkunde: new NumberField({ integer: true, initial: 0 }), tierkunde: new NumberField({ integer: true, initial: 0 }), }), sprachen: new SchemaField({ lesen_schreiben: new NumberField({ integer: true, initial: 0 }), muttersprache: new NumberField({ integer: true, initial: 0 }), fremdsprache: new NumberField({ integer: true, initial: 0 }), }), handwerks: new SchemaField({ abrichten: new NumberField({ integer: true, initial: 0 }), ackerbau: new NumberField({ integer: true, initial: 0 }), alchimie: new NumberField({ integer: true, initial: 0 }), bergbau: new NumberField({ integer: true, initial: 0 }), bogenbau: new NumberField({ integer: true, initial: 0 }), boote_fahren: new NumberField({ integer: true, initial: 0 }), brauer: new NumberField({ integer: true, initial: 0 }), drucker: new NumberField({ integer: true, initial: 0 }), fahrzeug_lenken: new NumberField({ integer: true, initial: 0 }), falschspiel: new NumberField({ integer: true, initial: 0 }), feinmechanik: new NumberField({ integer: true, initial: 0 }), feuersteinbearbeitung: new NumberField({ integer: true, initial: 0 }), fleischer: new NumberField({ integer: true, initial: 0 }), gerber: new NumberField({ integer: true, initial: 0 }), glaskunst: new NumberField({ integer: true, initial: 0 }), grobschmied: new NumberField({ integer: true, initial: 0 }), handel: new NumberField({ integer: true, initial: 0 }), hauswirtschaft: new NumberField({ integer: true, initial: 0 }), heilkunde_gift: new NumberField({ integer: true, initial: 0 }), heilkunde_krankheiten: new NumberField({ integer: true, initial: 0 }), heilkunde_seele: new NumberField({ integer: true, initial: 0 }), heilkunde_wunden: new NumberField({ integer: true, initial: 0 }), holzbearbeitung: new NumberField({ integer: true, initial: 0 }), instrumentenbauer: new NumberField({ integer: true, initial: 0 }), kartographie: new NumberField({ integer: true, initial: 0 }), kochen: new NumberField({ integer: true, initial: 0 }), kristallzucht: new NumberField({ integer: true, initial: 0 }), lederarbeiten: new NumberField({ integer: true, initial: 0 }), malen_zeichnen: new NumberField({ integer: true, initial: 0 }), maurer: new NumberField({ integer: true, initial: 0 }), metallguss: new NumberField({ integer: true, initial: 0 }), musizieren: new NumberField({ integer: true, initial: 0 }), schloesser_knacken: new NumberField({ integer: true, initial: 0 }), schnapps_brennen: new NumberField({ integer: true, initial: 0 }), schneidern: new NumberField({ integer: true, initial: 0 }), seefahrt: new NumberField({ integer: true, initial: 0 }), seiler: new NumberField({ integer: true, initial: 0 }), steinmetz: new NumberField({ integer: true, initial: 0 }), juwelier: new NumberField({ integer: true, initial: 0 }), stellmacher: new NumberField({ integer: true, initial: 0 }), stoffe_faerben: new NumberField({ integer: true, initial: 0 }), taetowieren: new NumberField({ integer: true, initial: 0 }), toepfern: new NumberField({ integer: true, initial: 0 }), viehzucht: new NumberField({ integer: true, initial: 0 }), webkunst: new NumberField({ integer: true, initial: 0 }), winzer: new NumberField({ integer: true, initial: 0 }), zimmermann: new NumberField({ integer: true, initial: 0 }), }), }), } } prepareDerivedData() { super.prepareDerivedData(); this.computed = {}; for (const [attribute, values] of Object.entries(this.attributes)) { this.computed[attribute] = Object.values(values).reduce((a, b) => a + b, 0); } } } class DSA41_GegenstaendeData extends foundry.abstract.TypeDataModel { static defineSchema() { return { gewicht: new NumberField({ integer: false, initial: 0, min: 0 }), preis: new NumberField({ integer: true, initial: 0, min: 0 }), }; } } class DSA41_RuestungenData extends foundry.abstract.TypeDataModel { static defineSchema() { return { gewicht: new NumberField({ integer: false, initial: 0, min: 0 }), preis: new NumberField({ integer: true, initial: 0, min: 0 }), kopf: new NumberField({ integer: true, initial: 0, min: 0 }), brust: new NumberField({ integer: true, initial: 0, min: 0 }), ruecken: new NumberField({ integer: true, initial: 0, min: 0 }), bauch: new NumberField({ integer: true, initial: 0, min: 0 }), linker_arm: new NumberField({ integer: true, initial: 0, min: 0 }), rechter_arm: new NumberField({ integer: true, initial: 0, min: 0 }), linkes_bein: new NumberField({ integer: true, initial: 0, min: 0 }), rechtes_bein: new NumberField({ integer: true, initial: 0, min: 0 }), gesamt_ruestungsschutz: new NumberField({ integer: false, initial: 0, min: 0 }), gesamt_behinderung: new NumberField({ integer: false, initial: 0, min: 0 }), }; } } class DSA41_ActorSheet extends ActorSheet { get template() { return "systems/dsa-4th-edition/src/ActorSheet.html"; } } class DSA41_ItemSheet extends ItemSheet { get template() { return "systems/dsa-4th-edition/src/ItemSheets/" + this.item.type + ".html"; } }