diff --git a/public/js/buildings/arena.js b/public/js/buildings/arena.js index 9979edb..b365d2c 100644 --- a/public/js/buildings/arena.js +++ b/public/js/buildings/arena.js @@ -51,17 +51,6 @@ export async function loadArena() { -
-
-
πŸ›‘οΈ
-
4v4
-
Schlachtruf
-
- -
- @@ -105,29 +94,6 @@ export async function loadArena() { - - `; injectArenaStyles(); @@ -221,13 +187,13 @@ function injectArenaStyles() { .qs-cancel { display:inline-block; margin-top:6px; font-size:11px; color:rgba(255,100,100,.8); cursor:pointer; text-decoration:underline; animation:none; } .qs-cancel:hover { color:#e74c3c; } - #arena-2v2-error,#arena-4v4-error { + #arena-2v2-error { padding:8px 12px; border-radius:7px; margin-bottom:8px; background:rgba(231,76,60,.12); border:1px solid rgba(231,76,60,.4); color:#e74c3c; font-family:"Cinzel",serif; font-size:11px; text-align:center; } - #arena-2v2-screen,#arena-4v4-screen { flex-direction:column; gap:12px; padding:14px; height:100%; overflow-y:auto; } + #arena-2v2-screen { flex-direction:column; gap:12px; padding:14px; height:100%; overflow-y:auto; } .arena-lobby-header { display:flex; align-items:center; gap:14px; } .arena-back-btn { background:none; border:1px solid rgba(255,200,80,.3); color:#c8960c; font-family:"Cinzel",serif; font-size:11px; padding:4px 10px; border-radius:4px; cursor:pointer; } .arena-back-btn:hover { background:rgba(200,150,12,.15); } @@ -362,7 +328,6 @@ function getSocket() { return window._socket || null; } /* ── State ─────────────────────────────────────────────────*/ let myArenaData = null; let my2v2TeamId = null; -let my4v4TeamId = null; let selectedDeckId = null; // GewΓ€hltes Deck fΓΌr das nΓ€chste Match /* ── Modus-Initialisierung ─────────────────────────────────*/ @@ -394,7 +359,6 @@ function initArenaModes() { sessionStorage.setItem("selectedDeckId", selectedDeckId); if (mode === "1v1") handle1v1Click(card); else if (mode === "2v2") openTeamLobby("2v2"); - else if (mode === "4v4") openTeamLobby("4v4"); }); }); @@ -407,7 +371,6 @@ function initArenaModes() { document.getElementById(`arena-${mode}-screen`).style.display = "none"; document.getElementById("arena-mode-screen").style.display = ""; if (mode === "2v2") my2v2TeamId = null; - if (mode === "4v4") my4v4TeamId = null; return; } @@ -475,7 +438,7 @@ function cancelQueue(card) { hideQueueStatus(); } -/* ── Team-Lobby (2v2 / 4v4) ────────────────────────────────*/ +/* ── Team-Lobby (2v2) ─────────────────────────────────────*/ async function openTeamLobby(mode) { const socket = getSocket(); @@ -510,7 +473,6 @@ async function openTeamLobby(mode) { socket.on(`${mode}_team_joined`, data => { if (mode === "2v2") my2v2TeamId = data.teamId; - if (mode === "4v4") my4v4TeamId = data.teamId; document.getElementById(`arena-${mode}-team-panel`).style.display = "block"; document.getElementById(`arena-${mode}-lobby-section`).style.display = "none"; hideModeError(mode); @@ -521,11 +483,11 @@ async function openTeamLobby(mode) { socket.on(`${mode}_partner_left`, data => { const statusEl = document.getElementById(`arena-${mode}-team-status`); if (statusEl) statusEl.innerHTML = `⚠️ ${data.name} hat das Team verlassen.`; - const teamId = mode === "2v2" ? my2v2TeamId : my4v4TeamId; + const teamId = my2v2TeamId; renderTeamPanel({ teamId, leaderId: null, players: [{ socketId: socket.id, name: myArenaData.name, level: myArenaData.level, ready: false }], - count: 1, max: mode === "4v4" ? 4 : 2 + count: 1, max: 2 }, socket, mode); }); @@ -553,7 +515,6 @@ async function openTeamLobby(mode) { socket.on(`${mode}_kicked`, data => { if (mode === "2v2") my2v2TeamId = null; - if (mode === "4v4") my4v4TeamId = null; document.getElementById(`arena-${mode}-team-panel`).style.display = "none"; document.getElementById(`arena-${mode}-lobby-section`).style.display = "block"; socket.emit(`get_${mode}_lobbies`); @@ -564,7 +525,7 @@ async function openTeamLobby(mode) { /* ── Lobby-Liste rendern ───────────────────────────────────*/ function renderLobbyList(list, socket, mode) { const el = document.getElementById(`arena-${mode}-lobby-list`); - const max = mode === "4v4" ? 4 : 2; + const max = 2; if (!el) return; if (!list.length) { el.innerHTML = `
Keine offenen Teams vorhanden.
`; @@ -593,8 +554,8 @@ function renderTeamPanel(data, socket, mode) { const actionsEl = document.getElementById(`arena-${mode}-team-actions`); if (!playersEl || !actionsEl) return; - const max = data.max || (mode === "4v4" ? 4 : 2); - const teamId = mode === "2v2" ? my2v2TeamId : my4v4TeamId; + const max = data.max || 2; + const teamId = my2v2TeamId; const mySocketId = getSocket()?.id; const iAmLeader = data.leaderId === mySocketId; diff --git a/routes/arena.route.js b/routes/arena.route.js index bb091aa..5a4057a 100644 --- a/routes/arena.route.js +++ b/routes/arena.route.js @@ -160,48 +160,4 @@ router.get("/2v2", requireLogin, async (req, res) => { } }); -/* ================================ - 4v4 Spielfeld - GET /arena/4v4 -================================ */ - -router.get("/4v4", requireLogin, async (req, res) => { - const userId = req.session.user.id; - const { match: matchId, slot } = req.query; - - if (!matchId) { - return res.render("1v1-battlefield", { - title: "4v4 Kampf", - matchId: null, - mySlot: "team1_player1", - player1: req.session?.user?.ingame_name || "Spieler 1", - player2: "Gegner", - player1hp: 20, - player1mana: 3, - player2hp: 20, - player2mana: 3, - }); - } - - try { - const [[me]] = await db.query("SELECT ingame_name FROM accounts WHERE id = ?", [userId]); - const { hp, mana } = await getPlayerStats(userId); - - res.render("1v1-battlefield", { - title: "βš”οΈ 4v4 Kampf", - matchId, - mySlot: slot || "team1_player1", - player1: me?.ingame_name || "Du", - player2: "Gegner", - player1hp: hp, - player1mana: mana, - player2hp: 20, - player2mana: 3, - }); - } catch (err) { - console.error("[Arena /4v4]", err); - res.status(500).send("Fehler beim Laden des Spielfelds."); - } -}); - module.exports = router; diff --git a/sockets/arena.socket.js b/sockets/arena.socket.js index a09fdc0..124d994 100644 --- a/sockets/arena.socket.js +++ b/sockets/arena.socket.js @@ -1,6 +1,6 @@ /* ============================================================ sockets/arena.socket.js - 1v1 Matchmaking + 2v2 Team-Lobby + 4v4 Team-Lobby + 1v1 Matchmaking + 2v2 Team-Lobby inkl. Kampfphase nach end_turn ============================================================ */ @@ -21,25 +21,21 @@ const READY_TIMEOUT = 30; const teams2v2 = new Map(); const readyTeams2v2 = new Map(); -/* ── 4v4 State ── */ -const teams4v4 = new Map(); -const readyTeams4v4 = new Map(); - function generateId() { return `${Date.now()}_${Math.random().toString(36).slice(2, 7)}`; } /* ═══════════════════════════════════════════════════════════ - HELPER: Generisch fΓΌr 2v2 UND 4v4 + HELPER: Generisch fΓΌr 2v2 ═══════════════════════════════════════════════════════════ */ function getTeamMap(mode) { - return mode === "4v4" ? teams4v4 : teams2v2; + return teams2v2; } function getReadyMap(mode) { - return mode === "4v4" ? readyTeams4v4 : readyTeams2v2; + return readyTeams2v2; } function getMaxPlayers(mode) { - return mode === "4v4" ? 4 : 2; + return 2; } function broadcastLobbies(io, mode) { @@ -259,7 +255,7 @@ function boardStateToCards(boardState) { } /* ═══════════════════════════════════════════════════════════ - Handler-Generator fΓΌr 2v2 und 4v4 + Handler-Generator fΓΌr 2v2 ═══════════════════════════════════════════════════════════ */ function registerTeamModeHandlers(io, socket, mode) { const max = getMaxPlayers(mode); @@ -787,9 +783,8 @@ function registerArenaHandlers(io, socket) { }, animDuration); }); - /* ── 2v2 & 4v4 ── */ + /* ── 2v2 ── */ registerTeamModeHandlers(io, socket, "2v2"); - registerTeamModeHandlers(io, socket, "4v4"); /* ── Disconnect ── */ socket.on("disconnect", () => { @@ -797,7 +792,6 @@ function registerArenaHandlers(io, socket) { console.log(`[1v1] ${socket.id} disconnected – aus Pool entfernt.`); } leaveAllTeams_nvn(socket.id, io, "2v2"); - leaveAllTeams_nvn(socket.id, io, "4v4"); }); }