# 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 :** ```javascript 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 :** ```javascript 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 :** ```javascript 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 :** ```javascript 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 :** ```javascript icon: "systems/fvtt-mournblade-cyd-2-0/assets/icons/effect.webp" ``` **Code après :** ```javascript 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 :** ```handlebars {{#if effect.duration.type}} {{#if (eq effect.duration.type "rounds")}}🔄{{/if}} {{#if (eq effect.duration.type "turns")}}🎭{{/if}} {{/if}} ``` **Code après :** ```handlebars {{#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é :** ```javascript 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 :** ```json { "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 :** ```json { "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 :** ```handlebars {{#if item.effects.length}} {{localize "MOURNBLADECYD2.EFFECT.activeEffects"}} {{/if}} ``` **Code après :** ```handlebars {{localize "MOURNBLADECYD2.EFFECT.activeEffects"}} ``` --- ### 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 :** ```bash # 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) : ```javascript 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