diff --git a/src/main.mjs b/src/main.mjs index 59bf17dd..09d2c24a 100644 --- a/src/main.mjs +++ b/src/main.mjs @@ -1,407 +1,32 @@ -import {PlayerCharacterDataModel} from "./module/data/character.mjs"; -import {SkillSheet} from "./module/sheets/skillSheet.mjs"; -import {SpellSheet} from "./module/sheets/spellSheet.mjs"; -import {SkillDataModel} from "./module/data/skill.mjs"; -import {SpellDataModel} from "./module/data/spell.mjs"; -import {VornachteileDataModel} from "./module/data/vornachteile.mjs"; -import {Character} from "./module/documents/character.mjs"; -import CharacterSheet from "./module/sheets/characterSheet.mjs"; -import {AdvantageSheet} from "./module/sheets/advantageSheet.mjs"; -import {GroupDataModel} from "./module/data/group.mjs"; -import {GroupSheet} from "./module/sheets/groupSheet.mjs"; -import {EquipmentDataModel} from "./module/data/equipment.mjs"; -import {EquipmentSheet} from "./module/sheets/equipmentSheet.mjs"; -import {CreatureDataModel} from "./module/data/creature.mjs"; -import {CreatureSheet} from "./module/sheets/creatureSheet.mjs"; -import {LiturgySheet} from "./module/sheets/liturgySheet.mjs"; -import {LiturgyDataModel} from "./module/data/liturgy.mjs"; -import {BlessingDataModel} from "./module/data/blessing.mjs"; -import {SpecialAbilityDataModel} from "./module/data/specialAbility.mjs"; -import {SpecialAbilitySheet} from "./module/sheets/specialAbilitySheet.mjs"; -import {ActiveEffectSheet} from "./module/sheets/activeEffectSheet.mjs"; -import {ActiveEffectDataModel} from "./module/data/activeeffect.mjs"; -import {Trefferzone, Wunde, Zonenruestung, Zonenwunde} from "./module/data/Trefferzone.js"; -import {ProfessionDataModel} from "./module/data/profession.mjs"; -import {SpeciesDataModel} from "./module/data/species.mjs"; -import {CultureDataModel} from "./module/data/culture.mjs"; -import {CultureSheet} from "./module/sheets/cultureSheet.mjs"; -import {SpeciesSheet} from "./module/sheets/SpeciesSheet.mjs"; -import {ProfessionSheet} from "./module/sheets/professionSheet.mjs"; import {XmlImportDialog} from "./module/dialog/xmlImportDialog.mjs"; -import {MerchantDataModel} from "./module/data/merchant.mjs"; -import {MerchantSheet} from "./module/sheets/merchantSheet.mjs"; -import {RestingDialog} from "./module/dialog/restingDialog.mjs"; -import {BattleDialog} from "./module/dialog/battleDialog.mjs"; -import {Talent} from "./module/data/talent.mjs"; - -async function preloadHandlebarsTemplates() { - return foundry.applications.handlebars.loadTemplates([ - // ui partials. - 'systems/DSA_4-1/templates/ui/partial-rollable-button.hbs', - 'systems/DSA_4-1/templates/ui/partial-rollable-weaponskill-button.hbs', - 'systems/DSA_4-1/templates/ui/partial-rollable-language-button.hbs', - 'systems/DSA_4-1/templates/ui/partial-attribute-button.hbs', - 'systems/DSA_4-1/templates/ui/partial-talent-editable.hbs', - 'systems/DSA_4-1/templates/ui/partial-die.hbs', - 'systems/DSA_4-1/templates/ui/partial-advantage-button.hbs', - 'systems/DSA_4-1/templates/ui/partial-sf-button.hbs', - 'systems/DSA_4-1/templates/ui/partial-action-button.hbs', - 'systems/DSA_4-1/templates/ui/partial-equipment-button.hbs', - 'systems/DSA_4-1/templates/ui/partial-array-editor.hbs', - 'systems/DSA_4-1/templates/dialog/liturgy-dialog.hbs' - ]); -} +import {initGlobalSettings, initUserSettings} from "./module/settings/global-settings.mjs"; +import {setUpActorSheets, setUpItemSheets} from "./module/setup/sheets.mjs"; +import {loadPartials} from "./module/setup/partials.mjs"; +import {initCombat, initDataModels, initDocumentClasses, initGlobalAccess} from "./module/setup/config.mjs"; +import {initHandlebarHelpers} from "./module/handlebar-helpers/index.mjs"; Hooks.once("init", () => { - const displayCurrency = (data) => { - - - // schema for Mittelreich: 1 Ducat = 10 Silver = 100 Kreutzer = 1000 Heller - // internally the price is always given in Silver - // so we need to inflate the value of price by 100 to be able to divide beginning from Heller - - const baseValue = data * 100 - - // then we can regex over it - - const currencyRegexp = /(.*)(.)(.)(.)/g - const withDucats = currencyRegexp.exec(baseValue) - let _ = undefined - let ducats = 0 - let silver = 0 - let kreutzer = 0 - let heller = 0 - - if (withDucats) { - [_, ducats, silver, kreutzer, heller] = withDucats - } else { - const currencyRegexp = /(.)(.)(.)/g - const withSilver = currencyRegexp.exec(baseValue) - if (withSilver) { - [_, silver, kreutzer, heller] = withSilver - } else { - const currencyRegexp = /(.)(.)/g - const withKreutzer = currencyRegexp.exec(baseValue) - - if (withKreutzer) { - [_, kreutzer, heller] = withKreutzer - - } else { - heller = baseValue - } - } - } - - let str = `` - if (ducats > 0) { - str += ducats + "" - } - if (silver > 0) { - str += silver + "" - } - if (kreutzer > 0) { - str += kreutzer + "" - } - if (heller > 0) { - str += heller + "" - } - str = str + "" - - return new Handlebars.SafeString(str) - } - - game.DSA41 = { - rollItemMacro, - Zonenruestung, - Zonenwunde, - Trefferzone, - Wunde, - RestingDialog, - BattleDialog, - Talent, - displayCurrency - } - - // Configure custom Document implementations. - CONFIG.Actor.documentClass = Character; - - // Configure System Data Models. - CONFIG.Actor.dataModels = { - character: PlayerCharacterDataModel, - group: GroupDataModel, - creature: CreatureDataModel, - Merchant: MerchantDataModel, - }; - - CONFIG.Item.dataModels = { - Skill: SkillDataModel, - Spell: SpellDataModel, - Advantage: VornachteileDataModel, - Equipment: EquipmentDataModel, - Liturgy: LiturgyDataModel, - Blessing: BlessingDataModel, - SpecialAbility: SpecialAbilityDataModel, - ActiveEffect: ActiveEffectDataModel, - Profession: ProfessionDataModel, - Spezies: SpeciesDataModel, - Kultur: CultureDataModel, - } - - CONFIG.Combat.initiative = { - formula: `(@ini.wuerfel)d6 + @ini.aktuell`, - decimals: 0 - } - - const setMovementSpeeds = () => { - const movementActions = CONFIG.Token.movement.actions - - for (const key of ["swim", "climb", "crawl", "walk", "drive", "ride", "fly"]) { - delete movementActions[key]?.getCostFunction - } - - movementActions.climb.canSelect = (token) => { - const actor = token.actor | null; - return (actor.type === "Character" && actor.system.itemTypes["Skill"].find(p => p.name === "Klettern")?.system.taw > 0) || actor.type === "Creature" - } - - movementActions.crawl.canSelect = (token) => { - const actor = token.actor | null; - return actor.type === "Character" || actor.type === "Creature" - } - - movementActions.walk.canSelect = (token) => { - const actor = token.actor | null; - return actor.type === "Character" || actor.type === "Creature" - } - - movementActions.swim = { - label: "TOKEN.MOVEMENT.ACTIONS.swim.label", - icon: "fa-solid fa-swim", - order: 0, - canSelect: (token) => { - const actor = token.actor | null; - return actor.type === "Character" || actor.type === "Creature" - }, - deriveTerrainDifficulty: () => 1, - } - - movementActions.drive = { - label: "TOKEN.MOVEMENT.ACTIONS.drive.label", - icon: "fa-solid fa-car-side", - order: 0, - canSelect: (token) => { - const actor = token.actor | null; - return (actor.type === "Character" && actor.system.itemTypes["Skill"].find(p => p.name === "Fahrzeuge lenken")?.system.taw > 0) || actor.type === "Creature" - }, - deriveTerrainDifficulty: () => 1, - } - - movementActions.ride = { - label: "TOKEN.MOVEMENT.ACTIONS.ride.label", - icon: "fa-solid fa-horse", - order: 0, - canSelect: (token) => { - const actor = token.actor | null; - return (actor.type === "Character" && actor.system.itemTypes["Skill"].find(p => p.name === "Reiten")?.system.taw > 0) || actor.type === "Creature" - }, - deriveTerrainDifficulty: () => 1, - } - - movementActions.fly = { - label: "TOKEN.MOVEMENT.ACTIONS.fly.label", - icon: "fa-solid fa-wings", - order: 0, - canSelect: (token) => { - const actor = token.actor | null; - return (actor.type === "Character" && actor.system.itemTypes["Skill"].find(p => p.name === "Fliegen")?.system.taw > 0) || actor.type === "Creature" - }, - deriveTerrainDifficulty: () => 1, - } - - } - setMovementSpeeds() - console.log("DSA 4.1 is ready for development!") - foundry.documents.collections.Actors.registerSheet('dsa41.character', CharacterSheet, { - types: ["character"], - makeDefault: true, - }) - foundry.documents.collections.Actors.registerSheet('dsa41.creature', CreatureSheet, { - types: ["creature"], - makeDefault: true, - }) - foundry.documents.collections.Actors.registerSheet('dsa41.group', GroupSheet, { - types: ["group"], - makeDefault: true, - }) - foundry.documents.collections.Items.registerSheet('dsa41.skill', SkillSheet, { - types: ["Skill"], - makeDefault: true, - }); - foundry.documents.collections.Items.registerSheet('dsa41.spell', SpellSheet, { - types: ["Spell"], - makeDefault: true, - }); - foundry.documents.collections.Items.registerSheet('dsa41.advantage', AdvantageSheet, { - types: ["Advantage"], - makeDefault: true, - }) - foundry.documents.collections.Items.registerSheet('dsa41.equipment', EquipmentSheet, { - types: ["Equipment"], - makeDefault: false, - }) - foundry.documents.collections.Items.registerSheet('dsa41.liturgy', LiturgySheet, { - types: ["Liturgy"], - makeDefault: true, - }) - foundry.documents.collections.Items.registerSheet('dsa41.specialAbility', SpecialAbilitySheet, { - types: ["SpecialAbility"], - makeDefault: true, - }) - foundry.documents.collections.Items.registerSheet('dsa41.activeEffect', ActiveEffectSheet, { - types: ['ActiveEffect'], - makeDefault: true, - }) - foundry.documents.collections.Items.registerSheet('dsa41.culture', CultureSheet, { - types: ['Culture'], - makeDefault: true, - label: 'DSA41.CultureLabels.Culture' - }) - foundry.documents.collections.Items.registerSheet('dsa41.spezien', SpeciesSheet, { - types: ['Species'], - makeDefault: true, - }) - foundry.documents.collections.Items.registerSheet('dsa41.profession', ProfessionSheet, { - types: ['Profession'], - makeDefault: true, - }) - foundry.documents.collections.Actors.registerSheet('dsa41.merchant', MerchantSheet, { - types: ['Merchant'], - makeDefault: true, + game.DSA41 = initGlobalAccess() + initDocumentClasses(CONFIG) + + initUserSettings(game.settings) + initGlobalSettings(game.settings) + + initDataModels(CONFIG) + initCombat(CONFIG) + + setUpActorSheets(foundry.documents.collections.Actors) + setUpItemSheets(foundry.documents.collections.Items) + + loadPartials(foundry.applications.handlebars).then(() => { }) - game.settings.register('DSA_4-1', 'optional_colorfuldice', { - name: "Optional: Farbige Würfel nach Paramanthus", - hint: "Färbt die Würfel je nach Attribut ein", - scope: "client", - config: true, - type: Boolean, - default: false, - onChange: value => { - }, - requiresReload: false - }) - game.settings.register('DSA_4-1', 'optional_trefferzonen', { - name: "Optional: Trefferzonen", - hint: "Ersetzt das Wundensystem aus dem BRW durch das Trefferzonensystem aus WdH", - scope: "world", - config: true, - type: Boolean, - default: false, - onChange: value => { - }, - requiresReload: true - }) - game.settings.register('DSA_4-1', 'optional_ruestungzonen', { - name: "Optional: Zonenrüstung", - hint: "Ersetzt das Rüstungssystem aus dem BRW durch das Zonenrüstungssystem aus WdH", - scope: "world", - config: true, - type: Boolean, - default: false, - onChange: value => { - }, - requiresReload: true - }) - game.settings.register('DSA_4-1', 'optional_ausdauer', { - name: "Optional: Ausdauerregeln", - hint: "Aktiviert Regeln für das Spiel mit Ausdauer", - scope: "world", - config: true, - type: Boolean, - default: false, - onChange: value => { - }, - requiresReload: true - }) - game.settings.register('DSA_4-1', 'optional_distanzklassen', { - name: "Optional: Distanzklassen", - hint: "Aktiviert Regeln für das Spiel mit Distanzklassen", - scope: "world", - config: true, - type: Boolean, - default: false, - onChange: value => { - }, - requiresReload: true - }) - game.settings.register('DSA_4-1', 'optional_aufstufen_von_liturgien', { - name: "Optional: Aufstufen von Liturgien", - hint: "Aktiviert die Regeln zum Aufstufen von Liturgien", - scope: "world", - config: true, - type: Boolean, - default: false, - disabled: true, - requiresReload: true - }) - - - Handlebars.registerHelper("weight", (data) => { - - const baseValue = data * 1000 // to get to gramms (1/1000 Stone) - - const stone = Math.floor(baseValue / 1000) - const remainder = baseValue - (stone * 1000) - const ounces = remainder / 25 - let stoneRepresentation = '' - let ouncesRepresentation = '' - if (stone > 0) { - stoneRepresentation = `${stone}` - } - if (ounces > 0) { - ouncesRepresentation = `${ounces}` - } - - return new Handlebars.SafeString(`${stoneRepresentation}${ouncesRepresentation}`) - - }) - - Handlebars.registerHelper("fieldTooltip", (...args) => { - const [fieldName, actorId] = args - - const actor = game.actors.find(p => p._id === actorId) - - let tooltip = "" - - if (actor) { - Object.entries(actor.getModificationsOn(fieldName)).forEach(([key, value]) => { - tooltip += `${key}: ${value}
` - - }) - } else { - tooltip = `${fieldName} not found` - } - - - return new Handlebars.SafeString(tooltip) - }) - - Handlebars.registerHelper("currency", game.DSA41.displayCurrency) - - return preloadHandlebarsTemplates(); + initHandlebarHelpers(Handlebars) }) -Hooks.once("ready", async function () { - // Wait to register hotbar drop hook on ready so that modules could register earlier if they want to - Hooks.on("hotbarDrop", (bar, data, slot) => { - return createTalentMacro(data, slot) - }); -}); - - Hooks.on("getActorContextOptions", (application, menuItems) => { menuItems.push({ name: "Import from XML", @@ -409,44 +34,7 @@ Hooks.on("getActorContextOptions", (application, menuItems) => { callback: (li) => { const actorId = li.getAttribute("data-entry-id") const actor = game.actors.get(actorId) - //actor.import() new XmlImportDialog(actor).render(true) } }) -}) - -async function createTalentMacro(data, slot) { - if (data.type !== "Item") return; - - const uuid = foundry.utils.parseUuid(data.uuid) - - const itemId = uuid.id; - const actorId = uuid.primaryId; - const item = await game.actors.get(actorId).items.get(itemId); - - // Create the macro command - const command = `game.DSA41.rollItemMacro("${data.uuid}");`; - - const macro = await Macro.create({ - name: item.name, - type: "script", - img: item.img, - command: command, - flags: {"dsa41.skillMacro": true} - }); - - game.user.assignHotbarMacro(macro, slot); - return false; -} - -function rollItemMacro(_uuid) { - const speaker = ChatMessage.getSpeaker(); - const uuid = foundry.utils.parseUuid(_uuid) - const itemId = uuid.id; - const actorId = uuid.primaryId; - let actor = game.actors.get(actorId); - const item = actor ? actor.items.get(itemId) : null; - if (!item) return ui.notifications.warn(`Your controlled Actor does not have an item with id ${itemId}`); - - return item.system.roll(); -} +}) \ No newline at end of file diff --git a/src/module/handlebar-helpers/currency.mjs b/src/module/handlebar-helpers/currency.mjs new file mode 100644 index 00000000..3f83b42c --- /dev/null +++ b/src/module/handlebar-helpers/currency.mjs @@ -0,0 +1,75 @@ +function currency(st) { + + // schema for Mittelreich: 1 Ducat = 10 Silver = 100 Kreutzer = 1000 Heller + // internally the price is always given in Silver + // so we need to inflate the value of price by 100 to be able to divide beginning from Heller + + const baseValue = st * 100 + + // then we can regex over it + + const currencyRegexp = /(.*)(.)(.)(.)/g + const withDucats = currencyRegexp.exec(baseValue) + let _ = undefined + let ducats = 0 + let silver = 0 + let kreutzer = 0 + let heller = 0 + + if (withDucats) { + [_, ducats, silver, kreutzer, heller] = withDucats + } else { + const currencyRegexp = /(.)(.)(.)/g + const withSilver = currencyRegexp.exec(baseValue) + if (withSilver) { + [_, silver, kreutzer, heller] = withSilver + } else { + const currencyRegexp = /(.)(.)/g + const withKreutzer = currencyRegexp.exec(baseValue) + + if (withKreutzer) { + [_, kreutzer, heller] = withKreutzer + + } else { + heller = baseValue + } + } + } + + return { + ducats, + silver, + kreutzer, + heller + } +} + +function registerHelper(hbs) { + hbs?.registerHelper('currency', (data) => { + + const {ducats, silver, kreutzer, heller} = currency(data) + + + let str = `` + if (ducats > 0) { + str += ducats + "" + } + if (silver > 0) { + str += silver + "" + } + if (kreutzer > 0) { + str += kreutzer + "" + } + if (heller > 0) { + str += heller + "" + } + str += "" + + return new Handlebars.SafeString(str) + }) +} + +export { + currency, + registerHelper +} \ No newline at end of file diff --git a/src/module/handlebar-helpers/field-tooltip.mjs b/src/module/handlebar-helpers/field-tooltip.mjs new file mode 100644 index 00000000..7851af55 --- /dev/null +++ b/src/module/handlebar-helpers/field-tooltip.mjs @@ -0,0 +1,36 @@ +function fieldTooltip(forActor, fieldName) { + + let tooltip = {} + + if (forActor) { + Object.entries(forActor.getModificationsOn(fieldName)).forEach(([key, value]) => { + tooltip[key] = value + + }) + } + + return tooltip +} + +function registerHelper(hbs) { + hbs?.registerHelper('fieldTooltip', (data) => { + + const [fieldName, actorId] = data + const forActor = game.actors.find(p => p._id === actorId) + const tooltip = fieldTooltip(forActor, fieldName) + + let template = `` + + Object.entries(tooltip).forEach(([key, value]) => { + template += `${key}: ${value}
` + + }) + + return new Handlebars.SafeString(template) + }) +} + +export { + fieldTooltip, + registerHelper +} \ No newline at end of file diff --git a/src/module/handlebar-helpers/index.mjs b/src/module/handlebar-helpers/index.mjs new file mode 100644 index 00000000..a70b570e --- /dev/null +++ b/src/module/handlebar-helpers/index.mjs @@ -0,0 +1,13 @@ +import * as currency from "./currency.mjs"; +import * as fieldTooltip from "./field-tooltip.mjs"; +import * as weight from "./weight.mjs"; + +function initHandlebarHelpers(hbs) { + currency.registerHelper(hbs) + fieldTooltip.registerHelper(hbs) + weight.registerHelper(hbs) +} + +export { + initHandlebarHelpers +} \ No newline at end of file diff --git a/src/module/handlebar-helpers/weight.mjs b/src/module/handlebar-helpers/weight.mjs new file mode 100644 index 00000000..fd526b2f --- /dev/null +++ b/src/module/handlebar-helpers/weight.mjs @@ -0,0 +1,40 @@ +function weight(money) { + + const baseValue = money * 1000 // to get to gramms (1/1000 Stone) + + const stone = Math.floor(baseValue / 1000) + const remainder = baseValue - (stone * 1000) + const ounces = remainder / 25 + let stoneRepresentation = '' + let ouncesRepresentation = '' + + return { + stone: stoneRepresentation, + ounces: ouncesRepresentation, + } + +} + +function registerHelper(hbs) { + hbs?.registerHelper('weight', (data) => { + + let template = `` + + const {stone, ounces} = weight(data) + if (stone > 0) { + template += `${stone}` + } + if (ounces > 0) { + template += `${ounces}` + } + + template += `` + + return new Handlebars.SafeString(template) + }) +} + +export { + weight, + registerHelper +} \ No newline at end of file diff --git a/src/module/settings/global-settings.mjs b/src/module/settings/global-settings.mjs new file mode 100644 index 00000000..50d919a8 --- /dev/null +++ b/src/module/settings/global-settings.mjs @@ -0,0 +1,83 @@ +function initGlobalSettings(settings) { + + settings.register('DSA_4-1', 'optional_trefferzonen', { + name: "Optional: Trefferzonen", + hint: "Ersetzt das Wundensystem aus dem BRW durch das Trefferzonensystem aus WdH", + scope: "world", + config: true, + type: Boolean, + default: false, + onChange: value => { + }, + requiresReload: true + }) + + settings.register('DSA_4-1', 'optional_ruestungzonen', { + name: "Optional: Zonenrüstung", + hint: "Ersetzt das Rüstungssystem aus dem BRW durch das Zonenrüstungssystem aus WdH", + scope: "world", + config: true, + type: Boolean, + default: false, + onChange: value => { + }, + requiresReload: true + }) + + settings.register('DSA_4-1', 'optional_ausdauer', { + name: "Optional: Ausdauerregeln", + hint: "Aktiviert Regeln für das Spiel mit Ausdauer", + scope: "world", + config: true, + type: Boolean, + default: false, + onChange: value => { + }, + requiresReload: true + }) + + settings.register('DSA_4-1', 'optional_distanzklassen', { + name: "Optional: Distanzklassen", + hint: "Aktiviert Regeln für das Spiel mit Distanzklassen", + scope: "world", + config: true, + type: Boolean, + default: false, + onChange: value => { + }, + requiresReload: true + }) + + settings.register('DSA_4-1', 'optional_aufstufen_von_liturgien', { + name: "Optional: Aufstufen von Liturgien", + hint: "Aktiviert die Regeln zum Aufstufen von Liturgien", + scope: "world", + config: true, + type: Boolean, + default: false, + disabled: true, + requiresReload: true + }) + +} + +function initUserSettings(settings) { + + settings.register('DSA_4-1', 'optional_colorfuldice', { + name: "Optional: Farbige Würfel nach Paramanthus", + hint: "Färbt die Würfel je nach Attribut ein", + scope: "client", + config: true, + type: Boolean, + default: false, + onChange: value => { + }, + requiresReload: false + }) + +} + +export { + initGlobalSettings, + initUserSettings +} \ No newline at end of file diff --git a/src/module/setup/config.mjs b/src/module/setup/config.mjs new file mode 100644 index 00000000..c11b6fbd --- /dev/null +++ b/src/module/setup/config.mjs @@ -0,0 +1,77 @@ +import {PlayerCharacterDataModel} from "../data/character.mjs"; +import {GroupDataModel} from "../data/group.mjs"; +import {CreatureDataModel} from "../data/creature.mjs"; +import {MerchantDataModel} from "../data/merchant.mjs"; +import {SkillDataModel} from "../data/skill.mjs"; +import {SpellDataModel} from "../data/spell.mjs"; +import {VornachteileDataModel} from "../data/vornachteile.mjs"; +import {EquipmentDataModel} from "../data/equipment.mjs"; +import {LiturgyDataModel} from "../data/liturgy.mjs"; +import {BlessingDataModel} from "../data/blessing.mjs"; +import {SpecialAbilityDataModel} from "../data/specialAbility.mjs"; +import {ActiveEffectDataModel} from "../data/activeeffect.mjs"; +import {ProfessionDataModel} from "../data/profession.mjs"; +import {SpeciesDataModel} from "../data/species.mjs"; +import {CultureDataModel} from "../data/culture.mjs"; +import {Trefferzone, Wunde, Zonenruestung, Zonenwunde} from "../data/Trefferzone.js"; +import {RestingDialog} from "../dialog/restingDialog.mjs"; +import {BattleDialog} from "../dialog/battleDialog.mjs"; +import {Talent} from "../data/talent.mjs"; +import {Character} from "../documents/character.mjs"; +import {currency} from "../handlebar-helpers/currency.mjs"; + +function initGlobalAccess() { + + return { + Zonenruestung, + Zonenwunde, + Trefferzone, + Wunde, + RestingDialog, + BattleDialog, + Talent, + displayCurrency: currency + } + +} + +function initDocumentClasses(config) { + config.Actor.documentClass = Character +} + +function initDataModels(config) { + config.Actor.dataModels = { + character: PlayerCharacterDataModel, + group: GroupDataModel, + creature: CreatureDataModel, + Merchant: MerchantDataModel, + } + + config.Item.dataModels = { + Skill: SkillDataModel, + Spell: SpellDataModel, + Advantage: VornachteileDataModel, + Equipment: EquipmentDataModel, + Liturgy: LiturgyDataModel, + Blessing: BlessingDataModel, + SpecialAbility: SpecialAbilityDataModel, + ActiveEffect: ActiveEffectDataModel, + Profession: ProfessionDataModel, + Spezies: SpeciesDataModel, + Kultur: CultureDataModel, + } +} + +function initCombat(config) { + config.Combat.initiative = { + formula: `(@ini.wuerfel)d6 + @ini.aktuell`, + decimals: 0 + } +} + +export { + initGlobalAccess, + initDocumentClasses, + initDataModels, + initCombat, +} \ No newline at end of file diff --git a/src/module/setup/partials.mjs b/src/module/setup/partials.mjs new file mode 100644 index 00000000..9ff711c4 --- /dev/null +++ b/src/module/setup/partials.mjs @@ -0,0 +1,25 @@ +function loadPartials(hbs) { + + return new Promise(resolve => { + hbs.loadTemplates([ + // ui partials. + 'systems/DSA_4-1/templates/ui/partial-rollable-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-rollable-weaponskill-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-rollable-language-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-attribute-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-talent-editable.hbs', + 'systems/DSA_4-1/templates/ui/partial-die.hbs', + 'systems/DSA_4-1/templates/ui/partial-advantage-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-sf-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-action-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-equipment-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-array-editor.hbs', + 'systems/DSA_4-1/templates/dialog/liturgy-dialog.hbs' + ]).then(resolve); + }) + +} + +export { + loadPartials, +} \ No newline at end of file diff --git a/src/module/setup/sheets.mjs b/src/module/setup/sheets.mjs new file mode 100644 index 00000000..4aa4fa6b --- /dev/null +++ b/src/module/setup/sheets.mjs @@ -0,0 +1,96 @@ +import CharacterSheet from "../sheets/characterSheet.mjs"; +import {CreatureSheet} from "../sheets/creatureSheet.mjs"; +import {GroupSheet} from "../sheets/groupSheet.mjs"; +import {SkillSheet} from "../sheets/skillSheet.mjs"; +import {SpellSheet} from "../sheets/spellSheet.mjs"; +import {AdvantageSheet} from "../sheets/advantageSheet.mjs"; +import {EquipmentSheet} from "../sheets/equipmentSheet.mjs"; +import {LiturgySheet} from "../sheets/liturgySheet.mjs"; +import {SpecialAbilitySheet} from "../sheets/specialAbilitySheet.mjs"; +import {ActiveEffectSheet} from "../sheets/activeEffectSheet.mjs"; +import {CultureSheet} from "../sheets/cultureSheet.mjs"; +import {SpeciesSheet} from "../sheets/SpeciesSheet.mjs"; +import {ProfessionSheet} from "../sheets/professionSheet.mjs"; +import {MerchantSheet} from "../sheets/merchantSheet.mjs"; + +function setUpActorSheets(registry) { + + registry.registerSheet('dsa41.character', CharacterSheet, { + types: ["character"], + makeDefault: true, + }) + registry.registerSheet('dsa41.creature', CreatureSheet, { + types: ["creature"], + makeDefault: true, + }) + registry.registerSheet('dsa41.group', GroupSheet, { + types: ["group"], + makeDefault: true, + }) + + registry.registerSheet('dsa41.merchant', MerchantSheet, { + types: ['Merchant'], + makeDefault: true, + }) + +} + +function setUpItemSheets(registry) { + + registry.registerSheet('dsa41.skill', SkillSheet, { + types: ["Skill"], + makeDefault: true, + }); + + registry.registerSheet('dsa41.spell', SpellSheet, { + types: ["Spell"], + makeDefault: true, + }); + + registry.registerSheet('dsa41.advantage', AdvantageSheet, { + types: ["Advantage"], + makeDefault: true, + }) + + registry.registerSheet('dsa41.equipment', EquipmentSheet, { + types: ["Equipment"], + makeDefault: false, + }) + + registry.registerSheet('dsa41.liturgy', LiturgySheet, { + types: ["Liturgy"], + makeDefault: true, + }) + + registry.registerSheet('dsa41.specialAbility', SpecialAbilitySheet, { + types: ["SpecialAbility"], + makeDefault: true, + }) + + registry.registerSheet('dsa41.activeEffect', ActiveEffectSheet, { + types: ['ActiveEffect'], + makeDefault: true, + }) + + registry.registerSheet('dsa41.culture', CultureSheet, { + types: ['Culture'], + makeDefault: true, + label: 'DSA41.CultureLabels.Culture' + }) + + registry.registerSheet('dsa41.spezien', SpeciesSheet, { + types: ['Species'], + makeDefault: true, + }) + + registry.registerSheet('dsa41.profession', ProfessionSheet, { + types: ['Profession'], + makeDefault: true, + }) + +} + +export { + setUpActorSheets, + setUpItemSheets, +} \ No newline at end of file