diff --git a/module/actor.js b/module/actor.js index a4ded765..ac9edb5c 100644 --- a/module/actor.js +++ b/module/actor.js @@ -2403,8 +2403,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async checkSoufflePeage(tmr) { - let peage = this.data.items.find(item => EffetsDraconiques.isPeage(item)); - if (peage && (tmr.type == 'pont' || tmr.type == 'cite')) { + if ((tmr.type == 'pont' || tmr.type == 'cite') && EffetsDraconiques.isPeage(actor)) { await this.reveActuelIncDec(-1); ChatMessage.create({ content: "Vous êtes sous le coup d'un Péage : l'entrée sur cette case vous a coûté 1 Point de Rêve (déduit automatiquement).", diff --git a/module/grammar.js b/module/grammar.js index 6bb642b4..a8bd17a6 100644 --- a/module/grammar.js +++ b/module/grammar.js @@ -19,6 +19,10 @@ export class Grammar { return word.match(/^[aeiouy]/i) } + + static includesLowerCaseNoAccent(value, content) { + return Grammar.toLowerCaseNoAccent(value).includes(Grammar.toLowerCaseNoAccent(content)); + } /* -------------------------------------------- */ static toLowerCaseNoAccent(words) { return words?.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "") ?? words; diff --git a/module/tmr/effets-draconiques.js b/module/tmr/effets-draconiques.js index 7236b40c..4d6463f6 100644 --- a/module/tmr/effets-draconiques.js +++ b/module/tmr/effets-draconiques.js @@ -16,7 +16,7 @@ import { Conquete } from "./conquete.js"; import { Pelerinage } from "./pelerinage.js"; import { Periple } from "./periple.js"; import { UrgenceDraconique } from "./urgence-draconique.js"; -import { Misc } from "../misc.js"; +import { Grammar } from "../grammar.js"; export class EffetsDraconiques { @@ -111,36 +111,42 @@ export class EffetsDraconiques { ); } + static filterItems(actor, filter, name) { + return actor.data.items.filter(filter) + .filter(it => Grammar.includesLowerCaseNoAccent(it.name, name)); + } + static isDonDoubleReve(actor) { - return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name == 'Don de double-rêve'); + return EffetsDraconiques.filterItems(actor, Draconique.isTeteDragon, 'Don de double-rêve').length>0; } static isConnaissanceFleuve(actor) { - return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes('connaissance du fleuve')); + return EffetsDraconiques.filterItems(actor, Draconique.isTeteDragon, 'connaissance du fleuve').length>0; } static isReserveEnSecurite(actor) { - return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' en sécurité')); + return EffetsDraconiques.filterItems(actor, Draconique.isTeteDragon, 'réserve en sécurité').length>0; } static isDeplacementAccelere(actor) { - return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' déplacement accéléré')); + return EffetsDraconiques.filterItems(actor, Draconique.isTeteDragon, ' déplacement accéléré').length>0; } static isDoubleResistanceFleuve(actor) { - return actor.data.items.find(it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('résistance du fleuve')); + return EffetsDraconiques.filterItems(actor, Draconique.isSouffleDragon, 'résistance du fleuve').length>0; } static countInertieDraconique(actor) { - return actor.data.items.filter(it => Draconique.isQueueDragon(it) && it.name.toLowerCase().includes('inertie draconique')).length; + return EffetsDraconiques.filterItems(actor, Draconique.isQueueDragon, 'inertie draconique').length; } static countMonteeLaborieuse(actor) { - return actor.data.items.filter(it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('montée laborieuse')).length; + return EffetsDraconiques.filterItems(actor, Draconique.isQueueSouffle, 'montée laborieuse').length; } static mauvaiseRencontre(actor) { - return actor.data.items.find(it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('mauvaise rencontre')); + const mauvaisesRencontres = EffetsDraconiques.filterItems(actor, Draconique.isQueueSouffle, 'mauvaise rencontre'); + return mauvaisesRencontres.length>0 ? mauvaisesRencontres[0] : undefined; } static isPontImpraticable(actor) { @@ -152,7 +158,7 @@ export class EffetsDraconiques { } static isPeage(actor) { - return actor.data.items.find(it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('péage')); + return EffetsDraconiques.filterItems(actor, Draconique.isSouffleDragon, 'péage').length > 0; }