import { M5RollData, M5RollResult } from "../M5Base"; import { M5Roll } from "./M5Roll"; export const reroll = async (roll) => { const message = (game as Game).messages.get(roll.attr("data-message-id")); const actor = (game as Game).actors.get(message["speaker"].actor); const template = "systems/midgard5/templates/chat/reroll-dialog.hbs"; const html = await renderTemplate(template, { sg: actor.system.sg, gp: actor.system.gp }); // Button defining let buttons = {}; buttons = { destiny: { icon: '', label: (game as Game).i18n.localize("midgard5.chat.destiny"), callback: () => rerollDie("destiny", "sg"), }, luckPoints: { icon: '', label: (game as Game).i18n.localize("midgard5.chat.luckPoint"), callback: () => rerollDie("luckPoint", "gp"), }, modify: { icon: '', label: (game as Game).i18n.localize("midgard5.chat.modify") + " +" + (message["flags"].faces[0] === 100 ? 10 : 2), callback: () => rerollDie("modify", "gp"), }, cancel: { icon: '', label: (game as Game).i18n.localize("midgard5.chat.cancel"), }, }; // Dialog object new Dialog( { title: (game as Game).i18n.localize("midgard5.chat.reroll"), content: html, buttons, render: function () {}, default: "luckPoints", }, { classes: ["midgard5"], } ).render(true); async function rerollDie(type, target) { // Update the "content" field let rollData = actor.getRollData() as M5RollData; const flagData = message["flags"].data; rollData.c = flagData.c; rollData.i = flagData.i; rollData.b = flagData.b; rollData.iType = flagData.iType; rollData.res.label = flagData.res.label + " (" + (game as Game).i18n.localize(`midgard5.chat.${type}`) + ")"; actor.update({ system: { [target]: actor.system[target] - 1, }, }); if (type !== "modify") { for (var key in flagData.rolls) { if (!!flagData.rolls[key]) { rollData.rolls[key] = { formula: flagData.rolls[key]?.formula, enabled: flagData.rolls[key]?.enabled, label: flagData.rolls[key]?.label, result: "", total: 0, totalStr: "", dice: {}, css: "", } as M5RollResult; } } } else { for (var key in flagData.rolls) { if (!!flagData.rolls[key]) { rollData.rolls[key] = { formula: key === "0" ? flagData.rolls[key]?.result + " + " + (message["flags"].faces[0] === 100 ? 10 : 2) : flagData.rolls[key]?.result, enabled: flagData.rolls[key]?.enabled, label: flagData.rolls[key]?.label, result: "", total: 0, totalStr: "", dice: {}, css: "", } as M5RollResult; } } } const newRoll = new M5Roll(rollData, actor, rollData.res.label, "-1"); if (!newRoll._evaluated) await newRoll.evaluate(); const chatData = { type: CONST.CHAT_MESSAGE_TYPES.ROLL, content: await newRoll.render(), speaker: ChatMessage.getSpeaker({ actor: actor }), sound: CONFIG.sounds.dice, roll: Roll.fromTerms([newRoll.pool]), flags: { rerolled: true }, }; message.update(chatData); } };