Hooks.once("ready", async function () {
|
|
if (!game.automatedevocations) {
|
|
game.automatedevocations = {};
|
|
game.automatedevocations[game.system.id] = {};
|
|
}
|
|
if (game.system.id == "dnd5e") {
|
|
game.automatedevocations.dnd5e = {
|
|
"Arcane Hand": [
|
|
{
|
|
creature: "Arcane Hand",
|
|
number: 1,
|
|
},
|
|
],
|
|
"Flaming Sphere": [
|
|
{
|
|
creature: "Flaming Sphere",
|
|
number: 1,
|
|
},
|
|
],
|
|
"Spiritual Weapon": [
|
|
{
|
|
creature: "Spiritual Weapon",
|
|
number: 1,
|
|
},
|
|
],
|
|
"Guardian of Faith": [
|
|
{
|
|
creature: "Spectral Guardian",
|
|
number: 1,
|
|
},
|
|
],
|
|
"Faithful Hound": [
|
|
{
|
|
creature: "Phantom Watchdog",
|
|
number: 1,
|
|
},
|
|
],
|
|
"Find Steed": [
|
|
{
|
|
creature: "Warhorse",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Pony",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Camel",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Elk",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Mastiff",
|
|
number: 1,
|
|
},
|
|
],
|
|
"Giant Insect": [
|
|
{
|
|
creature: "Giant Centipede",
|
|
number: 10,
|
|
},
|
|
{
|
|
creature: "Giant Spider",
|
|
number: 3,
|
|
},
|
|
{
|
|
creature: "Giant Wasp",
|
|
number: 5,
|
|
},
|
|
{
|
|
creature: "Giant Scorpion",
|
|
number: 1,
|
|
},
|
|
],
|
|
"Arcane Sword": [
|
|
{
|
|
creature: "Arcane Sword",
|
|
number: 1,
|
|
},
|
|
],
|
|
"Conjure Animals": (data) => {
|
|
let multiplier = 1;
|
|
if (data.level >= 5) multiplier = 2;
|
|
if (data.level >= 7) multiplier = 3;
|
|
let beasts = game.actors
|
|
.filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "beast" && a.system.details.cr <= 2)
|
|
.sort((a, b) => {
|
|
return a.system.details.cr < b.system.details.cr ? 1 : -1;
|
|
});
|
|
let creatures = [];
|
|
for (let beast of beasts) {
|
|
let number = 1;
|
|
const cr = beast.system.details.cr;
|
|
if (cr == 2) number = 1;
|
|
else if (cr == 1) number = 2;
|
|
else if (cr == 0.5) number = 4;
|
|
else if (cr <= 0.25) number = 8;
|
|
creatures.push({
|
|
creature: beast.name,
|
|
number: number * multiplier,
|
|
});
|
|
}
|
|
return creatures;
|
|
},
|
|
"Conjure Celestial": (data) => {
|
|
let celestials = game.actors
|
|
.filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "celestial" && a.system.details.cr <= 4)
|
|
.sort((a, b) => {
|
|
return a.system.details.cr < b.system.details.cr ? 1 : -1;
|
|
});
|
|
let creatures = [];
|
|
for (let celestial of celestials) {
|
|
creatures.push({
|
|
creature: celestial.name,
|
|
number: 1,
|
|
});
|
|
}
|
|
return creatures;
|
|
},
|
|
"Conjure Elemental": (data) => {
|
|
let elementals = game.actors
|
|
.filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "elemental" && a.system.details.cr <= data.level)
|
|
.sort((a, b) => {
|
|
return a.system.details.cr < b.system.details.cr ? 1 : -1;
|
|
});
|
|
let creatures = [];
|
|
for (let elemental of elementals) {
|
|
creatures.push({
|
|
creature: elemental.name,
|
|
number: 1,
|
|
});
|
|
}
|
|
return creatures;
|
|
},
|
|
"Conjure Fey": (data) => {
|
|
let feys = game.actors
|
|
.filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "fey" && a.system.details.cr <= data.level)
|
|
.sort((a, b) => {
|
|
return a.system.details.cr < b.system.details.cr ? 1 : -1;
|
|
});
|
|
let creatures = [];
|
|
for (let fey of feys) {
|
|
creatures.push({
|
|
creature: fey.name,
|
|
number: 1,
|
|
});
|
|
}
|
|
return creatures;
|
|
},
|
|
"Conjure Minor Elementals": (data) => {
|
|
let multiplier = 1;
|
|
if (data.level >= 6) multiplier = 2;
|
|
if (data.level >= 8) multiplier = 3;
|
|
let elementals = game.actors
|
|
.filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "elemental" && a.system.details.cr <= 2)
|
|
.sort((a, b) => {
|
|
return a.system.details.cr < b.system.details.cr ? 1 : -1;
|
|
});
|
|
|
|
let creatures = [];
|
|
for (let elemental of elementals) {
|
|
let number = 1;
|
|
const cr = elemental.system.details.cr;
|
|
if (cr == 2) number = 1;
|
|
else if (cr == 1) number = 2;
|
|
else if (cr == 0.5) number = 4;
|
|
else if (cr <= 0.25) number = 8;
|
|
creatures.push({
|
|
creature: elemental.name,
|
|
number: number * multiplier,
|
|
});
|
|
}
|
|
return creatures;
|
|
},
|
|
"Conjure Woodland Beings": (data) => {
|
|
let multiplier = 1;
|
|
if (data.level >= 6) multiplier = 2;
|
|
if (data.level >= 8) multiplier = 3;
|
|
let feys = game.actors
|
|
.filter((a) => a.type === "npc" && !a.prototypeToken.actorLink && a.system.details.type?.value == "fey" && a.system.details.cr <= data.level)
|
|
.sort((a, b) => {
|
|
return a.system.details.cr < b.system.details.cr ? 1 : -1;
|
|
});
|
|
let creatures = [];
|
|
for (let fey of feys) {
|
|
let number = 1;
|
|
const cr = fey.system.details.cr;
|
|
if (cr == 2) number = 1;
|
|
else if (cr == 1) number = 2;
|
|
else if (cr == 0.5) number = 4;
|
|
else if (cr <= 0.25) number = 8;
|
|
creatures.push({
|
|
creature: fey.name,
|
|
number: number * multiplier,
|
|
});
|
|
}
|
|
return creatures;
|
|
},
|
|
"Animate Dead": (data) => {
|
|
let multiplier = 1 + (data.level - 3) * 2;
|
|
return [
|
|
{
|
|
creature: "Skeleton",
|
|
number: multiplier,
|
|
},
|
|
{
|
|
creature: "Zombie",
|
|
number: multiplier,
|
|
},
|
|
];
|
|
},
|
|
"Create Undead": (data) => {
|
|
let multiplier = data.level - 3;
|
|
if (data.level == 8) {
|
|
return [
|
|
{
|
|
creature: "Ghoul",
|
|
number: 5,
|
|
},
|
|
{
|
|
creature: "Ghast",
|
|
number: 2,
|
|
},
|
|
{
|
|
creature: "Wights",
|
|
number: 2,
|
|
},
|
|
];
|
|
}
|
|
if (data.level == 9) {
|
|
return [
|
|
{
|
|
creature: "Ghoul",
|
|
number: 6,
|
|
},
|
|
{
|
|
creature: "Ghast",
|
|
number: 3,
|
|
},
|
|
{
|
|
creature: "Wights",
|
|
number: 3,
|
|
},
|
|
{
|
|
creature: "Mummy",
|
|
number: 2,
|
|
},
|
|
];
|
|
}
|
|
return [
|
|
{
|
|
creature: "Ghoul",
|
|
number: multiplier,
|
|
},
|
|
];
|
|
},
|
|
"Find Familiar": [
|
|
{
|
|
creature: "Bat",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Cat",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Crab",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Frog",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Hawk",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Lizard",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Octopus",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Owl",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Poisonous Snake",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Quipper",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Rat",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Raven",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Sea Horse",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Spider",
|
|
number: 1,
|
|
},
|
|
{
|
|
creature: "Weasel",
|
|
number: 1,
|
|
},
|
|
],
|
|
};
|
|
}
|
|
game.automatedevocations.originalBindings = deepClone(game.automatedevocations[game.system.id]);
|
|
game.automatedevocations[game.system.id] = mergeObject(game.automatedevocations[game.system.id], game.settings.get(AECONSTS.MN, "customautospells"));
|
|
Hooks.callAll("automated-evocations.dnd5e.ready");
|
|
});
|