add socket based active effect handling for powers

This commit is contained in:
Mike Bloy 2024-05-15 23:53:36 -05:00
parent 4c00d7116e
commit 3357145ea9
4 changed files with 36 additions and 6 deletions

View File

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

View File

@ -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() {

View File

@ -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,
);
}
}

View File

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