This commit is contained in:
Cay 2026-03-15 11:29:11 +00:00
parent a8bb5f90e5
commit 44ab3f31d8
2 changed files with 37 additions and 17 deletions

View File

@ -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 }),
});
}
}

View File

@ -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" });