Merged
Byroks merged 8 commits from Situationsbedingte-Boni/Mali-#41 into develop 2024-03-29 14:28:50 +01:00
4 changed files with 73 additions and 2 deletions
Showing only changes of commit 7333b54a35 - Show all commits

View File

@ -180,6 +180,7 @@ export interface M5CharacterCalculatedData {
pa: M5AttributeCalculated; pa: M5AttributeCalculated;
wk: M5AttributeCalculated; wk: M5AttributeCalculated;
}; };
stats: { stats: {
lp: M5ModResult; lp: M5ModResult;
ap: M5ModResult; ap: M5ModResult;

View File

@ -314,7 +314,7 @@ export class M5Roll {
return null; return null;
} }
} }
interface FormulaParseResult { interface FormulaParseResult {
sides: number; sides: number;
type: string; type: string;

View File

@ -77,7 +77,17 @@ export default class M5CharacterSheet extends ActorSheet {
let target = event.target.closest("[data-attribute]") as HTMLElement; let target = event.target.closest("[data-attribute]") as HTMLElement;
let attributeValue = target ? parseInt(target.dataset.value) : null; let attributeValue = target ? parseInt(target.dataset.value) : null;
let attributeStr = target ? target.dataset.attribute : 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); const roll = M5Roll.fromAttributeValue(this.actor, attributeStr, attributeValue);
await roll.toMessage(); await roll.toMessage();
}); });
@ -517,3 +527,43 @@ export default class M5CharacterSheet extends ActorSheet {
return true; 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
}
}

View File

@ -0,0 +1,20 @@
<form>
<div class="form-group">
<label>{{localize "midgard5.chat.taskCheck.options.modifier"}}</label>
<input type="text" name="modifier" value="{{modifier}}" />
</div>
<div class="form-group">
<label>{{localize "midgard5.chat.taskCheck.options.closedRoll"}}</label>
<input type="checkbox" name="closedRoll" {{#if closedRoll}} checked {{/if}} />
</div>
{{#if hasFortune}}
<div class="form-group">
<label>{{localize "midgard5.chat.taskCheck.options.useFortune"}}</label>
<input type="checkbox" name="useFortune" {{#if useFortune}} checked {{/if}} />
</div>
{{/if}}
<div class="form-group">
<label>{{localize "midgard5.chat.taskCheck.options.difficulty"}}</label>
<input type="text" name="difficulty" value="{{difficulty}}" />
</div>
</form>