forked from public/foundryvtt-reve-de-dragon
Sonné est un StatusEffect
This commit is contained in:
@ -428,7 +428,7 @@ export class RdDActor extends Actor {
|
||||
if (niveauSurprise > 1) {
|
||||
return 'totale';
|
||||
}
|
||||
if (niveauSurprise == 1 || this.getSonne()) {
|
||||
if (niveauSurprise == 1) {
|
||||
return 'demi';
|
||||
}
|
||||
return '';
|
||||
@ -1509,28 +1509,30 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getSonneRound() {
|
||||
return Misc.templateData(this).sante.sonne?.round ?? -1;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async verifierSonneRound(round) {
|
||||
if (this.getSonne()) {
|
||||
if (round > this.getSonneRound() + 1) {
|
||||
await this.setSonne(false, -1); // Nettoyer l'état sonné
|
||||
ChatMessage.create({ content: `${this.name} n'est plus sonné ce round !` });
|
||||
async finDeRound(options = {terminer:false}) {
|
||||
for (let effect of this.getActiveEffects()) {
|
||||
if (effect.duration.type !== 'none' && (effect.duration.remaining <= 0 || options.terminer)) {
|
||||
if (effect.data.origin) {
|
||||
await effect.update({ 'disabled': true });
|
||||
}
|
||||
else {
|
||||
await effect.delete();
|
||||
}
|
||||
ChatMessage.create({ content: `${this.name} n'est plus ${Misc.lowerFirst(game.i18n.localize(effect.data.label))} !` });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async setSonne(sonne = true) {
|
||||
if (!game.combat || this.isEntiteCauchemar()) {
|
||||
if (this.isEntiteCauchemar()) {
|
||||
return;
|
||||
}
|
||||
await this.setStatusEffect("EFFECT.StatusStunned", sonne, {
|
||||
duration: (sonne && game.combat) ? { rounds: 2 } : undefined
|
||||
});
|
||||
if (!game.combat && sonne){
|
||||
ui.notifications.info("Le personnage est hors combat, il ne reste donc pas sonné");
|
||||
return;
|
||||
}
|
||||
await this.setStatusEffect("EFFECT.StatusStunned", sonne);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -1557,12 +1559,11 @@ export class RdDActor extends Actor {
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async testSiSonne(sante, endurance) {
|
||||
async testSiSonne(endurance) {
|
||||
const result = await this._jetEndurance(endurance);
|
||||
if (result.roll.total == 1) {
|
||||
ChatMessage.create({ content: await this._gainXpConstitutionJetEndurance() });
|
||||
}
|
||||
sante.sonne.value ||= result.sonne;
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -1631,7 +1632,7 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async santeIncDec(name, inc, options = { isCritique: false, ethylisme: false }) {
|
||||
async santeIncDec(name, inc, isCritique = false) {
|
||||
if (name == 'fatigue' && !ReglesOptionelles.isUsing("appliquer-fatigue")) {
|
||||
return;
|
||||
}
|
||||
@ -1650,7 +1651,7 @@ export class RdDActor extends Actor {
|
||||
//console.log("New value ", inc, minValue, result.newValue);
|
||||
let fatigue = 0;
|
||||
if (name == "endurance" && !this.isEntiteCauchemar()) {
|
||||
if (result.newValue == 0 && inc < 0 && !options.isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie
|
||||
if (result.newValue == 0 && inc < 0 && !isCritique) { // perte endurance et endurance devient 0 (sauf critique) -> -1 vie
|
||||
sante.vie.value--;
|
||||
result.perteVie = true;
|
||||
}
|
||||
@ -1660,14 +1661,13 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
const perte = compteur.value - result.newValue;
|
||||
result.perte = perte;
|
||||
if (perte > 1 && !options.ethylisme) {
|
||||
if (perte > 1) {
|
||||
// Peut-être sonné si 2 points d'endurance perdus d'un coup
|
||||
const testIsSonne = await this.testSiSonne(sante, result.newValue);
|
||||
const testIsSonne = await this.testSiSonne(result.newValue);
|
||||
result.sonne = testIsSonne.sonne;
|
||||
result.jetEndurance = testIsSonne.roll.total;
|
||||
} else if (inc > 0) {
|
||||
await this.setSonne(false);
|
||||
sante.sonne.value = false;
|
||||
}
|
||||
if (sante.fatigue && inc < 0) { // Each endurance lost -> fatigue lost
|
||||
fatigue = perte;
|
||||
@ -1934,7 +1934,7 @@ export class RdDActor extends Actor {
|
||||
ethylisme.nb_doses = 0;
|
||||
|
||||
let perte = await RdDDice.rollTotal("1d6", { showDice: true });
|
||||
ethylismeData.perteEndurance = await this.santeIncDec("endurance", -perte, { ethylisme: true });
|
||||
ethylismeData.perteEndurance = await this.santeIncDec("endurance", -perte);
|
||||
|
||||
if (!ethylisme.jet_moral) {
|
||||
ethylismeData.jetMoral = await this._jetMoral('heureuse');
|
||||
@ -3229,7 +3229,7 @@ export class RdDActor extends Actor {
|
||||
const perteVie = this.isEntiteCauchemar()
|
||||
? { newValue: 0 }
|
||||
: await this.santeIncDec("vie", - encaissement.vie);
|
||||
const perteEndurance = await this.santeIncDec("endurance", -encaissement.endurance, { critiques: encaissement.critiques > 0 });
|
||||
const perteEndurance = await this.santeIncDec("endurance", -encaissement.endurance, encaissement.critiques > 0);
|
||||
|
||||
this.computeEtatGeneral();
|
||||
|
||||
|
Reference in New Issue
Block a user