94 lines
2.8 KiB
JavaScript
94 lines
2.8 KiB
JavaScript
const requestRollFromTokens = game.modules.get('swade-mb-helpers').api.requestRollFromTokens;
|
|
|
|
async function main() {
|
|
let tokens = Array.from(game.user.targets);
|
|
if (tokens.length < 1) {
|
|
tokens = canvas.tokens.controlled;
|
|
}
|
|
if (tokens.length < 1) {
|
|
ui.notifications.error('Please target or select some tokens');
|
|
return;
|
|
}
|
|
|
|
const attributes = ['Agility', 'Smarts', 'Spirit', 'Strength', 'Vigor'];
|
|
const skillSet = new Set();
|
|
for (const token of tokens) {
|
|
const tokenSkills = token.actor.items.filter(
|
|
(i) => i.type === 'skill' && !['Untrained', 'Untrained Attempt'].includes(i.name),
|
|
);
|
|
for (const skill of tokenSkills) {
|
|
skillSet.add(skill.name);
|
|
}
|
|
}
|
|
const attributeOptions = attributes
|
|
.map(
|
|
(a) => `
|
|
<option ${a === 'Agility' ? 'selected ' : ''} value="a|${a}">${a}</option>`,
|
|
)
|
|
.join('');
|
|
const skillOptions = Array.from(skillSet)
|
|
.sort()
|
|
.map(
|
|
(s) => `
|
|
<option value="s|${s}">${s}</option>`,
|
|
)
|
|
.join('');
|
|
const content = `
|
|
<form>
|
|
<p>Requesting roll from ${tokens.map((t) => t.name).join(', ')}.</p>
|
|
<div class="form-group">
|
|
<label for="trait">Trait to roll</label>
|
|
<select name="trait">
|
|
<optgroup label="Attributes">${attributeOptions}</optgroup>
|
|
<optgroup label="Skills">
|
|
${skillOptions}
|
|
<option value="s|NOSKILL">Untrained</option>
|
|
</optgroup>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="mod">Roll Modifier:</label>
|
|
<input type="number" value="0" name="mod">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="modDesc">Roll Modifier Description:</label>
|
|
<input type="text" value="Roll Modifier" name="modDesc">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="tn">Target Number</label>
|
|
<input type="number" value="4" name="tn">
|
|
</div>
|
|
</form>
|
|
`;
|
|
const buttons = {
|
|
ok: {
|
|
label: 'Request Roll',
|
|
callback: (html) => {
|
|
const form = html[0].querySelector('form');
|
|
const formDataObject = new FormDataExtended(form).object;
|
|
const rollMod = parseInt(formDataObject.mod);
|
|
const rollModDesc = formDataObject.modDesc;
|
|
const rollParts = formDataObject.trait.split('|');
|
|
const rollType = rollParts[0] === 'a' ? 'attribute' : 'skill';
|
|
const rollDesc = rollParts[1];
|
|
const targetNumber = parseInt(formDataObject.tn);
|
|
const options = { targetNumber };
|
|
if (rollMod !== 0) {
|
|
options.mods = [{ label: rollModDesc, value: rollMod }];
|
|
}
|
|
requestRollFromTokens(tokens, rollType, rollDesc, options);
|
|
},
|
|
},
|
|
cancel: {
|
|
label: 'Cancel',
|
|
},
|
|
};
|
|
new Dialog({
|
|
title: 'Request roll',
|
|
content,
|
|
buttons,
|
|
}).render(true);
|
|
}
|
|
|
|
main();
|