diff --git a/module/actor-humanoide-sheet.js b/module/actor-humanoide-sheet.js index a7360cf9..aee867bd 100644 --- a/module/actor-humanoide-sheet.js +++ b/module/actor-humanoide-sheet.js @@ -46,6 +46,7 @@ export class RdDActorHumanoideSheet extends ActorSheet { data.data.competencecreature = data.itemsByType["competencecreature"]; data.data.isGM = game.user.isGM; + data.data.compteurs.ethylisme.nom = RdDUtility.getNomEthylisme(data.data.compteurs.ethylisme.value); RdDUtility.filterItemsPerTypeForSheet(data ); RdDUtility.buildArbreDeConteneur( this, data ); diff --git a/module/actor.js b/module/actor.js index 356a0049..8102b7fa 100644 --- a/module/actor.js +++ b/module/actor.js @@ -202,8 +202,8 @@ export class RdDActor extends Actor { let message = { whisper: ChatUtility.getWhisperRecipientsAndGMs( this.name ), content : "" - }; + const blessures = duplicate(this.data.data.blessures); console.log("dormirChateauDormant", blessures) await this._recupererBlessures(message, "legere", blessures.legeres.liste.filter(b => b.active), []); @@ -316,6 +316,8 @@ export class RdDActor extends Actor { } await this.update( {"data.blessures": blessures } ); } + await this.update({ "data.compteurs.ethylisme.value": 0 }); + await this.update({ "data.compteurs.ethylisme.nb_doses": 0 }); await this.santeIncDec("vie", this.data.data.sante.vie.max - this.data.data.sante.vie.value); await this.santeIncDec("endurance", this.data.data.sante.endurance.max - this.data.data.sante.endurance.value); if (this.data.data.sante.fatigue){ @@ -335,12 +337,26 @@ export class RdDActor extends Actor { }; await this.recupereEndurance(message); for (let i=0; iVous dégrisez un peu (${RdDUtility.getNomEthylisme(ethylisme.value)})`; + } + } + } + /* -------------------------------------------- */ async recupereEndurance(message) { const manquant = this._computeEnduranceMax() - this.data.data.sante.endurance.value; @@ -680,18 +696,15 @@ export class RdDActor extends Actor { return; } // Pour les autres - let state = 0, surenc = 0; - state = state - (data.sante.vie.max - data.sante.vie.value); + let state = - (data.sante.vie.max - data.sante.vie.value); if (data.sante.fatigue) // Creatures n'ont pas de fatigue - state = state + RdDUtility.currentFatigueMalus(data.sante.fatigue.value, data.sante.endurance.max); + state += RdDUtility.currentFatigueMalus(data.sante.fatigue.value, data.sante.endurance.max); if (data.compteurs && data.compteurs.ethylisme && data.compteurs.ethylisme.value < 0 ) { // Ajout de l'éthylisme - state = state + data.compteurs.ethylisme.value; + state += data.compteurs.ethylisme.value; } - state = state; data.compteurs.etat.value = state; if ( data.compteurs && data.compteurs.surenc) { - surenc = -this.detectSurEncombrement(); - data.compteurs.surenc.value = surenc; + data.compteurs.surenc.value = - this.detectSurEncombrement(); } } @@ -1063,28 +1076,32 @@ export class RdDActor extends Actor { let msgText = RdDResolutionTable.explain(rollEthylisme) + "
"; if (rollEthylisme.isSuccess ) { ethylisme.nb_doses = ethylisme.nb_doses + 1; - msgText += "Vous avez réussi votre jet d'éthylisme, votre vous avez désormais " + ethylisme.nb_doses + " doses sans effet."; + msgText += `Vous avez réussi votre jet d'éthylisme, vous avez consommé ${ethylisme.nb_doses} doses sans effet.`; } else { - ethylisme.value = ethylisme.value - 1; - if ( ethylisme.value > 7) ethylisme.value = 7; // Niveau max + ethylisme.value = Math.max(ethylisme.value -1, -7); + let enduranceLost = new Roll("1d6").roll().total; await this.santeIncDec("endurance", -enduranceLost); - msgText += "Vous avez échoué à votre jet d'éthylisme, votre niveau d'éthylisme est de " + ethylisme.value - + "(" + RdDUtility.getNomEthylisme(ethylisme.value) + ")."; + const ajustementEthylique = ethylisme.value; // Qui a bu boira (p 164) - let rollVolonte = await RdDResolutionTable.roll( this.data.data.carac.volonte.value, -ethylisme.value); + let rollVolonte = await RdDResolutionTable.roll( this.data.data.carac.volonte.value, Math.min(ajustementEthylique, 0) + this.data.data.compteurs.moral.value); + msgText += `Vous avez échoué à votre jet d'éthylisme, vous êtes maintenant ${RdDUtility.getNomEthylisme(ajustementEthylique)} (${ajustementEthylique}).` msgText += "
" + RdDResolutionTable.explain(rollVolonte) + "
"; - if ( rollVolonte.isSuccess) - msgText += "Qui a bu boira : vous êtes libre de continuer à boire ou pas."; - else - msgText += "Qui a bu boira : vous avez une envie irrépréssible de reprendre un verre."; - } - await this.update( { 'data.compteurs.ethylisme': ethylisme} ); - const message = { - content: msgText, - whisper: ChatMessage.getWhisperRecipients(game.user.name) - }; - ChatMessage.create(message); + msgText += "Qui a bu boira : " +(rollVolonte.isSuccess + ? "vous êtes libre de continuer à boire ou pas." + : "vous avez une envie irrépréssible de reprendre un verre."); + + } + await this.update( { 'data.compteurs.ethylisme': ethylisme} ); + const message = { + content: msgText, + whisper: ChatMessage.getWhisperRecipients(game.user.name) + }; + ChatMessage.create(message); + + if (rollEthylisme.isEchec && ethylisme.value == 0) { + await this.jetDeMoral('heureuse'); // note: en, théorie, un deuxième jet de moral peut avoir lieu le même jour si lme premier est manqué, qui fait perdre du moral si raté... + } } /* -------------------------------------------- */ diff --git a/module/rdd-utility.js b/module/rdd-utility.js index b6aeb54f..18a1e430 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -203,8 +203,8 @@ export class RdDUtility { /* -------------------------------------------- */ static getNomEthylisme( niveauEthylisme ) { - let index = Math.abs(niveauEthylisme); - return nomEthylisme[index]; + let index = -niveauEthylisme; + return index <0 ? 'Aucun' : nomEthylisme[index]; } /* -------------------------------------------- */ diff --git a/templates/niveau-ethylisme.html b/templates/niveau-ethylisme.html index 9a1efcbd..0e187a02 100644 --- a/templates/niveau-ethylisme.html +++ b/templates/niveau-ethylisme.html @@ -1,9 +1,9 @@ - - - - - - - - + + + + + + + +