From f0d23bb1d064fb47d94a6975fd12a48b41c67dbc Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sat, 23 Apr 2022 01:02:03 +0200 Subject: [PATCH] Fix: soucis avec plusieurs queues&souffles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit => montée laborieuse, mauvaises rencontres Simplification de EffetsDraconiques: passer l'actor pour tester si l'acteur a un effet sur lui, ou un item pour tester si un item correspond --- module/actor-sheet.js | 2 +- module/actor.js | 9 ++- module/rdd-tmr-dialog.js | 2 +- module/tmr/effets-draconiques.js | 119 +++++++++++-------------------- 4 files changed, 49 insertions(+), 83 deletions(-) diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 7a72d17a..75dc8495 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -337,7 +337,7 @@ export class RdDActorSheet extends ActorSheet { ui.notifications.info("Impossible de lancer l'initiative sans être dans un combat."); } }); - // Display TMR, visuualisation + // Display TMR, visualisation html.find('.visu-tmr').click(async event => { this.actor.displayTMR("visu"); }); diff --git a/module/actor.js b/module/actor.js index 9a0555d5..a4ded765 100644 --- a/module/actor.js +++ b/module/actor.js @@ -2373,14 +2373,13 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ isRencontreSpeciale() { // Gestion queue/souffle 'Mauvaise Rencontre en Perpective' let addMsg = ""; - let rencSpecial = this.data.items.find(item => EffetsDraconiques.isMauvaiseRencontre(item)); + let rencSpecial = EffetsDraconiques.mauvaiseRencontre(this); if (rencSpecial) { - rencSpecial = Misc.data(rencSpecial); // To keep it if (rencSpecial.type != 'souffle') { - this.deleteEmbeddedDocuments('Item', [rencSpecial._id]); // Suppression dans la liste des queues + this.deleteEmbeddedDocuments('Item', [rencSpecial.id]); // Suppression dans la liste des queues addMsg = " La queue a été supprimée de votre fiche automatiquement"; } else { - addMsg = " Vous devez gérer manuellement le décompte de mauvaises rencontres manuellement."; + addMsg = " Vous devez gérer manuellement le décompte de mauvaises rencontres."; } ChatMessage.create({ content: "Vous êtes sous le coup d'une Mauvaise Rencontre en Persective." + addMsg, @@ -3138,7 +3137,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ countMonteeLaborieuse() { // Return +1 par queue/ombre/souffle Montée Laborieuse présente - let countMonteeLaborieuse = this.filterItemsData(it => EffetsDraconiques.isMonteeLaborieuse(it)).length; + let countMonteeLaborieuse = EffetsDraconiques.countMonteeLaborieuse(this); if (countMonteeLaborieuse > 0) { ChatMessage.create({ content: `Vous êtes sous le coup d'une Montée Laborieuse : vos montées en TMR coûtent ${countMonteeLaborieuse} Point de Rêve de plus.`, diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index e8a043c4..5185b0e2 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -589,7 +589,7 @@ export class RdDTMRDialog extends Dialog { maitrise: { verbe: 'maîtriser', action: 'Maîtriser le fleuve' } } rollData.double = EffetsDraconiques.isDoubleResistanceFleuve(this.actor) ? true : undefined, - rollData.competence.data.defaut_carac = 'reve-actuel'; + rollData.competence.data.defaut_carac = 'reve-actuel'; await this._rollMaitriseCaseHumide(rollData); } } diff --git a/module/tmr/effets-draconiques.js b/module/tmr/effets-draconiques.js index a8cabd23..7236b40c 100644 --- a/module/tmr/effets-draconiques.js +++ b/module/tmr/effets-draconiques.js @@ -92,43 +92,10 @@ export class EffetsDraconiques { static isPresentCite(caseTMR, coord) { return EffetsDraconiques.presentCites.isCase(caseTMR, coord); } - /* -------------------------------------------- */ - static isMauvaiseRencontre(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('mauvaise rencontre')); - } - - static isMonteeLaborieuse(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('montée laborieuse')); - } /* -------------------------------------------- */ - static isFermetureCite(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.fermetureCites.match(it)); - } - - static isPontImpraticable(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.pontImpraticable.match(it)); - } - - static isDoubleResistanceFleuve(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('résistance du fleuve')); - } - - static isPeage(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('péage')); - } - - static isPeriple(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.periple.match(it)); - } - - static isDesorientation(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.desorientation.match(it)); // TODO - } - - /* -------------------------------------------- */ - static isSortImpossible(item) { - return EffetsDraconiques.isMatching(item, it => + static isSortImpossible(actor) { + return actor.data.items.find(it => EffetsDraconiques.conquete.match(it) || EffetsDraconiques.periple.match(it) || EffetsDraconiques.urgenceDraconique.match(it) || @@ -136,57 +103,57 @@ export class EffetsDraconiques { ); } - static isSortReserveImpossible(item) { - return EffetsDraconiques.isMatching(item, it => + static isSortReserveImpossible(actor) { + return actor.data.items.find(it => EffetsDraconiques.conquete.match(it) || EffetsDraconiques.periple.match(it) || EffetsDraconiques.pelerinage.match(it) ); } - static isConquete(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.conquete.match(it)); + static isDonDoubleReve(actor) { + return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name == 'Don de double-rêve'); } - static isPelerinage(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.pelerinage.match(it)); - } - - static countInertieDraconique(item) { - return EffetsDraconiques.count(item, it => Draconique.isQueueDragon(it) && it.name.toLowerCase().includes('inertie draconique')); - } - - static isUrgenceDraconique(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.urgenceDraconique.match(it)); - } - - /* -------------------------------------------- */ - static isDonDoubleReve(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name == 'Don de double-rêve'); - } - - static isConnaissanceFleuve(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes('connaissance du fleuve')); - } - - static isReserveEnSecurite(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' en sécurité')); - } - - static isDeplacementAccelere(item) { - item = Misc.data(item); - return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' déplacement accéléré')); - } - - static isMatching(item, matcher) { - return EffetsDraconiques.toItems(item).find(matcher); - } - static count(item, matcher) { - return EffetsDraconiques.toItems(item).filter(matcher).length; + static isConnaissanceFleuve(actor) { + return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes('connaissance du fleuve')); } - static toItems(item) { - return (item?.documentName === 'Actor') ? item.data.items : (item?.documentName === 'Item') ? [Misc.data(item)] : []; + static isReserveEnSecurite(actor) { + return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' en sécurité')); } + static isDeplacementAccelere(actor) { + return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' déplacement accéléré')); + } + + static isDoubleResistanceFleuve(actor) { + return actor.data.items.find(it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('résistance du fleuve')); + } + + static countInertieDraconique(actor) { + return actor.data.items.filter(it => Draconique.isQueueDragon(it) && it.name.toLowerCase().includes('inertie draconique')).length; + } + + static countMonteeLaborieuse(actor) { + return actor.data.items.filter(it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('montée laborieuse')).length; + } + + static mauvaiseRencontre(actor) { + return actor.data.items.find(it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('mauvaise rencontre')); + } + + static isPontImpraticable(actor) { + return actor.data.items.find(it => EffetsDraconiques.pontImpraticable.match(it)); + } + + static isUrgenceDraconique(actor) { + return actor.data.items.find(it => EffetsDraconiques.urgenceDraconique.match(it)); + } + + static isPeage(actor) { + return actor.data.items.find(it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('péage')); + } + + } \ No newline at end of file