Ame/Ame max
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user