# Corrections apportées au module Mournblade CYD 2.0 ## Date : 2026-06-07 ## Dernière mise à jour : 2026-06-07 ## Nouveautés et Améliorations (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 ``` --- ## Nouveautés et Améliorations (2026-06-07) ### 10. ✅ Amélioration du popup de bienvenue **Modification :** Simplification de la mention des droits dans le popup de bienvenue. **Avant :** ``` Mournblade est un jeu publié par Titam France / Sombres Projets, tous les droits leur appartiennent. ``` **Après :** ``` Mournblade est un jeu Titam. ``` **Fichier modifié :** `modules/mournblade-cyd2-main.js` (ligne 141) --- ### 11. ✅ Ajout du coût en Pouvoir pour les invocations en cours **Nouveauté :** Ajout d'un champ numérique pour suivre le coût en Pouvoir des invocations en cours dans l'onglet Sorcellerie. **Fichiers modifiés :** - `modules/models/personnage.mjs` - Ajout du champ `coutPouvoirInvocations` dans le schéma sorcellerie - `lang/fr.json` - Ajout de la clé `SORCELLERIE.coutPouvoirInvocations` - `templates/actor-sheet.hbs` - Ajout du champ dans le template **Clé i18n ajoutée :** ```json { "coutPouvoirInvocations": "Coût en Pouvoir des invocations" } ``` **Schémas modifié :** ```javascript sorcellerie: new fields.SchemaField({ runes: new fields.HTMLField({ initial: "" }), creaturesinvoquees: new fields.HTMLField({ initial: "" }), demonslies: new fields.HTMLField({ initial: "" }), enchantements: new fields.HTMLField({ initial: "" }), invocationsencours: new fields.HTMLField({ initial: "" }), coutPouvoirInvocations: new fields.NumberField({ initial: 0, integer: true }) // ✅ Ajouté }) ``` --- ### 12. ✅ Amélioration de l'onglet Détails des Profils **Problème :** Les sections de texte (Compétences exercées, Talents Initié, etc.) avaient un rendu peu esthétique. **Solution :** Remplacement des sections de texte simples par des `div class="sheet-box"` pour un meilleur rendu visuel. **Fichier modifié :** `templates/item-profil-sheet.hbs` **Avant :** ```handlebars