From 0e23a4ec57cb029684f75a92824c5f5ede3cc64c Mon Sep 17 00:00:00 2001 From: cay Date: Sun, 12 Apr 2026 11:27:10 +0100 Subject: [PATCH] dtzktrz --- sockets/arena_socket.js | 42 ++++++++++++++++++++++++++------------- views/1v1-battlefield.ejs | 1 + 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/sockets/arena_socket.js b/sockets/arena_socket.js index 60e87fc..a223aa4 100644 --- a/sockets/arena_socket.js +++ b/sockets/arena_socket.js @@ -188,16 +188,16 @@ function startReadyTimer(io, matchId) { if (io._arenaTimers.has(matchId)) return; let remaining = READY_TIMEOUT; - io.to("arena_" + matchId).emit("ready_timer", { remaining }); + emitToMatch(io, matchId, "ready_timer", { remaining }); const interval = setInterval(() => { remaining--; - io.to("arena_" + matchId).emit("ready_timer", { remaining }); + emitToMatch(io, matchId, "ready_timer", { remaining }); if (remaining <= 0) { clearInterval(interval); io._arenaTimers.delete(matchId); console.log(`[1v1] Match ${matchId} abgebrochen – Zeit abgelaufen.`); - io.to("arena_" + matchId).emit("match_cancelled", { + emitToMatch(io, matchId, "match_cancelled", { reason: "timeout", message: "Zeit abgelaufen.", }); @@ -359,16 +359,30 @@ function registerTeamModeHandlers(io, socket, mode) { }); } -/* ── Helper: Event an beide Spieler senden (Room-Broadcast) ── */ -function emitToMatch(io, matchId, event, data) { - io.to("arena_" + matchId).emit(event, data); +/* ── Hilfsfunktionen: Direkte Socket-Zustellung ── */ +function getRoom(io, matchId) { + return io._arenaRooms?.get(matchId) || null; } +// Sendet an beide Spieler über ihre gespeicherten Socket-IDs +function emitToMatch(io, matchId, event, data) { + const room = getRoom(io, matchId); + if (!room) { console.warn(`[emitToMatch] Kein Room für ${matchId}`); return; } + ["player1", "player2"].forEach((slot) => { + if (room.sockets[slot]) { + io.to(room.sockets[slot]).emit(event, data); + console.log(`[emitToMatch] ${event} → ${slot} (${room.sockets[slot]})`); + } + }); +} + +// Sendet an den Gegner des Senders function emitToOpponent(io, matchId, senderSlot, event, data) { - const opponentSlot = senderSlot === "player1" ? "player2" : "player1"; - const room = io._arenaRooms?.get(matchId); - if (room?.sockets[opponentSlot]) { - io.to(room.sockets[opponentSlot]).emit(event, data); + const room = getRoom(io, matchId); + if (!room) return; + const oppSlot = senderSlot === "player1" ? "player2" : "player1"; + if (room.sockets[oppSlot]) { + io.to(room.sockets[oppSlot]).emit(event, data); } } @@ -465,10 +479,10 @@ function registerArenaHandlers(io, socket) { if (!io._arenaReady.has(matchId)) io._arenaReady.set(matchId, new Set()); const readySet = io._arenaReady.get(matchId); readySet.add(slot); - io.to("arena_" + matchId).emit("ready_status", { - readyCount: readySet.size, - readySlots: Array.from(readySet), - }); + const readyData = { readyCount: readySet.size, readySlots: Array.from(readySet) }; + // Direkt an beide Spieler senden (zuverlässiger als Room-Broadcast) + emitToMatch(io, matchId, "ready_status", readyData); + console.log(`[1v1] ready_status: ${readySet.size}/2 bereit | Match ${matchId}`); if (readySet.size >= 2) { stopReadyTimer(io, matchId); io._arenaReady.delete(matchId); diff --git a/views/1v1-battlefield.ejs b/views/1v1-battlefield.ejs index fbfd8ec..e5e9087 100644 --- a/views/1v1-battlefield.ejs +++ b/views/1v1-battlefield.ejs @@ -930,6 +930,7 @@ }); socket.on("ready_status", (data) => { + console.log("[1v1] ready_status empfangen:", data); const pip1 = document.getElementById("pip-player1"); const pip2 = document.getElementById("pip-player2"); if (data.readySlots) {