#lets see what you tried
1 messages · Page 1 of 1 (latest)
title: "Roll Macro",
content: `
<form>
<div class="form-group">
<label>Description:</label>
<input type="text" name="description" id="description" required>
</div>
<div class="form-group">
<label>Modifier:</label>
<input type="number" name="modifier" id="modifier" value="0">
</div>
<div class="form-group">
<label>Number of Boons:</label>
<input type="number" name="boons" id="boons" value="0">
</div>
<div class="form-group">
<label>Number of Banes:</label>
<input type="number" name="banes" id="banes" value="0">
</div>
</form>
`,
buttons: {
roll: {
label: "Roll",
callback: (html) => {
let description = html.find("#description").val();
let modifier = parseInt(html.find("#modifier").val()) || 0;
let boons = parseInt(html.find("#boons").val()) || 0;
let banes = parseInt(html.find("#banes").val()) || 0;
let x = boons - banes;
let rollFormula;
if (x > 0) {
rollFormula = `2d6 + ${modifier} + ${x}d4`;
} else if (x < 0) {
rollFormula = `2d6 + ${modifier} - ${Math.abs(x)}d4`;
} else {
rollFormula = `2d6 + ${modifier}`;
}
let roll = new Roll(rollFormula);
roll.evaluate();
let content = `<div><b>Description:</b> ${description}</div>`;
content += `<div><b>Roll Formula:</b> ${rollFormula}</div>`;
content += `<div><b>Result:</b> ${roll.result}</div>`;
let c = new ChatMessage({
user: game.user._id,
speaker: ChatMessage.getSpeaker(),
content: content,
logged:true,
rolls: [roll]
});
},
},
cancel: {
label: "Cancel",
},
},
}).render(true);
new Dialog({
title: "Roll Macro",
content: `
<form>
<div class="form-group">
<label>Description:</label>
<input type="text" name="description" id="description" required>
</div>
<div class="form-group">
<label>Modifier:</label>
<input type="number" name="modifier" id="modifier" value="0">
</div>
<div class="form-group">
<label>Number of Boons:</label>
<input type="number" name="boons" id="boons" value="0">
</div>
<div class="form-group">
<label>Number of Banes:</label>
<input type="number" name="banes" id="banes" value="0">
</div>
</form>`,
buttons: {
roll: {
label: "Roll",
callback: async (html) => {
const {description, modifier, boons, banes} = new FormDataExtended(html[0].querySelector("FORM")).object;
const x = boons - banes;
let rollFormula;
if (x) rollFormula = `2d6 + ${modifier} + ${Math.abs(x)}d4`;
else rollFormula = `2d6 + ${modifier}`;
const speaker = ChatMessage.implementation.getSpeaker();
return new Roll(rollFormula).toMessage({
speaker: speaker,
flavor: description
});
},
},
cancel: {
label: "Cancel",
},
},
}).render(true);
You were pretty much there, but I took the liberty of shortening it a bit with the use of FormDataExtended.
Quick question, you dont need to evaluate the roll ?
toMessage will evaluate it if it has not been already
Ahh nice. Thank you!