From 6c9d03be92c0bf0c8ae786dcc75bd205265b1882 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Fri, 3 Nov 2023 20:23:35 +0100 Subject: [PATCH] =?UTF-8?q?R=C3=A9cup=C3=A9ration=20de=20r=C3=AAve=20optio?= =?UTF-8?q?nnelle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog.md | 1 + module/actor.js | 11 +++++++++- module/settings/regles-optionnelles.js | 1 + module/tmr/effets-rencontres.js | 28 +++++++++++++++++--------- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/changelog.md b/changelog.md index 49907161..0d2488df 100644 --- a/changelog.md +++ b/changelog.md @@ -4,6 +4,7 @@ - La transformation de stress à Château Dormant - La récuperation de chance à Château Dormant - La récupération d'éthylisme + - La récupération de rêve (y compris fleurs de rêve et Rêves de Dragon: la rencontre a lieu, mais ne donne pas de rêve) - Séparation des véhicules dans leur propre acteur ## v11.0.28 - les fractures de Khrachtchoum diff --git a/module/actor.js b/module/actor.js index e09f451d..e0b43328 100644 --- a/module/actor.js +++ b/module/actor.js @@ -700,11 +700,20 @@ export class RdDActor extends RdDBaseActor { jetsReve.push(-1); return 'eveil'; } + else { + if (!ReglesOptionnelles.isUsing("recuperation-reve")) { + ChatMessage.create({ + whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name), + content: `Pas de récupération de rêve (${reve} points ignorés)` + }); + jetsReve.push(0); + } else { await this.reveActuelIncDec(reve); jetsReve.push(reve); } } + } return 'dort'; } @@ -1353,7 +1362,7 @@ export class RdDActor extends RdDBaseActor { /* -------------------------------------------- */ async reveActuelIncDec(value) { - let reve = Math.max(this.system.reve.reve.value + value, 0); + const reve = Math.max(this.system.reve.reve.value + value, 0); await this.update({ "system.reve.reve.value": reve }); } diff --git a/module/settings/regles-optionnelles.js b/module/settings/regles-optionnelles.js index 0a608cab..49c148eb 100644 --- a/module/settings/regles-optionnelles.js +++ b/module/settings/regles-optionnelles.js @@ -7,6 +7,7 @@ const listeReglesOptionnelles = [ { group: 'Récupération', name: 'transformation-stress', descr: "Transformer le stress durant Château Dormant"}, { group: 'Récupération', name: 'recuperation-chance', descr: "Récupérer la chance durant Château Dormant"}, { group: 'Récupération', name: 'recuperation-ethylisme', descr: "Récupérer l'éthylisme"}, + { group: 'Récupération', name: 'recuperation-reve', descr: "Récupérer le rêve pendant la nuit (les jets sont toujours faits pour les Rêves de Dragons)"}, { group: 'Règles de combat', name: 'recul', descr: "Appliquer le recul en cas de particulière en force ou de charge" }, { group: 'Règles de combat', name: 'resistanceArmeParade', descr: "Faire le jet de résistance des armes lors de parades pouvant les endommager" }, diff --git a/module/tmr/effets-rencontres.js b/module/tmr/effets-rencontres.js index ec507768..72db974e 100644 --- a/module/tmr/effets-rencontres.js +++ b/module/tmr/effets-rencontres.js @@ -2,6 +2,7 @@ import { ExperienceLog, XP_TOPIC } from "../actor/experience-log.js"; import { ChatUtility } from "../chat-utility.js"; import { Poetique } from "../poetique.js"; import { RdDDice } from "../rdd-dice.js"; +import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"; import { TMRUtility } from "../tmr-utility.js"; export class EffetsRencontre { @@ -9,7 +10,7 @@ export class EffetsRencontre { static messager = async (dialog, context) => { dialog.setRencontreState('messager', TMRUtility.getTMRPortee(context.tmr.coord, context.rencontre.system.force)); } - + static passeur = async (dialog, context) => { dialog.setRencontreState('passeur', TMRUtility.getTMRPortee(context.tmr.coord, context.rencontre.system.force)); } @@ -26,16 +27,25 @@ export class EffetsRencontre { static reve_plus_1 = async (dialog, context) => { await EffetsRencontre.$reve_plus(context.actor, 1) } static reve_moins_force = async (dialog, context) => { await EffetsRencontre.$reve_plus(context.actor, -context.rencontre.system.force) } static reve_moins_1 = async (dialog, context) => { await EffetsRencontre.$reve_plus(context.actor, -1) } - static $reve_plus = async (actor, valeur) => { await actor.reveActuelIncDec(valeur) } + static $reve_plus = async (actor, reve) => { + if (!ReglesOptionnelles.isUsing("recuperation-reve") && reve < 0) { + ChatMessage.create({ + whisper: ChatUtility.getWhisperRecipientsAndGMs(actor.name), + content: `Pas de récupération de rêve (${reve} points ignorés)` + }); + return + } + await actor.reveActuelIncDec(reve) + } static vie_moins_1 = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, -1) } static vie_moins_force = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, -context.rencontre.system.force) } static $vie_plus = async (actor, valeur) => { await actor.santeIncDec("vie", valeur) } - + static moral_plus_1 = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, 1) } static moral_moins_1 = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, -1) } static $moral_plus = async (actor, valeur) => { await actor.moralIncDec(valeur) } - + static end_moins_1 = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, -1) } static end_moins_force = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, -context.rencontre.system.force) } static $end_plus = async (actor, valeur) => { await actor.santeIncDec("endurance", valeur) } @@ -50,8 +60,8 @@ export class EffetsRencontre { const perte = context.rolled.isETotal ? context.rencontre.system.force : 1; await context.actor.chanceActuelleIncDec("fatigue", -perte); } - - static xp_sort_force = async (dialog, context) => { + + static xp_sort_force = async (dialog, context) => { let competence = context.competence; if (competence) { const fromXpSort = Number(competence.system.xp_sort); @@ -60,7 +70,7 @@ export class EffetsRencontre { await ExperienceLog.add(this, XP_TOPIC.XPSORT, fromXpSort, toXpSort, `${competence.name} - ${context.rencontre.name} en TMR`); } } - + static stress_plus_1 = async (dialog, context) => { await context.actor.addCompteurValue('stress', 1, `Rencontre d'un ${context.rencontre.name} en TMR`); } @@ -75,7 +85,7 @@ export class EffetsRencontre { static demireve_rompu = async (dialog, context) => { dialog.close() - } + } static sort_aleatoire = async (dialog, context) => { context.sortReserve = await RdDDice.rollOneOf(context.actor.itemTypes['sortreserve']); @@ -128,7 +138,7 @@ export class EffetsRencontre { static regain_seuil = async (dialog, context) => { await context.actor.regainPointDeSeuil() - } + } static async $reinsertion(dialog, actor, filter) { const newTMR = await TMRUtility.getTMRAleatoire(filter);