76 lines
2.4 KiB
JavaScript
76 lines
2.4 KiB
JavaScript
const ACTORFOLDER = 'Summonables'
|
|
const SUMMONICON = 'icons/magic/symbols/runes-star-orange.webp'
|
|
|
|
swadeMBHelpers.runOnTargetOrSelectedTokens(main)
|
|
|
|
async function main (tokens) {
|
|
const token = tokens[0]
|
|
const tokenList = token.name
|
|
const folder = swadeMBHelpers.getActorFolderByPath(ACTORFOLDER)
|
|
const actors = swadeMBHelpers.getActorsInFolder(folder)
|
|
const menuOptions = {
|
|
title: 'Summon Creature',
|
|
defaultButton: 'cancel',
|
|
options: {}
|
|
}
|
|
const menuData = {
|
|
inputs: [
|
|
{ type: 'header', label: 'Summon Creature' },
|
|
{ type: 'info', label: `${tokenList} is summoning` },
|
|
{
|
|
type: 'select',
|
|
label: 'Ally to summon',
|
|
options: Object.keys(actors).sort().map(k => { return { value: actors[k].id, html: k } })
|
|
},
|
|
{ type: 'number', label: 'Number to spawn (+half base cost per)', options: 1 }
|
|
],
|
|
buttons: [
|
|
{ label: 'Apply', value: 'apply' },
|
|
{ label: 'Apply with raise', value: 'raise' },
|
|
{ label: 'Cancel', value: 'cancel' }
|
|
]
|
|
}
|
|
const { buttons, inputs } = await warpgate.menu(menuData, menuOptions)
|
|
if (buttons && buttons !== 'cancel') {
|
|
const summonData = {
|
|
raise: (buttons === 'raise'),
|
|
actorId: inputs[2],
|
|
number: inputs[3]
|
|
}
|
|
summonData.actor = game.actors.get(summonData.actorId)
|
|
summonData.actorName = summonData.actor.name
|
|
summonData.icon = summonData.actor.prototypeToken.texture.src
|
|
summonData.token = summonData.actor.prototypeToken
|
|
|
|
doWork(summonData, token)
|
|
}
|
|
}
|
|
|
|
async function doWork (summonData, token) {
|
|
console.log('Summon ', token, summonData)
|
|
const effectName = `Summoned ${summonData.actorName} (${summonData.number})`
|
|
const tokenEffectMutation = swadeMBHelpers.createMutationWithEffect(SUMMONICON, effectName, 5, [])
|
|
const mutateOptions = swadeMBHelpers.defaultMutationOptions(effectName)
|
|
await warpgate.mutate(token.document, tokenEffectMutation, {}, mutateOptions)
|
|
|
|
const spawnOptions = {
|
|
controllingActor: token.actor,
|
|
duplicates: summonData.number,
|
|
comparisonKeys: { ActiveEffect: 'label' },
|
|
crosshairs: {
|
|
size: 1,
|
|
icon: summonData.icon,
|
|
label: `Summon ${summonData.actorName}`,
|
|
drawOutline: false,
|
|
rememberControlled: true
|
|
}
|
|
}
|
|
const spawnMutation = {
|
|
token: {
|
|
actorLink: false,
|
|
name: `${token.name}'s ${summonData.token.name}`
|
|
}
|
|
}
|
|
await warpgate.spawn(summonData.actorName, spawnMutation, {}, spawnOptions)
|
|
}
|