import { MODULE_ID } from "../constants.js"; export async function executeApplyStatusAction(action, context) { const actor = context.targetTokenDocument?.actor ?? context.tokenDocument?.actor ?? context.targetActor ?? context.actor; if (!actor) return { success: false, consumed: false, reason: "NO_ACTOR" }; const statuses = action.statuses ?? []; if (!statuses.length) return { success: false, consumed: false, reason: "NO_STATUSES" }; const effects = statuses.map(statusId => { const statusConfig = getStatusEffectConfig(statusId); return { name: statusConfig?.name ? game.i18n.localize(statusConfig.name) : statusId, icon: statusConfig?.img ?? statusConfig?.icon ?? "icons/svg/aura.svg", statuses: [statusId], origin: context.reactionOrigin, duration: buildEffectDuration(action.duration), changes: [], flags: { [MODULE_ID]: { managed: true, reactionId: context.reaction.id, actionId: action.id } } }; }); await actor.createEmbeddedDocuments("ActiveEffect", effects); return { success: true, consumed: true }; } function getStatusEffectConfig(statusId) { const statusEffects = CONFIG.statusEffects ?? []; if (Array.isArray(statusEffects)) return statusEffects.find(status => status.id === statusId); if (statusEffects instanceof Map) return statusEffects.get(statusId) ?? null; return Object.values(statusEffects).find(status => status.id === statusId) ?? null; } function buildEffectDuration(duration) { if (!duration || duration.type === "unlimited") return {}; if (duration.type === "rounds") { return { rounds: Number(duration.value) || 1, startRound: game.combat?.round, startTurn: game.combat?.turn }; } if (duration.type === "minutes") { return { seconds: (Number(duration.value) || 1) * 60, startTime: game.time.worldTime }; } return {}; }