Vincent Vandemeulebrouck
dca9505925
Pour permettre de masquer les informations sur les PNJs secondaires, et ne pas dévoiler le nom de l'acteur
110 lines
4.2 KiB
JavaScript
110 lines
4.2 KiB
JavaScript
import { CompendiumTable, CompendiumTableHelpers, SystemCompendiums } from "./settings/system-compendiums.js";
|
|
|
|
export class RdDRollTables {
|
|
|
|
/* -------------------------------------------- */
|
|
static async genericGetTableResult(tableName, toChat) {
|
|
let table = RdDRollTables.getWorldTable(tableName) ?? (await RdDRollTables.getSystemTable(tableName));
|
|
const draw = await table.draw({ displayChat: toChat, rollMode: "gmroll" });
|
|
return draw.results.length > 0 ? draw.results[0] : undefined;
|
|
}
|
|
|
|
static getWorldTable(tableName) {
|
|
return game.tables.find(table => table.name.toLowerCase() == tableName.toLowerCase());
|
|
}
|
|
|
|
static async getSystemTable(tableName) {
|
|
const pack = SystemCompendiums.getPack("tables-diverses");
|
|
const index = await pack.getIndex();
|
|
const entry = index.find(e => e.name === tableName);
|
|
return await pack.getDocument(entry._id);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static async drawItemFromRollTable(tableName, toChat = false) {
|
|
const drawResult = await RdDRollTables.genericGetTableResult(tableName, toChat);
|
|
const pack = game.packs.get(drawResult.documentCollection)
|
|
return await pack.getDocument(drawResult.documentId)
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static async drawTextFromRollTable(tableName, toChat) {
|
|
const drawResult = await RdDRollTables.genericGetTableResult(tableName, toChat);
|
|
return drawResult.text;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static async getCompetence(toChat = false) {
|
|
if (toChat == 'liste') {
|
|
return await RdDRollTables.listOrRoll('competences', 'Item', ['competence'], toChat, it => 1);
|
|
}
|
|
else {
|
|
return await RdDRollTables.drawItemFromRollTable("Détermination aléatoire de compétence", toChat);
|
|
}
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static async getSouffle(toChat = false) {
|
|
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);
|
|
}
|
|
|
|
static async getDesirLancinant(toChat = false) {
|
|
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,
|
|
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);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static async getTete(toChat = false) {
|
|
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);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static async getTarot(toChat = true) {
|
|
return await RdDRollTables.listOrRoll('tarot-draconique', 'Item', ['tarot'], toChat);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
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);
|
|
}
|
|
const row = await table.getRandom(itemFrequence, filter);
|
|
if (row) {
|
|
await CompendiumTableHelpers.tableRowToChatMessage(row, type);
|
|
return row.document;
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static async getMaladresse(options = { toChat: false, arme: false }) {
|
|
return await RdDRollTables.drawTextFromRollTable(
|
|
options.arme ? "Maladresse armé" : "Maladresses non armé",
|
|
options.toChat);
|
|
}
|
|
|
|
}
|