diff --git a/module/rdd-herbes.js b/module/rdd-herbes.js
new file mode 100644
index 00000000..df915c7e
--- /dev/null
+++ b/module/rdd-herbes.js
@@ -0,0 +1,81 @@
+/* -------------------------------------------- */
+import { RdDUtility } from "./rdd-utility.js";
+import { Misc } from "./misc.js";
+import { RdDCalendrier } from "./rdd-calendrier.js";
+
+/* -------------------------------------------- */
+export class RdDHerbes extends Item {
+
+ /* -------------------------------------------- */
+ static isHerbeSoin( botaniqueItem ) {
+ return Misc.templateData(botaniqueItem).categorie == 'Soin';
+ }
+ /* -------------------------------------------- */
+ static isHerbeRepos( botaniqueItem ) {
+ return Misc.templateData(botaniqueItem).categorie == 'Repos';
+ }
+
+ /* -------------------------------------------- */
+ static async initializeHerbes( ) {
+ this.herbesSoins = await RdDUtility.loadCompendium('foundryvtt-reve-de-dragon.botanique', item => this.isHerbeSoin(item));
+ this.herbesRepos = await RdDUtility.loadCompendium('foundryvtt-reve-de-dragon.botanique', item => this.isHerbeRepos(item));
+ }
+
+ /* -------------------------------------------- */
+ static buildHerbesList(listHerbes, max) {
+ let list = {}
+ for ( let herbe of listHerbes) {
+ let herbeData = Misc.templateData(herbe);
+ let brins = max - herbeData.niveau;
+ list[herbe.data.name] = `${herbe.data.name} (Bonus: ${herbeData.niveau}, Brins: ${brins})`;
+ }
+ list['Autre'] = 'Autre (Bonus: variable, Brins: variable)'
+ return list;
+ }
+
+ /* -------------------------------------------- */
+ static updatePotionData( formData ) {
+ formData.herbesSoins = this.buildHerbesList(this.herbesSoins, 12);
+ formData.herbesRepos = this.buildHerbesList(this.herbesRepos, 7);
+ formData.jourMoisOptions = Array(28).fill().map((item, index) => 1 + index);
+ formData.dateActuelle = game.system.rdd.calendrier.getDateFromIndex();
+ formData.splitDate = game.system.rdd.calendrier.getNumericDateFromIndex(formData.data.prdate);
+
+ if (formData.data.categorie.includes('Soin') ) {
+ formData.isHerbe = true;
+ this.computeHerbeBonus(formData, this.herbesSoins, 12);
+ } else if (formData.data.categorie.includes('Repos')) {
+ formData.isRepos = true;
+ this.computeHerbeBonus(formData, this.herbesRepos, 7);
+ }
+
+ if (formData.data.categorie.includes('Enchante') ) {
+ formData.isEnchante = true;
+ if ( formData.isHerbe) {
+ formData.pointsGuerison = this.calculePointsGuerison( formData.data );
+ }
+ if ( formData.isRepos) {
+ formData.caseRepos = formData.data.herbebonus * formData.data.pr;
+ }
+ }
+ }
+
+ /* -------------------------------------------- */
+ static calculePointsGuerison( data ){
+ return data.herbebonus * data.pr;
+ }
+
+ /* -------------------------------------------- */
+ static computeHerbeBonus( formData, herbesList, max) {
+ if ( Number(formData.data.herbebrins) ) {
+ let herbe = herbesList.find(item => item.name.toLowerCase() == formData.data.herbe.toLowerCase() );
+ if( herbe ) {
+ let herbeData = Misc.templateData(herbe);
+ let brinsBase = max - herbeData.niveau;
+ //console.log(herbeData, brinsBase, formData.data.herbebrins);
+ formData.data.herbebonus = Math.max(herbeData.niveau - Math.max(brinsBase - formData.data.herbebrins, 0), 0);
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/templates/chat-appliquer-potion-soin.html b/templates/chat-appliquer-potion-soin.html
new file mode 100644
index 00000000..9d4b9e30
--- /dev/null
+++ b/templates/chat-appliquer-potion-soin.html
@@ -0,0 +1,23 @@
+
+