diff --git a/module/rdd-dice.js b/module/rdd-dice.js
index f4557fbc..873fab56 100644
--- a/module/rdd-dice.js
+++ b/module/rdd-dice.js
@@ -1,10 +1,4 @@
export class RdDDice {
- static async deRencontre() {
- let roll = this.show(new Roll("1d7").evaluate());
- // let roll = this.show(new Roll("1d8r8").evaluate());
- // roll.total = roll.total % 8;
- return roll;
- }
static async deDraconique() {
let roll = new Roll("1d8x8").evaluate();
diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js
index 51635f21..5b0cb86b 100644
--- a/module/rdd-tmr-dialog.js
+++ b/module/rdd-tmr-dialog.js
@@ -111,16 +111,15 @@ export class RdDTMRDialog extends Dialog {
let rolled = RdDResolutionTable.roll(carac, difficulte);
let message = "
Test : Rêve actuel / " + draconic.name + " / " + this.currentRencontre.name + "" + "
"
- + "
Jet : " + carac + " / " + difficulte + " -> " + rolled.score + "%
Résutat : " + rolled.roll;
-
+ + RdDResolutionTable.explain(rolled);
if (rolled.isEchec) {
- TMRUtility.processRencontreEchec(this.actor, this.currentRencontre);
+ TMRUtility.processRencontreEchec(this.actor, this.currentRencontre, rolled);
this._tellToUser("Vous avez échoué à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force
- + "
Vous quittez brutalement les Terres Médianes !" + message);;
+ + "
Vous quittez brutalement les Terres Médianes !" + message);
this.close();
} else {
- TMRUtility.processRencontreReussite(this.actor, this.currentRencontre);
+ TMRUtility.processRencontreReussite(this.actor, this.currentRencontre, rolled);
this._tellToUser("Vous avez réussi à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force + message);
}
console.log("-> matriser", this.currentRencontre);
@@ -142,7 +141,7 @@ export class RdDTMRDialog extends Dialog {
console.log("manageRencontre", deRencontre, rencontre);
if (rencontre == undefined) {
if (deRencontre.total == 7) {
- rencontre = TMRUtility.rencontreTMRRoll(coordTMR, cellDescr);
+ rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr);
}
}
diff --git a/module/rdd-utility.js b/module/rdd-utility.js
index a87341bd..308c03c2 100644
--- a/module/rdd-utility.js
+++ b/module/rdd-utility.js
@@ -2,7 +2,6 @@
import { TMRUtility } from "./tmr-utility.js";
import { RdDRollTables } from "./rdd-rolltables.js";
-import { RdDResolutionTable } from "./rdd-resolution-table.js";
const level_category = {
"generale": "-4",
diff --git a/module/tmr-utility.js b/module/tmr-utility.js
index 24e5abbc..c1099357 100644
--- a/module/tmr-utility.js
+++ b/module/tmr-utility.js
@@ -1,3 +1,5 @@
+import { RdDDice } from "./rdd-dice.js";
+
/* -------------------------------------------- */
const TMRMapping = {
A1: { type: "cite", label: "Cité Vide"},
@@ -233,7 +235,7 @@ const rencontresTable = [
{name:"Tourbillon noir", data: { force: "2d8", ignorer: false, derober: true, refoulement: 1,
cite: "95-97", sanctuaire: "95-97", plaines: "94-97", pont: "94-97", collines: "94-97", forêt: "94-97", monts: "93-97", desert: "93-97", fleuve: "90-97",
lac: "90-97", marais: "87-97", gouffre: "90-97", necropole: "81-97", desolation: "81-97" } },
- {name:"Rêve de Dragon", data: { force: "1d7", ignorer: false, derober: true, refoulement: 2,
+ {name:"Rêve de Dragon", data: { force: "1ddr + 7", ignorer: false, derober: true, refoulement: 2,
cite: "98-00", sanctuaire: "98-00", plaines: "98-00", pont: "98-00", collines: "98-00", forêt: "98-00", monts: "98-00", desert: "98-00", fleuve: "98-00",
lac: "98-00", marais: "98-00", gouffre: "98-00", necropole: "98-00", desolation: "98-00" } }
]
@@ -264,32 +266,80 @@ export class TMRUtility {
}
/* -------------------------------------------- */
- static rencontreTMRRoll( coordTMR, cellDescr )
+ static async rencontreTMRRoll( coordTMR, cellDescr )
{
- let val = new Roll("d100").roll().total;
- //console.log("Rencontre !!!!", val, coordTMR, cellDescr);
-
+ let rencontre = this.rencontreTMRTypeCase(cellDescr.type);
+ if (rencontre){
+ rencontre = duplicate(rencontre);
+ rencontre.force = await this.evaluerForceRencontre(rencontre);
+ rencontre.coord = coordTMR;
+ }
+ return rencontre;
+ }
+
+ static rencontreTMRTypeCase(typeTMR, roll=undefined) {
+ if (!roll)
+ {
+ roll = new Roll("d100").roll().total;
+ }
+ typeTMR = typeTMR.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
for( let rencontre of rencontresTable) {
- let scoreDef = rencontre.data[cellDescr.type];
+ let scoreDef = rencontre.data[typeTMR];
let min = scoreDef.substr(0,2);
let max = scoreDef.substr(3,2);
- //console.log(val, scoreDef, min, max);
- if ( val >= min && val <= max) {
- rencontre.force = new Roll(rencontre.data.force).roll().total;
- rencontre.coord = coordTMR
+ if (max=="00") max = 100;
+ if (roll >= min && roll <= max) {
return rencontre;
}
}
}
+
+ /* -------------------------------------------- */
+ /**
+ * Retourne une recontre en fonction de la case et du tirage
+ * @param {*} caseName
+ * @param {*} roll
+ */
+ static async getRencontre( caseName, roll ) {
+ if (!roll) {
+ roll = new Roll("1d100").roll().total;
+ }
+ if ( !caseName) {
+ ChatMessage.create({ content: "Un nom de case doit être indiqué (ie /tmrr desert ou /tmrr cite)" });
+ return false;
+ }
+
+ let rencontre = this.rencontreTMRTypeCase(caseName, roll);
+ if (rencontre){
+ let force = await this.evaluerForceRencontre(rencontre);
+ ChatMessage.create({ content: "Rencontre en " + caseName + "(jet : " + roll + "%)
Vous rencontrez un " + rencontre.name + " d'une force de " + force + " Points de Rêve" });
+ }
+ return false;
+ }
+
/* -------------------------------------------- */
static getRandomLocationType( coordTMR ) {
let descr = this.getTMRDescription( coordTMR );
// TODO random get same type
-
}
-
+
+ static async evaluerForceRencontre(rencontre) {
+ if (this.isReveDeDragon(rencontre)) {
+ let ddr = await RdDDice.deDraconique();
+ return ddr + 7;
+ }
+ else {
+ const roll = new Roll(rencontre.data.force).evaluate();
+ return roll.total;
+ }
+ }
+
+ static isReveDeDragon(rencontre) {
+ return rencontre.name.toLowerCase() == "Rêve de Dragon".toLowerCase();
+ }
+
/* -------------------------------------------- */
- static async processRencontreReussite( actor, rencontre ) {
+ static async processRencontreReussite( actor, rencontre, rolled ) {
let msg = "Vous avez réussi votre maîtrise ! ";
console.log("processRencontreReussite", actor, rencontre);
if (rencontre.name == "Messagers des Rêves") {
@@ -321,18 +371,18 @@ export class TMRUtility {
msg += "Ce Tourbillon Noir disparait !"
} else if (rencontre.name == "Rêve de Dragon") {
- msg += "Un Rêve de Dragon survient !"
-
+ msg += "Vous maîtrisez le Rêve de Dragon !"
+ msg += actor.appliquerReveDeDragon(rolled, rencontre.force);
}
}
/* -------------------------------------------- */
- static async processRencontreEchec( actor, rencontre ) {
+ static async processRencontreEchec( actor, rencontre, rolled ) {
let msg = "Vous avez échoué à votre maîtrise ! ";
if (rencontre.name == "Messagers des Rêves") {
msg += "Le Messager des Rêves s'éloigne de vous !";
-
+
} else if (rencontre.name == "Passeur des Rêves") {
msg += "Le Passeur des Rêves s'éloigne de vous !";
@@ -342,7 +392,6 @@ export class TMRUtility {
} else if (rencontre.name == "Mangeur de Rêve") {
await actor.updatePointsDeReve( -rencontre.force );
msg += "Ce Mangeur des Rêves croque votre Rêve ! Vous perdez " + rencontre.force + " points de rêve actuels, votre nouveau total est de " + actor.data.data.reve.reve.value;
-
} else if (rencontre.name == "Changeur de Rêve") {
let coordTMR = actor.data.data.reve.tmrpos.coord;
let newcoordTMR = this.getRandomLocationType(coordTMR);
@@ -353,15 +402,16 @@ export class TMRUtility {
} else if (rencontre.name == "Reflet d'ancien Rêve") {
msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
-
+
} else if (rencontre.name == "Tourbillon blanc") {
msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
-
+
} else if (rencontre.name == "Tourbillon noir") {
msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
-
- } else if (rencontre.name == "Rêve de Dragon") {
+ } else if (rencontre.name == "Rêve de Dragon") {
+ msg += "Le Rêve de Dragon tourne au cauchemar !"
+ msg += actor.appliquerReveDeDragon(rolled, rencontre.force);
}
}
@@ -377,36 +427,6 @@ export class TMRUtility {
return result;
}
- /* -------------------------------------------- */
- /**
- * Retourne une recontre en fonction de la case ou du tirage
- * @param {*} caseName
- * @param {*} roll
- */
- static getRencontre( caseName, roll ) {
- if (!roll) {
- roll = new Roll("1d100").roll().total;
- }
- if ( !caseName) {
- ChatMessage.create({ content: "Un nom de case doit être indiqué (ie /tmrr desert ou /tmrr cite)" });
- return false;
- }
- caseName = caseName.toLowerCase();
- caseName = caseName.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
- //console.log("Case : ", caseName);
- for( let renc of rencontresTable) {
- let scoreDef = renc.data[caseName];
- let min = scoreDef.substr(0,2);
- let max = scoreDef.substr(3,2);
- if ( roll >= min && roll <= max) {
- let force = new Roll(renc.data.force).roll().total;
- ChatMessage.create({ content: "Rencontre en " + caseName + "(jet : " + roll + "%)
Vous rencontrez un " + renc.name + " d'une force de " + force + " Points de Rêve" });
- return false;
- }
- }
-
- }
-
/* -------------------------------------------- */
/**
*