diff --git a/src/main.mjs b/src/main.mjs index ad979844..d08884f6 100644 --- a/src/main.mjs +++ b/src/main.mjs @@ -1,7 +1,9 @@ import { PlayerCharacterDataModel } from "./module/character/character.mjs"; import { DsaActor } from "./module/Actors/dsa-actor.mjs"; -import { Skill } from "./module/Items/Skill.mjs" -import { SkillSheet } from "./module/Items/SkillSheet.mjs"; +import { Skill } from "./module/Items/skill.mjs" +import { SkillSheet } from "./module/Items/skillSheet.mjs"; +import { Spell } from "./module/Items/spell.mjs"; +import { SpellSheet } from "./module/Items/spellSheet.mjs"; Hooks.once("init", () => { @@ -14,14 +16,21 @@ Hooks.once("init", () => { }; CONFIG.Item.dataModels = { - skills: Skill + skills: Skill, + spells: Spell } console.log("DSA 4.1 is ready for development!") // Register sheet application classes Items.registerSheet('dsa41.skill', SkillSheet, { + types: ["Skill"], makeDefault: true, - label: 'DSA41.SheetLabels.Item', + label: 'DSA41.SkillLabels.Item', + }); + Items.registerSheet('dsa41.spell', SpellSheet, { + types: ["Spell"], + makeDefault: true, + label: 'DSA41.SpellLabels.Item', }); }) \ No newline at end of file diff --git a/src/module/Items/Skill.mjs b/src/module/Items/Skill.mjs deleted file mode 100644 index 8796f184..00000000 --- a/src/module/Items/Skill.mjs +++ /dev/null @@ -1,23 +0,0 @@ -const { BooleanField, NumberField, SchemaField, SetField, StringField, HTMLField } = foundry.data.fields; - -export class Skill extends foundry.abstract.TypeDataModel { - - static defineSchema() { - return { - name: new StringField({ required: true }), - category: new StringField({ required: true }), - attributeReference1: new StringField(), // References one of the eight attributes by name - attributeReference2: new StringField(), // References one of the eight attributes by name - attributeReference3: new StringField(), // References one of the eight attributes by name - requisite: new StringField(), // Required skills at a given level - text: new HTMLField(), - handicapValue: new NumberField(), // BE-X - complexity: new NumberField(), // In case of languages - derivedAttribute1: new NumberField(), - derivedAttribute2: new NumberField(), - derivedAttribute3: new NumberField(), - derivedSkillValue: new NumberField(), // TaW - - } - } -} \ No newline at end of file diff --git a/src/module/Items/skill.mjs b/src/module/Items/skill.mjs new file mode 100644 index 00000000..161aef91 --- /dev/null +++ b/src/module/Items/skill.mjs @@ -0,0 +1,36 @@ +const { BooleanField, ArrayField, NumberField, SchemaField, StringField, HTMLField } = foundry.data.fields; + +export class Skill extends Item { + + static defineSchema() { + return { + name: new StringField({ required: true }), + gruppe: new StringField({ required: true }), + probe: new ArrayField(new StringField(), { exact: 3 }), // References one of the eight attributes by name + voraussetzung: new SchemaField({ + talent: new StringField({ model: Skill }), + wert: new NumberField(), + }), // Required skills at a given level + talent: new HTMLField(), + behinderung: new NumberField(), // BE-X + komplexität: new NumberField(), // In case of languages + } + } + /** + * Augment the basic Item data model with additional dynamic data. + */ + prepareData() { } + + /** + * Prepare a data object which is passed to any Roll formulas which are created related to this Item + * @private + */ + getRollData() { } + + /** + * Handle clickable rolls. + * @param {Event} event The originating click event + * @private + */ + async roll() { } +} \ No newline at end of file diff --git a/src/module/Items/SkillSheet.mjs b/src/module/Items/skillSheet.mjs similarity index 81% rename from src/module/Items/SkillSheet.mjs rename to src/module/Items/skillSheet.mjs index 427cf71d..563da5b9 100644 --- a/src/module/Items/SkillSheet.mjs +++ b/src/module/Items/skillSheet.mjs @@ -17,7 +17,7 @@ export class SkillSheet extends ItemSheet { /** @override */ get template() { - return `systems/DSA_4-1/templates/item/item-${this.item.type}-sheet.hbs`; + return `systems/DSA_4-1/templates/item/item-Skill-sheet.hbs`; } /** @override */ @@ -35,13 +35,13 @@ export class SkillSheet extends ItemSheet { context.system = skillData.system; context.flags = skillData.flags; context.categoryOptions = { - combat: "Kampf", - physical: "Körperlich", - social: "Gesellschaft", - survival: "Natur", - knowledge: "Wissen", - languages: "Sprache und Schriften", - crafting: "Handwerk" + kampf: "Kampf", + körperlich: "Körperlich", + gesellschaft: "Gesellschaft", + natur: "Natur", + wissen: "Wissen", + sprachen: "Sprache und Schriften", + handwerk: "Handwerk" } return context; diff --git a/src/module/Items/spell.mjs b/src/module/Items/spell.mjs new file mode 100644 index 00000000..a2ae8de0 --- /dev/null +++ b/src/module/Items/spell.mjs @@ -0,0 +1,45 @@ +const { BooleanField, NumberField, SchemaField, ArrayField, StringField, HTMLField } = foundry.data.fields; + +export class Spell extends Item { + + static defineSchema() { + return { + seite: new NumberField(), + name: new StringField({ required: true }), + probe: new ArrayField({ required: true, exact: 3 }), + probeMod: new StringField(), + technik: new StringField(), + zauberdauer: new StringField(), + wirkung: new StringField(), + kosten: new StringField(), + reichweite: new StringField({ required: true }), + wirkungsdauer: new StringField({ required: true }), + modifikationen: new StringField({ required: true }), + reversalis: new StringField(), + antimagie: new StringField(), + merkmal: new StringField(), + komplexität: new StringField(), + repräsentation: new StringField(), + info: new StringField() + + } + } + + /** + * Augment the basic Item data model with additional dynamic data. + */ + prepareData() { } + + /** + * Prepare a data object which is passed to any Roll formulas which are created related to this Item + * @private + */ + getRollData() { } + + /** + * Handle clickable rolls. + * @param {Event} event The originating click event + * @private + */ + async roll() { } +} \ No newline at end of file diff --git a/src/module/Items/spellSheet.mjs b/src/module/Items/spellSheet.mjs new file mode 100644 index 00000000..9b93553d --- /dev/null +++ b/src/module/Items/spellSheet.mjs @@ -0,0 +1,49 @@ +export class SpellSheet extends ItemSheet { + /**@override */ + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + classes: ['dsa41', 'sheet', 'item', 'spell'], + width: 520, + height: 480, + tabs: [ + { + navSelector: '.sheet-tabs', + contentSelector: '.sheet-body', + initial: 'meta', + }, + ], + }); + } + + /** @override */ + get template() { + return `systems/DSA_4-1/templates/item/item-Spell-sheet.hbs`; + } + + /** @override */ + getData() { + // Retrieve the data structure from the base sheet. You can inspect or log + // the context variable to see the structure, but some key properties for + // sheets are the actor object, the data object, whether or not it's + // editable, the items array, and the effects array. + const context = super.getData(); + + // Use a safe clone of the actor data for further operations. + const skillData = context.data; + + // Add the actor's data to context.data for easier access, as well as flags. + context.system = skillData.system; + context.flags = skillData.flags; + + return context; + } + + activateListeners(html) { + super.activateListeners(html); + + // Everything below here is only needed if the sheet is editable + if (!this.isEditable) return; + + } + +} \ No newline at end of file diff --git a/src/module/character/character.mjs b/src/module/character/character.mjs index a483d6d7..0c5f9c01 100644 --- a/src/module/character/character.mjs +++ b/src/module/character/character.mjs @@ -1,8 +1,11 @@ +import { Skill } from "../Items/skill.mjs"; +import { Spell } from "../Items/spell.mjs"; + const { - SchemaField, NumberField, StringField, ArrayField, BooleanField, + SchemaField, NumberField, StringField, ArrayField, BooleanField, EmbeddedCollectionField, } = foundry.data.fields; -export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel { +export class PlayerCharacterDataModel extends Actor { static defineSchema() { return { @@ -40,20 +43,8 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel { so: new NumberField({ required: true, integer: true }), gilde: new StringField(), }), - talente: new ArrayField(new SchemaField({ - name: new StringField(), - taw: new NumberField({required: true, integer: true }), - kategorie: new StringField(), - probe: new StringField(), - })), - zauber: new ArrayField(new SchemaField({ - name: new StringField(), - rep: new StringField(), - merkmale: new ArrayField(new StringField()), - hauszauber: new BooleanField(), - zfw: new NumberField({ required: true, integer: true }), - quelle: new StringField(), - })), + talente: new EmbeddedCollectionField( { model: Skill }), + zauber: new EmbeddedCollectionField( { model: Spell }), liturgien: new ArrayField(new SchemaField({ name: new StringField(), })), diff --git a/src/packs/liturgien/.gitkeep b/src/packs/liturgien/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/packs/sonderfertigkeiten/.gitkeep b/src/packs/sonderfertigkeiten/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/packs/talente/.gitkeep b/src/packs/talente/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/packs/zauber/.gitkeep b/src/packs/zauber/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/system.json b/src/system.json index ac56dec0..a7c60663 100644 --- a/src/system.json +++ b/src/system.json @@ -7,48 +7,119 @@ "minimum": 12, "verified": 13 }, - "authors": [{ - "name": "GrandpaPoppy" - },{ - "name": "ParanoidSpectre" - },{ - "name": "macniel" - }], - "esmodules": ["main.mjs"], - "styles": ["style/styles.css"], - "packs": [{ - "name": "talente", - "label": "Basistalente", - "type": "Item" - },{ - "name": "zauber", - "label": "Basiszauber", - "type": "Item" - },{ - "name": "liturgien", - "label": "Basisliturgien", - "type": "Item" - },{ - "name": "sonderfertigkeiten", - "label": "Basissonderfertigkeiten", - "type": "Item" - }], - "languages": [{ - "lang": "de", - "name": "Deutsch", - "path": "lang/de.json" - }], - "documentTypes": { - "Actor": { - "character": {} - }, - "Item": { - "skill": { - "stringFields": ["name", "category", "attributeReference1", "attributeReference2", "attributeReference3", "requisite"], - "numberFields": ["handicapValue", "complexity"], - "htmlFields": ["text"] + "authors": [ + { + "name": "GrandpaPoppy" + }, + { + "name": "ParanoidSpectre" + }, + { + "name": "macniel" + } + ], + "esmodules": [ + "main.mjs" + ], + "styles": [ + "style/styles.css" + ], + "packs": [ + { + "name": "Skill", + "label": "Basistalente", + "system": "DSA_4-1", + "type": "Item", + "path": "packs/talente", + "private": false + }, + { + "name": "Spells", + "label": "Basiszauber", + "system": "DSA_4-1", + "type": "Item", + "path": "packs/zauber", + "private": false + }, + { + "name": "liturgien", + "label": "Basisliturgien", + "system": "DSA_4-1", + "type": "Item" + }, + { + "name": "sonderfertigkeiten", + "label": "Basissonderfertigkeiten", + "system": "DSA_4-1", + "type": "Item" + } + ], + "packFolders": [ + { + "name": "Basiszauber", + "color": "#801020", + "sorting": "m", + "packs": [ + "Spells" + ] + } + ], + "languages": [ + { + "lang": "de", + "name": "Deutsch", + "path": "lang/de.json" + } + ], + "documentTypes": { + "Actor": { + "character": {} + }, + "Item": { + "Skill": { + "stringFields": [ + "name", + "gruppe", + "probe", + "voraussetzung" + ], + "numberFields": [ + "handicapValue", + "complexity" + ], + "htmlFields": [ + "text" + ], + "foreignDocumentField": [ + "voraussetzung" + ] + }, + "Spell": { + "stringFields": [ + "name", + "probenMod", + "technik", + "zauberdauer", + "wirkung", + "kosten", + "reichweite", + "wirkungsdauer", + "modifikationen", + "reversalis", + "antimagie", + "merkmal", + "komplexität", + "repräsentation", + "info" + ], + "numberFields": [ + "seite" + ], + "arrayFields": [ + "probe" + ] + } } - } }, "socket": false, "initiative": "1d6", @@ -61,4 +132,4 @@ "url": "https://git.macniel.online/macniel/foundry-dsa41-game", "manifest": "https://git.macniel.online/macniel/foundry-dsa41-game/releases/download/{{VERSION}}/system.json", "download": "https://git.macniel.online/macniel/foundry-dsa41-game/releases/download/{{VERSION}}/release.zip" -} +} \ No newline at end of file diff --git a/src/templates/item/item-skill-sheet.hbs b/src/templates/item/item-Skill-sheet.hbs similarity index 64% rename from src/templates/item/item-skill-sheet.hbs rename to src/templates/item/item-Skill-sheet.hbs index bc8cf453..efb2ee6a 100644 --- a/src/templates/item/item-skill-sheet.hbs +++ b/src/templates/item/item-Skill-sheet.hbs @@ -18,35 +18,35 @@
@@ -54,12 +54,12 @@
diff --git a/src/templates/item/item-Spell-sheet.hbs b/src/templates/item/item-Spell-sheet.hbs new file mode 100644 index 00000000..8b973bc0 --- /dev/null +++ b/src/templates/item/item-Spell-sheet.hbs @@ -0,0 +1,102 @@ +
+ + {{!-- Sheet Header --}} +
+ {{!-- Header stuff goes here --}} + +
+ + {{!-- Sheet Tab Navigation --}} + + + {{!-- Sheet Body --}} +
+ +
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+ +
+
\ No newline at end of file