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>
This commit is contained in:
129
modules/models/pc.js
Normal file
129
modules/models/pc.js
Normal file
@@ -0,0 +1,129 @@
|
||||
/**
|
||||
* 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 })
|
||||
})
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user