diff --git a/src/main.mjs b/src/main.mjs index fa265965..59bf17dd 100644 --- a/src/main.mjs +++ b/src/main.mjs @@ -54,6 +54,63 @@ async function preloadHandlebarsTemplates() { 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, @@ -62,7 +119,8 @@ Hooks.once("init", () => { Wunde, RestingDialog, BattleDialog, - Talent + Talent, + displayCurrency } // Configure custom Document implementations. @@ -331,62 +389,7 @@ Hooks.once("init", () => { return new Handlebars.SafeString(tooltip) }) - Handlebars.registerHelper("currency", (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) - }) + Handlebars.registerHelper("currency", game.DSA41.displayCurrency) return preloadHandlebarsTemplates(); }) diff --git a/src/module/documents/character.mjs b/src/module/documents/character.mjs index 85499c7f..ed225f78 100644 --- a/src/module/documents/character.mjs +++ b/src/module/documents/character.mjs @@ -310,6 +310,11 @@ export class Character extends Actor { return updateObject; } + reduceWealth(by) { + console.log('Reichtum reduziert um ', by) + return true + } + isWorn(itemId) { diff --git a/src/module/sheets/merchantSheet.mjs b/src/module/sheets/merchantSheet.mjs index 87d0b104..7c147f94 100644 --- a/src/module/sheets/merchantSheet.mjs +++ b/src/module/sheets/merchantSheet.mjs @@ -20,6 +20,7 @@ export class MerchantSheet extends HandlebarsApplicationMixin(ActorSheetV2) { resizable: true, }, actions: { + buy: MerchantSheet.#buyWare, editImage: DocumentSheetV2.DEFAULT_OPTIONS.actions.editImage, editServiceImage: MerchantSheet.#editServiceImage, editNewServiceImage: MerchantSheet.#editNewServiceImage, @@ -81,6 +82,50 @@ export class MerchantSheet extends HandlebarsApplicationMixin(ActorSheetV2) { await this.document.update(formData.object) // Note: formData.object } + static async #buyWare(event, target) { + + const {itemId} = target.dataset + const item = this.document.items.get(itemId) + + let selections = '' + game.actors.filter(p => p.isOwner).forEach(actor => { + selections += `` + }) + + const actorId = await foundry.applications.api.DialogV2.prompt({ + window: {title: `${item.name} kaufen mit wem?`}, + content: ``, + ok: { + label: `Kaufen`, + callback: (event, button, dialog) => button.form.elements.actor.value + } + }); + + const actor = game.actors.get(actorId) + + + let wealth = 0 + + actor.itemTypes["Equipment"].forEach(coin => { + if (coin.system.category.indexOf("Währung") !== -1) { + wealth += (coin.system.quantity * coin.system.currencyDenominator) + } + }) + + if (wealth >= item.system.price) { + + actor.reduceWealth(item.system.price) + actor.createEmbeddedDocuments('Item', [item]) + this.document.deleteEmbeddedDocuments('Item', [item._id]) + + } else { + ui.notifications.error(item.name + " ist zu teuer für " + actor.name) + } + + console.log(actorId) + + } + static async #removeService(event, target) { const {rowId} = target.dataset; diff --git a/src/templates/actor/merchant/tab-goods.hbs b/src/templates/actor/merchant/tab-goods.hbs index 9a271dec..445bd6a2 100644 --- a/src/templates/actor/merchant/tab-goods.hbs +++ b/src/templates/actor/merchant/tab-goods.hbs @@ -8,7 +8,7 @@ {{this.name}} {{currency this.system.price}} - + {{/each}}