diff --git a/module/actor.js b/module/actor.js index d4d3d0fb..34ad3486 100644 --- a/module/actor.js +++ b/module/actor.js @@ -310,6 +310,30 @@ export class RdDActor extends Actor { getDemiReve() { return Misc.templateData(this).reve.tmrpos.coord; } + + /* -------------------------------------------- */ + async verifierPotionsEnchantees() { + let potionsEnchantees = this.filterItemsData( it => it.type == 'potion' && it.data.categorie.toLowerCase().includes('enchante')); + for ( let potion of potionsEnchantees) { + if ( !potion.prpermanent) { + console.log(potion); + let newPr = (potion.data.pr > 0) ? potion.data.pr - 1 : 0; + let update = { _id: potion._id, 'data.pr': newPr}; + const updated = await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity + + let messageData = { + pr : newPr, + alias : this.name, + potionName : potion.name, + potionImg : potion.img + } + ChatMessage.create({ + whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-potionenchantee-chateaudormant.html`, messageData) + }); + } + } + } /* -------------------------------------------- */ async deleteSortReserve(sortReserve) { @@ -358,6 +382,7 @@ export class RdDActor extends Actor { await this.retourSeuilDeReve(message); this.bonusRecuperationPotion= 0; // Reset potion await this.retourSust(message); + await this.verifierPotionsEnchantees(); message.content = `A la fin Chateau Dormant, ${message.content}
Un nouveau jour se lève`; ChatMessage.create(message); } @@ -3202,7 +3227,7 @@ export class RdDActor extends Actor { return guerisonData; } - /* -------------------------------------------- */ + /* -------------------------------------------- */ async consommerPotionSoin(potionData) { potionData.alias = this.name; @@ -3216,22 +3241,17 @@ export class RdDActor extends Actor { }); // Gestion de la résistance: let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8 ); + potionData.reussiteReve = false; if (!rolled.isSuccess) { await this.reveActuelIncDec(-1); potionData.guerisonData = await this.buildPotionGuerisonList(potionData.pointsGuerison); - potionData.guerisonMinutes = potionData.guerisonData.pointsConsommes * 5; + potionData.guerisonMinutes = potionData.guerisonData.pointsConsommes * 5; potionData.reussiteReve = true; - ChatMessage.create({ - whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData ) - }); - } else { - potionData.reussiteReve = false; - ChatMessage.create({ - whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData ) - }); } + ChatMessage.create({ + whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData ) + }); } else { potionData.enchanteTexte = ""; potionData.isEnchante = false; @@ -3243,17 +3263,64 @@ export class RdDActor extends Actor { } } + /* -------------------------------------------- */ + async consommerPotionRepos(potionData) { + potionData.alias = this.name; + + if (potionData.data.categorie.includes('Enchante')) { + potionData.casesRepos = RdDHerbes.calculePointsRepos( potionData.data); + potionData.enchanteTexte = "enchantée"; + potionData.isEnchante = true; + ChatMessage.create({ + whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData ) + }); + // Gestion de la résistance: + let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8 ); + potionData.reussiteReve = false; + if (!rolled.isSuccess) { + await this.reveActuelIncDec(-1); + let fatigueActuelle = this.getFatigueActuelle(); + potionData.caseFatigueReel = (fatigueActuelle >= potionData.casesRepos) ? potionData.casesRepos : fatigueActuelle; + potionData.guerisonDureeUnite = (potionData.data.reposalchimique) ? "rounds" : "minutes"; + potionData.guerisonDureeValue = (potionData.data.reposalchimique) ? potionData.caseFatigueReel : potionData.caseFatigueReel*5; + potionData.reussiteReve = true; + potionData.aphasiePermanente = false; + if ( potionData.data.reposalchimique ) { + let chanceAphasie = new Roll("1d100").evaluate({async : false} ).total; + if ( chanceAphasie <= potionData.data.pr ) { + potionData.aphasiePermanente = true; + } + } + await this.santeIncDec("fatigue", -potionData.caseFatigueReel); + } + ChatMessage.create({ + whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData ) + }); + } else { + potionData.enchanteTexte = ""; + potionData.isEnchante = false; + ChatMessage.create({ + whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData ) + }); + this.bonusRepos = potionData.data.herbeBonus; + } + } + /* -------------------------------------------- */ async consommerPotion( potion ) { const potionData = Misc.data(potion); if ( potionData.data.categorie.includes('Soin')) { this.consommerPotionSoin( potionData); - } else if( potion.data.categorie.includes('Repos')) { - //TODO + } else if( potionData.data.categorie.includes('Repos')) { + this.consommerPotionRepos(potionData); } else { //TODO } + await this.deleteEmbeddedDocuments('Item', [ potion._id ] ); } /* -------------------------------------------- */ diff --git a/module/rdd-herbes.js b/module/rdd-herbes.js index df915c7e..cded07e6 100644 --- a/module/rdd-herbes.js +++ b/module/rdd-herbes.js @@ -60,6 +60,11 @@ export class RdDHerbes extends Item { } } + /* -------------------------------------------- */ + static calculePointsRepos( data ) { + return data.herbebonus * data.pr; + } + /* -------------------------------------------- */ static calculePointsGuerison( data ){ return data.herbebonus * data.pr; diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 4265bb8f..310330c1 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -187,7 +187,8 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/chat-resultat-alchimie.html', 'systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-summary.html', 'systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.html', - 'systems/foundryvtt-reve-de-dragon/templates/chat-actor-carac-xp.html' + 'systems/foundryvtt-reve-de-dragon/templates/chat-actor-carac-xp.html', + 'systems/foundryvtt-reve-de-dragon/templates/chat-potionenchantee-chateaudormant.html' ]; Handlebars.registerHelper('upperFirst', str => Misc.upperFirst(str ?? 'Null')); diff --git a/templates/chat-appliquer-potion-repos.html b/templates/chat-appliquer-potion-repos.html new file mode 100644 index 00000000..a42b2c91 --- /dev/null +++ b/templates/chat-appliquer-potion-repos.html @@ -0,0 +1,22 @@ +potion de repos +

+ {{#if reussiteReve}} + {{alias}} a bu la potion et a échoué son Jet de Résistance (Rêve actuel à -8) : la potion fait effet ! + {{else}} + {{alias}} a bu la potion et a réussi son Jet de Résistance (Rêve actuel à -8) : la potion ne fait pas effet ! + {{/if}} +

+
+
+ {{#if reussiteReve}} + {{alias}} perd 1 point de rêve (déduit automatiquement) et s'endort pour {{guerisonDureeValue}} {{guerisonDureeUnite}} et + se repose de {{caseFatigueReel}} cases de fatigue.
+ {{#if data.reposalchimique}} + De plus, étant donné que la potion était alchimique, {{alias}} est en aphasie pendant cette durée. + {{#if aphasiePermanente}} + Et malheureusement, l'aphasie est permanente tant que {{alias}} ne réussit pas un jet de VOLONTE à 0 à Chateau Dormant (le moral compte). + {{/if}} + {{/if}} + {{/if}} + La potion a également été supprimée de l'équipement. +
diff --git a/templates/chat-appliquer-potion-soin.html b/templates/chat-appliquer-potion-soin.html index 9d4b9e30..9b659214 100644 --- a/templates/chat-appliquer-potion-soin.html +++ b/templates/chat-appliquer-potion-soin.html @@ -1,23 +1,21 @@ potion de soin

- {{#if enchante}} - + {{#if reussiteReve}} + {{alias}} a bu la potion et a échoué son Jet de Résistance (Rêve actuel à -8) : la potion fait effet ! {{else}} - {{#if reussiteReve}} - {{alias}} a bu la potion et a échoué son Jet de Résistance (Rêve actuelà -8) : la potion fait effet ! - {{else}} - {{alias}} a bu la potion et a réussi son Jet de Résistance (Rêve actuelà -8) : la potion ne fait pas effet ! - {{/if}} + {{alias}} a bu la potion et a réussi son Jet de Résistance (Rêve actuel à -8) : la potion ne fait pas effet ! {{/if}}


-{{#if reussiteReve}}
- {{alias}} perd 1 point de rêve (déduit autmatiquement) et s'endort pour {{guerisonMinutes}} minutes. A son réveil, les blessures suivantes seront guéries : + {{#if reussiteReve}} + {{alias}} perd 1 point de rêve (déduit automatiquement) et s'endort pour {{guerisonMinutes}} minutes. A son réveil, les blessures suivantes seront guéries : +
+ {{/if}} + La potion a également été supprimée de l'équipement.
-{{/if}} diff --git a/templates/chat-consommer-potion-repos.html b/templates/chat-consommer-potion-repos.html new file mode 100644 index 00000000..0d1bf631 --- /dev/null +++ b/templates/chat-consommer-potion-repos.html @@ -0,0 +1,13 @@ +potion de repos +

+ {{alias}} consomme sa Potion de Repos {{enchanteTexte}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins). +

+
+
+ {{#if casesRepos}} + Elle permet de récupérer jusqu'à {{casesRepos}} cases de repos. + {{else}} + Une fois consommée vers fin Lyre, elle vous octroie un bonus de {{data.herbebonus}} segments de fatigue récupérés en plus à la fin de Chateau Dormant (à gérer manuellement). +
La potion a également été supprimée de l'équipement. + {{/if}} +
diff --git a/templates/chat-consommer-potion-soin.html b/templates/chat-consommer-potion-soin.html index e629529d..459428d3 100644 --- a/templates/chat-consommer-potion-soin.html +++ b/templates/chat-consommer-potion-soin.html @@ -8,5 +8,6 @@ Elle permet de guérir {{pointsGuerison}} Points de Guérison. {{else}} Lors de votre prochain jet de récupération à Chateau Dormant, vous bénéficierez d'un bonus de {{data.herbebonus}} (appliqué automatiquement). +
La potion a également été supprimée de l'équipement. {{/if}} diff --git a/templates/chat-potionenchantee-chateaudormant.html b/templates/chat-potionenchantee-chateaudormant.html new file mode 100644 index 00000000..53d87113 --- /dev/null +++ b/templates/chat-potionenchantee-chateaudormant.html @@ -0,0 +1,9 @@ +{{potionName}} +

+ La potion enchantée {{potionName}} de {{alias}} a perdu un Point de Rêve (nouveau total : {{pr}}).

+
+
+ {{#if (eq pr 0)}} + Sa potion étant désormais à 0 Point de Rêve, elle est inutilisable et doit être jetée. + {{/if}} +