diff --git a/src/module/helpers.js b/src/module/helpers.js index 0b5fbc0..1af691c 100644 --- a/src/module/helpers.js +++ b/src/module/helpers.js @@ -146,3 +146,15 @@ export async function requestTokenRoll(sceneId, tokenId, rollType, rollDesc, opt const result = await token.actor[rollFunc](rollId, options); return { sceneId, tokenId, result }; } + +export async function addActiveEffectsToToken(sceneId, tokenId, effectDocuments) { + const scene = game.scenes.get(sceneId); + const token = scene.tokens.get(tokenId); + await token.actor.createEmbeddedDocuments('ActiveEffect', effectDocuments); +} + +export async function deleteActiveEffectsFromToken(sceneId, tokenId, effectIds) { + const scene = game.scenes.get(sceneId); + const token = scene.tokens.get(tokenId); + await token.actor.deleteEmbeddedDocuments('ActiveEffect', effectIds); +} diff --git a/src/module/powers/basePowers.js b/src/module/powers/basePowers.js index 0bccc72..0b53184 100644 --- a/src/module/powers/basePowers.js +++ b/src/module/powers/basePowers.js @@ -1,5 +1,6 @@ +import { moduleName, moduleHelpers } from '../globals.js'; +import { firstOwner, addActiveEffectsToToken } from '../helpers.js'; import { templates } from '../preloadTemplates.js'; -import { moduleName } from '../globals.js'; const MAINTAIN_ICON = 'icons/magic/symbols/runes-star-blue.webp'; @@ -16,7 +17,7 @@ export class PowerFormApplication extends FormApplication { template: templates['powerDialog.html'], id: ['mbSwadePowerEffectsApplication'], title: 'Power Effects', - width: 350, + width: 400, }); } @@ -131,7 +132,14 @@ export class PowerEffect { } async applyActiveEffects(token, effectDocuments) { - await token.actor.createEmbeddedDocuments('ActiveEffect', effectDocuments); + const owner = firstOwner(token); + await moduleHelpers.socket.executeAsUser( + addActiveEffectsToToken, + owner.id, + token.scene.id, + token.id, + effectDocuments, + ); } get name() { diff --git a/src/module/powers/powers.js b/src/module/powers/powers.js index d1c6b7c..80d19bc 100644 --- a/src/module/powers/powers.js +++ b/src/module/powers/powers.js @@ -1,4 +1,5 @@ -import { moduleName } from '../globals.js'; +import { moduleName, moduleHelpers } from '../globals.js'; +import { firstOwner, deleteActiveEffectsFromToken } from '../helpers.js'; import { ArcaneProtectionEffect } from './arcaneProtection.js'; import { BanishEffect } from './banish.js'; import { BarrierEffect } from './barrier.js'; @@ -63,7 +64,14 @@ export async function powerEffectManagementHook(effect, data, userId) { if (effectIds.length === 0) { continue; } - await target.actor.deleteEmbeddedDocuments('ActiveEffects', effectIds); + const owner = firstOwner(target); + await moduleHelpers.socket.executeAsUser( + deleteActiveEffectsFromToken, + owner.id, + target.scene.id, + target.id, + effectIds, + ); } } diff --git a/src/module/swade-mb-helpers.js b/src/module/swade-mb-helpers.js index 5e23ad3..440f62c 100644 --- a/src/module/swade-mb-helpers.js +++ b/src/module/swade-mb-helpers.js @@ -4,7 +4,7 @@ import { registerSettings } from './settings.js'; import { preloadTemplates } from './preloadTemplates.js'; import { api } from './api.js'; import { initVisionModes } from './visionModes.js'; -import { requestTokenRoll } from './helpers.js'; +import { requestTokenRoll, addActiveEffectsToToken, deleteActiveEffectsFromToken } from './helpers.js'; import { preDamageRollModifiers, preTraitRollModifiers } from './rollHelpers.js'; import { log, moduleHelpers } from './globals.js'; import { powerEffectManagementHook } from './powers/powers.js'; @@ -49,5 +49,7 @@ Hooks.on('deleteActiveEffect', powerEffectManagementHook); Hooks.once('socketlib.ready', () => { const _socket = socketlib.registerModule('swade-mb-helpers'); _socket.register('requestTokenRoll', requestTokenRoll); + _socket.register('addActiveEffectsToToken', addActiveEffectsToToken); + _socket.register('deleteActiveEffectsFromToken', deleteActiveEffectsFromToken); moduleHelpers._socket = _socket; });