From b8ba30a5a361552690bd46865e6015ecab971383 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Fri, 26 Nov 2021 23:29:06 +0100 Subject: [PATCH] Commande /tmr --- module/misc.js | 11 ++++++++--- module/rdd-commands.js | 30 ++++++++++++++++++++---------- module/tmr-utility.js | 6 +++++- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/module/misc.js b/module/misc.js index 83918a00..4c553757 100644 --- a/module/misc.js +++ b/module/misc.js @@ -101,6 +101,11 @@ export class Misc { return [...new Set(array)]; } + static join(params, separator = '') { + return params.reduce((a, b) => a + separator + b); + } + + static data(it) { if (it instanceof Actor || it instanceof Item || it instanceof Combatant) { return it.data; @@ -129,7 +134,7 @@ export class Misc { return Misc.firstConnectedGM()?.id ?? game.user.id; } - static getActiveUser(id){ + static getActiveUser(id) { return game.users.entities.find(u => u.id == id && u.active); } @@ -143,7 +148,7 @@ export class Misc { static isUniqueConnectedGM() { return game.user.id == Misc.firstConnectedGM()?.id; } - + /* -------------------------------------------- */ static findPlayer(name) { return Misc.findFirstLike(name, game.users, { description: 'joueur' }); @@ -173,7 +178,7 @@ export class Misc { let single = subset.find(it => Grammar.toLowerCaseNoAccent(options.mapper(it)) == Grammar.toLowerCaseNoAccent(value)); if (!single) { single = subset[0]; - const choices = subset.map(it => options.mapper(it)).reduce((a, b) => `${a}
${b}`); + const choices = Misc.join(subset.map(it => options.mapper(it)), '
'); options.info(`Plusieurs choix de ${options.description}s possibles:
${choices}
Le premier sera choisi: ${mapToValue(single)}`); } return single; diff --git a/module/rdd-commands.js b/module/rdd-commands.js index ef2840b3..f11803f0 100644 --- a/module/rdd-commands.js +++ b/module/rdd-commands.js @@ -2,6 +2,7 @@ import { DialogCreateSigneDraconique } from "./dialog-create-signedraconique.js"; import { DialogStress } from "./dialog-stress.js"; +import { Grammar } from "./grammar.js"; import { RdDItemCompetence } from "./item-competence.js"; import { Misc } from "./misc.js"; import { RdDCarac } from "./rdd-carac.js"; @@ -40,6 +41,11 @@ export class RdDCommands { descr: `Tire une case aléatoire des Terres médianes
/tmra forêt détermine une 'forêt' aléatoire
/tmra détermine une case aléatoire dans toutes les TMR` }); + rddCommands.registerCommand({ + path: ["/tmr"], func: (content, msg, params) => rddCommands.findTMR(msg, params), + descr: `Cherche où se trouve une case des Terres médianes +
/tmr? sordide indique que la cité Sordide est en D13 +
/tmr? foret donne la liste des TMR dont le nom contient "foret" (donc, toutes les forêts)` }); rddCommands.registerCommand({ path: ["/tmrr"], func: (content, msg, params) => rddCommands.getRencontreTMR(params), descr: `Détermine une rencontre dans un type de case @@ -80,7 +86,7 @@ export class RdDCommands {
/payer 10d permet d'envoyer un message pour payer 10 deniers` }); rddCommands.registerCommand({ - path: ["/astro"], func: (content, msg, params) => RdDUtility.afficherHeuresChanceMalchance(RdDCommands.toParamString(params)), + path: ["/astro"], func: (content, msg, params) => RdDUtility.afficherHeuresChanceMalchance(Misc.join(params, ' ')), descr: `Affiche les heures de chance et de malchance selon l'heure de naissance donnée en argument. Exemples pour l'heure de la Lyre:
/astro 7
/astro Lyre @@ -113,10 +119,6 @@ export class RdDCommands { this.commandsTable = {}; } - static toParamString(params) { - return params.length == 1 ? params[0] : params.reduce((a, b) => `${a} ${b}`, ''); - } - /* -------------------------------------------- */ registerCommand(command) { this._addCommand(this.commandsTable, command.path, '', command); @@ -251,7 +253,7 @@ export class RdDCommands { RdDRollResolutionTable.open(); } else { - let flatParams = params.reduce((a, b) => `${a} ${b}`); + let flatParams = Misc.join(params, ' '); const numericParams = flatParams.match(rddRollNumeric); if (numericParams) { const carac = Misc.toInt(numericParams[1]); @@ -272,7 +274,7 @@ export class RdDCommands { diff = 0; } const caracName = params[0]; - const compName = length > 1 ? params.slice(1, length).reduce((a, b) => `${a} ${b}`) : undefined; + const compName = length > 1 ? Misc.join(params.slice(1, length), ' ') : undefined; for (let actor of actors) { await actor.rollCaracCompetence(caracName, compName, diff); } @@ -314,6 +316,14 @@ export class RdDCommands { } } + async findTMR(msg, params) { + const flat = Grammar.toLowerCaseNoAccent(Misc.join(params)); + const found = TMRUtility.findTMR(flat); + if (found?.length > 0) { + return RdDCommands._chatAnswer(msg, `Les TMRs correspondant à '${flat}' sont:` + Misc.join(found.map(it => `
${it.coord}: ${it.label}`))); + } + return RdDCommands._chatAnswer(msg, 'Aucune TMR correspondant à ' + flat); + } /* -------------------------------------------- */ getCoutXpComp(msg, params) { @@ -359,7 +369,7 @@ export class RdDCommands { ui.notifications.warn("Seul le MJ est autorisé à utiliser la commande /stress"); return false; } - if (params.length == 0) { + if (params.length < 3) { DialogStress.distribuerStress(); } else { @@ -369,8 +379,8 @@ export class RdDCommands { return; } - let motif = params[1]; - let name = params[2]; + let motif = params.slice(1, params.length - 2); + let name = params[params.length - 1]; if (name == undefined) { for (let actor of game.actors) { actor.distribuerStress('stress', stress, motif); diff --git a/module/tmr-utility.js b/module/tmr-utility.js index 32d4015f..86cdea05 100644 --- a/module/tmr-utility.js +++ b/module/tmr-utility.js @@ -347,7 +347,7 @@ export class TMRUtility { return Grammar.articleDetermine(tmr.type) + ' ' + tmr.label; } - static typeTmrName(type){ + static typeTmrName(type) { return Misc.upperFirst(TMRType[Grammar.toLowerCaseNoAccent(type)].name); } static listSelectedTMR(typesTMR) { @@ -424,6 +424,10 @@ export class TMRUtility { return Object.values(TMRMapping).filter(filter); } + static findTMR(search) { + return TMRUtility.filterTMR(it => Grammar.toLowerCaseNoAccentNoSpace(it.label).match(search)); + } + static filterTMRCoord(filter) { return TMRUtility.filterTMR(filter).map(it => it.coord); }