add sloth/speed
This commit is contained in:
parent
fe76e93efc
commit
dedd5d1387
95
macros/warpgate_spells/sloth-speed.js
Normal file
95
macros/warpgate_spells/sloth-speed.js
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user