Komplettes AdivmentSystem überarbeitet!
This commit is contained in:
94
scripts/simulate-new-time.js
Normal file
94
scripts/simulate-new-time.js
Normal file
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* Simuliert das Aufzeichnen einer neuen Zeit und testet sofortige Achievements
|
||||
*
|
||||
* Dieses Script simuliert, was passiert, wenn ein Spieler eine neue Zeit aufzeichnet
|
||||
*/
|
||||
|
||||
const { Pool } = require('pg');
|
||||
const AchievementSystem = require('../lib/achievementSystem');
|
||||
require('dotenv').config();
|
||||
|
||||
// Database connection
|
||||
const pool = new Pool({
|
||||
host: process.env.DB_HOST,
|
||||
port: process.env.DB_PORT,
|
||||
database: process.env.DB_NAME,
|
||||
user: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
ssl: process.env.DB_SSL === 'true' ? { rejectUnauthorized: false } : false
|
||||
});
|
||||
|
||||
async function simulateNewTime() {
|
||||
console.log('🎮 Simuliere neue Zeit-Aufzeichnung...\n');
|
||||
|
||||
try {
|
||||
// Hole einen Test-Spieler
|
||||
const playerResult = await pool.query(`
|
||||
SELECT p.id, p.firstname, p.lastname, p.rfiduid
|
||||
FROM players p
|
||||
WHERE p.rfiduid IS NOT NULL
|
||||
LIMIT 1
|
||||
`);
|
||||
|
||||
if (playerResult.rows.length === 0) {
|
||||
console.log('❌ Kein Spieler mit RFID gefunden');
|
||||
return;
|
||||
}
|
||||
|
||||
const player = playerResult.rows[0];
|
||||
console.log(`👤 Teste mit Spieler: ${player.firstname} ${player.lastname} (${player.rfiduid})`);
|
||||
|
||||
// Hole eine Test-Location
|
||||
const locationResult = await pool.query(`
|
||||
SELECT id, name FROM locations LIMIT 1
|
||||
`);
|
||||
|
||||
if (locationResult.rows.length === 0) {
|
||||
console.log('❌ Keine Location gefunden');
|
||||
return;
|
||||
}
|
||||
|
||||
const location = locationResult.rows[0];
|
||||
console.log(`📍 Teste mit Location: ${location.name}`);
|
||||
|
||||
// Simuliere eine neue Zeit (etwas langsamer als die beste Zeit)
|
||||
const testTime = '00:01:30.500'; // 1:30.500
|
||||
console.log(`⏱️ Simuliere Zeit: ${testTime}`);
|
||||
|
||||
// Füge die Zeit zur Datenbank hinzu
|
||||
const timeResult = await pool.query(
|
||||
`INSERT INTO times (player_id, location_id, recorded_time, created_at)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
RETURNING id, player_id, created_at`,
|
||||
[player.id, location.id, testTime, new Date()]
|
||||
);
|
||||
|
||||
console.log(`✅ Zeit erfolgreich gespeichert (ID: ${timeResult.rows[0].id})`);
|
||||
|
||||
// Teste sofortige Achievements
|
||||
console.log('\n🏆 Prüfe sofortige Achievements...');
|
||||
const achievementSystem = new AchievementSystem();
|
||||
await achievementSystem.loadAchievements();
|
||||
|
||||
const newAchievements = await achievementSystem.checkImmediateAchievements(player.id);
|
||||
|
||||
if (newAchievements.length > 0) {
|
||||
console.log(`\n🎉 ${newAchievements.length} neue Achievements vergeben:`);
|
||||
newAchievements.forEach(achievement => {
|
||||
console.log(` ${achievement.icon} ${achievement.name} (+${achievement.points} Punkte)`);
|
||||
});
|
||||
} else {
|
||||
console.log('\nℹ️ Keine neuen Achievements vergeben');
|
||||
}
|
||||
|
||||
console.log('\n✅ Simulation erfolgreich abgeschlossen!');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Simulation fehlgeschlagen:', error);
|
||||
} finally {
|
||||
await pool.end();
|
||||
}
|
||||
}
|
||||
|
||||
// Führe Simulation aus
|
||||
simulateNewTime();
|
||||
50
scripts/test-achievements.js
Normal file
50
scripts/test-achievements.js
Normal file
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* Test Script für das JavaScript Achievement System
|
||||
*
|
||||
* Testet die Achievement-Logik ohne auf 19:00 Uhr zu warten
|
||||
*/
|
||||
|
||||
const AchievementSystem = require('../lib/achievementSystem');
|
||||
require('dotenv').config();
|
||||
|
||||
async function testAchievementSystem() {
|
||||
console.log('🧪 Starte Achievement-System Test...\n');
|
||||
|
||||
try {
|
||||
const achievementSystem = new AchievementSystem();
|
||||
|
||||
// Lade Achievements
|
||||
console.log('📋 Lade Achievements...');
|
||||
await achievementSystem.loadAchievements();
|
||||
|
||||
// Führe tägliche Achievement-Prüfung durch
|
||||
console.log('\n🎯 Führe tägliche Achievement-Prüfung durch...');
|
||||
const result = await achievementSystem.runDailyAchievementCheck();
|
||||
|
||||
// Zeige Ergebnisse
|
||||
console.log('\n📊 Test-Ergebnisse:');
|
||||
console.log(` 🏆 ${result.totalNewAchievements} neue Achievements vergeben`);
|
||||
console.log(` 👥 ${result.playerAchievements.length} Spieler haben neue Achievements erhalten`);
|
||||
|
||||
if (result.playerAchievements.length > 0) {
|
||||
console.log('\n📋 Neue Achievements im Detail:');
|
||||
result.playerAchievements.forEach(player => {
|
||||
console.log(` 👤 ${player.player}:`);
|
||||
player.achievements.forEach(achievement => {
|
||||
console.log(` ${achievement.icon} ${achievement.name} (+${achievement.points} Punkte)`);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
console.log('\nℹ️ Keine neuen Achievements vergeben');
|
||||
}
|
||||
|
||||
console.log('\n✅ Test erfolgreich abgeschlossen!');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Test fehlgeschlagen:', error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Führe Test aus
|
||||
testAchievementSystem();
|
||||
48
scripts/test-immediate-achievements.js
Normal file
48
scripts/test-immediate-achievements.js
Normal file
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* Test Script für sofortige Achievements
|
||||
*
|
||||
* Testet die sofortige Achievement-Logik für einen einzelnen Spieler
|
||||
*/
|
||||
|
||||
const AchievementSystem = require('../lib/achievementSystem');
|
||||
require('dotenv').config();
|
||||
|
||||
async function testImmediateAchievements() {
|
||||
console.log('⚡ Starte sofortige Achievement-Test...\n');
|
||||
|
||||
try {
|
||||
const achievementSystem = new AchievementSystem();
|
||||
|
||||
// Lade Achievements
|
||||
console.log('📋 Lade Achievements...');
|
||||
await achievementSystem.loadAchievements();
|
||||
|
||||
// Teste mit einem spezifischen Spieler (Carsten Graf)
|
||||
const testPlayerId = '313ceee3-8040-44b4-98d2-e63703579e5d';
|
||||
|
||||
console.log(`\n🎯 Teste sofortige Achievements für Spieler ${testPlayerId}...`);
|
||||
const newAchievements = await achievementSystem.checkImmediateAchievements(testPlayerId);
|
||||
|
||||
// Zeige Ergebnisse
|
||||
console.log('\n📊 Sofortige Achievement-Test Ergebnisse:');
|
||||
console.log(` 🏆 ${newAchievements.length} neue sofortige Achievements vergeben`);
|
||||
|
||||
if (newAchievements.length > 0) {
|
||||
console.log('\n📋 Neue sofortige Achievements:');
|
||||
newAchievements.forEach(achievement => {
|
||||
console.log(` ${achievement.icon} ${achievement.name} (+${achievement.points} Punkte)`);
|
||||
});
|
||||
} else {
|
||||
console.log('\nℹ️ Keine neuen sofortigen Achievements vergeben');
|
||||
}
|
||||
|
||||
console.log('\n✅ Sofortige Achievement-Test erfolgreich abgeschlossen!');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Test fehlgeschlagen:', error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Führe Test aus
|
||||
testImmediateAchievements();
|
||||
75
scripts/test-multiple-achievements.js
Normal file
75
scripts/test-multiple-achievements.js
Normal file
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
* Test Script für mehrfache Achievements
|
||||
*
|
||||
* Demonstriert, wie Achievements mehrmals erreicht werden können
|
||||
* und wie die Gesamtpunkte berechnet werden
|
||||
*/
|
||||
|
||||
const AchievementSystem = require('../lib/achievementSystem');
|
||||
require('dotenv').config();
|
||||
|
||||
async function testMultipleAchievements() {
|
||||
console.log('🔄 Teste mehrfache Achievements...\n');
|
||||
|
||||
try {
|
||||
const achievementSystem = new AchievementSystem();
|
||||
|
||||
// Lade Achievements
|
||||
console.log('📋 Lade Achievements...');
|
||||
await achievementSystem.loadAchievements();
|
||||
|
||||
// Teste mit Carsten Graf
|
||||
const testPlayerId = '313ceee3-8040-44b4-98d2-e63703579e5d';
|
||||
|
||||
console.log(`\n👤 Teste mit Spieler: ${testPlayerId}`);
|
||||
|
||||
// Zeige aktuelle Punkte
|
||||
console.log('\n📊 Aktuelle Gesamtpunkte:');
|
||||
const currentPoints = await achievementSystem.getPlayerTotalPoints(testPlayerId);
|
||||
console.log(` 🏆 Gesamtpunkte: ${currentPoints.totalPoints}`);
|
||||
console.log(` 🔢 Gesamt-Completions: ${currentPoints.totalCompletions}`);
|
||||
|
||||
// Führe Achievement-Check durch
|
||||
console.log('\n🎯 Führe Achievement-Check durch...');
|
||||
const newAchievements = await achievementSystem.checkImmediateAchievements(testPlayerId);
|
||||
|
||||
if (newAchievements.length > 0) {
|
||||
console.log(`\n🏆 ${newAchievements.length} neue Achievements vergeben:`);
|
||||
newAchievements.forEach(achievement => {
|
||||
console.log(` ${achievement.icon} ${achievement.name} (+${achievement.points} Punkte)`);
|
||||
});
|
||||
} else {
|
||||
console.log('\nℹ️ Keine neuen Achievements vergeben');
|
||||
}
|
||||
|
||||
// Zeige neue Gesamtpunkte
|
||||
console.log('\n📊 Neue Gesamtpunkte:');
|
||||
const newPoints = await achievementSystem.getPlayerTotalPoints(testPlayerId);
|
||||
console.log(` 🏆 Gesamtpunkte: ${newPoints.totalPoints} (${newPoints.totalPoints - currentPoints.totalPoints > 0 ? '+' : ''}${newPoints.totalPoints - currentPoints.totalPoints})`);
|
||||
console.log(` 🔢 Gesamt-Completions: ${newPoints.totalCompletions} (${newPoints.totalCompletions - currentPoints.totalCompletions > 0 ? '+' : ''}${newPoints.totalCompletions - currentPoints.totalCompletions})`);
|
||||
|
||||
// Zeige alle Achievements mit Completions
|
||||
console.log('\n📋 Alle Achievements mit Completions:');
|
||||
await achievementSystem.loadPlayerAchievements(testPlayerId);
|
||||
const playerAchievements = achievementSystem.playerAchievements.get(testPlayerId);
|
||||
|
||||
if (playerAchievements && playerAchievements.size > 0) {
|
||||
for (const [achievementId, data] of playerAchievements) {
|
||||
const achievement = Array.from(achievementSystem.achievements.values())
|
||||
.find(a => a.id === achievementId);
|
||||
if (achievement) {
|
||||
console.log(` ${achievement.icon} ${achievement.name}: ${data.completion_count}x (${data.completion_count * achievement.points} Punkte)`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log('\n✅ Mehrfache Achievement-Test erfolgreich abgeschlossen!');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Test fehlgeschlagen:', error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Führe Test aus
|
||||
testMultipleAchievements();
|
||||
Reference in New Issue
Block a user