From 3cb96410b992f4a81c55e6b3f066fecf2839f6e3 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnier Date: Thu, 6 Aug 2026 09:37:52 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20r=C3=A9serve=20de=20Groupe=20calcul?= =?UTF-8?q?=C3=A9e=20selon=20les=20membres=20(3D=20+=201D/personnage)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - _calculateGroupReserve utilisait une règle simplifiée (niveau × 2) au lieu du nombre de personnages membres. Désormais max = 3 + membres (personnages uniquement), plafonné à 10D, conforme aux règles p. 68-69. - Un Groupe nouvellement créé démarre avec sa Réserve à son maximum. --- module/models/group.mjs | 10 ++++++---- module/system/hooks.mjs | 9 +++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) 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 */ /* -------------------------------------------- */