export class RdDRollTables { /* -------------------------------------------- */ static async genericGetTableResult(tableName, toChat) { const pack = game.packs.get("foundryvtt-reve-de-dragon.tables-diverses"); const index = await pack.getIndex(); const entry = index.find(e => e.name === tableName); const table = await pack.getDocument(entry._id); const draw = await table.draw({ displayChat: toChat, rollMode: "gmroll"}); console.log("RdDRollTables", tableName, toChat, ":", draw); return draw; } /* -------------------------------------------- */ static async drawItemFromRollTable(tableName, toChat) { const draw = await RdDRollTables.genericGetTableResult(tableName, toChat); const drawnItemRef = draw.results.length > 0 ? draw.results[0] : undefined; if (drawnItemRef.data.collection) { console.log(drawnItemRef); const pack = game.packs.get(drawnItemRef.data.collection); return await pack.getDocument(drawnItemRef.data.resultId); } ui.notifications.warn("le tirage ne correspond pas à une entrée d'un Compendium") return drawnItemRef.text; } /* -------------------------------------------- */ static async drawTextFromRollTable(tableName, toChat) { const draw = await RdDRollTables.genericGetTableResult(tableName, toChat); const drawnItemRef = draw.results.length > 0 ? draw.results[0] : undefined; if (drawnItemRef.collection) { ui.notifications.warn("le tirage correspond à une entrée d'un Compendium, on attendait un texte") return await pack.getDocument(drawnItemRef.resultId); } return drawnItemRef.text; } /* -------------------------------------------- */ static async getCompetence(toChat = false) { return await RdDRollTables.drawItemFromRollTable("Détermination aléatoire de compétence", toChat); } /* -------------------------------------------- */ static async getSouffle(toChat = false) { return await RdDRollTables.drawItemFromRollTable("Souffles de Dragon", toChat); } /* -------------------------------------------- */ static async getQueue(toChat = false) { let queue = await RdDRollTables.drawItemFromRollTable("Queues de dragon", toChat); if (queue.name.toLowerCase().includes('lancinant') ) { return await RdDRollTables.getDesirLancinant(toChat); } if (queue.name.toLowerCase().includes('fixe') ) { return await RdDRollTables.getIdeeFixe(toChat); } return queue; } static async getDesirLancinant(toChat = false) { return await RdDRollTables.drawItemFromRollTable("Désirs lancinants", toChat); } static async getIdeeFixe(toChat = false) { return await RdDRollTables.drawItemFromRollTable("Idées fixes", toChat); } /* -------------------------------------------- */ static async getTeteHR(toChat = false) { return await RdDRollTables.drawItemFromRollTable("Têtes de Dragon pour haut-rêvants", toChat); } /* -------------------------------------------- */ static async getTete(toChat = false) { return await RdDRollTables.drawItemFromRollTable("Têtes de Dragon pour tous personnages", toChat); } /* -------------------------------------------- */ static async getOmbre(toChat = false) { return await RdDRollTables.drawItemFromRollTable("Ombre de Thanatos", toChat); } /* -------------------------------------------- */ static async getTarot(toChat = true) { return await RdDRollTables.drawItemFromRollTable("Tarot Draconique", toChat); } /* -------------------------------------------- */ static async getMaladresse(options = {toChat: false, arme: false}) { return await RdDRollTables.drawTextFromRollTable( options.arme ? "Maladresse armé" : "Maladresses non armé", options.toChat); } }