uip
This commit is contained in:
parent
e572f0d3a1
commit
fd49572d22
@ -333,7 +333,7 @@ function registerArenaHandlers(io, socket) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
socket.on("arena_join", (data) => {
|
socket.on("arena_join", (data) => {
|
||||||
const { matchId, slot } = data;
|
const { matchId, slot, playerName } = data;
|
||||||
if (!matchId || !slot) return;
|
if (!matchId || !slot) return;
|
||||||
|
|
||||||
if (!io._arenaRooms) io._arenaRooms = new Map();
|
if (!io._arenaRooms) io._arenaRooms = new Map();
|
||||||
@ -341,7 +341,13 @@ function registerArenaHandlers(io, socket) {
|
|||||||
|
|
||||||
const room = io._arenaRooms.get(matchId);
|
const room = io._arenaRooms.get(matchId);
|
||||||
room.sockets[slot] = socket.id;
|
room.sockets[slot] = socket.id;
|
||||||
room.names[slot] = socket.user || "Spieler";
|
|
||||||
|
// Name aus socket.user (Objekt) oder vom Client mitgesendet
|
||||||
|
const u = socket.user;
|
||||||
|
room.names[slot] = (u && (u.ingame_name || u.username || u.name))
|
||||||
|
|| playerName
|
||||||
|
|| "Spieler";
|
||||||
|
|
||||||
socket.join("arena_" + matchId);
|
socket.join("arena_" + matchId);
|
||||||
|
|
||||||
const otherSlot = slot === "player1" ? "player2" : "player1";
|
const otherSlot = slot === "player1" ? "player2" : "player1";
|
||||||
@ -372,6 +378,28 @@ function registerArenaHandlers(io, socket) {
|
|||||||
io.to("arena_" + matchId).emit("player_surrendered", { slot });
|
io.to("arena_" + matchId).emit("player_surrendered", { slot });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/* ── Zugwechsel ── */
|
||||||
|
socket.on("end_turn", (data) => {
|
||||||
|
const { matchId, slot } = data;
|
||||||
|
if (!matchId || !slot) return;
|
||||||
|
const nextSlot = slot === "player1" ? "player2" : "player1";
|
||||||
|
io.to("arena_" + matchId).emit("turn_change", { activeSlot: nextSlot });
|
||||||
|
console.log(`[1v1] Zug: ${slot} → ${nextSlot} | Match ${matchId}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on("end_turn_init", (data) => {
|
||||||
|
const { matchId, starterSlot } = data;
|
||||||
|
if (!matchId || !starterSlot) return;
|
||||||
|
// Nur einmal senden (erster Empfang gewinnt)
|
||||||
|
if (!io._turnInit) io._turnInit = new Set();
|
||||||
|
if (io._turnInit.has(matchId)) return;
|
||||||
|
io._turnInit.add(matchId);
|
||||||
|
io.to("arena_" + matchId).emit("turn_change", { activeSlot: starterSlot });
|
||||||
|
console.log(`[1v1] Startzug: ${starterSlot} | Match ${matchId}`);
|
||||||
|
// Cleanup nach 10s
|
||||||
|
setTimeout(() => io._turnInit?.delete(matchId), 10000);
|
||||||
|
});
|
||||||
|
|
||||||
/* ── 2v2 & 4v4 ── */
|
/* ── 2v2 & 4v4 ── */
|
||||||
registerTeamModeHandlers(io, socket, "2v2");
|
registerTeamModeHandlers(io, socket, "2v2");
|
||||||
registerTeamModeHandlers(io, socket, "4v4");
|
registerTeamModeHandlers(io, socket, "4v4");
|
||||||
|
|||||||
@ -551,34 +551,60 @@
|
|||||||
|
|
||||||
/* Account-ID laden dann arena_join senden */
|
/* Account-ID laden dann arena_join senden */
|
||||||
let myIngameName = null;
|
let myIngameName = null;
|
||||||
fetch("/arena/me")
|
|
||||||
.then(r => r.json())
|
function emitArenaJoin(me) {
|
||||||
.then(me => {
|
myIngameName = (me && (me.ingame_name || me.username || me.name || String(me.id))) || "Spieler";
|
||||||
// Eigenen Namen sofort im Avatar anzeigen
|
const myNameEl = document.getElementById(amIPlayer1 ? "nameLeft" : "nameRight");
|
||||||
myIngameName = me.ingame_name || me.username || me.name || me.id || "Ich";
|
if (myNameEl) myNameEl.textContent = myIngameName;
|
||||||
const myNameEl = document.getElementById(amIPlayer1 ? "nameLeft" : "nameRight");
|
socket.emit("arena_join", {
|
||||||
if (myNameEl) myNameEl.textContent = myIngameName;
|
matchId,
|
||||||
socket.emit("arena_join", { matchId, slot: mySlot, accountId: me.id });
|
slot: mySlot,
|
||||||
})
|
accountId: me?.id ?? null,
|
||||||
.catch(() => {
|
playerName: myIngameName,
|
||||||
socket.emit("arena_join", { matchId, slot: mySlot, accountId: null });
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetchAndJoin() {
|
||||||
|
fetch("/arena/me")
|
||||||
|
.then(r => r.json())
|
||||||
|
.then(me => emitArenaJoin(me))
|
||||||
|
.catch(() => emitArenaJoin(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auf Socket-Connect warten – sicherster Zeitpunkt für arena_join
|
||||||
|
socket.on("connect", fetchAndJoin);
|
||||||
|
// Fallback: Socket war bereits verbunden bevor Event registriert wurde
|
||||||
|
if (socket.connected) fetchAndJoin();
|
||||||
|
|
||||||
|
// Fallback: Falls nach 8s kein arena_opponent_joined / arena_ready kommt
|
||||||
|
// → Bereit-Box trotzdem anzeigen
|
||||||
|
const readyFallbackTimer = setTimeout(() => {
|
||||||
|
const connecting = document.getElementById("connecting-overlay");
|
||||||
|
if (connecting) {
|
||||||
|
console.warn("[Arena] Kein Socket-Event nach 8s – zeige Bereit-Box als Fallback");
|
||||||
|
connecting.remove();
|
||||||
|
const lockOverlay = document.getElementById("board-lock-overlay");
|
||||||
|
if (lockOverlay) lockOverlay.style.display = "flex";
|
||||||
|
}
|
||||||
|
}, 8000);
|
||||||
|
|
||||||
/* ── Gegner verbunden ───────────────────────────────── */
|
/* ── Gegner verbunden ───────────────────────────────── */
|
||||||
socket.on("arena_opponent_joined", data => {
|
socket.on("arena_opponent_joined", data => {
|
||||||
|
console.log("[Arena] arena_opponent_joined:", data);
|
||||||
|
clearTimeout(readyFallbackTimer);
|
||||||
const name = data.name || "Gegner";
|
const name = data.name || "Gegner";
|
||||||
document.getElementById(amIPlayer1 ? "nameRight" : "nameLeft").textContent = name;
|
document.getElementById(amIPlayer1 ? "nameRight" : "nameLeft").textContent = name;
|
||||||
document.getElementById("connecting-overlay")?.remove();
|
document.getElementById("connecting-overlay")?.remove();
|
||||||
// Jetzt erst Bereit-Box anzeigen
|
|
||||||
const lockOverlay = document.getElementById("board-lock-overlay");
|
const lockOverlay = document.getElementById("board-lock-overlay");
|
||||||
if (lockOverlay) lockOverlay.style.display = "flex";
|
if (lockOverlay) lockOverlay.style.display = "flex";
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on("arena_ready", data => {
|
socket.on("arena_ready", data => {
|
||||||
|
console.log("[Arena] arena_ready:", data);
|
||||||
|
clearTimeout(readyFallbackTimer);
|
||||||
document.getElementById("connecting-overlay")?.remove();
|
document.getElementById("connecting-overlay")?.remove();
|
||||||
document.getElementById("nameLeft").textContent = data.player1 || "Spieler 1";
|
document.getElementById("nameLeft").textContent = data.player1 || "Spieler 1";
|
||||||
document.getElementById("nameRight").textContent = data.player2 || "Spieler 2";
|
document.getElementById("nameRight").textContent = data.player2 || "Spieler 2";
|
||||||
// Bereit-Box anzeigen
|
|
||||||
const lockOverlay = document.getElementById("board-lock-overlay");
|
const lockOverlay = document.getElementById("board-lock-overlay");
|
||||||
if (lockOverlay) lockOverlay.style.display = "flex";
|
if (lockOverlay) lockOverlay.style.display = "flex";
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user