#lets see what you tried

1 messages · Page 1 of 1 (latest)

hard kestrel
#
  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);
faint falcon
#
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);
hard kestrel
#

Damn

#

Thanks a lot !

faint falcon
#

You were pretty much there, but I took the liberty of shortening it a bit with the use of FormDataExtended.

hard kestrel
#

Quick question, you dont need to evaluate the roll ?

faint falcon
#

toMessage will evaluate it if it has not been already

hard kestrel
#

Ahh nice. Thank you!