fix: apprentissage de Groupe - dés dépensés en cas d'échec et gardes
Release Creation / build (release) Failing after 1m40s

- Les Dés d'Expérience du Groupe sont désormais dépensés que le jet
  d'apprentissage soit réussi ou raté (cohérent avec l'apprentissage
  de personnage et les règles ; le décompte est sorti de #applySuccess).
- Garde sur le type Capacité : si aucune Capacité de Groupe n'est
  sélectionnée, le jet est bloqué avec un avertissement (avant, il
  marquait learned.ability et dépensait les dés sans rien apprendre).
- Limites de Capacités de Totem (personnage) : seules les Capacités du
  Totem courant du personnage comptent dans les compteurs
  3×N1 / 1×N2-N3 / max 5.
This commit is contained in:
2026-08-05 14:15:11 +02:00
parent 3235017a4c
commit 18180a8445
2 changed files with 13 additions and 4 deletions
@@ -179,6 +179,9 @@ export default class GroupLearningDialog extends HandlebarsApplicationMixin(foun
return 'VERMINE.error_group_reserve_max';
}
if (c.type === 'ability') {
if (!c.key) {
return 'VERMINE.no_group_ability';
}
const ability = c.key ? actor.items.get(c.key) : null;
const requiredLevel = ability?.system?.level?.value ?? 1;
if (ability && (actor.system?.level?.value || 1) < requiredLevel) {
@@ -220,14 +223,16 @@ export default class GroupLearningDialog extends HandlebarsApplicationMixin(foun
const required = 1 + c.handicap;
if ((roll._total ?? 0) >= required) {
await this.#applySuccess(c, spent);
await this.#applySuccess(c);
}
// Les Dés d'Expérience sont perdus que le jet soit réussi ou raté.
await actor.update({ "system.experience.dice": Math.max(0, (actor.system.experience.dice || 0) - spent) });
this.close();
}
async #applySuccess(c, spent) {
async #applySuccess(c) {
const actor = this.#actor;
const updates = { 'system.experience.dice': (actor.system.experience.dice || 0) - spent };
const updates = {};
if (c.type === 'level') {
const current = actor.system.level.value || 1;
updates['system.level.value'] = Math.min(10, current + 1);
+5 -1
View File
@@ -132,7 +132,11 @@ export default class LearningDialog extends HandlebarsApplicationMixin(foundry.a
}
#totemCapacityCounts() {
const items = (this.#actor.itemTypes?.ability || []).filter(i => i.system?.type === "character" && i.system?.learned);
// Ne comptabilise que les Capacités du Totem courant du personnage
// (les Capacités liées à un autre Totem ne bloquent pas les limites).
const totem = this.#actor.system?.identity?.totem;
const items = (this.#actor.itemTypes?.ability || []).filter(i =>
i.system?.type === "character" && i.system?.learned && i.system?.totem === totem);
const byLevel = { 1: 0, 2: 0, 3: 0 };
for (const i of items) {
const level = i.system?.level?.value || 0;