This commit is contained in:
cay 2026-04-14 09:05:02 +01:00
parent 49b571699b
commit d5f7904365

View File

@ -29,30 +29,77 @@ function calcAvatarHp(level) {
return 20 + (Math.max(1, Math.min(50, level || 1)) - 1) * 2;
}
/* ── Max. Rarity nach Spielerlevel (identisch zu combine.route.js) ── */
function getMaxRarity(playerLevel) {
if (playerLevel < 10) return 2;
if (playerLevel < 20) return 3;
if (playerLevel < 30) return 4;
if (playerLevel < 40) return 5;
return 6;
}
/* ── Wächter-Namen pro Station ────────────────────────────── */
const GUARD_NAMES = [
"", "Torwächter", "Waldläufer", "Steinbrecher",
"Schattenjäger", "Eisenherzog", "Sturmritter", "Himmelsherold",
];
/* ── KI-Deck laden (Schwierigkeit nach Station) ───────────── */
async function loadAiDeck(station) {
const maxRarity = station <= 2 ? 1 : station <= 4 ? 2 : station <= 6 ? 3 : 4;
/* KI-Deck laden (Schwierigkeit skaliert mit Station)
Station 1 5 Karten, max. Rarity 1
Station 2 7 Karten, max. Rarity 1
Station 3 9 Karten, max. Rarity 2
Station 4 11 Karten, max. Rarity 2
Station 5 12 Karten, max. Rarity 3
Station 6 14 Karten, max. Rarity 3
Station 7 15 Karten, max. Rarity 4
*/
async function loadAiDeck(station, playerLevel) {
// Rarity nach Station (Schwierigkeitsstufe)
const stationRarity = station <= 2 ? 1
: station <= 4 ? 2
: station <= 6 ? 3
: 4;
// KI darf maximal 1 Rarity über dem Spieler liegen
const playerMaxRarity = getMaxRarity(playerLevel || 1);
const maxRarity = Math.min(stationRarity, playerMaxRarity + 1);
// Kartenanzahl nach Station (315)
const deckSize = station === 1 ? 5
: station === 2 ? 7
: station === 3 ? 9
: station === 4 ? 11
: station === 5 ? 12
: station === 6 ? 14
: 15;
try {
// Zuerst passende Karten mit korrekter Rarity holen
const [cards] = await db.query(
`SELECT id, name, image, attack, defends, cooldown, \`range\`, \`race\`, rarity
FROM cards WHERE rarity <= ? ORDER BY RAND() LIMIT 10`,
[maxRarity]
FROM cards
WHERE rarity <= ?
ORDER BY RAND()
LIMIT ?`,
[maxRarity, deckSize]
);
if (cards.length === 0) {
// Fallback: alle Karten
const [all] = await db.query(
`SELECT id, name, image, attack, defends, cooldown, \`range\`, \`race\`, rarity
FROM cards ORDER BY RAND() LIMIT 10`
);
return all.map(c => ({ ...c, currentCd: 0 }));
if (cards.length > 0) {
console.log(`[HT] KI-Deck Station ${station}: ${cards.length} Karten, max. Rarity ${maxRarity}`);
return cards.map(c => ({ ...c, currentCd: 0 }));
}
return cards.map(c => ({ ...c, currentCd: 0 }));
// Fallback: beliebige Karten wenn keine mit passender Rarity gefunden
console.warn(`[HT] Keine Karten mit Rarity <= ${maxRarity} Fallback auf alle Karten`);
const [all] = await db.query(
`SELECT id, name, image, attack, defends, cooldown, \`range\`, \`race\`, rarity
FROM cards
ORDER BY RAND()
LIMIT ?`,
[deckSize]
);
return all.map(c => ({ ...c, currentCd: 0 }));
} catch (err) {
console.error('[HT] loadAiDeck Fehler:', err);
return [];
@ -332,7 +379,7 @@ function registerHimmelstorHandlers(io, socket) {
}
// KI-Deck laden
const aiDeck = await loadAiDeck(station);
const aiDeck = await loadAiDeck(station, playerLevel);
if (aiDeck.length === 0) {
socket.emit('ht_daily_error', { message: 'Keine Karten für diese Station gefunden.' });
return;