From 68e2b94981b6208aebd125182702ec3bec204fde Mon Sep 17 00:00:00 2001 From: cay Date: Sat, 11 Apr 2026 13:22:26 +0100 Subject: [PATCH] fjmfrtsx --- routes/booster.route.js | 8 +- routes/booster_route.js | 248 ---------------------------------------- 2 files changed, 4 insertions(+), 252 deletions(-) delete mode 100644 routes/booster_route.js diff --git a/routes/booster.route.js b/routes/booster.route.js index 2c9f884..4e3bf06 100644 --- a/routes/booster.route.js +++ b/routes/booster.route.js @@ -64,7 +64,7 @@ router.get("/booster/cards", async (req, res) => { return res.status(401).json({ error: "Nicht eingeloggt" }); try { const [cards] = await db.query( - "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown FROM cards ORDER BY id", + "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards ORDER BY id", ); res.json(cards); } catch (err) { @@ -92,7 +92,7 @@ router.post("/booster/open", async (req, res) => { const maxAllowed = Math.max(...weights.map((w) => w.rarity)); const [allCards] = await db.query( - "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown FROM cards WHERE rarity <= ?", + "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards WHERE rarity <= ?", [maxAllowed], ); @@ -173,7 +173,7 @@ router.post("/booster/wood-donate", async (req, res) => { // Rarity-3 Karten laden const [pool] = await db.query( - "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown FROM cards WHERE rarity = 3", + "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards WHERE rarity = 3", ); if (!pool.length) return res.status(400).json({ error: "Keine Rarity-3 Karten verfügbar" }); @@ -220,7 +220,7 @@ router.post("/booster/gold-donate", async (req, res) => { } const [pool] = await db.query( - "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown FROM cards WHERE rarity = 4", + "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards WHERE rarity = 4", ); if (!pool.length) return res.status(400).json({ error: "Keine Rarity-4 Karten verfügbar" }); diff --git a/routes/booster_route.js b/routes/booster_route.js deleted file mode 100644 index 4e3bf06..0000000 --- a/routes/booster_route.js +++ /dev/null @@ -1,248 +0,0 @@ -const express = require("express"); -const router = express.Router(); -const db = require("../database/database"); - -/* ================================ - Gewichtete Zufallsauswahl -================================ */ -function weightedRandom(weights) { - const total = weights.reduce((s, w) => s + w.weight, 0); - let r = Math.random() * total; - for (const entry of weights) { - r -= entry.weight; - if (r <= 0) return entry.rarity; - } - return weights[weights.length - 1].rarity; -} - -/* ================================ - Gewichte je Spielerlevel -================================ */ -function getWeights(playerLevel) { - if (playerLevel < 10) - return [ - { rarity: 1, weight: 95 }, // 95% - { rarity: 2, weight: 5 }, // 5% - ]; - if (playerLevel < 20) - return [ - { rarity: 1, weight: 87 }, // 87% - { rarity: 2, weight: 11 }, // 11% - { rarity: 3, weight: 2 }, // 2% - ]; - if (playerLevel < 30) - return [ - { rarity: 1, weight: 80 }, // 80% - { rarity: 2, weight: 14 }, // 14% - { rarity: 3, weight: 4 }, // 4% - { rarity: 4, weight: 2 }, // 2% - ]; - if (playerLevel < 40) - return [ - { rarity: 1, weight: 75 }, // 75% - { rarity: 2, weight: 16 }, // 16% - { rarity: 3, weight: 5 }, // 5% - { rarity: 4, weight: 3 }, // 3% - { rarity: 5, weight: 1 }, // 1% - ]; - return [ - { rarity: 1, weight: 60 }, // 60.0% - { rarity: 2, weight: 25 }, // 25.0% - { rarity: 3, weight: 9 }, // 9.0% - { rarity: 4, weight: 4 }, // 4.0% - { rarity: 5, weight: 1.5 }, // 1.5% - { rarity: 6, weight: 0.5 }, // 0.5% - ]; -} - -/* ================================ - GET /api/booster/cards - Alle Karten inkl. Stats für Slot-Animation -================================ */ -router.get("/booster/cards", async (req, res) => { - if (!req.session?.user) - return res.status(401).json({ error: "Nicht eingeloggt" }); - try { - const [cards] = await db.query( - "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards ORDER BY id", - ); - res.json(cards); - } catch (err) { - console.error(err); - res.status(500).json({ error: "DB Fehler" }); - } -}); - -/* ================================ - POST /api/booster/open - 5 gewichtete Zufallskarten inkl. Stats -================================ */ -router.post("/booster/open", async (req, res) => { - if (!req.session?.user) - return res.status(401).json({ error: "Nicht eingeloggt" }); - - const userId = req.session.user.id; - try { - const [[account]] = await db.query( - "SELECT level FROM accounts WHERE id = ?", - [userId], - ); - const playerLevel = account?.level ?? 1; - const weights = getWeights(playerLevel); - const maxAllowed = Math.max(...weights.map((w) => w.rarity)); - - const [allCards] = await db.query( - "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards WHERE rarity <= ?", - [maxAllowed], - ); - - if (!allCards.length) - return res.status(400).json({ error: "Keine Karten verfügbar" }); - - const result = []; - for (let i = 0; i < 5; i++) { - const targetRarity = weightedRandom(weights); - let pool = allCards.filter((c) => parseInt(c.rarity) === targetRarity); - if (!pool.length) { - for (let fb = targetRarity - 1; fb >= 1; fb--) { - pool = allCards.filter((c) => parseInt(c.rarity) === fb); - if (pool.length) break; - } - } - if (!pool.length) pool = allCards; - result.push(pool[Math.floor(Math.random() * pool.length)]); - } - - res.json({ cards: result, playerLevel }); - } catch (err) { - console.error(err); - res.status(500).json({ error: "DB Fehler" }); - } -}); - -/* ================================ - POST /api/booster/save - Gezogene Karten in user_cards speichern - Body: { cardIds: [1, 2, 3, 4, 5] } -================================ */ -router.post("/booster/save", async (req, res) => { - if (!req.session?.user) - return res.status(401).json({ error: "Nicht eingeloggt" }); - - const userId = req.session.user.id; - const cardIds = req.body?.cardIds; - - if (!Array.isArray(cardIds) || cardIds.length === 0) { - return res.status(400).json({ error: "Keine Karten übergeben" }); - } - - try { - for (const cardId of cardIds) { - await db.query( - `INSERT INTO user_cards (user_id, card_id, amount) - VALUES (?, ?, 1) - ON DUPLICATE KEY UPDATE amount = amount + 1`, - [userId, cardId], - ); - } - res.json({ success: true }); - } catch (err) { - console.error(err); - res.status(500).json({ error: "DB Fehler beim Speichern" }); - } -}); - -/* ================================ - POST /api/booster/wood-donate - 100 Holz bezahlen → 1 zufällige Rarity-3 Karte -================================ */ -router.post("/booster/wood-donate", async (req, res) => { - if (!req.session?.user) - return res.status(401).json({ error: "Nicht eingeloggt" }); - - const userId = req.session.user.id; - try { - // Holz prüfen - const [[currency]] = await db.query( - "SELECT wood FROM account_currency WHERE account_id = ?", - [userId], - ); - if (!currency || currency.wood < 100) { - return res.status(400).json({ error: "Nicht genug Holz (100 benötigt)" }); - } - - // Rarity-3 Karten laden - const [pool] = await db.query( - "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards WHERE rarity = 3", - ); - if (!pool.length) - return res.status(400).json({ error: "Keine Rarity-3 Karten verfügbar" }); - - // 100 Holz abziehen - await db.query( - "UPDATE account_currency SET wood = wood - 100 WHERE account_id = ?", - [userId], - ); - - // 1 zufällige Rarity-3 Karte ziehen - const card = pool[Math.floor(Math.random() * pool.length)]; - - // Direkt in user_cards speichern - await db.query( - `INSERT INTO user_cards (user_id, card_id, amount) VALUES (?, ?, 1) - ON DUPLICATE KEY UPDATE amount = amount + 1`, - [userId, card.id], - ); - - res.json({ card }); - } catch (err) { - console.error(err); - res.status(500).json({ error: "DB Fehler" }); - } -}); - -/* ================================ - POST /api/booster/gold-donate - 100 Gold bezahlen → 1 zufällige Rarity-4 Karte -================================ */ -router.post("/booster/gold-donate", async (req, res) => { - if (!req.session?.user) - return res.status(401).json({ error: "Nicht eingeloggt" }); - - const userId = req.session.user.id; - try { - const [[currency]] = await db.query( - "SELECT gold FROM account_currency WHERE account_id = ?", - [userId], - ); - if (!currency || currency.gold < 100) { - return res.status(400).json({ error: "Nicht genug Gold (100 benötigt)" }); - } - - const [pool] = await db.query( - "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards WHERE rarity = 4", - ); - if (!pool.length) - return res.status(400).json({ error: "Keine Rarity-4 Karten verfügbar" }); - - await db.query( - "UPDATE account_currency SET gold = gold - 100 WHERE account_id = ?", - [userId], - ); - - const card = pool[Math.floor(Math.random() * pool.length)]; - - await db.query( - `INSERT INTO user_cards (user_id, card_id, amount) VALUES (?, ?, 1) - ON DUPLICATE KEY UPDATE amount = amount + 1`, - [userId, card.id], - ); - - res.json({ card }); - } catch (err) { - console.error(err); - res.status(500).json({ error: "DB Fehler" }); - } -}); - -module.exports = router;