All checks were successful
Sonarqube Scanner / Build and analyze (push) Successful in 50s
61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
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 => buildStatusEffectData(statusId, action, context));
|
|
await actor.createEmbeddedDocuments("ActiveEffect", effects);
|
|
return { success: true, consumed: true };
|
|
}
|
|
|
|
function buildStatusEffectData(statusId, action, context) {
|
|
const statusConfig = getStatusEffectConfig(statusId);
|
|
|
|
return {
|
|
name: statusConfig?.name ? game.i18n.localize(statusConfig.name) : statusId,
|
|
icon: statusConfig?.img ?? "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
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
function getStatusEffectConfig(statusId) {
|
|
const statusEffects = CONFIG.statusEffects ?? [];
|
|
if (statusEffects instanceof Map) return statusEffects.get(statusId);
|
|
return statusEffects.find(status => status.id === statusId);
|
|
}
|
|
|
|
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 {};
|
|
}
|