configurable-reactions/scripts/actions/cast-spell-action.js
2026-06-04 16:07:28 +00:00

29 lines
1.2 KiB
JavaScript

export async function executeCastSpellAction(action, context) {
const token = resolveCasterToken(action, context);
const actor = token?.actor;
if (!actor) return { success: false, consumed: false, reason: "NO_CASTER" };
const item = await resolveItem(actor, action.spellSelection);
if (!item) return { success: false, consumed: false, reason: "NO_SPELL_ITEM" };
item.sheet?.render(true);
ui.notifications.info(`${item.name} wurde für ${actor.name} geöffnet. Vollautomatische Zauberauslösung folgt in einer späteren Version.`);
return { success: true, consumed: true };
}
function resolveCasterToken(action, context) {
switch (action.casterMode ?? "affectedToken") {
case "sourceToken": return context.sourceToken ?? null;
case "assignedToken": return context.assignedToken ?? context.targetToken ?? null;
case "affectedToken":
default: return context.targetToken ?? context.tokenDocument?.object ?? null;
}
}
async function resolveItem(actor, selection = {}) {
if (selection.mode === "itemUuid" && selection.itemUuid) return fromUuid(selection.itemUuid);
if (selection.mode === "itemName" && selection.itemName) return actor.items.find(item => item.name === selection.itemName);
return null;
}