- 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>
130 lines
5.9 KiB
JavaScript
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 })
|
|
})
|
|
};
|
|
}
|
|
}
|