Ame/Ame max

This commit is contained in:
2025-10-26 08:49:38 +01:00
parent cddc4ce48a
commit 2dc7665a25
72 changed files with 376 additions and 257 deletions

View File

@@ -281,6 +281,12 @@ export class MournbladeCYD2Actor extends Actor {
if (vigueur != this.system.sante.vigueur) {
this.update({ 'system.sante.vigueur': vigueur })
}
let seuilPouvoirBonus = this.getSeuilPouvoirBonus()
let seuilPouvoir = Math.floor((this.system.attributs.tre.value + this.system.attributs.cla.value) / 2) + seuilPouvoirBonus + this.system.ame.seuilpouvoirmodifier
if (seuilPouvoir != this.system.ame.seuilpouvoir) {
this.update({ 'system.ame.seuilpouvoir': seuilPouvoir })
}
}
super.prepareDerivedData()
}
@@ -292,6 +298,26 @@ export class MournbladeCYD2Actor extends Actor {
this.processCombativite(changed.system.sante)
}, 800)
}
if (changed?.system?.ame?.etat && changed?.system?.ame?.etat != this.system.ame.etat) {
// L'état d'Âme ne peut pas être inférieur au minimum (max dans le système)
let minAme = this.system.ame.max !== undefined ? this.system.ame.max : 0
if (changed.system.ame.etat < minAme) {
changed.system.ame.etat = minAme
}
// L'état d'Âme ne peut pas dépasser nbame (Brisé)
if (changed.system.ame.etat > this.system.ame.nbame) {
changed.system.ame.etat = this.system.ame.nbame
}
setTimeout(() => {
this.processAme(changed.system.ame)
}, 800)
}
// Si le max d'Âme change, ajuster l'état actuel si nécessaire
if (changed?.system?.ame?.max !== undefined && changed.system.ame.max != this.system.ame.max) {
if (this.system.ame.etat < changed.system.ame.max) {
changed.system.ame.etat = changed.system.ame.max
}
}
super._preUpdate(changed, options, user);
}
@@ -392,6 +418,31 @@ export class MournbladeCYD2Actor extends Actor {
return bonus
}
/* -------------------------------------------- */
getSeuilPouvoir() {
return this.system.ame.seuilpouvoir
}
/* -------------------------------------------- */
getSeuilPouvoirBonus() {
let talents = this.items.filter(item => item.type == "talent" && item.system.isautomated)
let bonus = 0
for (let talent of talents) {
for (let auto of talent.system.automations) {
if (auto.eventtype == "bonus-permanent" && auto.bonusname == "seuilpouvoir") {
bonus += Number(auto.bonus || 0)
}
}
}
return bonus
}
/* -------------------------------------------- */
getAmeMax() {
// Utiliser une vérification stricte car 0 (Serein) est une valeur valide
return this.system.ame.max !== undefined ? this.system.ame.max : this.system.ame.nbame
}
/* -------------------------------------------- */
getBonneAventure() {
return this.system.bonneaventure.actuelle
@@ -456,6 +507,24 @@ export class MournbladeCYD2Actor extends Actor {
// Duplicated ! this.processCombativite(sante)
}
/* -------------------------------------------- */
changeEtatAme(value) {
if (value === "brise") {
value = 200
}
let ame = foundry.utils.duplicate(this.system.ame)
ame.etat += Number(value)
// L'état ne peut pas être inférieur au minimum (max dans le système)
let minAme = this.system.ame.max !== undefined ? this.system.ame.max : 0
ame.etat = Math.max(ame.etat, minAme)
// L'état ne peut pas dépasser nbame (Brisé)
ame.etat = Math.min(ame.etat, this.system.ame.nbame)
this.update({ 'system.ame': ame })
if (ame.etat >= this.system.ame.nbame) {
ChatMessage.create({ content: `<strong>${this.name} est brisé !</strong>` })
}
}
/* -------------------------------------------- */
processCombativite(sante) {
sante = sante || foundry.utils.duplicate(this.system.sante)
@@ -472,6 +541,23 @@ export class MournbladeCYD2Actor extends Actor {
}
}
/* -------------------------------------------- */
processAme(ame) {
ame = ame || foundry.utils.duplicate(this.system.ame)
let traumatiseValue = this.system.ame.nbame - 2
let tresTraumatiseValue = this.system.ame.nbame - 1
let briseValue = this.system.ame.nbame
// Gestion des états Traumatisé, Très Traumatisé et Brisé
if (ame.etat == traumatiseValue) {
ChatMessage.create({ content: `<strong>${this.name} est Traumatisé !</strong>` })
} else if (ame.etat == tresTraumatiseValue) {
ChatMessage.create({ content: `<strong>${this.name} est Très Traumatisé !</strong>` })
} else if (ame.etat >= briseValue) {
ChatMessage.create({ content: `<strong>${this.name} est Brisé !</strong>` })
}
}
/* -------------------------------------------- */
async equipGear(equipmentId) {
let item = this.items.find(item => item.id == equipmentId);