From 218f38e04461484649369c09c0278651ce7c7763 Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck <vincent.vandemeulebrouck@itiviti.com>
Date: Sat, 20 Mar 2021 00:09:29 +0100
Subject: [PATCH] =?UTF-8?q?Cleanup:=20r=C3=A9duction=20de=20duplicates?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 module/actor.js            | 213 ++++++++++++++++---------------------
 module/rdd-carac.js        |   1 -
 module/rdd-tmr-dialog.js   |  24 +++--
 module/tmr-utility.js      |   2 +-
 templates/actor-sheet.html |   1 -
 5 files changed, 104 insertions(+), 137 deletions(-)

diff --git a/module/actor.js b/module/actor.js
index c78b6419..68bf750e 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -266,7 +266,7 @@ export class RdDActor extends Actor {
   getBestDraconic() {
     const list = this.getDraconicList().sort((a, b) => b.data.niveau - a.data.niveau);
     if (list.length == 0) {
-      return { name: "none", data: { niveau: -11 } };
+      return { name: "Aucun", data: { niveau: -11 } };
     }
     return duplicate(list[0]);
   }
@@ -309,27 +309,30 @@ export class RdDActor extends Actor {
     };
 
     const blessures = duplicate(this.data.data.blessures);
-    console.log("dormirChateauDormant", blessures)
     await this._recupererBlessures(message, "legere", blessures.legeres.liste.filter(b => b.active), []);
     await this._recupererBlessures(message, "grave", blessures.graves.liste.filter(b => b.active), blessures.legeres.liste);
     await this._recupererBlessures(message, "critique", blessures.critiques.liste.filter(b => b.active), blessures.graves.liste);
     await this.update({ "data.blessures": blessures });
     await this._recupererVie(message);
     await this.jetDeMoral('neutre');
-
-    // On ne récupère un point de chance que si aucun appel à la chance dans la journée
-    let utilisationChance = duplicate(this.getFlag('foundryvtt-reve-de-dragon', 'utilisationChance') ?? false);
-    if (!utilisationChance) {
-      await this.chanceActuelleIncDec(1);
-    }
-    await this.unsetFlag('foundryvtt-reve-de-dragon', 'utilisationChance'); // Nouveau jour, suppression du flag
-
-    this.transformerStress();
+    await this._recupereChance();
+    await this.transformerStress();
     await this.retourSeuilDeReve(message);
     message.content = `A la fin Chateau Dormant, ${message.content}<br>Un nouveau jour se lève`;
     ChatMessage.create(message);
   }
 
+  async _recupereChance() {
+    // On ne récupère un point de chance que si aucun appel à la chance dans la journée
+    if (this.getFlag('foundryvtt-reve-de-dragon', 'utilisationChance')) {
+      // Nouveau jour, suppression du flag
+      await this.unsetFlag('foundryvtt-reve-de-dragon', 'utilisationChance');
+    }
+    else {
+      await this.chanceActuelleIncDec(1);
+    }
+  }
+
   /* -------------------------------------------- */
   async _recupererBlessures(message, type, liste, moindres) {
     let count = 0;
@@ -439,9 +442,7 @@ export class RdDActor extends Actor {
       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) {
-        let fatigue = duplicate(this.data.data.sante.fatigue)
-        fatigue.value = 0;
-        await this.update({ "data.sante.fatigue": fatigue });
+        await this.update({ "data.sante.fatigue.value": 0 });
       }
     }
     ChatMessage.create(message);
@@ -491,16 +492,16 @@ export class RdDActor extends Actor {
 
   /* -------------------------------------------- */
   async recupererFatigue(message) {
-    let fatigue = duplicate(this.data.data.sante.fatigue)
+    let fatigue = this.data.data.sante.fatigue.value;
     const fatigueMin = this._computeFatigueMin();
-    if (fatigue.value <= fatigueMin) {
+    if (fatigue <= fatigueMin) {
       message.content += "Vous êtes déjà reposé. ";
       return;
     }
-    fatigue.value = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue.value));
+    fatigue = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue));
     console.log("recupererFatigue", fatigue)
-    await this.update({ "data.sante.fatigue": fatigue });
-    if (fatigue.value == 0) {
+    await this.update({ "data.sante.fatigue.value": fatigue });
+    if (fatigue == 0) {
       message.content += "Vous êtes complêtement reposé. ";
     }
   }
@@ -639,9 +640,9 @@ export class RdDActor extends Actor {
 
   /* -------------------------------------------- */
   async sortMisEnReserve(rollData, sort) {
-    let reserve = duplicate(this.data.data.reve.reserve);
-    reserve.list.push({ coord: rollData.tmr.coord, sort: sort, draconic: duplicate(rollData.competence) });
-    await this.update({ "data.reve.reserve": reserve });
+    let reserve = duplicate(this.data.data.reve.reserve.list);
+    reserve.push({ coord: rollData.tmr.coord, sort: sort, draconic: duplicate(rollData.competence) });
+    await this.update({ "data.reve.reserve.list": reserve });
     this.currentTMR.updateTokens();
   }
 
@@ -711,7 +712,7 @@ export class RdDActor extends Actor {
         });
       }
       const update = { _id: comp._id, 'data.niveau': nouveauNiveau };
-      const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity
+      await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity
     } else {
       console.log("Competence not found", compName);
     }
@@ -724,7 +725,7 @@ export class RdDActor extends Actor {
       compValue = compValue ?? 0;
       this.checkCompetenceXP(compName, compValue);
       const update = { _id: comp._id, 'data.xp': compValue };
-      const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity
+      await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity
     } else {
       console.log("Competence not found", compName);
     }
@@ -737,7 +738,7 @@ export class RdDActor extends Actor {
     if (comp) {
       compValue = compValue ?? 0;
       const update = { _id: comp._id, 'data.xp_sort': compValue };
-      const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity
+      await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity
     } else {
       console.log("Competence not found", compName);
     }
@@ -749,7 +750,7 @@ export class RdDActor extends Actor {
     if (comp) {
       compValue = compValue ?? 0;
       const update = { _id: comp._id, 'data.niveau_archetype': compValue };
-      const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity
+      await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity
     } else {
       console.log("Competence not found", compName);
     }
@@ -757,7 +758,6 @@ export class RdDActor extends Actor {
 
   /* -------------------------------------------- */
   async updateCompteurValue(fieldName, fieldValue) {
-    //console.log("Update", fieldName, fieldValue);
     let compteurs = duplicate(this.data.data.compteurs);
     compteurs[fieldName].value = fieldValue;
     await this.update({ "data.compteurs": compteurs });
@@ -951,8 +951,6 @@ export class RdDActor extends Actor {
   /* -------------------------------------------- */
   async computeEncombrementTotalEtMalusArmure() {
     let encTotal = 0;
-
-    let malusArmureData = (this.data.data.attributs && this.data.data.attributs.malusarmure) ? duplicate(this.data.data.attributs.malusarmure) : {};
     let newMalusArmure = 0;
     for (const item of this.data.items) {
       if (item.type == 'armure' && item.data.equipe) {  // Armure équipée, intégration du malus armure total
@@ -973,10 +971,10 @@ export class RdDActor extends Actor {
     // Mise à jour valeur totale et états
     this.encTotal = encTotal;
     this.detectSurEncombrement();
+
     // Mise à jour éventuelle du malus armure
-    if (this.data.data.attributs && this.data.data.attributs.malusarmure && newMalusArmure != malusArmureData.value) {
-      malusArmureData.value = newMalusArmure;
-      await this.update({ "data.attributs.malusarmure": malusArmureData });
+    if (this.data.data.attributs?.malusarmure && newMalusArmure != this.data.data.attributs.malusarmure.value) {
+      await this.update({ "data.attributs.malusarmure.value ": newMalusArmure });
     }
     return this.encTotal;
   }
@@ -1008,12 +1006,12 @@ export class RdDActor extends Actor {
     let resume = "Blessures:";
     if (nbCritiques > 0 || nbGraves > 0 || nbLegeres > 0) {
       if (nbLegeres > 0) {
-        resume += " " + nbLegeres + " légères";
+        resume += " " + nbLegeres + " légère" + (nbLegeres > 1 ? "s" : "");
       }
       if (nbGraves > 0) {
         if (nbLegeres > 0)
           resume += ",";
-        resume += " " + nbGraves + " graves";
+        resume += " " + nbGraves + " grave" + (nbGraves > 1 ? "s" : "");
       }
       if (nbCritiques > 0) {
         if (nbGraves > 0 || nbLegeres > 0)
@@ -1022,7 +1020,7 @@ export class RdDActor extends Actor {
       }
     }
     else {
-      resume += " aucune";
+      resume = "Aucune blessure";
     }
     return resume;
   }
@@ -1052,20 +1050,14 @@ export class RdDActor extends Actor {
 
   /* -------------------------------------------- */
   async ajouterRefoulement(value = 1) {
-    let ret = "none";
-
-    let refoulement = duplicate(this.data.data.reve.refoulement);
-    refoulement.value = refoulement.value + value;
-
+    let refoulement = this.data.data.reve.refoulement.value + value;
     let total = new Roll("1d20").roll().total;
-    if (total <= refoulement.value) {
-      refoulement.value = 0;
-      this.ajouterSouffle({ chat: true });
-      ret = "souffle";
+    if (total <= refoulement) {
+      refoulement = 0;
+      await this.ajouterSouffle({ chat: true });
     }
-
-    await this.update({ "data.reve.refoulement": refoulement });
-    return ret;
+    await this.update({ "data.reve.refoulement.value": refoulement });
+    return refoulement == 0 ? "souffle" : "none";
   }
 
   /* -------------------------------------------- */
@@ -1078,7 +1070,6 @@ export class RdDActor extends Actor {
         content: this.name + " subit un Souffle de Dragon  : " + souffle.name
       });
     }
-    // TODO: fermeture cité
     return souffle;
   }
 
@@ -1087,9 +1078,7 @@ export class RdDActor extends Actor {
     let queue;
     if (this.data.data.reve.reve.thanatosused) {
       queue = await RdDRollTables.getOmbre();
-      let myReve = duplicate(this.data.data.reve.reve);
-      myReve.thanatosused = false;
-      await this.update({ "data.reve.reve": myReve });
+      await this.update({ "data.reve.reve.thanatosused": false });
     }
     else {
       queue = await RdDRollTables.getQueue();
@@ -1124,40 +1113,25 @@ export class RdDActor extends Actor {
 
   /* -------------------------------------------- */
   getTMRRencontres() {
-    return this.data.data.reve.rencontre;
+    return this.data.data.reve.rencontre.list;
   }
 
   /* -------------------------------------------- */
   async deleteTMRRencontreAtPosition() {
-    let rencontres = duplicate(this.getTMRRencontres());
-    let len = rencontres.list.length;
-    let i = 0;
-    //console.log("List", rencontres, len);
-    let newTable = [];
-    for (i = 0; i < len; i++) {
-      if (rencontres.list[i].coord != this.getDemiReve())
-        newTable.push(rencontres.list[i]);
-    }
-    if (newTable.length != len) {
-      rencontres.list = newTable;
-      //console.log("Result: ", rencontres);
-      await this.update({ "data.reve.rencontre": rencontres });
+    let rencontres = this.getTMRRencontres();
+    let newRencontres = rencontres.filter(it => it.coord != this.getDemiReve());
+    if (newRencontres.length != rencontres.length) {
+      await this.update({ "data.reve.rencontre.list": newRencontres });
     }
   }
 
   /* -------------------------------------------- */
   async addTMRRencontre(currentRencontre) {
-    let rencontres = duplicate(this.getTMRRencontres());
-    let len = rencontres.list.length;
-    let i = 0;
-    let already = false;
-    for (i = 0; i < len; i++) {
-      if (rencontres.list[i].coord == this.getDemiReve())
-        already = true;
-    }
-    if (!already) {
-      rencontres.list.push(currentRencontre);
-      await this.update({ "data.reve.rencontre": rencontres });
+    let rencontres = this.getTMRRencontres();
+    let newRencontres = rencontres.filter(it => it.coord != this.getDemiReve());
+    if (newRencontres.length == rencontres.length) {
+      newRencontres.push(currentRencontre);
+      await this.update({ "data.reve.rencontre": newRencontres });
     }
   }
 
@@ -1179,9 +1153,8 @@ export class RdDActor extends Actor {
 
   /* -------------------------------------------- */
   async reveActuelIncDec(value) {
-    let reve = duplicate(this.data.data.reve.reve);
-    reve.value = Math.max(reve.value + value, 0);
-    await this.update({ "data.reve.reve": reve });
+    let reve = Math.max(this.data.data.reve.reve.value + value, 0);
+    await this.update({ "data.reve.reve.value": reve });
   }
 
   /* -------------------------------------------- */
@@ -1194,17 +1167,13 @@ export class RdDActor extends Actor {
   }
 
   /* -------------------------------------------- */
-  async setPointsDeSeuil(value) {
-    let seuil = duplicate(this.data.data.reve.seuil);
-    seuil.value = value;
-    await this.update({ "data.reve.seuil": seuil });
+  async setPointsDeSeuil(seuil) {
+    await this.update({ "data.reve.seuil.value": seuil });
   }
 
   /* -------------------------------------------- */
-  async setPointsDeChance(value) {
-    let chance = duplicate(this.data.data.compteurs.chance);
-    chance.value = value;
-    await this.update({ "data.compteurs.chance": chance });
+  async setPointsDeChance(chance) {
+    await this.update({ "data.compteurs.chance.value": chance });
   }
 
   /* -------------------------------------------- */
@@ -1258,7 +1227,7 @@ export class RdDActor extends Actor {
 
   /* -------------------------------------------- */
   async testSiSonne(sante, endurance) {
-    const roll = new Roll("1d20").roll();
+    const roll = new Roll("1d20").evaluate();
     roll.showDice = true;
     RdDDice.show(roll);
     let result = {
@@ -1266,18 +1235,20 @@ export class RdDActor extends Actor {
       sonne: roll.total > endurance || roll.total == 20 // 20 is always a failure
     }
     if (roll.total == 1) {
-      let xp = Misc.toInt(this.data.data.carac.constitution.xp) + 1;
-      this.update({ "data.carac.constitution.xp": xp }); // +1 XP !
+      await this.ajoutXpConstitution(1); // +1 XP !
       ChatMessage.create({ content: `${this.name} a obenu 1 sur son Jet d'Endurance et a gagné 1 point d'Expérience en Constitution. Ce point d'XP a été ajouté automatiquement).` });
     }
     if (result.sonne) {
-
       await this.setSonne();
       sante.sonne.value = true;
     }
     return result;
   }
 
+  async ajoutXpConstitution(xp) {
+    await this.update({ "data.carac.constitution.xp": Misc.toInt(this.data.data.carac.constitution.xp) + xp });
+  }
+
   /* -------------------------------------------- */
   countBlessures(blessuresListe) {
     return blessuresListe.filter(b => b.active).length
@@ -1297,14 +1268,12 @@ export class RdDActor extends Actor {
     if (myRoll.total == 1 || (myRoll.total != 20 && myRoll.total <= this.data.data.sante.endurance.value)) {
       msgText += `${this.name} a réussi son Jet d'Endurance !`;
       if (myRoll.total == 1) {
+        await this.ajoutXpConstitution();
         msgText += `et gagne 1 Point d'Experience en Constitution`;
-        let constit = duplicate(this.data.data.carac.constitution)
-        constit.xp += 1;
-        await this.update({ "data.carac.constitution": constit });
       }
     } else {
-      msgText += `${this.name} a échoué son Jet d'Endurance et devient Sonné`;
       await this.setSonne();
+      msgText += `${this.name} a échoué son Jet d'Endurance et devient Sonné`;
     }
     const message = {
       content: msgText,
@@ -1413,29 +1382,25 @@ export class RdDActor extends Actor {
   }
 
   /* -------------------------------------------- */
-  async manageBlessureFromSheet(bType, index, active) {
-    let bList = duplicate(this.data.data.blessures);
-    let blessure = bList[bType + "s"].liste[index];
+  async manageBlessureFromSheet(gravite, index) {
+    let listBlessures = duplicate(this.data.data.blessures);
+    let blessure = listBlessures[gravite + "s"].liste[index];
     blessure.active = !blessure.active;
     if (!blessure.active) {
-      blessure.premiers_soins = 0;
-      blessure.soins_complets = 0;
-      blessure.jours = 0;
-      blessure.loc = "";
+      this._supprimerBlessure(blessure);
     }
-    //console.log("Blessure update", bType, index, blessure, bList );
-    await this.update({ 'data.blessures': bList });
+    await this.update({ 'data.blessures': listBlessures });
   }
 
   /* -------------------------------------------- */
-  async setDataBlessureFromSheet(bType, index, psoins, pcomplets, jours, loc) {
-    let bList = duplicate(this.data.data.blessures);
-    let blessure = bList[bType + "s"].liste[index];
+  async setDataBlessureFromSheet(gravite, index, psoins, pcomplets, jours, loc) {
+    let listBlessures = duplicate(this.data.data.blessures);
+    let blessure = listBlessures[gravite + "s"].liste[index];
     blessure.premiers_soins = psoins;
     blessure.soins_complets = pcomplets;
     blessure.jours = jours;
     blessure.loc = loc;
-    await this.update({ 'data.blessures': bList });
+    await this.update({ 'data.blessures': listBlessures });
   }
 
   /* -------------------------------------------- */
@@ -1458,24 +1423,21 @@ export class RdDActor extends Actor {
 
   /* -------------------------------------------- */
   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;
+      let moral = Misc.toInt(this.data.data.compteurs.moral.value) + ajustementMoral
+      if (moral > 3) { // exaltation
+        const exaltation = Misc.toInt(this.data.data.compteurs.exaltation.value) + moral - 3;
+        await this.update({ 'data.compteurs.exaltation.value': exaltation });
       }
-      if (compteurs.moral.value < -3) {
-        // dissolution
-        compteurs.moral.value++;
-        compteurs.dissolution.value = Misc.toInt(compteurs.dissolution.value) + 1;
+      if (moral < -3) { // dissolution
+        const dissolution = Misc.toInt(this.data.data.compteurs.dissolution.value) + 3 - moral;
+        await this.update({ 'data.compteurs.dissolution.value': dissolution });
       }
-      await this.update({ 'data.compteurs': compteurs });
+      moral = Math.max(-3, Math.min(moral, 3));
+      await this.update({ 'data.compteurs.moral.value': moral });
     }
-    return compteurs.moral.value;
+    return this.data.data.compteurs.moral.value;
   }
 
   /* -------------------------------------------- */
@@ -1535,11 +1497,14 @@ export class RdDActor extends Actor {
       const ajustementEthylique = ethylisme.value;
       // Qui a bu boira (p 164)
       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 += "Qui a bu boira : " + (rollVolonte.isSuccess
+      const quiABuBoira = (rollVolonte.isSuccess
         ? "vous êtes libre de continuer à boire ou pas."
         : "vous avez une envie irrépréssible de reprendre un verre.");
+
+      msgText += `Vous avez échoué à votre jet d'éthylisme, vous êtes 
+        maintenant ${RdDUtility.getNomEthylisme(ajustementEthylique)} (${ajustementEthylique}).
+        <br> ${RdDResolutionTable.explain(rollVolonte)}
+        <br>Qui a bu boira : ${quiABuBoira}`;
     }
 
     ChatMessage.create({
diff --git a/module/rdd-carac.js b/module/rdd-carac.js
index 516b4f9f..6dbe169c 100644
--- a/module/rdd-carac.js
+++ b/module/rdd-carac.js
@@ -1,5 +1,4 @@
 import { Grammar } from "./grammar.js";
-import { RdDUtility } from "./rdd-utility.js";
 
 const tableCaracDerivee = {
   // xp: coût pour passer du niveau inférieur à ce niveau
diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js
index cbc1aafe..b1fe330a 100644
--- a/module/rdd-tmr-dialog.js
+++ b/module/rdd-tmr-dialog.js
@@ -72,11 +72,11 @@ export class RdDTMRDialog extends Dialog {
   }
 
   loadSortsReserve() {
-    this.sortsReserves = duplicate(this.actor.data.data.reve.reserve.list);
+    this.sortsReserves = this.actor.data.data.reve.reserve.list;
   }
 
   loadRencontres() {
-    this.rencontresExistantes = duplicate(this.actor.getTMRRencontres()).list;
+    this.rencontresExistantes = this.actor.getTMRRencontres();
   }
 
   /* -------------------------------------------- */
@@ -389,6 +389,11 @@ export class RdDTMRDialog extends Dialog {
     ChatMessage.create({ content: message, user: game.user._id, whisper: ChatMessage.getWhisperRecipients("GM") });
   }
 
+  /* -------------------------------------------- */
+  _tellToUserAndGM(message) {
+    ChatMessage.create({ content: message, user: game.user._id, whisper: [game.user._id].concat(ChatMessage.getWhisperRecipients("GM")) });
+  }
+
   /* -------------------------------------------- */
   async manageRencontre(tmr, postRencontre) {
     if (this.viewOnly) {
@@ -669,8 +674,8 @@ export class RdDTMRDialog extends Dialog {
   /* -------------------------------------------- */
   async declencheSortEnReserve(coord) {
 
-    let sortReserveList = TMRUtility.getSortReserveList(this.sortsReserves, coord);
-    if (sortReserveList.length > 0) {
+    let sortsEnCoord = TMRUtility.getSortsReserve(this.sortsReserves, coord);
+    if (sortsEnCoord.length > 0) {
       if (EffetsDraconiques.isSortReserveImpossible(this.actor)) {
         ui.notifications.error("Une queue ou un souffle vous empèche de déclencher de sort!");
         return;
@@ -678,7 +683,7 @@ export class RdDTMRDialog extends Dialog {
       if (!EffetsDraconiques.isUrgenceDraconique(this.actor) &&
         (EffetsDraconiques.isReserveEnSecurite(this.actor) || this.isReserveExtensible(coord))) {
         let msg = "Vous êtes sur une case avec un Sort en Réserve. Grâce à votre Tête <strong>Reserve en Sécurité</strong> ou <strong>Réserve Exensible</strong>, vous pouvez contrôler le déclenchement. Cliquez si vous souhaitez le déclencher : <ul>";
-        for (let sortReserve of sortReserveList) {
+        for (let sortReserve of sortsEnCoord) {
           msg += "<li><a class='chat-card-button' id='sort-reserve' data-actor-id='" + this.actor._id + "' data-tmr-coord='" + coord + "' data-sort-id='" + sortReserve.sort._id + "'>" + sortReserve.sort.name + "</a></li>";
         }
         msg += "</ol>";
@@ -688,15 +693,14 @@ export class RdDTMRDialog extends Dialog {
         });
         return;
       }
-      await this.processSortReserve(sortReserveList[0]);
+      await this.processSortReserve(sortsEnCoord[0]);
     }
   }
 
   /* -------------------------------------------- */
   lancerSortEnReserve(coord, sortId) {
-    let sortReserveList = TMRUtility.getSortReserveList(this.sortsReserves, coord);
-    let sortReserve = sortReserveList.find(sortReserve => sortReserve.sort._id == sortId);
-    //console.log("SORT RESA", sortReserveList, coordTMR, sortId, sortReserve);
+    let sortEnCoord = TMRUtility.getSortsReserve(this.sortsReserves, coord);
+    let sortReserve = sortEnCoord.find(sortReserve => sortReserve.sort._id == sortId);
     if (sortReserve) {
       this.processSortReserve(sortReserve);
     } else {
@@ -712,7 +716,7 @@ export class RdDTMRDialog extends Dialog {
     await this.actor.deleteSortReserve(sortReserve);
     //this.updateSortReserve();
     console.log("declencheSortEnReserve", sortReserve)
-    this._tellToGM(`Vous avez déclenché le sort en réserve <strong> ${sortReserve.sort.name}</strong>
+    this._tellToUserAndGM(`Vous avez déclenché le sort en réserve <strong> ${sortReserve.sort.name}</strong>
         avec ${sortReserve.sort.data.ptreve_reel} points de Rêve
         en ${sortReserve.coord} (${TMRUtility.getTMRLabel(sortReserve.coord)})
         `);
diff --git a/module/tmr-utility.js b/module/tmr-utility.js
index 74863674..2426934d 100644
--- a/module/tmr-utility.js
+++ b/module/tmr-utility.js
@@ -432,7 +432,7 @@ export class TMRUtility {
   }
 
   /* -------------------------------------------- */
-  static getSortReserveList(reserveList, coord) {
+  static getSortsReserve(reserveList, coord) {
     // TODO : Gérer les têtes spéciales réserve!
     let tmrDescr = this.getTMR(coord);
     //console.log("Sort réserve : ", tmrDescr);
diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html
index 056359c8..ebadca90 100644
--- a/templates/actor-sheet.html
+++ b/templates/actor-sheet.html
@@ -541,7 +541,6 @@
       </div>
 
       {{!-- hautreve Tab --}}
-      {{log 'Haut reve' hautreve}}
       <div class="tab hautreve " data-group="primary" data-tab="hautreve" style="height:200px">
         <div>
           <h3>Haut rêve:</h3>