From 39c114f06d1ea486d400a25bc9bc3af770263a7b Mon Sep 17 00:00:00 2001 From: Mike Bloy Date: Mon, 9 Mar 2026 22:23:52 -0500 Subject: [PATCH] fix for linked actors when summoning --- CHANGELOG.md | 1 + src/module/powers/basePowers.js | 7 +++++++ src/module/powers/powers.js | 18 ++++++++++++++++-- src/module/powers/summon.js | 6 ++++++ 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02790e6..977a954 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Gang up calculation was double-counting the attacker if the attacker had formation fighter. +- Fixed summons and deletions of linked tokens. ## [4.2.1] diff --git a/src/module/powers/basePowers.js b/src/module/powers/basePowers.js index 3a3cc58..d1bd1b8 100644 --- a/src/module/powers/basePowers.js +++ b/src/module/powers/basePowers.js @@ -1095,6 +1095,13 @@ export class ActorFolderEffect extends PowerEffect { return doc; } + async primaryDocForTarget(doc, target) { + const newDoc = await super.primaryDocForTarget(doc, target); + newDoc.flags[moduleName].spawnedTempTokenSceneId = target.parent.id; + newDoc.flags[moduleName].spawnedTempTokenId = target.id; + return newDoc; + } + async sideEffects() { if (this.data.fatigue) { for (const target of this.data.spawned) { diff --git a/src/module/powers/powers.js b/src/module/powers/powers.js index 485d25b..8df8393 100644 --- a/src/module/powers/powers.js +++ b/src/module/powers/powers.js @@ -266,8 +266,22 @@ export async function powerEffectManagementHook(effect, data, userId) { } const isSpawned = effect.getFlag(moduleName, 'spawnedTempToken') ?? false; if (isSpawned) { - const token = effect.parent.token; - await moduleHelpers.socket.executeAsGM(deleteToken, token.parent.id, token.id); + let token = effect.parent?.token; + let sceneId; + let tokenId; + if (token) { + sceneId = token.parent.id; + tokenId = token.id; + } else { + sceneId = effect.getFlag(moduleName, 'spawnedTempTokenSceneId'); + tokenId = effect.getFlag(moduleName, 'spawnedTempTokenId'); + } + function _deleteSpawnedToken(sceneId, tokenId) { + moduleHelpers.socket.executeAsGM(deleteToken, sceneId, tokenId); + } + if (sceneId && tokenId) { + setTimeout(_deleteSpawnedToken, 500, sceneId, tokenId); + } } const targetIds = effect.getFlag(moduleName, 'targetIds') || []; for (const targetId of targetIds) { diff --git a/src/module/powers/summon.js b/src/module/powers/summon.js index 9badb05..d06701a 100644 --- a/src/module/powers/summon.js +++ b/src/module/powers/summon.js @@ -542,6 +542,12 @@ export class SummonEidolonEffect extends BaseSummonEffect { get modifiers() { return super.modifiers.filter((m) => m.id === 'actorId'); } + + get spawnUpdates() { + const updates = super.spawnUpdates; + delete updates.token.actorLink; + return updates; + } } export class SummonCompanionEffect extends SummonEidolonEffect {