Fixes mineurs #583
@ -58,7 +58,7 @@ export class Environnement {
|
|||||||
const milieux = new Set(this.getMilieuxSettings());
|
const milieux = new Set(this.getMilieuxSettings());
|
||||||
const elements = await this.getElements(it => 1, it => ITEM_ENVIRONNEMENT_TYPES.includes(it.type));
|
const elements = await this.getElements(it => 1, it => ITEM_ENVIRONNEMENT_TYPES.includes(it.type));
|
||||||
elements.forEach(it => it.system.environnement.forEach(env => milieux.add(env.milieu)))
|
elements.forEach(it => it.system.environnement.forEach(env => milieux.add(env.milieu)))
|
||||||
return [...milieux];
|
return [...milieux].filter(env => env);
|
||||||
}
|
}
|
||||||
|
|
||||||
getMilieuxSettings() {
|
getMilieuxSettings() {
|
||||||
@ -66,22 +66,34 @@ export class Environnement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async findEnvironnementsLike(search) {
|
async findEnvironnementsLike(search) {
|
||||||
return (await this.milieux()).filter(it => Grammar.includesLowerCaseNoAccent(it, search));
|
const milieux = (await this.milieux()).filter(it => Grammar.includesLowerCaseNoAccent(it, search));
|
||||||
|
if (milieux.length > 1){
|
||||||
|
const milieuExact = milieux.find(it => Grammar.equalsInsensitive(it, search));
|
||||||
|
if (milieuExact) {
|
||||||
|
return [milieuExact];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return milieux;
|
||||||
}
|
}
|
||||||
|
|
||||||
async searchToChatMessage(search) {
|
async searchToChatMessage(milieux, typeName) {
|
||||||
const table = await this.buildEnvironnementTable(search);
|
const table = await this.buildEnvironnementTable(milieux);
|
||||||
await CompendiumTableHelpers.tableToChatMessage(table, 'Item', ITEM_ENVIRONNEMENT_TYPES, `ressources en "${search}"`);
|
await CompendiumTableHelpers.tableToChatMessage(table, 'Item', ITEM_ENVIRONNEMENT_TYPES, typeName);
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
async getRandom(search) {
|
async getRandom(milieux, typeName) {
|
||||||
const table = await this.buildEnvironnementTable(search);
|
const table = await this.buildEnvironnementTable(milieux);
|
||||||
return await CompendiumTableHelpers.getRandom(table, 'Item', ITEM_ENVIRONNEMENT_TYPES, undefined, `ressources en "${search}"`);
|
return await CompendiumTableHelpers.getRandom(table, 'Item', ITEM_ENVIRONNEMENT_TYPES, undefined, typeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
async buildEnvironnementTable(search) {
|
async buildEnvironnementTable(milieux) {
|
||||||
const itemRareteEnMilieu = item => item.system?.environnement.find(env => Grammar.includesLowerCaseNoAccent(env.milieu, search));
|
const filterMilieux = item => item.system?.environnement.filter(env => milieux.includes(env.milieu));
|
||||||
|
const itemRareteEnMilieu = item => {
|
||||||
|
const raretes = filterMilieux(item);
|
||||||
|
const frequenceMax = Math.max(raretes.map(env => env.frequence));
|
||||||
|
return raretes.find(env => env.frequence == frequenceMax);
|
||||||
|
}
|
||||||
const itemFrequenceEnMilieu = item => itemRareteEnMilieu(item)?.frequence ?? 0;
|
const itemFrequenceEnMilieu = item => itemRareteEnMilieu(item)?.frequence ?? 0;
|
||||||
const isPresentEnMilieu = item => itemFrequenceEnMilieu(item) > 0;
|
const isPresentEnMilieu = item => itemFrequenceEnMilieu(item) > 0;
|
||||||
return await this.table.buildTable(itemFrequenceEnMilieu, isPresentEnMilieu);
|
return await this.table.buildTable(itemFrequenceEnMilieu, isPresentEnMilieu);
|
||||||
|
@ -382,15 +382,20 @@ export class RdDCommands {
|
|||||||
async tableMilieu(msg, params, toChat) {
|
async tableMilieu(msg, params, toChat) {
|
||||||
if (params && params.length > 0) {
|
if (params && params.length > 0) {
|
||||||
const search = Misc.join(params, ' ');
|
const search = Misc.join(params, ' ');
|
||||||
const searches = game.system.rdd.environnement.findEnvironnementsLike(search);
|
const milieux = await game.system.rdd.environnement.findEnvironnementsLike(search);
|
||||||
if (searches.length == 0) {
|
if (milieux.length == 0) {
|
||||||
return RdDCommands._chatAnswer(msg, 'Aucun milieu correspondant à ' + search);
|
return RdDCommands._chatAnswer(msg, 'Aucun milieu correspondant à ' + search);
|
||||||
}
|
}
|
||||||
|
if (milieux.length > 1) {
|
||||||
|
ui.notifications.warn(`<strong>Plusieurs milieux correspondent à '${search}'</strong>:
|
||||||
|
<br><ul><li>${milieux.reduce(Misc.joining('</li><li>'))}</li></ul>`);
|
||||||
|
}
|
||||||
|
const tableName = `ressources en ${milieux.reduce(Misc.joining(', '))}`;
|
||||||
if (toChat == 'liste') {
|
if (toChat == 'liste') {
|
||||||
return await game.system.rdd.environnement.searchToChatMessage(search);
|
return await game.system.rdd.environnement.searchToChatMessage(milieux, tableName);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const row = await game.system.rdd.environnement.getRandom(search);
|
const row = await game.system.rdd.environnement.getRandom(milieux, tableName);
|
||||||
await CompendiumTableHelpers.tableRowToChatMessage(row, 'Item');
|
await CompendiumTableHelpers.tableRowToChatMessage(row, 'Item');
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user