From 0e3e6eb6eb93c7ba5512119e55d39ababd65027e Mon Sep 17 00:00:00 2001
From: sladecraven <sylvain@lahiette.com>
Date: Wed, 26 May 2021 16:28:57 +0200
Subject: [PATCH] Fix TMR

---
 module/actor-sheet.js      |  1 +
 module/actor.js            | 38 +++++++++++++++++++++++---------------
 module/rdd-tmr-dialog.js   |  5 ++---
 templates/actor-sheet.html |  2 +-
 templates/dialog-tmr.html  |  3 +++
 5 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/module/actor-sheet.js b/module/actor-sheet.js
index 0eb85585..2d35c04c 100644
--- a/module/actor-sheet.js
+++ b/module/actor-sheet.js
@@ -99,6 +99,7 @@ export class RdDActorSheet extends ActorSheet {
     formData.difficultesLibres = CONFIG.RDD.difficultesLibres;
 
     formData.hautreve = {
+      isDemiReve: this.actor.listeEffets( it => it.label == "Demi-rêve").length > 0,
       sortsReserve: formData.data.reve.reserve.list,
       rencontres: duplicate(formData.data.reve.rencontre.list),
       casesTmr: formData.itemsByType.casetmr,
diff --git a/module/actor.js b/module/actor.js
index 583ce685..51d719df 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -2921,9 +2921,10 @@ export class RdDActor extends Actor {
 
   /* -------------------------------------------- */
   async displayTMR(mode = "normal") {
-    if ( this.currentTMR != undefined && !this.currentTMR.isClosed) {
-      ui.notifications.warn("Vous êtes déja dans les Terres Médianes !");
-      return;
+    let demiReve = this.listeEffets( it => it.label == "Demi-rêve");
+    if ( mode != 'visu' && demiReve.length > 0 ) {
+      ui.notifications.warn("Le joueur ou le MJ est déja dans les Terres Médianes avec ce personnage ! Visualisation uniquement");
+      mode = "visu"; // bascule le mode en visu automatiquement
     }
     
     let isRapide = mode == "rapide";
@@ -3864,9 +3865,8 @@ export class RdDActor extends Actor {
     const demiReve = StatusEffects.demiReve();
     if (status) {
       await this.addStatusEffect(demiReve)
-    }
-    else {
-      this.deleteStatusEffect(demiReve)
+    } else {
+      await this.deleteStatusEffect(demiReve)
     }
   }
 
@@ -3884,26 +3884,31 @@ export class RdDActor extends Actor {
       await this.addStatusEffectById(statusId);
     }
     else {
-      this.deleteStatusEffectById(statusId);
+      await this.deleteStatusEffectById(statusId);
     }
   }
 
   /* -------------------------------------------- */
-  deleteStatusEffectById(id) {
+  async deleteStatusEffectById(id) {
+
     const ids = Array.from(this.effects?.values())
       .filter(it => it.data.flags.core?.statusId == id)
       .map(it => it.id);
+    //console.log("Delete effect IDS1: ", this.effects, ids);
     if (ids.length > 0) {
-      this.deleteEmbeddedDocuments('ActiveEffect', ids);
+      await this.deleteEmbeddedDocuments('ActiveEffect', ids);
     }
   }
 
   /* -------------------------------------------- */
-  deleteStatusEffect(effect) {
+  async deleteStatusEffect(effect) {
     const ids = Array.from(this.effects?.values())
       .filter(it => StatusEffects.statusId(it.data) == StatusEffects.statusId(effect))
       .map(it => it.id);
-    this.deleteEmbeddedDocuments('ActiveEffect', ids);
+      //console.log("Delete effect 1: ", this.effects, ids);
+      if (ids.length > 0) {
+        await this.deleteEmbeddedDocuments('ActiveEffect', ids);
+      }
   }
 
   /* -------------------------------------------- */
@@ -3915,10 +3920,13 @@ export class RdDActor extends Actor {
   /* -------------------------------------------- */
   async addStatusEffect(statusEffect) {
     const effet = Misc.data(statusEffect);
-    this.deleteStatusEffectById(effet.id);
-    effet.flags = effet.flags ?? { core: {} };
-    effet.flags.core.statusId = effet.id;
-    await this.createEmbeddedDocuments('ActiveEffect', [effet]);
+    await this.deleteStatusEffectById(effet.id);
+    //effet.flags = effet.flags ?? { core: {} };
+    //effet.flags.core.statusId = effet.id;
+    let effectArray = await this.createEmbeddedDocuments('ActiveEffect', [effet]);
+    if (effectArray[0]) {
+      await effectArray[0].setFlag( 'core', 'statusId', effet.id);
+    }
   }
 
   /* -------------------------------------------- */
diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js
index d5646460..34d20e6e 100644
--- a/module/rdd-tmr-dialog.js
+++ b/module/rdd-tmr-dialog.js
@@ -273,11 +273,10 @@ export class RdDTMRDialog extends Dialog {
   close() {
     this.actor.santeIncDec("fatigue", this.cumulFatigue).then(super.close()); // moving 1 cell costs 1 fatigue
     this.actor.tmrApp = undefined; // Cleanup reference
-    this.actor.setStatusDemiReve(false);
-    if (!this.viewOnly) {
+    if ( !this.viewOnly ) {
+      this.actor.setStatusDemiReve(false);
       this._tellToGM(this.actor.name + " a quitté les terres médianes");
     }
-    ths.isClosed = true;
   }
 
   /* -------------------------------------------- */
diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html
index a1cb96fe..6db86c66 100644
--- a/templates/actor-sheet.html
+++ b/templates/actor-sheet.html
@@ -60,7 +60,7 @@
               <span class="dormir-une-heure"><a title="Dormir une heure"><img class="button-img" src="icons/svg/sleep.svg" alt="Dormir une heure"/></a></span>
               <span class="dormir-chateau-dormant"><a title="Chateau Dormant"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/icons/heures/hd12.svg" alt="Chateau Dormant"/></a></span>
               {{#if data.attributs.hautrevant.value}}
-              <span class="monte-tmr"><a title="Montée dans les Terres M&eacute;dianes !"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-normal.svg" alt="Montée dans les Terres M&eacute;dianes !"/></a></span>
+              <span class="monte-tmr"><a title="Montée dans les Terres M&eacute;dianes !" {{#if hautreve.isDemiReve}}disabled{{/if}}><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-normal.svg" alt="Montée dans les Terres M&eacute;dianes !"/></a></span>
               <span class="monte-tmr-rapide"><a title="Montée accélérée dans les Terres M&eacute;dianes !"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-rapide.svg" alt="Montée accélérée dans les Terres M&eacute;dianes !"/></a></span>
               <span class="visu-tmr"><a title="Regarder les Terres M&eacute;dianes"><img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-view.svg" alt="Regarder les Terres M&eacute;dianes"/></a></span>
               {{/if}}
diff --git a/templates/dialog-tmr.html b/templates/dialog-tmr.html
index e4033389..34fa509a 100644
--- a/templates/dialog-tmr.html
+++ b/templates/dialog-tmr.html
@@ -4,6 +4,8 @@
 <table id="tmrsheet">
   <tr id="tmrrow1">
     <td>
+      {{#if (eq mode "visu")}}
+      {{else}}
       <div class="flex-group-center">
         <img class="small-button-direction" id='dir-top-left' src='systems/foundryvtt-reve-de-dragon/styles/img/ui/dir-top-left.svg'>
         <img class="small-button-direction" id='dir-top' src='systems/foundryvtt-reve-de-dragon/styles/img/ui/dir-top.svg'>
@@ -14,6 +16,7 @@
         <img class="small-button-direction" id='dir-bottom' src='systems/foundryvtt-reve-de-dragon/styles/img/ui/dir-bottom.svg'>
         <img class="small-button-direction" id='dir-bottom-right' src='systems/foundryvtt-reve-de-dragon/styles/img/ui/dir-bottom-right.svg'>
       </div>
+      {{/if}}
       <div class="flex-group-center lire-signe-draconique">
         <a>Lire un signe draconique</a>
       </div>