diff --git a/changelog.md b/changelog.md index 1b2a0447..2b07129b 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,7 @@ # 11.2 +## 11.2.21 - Le questionnement d'Akarlikarlikar +- Une confirmation spécifique est demandée pour monter dans les terres médianes en cas de rencontre en attente + ## 11.2.20 - Le soulagement d'Akarlikarlikar - L'option 'ajout de la difficulté d'attaque à l'encaissement est affichée comme un modificateur d'encaissement diff --git a/module/actor.js b/module/actor.js index 19d4c101..0b12c9d7 100644 --- a/module/actor.js +++ b/module/actor.js @@ -991,25 +991,33 @@ export class RdDActor extends RdDBaseActorSang { /* -------------------------------------------- */ buildTMRInnaccessible() { - const tmrInnaccessibles = this.filterItems(it => Draconique.isCaseTMR(it) && - EffetsDraconiques.isInnaccessible(it)); - return tmrInnaccessibles.map(it => it.system.coord); + return this.items[TYPES.casetmr] + .filter(it => EffetsDraconiques.isInnaccessible(it)) + .map(it => it.system.coord) } /* -------------------------------------------- */ - getTMRRencontres() { - return this.itemTypes['rencontre']; + getRencontresTMR() { + return this.itemTypes[TYPES.rencontre]; } /* -------------------------------------------- */ - async deleteTMRRencontreAtPosition() { - const demiReve = this.getDemiReve() - let rencontreIds = this.items.filter(it => it.type == 'rencontre' && it.system.coord == demiReve).map(it => it.id); + async deleteRencontreTMRAtPosition() { + const rencontreIds = this.itemTypes[TYPES.rencontre].filter(this.filterRencontreTMRDemiReve()).map(it => it.id) if (rencontreIds.length > 0) { - await this.deleteEmbeddedDocuments('Item', rencontreIds); + await this.deleteEmbeddedDocuments('Item', rencontreIds) } } + getRencontreTMREnAttente() { + return this.itemTypes[TYPES.rencontre].find(this.filterRencontreTMRDemiReve()) + } + + filterRencontreTMRDemiReve() { + const position = this.getDemiReve() + return it => it.system.coord == position + } + /* -------------------------------------------- */ async addTMRRencontre(currentRencontre) { const toCreate = currentRencontre.toObject(); @@ -2423,22 +2431,29 @@ export class RdDActor extends RdDBaseActorSang { /* -------------------------------------------- */ async displayTMR(mode = "normal") { if (this.tmrApp) { - ui.notifications.warn("Vous êtes déja dans les TMR...."); - this.tmrApp.forceTMRDisplay(); + ui.notifications.warn("Vous êtes déja dans les TMR....") + this.tmrApp.forceTMRDisplay() return } if (mode != 'visu' && this.getEffect(STATUSES.StatusDemiReve)) { - ui.notifications.warn("Le joueur ou le MJ est déja dans les Terres Médianes avec ce personnage ! Visualisation uniquement"); + ui.notifications.warn("Les personnage est déjà dans les Terres Médianes, elles s'affichent en visualisation") mode = "visu"; // bascule le mode en visu automatiquement } - RdDConfirm.confirmer({ - bypass: mode == 'visu', - settingConfirmer: "confirmation-tmr", - content: `
Voulez vous monter dans les TMR en mode ${mode}?
`, - title: 'Confirmer la montée dans les TMR', - buttonLabel: 'Monter dans les TMR', - onAction: async () => await this._doDisplayTMR(mode) - }); + if (mode == 'visu') { + await this._doDisplayTMR(mode) + } + else { + const rencontre = this.getRencontreTMREnAttente(); + const settingConfirmer = rencontre ? "confirmation-tmr-rencontre" : "confirmation-tmr"; + const messageRencontre = rencontre ? `Vous devrez combattre ${rencontre.system.genre == 'f' ? 'la' : 'le'} ${rencontre.name} de ${rencontre.system.force} points de Rêve
` : ''; + RdDConfirm.confirmer({ + settingConfirmer: settingConfirmer, + content: `Voulez vous monter dans les TMR en mode ${mode}?
` + messageRencontre, + title: 'Confirmer la montée dans les TMR', + buttonLabel: 'Monter dans les TMR', + onAction: async () => await this._doDisplayTMR(mode) + }) + } } async _doDisplayTMR(mode) { diff --git a/module/actor/base-actor.js b/module/actor/base-actor.js index b0a46de0..a9913159 100644 --- a/module/actor/base-actor.js +++ b/module/actor/base-actor.js @@ -8,7 +8,6 @@ import { RdDAudio } from "../rdd-audio.js"; import { RdDConfirm } from "../rdd-confirm.js"; import { RdDUtility } from "../rdd-utility.js"; import { SystemCompendiums } from "../settings/system-compendiums.js"; -import { APP_ASTROLOGIE_REFRESH } from "../sommeil/app-astrologie.js"; export class RdDBaseActor extends Actor { @@ -16,7 +15,7 @@ export class RdDBaseActor extends Actor { return Object.entries(carac) .filter(it => Grammar.equalsInsensitive(it[1].label, name)) .map(it => it[0]) - .find(it => it); + .find(it => it) } static $findCaracByName(carac, name) { const caracList = Object.entries(carac); diff --git a/module/rdd-confirm.js b/module/rdd-confirm.js index 84a2781f..7e701432 100644 --- a/module/rdd-confirm.js +++ b/module/rdd-confirm.js @@ -4,29 +4,23 @@ import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; export class RdDConfirm { /* -------------------------------------------- */ static confirmer(options, autresActions) { - options.bypass = options.bypass || !(options.settingConfirmer == undefined || ReglesOptionnelles.isUsing(options.settingConfirmer)); - if (options.bypass) { - options.onAction(); + let buttons = { + "action": RdDConfirm._createButtonAction(options), + "cancel": RdDConfirm._createButtonCancel() + }; + if (options.settingConfirmer) { + buttons = foundry.utils.mergeObject(RdDConfirm._createButtonActionSave(options), buttons); } - else { - let buttons = { - "action": RdDConfirm._createButtonAction(options), - "cancel": RdDConfirm._createButtonCancel() - }; - if (options.settingConfirmer) { - buttons = foundry.utils.mergeObject(RdDConfirm._createButtonActionSave(options), buttons); - } - if (autresActions) { - buttons = foundry.utils.mergeObject(autresActions, buttons); - } - const dialogDetails = { - title: options.title, - content: options.content, - default: "cancel", - buttons: buttons - }; - new Dialog(dialogDetails, { width: 150 * Object.keys(buttons).length }).render(true); + if (autresActions) { + buttons = foundry.utils.mergeObject(autresActions, buttons); } + const dialogDetails = { + title: options.title, + content: options.content, + default: "cancel", + buttons: buttons + }; + new Dialog(dialogDetails, { width: 150 * Object.keys(buttons).length }).render(true); } static _createButtonCancel() { diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index f49be4fb..f53962dd 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -212,7 +212,7 @@ export class RdDTMRDialog extends Dialog { /* -------------------------------------------- */ loadRencontres() { - this.rencontresExistantes = this.actor.getTMRRencontres(); + this.rencontresExistantes = this.actor.getRencontresTMR(); } /* -------------------------------------------- */ @@ -382,7 +382,7 @@ export class RdDTMRDialog extends Dialog { async refouler() { console.log("-> refouler", this.currentRencontre); await this.actor.ajouterRefoulement(this.currentRencontre.system.refoulement, `${this.currentRencontre.system.genre == 'f' ? 'une' : 'un'} ${this.currentRencontre.name}`); - await this.actor.deleteTMRRencontreAtPosition(); // Remove the stored rencontre if necessary + await this.actor.deleteRencontreTMRAtPosition() this.updateTokens(); this.updateValuesDisplay(); this.nettoyerRencontre(); @@ -392,7 +392,7 @@ export class RdDTMRDialog extends Dialog { async ignorerRencontre() { console.log("-> ignorer", this.currentRencontre); this._tellToGM(this.actor.name + " a ignoré: " + this.currentRencontre.name); - await this.actor.deleteTMRRencontreAtPosition(); // Remove the stored rencontre if necessary + await this.actor.deleteRencontreTMRAtPosition() this.updateTokens(); this.updateValuesDisplay(); this.nettoyerRencontre(); @@ -446,7 +446,7 @@ export class RdDTMRDialog extends Dialog { async maitriserRencontre() { console.log("-> maitriser", this.currentRencontre); - await this.actor.deleteTMRRencontreAtPosition(); + await this.actor.deleteRencontreTMRAtPosition() this.updateTokens(); let rencontreData = { diff --git a/module/settings/regles-optionnelles.js b/module/settings/regles-optionnelles.js index bf40c95c..2d2f36bd 100644 --- a/module/settings/regles-optionnelles.js +++ b/module/settings/regles-optionnelles.js @@ -26,6 +26,7 @@ const listeReglesOptionnelles = [ { group: 'Confirmations', name: 'confirmer-combat-sans-cible', descr: "Confirmer avant une attaque sans cible", scope: "client"}, { group: 'Confirmations', name: 'confirmation-tmr', descr: "Confirmer pour monter dans les TMR", scope: "client"}, + { group: 'Confirmations', name: 'confirmation-tmr-rencontre', descr: "Confirmer pour monter dans les TMR avec rencontre en attente", scope: "client"}, { group: 'Confirmations', name: 'confirmation-refouler', descr: "Confirmer avant de refouler", scope: "client"}, { group: 'Confirmations', name: 'confirmation-vider', descr: "Confirmer pour vider l'équipement", scope: "client"}, { group: 'Confirmations', name: 'confirmation-supprimer-lien-acteur', descr: "Confirmer pour détacher un animal/suivant/véhicule", scope: "client"}, diff --git a/module/tmr/rencontre.js b/module/tmr/rencontre.js index d8d2d47e..9884b6c4 100644 --- a/module/tmr/rencontre.js +++ b/module/tmr/rencontre.js @@ -16,7 +16,7 @@ export class Rencontre extends Draconique { return pixiTMR.sprite(this.code(), { zIndex: tmrTokenZIndex.rencontre, decallage: pixiTMR.sizes.decallage(0, 0), - taille: () => pixiTMR.sizes.twoThird, + taille: () => pixiTMR.sizes.full, }) } }