diff --git a/public/js/buildings/wohnhaus.js b/public/js/buildings/wohnhaus.js index 37a5af1..12df154 100644 --- a/public/js/buildings/wohnhaus.js +++ b/public/js/buildings/wohnhaus.js @@ -1,6 +1,7 @@ let inventoryPage = 0; const slotsPerPage = 32; let inventoryItems = []; +let totalInventoryPages = 1; export async function loadWohnhaus() { const ui = document.querySelector(".building-ui"); @@ -76,7 +77,9 @@ export async function loadWohnhaus() { ================================ */ function updateAvatarOverlay(slotName, iconSrc) { - const overlay = document.querySelector(`.avatar-overlay[data-slot="${slotName}"]`); + const overlay = document.querySelector( + `.avatar-overlay[data-slot="${slotName}"]`, + ); if (!overlay) return; const img = overlay.querySelector("img"); @@ -86,7 +89,9 @@ function updateAvatarOverlay(slotName, iconSrc) { overlay.classList.add("visible"); } else { overlay.classList.remove("visible"); - setTimeout(() => { img.src = ""; }, 250); + setTimeout(() => { + img.src = ""; + }, 250); } } @@ -96,7 +101,11 @@ function updateAvatarOverlay(slotName, iconSrc) { async function loadInventory() { const res = await fetch("/api/inventory"); - inventoryItems = await res.json(); + const data = await res.json(); + + inventoryItems = data.items; + totalInventoryPages = data.totalPages; + renderInventory(); } @@ -131,9 +140,8 @@ function renderInventory() { grid.innerHTML = html; - const totalPages = Math.max(1, Math.ceil(inventoryItems.length / slotsPerPage)); document.getElementById("inventory-page").innerText = - "Seite " + (inventoryPage + 1) + " / " + totalPages; + "Seite " + (inventoryPage + 1) + " / " + totalInventoryPages; initDrag(); } @@ -151,8 +159,7 @@ function initInventoryButtons() { }; document.getElementById("inv-right").onclick = () => { - const totalPages = Math.max(1, Math.ceil(inventoryItems.length / slotsPerPage)); - if (inventoryPage < totalPages - 1) { + if (inventoryPage < totalInventoryPages - 1) { inventoryPage++; renderInventory(); } @@ -228,10 +235,10 @@ function initDrop() { slot.addEventListener("drop", (e) => { e.preventDefault(); - const itemId = e.dataTransfer.getData("itemId"); + const itemId = e.dataTransfer.getData("itemId"); const itemLevel = e.dataTransfer.getData("itemLevel"); - const itemSlot = e.dataTransfer.getData("slot"); - const source = e.dataTransfer.getData("source"); + const itemSlot = e.dataTransfer.getData("slot"); + const source = e.dataTransfer.getData("source"); const targetSlot = slot.dataset.slot; if (!itemSlot || itemSlot !== targetSlot) return; @@ -239,13 +246,17 @@ function initDrop() { let icon; if (source === "inventory") { - const inventoryItem = document.querySelector('.inventory-slot[data-id="' + itemId + '"]'); + const inventoryItem = document.querySelector( + '.inventory-slot[data-id="' + itemId + '"]', + ); if (!inventoryItem) return; icon = inventoryItem.querySelector("img").src; inventoryItem.classList.add("empty"); inventoryItem.innerHTML = ""; } else { - const slotItem = document.querySelector('.slot[data-slot="' + itemSlot + '"] img'); + const slotItem = document.querySelector( + '.slot[data-slot="' + itemSlot + '"] img', + ); if (!slotItem) return; icon = slotItem.src; } @@ -277,12 +288,12 @@ function initInventoryDrop() { grid.addEventListener("drop", (e) => { e.preventDefault(); - const source = e.dataTransfer.getData("source"); + const source = e.dataTransfer.getData("source"); if (source !== "slot") return; - const itemId = e.dataTransfer.getData("itemId"); + const itemId = e.dataTransfer.getData("itemId"); const itemLevel = e.dataTransfer.getData("itemLevel"); - const slotName = e.dataTransfer.getData("slot"); + const slotName = e.dataTransfer.getData("slot"); const slot = document.querySelector('.slot[data-slot="' + slotName + '"]'); if (!slot) return; @@ -323,4 +334,4 @@ async function saveEquipment(slot, itemId, itemLevelId) { headers: { "Content-Type": "application/json" }, body: JSON.stringify({ slot, itemId, itemLevelId }), }); -} \ No newline at end of file +} diff --git a/routes/inventory.js b/routes/inventory.js index 871ca87..d7f409d 100644 --- a/routes/inventory.js +++ b/routes/inventory.js @@ -24,7 +24,16 @@ WHERE user_inventory.user_id=? [userId], ); - res.json(items); + // Gekaufte Seiten laden + const [ownedPages] = await db.query( + `SELECT COUNT(*) as total FROM user_inventory_pages WHERE user_id = ?`, + [userId], + ); + + // Seite 1 ist immer kostenlos + const totalPages = Math.max(1, ownedPages[0].total); + + res.json({ items, totalPages }); } catch (err) { console.error("Inventory Fehler:", err); res.status(500).json({ error: "DB Fehler" });