From db448028f9609add52011256a24297f340e9c1f8 Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck <vincent.vandemeulebrouck@itiviti.com>
Date: Thu, 10 Nov 2022 00:25:51 +0100
Subject: [PATCH] =?UTF-8?q?Gestion=20de=20la=20t=C3=AAte=20Augmentation=20?=
 =?UTF-8?q?de=20seuil?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 module/actor.js                  | 10 ++++++----
 module/tmr/augmentation-seuil.js | 18 ++++++++++++++++++
 module/tmr/effets-draconiques.js |  7 +++++++
 3 files changed, 31 insertions(+), 4 deletions(-)
 create mode 100644 module/tmr/augmentation-seuil.js

diff --git a/module/actor.js b/module/actor.js
index b0e46eb0..20e3a492 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -1556,11 +1556,13 @@ export class RdDActor extends Actor {
   }
 
   /* -------------------------------------------- */
-  async updatePointDeSeuil(value = 1) {
+  async regainPointDeSeuil() {
     const seuil = Misc.toInt(this.system.reve.seuil.value);
-    const reve = Misc.toInt(this.system.carac.reve.value);
-    if (seuil < reve) {
-      await this.setPointsDeSeuil(Math.min(seuil + value, reve));
+    const seuilMax = Misc.toInt(this.system.carac.reve.value)
+      + 2 * EffetsDraconiques.countAugmentationSeuil(this);
+
+    if (seuil < seuilMax) {
+      await this.setPointsDeSeuil(Math.min(seuil + 1, seuilMax));
     }
   }
 
diff --git a/module/tmr/augmentation-seuil.js b/module/tmr/augmentation-seuil.js
new file mode 100644
index 00000000..bf2c487f
--- /dev/null
+++ b/module/tmr/augmentation-seuil.js
@@ -0,0 +1,18 @@
+import { Grammar } from "../grammar.js";
+import { Draconique } from "./draconique.js";
+import { Misc } from "../misc.js";
+
+export class AugmentationSeuil extends Draconique {
+
+  constructor() {
+    super();
+  }
+
+  type() { return 'tete' }
+  match(item) { return Draconique.isTeteDragon(item) && Grammar.toLowerCaseNoAccent(item.name).includes('augmentation du seuil de reve'); }
+  manualMessage() { return false }
+  async onActorCreateOwned(actor, tete) {
+    const seuil = Misc.toInt(actor.system.reve.seuil.value) + 2;
+    await actor.update({ "system.reve.seuil.value": seuil })
+  }
+}
diff --git a/module/tmr/effets-draconiques.js b/module/tmr/effets-draconiques.js
index 398ae930..f1674a31 100644
--- a/module/tmr/effets-draconiques.js
+++ b/module/tmr/effets-draconiques.js
@@ -17,6 +17,7 @@ import { Pelerinage } from "./pelerinage.js";
 import { Periple } from "./periple.js";
 import { UrgenceDraconique } from "./urgence-draconique.js";
 import { Grammar } from "../grammar.js";
+import { AugmentationSeuil } from "./augmentation-seuil.js";
 
 
 export class EffetsDraconiques {
@@ -37,6 +38,7 @@ export class EffetsDraconiques {
   static pelerinage = new Pelerinage();
   static periple = new Periple();
   static urgenceDraconique = new UrgenceDraconique();
+  static augmentationSeuil = new AugmentationSeuil();
 
   static init() {
     Draconique.register(EffetsDraconiques.carteTmr);
@@ -56,6 +58,7 @@ export class EffetsDraconiques {
     Draconique.register(EffetsDraconiques.pelerinage);
     Draconique.register(EffetsDraconiques.periple);
     Draconique.register(EffetsDraconiques.urgenceDraconique);
+    Draconique.register(EffetsDraconiques.augmentationSeuil)
   }
 
   /* -------------------------------------------- */
@@ -116,6 +119,10 @@ export class EffetsDraconiques {
       .filter(it => Grammar.includesLowerCaseNoAccent(it.name, name));
   }
 
+  static countAugmentationSeuil(actor) {
+    return EffetsDraconiques.filterItems(actor, Draconique.isTeteDragon, 'Augmentation du seuil de rêve').length;
+  }
+
   static isDonDoubleReve(actor) {
     return EffetsDraconiques.filterItems(actor, Draconique.isTeteDragon, 'Don de double-rêve').length>0;
   }