fix: boutons Sous tension/Opposé auto-initialisent le deck

ensureDeck() crée et reset le deck manager si nécessaire
avant de tirer une carte pour les boutons du chat.
This commit is contained in:
2026-07-11 00:03:08 +02:00
parent f2839c4b54
commit 948100d443
5 changed files with 27 additions and 17 deletions
+26 -16
View File
@@ -285,6 +285,24 @@ Hooks.on("createChatMessage", async (message, options, userId) => {
}) })
// Helper: ensure deck manager is initialized and has cards
async function ensureDeck() {
let dm = globalThis.HamalronTarotDeckManager?._instance
if (!dm) {
const DM = game.system.api.applications.HamalronTarotDeckManager
dm = new DM()
DM._instance = dm
}
if (dm.deck.length === 0) {
await dm.resetDeck()
}
if (dm.deck.length === 0) {
ui.notifications.warn(game.i18n.localize("HAMALRON.Notifications.deckEmpty"))
return null
}
return dm
}
// Chat action buttons (Sous tension / Opposé) // Chat action buttons (Sous tension / Opposé)
$(document).on("click", "[data-action='sousTension']", async function () { $(document).on("click", "[data-action='sousTension']", async function () {
const msgEl = $(this).closest(".chat-message") const msgEl = $(this).closest(".chat-message")
@@ -292,17 +310,13 @@ $(document).on("click", "[data-action='sousTension']", async function () {
const msg = game.messages?.get(msgId) const msg = game.messages?.get(msgId)
if (!msg) return if (!msg) return
// Extract the player's total from the message content
const totalText = msgEl.find(".calc-total")?.text()?.trim() const totalText = msgEl.find(".calc-total")?.text()?.trim()
const totalJoueur = Number(totalText) || 0 const totalJoueur = Number(totalText) || 0
const actorName = msg.speaker?.alias || "Inconnu" const actorName = msg.speaker?.alias || "Inconnu"
// Draw a card and apply tension modifier (default 0) const deckManager = await ensureDeck()
const deckManager = globalThis.HamalronTarotDeckManager?._instance if (!deckManager) return
if (!deckManager || deckManager.deck.length === 0) {
ui.notifications.warn(game.i18n.localize("HAMALRON.Notifications.deckEmpty"))
return
}
const drawn = deckManager.drawCards(1) const drawn = deckManager.drawCards(1)
if (!drawn.length) return if (!drawn.length) return
const card = drawn[0] const card = drawn[0]
@@ -311,11 +325,10 @@ $(document).on("click", "[data-action='sousTension']", async function () {
deckManager.addToDiscard(card) deckManager.addToDiscard(card)
await deckManager.saveDeckState() await deckManager.saveDeckState()
const totalMJ = valeurMJ const success = totalJoueur >= valeurMJ
const success = totalJoueur >= totalMJ
ChatMessage.create({ ChatMessage.create({
content: `<div class="fvtt-hamalron"><h3>${game.i18n.localize("HAMALRON.Label.sousTension")}</h3> content: `<div class="fvtt-hamalron"><h3>${game.i18n.localize("HAMALRON.Label.sousTension")}</h3>
<p><strong>${actorName}</strong>: ${totalJoueur} vs <strong>MJ</strong>: ${card.name} (${totalMJ})</p> <p><strong>${actorName}</strong>: ${totalJoueur} vs <strong>MJ</strong>: ${card.name} (${valeurMJ})</p>
<p>${success ? game.i18n.localize("HAMALRON.Label.success") : game.i18n.localize("HAMALRON.Label.failure")}</p></div>`, <p>${success ? game.i18n.localize("HAMALRON.Label.success") : game.i18n.localize("HAMALRON.Label.failure")}</p></div>`,
style: CONST.CHAT_MESSAGE_STYLES.OTHER, style: CONST.CHAT_MESSAGE_STYLES.OTHER,
}) })
@@ -331,12 +344,9 @@ $(document).on("click", "[data-action='oppose']", async function () {
const totalJoueur = Number(totalText) || 0 const totalJoueur = Number(totalText) || 0
const actorName = msg.speaker?.alias || "Inconnu" const actorName = msg.speaker?.alias || "Inconnu"
// Draw opposition card const deckManager = await ensureDeck()
const deckManager = globalThis.HamalronTarotDeckManager?._instance if (!deckManager) return
if (!deckManager || deckManager.deck.length === 0) {
ui.notifications.warn(game.i18n.localize("HAMALRON.Notifications.deckEmpty"))
return
}
const drawn = deckManager.drawCards(1) const drawn = deckManager.drawCards(1)
if (!drawn.length) return if (!drawn.length) return
const card = drawn[0] const card = drawn[0]
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000052 MANIFEST-000056
Binary file not shown.
Binary file not shown.