diff --git a/public/js/quickmenu/events.js b/public/js/quickmenu/events.js index 073356c..13d692d 100644 --- a/public/js/quickmenu/events.js +++ b/public/js/quickmenu/events.js @@ -5,7 +5,7 @@ Stat-Icons SVG ================================ */ const BS_SVG_RANGE = ``; -const BS_SVG_RACE = ``; +const BS_SVG_RACE = ``; const RARITY_CRYSTALS = { 1: "roter-cristal.png", @@ -41,11 +41,15 @@ function cardHTML(card, isFront = true) { ${card?.defends != null ? `${card.defends}` : ""} ${card?.cooldown != null ? `${card.cooldown}` : ""} ${card?.rarity ? `
${rarityImgs(card.rarity, 11)}
` : ""} - ${(card?.range != null || card?.race != null) ? ` + ${ + card?.range != null || card?.race != null + ? `
${card?.range != null ? `${BS_SVG_RANGE} ${card.range}` : ""} - ${card?.race != null ? `${BS_SVG_RACE} ${card.race}` : ""} -
` : ""} + ${card?.race != null ? `${BS_SVG_RACE} ${card.race}` : ""} + ` + : "" + }
${card?.name || ""}
`; } @@ -185,7 +189,7 @@ export async function loadEvents() {
- Gold Spenden + Gold Spenden
Bitte Spenden
100 Gold spenden @@ -385,7 +389,7 @@ export async function loadEvents() { }); body.querySelector("#arena-back-btn").addEventListener("click", () => { - if (isArenaSearching) return; // Während Suche gesperrt + if (isArenaSearching) return; // Während Suche gesperrt eventsGrid.style.display = ""; arenaUi.style.display = "none"; cancelArenaSearch(); @@ -403,12 +407,16 @@ export async function loadEvents() { if (card) { card.classList.remove("searching"); card.querySelector(".arena-mode-label-daily").textContent = "1v1"; - card.querySelector(".arena-mode-desc-daily").textContent = "Einzelkampf – Beweis deine Stärke im Duell"; + card.querySelector(".arena-mode-desc-daily").textContent = + "Einzelkampf – Beweis deine Stärke im Duell"; } if (status) status.style.display = "none"; const backBtn = body.querySelector("#arena-back-btn"); - if (backBtn) { backBtn.style.opacity = "1"; backBtn.style.cursor = "pointer"; } + if (backBtn) { + backBtn.style.opacity = "1"; + backBtn.style.cursor = "pointer"; + } } function cancelArenaSearch() { @@ -445,16 +453,19 @@ export async function loadEvents() { const card1v1 = body.querySelector("#arena-1v1-card"); card1v1.classList.add("searching"); card1v1.querySelector(".arena-mode-label-daily").textContent = "⏳ Suche…"; - card1v1.querySelector(".arena-mode-desc-daily").textContent = "Warte auf passenden Gegner…"; + card1v1.querySelector(".arena-mode-desc-daily").textContent = + "Warte auf passenden Gegner…"; // Zurück-Button sperren während Suche const backBtn = body.querySelector("#arena-back-btn"); backBtn.style.opacity = "0.35"; - backBtn.style.cursor = "not-allowed"; + backBtn.style.cursor = "not-allowed"; showArenaStatus(`⏳ Suche Gegner (Level ${Math.max(1, me.level - 5)}–${me.level + 5})…
Suche abbrechen`); - body.querySelector("#arena-cancel-link")?.addEventListener("click", () => cancelArenaSearch()); + body + .querySelector("#arena-cancel-link") + ?.addEventListener("click", () => cancelArenaSearch()); socket.off("match_found"); socket.off("queue_status"); @@ -464,9 +475,11 @@ export async function loadEvents() { const pool = data.poolSize ? ` · ${data.poolSize} im Pool` : ""; showArenaStatus(`⏳ Suche Gegner (Level ${Math.max(1, me.level - 5)}–${me.level + 5})${pool}
Suche abbrechen`); - body.querySelector("#arena-cancel-link")?.addEventListener("click", () => { - cancelArenaSearch(); - }); + body + .querySelector("#arena-cancel-link") + ?.addEventListener("click", () => { + cancelArenaSearch(); + }); } }); @@ -496,16 +509,20 @@ export async function loadEvents() { const box = body.querySelector("#arena-daily-status"); if (!box) return; box.style.display = "block"; - box.style.color = isError ? "#e74c3c" : "#dceb15"; - box.innerHTML = html; - if (isError) setTimeout(() => { box.style.display = "none"; }, 3000); + box.style.color = isError ? "#e74c3c" : "#dceb15"; + box.innerHTML = html; + if (isError) + setTimeout(() => { + box.style.display = "none"; + }, 3000); } function showArenaMatchFound(myName, opponentName, onDone) { if (document.getElementById("match-found-overlay")) return; const overlay = document.createElement("div"); overlay.id = "match-found-overlay"; - overlay.style.cssText = "position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.9);display:flex;flex-direction:column;align-items:center;justify-content:center;"; + overlay.style.cssText = + "position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.9);display:flex;flex-direction:column;align-items:center;justify-content:center;"; overlay.innerHTML = `
⚔️ Match gefunden!
${myName}  vs  ${opponentName}
@@ -513,8 +530,14 @@ export async function loadEvents() {
`; document.body.appendChild(overlay); - requestAnimationFrame(() => { const b = document.getElementById("mfBar"); if (b) b.style.width = "100%"; }); - setTimeout(() => { overlay.remove(); onDone(); }, 1600); + requestAnimationFrame(() => { + const b = document.getElementById("mfBar"); + if (b) b.style.width = "100%"; + }); + setTimeout(() => { + overlay.remove(); + onDone(); + }, 1600); } function openArenaMatchPopup(src, opponentName, matchId, mode = "1v1") { @@ -522,10 +545,12 @@ export async function loadEvents() { document.getElementById("arena-popup")?.remove(); const backdrop = document.createElement("div"); backdrop.id = "arena-backdrop"; - backdrop.style.cssText = "position:fixed;inset:0;background:rgba(0,0,0,0.82);backdrop-filter:blur(5px);z-index:9998;"; + backdrop.style.cssText = + "position:fixed;inset:0;background:rgba(0,0,0,0.82);backdrop-filter:blur(5px);z-index:9998;"; const popup = document.createElement("div"); popup.id = "arena-popup"; - popup.style.cssText = "position:fixed;inset:50px;z-index:9999;display:flex;flex-direction:column;border-radius:14px;overflow:hidden;box-shadow:0 0 0 1px rgba(255,215,80,0.35),0 30px 90px rgba(0,0,0,0.85);"; + popup.style.cssText = + "position:fixed;inset:50px;z-index:9999;display:flex;flex-direction:column;border-radius:14px;overflow:hidden;box-shadow:0 0 0 1px rgba(255,215,80,0.35),0 30px 90px rgba(0,0,0,0.85);"; popup.innerHTML = `
⚔️ ${mode} · vs ${opponentName} @@ -545,12 +570,15 @@ export async function loadEvents() { /* ── Arena2 Daily Zustand (2v2 Lobby) ── */ let isArena2InMatch = false; - let daily2v2TeamId = null; - let daily2v2Me = null; + let daily2v2TeamId = null; + let daily2v2Me = null; async function open2v2DailyLobby() { const socket = window._socket; - if (!socket) { showDaily2v2Error("❌ Keine Verbindung zum Server."); return; } + if (!socket) { + showDaily2v2Error("❌ Keine Verbindung zum Server."); + return; + } if (!daily2v2Me) { try { @@ -576,7 +604,7 @@ export async function loadEvents() { socket.on("2v2_team_joined", (data) => { daily2v2TeamId = data.teamId; - body.querySelector("#daily-team-panel").style.display = "block"; + body.querySelector("#daily-team-panel").style.display = "block"; body.querySelector("#daily-lobby-section").style.display = "none"; }); @@ -584,17 +612,22 @@ export async function loadEvents() { socket.on("2v2_partner_left", (data) => { const s = body.querySelector("#daily-team-status"); - if (s) s.innerHTML = `⚠️ ${data.name} hat das Team verlassen.`; + if (s) + s.innerHTML = `⚠️ ${data.name} hat das Team verlassen.`; }); socket.on("2v2_searching", () => { const s = body.querySelector("#daily-team-status"); - if (s) s.innerHTML = `
⏳ Suche nach Gegnerteam…
`; + if (s) + s.innerHTML = `
⏳ Suche nach Gegnerteam…
`; const a = body.querySelector("#daily-team-actions"); if (a) a.innerHTML = ""; // Zurück sperren während Suche const backBtn = body.querySelector("#arena2-back-btn"); - if (backBtn) { backBtn.style.opacity = "0.35"; backBtn.style.cursor = "not-allowed"; } + if (backBtn) { + backBtn.style.opacity = "0.35"; + backBtn.style.cursor = "not-allowed"; + } isArena2InMatch = true; }); @@ -606,16 +639,20 @@ export async function loadEvents() { isArena2InMatch = false; markDailyComplete(3); - showArenaMatchFound(daily2v2Me.name, `Team ${data.myTeam === 1 ? 2 : 1}`, () => { - eventsGrid.style.display = ""; - arena2Ui.style.display = "none"; - openArenaMatchPopup( - `/arena/2v2?match=${encodeURIComponent(data.matchId)}&slot=${encodeURIComponent(data.mySlot)}`, - data.opponents?.join(" & ") || "Gegner", - data.matchId, - "2v2", - ); - }); + showArenaMatchFound( + daily2v2Me.name, + `Team ${data.myTeam === 1 ? 2 : 1}`, + () => { + eventsGrid.style.display = ""; + arena2Ui.style.display = "none"; + openArenaMatchPopup( + `/arena/2v2?match=${encodeURIComponent(data.matchId)}&slot=${encodeURIComponent(data.mySlot)}`, + data.opponents?.join(" & ") || "Gegner", + data.matchId, + "2v2", + ); + }, + ); }); socket.on("2v2_error", (data) => showDaily2v2Error(`❌ ${data.message}`)); @@ -633,7 +670,9 @@ export async function loadEvents() { el.innerHTML = `
Keine offenen Teams vorhanden.
`; return; } - el.innerHTML = list.map(t => ` + el.innerHTML = list + .map( + (t) => `
⚔️ ${t.leader} @@ -641,10 +680,15 @@ export async function loadEvents() { ${t.count}/2
-
`).join(""); - el.querySelectorAll(".arena-btn-join").forEach(btn => { +
`, + ) + .join(""); + el.querySelectorAll(".arena-btn-join").forEach((btn) => { btn.addEventListener("click", () => { - socket.emit("join_2v2_team", { teamId: btn.dataset.teamid, playerData: daily2v2Me }); + socket.emit("join_2v2_team", { + teamId: btn.dataset.teamid, + playerData: daily2v2Me, + }); }); }); } @@ -654,25 +698,31 @@ export async function loadEvents() { const actionsEl = body.querySelector("#daily-team-actions"); if (!playersEl || !actionsEl) return; - playersEl.innerHTML = data.players.map(p => ` -
+ playersEl.innerHTML = data.players + .map( + (p) => ` +
${p.name} Lvl ${p.level} - ${p.ready ? '✅ Bereit' : '⌛ Wartet'} -
`).join(""); + ${p.ready ? "✅ Bereit" : "⌛ Wartet"} +
`, + ) + .join(""); if (data.count < 2) { actionsEl.innerHTML = `
Warte auf Partner…
`; } else { - const myEntry = data.players.find(p => p.name === daily2v2Me?.name); + const myEntry = data.players.find((p) => p.name === daily2v2Me?.name); const iAmReady = myEntry?.ready; actionsEl.innerHTML = iAmReady ? `` : ``; if (!iAmReady) { - body.querySelector("#daily-ready-btn")?.addEventListener("click", () => { - socket.emit("2v2_player_ready", { teamId: daily2v2TeamId }); - }); + body + .querySelector("#daily-ready-btn") + ?.addEventListener("click", () => { + socket.emit("2v2_player_ready", { teamId: daily2v2TeamId }); + }); } } } @@ -695,16 +745,21 @@ export async function loadEvents() { const panel = body.querySelector("#daily-team-panel"); const section = body.querySelector("#daily-lobby-section"); const backBtn = body.querySelector("#arena2-back-btn"); - if (panel) panel.style.display = "none"; + if (panel) panel.style.display = "none"; if (section) section.style.display = ""; - if (backBtn) { backBtn.style.opacity = "1"; backBtn.style.cursor = "pointer"; } + if (backBtn) { + backBtn.style.opacity = "1"; + backBtn.style.cursor = "pointer"; + } } function showDaily2v2Error(msg) { const s = body.querySelector("#daily-team-status"); if (!s) return; s.innerHTML = `${msg}`; - setTimeout(() => { s.innerHTML = ""; }, 3000); + setTimeout(() => { + s.innerHTML = ""; + }, 3000); } // Lobby beim Öffnen des Arena2-UI initialisieren