Files
fvtt-ecryme/modules/models/pc.js
LeRatierBretonnier f130f24a23 Migration complète vers DataModels Foundry VTT
- 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>
2026-02-18 11:32:29 +01:00

130 lines
5.9 KiB
JavaScript

/**
* Data model pour les personnages joueurs (PC)
*/
export default class EcrymePCDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields;
// Template biodata
const biodataSchema = {
age: new fields.StringField({ initial: "" }),
size: new fields.StringField({ initial: "" }),
lieunaissance: new fields.StringField({ initial: "" }),
nationalite: new fields.StringField({ initial: "" }),
profession: new fields.StringField({ initial: "" }),
residence: new fields.StringField({ initial: "" }),
milieusocial: new fields.StringField({ initial: "" }),
poids: new fields.StringField({ initial: "" }),
cheveux: new fields.StringField({ initial: "" }),
sexe: new fields.StringField({ initial: "" }),
yeux: new fields.StringField({ initial: "" }),
enfance: new fields.StringField({ initial: "" }),
description: new fields.HTMLField({ initial: "" }),
gmnotes: new fields.HTMLField({ initial: "" })
};
// Helper function to create a skill schema (creates new instances each time)
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 })
});
// Skills categories
const physicalSkills = {
athletics: new fields.SchemaField(createSkillSchema("athletics", "ECRY.ui.athletics")),
driving: new fields.SchemaField(createSkillSchema("driving", "ECRY.ui.driving")),
fencing: new fields.SchemaField(createSkillSchema("fencing", "ECRY.ui.fencing")),
brawling: new fields.SchemaField(createSkillSchema("brawling", "ECRY.ui.brawling")),
shooting: new fields.SchemaField(createSkillSchema("shooting", "ECRY.ui.shooting"))
};
const mentalSkills = {
anthropomecanology: new fields.SchemaField(createSkillSchema("anthropomecanology", "ECRY.ui.anthropomecanology", 10)),
ecrymology: new fields.SchemaField(createSkillSchema("ecrymology", "ECRY.ui.ecrymology", 10)),
traumatology: new fields.SchemaField(createSkillSchema("traumatology", "ECRY.ui.traumatology", 10)),
traversology: new fields.SchemaField(createSkillSchema("traversology", "ECRY.ui.traversology", 10)),
urbatechnology: new fields.SchemaField(createSkillSchema("urbatechnology", "ECRY.ui.urbatechnology", 10))
};
const socialSkills = {
quibbling: new fields.SchemaField(createSkillSchema("quibbling", "ECRY.ui.quibbling", 10)),
creativity: new fields.SchemaField(createSkillSchema("creativity", "ECRY.ui.creativity", 10)),
loquacity: new fields.SchemaField(createSkillSchema("loquacity", "ECRY.ui.loquacity", 10)),
guile: new fields.SchemaField(createSkillSchema("guile", "ECRY.ui.guile", 10)),
performance: new fields.SchemaField(createSkillSchema("performance", "ECRY.ui.performance", 10))
};
// Helper function to create a cephaly skill schema
const createCephalySkillSchema = (nameValue) => ({
name: new fields.StringField({ initial: nameValue }),
value: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
max: new fields.NumberField({ initial: 10, integer: true })
});
// Cephaly skills
const cephalySkills = {
elegy: new fields.SchemaField(createCephalySkillSchema("ECRY.ui.elegy")),
entelechy: new fields.SchemaField(createCephalySkillSchema("ECRY.ui.entelechy")),
mekany: new fields.SchemaField(createCephalySkillSchema("ECRY.ui.mekany")),
psyche: new fields.SchemaField(createCephalySkillSchema("ECRY.ui.psyche")),
scoria: new fields.SchemaField(createCephalySkillSchema("ECRY.ui.scoria"))
};
// Helper function to create an impact schema
const createImpactSchema = () => ({
superficial: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
light: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
serious: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
major: new fields.NumberField({ initial: 0, integer: true, min: 0 })
});
return {
// Biodata
biodata: new fields.SchemaField(biodataSchema),
// Core data
subactors: new fields.ArrayField(new fields.StringField(), { initial: [] }),
equipmentfree: new fields.StringField({ initial: "" }),
// Skills
skills: new fields.SchemaField({
physical: new fields.SchemaField({
name: new fields.StringField({ initial: "ECRY.ui.physical" }),
pnjvalue: new fields.NumberField({ initial: 0, integer: true }),
skilllist: new fields.SchemaField(physicalSkills)
}),
mental: new fields.SchemaField({
name: new fields.StringField({ initial: "ECRY.ui.mental" }),
pnjvalue: new fields.NumberField({ initial: 0, integer: true }),
skilllist: new fields.SchemaField(mentalSkills)
}),
social: new fields.SchemaField({
name: new fields.StringField({ initial: "ECRY.ui.social" }),
pnjvalue: new fields.NumberField({ initial: 0, integer: true }),
skilllist: new fields.SchemaField(socialSkills)
})
}),
// Impacts
impacts: new fields.SchemaField({
physical: new fields.SchemaField(createImpactSchema()),
mental: new fields.SchemaField(createImpactSchema()),
social: new fields.SchemaField(createImpactSchema())
}),
// Cephaly
cephaly: new fields.SchemaField({
name: new fields.StringField({ initial: "ECRY.ui.cephaly" }),
skilllist: new fields.SchemaField(cephalySkills)
}),
// Internals
internals: new fields.SchemaField({
confrontbonus: new fields.NumberField({ initial: 0, integer: true })
})
};
}
}