From 22ddb94f97970444bbd0f87208d210963abd6391 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Thu, 17 Dec 2020 02:20:03 +0100 Subject: [PATCH] Ajout des queues et souffles automatique --- module/actor.js | 48 +++++++++++++++++++++------------------- module/rdd-rolltables.js | 26 ++++++++++++++-------- module/rdd-tmr-dialog.js | 3 +-- module/tmr-utility.js | 12 ---------- 4 files changed, 43 insertions(+), 46 deletions(-) diff --git a/module/actor.js b/module/actor.js index 225b0cdd..e0a26280 100644 --- a/module/actor.js +++ b/module/actor.js @@ -444,12 +444,10 @@ export class RdDActor extends Actor { message += "
Vous gagnez une Tête de dragon: " + tete; } if (roll.isEchec) { - message += "
Vous subissez une Queue de Dragon"; - this.ajouterQueue(); + message += "
Vous subissez une Queue de Dragon: " + await this.ajouterQueue(); } if (roll.isETotal) { - message += "
A cause de votre échec total, vous subissez une deuxième Queue de Dragon !" - this.ajouterQueue(); + message += "
A cause de votre échec total, vous subissez une deuxième Queue de Dragon: " + await this.ajouterQueue(); } return message; } @@ -694,7 +692,7 @@ export class RdDActor extends Actor { let total = new Roll("1d20").roll().total; if ( total <= refoulement.value ) { refoulement.value = 0; - this.ajouterSouffle(); + this.ajouterSouffle({chat: true}); ret = "souffle"; } @@ -703,17 +701,20 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - ajouterSouffle() { + async ajouterSouffle(options = {chat : false}) { let souffle = RdDRollTables.getSouffle(); - // ChatMessage.create({ - // title: "Souffle de Dragon", - // content: this.name + " subit un Souffle de Dragon : " + souffle.name - // }); - // this.actor.createOwnedItem(souffle); + await this.createOwnedItem(souffle); + if (options.chat){ + ChatMessage.create({ + whisper: ChatUtility.getWhisperRecipientsAndGMs( this.name ), + content: this.name + " subit un Souffle de Dragon : " + souffle.name + }); + } + return souffle; } /* -------------------------------------------- */ - async ajouterQueue() { + async ajouterQueue(options = {chat : false}) { // TODO: Déterminer si Thanatos a été utilisé? => laisser le joueur ne pas choisir Thanatos => choisir sa voie? let utiliseThanatos = false; let queue; @@ -724,17 +725,14 @@ export class RdDActor extends Actor { else { queue = await RdDRollTables.getQueue(); } - /* - // TODO: convertir la queue obtenue en nouvel item ... - // ou bien l'ajouter à la liste spécifique => this.data.data.reve.queues - this.createOwnedItem(queue); - - ChatMessage.create({ - content: this.name + " subit un Queue de Dragon : " + queue.name - }); - - return queue.name; - */ + await this.createOwnedItem(queue); + if (options.chat){ + ChatMessage.create({ + whisper: ChatUtility.getWhisperRecipientsAndGMs( this.name ), + content: this.name + " subit une Queue de Dragon : " + queue.name + }); + } + return queue; } /* -------------------------------------------- */ @@ -1313,6 +1311,10 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async rollCompetence( name ) { + if (name == 'queue') { + await this.ajouterQueue({chat: true}); + return; + } let rollData = { competence: duplicate(this.getCompetence(name)), needSignificative : !this.isEntiteCauchemar() && this.data.data.sante.sonne.value diff --git a/module/rdd-rolltables.js b/module/rdd-rolltables.js index 0ab3b7c9..3e2c3ea2 100644 --- a/module/rdd-rolltables.js +++ b/module/rdd-rolltables.js @@ -6,38 +6,46 @@ export class RdDRollTables { const index = await pack.getIndex(); const entry = index.find(e => e.name === tableName); const table = await pack.getEntity(entry._id); - const result = await table.draw({ displayChat: toChat }); - console.log("RdDRollTables", tableName, toChat, ":", result); - return result; + const draw = await table.draw({ displayChat: toChat }); + console.log("RdDRollTables", tableName, toChat, ":", draw); + console.log("RdDRollTables", tableName, toChat, ":", draw.roll, draw.results); + return draw; } + /* -------------------------------------------- */ + static async drawItemFromRollTable(tableName, toChat) { + const draw = await RdDRollTables.genericGetTableResult(tableName, toChat); + const drawnItemRef = draw.results.length > 0 ? draw.results[0] : undefined; + const pack = game.packs.get(drawnItemRef.collection); + return await pack.getEntity(drawnItemRef.resultId); + } /* -------------------------------------------- */ static async getSouffle(toChat = true) { - return RdDRollTables.genericGetTableResult("Souffles de Dragon", toChat); + return await RdDRollTables.drawItemFromRollTable("Souffles de Dragon", toChat); } /* -------------------------------------------- */ static async getQueue(toChat = true) { - return RdDRollTables.genericGetTableResult("Queues de dragon", toChat); + return await RdDRollTables.drawItemFromRollTable("Queues de dragon", toChat); } /* -------------------------------------------- */ static async getTete(toChat = true) { - return RdDRollTables.genericGetTableResult("Têtes de Dragon pour haut-rêvants", toChat); + return await RdDRollTables.drawItemFromRollTable("Têtes de Dragon pour haut-rêvants", toChat); } /* -------------------------------------------- */ static async getTeteHR(toChat = true) { - return RdDRollTables.genericGetTableResult("Têtes de Dragon pour tous personnages", toChat); + return await RdDRollTables.drawItemFromRollTable("Têtes de Dragon pour tous personnages", toChat); } /* -------------------------------------------- */ static async getOmbre(toChat = true) { - return RdDRollTables.genericGetTableResult("Ombre de Thanatos", toChat); + return await RdDRollTables.drawItemFromRollTable("Ombre de Thanatos", toChat); } /* -------------------------------------------- */ static async getTarot(toChat = true) { - return RdDRollTables.genericGetTableResult("Tarot Draconique", toChat); + return await RdDRollTables.drawItemFromRollTable("Tarot Draconique", toChat); } } diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index 815f4acf..1f9071f8 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -342,10 +342,9 @@ export class RdDTMRDialog extends Dialog { + RdDResolutionTable.explain(rolled); if (rolled.isETotal) { - let souffle = await RdDRollTables.getSouffle(); + let souffle = await this.actor.ajouterSouffle({chat: false}); explication += "
Vous avez fait un Echec Total. Vous subissez un Souffle de Dragon : " + souffle.name; msg2MJ += "
Et a reçu un Souffle de Dragon : " + souffle.name; - this.actor.createOwnedItem(souffle); } if (rolled.isPart) { explication += "
Vous avez fait une Réussite Particulière"; diff --git a/module/tmr-utility.js b/module/tmr-utility.js index 1012cdad..41a13ea4 100644 --- a/module/tmr-utility.js +++ b/module/tmr-utility.js @@ -525,18 +525,6 @@ export class TMRUtility { } return { message: message, state: state }; } - - /* -------------------------------------------- */ - static async genericGetTableResult( tableName, toChat) - { - let pack = game.packs.get("foundryvtt-reve-de-dragon.tables-diverses"); - await pack.getIndex(); - let entry = pack.index.find(e => e.name === tableName); - let rollQueues = await pack.getEntity(entry._id); - let result = await rollQueues.draw( { displayChat: toChat } ); - console.log("CAT", result); - return result; - } /* -------------------------------------------- */ static getTMRAleatoire()