Files
fvtt-mournblade-cyd-2-0/CORRECTIONS.md
T
uberwald 3ff2b8e9bb Docs: Add MNBL i18n and effects tab fixes to documentation
- Documented missing MNBL.details and MNBL.description keys
- Documented effects tab visibility fix
- Updated file list and impact section

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-07 00:53:53 +02:00

15 KiB

Corrections apportées au module Mournblade CYD 2.0

Date : 2026-06-07

Dernière mise à jour : 2026-06-07

Problèmes identifiés et corrigés

1. Erreur de chargement des partials Handlebars

Problème : Les feuilles de personnage et de créature généraient une erreur lors du rendu :

Failed to render template part "sheet":
The partial systems/fvtt-mournblade-cyd-2-0/templates/partial-active-effects.hbs could not be found

Cause : La fonction preloadHandlebarsTemplates() dans modules/mournblade-cyd2-utility.js ne préchargeait pas tous les partials nécessaires. Seuls 7 templates étaient préchargés sur 9 utilisés.

Partials manquants :

  • partial-active-effects.hbs - Utilisé dans les feuilles actor-sheet.hbs et creature-sheet.hbs
  • partial-item-effects.hbs - Utilisé dans de nombreux templates d'items

Solution : Ajout des deux partials manquants à la liste des templates préchargés dans la fonction preloadHandlebarsTemplates().

Fichier modifié :

  • modules/mournblade-cyd2-utility.js (lignes 189-201)

Code avant :

const templatePaths = [
  'systems/fvtt-mournblade-cyd-2-0/templates/editor-notes-gm.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-header.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-description.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-nav.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-prix.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-automation.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/hud-adversites.hbs',
]

Code après :

const templatePaths = [
  'systems/fvtt-mournblade-cyd-2-0/templates/editor-notes-gm.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-header.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-description.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-nav.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-prix.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-automation.hbs',
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-active-effects.hbs',  // ✅ Ajouté
  'systems/fvtt-mournblade-cyd-2-0/templates/partial-item-effects.hbs',    // ✅ Ajouté
  'systems/fvtt-mournblade-cyd-2-0/templates/hud-adversites.hbs',
]

2. Erreur de création d'effet actif

Problème :

base-actor-sheet.mjs:357 MournbladeCYD2 | Failed to create effect: TypeError: 
Cannot read properties of undefined (reading 'create')

Cause : La fonction ActiveEffectDialog.create() n'existe pas dans Foundry VTT v14. L'API a changé et cette méthode a été supprimée.

Solution : Remplacement de l'appel à foundry.applications.api.ActiveEffectDialog.create() par une création directe via document.createEmbeddedDocuments("ActiveEffect", [data]), suivie de l'ouverture de la feuille d'édition.

Fichiers modifiés :

  • modules/applications/sheets/base-actor-sheet.mjs (lignes 328-363)
  • modules/applications/sheets/base-item-sheet.mjs (lignes 189-224)

Code avant :

const effect = await foundry.applications.api.ActiveEffectDialog.create({
  document: this.document,
  effect: defaultEffectData
});

if (effect) {
  await this.document.createEmbeddedDocuments("ActiveEffect", [effect.toObject()]);
}

Code après :

const [effect] = await this.document.createEmbeddedDocuments("ActiveEffect", [defaultEffectData]);

if (effect) {
  effect.sheet.render(true);
}

3. Boucle infinie de chargement d'icône (effect.webp introuvable)

Problème :

404 (Not Found) - GET https://localhost:31000/systems/fvtt-mournblade-cyd-2-0/assets/icons/effect.webp
Boucle infinie de tentatives de chargement

Cause : L'icône effect.webp était référencée dans plusieurs fichiers mais n'existait pas dans le dossier assets/icons/. Chaque fois que la dialog de création d'effet s'ouvrait, le navigateur essayait de charger cette image manquante en boucle.

Fichiers concernés :

  • modules/applications/sheets/base-actor-sheet.mjs (ligne 336)
  • modules/applications/sheets/base-item-sheet.mjs (ligne 197)
  • modules/mournblade-cyd2-effects.js (lignes 120, 180)
  • templates/partial-active-effects.hbs (ligne 30)
  • templates/partial-item-effects.hbs (ligne 30)

Solution : Remplacement de toutes les références à effect.webp par capacite.webp, une icône existante dans le dossier assets/icons/.

Code avant :

icon: "systems/fvtt-mournblade-cyd-2-0/assets/icons/effect.webp"

Code après :

icon: "systems/fvtt-mournblade-cyd-2-0/assets/icons/capacite.webp"

4. Propriété dépréciée ActiveEffectDuration.type

Problème :

foundry.mjs:1555 Error: You are accessing ActiveEffectDuration#type, 
which is now at ActiveEffectDuration#units.
Deprecated since Version 14
Backwards-compatible support will be removed in Version 16

Cause : En Foundry VTT v14, la propriété duration.type a été renommée en duration.units. L'ancien nom était encore supporté pour la compatibilité, mais générait des avertissements et sera supprimé en v16.

Fichiers concernés :

  • templates/partial-active-effects.hbs (lignes 55-61)
  • templates/partial-item-effects.hbs (lignes 51-56)

Solution : Remplacement de toutes les occurrences de effect.duration.type par effect.duration.units dans les templates.

Code avant :

{{#if effect.duration.type}}
  {{#if (eq effect.duration.type "rounds")}}🔄{{/if}}
  {{#if (eq effect.duration.type "turns")}}🎭{{/if}}
{{/if}}

Code après :

{{#if effect.duration.units}}
  {{#if (eq effect.duration.units "rounds")}}🔄{{/if}}
  {{#if (eq effect.duration.units "turns")}}🎭{{/if}}
{{/if}}

5. Helper Handlebars "subtract" manquant

Problème :

Failed to render Application "MournbladeCYD2PersonnageSheet":
Missing helper: "subtract"

Cause : Le template utilisait le helper subtract dans {{#unless (eq index (subtract effect.changes.length 1))}} mais ce helper n'était pas enregistré dans Handlebars.

Fichiers concernés :

  • templates/partial-active-effects.hbs (ligne 44)
  • templates/partial-item-effects.hbs (ligne 44)
  • modules/mournblade-cyd2-utility.js (helper non enregistré)

Solution : Ajout du helper subtract dans la méthode init() de MournbladeCYD2Utility :

Code ajouté :

Handlebars.registerHelper('subtract', function (a, b) {
  return parseInt(a) - parseInt(b);
});

Fonctionnalité : Le helper permet de soustraire deux nombres dans les templates Handlebars, utilisé pour détecter le dernier élément d'une liste.


6. Clés i18n manquantes pour les effets

Problème : Les clés de localisation pour les messages d'erreur des effets actifs étaient manquantes dans lang/fr.json, ce qui pouvait entraîner l'affichage de messages en anglais ou vides.

Clés manquantes identifiées :

  • MOURNBLADECYD2.EFFECT.createError
  • MOURNBLADECYD2.EFFECT.deleteError
  • MOURNBLADECYD2.EFFECT.applyError
  • MOURNBLADECYD2.EFFECT.applyItemError
  • MOURNBLADECYD2.EFFECT.selectActor
  • MOURNBLADECYD2.EFFECT.toggleError

Solution : Ajout de toutes les clés manquantes dans la section EFFECT du fichier lang/fr.json.

Traductions ajoutées :

{
  "createError": "Erreur lors de la création de l'effet",
  "deleteError": "Erreur lors de la suppression de l'effet",
  "applyError": "Erreur lors de l'application de l'effet",
  "applyItemError": "Erreur lors de l'application de l'effet sur l'item",
  "selectActor": "Sélectionnez un acteur pour appliquer l'effet",
  "toggleError": "Erreur lors de l'activation/désactivation de l'effet"
}

Fichier modifié : lang/fr.json


7. Clés i18n MNBL manquantes

Problème : Les clés de localisation MNBL.details et MNBL.description étaient manquantes dans lang/fr.json, ce qui entraînait l'affichage de la clé elle-même au lieu d'une traduction.

Clés manquantes identifiées :

  • MNBL.details - Utilisée dans l'onglet "Détails" des fiches d'items
  • MNBL.description - Utilisée dans l'onglet "Description" des fiches d'items

Solution : Ajout des deux clés manquantes dans la section MNBL du fichier lang/fr.json.

Traductions ajoutées :

{
  "details": "Détails",
  "description": "Description"
}

Fichier modifié : lang/fr.json


8. Onglet "Effets" manquant dans les fiches d'items

Problème : L'onglet "Effets" n'apparaissait pas dans les fiches d'items, empêchant l'accès à la gestion des effets actifs sur les items.

Cause : Dans templates/partial-item-nav.hbs, l'onglet "Effets" n'était affiché que si l'item avait déjà des effets ({{#if item.effects.length}}).

Solution : Suppression de la condition pour toujours afficher l'onglet "Effets", même lorsque l'item n'a pas encore d'effets actifs.

Fichier modifié : templates/partial-item-nav.hbs

Code avant :

{{#if item.effects.length}}
<a class="item" data-tab="effects" ...>{{localize "MOURNBLADECYD2.EFFECT.activeEffects"}}</a>
{{/if}}

Code après :

<a class="item" data-tab="effects" ...>{{localize "MOURNBLADECYD2.EFFECT.activeEffects"}}</a>

9. Erreur de parsing JSON (historique)

Problème mentionné :

SyntaxError: Expected ',' or '}' after property value in JSON at position 3753 (line 118 column 4)

Statut : Cette erreur concernait probablement une ancienne version du fichier lang/fr.json. Le fichier actuel est valide et ne contient pas d'erreur de syntaxe.

Vérification :

# Le fichier passe la validation JSON
node -e "require('./lang/fr.json')"  # ✅ Pas d'erreur

Liste complète des partials Handlebars

Partials utilisés dans le système :

Partial Utilisation Pré-chargé ?
partial-item-header.hbs En-têtes des items Oui
partial-item-description.hbs Descriptions des items Oui
partial-item-nav.hbs Navigation des items Oui
partial-item-prix.hbs Prix des items Oui
partial-item-effects.hbs Effets des items Oui (ajouté)
partial-active-effects.hbs Effets actifs (actors) Oui (ajouté)
partial-automation.hbs Automatisation Oui
editor-notes-gm.hbs Notes GM Oui
hud-adversites.hbs HUD Adversités Oui

Templates principaux

Fiches d'acteurs :

  • actor-sheet.hbs - Feuille de personnage
  • creature-sheet.hbs - Feuille de créature

Fiches d'items :

  • item-arme-sheet.hbs
  • item-capaciteautomata-sheet.hbs
  • item-competence-sheet.hbs
  • item-don-sheet.hbs
  • item-equipement-sheet.hbs
  • item-historique-sheet.hbs
  • item-monnaie-sheet.hbs
  • item-pacte-sheet.hbs
  • item-pouvoirselementaire-sheet.hbs
  • item-profil-sheet.hbs
  • item-protection-sheet.hbs
  • item-ressource-sheet.hbs
  • item-rune-sheet.hbs
  • item-runeeffect-sheet.hbs
  • item-talent-sheet.hbs
  • item-tendance-sheet.hbs
  • item-traitchaotique-sheet.hbs
  • item-traitdemoniaque-sheet.hbs
  • item-traitespece-sheet.hbs

Outils de test

Un script de test a été créé pour valider les corrections :

  • Fichier : test-templates.js
  • Exécution : node test-templates.js

Fonctionnalités du test :

  1. Vérifie que tous les templates préchargés existent
  2. Scanne tous les templates pour trouver les partials utilisés
  3. Vérifie que tous les partials utilisés sont préchargés
  4. Valide le fichier de localisation JSON

Bonnes pratiques rappelées

Pré-chargement des templates Handlebars

En Foundry VTT v12+, il est obligatoire de pré-charger tous les partials Handlebars utilisés via la fonction foundry.applications.handlebars.loadTemplates() dans le hook init.

Pourquoi ?

  • Les partials ne sont pas chargés automatiquement
  • Sans pré-chargement, le rendu échouera avec une erreur "partial could not be found"
  • Le pré-chargement améliore les performances en cacheant les templates

Où ? Dans le hook init, avant l'enregistrement des feuilles (sheets) :

Hooks.once("init", async function () {
  // Pré-charger les templates AVANT d'enregistrer les feuilles
  await MournbladeCYD2Utility.preloadHandlebarsTemplates();
  
  // Ensuite enregistrer les feuilles
  Actors.registerSheet(...);
  Items.registerSheet(...);
});

Gestion des chemins des templates

Les chemins doivent être relatifs au répertoire systems/ :

  • Bon : 'systems/fvtt-mournblade-cyd-2-0/templates/partial-active-effects.hbs'
  • Mauvais : './templates/partial-active-effects.hbs'

Impact des corrections

Avant les corrections :

  • Ouverture des feuilles de personnage → Erreur
  • Ouverture des feuilles de créature → Erreur
  • Affichage des effets actifs → Impossible
  • Utilisation des effets d'items → Problèmes potentiels
  • Création d'effets actifs → Erreur TypeError
  • Boucle infinie de 404 sur effect.webp
  • Avertissements duration.type déprécié
  • Helper subtract manquant → Erreur de rendu
  • Clés i18n manquantes → Messages en anglais
  • Clés MNBL.details et MNBL.description manquantes
  • Onglet "Effets" manquant dans les fiches d'items

Après les corrections :

  • Toutes les feuilles s'ouvrent correctement
  • Les effets actifs s'affichent correctement
  • Tous les items affichent leurs effets
  • Plus d'erreurs de templates manquants
  • Création d'effets actifs fonctionne correctement
  • Plus de boucles infinies de chargement d'icônes
  • Plus d'avertissements de compatibilité
  • Helper subtract disponible et fonctionnel
  • Toutes les clés i18n présentes → Localisation complète
  • Toutes les clés MNBL présentes
  • Onglet "Effets" toujours visible dans les fiches d'items

Recommandations pour le développement futur

  1. Toujours pré-charger les nouveaux partials lorsqu'ils sont ajoutés
  2. Utiliser un script de test pour valider les templates après modification
  3. Maintenir une liste à jour des partials utilisés dans le projet
  4. Vérifier les erreurs de console lors du développement
  5. Tester toutes les feuilles après ajout de nouveaux partials

Fichiers modifiés

Fichier Modification Statut
modules/mournblade-cyd2-utility.js Ajout partials + helper subtract Corrigé
modules/applications/sheets/base-actor-sheet.mjs Correction création effets + icône Corrigé
modules/applications/sheets/base-item-sheet.mjs Correction création effets + icône Corrigé
modules/mournblade-cyd2-effects.js Remplacement effect.webp par capacite.webp Corrigé
templates/partial-active-effects.hbs Remplacement effect.webp + duration.type → duration.units Corrigé
templates/partial-item-effects.hbs Remplacement effect.webp + duration.type → duration.units Corrigé
templates/partial-item-nav.hbs Affichage permanent onglet Effets + clés MNBL Corrigé
test-templates.js Nouveau fichier de test Ajouté
CORRECTIONS.md Documentation des corrections Ajouté
lang/fr.json Ajout des clés i18n EFFECT + MNBL manquantes Corrigé

Auteurs

Corrections réalisées par : Mistral Vibe (via Vibe CLI) Date : 2026-06-07