feat: système de magie complet avec dialogue de lancement
- Modèle sortilege enrichi (type, niveau, portée, durée, conditions, effets) - Personnage: champ rangMagie (ensorceleur/initié/thaumaturge) - Constantes: SORTILEGE_MODIFICATEURS (table 3x3), RANG_MAGICIEN - Dialogue de lancement: tirage MJ, sélection atouts + Coupe, total temps réel - Calcul difficulté: carte MJ + modificateur selon type × niveau - Table des échecs magiques (normal/critique selon rang) - Pioche automatique après succès, défausse après échec - Template chat avec résultat localisé Corrections post-review: - Boucle de défausse sur échec corrigée (itérait toujours sur [0]) - Clé de localisation HAMALRON.Roll.cast -> HAMALRON.Sortilege.cast - Ajout de la clé manquante noCoupe - Labels localisés dans le chat (categorieLabel, niveauLabel)
This commit is contained in:
@@ -34,6 +34,7 @@ export default class HamalronPersonnage extends foundry.abstract.TypeDataModel {
|
||||
|
||||
schema.historial = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.progression = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||
schema.rangMagie = new fields.StringField({ required: true, initial: "initie", choices: Object.fromEntries(Object.entries(SYSTEM.RANG_MAGICIEN).map(([key, val]) => [key, val.label])) })
|
||||
|
||||
schema.biodata = new fields.SchemaField({
|
||||
age: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
|
||||
@@ -4,15 +4,20 @@ export default class HamalronSortilege extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
const schema = {}
|
||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
schema.categorie = new fields.StringField({ required: true, initial: "malefica", choices: Object.fromEntries(Object.entries(SYSTEM.SORTILEGE_CATEGORIES).map(([key, val]) => [key, val.label])) })
|
||||
schema.categorie = new fields.StringField({ required: true, initial: "domestique", choices: Object.fromEntries(Object.entries(SYSTEM.SORTILEGE_CATEGORIES).map(([key, val]) => [key, val.label])) })
|
||||
schema.niveauRequis = new fields.StringField({ required: true, initial: "amateur", choices: Object.fromEntries(Object.entries(SYSTEM.NIVEAU_COMPETENCES).map(([key, val]) => [key, val.name])) })
|
||||
schema.portee = new fields.StringField({ required: false, initial: "" })
|
||||
schema.duree = new fields.StringField({ required: false, initial: "" })
|
||||
schema.conditions = new fields.StringField({ required: false, initial: "" })
|
||||
schema.effetAmateur = new fields.HTMLField({ required: false, textSearch: true })
|
||||
schema.effetCompetent = new fields.HTMLField({ required: false, textSearch: true })
|
||||
schema.effetExpert = new fields.HTMLField({ required: false, textSearch: true })
|
||||
schema.concentration = new fields.BooleanField({ required: true, initial: false })
|
||||
return schema
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static LOCALIZATION_PREFIXES = ["HAMALRON.Sortilege"]
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user