also assign effects to unlinked Tokens and fix calculation
Sonarqube Scanner / Build and analyze (push) Successful in 48s
Sonarqube Scanner / Build and analyze (push) Successful in 48s
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user