This commit is contained in:
cay 2026-04-14 11:40:20 +01:00
parent c0f7f965c4
commit 33460b025d
3 changed files with 23 additions and 20 deletions

View File

@ -1,6 +1,7 @@
const express = require("express"); const express = require("express");
const router = express.Router(); const router = express.Router();
const db = require("../database/database"); const db = require("../database/database");
const { getMaxRarity } = require("../utils/rarity");
/* ================================ /* ================================
Gewichtete Zufallsauswahl Gewichtete Zufallsauswahl
@ -171,12 +172,16 @@ router.post("/booster/wood-donate", async (req, res) => {
return res.status(400).json({ error: "Nicht genug Holz (100 benötigt)" }); return res.status(400).json({ error: "Nicht genug Holz (100 benötigt)" });
} }
// Rarity-3 Karten laden // Spielerlevel → passende Rarity bestimmen
const [[acc]] = await db.query("SELECT level FROM accounts WHERE id = ?", [userId]);
const woodRarity = getMaxRarity(acc?.level ?? 1);
const [pool] = await db.query( const [pool] = await db.query(
"SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards WHERE rarity = 3", "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards WHERE rarity = ?",
[woodRarity]
); );
if (!pool.length) if (!pool.length)
return res.status(400).json({ error: "Keine Rarity-3 Karten verfügbar" }); return res.status(400).json({ error: `Keine Rarity-${woodRarity} Karten verfügbar` });
// 100 Holz abziehen // 100 Holz abziehen
await db.query( await db.query(
@ -219,11 +224,16 @@ router.post("/booster/gold-donate", async (req, res) => {
return res.status(400).json({ error: "Nicht genug Gold (100 benötigt)" }); return res.status(400).json({ error: "Nicht genug Gold (100 benötigt)" });
} }
// Spielerlevel → 1 Rarity über dem Maximum (Bonus für Gold)
const [[accG]] = await db.query("SELECT level FROM accounts WHERE id = ?", [userId]);
const goldRarity = Math.min(getMaxRarity(accG?.level ?? 1) + 1, 6);
const [pool] = await db.query( const [pool] = await db.query(
"SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards WHERE rarity = 4", "SELECT id, name, image, icon, max_level, rarity, attack, defends, cooldown, `range`, `race` FROM cards WHERE rarity = ?",
[goldRarity]
); );
if (!pool.length) if (!pool.length)
return res.status(400).json({ error: "Keine Rarity-4 Karten verfügbar" }); return res.status(400).json({ error: `Keine Rarity-${goldRarity} Karten verfügbar` });
await db.query( await db.query(
"UPDATE account_currency SET gold = gold - 100 WHERE account_id = ?", "UPDATE account_currency SET gold = gold - 100 WHERE account_id = ?",

View File

@ -17,10 +17,11 @@ router.get("/progress", requireLogin, async (req, res) => {
const userId = req.session.user.id; const userId = req.session.user.id;
try { try {
const [rows] = await db.query( const [rows] = await db.query(
"SELECT event_id FROM daily_completions WHERE user_id = ? AND DATE(completed_at) = CURDATE()", "SELECT event_id FROM daily_completions WHERE user_id = ? AND event_id BETWEEN 101 AND 107 AND DATE(completed_at) = CURDATE()",
[userId] [userId]
); );
const completed = rows.map(r => r.event_id); // event_id 101-107 → Station 1-7
const completed = rows.map(r => r.event_id - 100);
res.json({ completed, total: 7, allDone: completed.length >= 7 }); res.json({ completed, total: 7, allDone: completed.length >= 7 });
} catch (err) { } catch (err) {
console.error("[Daily] Fortschritt laden:", err); console.error("[Daily] Fortschritt laden:", err);

View File

@ -315,29 +315,21 @@ async function htHandleMatchEnd(io, matchId, aiRoom, loserSlot) {
try { try {
await db.query( await db.query(
`INSERT IGNORE INTO daily_completions (user_id, event_id) VALUES (?, ?)`, `INSERT IGNORE INTO daily_completions (user_id, event_id) VALUES (?, ?)`,
[aiRoom.playerAccountId, aiRoom.station] [aiRoom.playerAccountId, 100 + aiRoom.station]
); );
} catch (err) { } catch (err) {
console.error('[HT] Completion speichern Fehler:', err); console.error('[HT] Completion speichern Fehler:', err);
} }
// Punkte vergeben (Platzhalter: 10 Punkte pro Station)
let winResult = { awarded: 0 };
if (aiRoom.playerAccountId) {
try {
winResult = await pointsRoute.awardPoints(aiRoom.playerAccountId, 10);
} catch {}
}
io.to(aiRoom.playerSocketId).emit('ht_station_complete', { io.to(aiRoom.playerSocketId).emit('ht_station_complete', {
station: aiRoom.station, station: aiRoom.station,
}); });
io.to(aiRoom.playerSocketId).emit('match_result', { io.to(aiRoom.playerSocketId).emit('match_result', {
won: true, won: true,
awarded: winResult.awarded ?? 0, awarded: 0,
level_up: winResult.level_up ?? false, level_up: false,
new_level:winResult.new_level ?? null, new_level: null,
}); });
} else { } else {
io.to(aiRoom.playerSocketId).emit('match_result', { io.to(aiRoom.playerSocketId).emit('match_result', {
@ -392,7 +384,7 @@ function registerHimmelstorHandlers(io, socket) {
if (accountId) { if (accountId) {
const [done] = await db.query( const [done] = await db.query(
"SELECT id FROM daily_completions WHERE user_id = ? AND event_id = ? AND DATE(completed_at) = CURDATE()", "SELECT id FROM daily_completions WHERE user_id = ? AND event_id = ? AND DATE(completed_at) = CURDATE()",
[accountId, station] [accountId, 100 + station]
); );
if (done.length > 0) { if (done.length > 0) {
socket.emit('ht_daily_error', { message: `Station ${station} wurde heute bereits abgeschlossen.` }); socket.emit('ht_daily_error', { message: `Station ${station} wurde heute bereits abgeschlossen.` });