# Résolution Erreurs d'Initialisation ## Problèmes Rencontrés et Solutions ### Erreur 1: Cannot read properties of null (reading 'isGM') **Problème**: L'ordre d'initialisation dans le hook 'init' n'était pas optimal. **Solution**: Réorganisation de `modules/ecryme-main.js` pour enregistrer les DataModels AVANT de définir `game.system.ecryme`. ### Erreur 2: The "value" field already belongs to some other parent **Problème**: Les instances de champs étaient réutilisées au lieu de créer de nouvelles instances. #### Explication Technique En JavaScript, le spread operator (`...`) copie les **références** aux objets, pas les objets eux-mêmes : ```javascript // ❌ INCORRECT - Partage les mêmes instances const skillSchema = { value: new fields.NumberField({ initial: 0 }) }; const skills = { athletics: new fields.SchemaField({ ...skillSchema }), // Réutilise la même instance de 'value' driving: new fields.SchemaField({ ...skillSchema }) // Réutilise la même instance de 'value' }; ``` Foundry interdit la réutilisation d'une instance de champ dans plusieurs parents. #### Solution Appliquée Création de **fonctions helper** qui retournent de **nouvelles instances** à chaque appel : ```javascript // ✅ CORRECT - Crée de nouvelles instances const createSkillSchema = (keyValue, nameValue, maxValue = 0) => ({ key: new fields.StringField({ initial: keyValue }), name: new fields.StringField({ initial: nameValue }), value: new fields.NumberField({ initial: 0, integer: true, min: 0 }), max: new fields.NumberField({ initial: maxValue, integer: true, min: 0 }) }); const skills = { athletics: new fields.SchemaField(createSkillSchema("athletics", "ECRY.ui.athletics")), driving: new fields.SchemaField(createSkillSchema("driving", "ECRY.ui.driving")) }; ``` #### Corrections dans `modules/models/pc.js` 1. **createSkillSchema()** - Pour les 15 compétences (physical, mental, social) 2. **createCephalySkillSchema()** - Pour les 5 compétences cephaly 3. **createImpactSchema()** - Pour les 3 catégories d'impacts (physical, mental, social) Chaque fonction crée de **nouvelles instances** de champs à chaque appel, évitant ainsi le partage de références. ## Changements Effectués ### Fichier: modules/ecryme-main.js - Réorganisation de l'ordre d'initialisation - CONFIG.Actor/Item.dataModels enregistrés avant game.system.ecryme ### Fichier: modules/models/pc.js - Remplacement des objets partagés par des fonctions helper - createSkillSchema() pour skills - createCephalySkillSchema() pour cephaly - createImpactSchema() pour impacts ## Validation - ✅ Syntaxe JavaScript vérifiée (`node --check`) - ✅ Pattern correctement appliqué (fonctions au lieu d'objets partagés) - ✅ Conforme aux meilleures pratiques Foundry VTT ## Prochaine Étape Relancer Foundry VTT pour vérifier que les deux erreurs sont résolues.