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 ? `
-

+
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