diff --git a/sockets/arena_socket.js b/sockets/arena_socket.js index 6ea99ec..60e87fc 100644 --- a/sockets/arena_socket.js +++ b/sockets/arena_socket.js @@ -359,29 +359,17 @@ function registerTeamModeHandlers(io, socket, mode) { }); } -/* ── Helper: Event an beide Spieler senden ── */ +/* ── Helper: Event an beide Spieler senden (Room-Broadcast) ── */ function emitToMatch(io, matchId, event, data) { - // Immer Room-Broadcast (zuverlässigste Methode) io.to("arena_" + matchId).emit(event, data); - // Zusätzlich direkt an bekannte Socket-IDs falls vorhanden - const room = io._arenaRooms?.get(matchId); - if (room) { - ["player1", "player2"].forEach((slot) => { - if (room.sockets[slot]) { - io.to(room.sockets[slot]).emit(event, data); - } - }); - } } function emitToOpponent(io, matchId, senderSlot, event, data) { const opponentSlot = senderSlot === "player1" ? "player2" : "player1"; - // Direkt an Gegner-Socket const room = io._arenaRooms?.get(matchId); if (room?.sockets[opponentSlot]) { io.to(room.sockets[opponentSlot]).emit(event, data); } - // Kein Room-Broadcast hier (Sender würde eigene Karten nochmal empfangen) } /* ═══════════════════════════════════════════════════════════ diff --git a/views/1v1-battlefield.ejs b/views/1v1-battlefield.ejs index 9f00bb1..fbfd8ec 100644 --- a/views/1v1-battlefield.ejs +++ b/views/1v1-battlefield.ejs @@ -883,16 +883,12 @@ }); /* ── Server: Zugwechsel ──────────────────────────────── */ - let lastTurnChangeTs = 0; socket.on("turn_change", (data) => { - // Board synchronisieren falls mitgeliefert + // Sicherheits-Fallback: Overlay entfernen falls noch vorhanden + document.getElementById("board-lock-overlay")?.remove(); + document.getElementById("connecting-overlay")?.remove(); + if (data.boardSync) applyBoardSync(data.boardSync); - - // Duplikat-Schutz: gleiches Event innerhalb 1 Sekunde nur einmal verarbeiten - const now = Date.now(); - if (now - lastTurnChangeTs < 1000) return; - lastTurnChangeTs = now; - const nowMyTurn = data.activeSlot === mySlot; console.log("[1v1] turn_change:", data.activeSlot, "| ich:", mySlot, "| meinZug:", nowMyTurn); setTurnState(nowMyTurn);