diff --git a/module/actor-sheet.js b/module/actor-sheet.js
index 2c8d182c..8889dde5 100644
--- a/module/actor-sheet.js
+++ b/module/actor-sheet.js
@@ -436,6 +436,10 @@ export class RdDActorSheet extends ActorSheet {
let fieldName = event.currentTarget.attributes.name.value;
this.actor.updateCompteurValue( fieldName, parseInt(event.target.value) );
} );
+
+ html.find('#ethylisme').change((event) => {
+ this.actor.setEthylisme(parseInt(event.target.value) );
+ } );
// Dialog d'archetype
html.find("#affiche-archetype").click((event) => {
diff --git a/module/actor.js b/module/actor.js
index d3e5178f..93c72f41 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -323,8 +323,8 @@ export class RdDActor extends Actor {
}
await this.update( {"data.blessures": blessures } );
}
- await this.update({ "data.compteurs.ethylisme.value": 1 });
- await this.update({ "data.compteurs.ethylisme.nb_doses": 0 });
+ await this.setEthylisme(1);
+
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){
@@ -354,15 +354,16 @@ export class RdDActor extends Actor {
async _recupererEthylisme(message) {
let ethylisme = duplicate(this.data.data.compteurs.ethylisme);
+ ethylisme.nb_doses = 0;
+ ethylisme.jet_moral = false;
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 += `
Vous dégrisez un peu (${RdDUtility.getNomEthylisme(ethylisme.value)})`;
}
}
+ await this.update({ "data.compteurs.ethylisme": ethylisme });
}
/* -------------------------------------------- */
@@ -1025,29 +1026,38 @@ export class RdDActor extends Actor {
async jetDeMoral(situation) {
let jetMoral = new Roll("1d20").roll();
RdDDice.show(jetMoral);
- let compteurs = duplicate(this.data.data.compteurs);
- compteurs.moral.value = Misc.toInt(compteurs.moral.value);
- const difficulte = 10 + compteurs.moral.value;
+ let moralActuel = Misc.toInt(this.data.data.compteurs.moral.value);
+ const difficulte = 10 + moralActuel;
const succes = jetMoral.total <= difficulte;
- let ajustementMoral = this._calculAjustementMoral(succes, compteurs.moral.value, situation);
- if (ajustementMoral != 0) {
- compteurs.moral.value += ajustementMoral;
- if (compteurs.moral.value>3) {
- // exaltation
- compteurs.moral.value --;
- compteurs.exaltation.value = Misc.toInt(compteurs.exaltation.value) + 1;
- }
- if (compteurs.moral.value<-3) {
- // dissolution
- compteurs.moral.value ++;
- compteurs.dissolution.value = Misc.toInt(compteurs.dissolution.value) + 1;
- }
- await this.update( { 'data.compteurs': compteurs} );
- }
+
+ let ajustementMoral = this._calculAjustementMoral(succes, moralActuel, situation);
+
+ await this.moralIncDec(ajustementMoral);
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
content: `Jet de moral ${succes? "réussi": "manqué"} en situation ${situation} (${jetMoral.total}/${difficulte}), vous ${ajustementMoral>0? "gagnez du moral" : ajustementMoral<0? "perdez du moral": "gardez votre moral"}`
});
+ return ajustementMoral;
+ }
+
+ async moralIncDec(ajustementMoral) {
+ let compteurs = duplicate(this.data.data.compteurs);
+ compteurs.moral.value = Misc.toInt(compteurs.moral.value);;
+
+ if (ajustementMoral != 0) {
+ compteurs.moral.value += ajustementMoral;
+ if (compteurs.moral.value > 3) {
+ // exaltation
+ compteurs.moral.value--;
+ compteurs.exaltation.value = Misc.toInt(compteurs.exaltation.value) + 1;
+ }
+ if (compteurs.moral.value < -3) {
+ // dissolution
+ compteurs.moral.value++;
+ compteurs.dissolution.value = Misc.toInt(compteurs.dissolution.value) + 1;
+ }
+ await this.update({ 'data.compteurs': compteurs });
+ }
}
/* -------------------------------------------- */
@@ -1062,13 +1072,22 @@ export class RdDActor extends Actor {
return 0;
}
+ async setEthylisme(degre) {
+ let ethylisme = duplicate(this.data.data.compteurs.ethylisme);
+ ethylisme.value = degre;
+ ethylisme.nb_doses = 0;
+ if (degre == 1) {
+ ethylisme.jet_moral = false;
+ }
+ await this.update({ "data.compteurs.ethylisme": ethylisme});
+ }
+
/* -------------------------------------------- */
async ethylismeTest() {
let rollData = {
vieValue: this.data.data.sante.vie.value,
- etat: this.data.data.compteurs.etat.value - this.data.data.compteurs.etat.value, // Pour les jets d'Ethylisme, on ignore le degré d'éthylisme (p.162)
- niveauEthylisme: this.data.data.compteurs.ethylisme.value,
- nbDoses: this.data.data.compteurs.ethylisme.nb_doses || 0,
+ etat: this.data.data.compteurs.etat.value - Math.min(0, this.data.data.compteurs.ethylisme.value), // Pour les jets d'Ethylisme, on ignore le degré d'éthylisme (p.162)
+ diffNbDoses: -Number(this.data.data.compteurs.ethylisme.nb_doses || 0),
finalLevel: 0,
diffConditions: 0,
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
@@ -1086,11 +1105,12 @@ export class RdDActor extends Actor {
let rollEthylisme = await RdDResolutionTable.roll( rollData.vieValue, rollData.finalLevel);
let msgText = RdDResolutionTable.explain(rollEthylisme) + "
";
if (rollEthylisme.isSuccess ) {
- ethylisme.nb_doses = ethylisme.nb_doses + 1;
+ ethylisme.nb_doses ++;
msgText += `Vous avez réussi votre jet d'éthylisme, vous avez consommé ${ethylisme.nb_doses} doses sans effet.`;
} else {
ethylisme.value = Math.max(ethylisme.value -1, -7);
-
+ ethylisme.nb_doses = 0;
+
let enduranceLost = new Roll("1d6").roll().total;
await this.santeIncDec("endurance", -enduranceLost);
const ajustementEthylique = ethylisme.value;
@@ -1101,25 +1121,42 @@ export class RdDActor extends Actor {
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.");
+ }
+ ChatMessage.create({
+ content: msgText,
+ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
+ });
+
+ if (rollEthylisme.isEchec) {
+ await this._jetDeMoralEthylique(ethylisme);
+ }
+ await this.update( { 'data.compteurs.ethylisme': ethylisme} );
+ }
+
+ /* -------------------------------------------- */
+ async _jetDeMoralEthylique(ethylisme) {
+ if (ethylisme.value >= -1 && !ethylisme.jet_moral) {
+ let adjust = await this.jetDeMoral('heureuse');
+ if (adjust > 0 || ethylisme.value == -1) {
+ ethylisme.jet_moral = true;
}
- await this.update( { 'data.compteurs.ethylisme': ethylisme} );
- const message = {
- content: msgText,
- whisper: ChatMessage.getWhisperRecipients(game.user.name).concat(ChatMessage.getWhisperRecipients("GM") )
- };
- 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é...
+ if (ethylisme.value == -1 && adjust <= 0) {
+ // alcool triste
+ ChatMessage.create({
+ content: "Décidément, vous avez l'alcool triste, vous perdez finalement un point de moral!",
+ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
+ });
+ this.moralIncDec(-1);
}
+ }
}
/* -------------------------------------------- */
async stressTest() {
const message = {
content: "",
- whisper: ChatMessage.getWhisperRecipients(game.user.name).concat(ChatMessage.getWhisperRecipients("GM") )
+ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
};
await this.transformerStress(message);
diff --git a/module/rdd-roll-ethylisme.js b/module/rdd-roll-ethylisme.js
index e0f1ca87..906253ea 100644
--- a/module/rdd-roll-ethylisme.js
+++ b/module/rdd-roll-ethylisme.js
@@ -11,7 +11,7 @@ export class RdDRollDialogEthylisme extends Dialog {
constructor(html, rollData, actor) {
let myButtons = {
- rollButton: { label: "Lancer", callback: html => this.actor.performEthylisme(this.rollData) }
+ rollButton: { label: "Test d'éthylisme", callback: html => this.actor.performEthylisme(this.rollData) }
};
// Common conf
@@ -33,13 +33,13 @@ export class RdDRollDialogEthylisme extends Dialog {
var rollData = this.rollData;
function updateRollResult(rollData) {
- let rollLevel = Number(rollData.etat) + Number(rollData.forceAlcool) + Number(rollData.niveauEthylisme) - Number(rollData.nbDoses);
- rollData.finalLevel = rollLevel;
+
+ rollData.finalLevel = Number(rollData.etat) + Number(rollData.forceAlcool) + rollData.diffNbDoses;
// Mise à jour valeurs
$("#roll-param").text(rollData.vieValue + " / " + Misc.toSignedString(rollData.finalLevel));
$(".table-resolution").remove();
- $("#resolutionTable").append(RdDResolutionTable.buildHTMLTableExtract(rollData.vieValue, rollLevel));
+ $("#resolutionTable").append(RdDResolutionTable.buildHTMLTableExtract(rollData.vieValue, rollData.finalLevel));
}
// Setup everything onload
diff --git a/template.json b/template.json
index 86f7ff96..1b9efb47 100644
--- a/template.json
+++ b/template.json
@@ -501,7 +501,8 @@
"value": 1,
"label": "Ethylisme",
"isInput": true,
- "nb_doses": 0
+ "nb_doses": 0,
+ "jet_moral": "false"
},
"stress": {
"value": 0,
diff --git a/templates/dialog-roll-ethylisme.html b/templates/dialog-roll-ethylisme.html
index 21ddfbe6..baeb1379 100644
--- a/templates/dialog-roll-ethylisme.html
+++ b/templates/dialog-roll-ethylisme.html
@@ -1,11 +1,11 @@