Amélioration /tmrr

- support des mauvaises rencontres avec /tmrr Mauvaise
- recherche "intelligente": /tmrr ci pour lancer une rencontre en cité
This commit is contained in:
Vincent Vandemeulebrouck 2022-11-17 01:22:45 +01:00
parent 8b6abcc8bb
commit c8526a2270
2 changed files with 22 additions and 11 deletions

View File

@ -15,21 +15,15 @@ export class TMRRencontres {
* @param {*} forcedRoll * @param {*} forcedRoll
*/ */
static async rollRencontre(terrain, forcedRoll) { static async rollRencontre(terrain, forcedRoll) {
// TODO: recherche parmi les types de terrains + mauvaise, rejet si plusieurs choix terrain = TMRUtility.findTMRLike(terrain);
const codeTerrain = Grammar.toLowerCaseNoAccent(terrain); if (terrain == undefined) {
if (!terrain) { return undefined;
ChatMessage.create({
user: game.user.id,
whisper: [game.user.id],
content: "Un type de case doit être indiqué (par exemple sanctuaire, desert ou cité)"
});
return false;
} }
if (forcedRoll && (forcedRoll <= 0 || forcedRoll > 100)) { if (forcedRoll && (forcedRoll <= 0 || forcedRoll > 100)) {
forcedRoll = undefined; forcedRoll = undefined;
} }
const codeTerrain = Grammar.toLowerCaseNoAccent(terrain)
const table = await TMRRencontres.$buildTableRencontre(codeTerrain); const table = await TMRRencontres.$buildTableRencontre(codeTerrain);
const [selected, roll] = await TMRRencontres.$selectRencontre(codeTerrain, table, forcedRoll); const [selected, roll] = await TMRRencontres.$selectRencontre(codeTerrain, table, forcedRoll);
const rencontre = await TMRRencontres.createRencontre(selected.rencontre); const rencontre = await TMRRencontres.createRencontre(selected.rencontre);
@ -40,7 +34,7 @@ export class TMRRencontres {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async $buildTableRencontre(codeTerrain) { static async $buildTableRencontre(codeTerrain) {
let max = 0; let max = 0;
const items = await SystemCompendiums.getItems('rencontres'); const items = await SystemCompendiums.getItems('rencontres', 'rencontre');
const filtreMauvaise = codeTerrain == 'mauvaise' ? it => it.system.mauvaiseRencontre : it => !it.system.mauvaiseRencontre; const filtreMauvaise = codeTerrain == 'mauvaise' ? it => it.system.mauvaiseRencontre : it => !it.system.mauvaiseRencontre;
const rencontres = items.filter(it => it.type == 'rencontre') const rencontres = items.filter(it => it.type == 'rencontre')
.filter(filtreMauvaise) .filter(filtreMauvaise)

View File

@ -286,6 +286,23 @@ export class TMRUtility {
const tmr = TMRMapping[coord]; const tmr = TMRMapping[coord];
return Grammar.articleDetermine(tmr.type) + ' ' + tmr.label; return Grammar.articleDetermine(tmr.type) + ' ' + tmr.label;
} }
static findTMRLike(type, options = {inclusMauvaise:true}) {
const choix = [...Object.values(TMRType)]
if (options.inclusMauvaise){
choix.push({name: 'Mauvaise'});
}
const selection = Misc.findAllLike(type, choix).map(it => it.name);
if (selection.length == 0) {
ui.notifications.warn(`Un type de TMR doit être indiqué, '${type}' n'est pas trouvé dans ${choix}`);
return undefined;
}
if (selection.length > 1) {
ui.notifications.warn(`Plusieurs types de TMR pourraient correspondre à '${type}': ${selection}`);
return undefined;
}
return selection[0];
}
static typeTmrName(type) { static typeTmrName(type) {
return Misc.upperFirst(TMRType[Grammar.toLowerCaseNoAccent(type)].name); return Misc.upperFirst(TMRType[Grammar.toLowerCaseNoAccent(type)].name);