diff --git a/module/models/group.mjs b/module/models/group.mjs index cf8f613..4ea89bb 100644 --- a/module/models/group.mjs +++ b/module/models/group.mjs @@ -129,12 +129,14 @@ export default class VermineGroupData extends foundry.abstract.TypeDataModel { } /** - * Calcule la réserve max en fonction du niveau du groupe. - * Règle simplifiée : niveau × 2, plafonné à 10. + * Calcule la réserve max selon le nombre de membres (personnages). + * Règles p. 68-69 : la Réserve débute à 3D et gagne 1D par personnage, + * avec un maximum de 10D. */ _calculateGroupReserve() { - const level = this.level?.value || 1 - this.reserve.max = Math.min(10, level * 2) + const members = Array.isArray(this.members) ? this.members : [] + const characterCount = members.filter((id) => game.actors?.get(id)?.type === "character").length + this.reserve.max = Math.min(10, 3 + characterCount) if (this.reserve.value > this.reserve.max) { this.reserve.value = this.reserve.max diff --git a/module/system/hooks.mjs b/module/system/hooks.mjs index 4267e3e..a3662d4 100644 --- a/module/system/hooks.mjs +++ b/module/system/hooks.mjs @@ -131,6 +131,15 @@ export const registerHooks = function () { } }); + // Un Groupe démarre avec une Réserve à son maximum (3D + 1D par membre). + Hooks.on("createActor", async function (actor) { + if (actor.type !== "group") return; + const reserve = actor.system?.reserve; + if (reserve && reserve.value === 0 && reserve.max > 0) { + await actor.update({ "system.reserve.value": reserve.max }); + } + }); + /* -------------------------------------------- */ /* Combat Hooks */ /* -------------------------------------------- */