Moral sur éthylisme

This commit is contained in:
Vincent Vandemeulebrouck 2020-12-19 01:14:02 +01:00
parent 6f22c4ab18
commit df7d39f38e
4 changed files with 53 additions and 35 deletions

View File

@ -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 );

View File

@ -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; i<heures; i++) {
await this._recupererEthylisme(message);
await this.recupererFatigue(message);
await this.recuperationReve(message);
}
ChatMessage.create( message );
}
async _recupererEthylisme(message) {
let ethylisme = duplicate(this.data.data.compteurs.ethylisme);
if (ethylisme.value < 1)
{
ethylisme.value = Math.min(ethylisme.value + 1, 1);
ethylisme.nb_doses = 0;
await this.update({ "data.compteurs.ethylisme": ethylisme });
if (ethylisme.value <= 0) {
message.content += `<br>Vous 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,21 +1076,21 @@ export class RdDActor extends Actor {
let msgText = RdDResolutionTable.explain(rollEthylisme) + "<br>";
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 += "<br>" + RdDResolutionTable.explain(rollVolonte) + "<br>";
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.";
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 = {
@ -1085,6 +1098,10 @@ export class RdDActor extends Actor {
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é...
}
}
/* -------------------------------------------- */

View File

@ -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];
}
/* -------------------------------------------- */

View File

@ -1,9 +1,9 @@
<option value="1">Aucun</option>
<option value="0">Eméché</option>
<option value="-1">Gris</option>
<option value="-2">Pinté</option>
<option value="-3">Pas Frais</option>
<option value="-4">Ivre</option>
<option value="-5">Bu</option>
<option value="-6">Complètement fait</option>
<option value="-7">Ivre mort</option>
<option value="0">Eméché (0)</option>
<option value="-1">Gris (-1)</option>
<option value="-2">Pinté (-2)</option>
<option value="-3">Pas Frais (-3)</option>
<option value="-4">Ivre (-4)</option>
<option value="-5">Bu (-5)</option>
<option value="-6">Complètement fait (-6)</option>
<option value="-7">Ivre mort (-7)</option>