q45z35
This commit is contained in:
parent
49b571699b
commit
d5f7904365
@ -29,30 +29,77 @@ function calcAvatarHp(level) {
|
|||||||
return 20 + (Math.max(1, Math.min(50, level || 1)) - 1) * 2;
|
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 ────────────────────────────── */
|
/* ── Wächter-Namen pro Station ────────────────────────────── */
|
||||||
const GUARD_NAMES = [
|
const GUARD_NAMES = [
|
||||||
"", "Torwächter", "Waldläufer", "Steinbrecher",
|
"", "Torwächter", "Waldläufer", "Steinbrecher",
|
||||||
"Schattenjäger", "Eisenherzog", "Sturmritter", "Himmelsherold",
|
"Schattenjäger", "Eisenherzog", "Sturmritter", "Himmelsherold",
|
||||||
];
|
];
|
||||||
|
|
||||||
/* ── KI-Deck laden (Schwierigkeit nach Station) ───────────── */
|
/* ── KI-Deck laden (Schwierigkeit skaliert mit Station) ───────
|
||||||
async function loadAiDeck(station) {
|
Station 1 → 5 Karten, max. Rarity 1
|
||||||
const maxRarity = station <= 2 ? 1 : station <= 4 ? 2 : station <= 6 ? 3 : 4;
|
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 (3–15)
|
||||||
|
const deckSize = station === 1 ? 5
|
||||||
|
: station === 2 ? 7
|
||||||
|
: station === 3 ? 9
|
||||||
|
: station === 4 ? 11
|
||||||
|
: station === 5 ? 12
|
||||||
|
: station === 6 ? 14
|
||||||
|
: 15;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Zuerst passende Karten mit korrekter Rarity holen
|
||||||
const [cards] = await db.query(
|
const [cards] = await db.query(
|
||||||
`SELECT id, name, image, attack, defends, cooldown, \`range\`, \`race\`, rarity
|
`SELECT id, name, image, attack, defends, cooldown, \`range\`, \`race\`, rarity
|
||||||
FROM cards WHERE rarity <= ? ORDER BY RAND() LIMIT 10`,
|
FROM cards
|
||||||
[maxRarity]
|
WHERE rarity <= ?
|
||||||
|
ORDER BY RAND()
|
||||||
|
LIMIT ?`,
|
||||||
|
[maxRarity, deckSize]
|
||||||
);
|
);
|
||||||
if (cards.length === 0) {
|
|
||||||
// Fallback: alle Karten
|
if (cards.length > 0) {
|
||||||
const [all] = await db.query(
|
console.log(`[HT] KI-Deck Station ${station}: ${cards.length} Karten, max. Rarity ${maxRarity}`);
|
||||||
`SELECT id, name, image, attack, defends, cooldown, \`range\`, \`race\`, rarity
|
return cards.map(c => ({ ...c, currentCd: 0 }));
|
||||||
FROM cards ORDER BY RAND() LIMIT 10`
|
|
||||||
);
|
|
||||||
return all.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) {
|
} catch (err) {
|
||||||
console.error('[HT] loadAiDeck Fehler:', err);
|
console.error('[HT] loadAiDeck Fehler:', err);
|
||||||
return [];
|
return [];
|
||||||
@ -332,7 +379,7 @@ function registerHimmelstorHandlers(io, socket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// KI-Deck laden
|
// KI-Deck laden
|
||||||
const aiDeck = await loadAiDeck(station);
|
const aiDeck = await loadAiDeck(station, playerLevel);
|
||||||
if (aiDeck.length === 0) {
|
if (aiDeck.length === 0) {
|
||||||
socket.emit('ht_daily_error', { message: 'Keine Karten für diese Station gefunden.' });
|
socket.emit('ht_daily_error', { message: 'Keine Karten für diese Station gefunden.' });
|
||||||
return;
|
return;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user