# 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.
