From 0d70d9ef839af4a7c79b0a7f28674c9106811607 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Thu, 28 Apr 2022 00:17:40 +0200 Subject: [PATCH 1/3] =?UTF-8?q?Fix:=20drag&drop=20de=20tokens=20de=20v?= =?UTF-8?q?=C3=A9hicule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Erreur lors de l'update de l'acteur: You must provide an _id for every object in the update data Array. ... at async RdDActor.updateAttributeValue (actor.js:1079:5) at async RdDActor.computeMalusArmure (actor.js:1352:7) at async RdDActor.computeEncombrementTotalEtMalusArmure (actor.js:1333:7) --- module/actor-vehicule-sheet.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/module/actor-vehicule-sheet.js b/module/actor-vehicule-sheet.js index 1d39f106..43b20810 100644 --- a/module/actor-vehicule-sheet.js +++ b/module/actor-vehicule-sheet.js @@ -68,6 +68,9 @@ export class RdDActorVehiculeSheet extends ActorSheet { return formData; } + async computeMalusArmure() { + // pas de malus armure + } /* -------------------------------------------- */ async _onDropItem(event, dragData) { const destItemId = $(event.target)?.closest('.item').attr('data-item-id'); From 557808475465980b50e4b50a07af3736680e7d4b Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Wed, 11 May 2022 00:23:27 +0200 Subject: [PATCH 2/3] Fix: effets draconiques incorrects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * double résistance du fleuve pour tous? * connaissance du fleuve pour tous * réserve en sécurité pour tous * impossible de déclencher un sort * montée accélérée pour tous etc --- module/actor.js | 3 +-- module/grammar.js | 4 ++++ module/tmr/effets-draconiques.js | 26 ++++++++++++++++---------- 3 files changed, 21 insertions(+), 12 deletions(-) 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; } From 90d6cd15332b1ac3d1d1d429cb82c69f6fae99a6 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Wed, 11 May 2022 00:24:52 +0200 Subject: [PATCH 3/3] =?UTF-8?q?Exception=20sur=20Probl=C3=A8me=20de=20monn?= =?UTF-8?q?aies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le but est d'empêcher un appel en boucle si ça arrive. En temps normal, on ne devrait jamais arriver dans ce cas. --- module/actor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/actor.js b/module/actor.js index ac9edb5c..53340194 100644 --- a/module/actor.js +++ b/module/actor.js @@ -3587,7 +3587,7 @@ export class RdDActor extends Actor { let monnaies = Monnaie.filtrerMonnaies(this.data.items); if (monnaies.length < 4) { ui.notifications.error("Problème de monnaies manquantes, impossible de payer correctement!") - return 0; + throw "Problème de monnaies manquantes, impossible de payer correctement!"; } return monnaies.map(m => Misc.templateData(m)) .map(tpl => tpl.valeur_deniers * Number(tpl.quantite))