import { MODULE_ID } from "../constants.js"; export async function checkConsumptionAvailable(reaction, context) { const consumption = reaction.consumption; if (!consumption?.enabled || consumption.mode === "none") return true; const document = getUsageDocument(context); if (!document) return true; const usage = document.getFlag(MODULE_ID, "usage") ?? {}; const reactionUsage = usage[reaction.id] ?? {}; if (consumption.mode === "perCombat") { if (!game.combat?.id) return true; return reactionUsage.combatId !== game.combat.id || (reactionUsage.uses ?? 0) < consumption.maxUses; } if (consumption.mode === "perRound") { if (!game.combat?.id) return true; return reactionUsage.combatId !== game.combat.id || reactionUsage.round !== game.combat.round || (reactionUsage.uses ?? 0) < consumption.maxUses; } if (consumption.mode === "perTurn") { if (!game.combat?.id) return true; return reactionUsage.combatId !== game.combat.id || reactionUsage.round !== game.combat.round || reactionUsage.turn !== game.combat.turn || (reactionUsage.uses ?? 0) < consumption.maxUses; } return true; } export async function consumeReactionUse(reaction, context) { const consumption = reaction.consumption; if (!consumption?.enabled || consumption.mode === "none") return; const document = getUsageDocument(context); if (!document) return; const usage = foundry.utils.deepClone(document.getFlag(MODULE_ID, "usage") ?? {}); const current = usage[reaction.id] ?? {}; usage[reaction.id] = { combatId: game.combat?.id ?? null, round: game.combat?.round ?? null, turn: game.combat?.turn ?? null, uses: (current.uses ?? 0) + 1, lastUsedAt: Date.now() }; await document.setFlag(MODULE_ID, "usage", usage); } function getUsageDocument(context) { return context.targetTokenDocument ?? context.tokenDocument ?? context.targetActor ?? context.actor ?? null; }