From 65c90c5bd449fb88d3e1e9106dfbdef19891abcf Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Thu, 25 Mar 2021 10:27:33 +0100 Subject: [PATCH] Fix /rdd [carac] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - en cas de carac exact (reve), choisir cette caractéristique (pas de message par rapport à reve-actuel) - support /rdd odorat-gout --- module/actor.js | 60 +++++++++------------------------------ module/item-competence.js | 14 ++++----- module/rdd-carac.js | 23 +++++++++++++++ 3 files changed, 44 insertions(+), 53 deletions(-) diff --git a/module/actor.js b/module/actor.js index a01c6909..95e599d5 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1960,7 +1960,7 @@ export class RdDActor extends Actor { ui.notifications.warn(`${this.name} n'a pas de caractéristique correspondant à ${caracName}`) return; } - const competence = this.getCompetence(compName); + const competence = this.getCompetence(compName); if (compName && !competence) { ui.notifications.warn(`${this.name} n'a pas de compétence correspondant à ${compName}`) return; @@ -1970,14 +1970,14 @@ export class RdDActor extends Actor { caracValue: Number(carac.value), selectedCarac: carac, competence: competence, - finalLevel: (competence?.data.niveau??0) + diff, + finalLevel: (competence?.data.niveau ?? 0) + diff, diffLibre: diff, showDice: true, show: { title: "Jets multiples" } }; await RdDResolutionTable.rollData(rollData); this.appliquerExperience(rollData); - RdDResolutionTable.displayRollData( rollData, this ) + RdDResolutionTable.displayRollData(rollData, this) } /* -------------------------------------------- */ @@ -2294,7 +2294,7 @@ export class RdDActor extends Actor { if (destinee > 0) { ChatMessage.create({ content: `${this.name} a fait appel à la Destinée !` }); destinee--; - await this.updateCompteurValue( "destinee", destinee); + await this.updateCompteurValue("destinee", destinee); onSuccess(); } else { @@ -2345,7 +2345,7 @@ export class RdDActor extends Actor { } if (xpCarac > 0) { let carac = duplicate(Misc.templateData(this).carac); - let selectedCarac = RdDActor._findCaracByName(carac, caracName); + let selectedCarac = RdDCarac.findCarac(carac, caracName); if (!selectedCarac.derivee) { selectedCarac.xp = Misc.toInt(selectedCarac.xp) + xpCarac; await this.update({ "data.carac": carac }); @@ -2392,49 +2392,17 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - getCaracByName(caracName) { - switch (caracName) { - case 'reve-actuel': case 'Rêve actuel': - return { - label: 'Rêve actuel', - value: this.getReveActuel(), - type: "number" - }; - case 'chance-actuelle': case 'Chance actuelle': - return { - label: 'Chance actuelle', - value: this.getChanceActuel(), - type: "number" - }; - } - return RdDActor._findCaracByName(Misc.templateData(this).carac, caracName); + getCaracAndActuel() { + let caracs = { + 'reve-actuel': { label: 'Rêve actuel', value: this.getReveActuel(), type: "number" }, + 'chance-actuelle': { label: 'Chance actuelle', value: this.getChanceActuel(), type: "number" } + }; + mergeObject(caracs, Misc.templateData(this).carac); + return caracs } - /* -------------------------------------------- */ - static _findCaracByName(carac, name) { - name = Grammar.toLowerCaseNoAccent(name); - switch (name) { - case 'reve-actuel': case 'rêve actuel': - return carac.reve; - case 'chance-actuelle': case 'chance actuelle': - return carac.chance; - } - const keys = Object.entries(carac) - .filter(it => it[0].includes(name) || Grammar.toLowerCaseNoAccent(it[0]).includes(name)) - .map(it => it[0]); - if (keys.length>1){ - const names = keys.reduce((a, b) => `${a}
${b}`); - ui.notifications.info(`Plusieurs caractéristiques possibles:
${names}
La première sera choisie.`); - } - if (keys.length>0){ - return carac[keys[0]]; - } - // for (const [key, value] of Object.entries(carac)) { - // if (key.includes(name) || Grammar.toLowerCaseNoAccent(value.label).includes('name')) { - // return carac[key]; - // } - // } - return undefined; // Per default + getCaracByName(caracName) { + return RdDCarac.findCarac(this.getCaracAndActuel(), caracName); } /* -------------------------------------------- */ diff --git a/module/item-competence.js b/module/item-competence.js index dacf1b9f..e65ad8a2 100644 --- a/module/item-competence.js +++ b/module/item-competence.js @@ -191,14 +191,14 @@ export class RdDItemCompetence extends Item { return undefined; } let competence = competences.find(it => Grammar.toLowerCaseNoAccent(it.name) == name); - if (!competence) { - competence = competences[0]; - if (competences.length>1) { - const names = competences.map(it => it.name).reduce((a, b) => `${a}
${b}`); - ui.notifications.info(`Plusieurs compétences possibles:
${names}
La première sera choisie: ${competence.name}`); - } + if (competence) { + return competence; } - return competence; + if (competences.length>1) { + const names = competences.map(it => it.name).reduce((a, b) => `${a}
${b}`); + ui.notifications.info(`Plusieurs compétences possibles:
${names}
La première sera choisie: ${competences[0].name}`); + } + return competences[0]; } /* -------------------------------------------- */ diff --git a/module/rdd-carac.js b/module/rdd-carac.js index 6dbe169c..77d41ff4 100644 --- a/module/rdd-carac.js +++ b/module/rdd-carac.js @@ -38,6 +38,29 @@ const tableCaracDerivee = { export class RdDCarac { + /* -------------------------------------------- */ + static findCarac(carac, name) { + + const pairs = Object.entries(carac) + .filter(([key, value]) => key.includes(name) || Grammar.toLowerCaseNoAccent(value.label).includes(name)); + + let c = pairs.find(([key, value]) => key == name || Grammar.toLowerCaseNoAccent(value.label) == name); + if (c) { + return c[1]; + } + + pairs.sort((a, b) => a[0].length- b[0].length); + if (pairs.length > 0) { + c = pairs[0][1]; + if (pairs.length > 1) { + const labels = pairs.map(pair => pair[1].label).reduce((a, b) => `${a}
${b}`); + ui.notifications.info(`Plusieurs caractéristiques possibles:
${labels}
La première sera choisie: ${c.label}.`); + } + return c; + } + return undefined; + } + static isAgiliteOuDerivee(selectedCarac) { return selectedCarac?.label.match(/(Agilité|Dérobée)/); }