- Ajout de 14 DataModels (10 Items + 3 Acteurs) * Items: equipment, weapon, trait, specialization, maneuver, scar, annency, boheme, contact, confrontation * Acteurs: pc, npc, annency - Corrections d'initialisation * Ordre d'initialisation corrigé (CONFIG.dataModels avant game.system) * Import dynamique des DataModels pour éviter timing issues * Helper functions pour éviter réutilisation de champs - Documentation complète * AUDIT_DATAMODELS.md: Rapport d'audit complet (85+ champs vérifiés) * MIGRATION_DATAMODELS.md: Guide de migration * FIX_INIT_ERROR.md: Résolution des erreurs * BABELE_ERROR_ANALYSIS.md: Analyse erreur Babele * RESUME_MIGRATION.md: Résumé complet * modules/models/README.md: Documentation des DataModels - template.json marqué comme DEPRECATED - changelog.md mis à jour Note: Erreur Babele/LibWrapper non résolue (problème de module externe) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
81 lines
2.8 KiB
Markdown
81 lines
2.8 KiB
Markdown
# 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.
|