From 74ad10c95e96accefd29c609dcd94987c0aae93c Mon Sep 17 00:00:00 2001 From: cay Date: Sun, 12 Apr 2026 11:55:34 +0100 Subject: [PATCH] wtrzj4t --- views/1v1-battlefield.ejs | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/views/1v1-battlefield.ejs b/views/1v1-battlefield.ejs index aa867eb..714b5b2 100644 --- a/views/1v1-battlefield.ejs +++ b/views/1v1-battlefield.ejs @@ -572,12 +572,9 @@ updateTimerUI(turnSecsLeft, activeName); if (turnSecsLeft <= 0) { clearInterval(turnTimerInt); - // Nur der aktive Spieler sendet end_turn + // Nur der aktive Spieler beendet den Zug if (isMyTurn) { - tickHandCooldowns(); - drawNextCard(); - setTurnState(false); - socket.emit("end_turn", { matchId, slot: mySlot }); + endMyTurn(); } } }, 1000); @@ -623,28 +620,19 @@ const btn = document.getElementById("end-turn-btn"); if (!btn) return; + // Alle Handkarten sofort neu rendern damit Draggable + Badge korrekt sind + handCardIds.forEach((id) => renderHandSlot(id)); + if (myTurn) { btn.disabled = false; btn.textContent = "Zug beenden"; btn.style.opacity = "1"; document.getElementById("turn-indicator")?.remove(); - // Draggable für bereite Karten aktivieren - setTimeout(() => handCardIds.forEach((id) => renderHandSlot(id)), 50); - // Timer für beide Spieler sichtbar starten startTurnTimer(activeName || "Du"); } else { btn.disabled = true; btn.style.opacity = "0.4"; - // Draggable sofort deaktivieren - handCardIds.forEach((id) => { - const s = document.getElementById(id); - if (s) { - s.draggable = false; - delete s.dataset.cardSlotId; - } - }); showTurnIndicator(activeName); - // Timer für Gegner-Countdown auch anzeigen startTurnTimer(activeName || "Gegner"); } } @@ -676,15 +664,20 @@ } /* ── Zug beenden: per Button oder Timer-Ablauf ── */ - document.getElementById("end-turn-btn")?.addEventListener("click", () => { + function endMyTurn() { if (!isMyTurn) return; clearInterval(turnTimerInt); stopTurnTimer(); - tickHandCooldowns(); - drawNextCard(); + // ERST isMyTurn=false setzen, DANN Karten updaten + // so werden die neuen/aktualisierten Karten gleich korrekt (ohne Badge/Draggable) gerendert setTurnState(false); + tickHandCooldowns(); // CDs runtercountent und Slots neu rendern (isMyTurn ist jetzt false) + drawNextCard(); // neue Karte ziehen und Slot rendern (isMyTurn ist jetzt false) socket.emit("end_turn", { matchId, slot: mySlot }); - // Server antwortet mit turn_change → dann wird setTurnState erneut aufgerufen + } + + document.getElementById("end-turn-btn")?.addEventListener("click", () => { + endMyTurn(); }); /* ── Hilfsfunktion: Karte mit Stats in einen Slot rendern ── */ function renderCardInSlot(slot, card) {