Création du compendium Faune, Flore, Minéraux
- les tables d'environnement se basent sur ce seul compendium - les tables de compendiums peuvent chercher plusieurs types d'items - déplacement de la botanique - déplacement des sels alchimiques depuis l'équipement - modification de l'équipement de départ - modification des acteurs (lien vers compendium de l'item source)
This commit is contained in:
@ -26,18 +26,13 @@ const MILIEUX = [
|
||||
const ITEM_ENVIRONNEMENT_TYPES = [
|
||||
'herbe', 'ingredient'
|
||||
]
|
||||
const COMPENDIUMS_ENVIRONNEMENT = [
|
||||
{ type: 'Item', subType: 'herbe', compendium: 'botanique' },
|
||||
{ type: 'Item', subType: 'ingredient', compendium: 'botanique' },
|
||||
{ type: 'Item', subType: 'ingredient', compendium: 'equipement' },
|
||||
]
|
||||
|
||||
export class Environnement {
|
||||
|
||||
static init() {
|
||||
game.settings.register(SYSTEM_RDD, SETTINGS_LISTE_MILIEUX, {
|
||||
name: "Liste des milieux proposés",
|
||||
hint: "Liste des noms de milieux proposés, séparés par des virgules",
|
||||
hint: "Liste des milieux proposés pour la faune&flore, séparés par des virgules",
|
||||
scope: "world",
|
||||
config: true,
|
||||
default: MILIEUX.reduce(Misc.joining(',')),
|
||||
@ -63,7 +58,7 @@ export class Environnement {
|
||||
const milieux = new Set(this.getMilieuxSettings());
|
||||
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)))
|
||||
return [...milieux];
|
||||
return [...milieux];
|
||||
}
|
||||
|
||||
getMilieuxSettings() {
|
||||
@ -76,32 +71,25 @@ export class Environnement {
|
||||
|
||||
async searchToChatMessage(search) {
|
||||
const table = await this.buildEnvironnementTable(search);
|
||||
await CompendiumTableHelpers.tableToChatMessage(table, 'Item', 'herbe', 'Ressource naturelle');
|
||||
await CompendiumTableHelpers.tableToChatMessage(table, 'Item', ITEM_ENVIRONNEMENT_TYPES, `ressources en "${search}"`);
|
||||
return true
|
||||
}
|
||||
|
||||
async getRandom(search) {
|
||||
const table = await this.buildEnvironnementTable(search);
|
||||
const row = await CompendiumTableHelpers.getRandom(table, 'Item', 'herbe', undefined, 'Ressource naturelle');
|
||||
return row
|
||||
return await CompendiumTableHelpers.getRandom(table, 'Item', ITEM_ENVIRONNEMENT_TYPES, undefined, `ressources en "${search}"`);
|
||||
}
|
||||
|
||||
async buildEnvironnementTable(search) {
|
||||
const itemRareteEnMilieu = item => item.system?.environnement.find(env => Grammar.includesLowerCaseNoAccent(env.milieu, search));
|
||||
const itemFrequenceEnMilieu = item => itemRareteEnMilieu(item)?.frequence ?? 0;
|
||||
const isPresentEnMilieu = item => itemFrequenceEnMilieu(item) > 0;
|
||||
let elements = await this.getElements(itemFrequenceEnMilieu, isPresentEnMilieu);
|
||||
return CompendiumTableHelpers.buildTable(elements, itemFrequenceEnMilieu);
|
||||
return await this.table.buildTable(itemFrequenceEnMilieu, isPresentEnMilieu);
|
||||
}
|
||||
|
||||
|
||||
async getElements(itemFrequence, filter) {
|
||||
let elements = [];
|
||||
for (let c of COMPENDIUMS_ENVIRONNEMENT) {
|
||||
const fromCompendium = await c.table.getContent(itemFrequence, filter);
|
||||
elements = elements.concat(fromCompendium);
|
||||
}
|
||||
return elements;
|
||||
return await this.table.getContent(itemFrequence, filter);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ export class RdDHerbes extends Item {
|
||||
}
|
||||
|
||||
static async listCategorieHerbes(categorie) {
|
||||
const herbes = await SystemCompendiums.getWorldOrCompendiumItems('herbe', 'botanique');
|
||||
const herbes = await SystemCompendiums.getWorldOrCompendiumItems('herbe', 'faune-flore-mineraux');
|
||||
return herbes.filter(it => Grammar.equalsInsensitive(it.system.categorie, categorie));
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@ export class RdDRollTables {
|
||||
/* -------------------------------------------- */
|
||||
static async getCompetence(toChat = false) {
|
||||
if (toChat == 'liste') {
|
||||
return await RdDRollTables.listOrRoll('competences', 'Item', 'competence', toChat, it => 1);
|
||||
return await RdDRollTables.listOrRoll('competences', 'Item', ['competence'], toChat, it => 1);
|
||||
}
|
||||
else {
|
||||
return await RdDRollTables.drawItemFromRollTable("Détermination aléatoire de compétence", toChat);
|
||||
@ -46,49 +46,49 @@ export class RdDRollTables {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async getSouffle(toChat = false) {
|
||||
return await RdDRollTables.listOrRoll('souffles-de-dragon', 'Item', 'souffle', toChat);
|
||||
return await RdDRollTables.listOrRoll('souffles-de-dragon', 'Item', ['souffle'], toChat);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async getQueue(toChat = false) {
|
||||
return await RdDRollTables.listOrRoll('queues-de-dragon', 'Item', 'queue', toChat);
|
||||
return await RdDRollTables.listOrRoll('queues-de-dragon', 'Item', ['queue'], toChat);
|
||||
}
|
||||
|
||||
static async getDesirLancinant(toChat = false) {
|
||||
return await RdDRollTables.listOrRoll('queues-de-dragon', 'Item', 'queue', toChat,
|
||||
return await RdDRollTables.listOrRoll('queues-de-dragon', 'Item', ['queue'], toChat,
|
||||
it => it.system.frequence,
|
||||
it => it.system.categorie == 'lancinant');
|
||||
}
|
||||
|
||||
static async getIdeeFixe(toChat = false) {
|
||||
return await RdDRollTables.listOrRoll('queues-de-dragon', 'Item', 'queue', toChat,
|
||||
return await RdDRollTables.listOrRoll('queues-de-dragon', 'Item', ['queue'], toChat,
|
||||
it => it.system.frequence,
|
||||
it => it.system.categorie == 'ideefixe');
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async getTeteHR(toChat = false) {
|
||||
return await RdDRollTables.listOrRoll('tetes-de-dragon-pour-haut-revants', 'Item', 'tete', toChat);
|
||||
return await RdDRollTables.listOrRoll('tetes-de-dragon-pour-haut-revants', 'Item', ['tete'], toChat);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async getTete(toChat = false) {
|
||||
return await RdDRollTables.listOrRoll('tetes-de-dragon-pour-tous-personnages', 'Item', 'tete', toChat);
|
||||
return await RdDRollTables.listOrRoll('tetes-de-dragon-pour-tous-personnages', 'Item', ['tete'], toChat);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async getOmbre(toChat = false) {
|
||||
return await RdDRollTables.listOrRoll('ombres-de-thanatos', 'Item', 'ombre', toChat);
|
||||
return await RdDRollTables.listOrRoll('ombres-de-thanatos', 'Item', ['ombre'], toChat);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async getTarot(toChat = true) {
|
||||
return await RdDRollTables.listOrRoll('tarot-draconique', 'Item', 'tarot', toChat);
|
||||
return await RdDRollTables.listOrRoll('tarot-draconique', 'Item', ['tarot'], toChat);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async listOrRoll(compendium, type, subType, toChat, itemFrequence = it => it.system.frequence, filter = it => true) {
|
||||
const table = new CompendiumTable(compendium, type, subType);
|
||||
static async listOrRoll(compendium, type, subTypes, toChat, itemFrequence = it => it.system.frequence, filter = it => true) {
|
||||
const table = new CompendiumTable(compendium, type, subTypes);
|
||||
if (toChat == 'liste') {
|
||||
return await table.toChatMessage(itemFrequence, filter);
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ const CONFIGURABLE_COMPENDIUMS = {
|
||||
'rencontres': { label: "Rencontres dans les TMR", type: "Item" },
|
||||
'tetes-de-dragon-pour-haut-revants': { label: "Têtes de dragons (haut-rêvant)", type: "Item" },
|
||||
'tetes-de-dragon-pour-tous-personnages': { label: "Têtes de dragons (tous)", type: "Item" },
|
||||
'botanique': { label: "Herbes & plantes", type: "Item" },
|
||||
'faune-flore-mineraux': { label: "Herbes & plantes", type: "Item" },
|
||||
'equipement': { label: "Equipements", type: "Item" },
|
||||
}
|
||||
|
||||
@ -172,17 +172,17 @@ export class SystemCompendiums extends FormApplication {
|
||||
*/
|
||||
export class CompendiumTable {
|
||||
|
||||
constructor(compendium, type, subType, sorting = undefined) {
|
||||
constructor(compendium, type, subTypes, sorting = undefined) {
|
||||
this.compendium = compendium;
|
||||
this.type = type;
|
||||
this.subType = subType;
|
||||
this.subTypes = subTypes;
|
||||
this.sorting = sorting ?? Misc.ascending(it => it.name);
|
||||
}
|
||||
|
||||
async getContent(itemFrequence = it => it.system.frequence, filter = it => true) {
|
||||
return await SystemCompendiums.getContent(this.compendium,
|
||||
this.type,
|
||||
it => this.subType == it.type && filter(it),
|
||||
it => this.subTypes.includes(it.type) && filter(it),
|
||||
itemFrequence,
|
||||
this.sorting);
|
||||
}
|
||||
@ -194,12 +194,12 @@ export class CompendiumTable {
|
||||
|
||||
async getRandom(itemFrequence = it => it.system.frequence, filter = it => true, forcedRoll = undefined) {
|
||||
const table = await this.buildTable(itemFrequence, filter);
|
||||
return await CompendiumTableHelpers.getRandom(table, this.type, this.subType, forcedRoll, SystemCompendiums.getCompendium(compendium));
|
||||
return await CompendiumTableHelpers.getRandom(table, this.type, this.subTypes, forcedRoll, SystemCompendiums.getCompendium(compendium));
|
||||
}
|
||||
|
||||
async toChatMessage(itemFrequence = it => it.system.frequence, filter = it => true, typeName = undefined) {
|
||||
const table = await this.buildTable(itemFrequence, filter);
|
||||
await CompendiumTableHelpers.tableToChatMessage(table, this.type, this.subType, typeName);
|
||||
await CompendiumTableHelpers.tableToChatMessage(table, this.type, this.subTypes, typeName);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -220,9 +220,9 @@ export class CompendiumTableHelpers {
|
||||
});
|
||||
}
|
||||
|
||||
static async getRandom(table, type, subType, forcedRoll = undefined, localisation = undefined) {
|
||||
static async getRandom(table, type, subTypes, forcedRoll = undefined, localisation = undefined) {
|
||||
if (table.length == 0) {
|
||||
ui.notifications.warn(`Aucun ${Misc.typeName(type, subType)} trouvé dans ${localisation ?? ' les compendiums'}`);
|
||||
ui.notifications.warn(`Aucun ${Misc.typeName(type, subTypes[0])} trouvé dans ${localisation ?? ' les compendiums'}`);
|
||||
return undefined;
|
||||
}
|
||||
return await CompendiumTableHelpers.selectRow(table, forcedRoll);
|
||||
@ -270,10 +270,10 @@ export class CompendiumTableHelpers {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async tableToChatMessage(table, type, subType, typeName = undefined) {
|
||||
static async tableToChatMessage(table, type, subTypes, typeName = undefined) {
|
||||
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table.html', {
|
||||
img: RdDItem.getDefaultImg(subType),
|
||||
typeName: typeName ?? Misc.typeName(type, subType),
|
||||
img: RdDItem.getDefaultImg(subTypes[0]),
|
||||
typeName: typeName ?? Misc.typeName(type, subTypes[0]),
|
||||
table,
|
||||
isGM: game.user.isGM,
|
||||
});
|
||||
|
Reference in New Issue
Block a user