fzudk,ltz

This commit is contained in:
cay 2026-04-12 11:09:38 +01:00
parent f470f39461
commit 81d910440d
2 changed files with 14 additions and 11 deletions

View File

@ -359,30 +359,32 @@ function registerTeamModeHandlers(io, socket, mode) {
}); });
} }
/* ── Helper: Event an beide Spieler senden (direkt + Room-Fallback) ── */ /* ── Helper: Event direkt an beide Spieler eines Matches senden ── */
function emitToMatch(io, matchId, event, data) { function emitToMatch(io, matchId, event, data) {
const room = io._arenaRooms?.get(matchId); const room = io._arenaRooms?.get(matchId);
// Direkt an bekannte Socket-IDs senden
if (room) { if (room) {
// Direkt an bekannte Socket-IDs senden (kein Room-Broadcast → kein Duplikat)
["player1", "player2"].forEach((slot) => { ["player1", "player2"].forEach((slot) => {
if (room.sockets[slot]) { if (room.sockets[slot]) {
io.to(room.sockets[slot]).emit(event, data); io.to(room.sockets[slot]).emit(event, data);
} }
}); });
} else {
// Fallback wenn room noch nicht gesetzt
io.to("arena_" + matchId).emit(event, data);
} }
// Zusätzlich Room-Broadcast als Fallback (z.B. nach Reconnect)
io.to("arena_" + matchId).emit(event, data);
} }
function emitToOpponent(io, matchId, senderSlot, event, data) { function emitToOpponent(io, matchId, senderSlot, event, data) {
const room = io._arenaRooms?.get(matchId); const room = io._arenaRooms?.get(matchId);
const opponentSlot = senderSlot === "player1" ? "player2" : "player1"; const opponentSlot = senderSlot === "player1" ? "player2" : "player1";
// Direkt an Gegner-Socket senden
if (room?.sockets[opponentSlot]) { if (room?.sockets[opponentSlot]) {
// Direkt an Gegner-Socket (kein Duplikat beim Sender)
io.to(room.sockets[opponentSlot]).emit(event, data); io.to(room.sockets[opponentSlot]).emit(event, data);
} else {
// Fallback: Room-Broadcast
socket.to("arena_" + matchId).emit(event, data);
} }
// Zusätzlich Room-Broadcast als Fallback
io.to("arena_" + matchId).emit(event, data);
} }
/* /*

View File

@ -997,11 +997,12 @@
// Festlegen ob ich der linke Spieler bin // Festlegen ob ich der linke Spieler bin
amILeftPlayer = flip ? mySlot === "player2" : mySlot === "player1"; amILeftPlayer = flip ? mySlot === "player2" : mySlot === "player1";
// Startspieler NUR vom Server bestimmen lassen kein lokales setTurnState! // Nur player1 sendet end_turn_init → verhindert Doppelverarbeitung
// Nur der erste Spieler sendet end_turn_init, Server entscheidet wer beginnt // turn_change vom Server setzt dann den korrekten Zustand für BEIDE Spieler
const starterSlot = flip ? "player2" : "player1"; const starterSlot = flip ? "player2" : "player1";
socket.emit("end_turn_init", { matchId, starterSlot }); if (mySlot === "player1") {
// turn_change vom Server setzt dann den korrekten Zustand für beide Spieler socket.emit("end_turn_init", { matchId, starterSlot });
}
} }
}); });