also assign effects to unlinked Tokens and fix calculation
Sonarqube Scanner / Build and analyze (push) Successful in 48s

This commit is contained in:
ChatGPT
2026-06-05 00:13:33 +02:00
parent dd1b08ee21
commit eb43af49b2
5 changed files with 111 additions and 29 deletions
+16 -6
View File
@@ -57,6 +57,7 @@ export async function assignReactionToSelectedTokens(reactionId) {
await ensureManagedReactionEffectOnActor(actor, reaction);
} else {
await addReactionFlag(tokenDocument, reactionId);
await ensureManagedReactionEffectOnActor(actor, reaction, tokenDocument.uuid);
}
assignedCount++;
@@ -82,7 +83,10 @@ export async function removeAssignment(assignmentId) {
if (assignment.mode === "token" && assignment.tokenUuid) {
const tokenDocument = await fromUuid(assignment.tokenUuid);
if (tokenDocument) await removeReactionFromDocument(tokenDocument, assignment.reactionId, false);
if (tokenDocument) {
await removeReactionFromDocument(tokenDocument, assignment.reactionId, false);
if (tokenDocument.actor) await removeReactionFromDocument(tokenDocument.actor, assignment.reactionId, true, tokenDocument.uuid);
}
}
}
@@ -118,12 +122,13 @@ async function addReactionFlag(document, reactionId) {
await document.setFlag(MODULE_ID, "assignedReactions", assigned);
}
async function ensureManagedReactionEffectOnActor(actor, reaction) {
async function ensureManagedReactionEffectOnActor(actor, reaction, tokenUuid = null) {
if (!game.settings.get(MODULE_ID, SETTINGS.CREATE_MANAGED_EFFECTS_ON_ASSIGNMENT)) return;
const existing = actor.effects.find(effect =>
effect.getFlag(MODULE_ID, "reactionId") === reaction.id &&
effect.getFlag(MODULE_ID, "managed") === true
effect.getFlag(MODULE_ID, "managed") === true &&
(tokenUuid === null || effect.getFlag(MODULE_ID, "tokenUuid") === tokenUuid)
);
if (existing) return;
@@ -138,13 +143,14 @@ async function ensureManagedReactionEffectOnActor(actor, reaction) {
flags: {
[MODULE_ID]: {
reactionId: reaction.id,
managed: true
managed: true,
tokenUuid
}
}
}]);
}
async function removeReactionFromDocument(document, reactionId, removeManagedEffects) {
async function removeReactionFromDocument(document, reactionId, removeManagedEffects, tokenUuid = null) {
const assigned = foundry.utils.deepClone(document.getFlag(MODULE_ID, "assignedReactions") ?? [])
.filter(entry => entry.reactionId !== reactionId);
@@ -154,7 +160,11 @@ async function removeReactionFromDocument(document, reactionId, removeManagedEff
if (!removeManagedEffects || !document.effects) return;
const effectIds = document.effects
.filter(effect => effect.getFlag(MODULE_ID, "reactionId") === reactionId && effect.getFlag(MODULE_ID, "managed") === true)
.filter(effect =>
effect.getFlag(MODULE_ID, "reactionId") === reactionId &&
effect.getFlag(MODULE_ID, "managed") === true &&
(tokenUuid === null || effect.getFlag(MODULE_ID, "tokenUuid") === tokenUuid)
)
.map(effect => effect.id);
if (effectIds.length) await document.deleteEmbeddedDocuments("ActiveEffect", effectIds);