From 1dcf0b808055f1810ef73a6e237e8570e0a321a5 Mon Sep 17 00:00:00 2001 From: Cay Date: Fri, 13 Mar 2026 14:15:29 +0000 Subject: [PATCH] Wohnhaus mit avantar ausgestattet --- app.js | 6 ++++ public/js/buildings/wohnhaus.js | 51 +++++++++++++++++++++++++++++++++ public/js/map-ui.js | 28 +++++++++++++----- routes/equip.js | 21 ++++++++++++++ routes/inventory.js | 27 +++++++++++++++++ routes/routes/avatar.js | 23 +++++++++++++++ views/launcher.ejs | 2 +- 7 files changed, 150 insertions(+), 8 deletions(-) create mode 100644 public/js/buildings/wohnhaus.js create mode 100644 routes/equip.js create mode 100644 routes/inventory.js create mode 100644 routes/routes/avatar.js diff --git a/app.js b/app.js index f29b1fb..0819f02 100644 --- a/app.js +++ b/app.js @@ -16,6 +16,9 @@ const session = require("express-session"); const loginRoutes = require("./routes/login"); const launcherRoutes = require("./routes/launcher"); const buildingRoutes = require("./routes/buildings"); +const inventory = require("./routes/inventory"); +const avatar = require("./routes/avatar"); +const equip = require("./routes/equip"); const app = express(); app.set("trust proxy", 1); @@ -172,6 +175,9 @@ app.use("/create-character", characterRoutes); app.use("/login", loginRoutes); app.use("/launcher", launcherRoutes); app.use("/", buildingRoutes); +app.use("/api/inventory", inventory); +app.use("/api/avatar", avatar); +app.use("/api/equip", equip); /* ======================== 404 Handler diff --git a/public/js/buildings/wohnhaus.js b/public/js/buildings/wohnhaus.js new file mode 100644 index 0000000..fea0119 --- /dev/null +++ b/public/js/buildings/wohnhaus.js @@ -0,0 +1,51 @@ +export async function loadWohnhaus(data) { + const container = document.querySelector(".building-ui"); + + container.innerHTML = ` +
+ +
+ +
+ +
+ `; + + loadAvatar(); + loadInventory(); +} + +async function loadAvatar() { + const res = await fetch("/api/avatar"); + const avatar = await res.json(); + + let html = `
`; + + avatar.forEach((i) => { + html += ``; + }); + + html += "
"; + + document.getElementById("avatar").innerHTML = html; +} + +async function loadInventory() { + const res = await fetch("/api/inventory"); + const items = await res.json(); + + let html = ""; + + items.forEach((item) => { + html += ` +
+ +

${item.name}

+
+`; + }); + + document.getElementById("inventory").innerHTML = html; +} diff --git a/public/js/map-ui.js b/public/js/map-ui.js index d6c389a..5792579 100644 --- a/public/js/map-ui.js +++ b/public/js/map-ui.js @@ -1,7 +1,12 @@ +import { loadWohnhaus } from "./buildings/wohnhaus.js"; const popup = document.getElementById("building-popup"); const title = document.getElementById("popup-title"); const tooltip = document.getElementById("map-tooltip"); +const buildingModules = { + wohnhaus: loadWohnhaus, +}; + /* ================================ Tabs zurücksetzen ================================ */ @@ -59,15 +64,24 @@ document.querySelectorAll(".building").forEach((building) => { `; - document.getElementById("tab-actions").innerHTML = ` - - - `; + const actionsTab = document.getElementById("tab-actions"); + + actionsTab.innerHTML = ` `; + + // Prüfen ob das Gebäude ein eigenes Modul hat + if (buildingModules[data.type]) { + actionsTab.innerHTML = ` +
+ `; + + // Modul starten + buildingModules[data.type](data); + } document.getElementById("tab-upgrade").innerHTML = ` -

Kosten: ${data.upgradeCost}

- - `; +

Kosten: ${data.upgradeCost}

+ + `; document.getElementById("tab-history").innerHTML = `

${data.history}

diff --git a/routes/equip.js b/routes/equip.js new file mode 100644 index 0000000..7462d41 --- /dev/null +++ b/routes/equip.js @@ -0,0 +1,21 @@ +const express = require("express"); +const router = express.Router(); +const db = require("../db"); + +router.post("/", async (req, res) => { + const userId = 1; + const { itemId, itemLevelId } = req.body; + + await db.query( + ` +REPLACE INTO avatar_equipment +(user_id,slot,item_id,item_level_id) +VALUES (?,?,?,?) +`, + [userId, "weapon", itemId, itemLevelId], + ); + + res.json({ success: true }); +}); + +module.exports = router; diff --git a/routes/inventory.js b/routes/inventory.js new file mode 100644 index 0000000..a8594ba --- /dev/null +++ b/routes/inventory.js @@ -0,0 +1,27 @@ +const express = require("express"); +const router = express.Router(); +const db = require("../db"); + +router.get("/", async (req, res) => { + const userId = 1; + + const items = await db.query( + ` +SELECT +items.id, +items.name, +items.icon, +item_levels.level, +user_inventory.amount +FROM user_inventory +JOIN items ON items.id=user_inventory.item_id +LEFT JOIN item_levels ON item_levels.id=user_inventory.item_level_id +WHERE user_inventory.user_id=? +`, + [userId], + ); + + res.json(items); +}); + +module.exports = router; diff --git a/routes/routes/avatar.js b/routes/routes/avatar.js new file mode 100644 index 0000000..3293df2 --- /dev/null +++ b/routes/routes/avatar.js @@ -0,0 +1,23 @@ +const express = require("express"); +const router = express.Router(); +const db = require("../db"); + +router.get("/", async (req, res) => { + const userId = 1; + + const avatar = await db.query( + ` +SELECT +avatar_equipment.slot, +items.icon +FROM avatar_equipment +JOIN items ON items.id=avatar_equipment.item_id +WHERE avatar_equipment.user_id=? +`, + [userId], + ); + + res.json(avatar); +}); + +module.exports = router; diff --git a/views/launcher.ejs b/views/launcher.ejs index 0e107d5..03ad903 100644 --- a/views/launcher.ejs +++ b/views/launcher.ejs @@ -203,7 +203,7 @@
- +