Corrections diverses pour CYD2.0

- Fix: Remplacement de 'Points d'Âme' par 'Points de Pouvoir' dans les messages de chat
- Fix: Ajout de la case Âme avec Seuil de Pouvoir dans les fiches de créature
- Fix: Ajout du champ Seuil de Pouvoir éditable dans les fiches de créature
- Fix: Initiative, Défense et Protection maintenant éditables dans les fiches de créature
- Fix: Ajout du champ Bonus/Malus aux templates de Traits chaotiques et d'espèce
- Fix: Le champ coût en Pouvoir des Runes accepte maintenant du texte (StringField)
- Fix: Rafraîchissement des fiches après drop d'items pour afficher les Traits
- Fix: Ajout des nouveaux types d'items (Trait Démoniaque, Pouvoir Élémentaire, Capacité d'Automata)
- New: Ajout des modèles et templates pour les nouveaux types d'items
- New: Intégration complète des nouveaux types dans les fichiers de configuration

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
2026-06-06 22:08:53 +02:00
parent 9dd6fbd2e7
commit 5ab03920d6
23 changed files with 250 additions and 18 deletions
+12 -2
View File
@@ -20,7 +20,17 @@
"runeeffect": "Effet de Rune", "runeeffect": "Effet de Rune",
"tendance": "Tendance", "tendance": "Tendance",
"traitchaotique": "Trait Chaotique", "traitchaotique": "Trait Chaotique",
"traitespece": "Trait d'Espèce" "traitespece": "Trait d'Espèce",
"traitdemoniaque": "Trait Démoniaque",
"pouvoirselementaire": "Pouvoir Élémentaire",
"capaciteautomata": "Capacité d'Automata"
}
},
"SHEETS": {
"Item": {
"traitdemoniaque": "Trait Démoniaque",
"pouvoirselementaire": "Pouvoir Élémentaire",
"capaciteautomata": "Capacité d'Automata"
} }
}, },
"MOURNBLADE": { "MOURNBLADE": {
@@ -57,7 +67,7 @@
"pronouncerune": "Prononcer", "pronouncerune": "Prononcer",
"rune": "Rune", "rune": "Rune",
"soulcost": "Coût en points de pouvoir", "soulcost": "Coût en points de pouvoir",
"soulpoints": "Points d'Âme", "soulpoints": "Points de Pouvoir",
"traced": "Tracée", "traced": "Tracée",
"tracedrune": "Rune tracée", "tracedrune": "Rune tracée",
"tracerune": "Tracer" "tracerune": "Tracer"
+3
View File
@@ -23,3 +23,6 @@ export { default as MournbladeCYD2TalentSheet } from './mournblade-cyd2-talent-s
export { default as MournbladeCYD2TendanceSheet } from './mournblade-cyd2-tendance-sheet.mjs'; export { default as MournbladeCYD2TendanceSheet } from './mournblade-cyd2-tendance-sheet.mjs';
export { default as MournbladeCYD2TraitChaotiqueSheet } from './mournblade-cyd2-traitchaotique-sheet.mjs'; export { default as MournbladeCYD2TraitChaotiqueSheet } from './mournblade-cyd2-traitchaotique-sheet.mjs';
export { default as MournbladeCYD2TraitEspeceSheet } from './mournblade-cyd2-traitespece-sheet.mjs'; export { default as MournbladeCYD2TraitEspeceSheet } from './mournblade-cyd2-traitespece-sheet.mjs';
export { default as MournbladeCYD2TraitDemoniaqueSheet } from './mournblade-cyd2-traitdemoniaque-sheet.mjs';
export { default as MournbladeCYD2PouvoirElementaireSheet } from './mournblade-cyd2-pouvoirselementaire-sheet.mjs';
export { default as MournbladeCYD2CapaciteAutomataSheet } from './mournblade-cyd2-capaciteautomata-sheet.mjs';
@@ -176,7 +176,8 @@ export default class MournbladeCYD2ActorSheetV2 extends HandlebarsApplicationMix
const item = await Item.fromDropData(data); const item = await Item.fromDropData(data);
if (!item) return; if (!item) return;
if (this.document.uuid === item.parent?.uuid) return; if (this.document.uuid === item.parent?.uuid) return;
return this.document.createEmbeddedDocuments("Item", [item.toObject()]); await this.document.createEmbeddedDocuments("Item", [item.toObject()]);
this.render();
} }
async _onDropActor(event, data) {} async _onDropActor(event, data) {}
@@ -0,0 +1,27 @@
import MournbladeCYD2ItemSheetV2 from "./base-item-sheet.mjs";
export default class MournbladeCYD2CapaciteAutomataSheet extends MournbladeCYD2ItemSheetV2 {
/** @override */
static DEFAULT_OPTIONS = {
...super.DEFAULT_OPTIONS,
classes: [...super.DEFAULT_OPTIONS.classes, "capaciteautomata"],
window: {
...super.DEFAULT_OPTIONS.window,
title: "SHEETS.Item.capaciteautomata",
},
};
/** @override */
static PARTS = {
main: {
template: "systems/fvtt-mournblade-cyd-2-0/templates/item-capaciteautomata-sheet.hbs",
},
};
/** @override */
async _prepareContext() {
const context = await super._prepareContext();
return context;
}
}
@@ -0,0 +1,27 @@
import MournbladeCYD2ItemSheetV2 from "./base-item-sheet.mjs";
export default class MournbladeCYD2PouvoirElementaireSheet extends MournbladeCYD2ItemSheetV2 {
/** @override */
static DEFAULT_OPTIONS = {
...super.DEFAULT_OPTIONS,
classes: [...super.DEFAULT_OPTIONS.classes, "pouvoirselementaire"],
window: {
...super.DEFAULT_OPTIONS.window,
title: "SHEETS.Item.pouvoirselementaire",
},
};
/** @override */
static PARTS = {
main: {
template: "systems/fvtt-mournblade-cyd-2-0/templates/item-pouvoirselementaire-sheet.hbs",
},
};
/** @override */
async _prepareContext() {
const context = await super._prepareContext();
return context;
}
}
@@ -0,0 +1,27 @@
import MournbladeCYD2ItemSheetV2 from "./base-item-sheet.mjs";
export default class MournbladeCYD2TraitDemoniaqueSheet extends MournbladeCYD2ItemSheetV2 {
/** @override */
static DEFAULT_OPTIONS = {
...super.DEFAULT_OPTIONS,
classes: [...super.DEFAULT_OPTIONS.classes, "traitdemoniaque"],
window: {
...super.DEFAULT_OPTIONS.window,
title: "SHEETS.Item.traitdemoniaque",
},
};
/** @override */
static PARTS = {
main: {
template: "systems/fvtt-mournblade-cyd-2-0/templates/item-traitdemoniaque-sheet.hbs",
},
};
/** @override */
async _prepareContext() {
const context = await super._prepareContext();
return context;
}
}
+12
View File
@@ -0,0 +1,12 @@
/**
* Data model pour les capacités d'Automata MournbladeCYD2
*/
export default class CapaciteAutomataDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields;
return {
description: new fields.HTMLField({ initial: "" }),
bonusmalus: new fields.StringField({ initial: "" })
};
}
}
+3
View File
@@ -20,6 +20,9 @@ export { default as RuneEffectDataModel } from './runeeffect.mjs';
export { default as TendanceDataModel } from './tendance.mjs'; export { default as TendanceDataModel } from './tendance.mjs';
export { default as TraitChaotiqueDataModel } from './traitchaotique.mjs'; export { default as TraitChaotiqueDataModel } from './traitchaotique.mjs';
export { default as TraitEspeceDataModel } from './traitespece.mjs'; export { default as TraitEspeceDataModel } from './traitespece.mjs';
export { default as TraitDemoniaqueDataModel } from './traitdemoniaque.mjs';
export { default as PouvoirElementaireDataModel } from './pouvoirselementaire.mjs';
export { default as CapaciteAutomataDataModel } from './capaciteautomata.mjs';
// Modèles d'acteurs // Modèles d'acteurs
export { default as PersonnageDataModel } from './personnage.mjs'; export { default as PersonnageDataModel } from './personnage.mjs';
+12
View File
@@ -0,0 +1,12 @@
/**
* Data model pour les pouvoirs élémentaires MournbladeCYD2
*/
export default class PouvoirElementaireDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields;
return {
description: new fields.HTMLField({ initial: "" }),
bonusmalus: new fields.StringField({ initial: "" })
};
}
}
+1 -1
View File
@@ -10,7 +10,7 @@ export default class RuneDataModel extends foundry.abstract.TypeDataModel {
seuil: new fields.NumberField({ initial: 0, integer: true }), seuil: new fields.NumberField({ initial: 0, integer: true }),
prononcee: new fields.StringField({ initial: "" }), prononcee: new fields.StringField({ initial: "" }),
tracee: new fields.StringField({ initial: "" }), tracee: new fields.StringField({ initial: "" }),
coutAme: new fields.NumberField({ initial: 0, integer: true }) coutAme: new fields.StringField({ initial: "" })
}; };
} }
} }
+2 -1
View File
@@ -5,7 +5,8 @@ export default class TraitChaotiqueDataModel extends foundry.abstract.TypeDataMo
static defineSchema() { static defineSchema() {
const fields = foundry.data.fields; const fields = foundry.data.fields;
return { return {
description: new fields.HTMLField({ initial: "" }) description: new fields.HTMLField({ initial: "" }),
bonusmalus: new fields.StringField({ initial: "" })
}; };
} }
} }
+12
View File
@@ -0,0 +1,12 @@
/**
* Data model pour les traits démoniaques MournbladeCYD2
*/
export default class TraitDemoniaqueDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields;
return {
description: new fields.HTMLField({ initial: "" }),
bonusmalus: new fields.StringField({ initial: "" })
};
}
}
+2 -1
View File
@@ -5,7 +5,8 @@ export default class TraitEspeceDataModel extends foundry.abstract.TypeDataModel
static defineSchema() { static defineSchema() {
const fields = foundry.data.fields; const fields = foundry.data.fields;
return { return {
description: new fields.HTMLField({ initial: "" }) description: new fields.HTMLField({ initial: "" }),
bonusmalus: new fields.StringField({ initial: "" })
}; };
} }
} }
+7 -1
View File
@@ -69,7 +69,10 @@ Hooks.once("init", async function () {
runeeffect: models.RuneEffectDataModel, runeeffect: models.RuneEffectDataModel,
tendance: models.TendanceDataModel, tendance: models.TendanceDataModel,
traitchaotique: models.TraitChaotiqueDataModel, traitchaotique: models.TraitChaotiqueDataModel,
traitespece: models.TraitEspeceDataModel traitespece: models.TraitEspeceDataModel,
traitdemoniaque: models.TraitDemoniaqueDataModel,
pouvoirselementaire: models.PouvoirElementaireDataModel,
capaciteautomata: models.CapaciteAutomataDataModel
} }
game.system.mournbladecyd2 = { game.system.mournbladecyd2 = {
MournbladeCYD2Utility, MournbladeCYD2Utility,
@@ -99,6 +102,9 @@ Hooks.once("init", async function () {
foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd-2-0", sheets.MournbladeCYD2TendanceSheet, { types: ["tendance"], makeDefault: true }); foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd-2-0", sheets.MournbladeCYD2TendanceSheet, { types: ["tendance"], makeDefault: true });
foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd-2-0", sheets.MournbladeCYD2TraitChaotiqueSheet, { types: ["traitchaotique"], makeDefault: true }); foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd-2-0", sheets.MournbladeCYD2TraitChaotiqueSheet, { types: ["traitchaotique"], makeDefault: true });
foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd-2-0", sheets.MournbladeCYD2TraitEspeceSheet, { types: ["traitespece"], makeDefault: true }); foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd-2-0", sheets.MournbladeCYD2TraitEspeceSheet, { types: ["traitespece"], makeDefault: true });
foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd-2-0", sheets.MournbladeCYD2TraitDemoniaqueSheet, { types: ["traitdemoniaque"], makeDefault: true });
foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd-2-0", sheets.MournbladeCYD2PouvoirElementaireSheet, { types: ["pouvoirselementaire"], makeDefault: true });
foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd-2-0", sheets.MournbladeCYD2CapaciteAutomataSheet, { types: ["capaciteautomata"], makeDefault: true });
MournbladeCYD2Utility.init() MournbladeCYD2Utility.init()
MournbladeCYD2Automation.init() MournbladeCYD2Automation.init()
+4 -1
View File
@@ -51,7 +51,10 @@
"runeeffect": { "htmlFields": ["description"] }, "runeeffect": { "htmlFields": ["description"] },
"tendance": { "htmlFields": ["description"] }, "tendance": { "htmlFields": ["description"] },
"traitchaotique": { "htmlFields": ["description"] }, "traitchaotique": { "htmlFields": ["description"] },
"traitespece": { "htmlFields": ["description"] } "traitespece": { "htmlFields": ["description"] },
"traitdemoniaque": { "htmlFields": ["description"] },
"pouvoirselementaire": { "htmlFields": ["description"] },
"capaciteautomata": { "htmlFields": ["description"] }
} }
}, },
"flags": { "flags": {
+1 -1
View File
@@ -122,7 +122,7 @@
</div> </div>
<div class="detail-row"> <div class="detail-row">
<span class="detail-label">{{localize "MNBL.soulcost"}} :</span> <span class="detail-label">{{localize "MNBL.soulcost"}} :</span>
<span class="detail-value">{{runeAmeCout}} pts</span> <span class="detail-value">{{rune.system.coutAme}}</span>
</div> </div>
{{/if}} {{/if}}
{{#if bonusRoll}} {{#if bonusRoll}}
+9 -5
View File
@@ -36,8 +36,8 @@
<input type="text" name="system.sante.nbcombativite" value="{{system.sante.nbcombativite}}" data-dtype="Number" /> <input type="text" name="system.sante.nbcombativite" value="{{system.sante.nbcombativite}}" data-dtype="Number" />
</div> </div>
<div class="stat-field"> <div class="stat-field">
<label>Seuil de Pouvoir</label> <label>Seuil de Vigueur</label>
<input type="text" name="system.ame.seuilpouvoir" value="{{system.ame.seuilpouvoir}}" data-dtype="Number" /> <input type="text" name="system.sante.vigueur" value="{{system.sante.vigueur}}" data-dtype="Number" />
</div> </div>
</div> </div>
</div> </div>
@@ -56,6 +56,10 @@
<label>Niveaux</label> <label>Niveaux</label>
<input type="text" name="system.ame.nbame" value="{{system.ame.nbame}}" data-dtype="Number" /> <input type="text" name="system.ame.nbame" value="{{system.ame.nbame}}" data-dtype="Number" />
</div> </div>
<div class="stat-field">
<label>Seuil de Pouvoir</label>
<input type="text" name="system.ame.seuilpouvoir" value="{{system.ame.seuilpouvoir}}" data-dtype="Number" />
</div>
</div> </div>
</div> </div>
@@ -65,15 +69,15 @@
<div class="stat-card-content"> <div class="stat-card-content">
<div class="stat-field"> <div class="stat-field">
<label>Init.</label> <label>Init.</label>
<input type="text" name="system.combat.inittotal" value="{{initiative}}" data-dtype="Number" /> <input type="text" name="system.combat.inittotal" value="{{system.combat.inittotal}}" data-dtype="Number" placeholder="{{initiative}}" />
</div> </div>
<div class="stat-field"> <div class="stat-field">
<label>Déf.</label> <label>Déf.</label>
<input type="text" name="system.combat.defensetotal" value="{{combat.defenseTotal}}" data-dtype="Number" /> <input type="text" name="system.combat.defensetotal" value="{{system.combat.defensetotal}}" data-dtype="Number" placeholder="{{combat.defenseTotal}}" />
</div> </div>
<div class="stat-field"> <div class="stat-field">
<label>Prot.</label> <label>Prot.</label>
<input type="text" name="system.combat.protectiontotal" value="{{protectionTotal}}" data-dtype="Number" /> <input type="text" name="system.combat.protectiontotal" value="{{system.combat.protectiontotal}}" data-dtype="Number" placeholder="{{protectionTotal}}" />
</div> </div>
</div> </div>
</div> </div>
+21
View File
@@ -0,0 +1,21 @@
<section>
{{> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-header.hbs}} {{
> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-nav.hbs}} {{!-- Sheet
Body --}}
<section class="sheet-body">
{{> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-description.hbs}}
<div class="tab details" data-group="primary" data-tab="details">
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="generic-label">Bonus/Malus </label>
</li>
<li class="flexrow item">
<input type="text" class="padd-right status-small-label color-class-common" name="system.bonusmalus"
value="{{system.bonusmalus}}" data-dtype="String" />
</li>
</ul>
</div>
</section>
</section>
@@ -0,0 +1,21 @@
<section>
{{> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-header.hbs}} {{
> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-nav.hbs}} {{!-- Sheet
Body --}}
<section class="sheet-body">
{{> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-description.hbs}}
<div class="tab details" data-group="primary" data-tab="details">
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="generic-label">Bonus/Malus </label>
</li>
<li class="flexrow item">
<input type="text" class="padd-right status-small-label color-class-common" name="system.bonusmalus"
value="{{system.bonusmalus}}" data-dtype="String" />
</li>
</ul>
</div>
</section>
</section>
+2 -2
View File
@@ -62,11 +62,11 @@
>Coût en Pouvoir : >Coût en Pouvoir :
</label> </label>
<input <input
type="number" type="text"
class="padd-right status-small-label color-class-common item-field-label-long2" class="padd-right status-small-label color-class-common item-field-label-long2"
name="system.coutAme" name="system.coutAme"
value="{{system.coutAme}}" value="{{system.coutAme}}"
data-dtype="Number" data-dtype="String"
/> />
</li> </li>
</ul> </ul>
+11 -1
View File
@@ -6,7 +6,17 @@
<section class="sheet-body"> <section class="sheet-body">
{{> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-description.hbs}} {{> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-description.hbs}}
<div class="tab details" data-group="primary" data-tab="details"></div> <div class="tab details" data-group="primary" data-tab="details">
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="generic-label">Bonus/Malus </label>
</li>
<li class="flexrow item">
<input type="text" class="padd-right status-small-label color-class-common" name="system.bonusmalus"
value="{{system.bonusmalus}}" data-dtype="String" />
</li>
</ul>
</div>
</section> </section>
</section> </section>
+21
View File
@@ -0,0 +1,21 @@
<section>
{{> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-header.hbs}} {{
> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-nav.hbs}} {{!-- Sheet
Body --}}
<section class="sheet-body">
{{> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-description.hbs}}
<div class="tab details" data-group="primary" data-tab="details">
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="generic-label">Bonus/Malus </label>
</li>
<li class="flexrow item">
<input type="text" class="padd-right status-small-label color-class-common" name="system.bonusmalus"
value="{{system.bonusmalus}}" data-dtype="String" />
</li>
</ul>
</div>
</section>
</section>
+11 -1
View File
@@ -6,6 +6,16 @@
<section class="sheet-body"> <section class="sheet-body">
{{> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-description.hbs}} {{> systems/fvtt-mournblade-cyd-2-0/templates/partial-item-description.hbs}}
<div class="tab details" data-group="primary" data-tab="details"></div> <div class="tab details" data-group="primary" data-tab="details">
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="generic-label">Bonus/Malus </label>
</li>
<li class="flexrow item">
<input type="text" class="padd-right status-small-label color-class-common" name="system.bonusmalus"
value="{{system.bonusmalus}}" data-dtype="String" />
</li>
</ul>
</div>
</section> </section>
</section> </section>