add sloth/speed

This commit is contained in:
Mike Bloy 2022-05-10 23:26:22 -05:00
parent fe76e93efc
commit dedd5d1387

View File

@ -0,0 +1,95 @@
const SPEEDICON = 'icons/skills/movement/feed-winged-boots-glowing-yellow.webp'
const SLOTHICON = 'icons/magic/control/encase-creature-spider-hold.webp'
let tokens = [];
let targets = Array.from(game.user.targets);
if (targets.length > 0) {
tokens = targets;
} else if (canvas.tokens.controlled.length > 0) {
tokens = canvas.tokens.controlled;
}
if (tokens.length > 0) {
main(tokens);
} else {
ui.notifications.error("Please select or target a token");
}
async function main(tokens) {
let tokenList = tokens.map(t => t.name).join(", ");
let menuOptions = {
title: 'Sloth/Speed',
defaultButton: "Cancel",
options: {}
};
let menuData = {
inputs: [
{ type: 'header', label: 'Sloth/Speed' },
{ type: 'info', label: `Affected Tokens: ${tokenList}` },
{ type: 'info', label: "Speed or Sloth" },
{ type: 'radio', label: 'Speed', options: ['isspeed', true] },
{ type: 'radio', label: 'Sloth', options: ['isspeed', false] },
],
buttons: [
{ label: "Apply", value: "apply" },
{ label: "Apply with raise", value: "raise" },
{ label: "Cancel", value: "cancel" }
]
}
let { buttons, inputs } = await warpgate.menu(menuData, menuOptions);
console.log(buttons, inputs)
if (buttons != "cancel") {
let direction = inputs[3] || inputs[4];
createEffect(tokens, direction, buttons);
}
}
async function createEffect(tokens, trait, direction, buttons) {
const raise = (buttons == 'raise');
const effectName = `${raise ? "Major" : "Minor"} ${direction} ${trait.name}`;
const effectId = `${raise ? "Major" : "Minor"}${direction}${trait.name}`;
const effectIcon = (direction == "Speed" ? SPEEDICON : SLOTHICON)
for (const token of tokens) {
let tokenDoc = token.document;
let effectData = {
icon: effectIcon,
id: effectId,
label: effectName,
flags: {
swade: {
expiration: 3,
loseTurnOnHold: true
}
},
changes: []
};
let mode = foundry.CONST.ACTIVE_EFFECT_MODES.MULTIPLY;
if (direction == "Speed") {
effectData.duration = { rounds: 5 };
effectData.changes.push({
key: 'data.stats.speed.value',
mode: mode,
value: 2
})
} else {
effectData.changes.push({
key: 'data.stats.speed.value',
mode: mode,
value: 0.5
})
}
let mutate = {
embedded: {
ActiveEffect: {
}
}
};
mutate.embedded.ActiveEffect[effectName] = effectData;
let mutateOptions = {
comparisonKeys: { 'ActiveEffect': 'label' },
name: effectName,
permanent: true,
description: effectName,
}
await warpgate.mutate(token.document, mutate, {}, mutateOptions);
}
}