From 332f0358469aa2debccfeeee6332e439888af4cb Mon Sep 17 00:00:00 2001 From: Byroks Date: Mon, 25 Mar 2024 21:55:44 +0100 Subject: [PATCH] =?UTF-8?q?Modifikation=20f=C3=BCr=20alle=20W=C3=BCrfe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/module/M5Base.ts | 3 +- source/module/rolls/M5Roll.ts | 54 +++++++++++++++++++++++- source/module/sheets/M5CharacterSheet.ts | 51 ---------------------- 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/source/module/M5Base.ts b/source/module/M5Base.ts index 11b9a8c..917e9ee 100644 --- a/source/module/M5Base.ts +++ b/source/module/M5Base.ts @@ -28,6 +28,7 @@ export interface M5Attribute { export interface M5RollData { c: any; i: any; + b: any; iType: string; rolls: {}; res: { @@ -180,7 +181,7 @@ export interface M5CharacterCalculatedData { pa: M5AttributeCalculated; wk: M5AttributeCalculated; }; - + stats: { lp: M5ModResult; ap: M5ModResult; diff --git a/source/module/rolls/M5Roll.ts b/source/module/rolls/M5Roll.ts index b3a67b3..ffa61bb 100644 --- a/source/module/rolls/M5Roll.ts +++ b/source/module/rolls/M5Roll.ts @@ -26,6 +26,7 @@ export class M5Roll { .map((rollName, index) => { indexMap.set(index, rollName); const formula = this.data.rolls[rollName]; + formula.formula = index === 0 ? formula.formula + " + " + this.data.b.modifier : formula.formula; const roll = new Roll(formula.formula, this.data); return roll; }); @@ -66,7 +67,7 @@ export class M5Roll { const parseResult = M5Roll.parseDiceSides(rollResult.formula); //console.log("evaluate roll", parseResult) if (parseResult?.sides === 20) { - if (roll.total < 20) { + if (roll.total < this.data.b.difficulty) { if (rowRes === M5EwResult.TBD || rowRes === M5EwResult.HIGH) rowRes = M5EwResult.FAIL; } else { if (rowRes === M5EwResult.TBD) rowRes = M5EwResult.PASS; @@ -99,6 +100,13 @@ export class M5Roll { } async toMessage() { + let checkOptions = await this.popUp(); + if (checkOptions["cancelled"]) { + return; + } else { + this.data.b = checkOptions; + } + if (!this._evaluated) await this.evaluate(); const rMode = (game as Game).settings.get("core", "rollMode"); @@ -313,8 +321,50 @@ export class M5Roll { return null; } + + async popUp({ + hasFortune = true, + taskType = null, + useFortune = false, + difficulty = 20, + modifier = 0, + closedRoll = false, + template = "systems/midgard5/templates/chat/task-check-dialog.hbs", + } = {}) { + const html = await renderTemplate(template, { hasFortune, useFortune, difficulty, modifier, closedRoll }); + + return new Promise((resolve) => { + const data = { + title: (game as Game).i18n.format("midgard5.chat.taskCheck.title", { type: taskType }), + content: html, + buttons: { + normal: { + label: (game as Game).i18n.localize("midgard5.chat.actions.roll"), + callback: (html) => resolve(this._processTaskCheckOptions(html[0].querySelector("form"))), + }, + cancel: { + label: (game as Game).i18n.localize("midgard5.chat.actions.cancel"), + callback: (html) => resolve({ cancelled: true }), + }, + }, + default: "normal", + close: () => resolve({ cancelled: true }), + }; + + new Dialog(data, null).render(true); + }); + } + + _processTaskCheckOptions(form) { + return { + difficulty: parseInt(form.difficulty?.value), + modifier: parseInt(form.modifier?.value), + useFortune: form.useFortune?.checked, + closedRoll: form.closedRoll?.checked, + }; + } } - + interface FormulaParseResult { sides: number; type: string; diff --git a/source/module/sheets/M5CharacterSheet.ts b/source/module/sheets/M5CharacterSheet.ts index 56bf187..b86ebf0 100644 --- a/source/module/sheets/M5CharacterSheet.ts +++ b/source/module/sheets/M5CharacterSheet.ts @@ -77,17 +77,6 @@ export default class M5CharacterSheet extends ActorSheet { let target = event.target.closest("[data-attribute]") as HTMLElement; let attributeValue = target ? parseInt(target.dataset.value) : null; let attributeStr = target ? target.dataset.attribute : null; - let hasFortune: boolean; - let taskType: string; - let useFortune: boolean; - let modifier: number; - let difficulty: number; - let closedRoll: boolean; - let checkOptions = await GetRollOptions({ hasFortune, taskType, useFortune, modifier, difficulty, closedRoll }); - console.log("Check Options", checkOptions); - if (checkOptions["cancelled"]) { - return; - } const roll = M5Roll.fromAttributeValue(this.actor, attributeStr, attributeValue); await roll.toMessage(); }); @@ -527,43 +516,3 @@ export default class M5CharacterSheet extends ActorSheet { return true; } } -async function GetRollOptions({ - hasFortune = true, - taskType = null, - useFortune = false, - difficulty = 0, - modifier = 0, - closedRoll = false, - template = "systems/midgard5/templates/chat/task-check-dialog.hbs" } = {}) { - const html = await renderTemplate(template, { hasFortune, useFortune, difficulty, modifier, closedRoll }); - - return new Promise(resolve => { - const data = { - title: (game as Game).i18n.format("midgard5.chat.taskCheck.title", { type: taskType }), - content: html, - buttons: { - normal: { - label: (game as Game).i18n.localize("midgard5.chat.actions.roll"), - callback: html => resolve(_processTaskCheckOptions(html[0].querySelector("form"))) - }, - cancel: { - label: (game as Game).i18n.localize("midgard5.chat.actions.cancel"), - callback: html => resolve({ cancelled: true }) - } - }, - default: "normal", - close: () => resolve({ cancelled: true }) - }; - - new Dialog(data, null).render(true); - }); - } - - function _processTaskCheckOptions(form) { - return { - difficulty: parseInt(form.difficulty?.value), - modifier: parseInt(form.modifier?.value), - useFortune: form.useFortune?.checked, - closedRoll: form.closedRoll?.checked - } - }