From 1afce56348054e79986a3089facfc27621854f70 Mon Sep 17 00:00:00 2001 From: sladecraven Date: Sun, 6 Dec 2020 21:11:30 +0100 Subject: [PATCH] =?UTF-8?q?#63=20Jet=20d'=C3=A9thylisme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/actor.js | 43 ++++++++++++++++++++++++---------- module/rdd-resolution-table.js | 1 + module/rdd-utility.js | 14 +++++++---- templates/actor-sheet.html | 2 +- 4 files changed, 43 insertions(+), 17 deletions(-) diff --git a/module/actor.js b/module/actor.js index 9368dc2b..6079c2a5 100644 --- a/module/actor.js +++ b/module/actor.js @@ -909,6 +909,8 @@ export class RdDActor extends Actor { state = 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); + if (data.compteurs && data.compteurs.ethylisme) // Ajout de l'éthylisme + state = state + data.compteurs.ethylisme.value; state = state; surenc = -this.detectSurEncombrement(); data.compteurs.etat.value = state; @@ -1197,7 +1199,7 @@ export class RdDActor extends Actor { async ethylismeTest() { let rollData = { vieValue: this.data.data.sante.vie.value, - etat: this.data.data.compteurs.etat.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, finalLevel: 0, @@ -1208,26 +1210,38 @@ export class RdDActor extends Actor { let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-ethylisme.html', rollData); new RdDRollDialogEthylisme(html, rollData, this ).render(true); } - + /* -------------------------------------------- */ async performEthylisme( rollData ) { let ethylisme = duplicate(this.data.data.compteurs.ethylisme); - let roll = await RdDResolutionTable.roll( rollData.vieValue, rollData.finalLevel); - let msgText; - if (roll.isSuccess ) { - ethylisme.value = ethylisme.value - 1; - msgText = "Vous avez échouez à votre jet d'éthylisme, votre niveau d'éthylisme est de " + ethylisme.value - + "(" + RdDUtility.getNomEthylisme(ethylisme.value) + ")"; - } else { + + // Je d'ethylisme + let rollEthylisme = await RdDResolutionTable.roll( rollData.vieValue, rollData.finalLevel); + let msgText = RdDResolutionTable.explain(rollEthylisme) + "
"; + if (rollEthylisme.isSuccess ) { ethylisme.nb_doses = ethylisme.nb_doses + 1; - msgText = "Vous avez réussitvotre jet d'éthylisme, votre vous avez désormais " + ethylisme.nb_doses + " doses sans effet."; + msgText += "Vous avez réussi votre jet d'éthylisme, votre vous avez désormais " + ethylisme.nb_doses + " doses sans effet."; + } else { + ethylisme.value = ethylisme.value - 1; + if ( ethylisme.value > 7) ethylisme.value = 7; // Niveau max + 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) + ")."; + // Qui a bu boira (p 164) + let rollVolonte = await RdDResolutionTable.roll( this.data.data.carac.volonte.value, -ethylisme.value); + 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); - + ChatMessage.create(message); } /* -------------------------------------------- */ @@ -1338,6 +1352,7 @@ export class RdDActor extends Actor { new RdDRollDialog("carac", html, rollData, this ).render(true); } + /* -------------------------------------------- */ async appelChance( ) { let rollData = { @@ -1360,6 +1375,7 @@ export class RdDActor extends Actor { dialog.render(true); } + /* -------------------------------------------- */ _appelChanceResultat(rollData) { const message = { user: game.user._id, @@ -1373,17 +1389,20 @@ export class RdDActor extends Actor { ChatMessage.create(message); } + /* -------------------------------------------- */ async chanceActuelleIncDec(value) { let chance = duplicate(this.data.data.compteurs.chance); chance.value = Math.max(chance.value + value, 0); await this.update( {"data.compteurs.chance": chance } ); } + /* -------------------------------------------- */ ajustementAstrologique() { //TODO: selon heure et heure de naissance... return 0; } + /* -------------------------------------------- */ getCaracByName(caracName) { switch (caracName) { diff --git a/module/rdd-resolution-table.js b/module/rdd-resolution-table.js index 13ec0e76..9cc24b10 100644 --- a/module/rdd-resolution-table.js +++ b/module/rdd-resolution-table.js @@ -97,6 +97,7 @@ export class RdDResolutionTable { } } + /* -------------------------------------------- */ static async rollData(rollData ) { rollData.rolled = await this.roll(rollData.caracValue, rollData.finalLevel, rollData.bonus); return rollData; diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 89a71d77..2273ce66 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -86,7 +86,9 @@ const fatigueMarche = { "aise": { "4":1, "6":2, "8":3, "10":4, "12":6 }, "malaise": { "4":2, "6":3, "8":4, "10":6 }, "difficile": { "4":3, "6":4, "8":6 }, "tresdifficile": { "4":4, "6":6 } } -/* Static tables for commands /table */ + +/* -------------------------------------------- */ + /* Static tables for commands /table */ const table2func = { "queues": {descr: "queues : Tire une queue de Dragon", func: RdDRollTables.getQueue}, "ombre": { descr: "ombre: Tire une Ombre de Dragon", func: RdDRollTables.getOmbre }, "tetehr": {descr: "tetehr: Tire une Tête de Dragon pour Hauts Revants", fund: RdDRollTables.getTeteHR}, @@ -101,6 +103,9 @@ const definitionsBlessures = [ { type: "critique", facteur : 6 } ] +/* -------------------------------------------- */ +const nomEthylisme = [ "Emeché", "Gris", "Pinté", "Pas frais", "Ivre", "Bu", "Complètement fait", "Ivre mort"]; + /* -------------------------------------------- */ const definitionsEncaissement = { "mortel": [ @@ -191,10 +196,11 @@ export class RdDUtility { } /* -------------------------------------------- */ - getNomEthylisme( niveauEthylisme ) { - + static getNomEthylisme( niveauEthylisme ) { + let index = Math.abs(niveauEthylisme); + return nomEthylisme[index]; } - + /* -------------------------------------------- */ static initAfficheContenu( actorId ) { // persistent handling of conteneur show/hide if ( !this.afficheContenu ) diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index 859888b1..4d3889df 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -144,7 +144,7 @@ {{#if compteur.isStress}} Transformer {{else}} - {{#if eq compteur.label 'Ethylisme'}} + {{#if (eq compteur.label 'Ethylisme')}} Jet d'Ethylisme {{else}}