Cast A Spell
Cast A Spell
token = tokens[0];
spells.sort((a, b) => {
if (a.lvl === b.lvl)
return a.name
.toUpperCase()
.localeCompare(b.name.toUpperCase(), undefined, {
sensitivity: "base",
});
return a.lvl - b.lvl;
});
await Levels();
/* Dialog box */
async function quickDialog({data, title = `Quick Dialog`} = {}) {
data = data instanceof Array ? data : [data];
console.log(value);
spell_variants.sort((a, b) => {
if (a.lvl === b.lvl)
return a.name
.toUpperCase()
.localeCompare(b.name.toUpperCase(), undefined, {
sensitivity: "base",
});
return a.lvl - b.lvl;
});
if(!s_entry.isFlexible || value.spell.spell.isFocusSpell ||
value.spell.spell.isCantrip) await s_entry.cast(value.spell.spell,{slot:
value.index,level: value.lvl,message: true});
else {
await value.spell.spell.toMessage(event, {data:
{castLevel:value.lvl}});
await
token.actor.update({"system.attributes.sp.value":Math.max(0,token.actor.system.attr
ibutes.sp.value - value.lvl)});
}
new Sequence()
.sound(`https://media.discordapp.net/attachments/546409000644640776/899016148698415
154/Dimenssional_Strike.wav`)
.volume(0.5)
.play();
console.log(value);
console.log(s_entry);
if (game.user.targets.size > 0
&& value.spell.spell.system.spellType.value === "attack")
{
let es_data = [
{ label : `Choose what to target`, type :
`select`, options : ["Armor Class", "Reflex DC", "Fortitude DC", "Will DC"] },
{ label : `MAP`, type : `select`, options :["No
MAP", "MAP-5", "MAP-10"] },
{ label : `# of Rolls`, type: `select`, options:
["1", "2", "3"] }
];
let DC = target.actor.system.attributes.ac.value;
let map = 1;
if(es_choice[1] === "MAP-5") map = 2;
if(es_choice[1] === "MAP-10") map = 3;
}
const rollData =
value.spell.spell.getRollData({castLevel: value.level});
const dmg =
value.spell.spell.getDamageFormula((value.spell.isCantrip?
Math.ceil(token.actor.level/2):value.level),rollData);
const roll = new Roll(`${dmg}`);
await roll.toMessage({flavor:`${value.name} -
Damage`});
}
}});
}
}
};
buttons[index] = {label: value.name, value:
value.spell.spell ,callback: async () => { await Consume(); }}
});
await Diag({title: "Pick a Spell to Cast", buttons});
spells.forEach( async s => {
const elements = await document.getElementsByClassName("dialog-button");
let myElem1 = [...document.getElementsByClassName("app window-app
dialog")].pop();
myElem1.style.display = "flex";
myElem1.style.flexWrap = "wrap";
myElem1.style.height = "auto";
myElem1.style.width = "200px";
myElem1.style.gap = "5px 5px";
let myElem2 = [...document.getElementsByClassName("dialog-buttons")].pop();
myElem2.style.display = "flex";
myElem2.style.flexFlow = "column wrap";
let element;
for (var i = 0; i < elements.length; i++) {
if (elements[i].innerText === s.name) {
element = elements[i];
element.style.lineHeight = "normal";
await $(element).bind("contextmenu", function
() {
s.spell.spell.sheet.render(true);
});
}
}
});
};
}
async function Diag({title,buttons,content} = {}) {
await new Promise((resolve) => {
new Dialog({
title,
buttons,
}).render(true);
setTimeout(resolve,10);
});
}
}
let content = `
<style>
.psya-buttons {
margin: 0 auto;
}
.psya-buttons:hover {
background-color:#44c767;
}
</style>
<div><strong>Choose a Spellcasting Entry:</strong></div><script>${script}
</script>`;
token.actor.itemTypes.spellcastingEntry.forEach((value,index) => {
const test = value.getSpellData();
if (test.isFocusPool && !test.levels.some(x => x.isCantrip) &&
token.actor.system.resources.focus.value === 0){ return; }
content = content + `<button name="button${index}" class="psya-buttons ${index}"
type="button" value="${value.name}" onclick="Spells('${value.id}','$
{tokens[0].id}')">${value.name}</button>`
});