// Achievement system const ACHIEVEMENTS = { "first_visit": { name: "Nováček", description: "První návštěva na portálu", icon: "fa-star", color: "text-yellow-500" }, "frequent_visitor": { name: "Pravidelný návštěvník", description: "10 návštěv za měsíc", icon: "fa-clock-rotate-left", color: "text-blue-500", threshold: 10, period: "monthly" }, "power_user": { name: "Power User", description: "50 návštěv za měsíc", icon: "fa-rocket", color: "text-purple-500", threshold: 50, period: "monthly" }, "super_fan": { name: "Super Fan", description: "100 návštěv za měsíc", icon: "fa-award", color: "text-gold", threshold: 100, period: "monthly" } }; let achievementsEnabled = false; // Hidden toggle for achievements function toggleAchievements() { achievementsEnabled = !achievementsEnabled; localStorage.setItem('achievementsEnabled', achievementsEnabled); if (achievementsEnabled) { checkAchievements(); showAchievements(); } else { hideAchievements(); } } // Check if user has earned achievements async function checkAchievements() { try { const response = await fetch('/api/visitor-stats'); const stats = await response.json(); // Check for monthly achievements Object.values(ACHIEVEMENTS).forEach(achievement => { if (achievement.period === "monthly" && stats.monthly_visits >= achievement.threshold) { showAchievementToast(achievement); } }); // First visit achievement if (stats.total_visits === 1) { showAchievementToast(ACHIEVEMENTS.first_visit); } } catch (error) { console.error('Error checking achievements:', error); } } // Show achievement toast function showAchievementToast(achievement) { const toast = document.createElement('div'); toast.className = `fixed bottom-4 right-4 bg-white rounded-lg shadow-lg p-4 w-64 flex items-center ${achievement.color}`; toast.innerHTML = `

${achievement.name}

${achievement.description}

`; document.body.appendChild(toast); setTimeout(() => { toast.remove(); }, 5000); } // Show achievements display function showAchievements() { const achievementsDisplay = document.getElementById('achievementsDisplay'); if (achievementsDisplay) { achievementsDisplay.style.display = 'block'; } } // Hide achievements display function hideAchievements() { const achievementsDisplay = document.getElementById('achievementsDisplay'); if (achievementsDisplay) { achievementsDisplay.style.display = 'none'; } } // Doom-style cheat code toggle const CHEAT_CODE = 'IDKFA'; let cheatCodeIndex = 0; let cheatCodeTimer; // Initialize achievements function initializeAchievements() { // Check if achievements were enabled before achievementsEnabled = JSON.parse(localStorage.getItem('achievementsEnabled') || 'false'); // Initialize particle effects const particleContainer = document.getElementById('particleContainer'); let particles = []; function createParticle() { const particle = document.createElement('div'); particle.className = 'particle'; // Random position particle.style.left = Math.random() * 100 + 'vw'; particle.style.top = Math.random() * 100 + 'vh'; // Random size const size = Math.random() * 2 + 2; particle.style.width = size + 'px'; particle.style.height = size + 'px'; // Random color const colors = ['#4a6cf7', '#6355f7', '#3a56d4', '#2839b0']; particle.style.background = colors[Math.floor(Math.random() * colors.length)]; particleContainer.appendChild(particle); particles.push(particle); } // Create initial particles for (let i = 0; i < 50; i++) { createParticle(); } // Add cheat code input listener document.addEventListener('keydown', (e) => { // Reset timer if no key was pressed in 2 seconds if (cheatCodeTimer) { clearTimeout(cheatCodeTimer); } cheatCodeTimer = setTimeout(() => { cheatCodeIndex = 0; }, 2000); // Check if key matches current position in cheat code if (e.key.toUpperCase() === CHEAT_CODE[cheatCodeIndex]) { cheatCodeIndex++; // If complete code entered if (cheatCodeIndex === CHEAT_CODE.length) { // Show achievement unlocked animation const achievementToast = document.createElement('div'); achievementToast.className = 'fixed bottom-4 right-4 bg-white rounded-lg shadow-lg p-4 w-64 flex items-center text-green-500'; achievementToast.innerHTML = `

Achievement Unlocked!

"IDKFA" cheat code activated

`; document.body.appendChild(achievementToast); // Play achievement sound const audio = new Audio('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3'); audio.play(); // Create burst of particles for (let i = 0; i < 20; i++) { createParticle(); } // Enable achievements toggleAchievements(); // Reset cheat code cheatCodeIndex = 0; // Remove achievement toast after 3 seconds setTimeout(() => { achievementToast.remove(); }, 3000); } } else { // Reset cheat code if wrong key pressed cheatCodeIndex = 0; } }); // Update progress bars async function updateProgressBars() { try { const response = await fetch('/api/visitor-stats'); const stats = await response.json(); // Calculate progress for each achievement const achievements = Object.values(ACHIEVEMENTS); achievements.forEach((achievement, index) => { if (achievement.period === "monthly") { const progress = Math.min((stats.monthly_visits / achievement.threshold) * 100, 100); const progressBar = document.getElementById(`achievement${index + 1}Progress`); if (progressBar) { progressBar.style.width = `${progress}%`; } } }); } catch (error) { console.error('Error updating progress bars:', error); } } // Update progress bars every 5 seconds setInterval(updateProgressBars, 5000); // Check achievements when enabled if (achievementsEnabled) { checkAchievements(); showAchievements(); } } // Add celebration animation function celebrate() { const confetti = document.createElement('div'); confetti.className = 'absolute inset-0 pointer-events-none'; confetti.innerHTML = `
`; document.body.appendChild(confetti); setTimeout(() => { confetti.remove(); }, 3000); } // Initialize when page loads document.addEventListener('DOMContentLoaded', initializeAchievements);