diff --git a/public/images/items/beutel.png b/public/images/items/beutel.png new file mode 100644 index 0000000..59bc3d7 Binary files /dev/null and b/public/images/items/beutel.png differ diff --git a/public/js/buildings/schwarzmarkt.js b/public/js/buildings/schwarzmarkt.js index 16dd3f7..548192d 100644 --- a/public/js/buildings/schwarzmarkt.js +++ b/public/js/buildings/schwarzmarkt.js @@ -39,7 +39,6 @@ Geheimhandel `; loadPages(); - initMarketTabs(); } @@ -51,40 +50,75 @@ async function loadPages() { let html = ""; - for (let i = 1; i <= 8; i++) { + for (let i = 1; i <= data.maxPages; i++) { + const price = data.prices.find((p) => p.page === i); + if (data.ownedPages.includes(i)) { html += ` -
-Seite ${i} ✔ +
+ + + +
+✔ +
+ +
+`; + } else if (price) { + html += ` +
+ + + +
+${price.price} 🪙 +
+ + +
`; } else { - const price = data.prices.find((p) => p.page === i); + html += ` +
+ + + +
+🔒 +
- if (price) { - html += ` -
-Seite ${i} Kaufen (${price.price} Gold)
`; - } else { - html += ` -
-Seite ${i} 🔒 +
`; - } } } container.innerHTML = html; } +/* Kaufen */ + document.addEventListener("click", async (e) => { - if (!e.target.classList.contains("buy")) return; + const button = e.target.closest(".buy-button"); + + if (!button) return; + + const slot = button.closest(".market-slot"); + + const page = slot.dataset.page; const res = await fetch("/api/blackmarket/buy-page", { method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ page }), }); const data = await res.json(); @@ -94,11 +128,11 @@ document.addEventListener("click", async (e) => { return; } - alert("Seite " + data.page + " freigeschaltet!"); - loadPages(); }); +/* Tabs */ + function initMarketTabs() { document.querySelectorAll(".market-tab").forEach((tab) => { tab.addEventListener("click", () => { diff --git a/routes/blackmarket.js b/routes/blackmarket.js index 43d7686..0d77528 100644 --- a/routes/blackmarket.js +++ b/routes/blackmarket.js @@ -23,9 +23,18 @@ router.get("/pages", auth, async (req, res) => { ORDER BY page `); + const [[config]] = await db.query(` +SELECT config_value +FROM game_config +WHERE config_key = 'inventory_max_pages' +`); + + const maxPages = config ? config.config_value : 8; + res.json({ ownedPages: owned.map((p) => p.page), prices: prices, + maxPages: maxPages, }); } catch (err) { console.error(err);