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.competencecreature = data.itemsByType["competencecreature"];
data.data.isGM = game.user.isGM; data.data.isGM = game.user.isGM;
data.data.compteurs.ethylisme.nom = RdDUtility.getNomEthylisme(data.data.compteurs.ethylisme.value);
RdDUtility.filterItemsPerTypeForSheet(data ); RdDUtility.filterItemsPerTypeForSheet(data );
RdDUtility.buildArbreDeConteneur( this, data ); RdDUtility.buildArbreDeConteneur( this, data );

View File

@ -202,8 +202,8 @@ export class RdDActor extends Actor {
let message = { let message = {
whisper: ChatUtility.getWhisperRecipientsAndGMs( this.name ), whisper: ChatUtility.getWhisperRecipientsAndGMs( this.name ),
content : "" content : ""
}; };
const blessures = duplicate(this.data.data.blessures); const blessures = duplicate(this.data.data.blessures);
console.log("dormirChateauDormant", blessures) console.log("dormirChateauDormant", blessures)
await this._recupererBlessures(message, "legere", blessures.legeres.liste.filter(b => b.active), []); 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.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("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); await this.santeIncDec("endurance", this.data.data.sante.endurance.max - this.data.data.sante.endurance.value);
if (this.data.data.sante.fatigue){ if (this.data.data.sante.fatigue){
@ -335,12 +337,26 @@ export class RdDActor extends Actor {
}; };
await this.recupereEndurance(message); await this.recupereEndurance(message);
for (let i=0; i<heures; i++) { for (let i=0; i<heures; i++) {
await this._recupererEthylisme(message);
await this.recupererFatigue(message); await this.recupererFatigue(message);
await this.recuperationReve(message); await this.recuperationReve(message);
} }
ChatMessage.create( 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) { async recupereEndurance(message) {
const manquant = this._computeEnduranceMax() - this.data.data.sante.endurance.value; const manquant = this._computeEnduranceMax() - this.data.data.sante.endurance.value;
@ -680,18 +696,15 @@ export class RdDActor extends Actor {
return; return;
} }
// Pour les autres // Pour les autres
let state = 0, surenc = 0; let state = - (data.sante.vie.max - data.sante.vie.value);
state = state - (data.sante.vie.max - data.sante.vie.value);
if (data.sante.fatigue) // Creatures n'ont pas de fatigue 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 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; data.compteurs.etat.value = state;
if ( data.compteurs && data.compteurs.surenc) { if ( data.compteurs && data.compteurs.surenc) {
surenc = -this.detectSurEncombrement(); data.compteurs.surenc.value = - this.detectSurEncombrement();
data.compteurs.surenc.value = surenc;
} }
} }
@ -1063,28 +1076,32 @@ export class RdDActor extends Actor {
let msgText = RdDResolutionTable.explain(rollEthylisme) + "<br>"; let msgText = RdDResolutionTable.explain(rollEthylisme) + "<br>";
if (rollEthylisme.isSuccess ) { if (rollEthylisme.isSuccess ) {
ethylisme.nb_doses = ethylisme.nb_doses + 1; 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 { } else {
ethylisme.value = ethylisme.value - 1; ethylisme.value = Math.max(ethylisme.value -1, -7);
if ( ethylisme.value > 7) ethylisme.value = 7; // Niveau max
let enduranceLost = new Roll("1d6").roll().total; let enduranceLost = new Roll("1d6").roll().total;
await this.santeIncDec("endurance", -enduranceLost); await this.santeIncDec("endurance", -enduranceLost);
msgText += "Vous avez échoué à votre jet d'éthylisme, votre niveau d'éthylisme est de " + ethylisme.value const ajustementEthylique = ethylisme.value;
+ "(" + RdDUtility.getNomEthylisme(ethylisme.value) + ").";
// Qui a bu boira (p 164) // 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>"; msgText += "<br>" + RdDResolutionTable.explain(rollVolonte) + "<br>";
if ( rollVolonte.isSuccess) msgText += "Qui a bu boira : " +(rollVolonte.isSuccess
msgText += "Qui a bu boira : vous êtes libre de continuer à boire ou pas."; ? "vous êtes libre de continuer à boire ou pas."
else : "vous avez une envie irrépréssible de reprendre un verre.");
msgText += "Qui a bu boira : vous avez une envie irrépréssible de reprendre un verre.";
} }
await this.update( { 'data.compteurs.ethylisme': ethylisme} ); await this.update( { 'data.compteurs.ethylisme': ethylisme} );
const message = { const message = {
content: msgText, content: msgText,
whisper: ChatMessage.getWhisperRecipients(game.user.name) whisper: ChatMessage.getWhisperRecipients(game.user.name)
}; };
ChatMessage.create(message); 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 ) { static getNomEthylisme( niveauEthylisme ) {
let index = Math.abs(niveauEthylisme); let index = -niveauEthylisme;
return nomEthylisme[index]; return index <0 ? 'Aucun' : nomEthylisme[index];
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

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