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) }