Загрузка данных


<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="robots" content="noindex, noarchive, nosnippet, noimageindex">
    <link rel="icon" type="image/png" href="images/logo.png">
    <title>Forbes - Lunacy Online</title>
    <meta name="description" content="Список самых богатых игроков Lunacy Online.">
    <meta property="og:title" content="Forbes - Lunacy Online">
    <meta property="og:description" content="Список самых богатых игроков Lunacy Online.">
    <meta property="og:url" content="https://forum-lunacy-rp.ru/forbes.html">
    <meta property="og:image" content="https://forum-lunacy-rp.ru/images/logo.png">
    <meta property="og:type" content="website">
    <meta property="og:site_name" content="Lunacy Online">

    <script src="3.4.17"></script>
    <script>
        tailwind.config = {
            theme: {
                extend: {
                    keyframes: {
                        'fade-in-up': {
                            '0%': { opacity: '0', transform: 'translateY(20px)' },
                            '100%': { opacity: '1', transform: 'translateY(0)' },
                        }
                    },
                    animation: {
                        'fade-in-up': 'fade-in-up 0.6s ease-out forwards',
                    },
                    fontFamily: {
                        sans: ['Inter', 'sans-serif'],
                    },
                },
            },
        };
    </script>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
    <link href="css2?family=Inter:wght@400;700;900&display=swap" rel="stylesheet">
    <style>
        :root {
            --theme-page-from: #172554;
            --theme-page-to: #000000;
            --theme-accent: #60a5fa;
            --theme-accent-soft: #93c5fd;
            --theme-accent-dark: #2563eb;
            --theme-muted: #60a5fa;
            --site-header-height: 5rem;
        }

        html { scroll-behavior: smooth; -ms-overflow-style: none; scrollbar-width: none; }
        html::-webkit-scrollbar { display: none; }
        *, *::before, *::after { box-sizing: border-box; }
        body { min-width: 320px; overflow-x: hidden; }
        
        .theme-footer {
            position: relative;
            overflow: hidden;
            background: linear-gradient(
                180deg,
                #06142f 0%,
                #020611 62%,
                #000 100%
            ) !important;
        }
        .no-copy {
            -webkit-user-select: none;
            user-select: none;
            -webkit-touch-callout: none;
        }
    </style>
</head>
<body class="bg-black text-white font-sans theme-public relative no-copy">

<header class="fixed top-0 left-0 right-0 z-40 bg-black/50 backdrop-blur-md">
    <div class="container mx-auto px-4 flex items-center gap-5 h-20">
        <a href="index.htm" class="flex items-center gap-2 text-white hover:text-blue-400 transition-colors">
            <img src="images/logo.png" alt="Lunacy Logo" class="w-12 h-12">
            <span class="font-bold text-xl uppercase tracking-wider">Lunacy</span>
        </a>

        <nav class="hidden lg:flex items-center gap-5 ml-2">
            <a href="index.htm" class="uppercase text-sm font-bold tracking-widest text-gray-400 hover:text-white transition-colors duration-200">
                главная
            </a>
            <a href="shop.html" class="uppercase text-sm font-bold tracking-widest text-gray-400 hover:text-white transition-colors duration-200">
                магазин
            </a>
            <a href="forbes.html" class="uppercase text-sm font-bold tracking-widest text-blue-400 transition-colors duration-200">
                forbes
            </a>
            <a href="news.html" class="uppercase text-sm font-bold tracking-widest text-gray-400 hover:text-white transition-colors duration-200">
                новости
            </a>
            <a href="https://forum-lunacy-rp.ru/index.php" target="_blank" rel="noopener noreferrer" class="uppercase text-sm font-bold tracking-widest text-gray-400 hover:text-white transition-colors duration-200">
                форум
            </a>
        </nav>

        <div class="hidden lg:flex items-center gap-3 ml-auto">
            <div class="inline-flex items-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-900/75 text-slate-100">
                <svg class="w-4 h-4 text-slate-300" viewbox="0 0 24 24" fill="currentColor" aria-hidden="true">
                    <path d="M16 11a4 4 0 1 0-4-4 4 4 0 0 0 4 4Zm-8 1a3 3 0 1 0-3-3 3 3 0 0 0 3 3Zm8 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4Zm-8 0c-.29 0-.62.02-.97.05C4.57 14.3 1 15.5 1 17.99V20h6v-2c0-1.18.47-2.22 1.3-3.08A9.33 9.33 0 0 0 8 14Z"></path>
                </svg>
                <span class="text-sm font-semibold">
                    Игроков:
                    <span id="header-online-players">...</span>
                    /
                    <span id="header-online-max">...</span>
                </span>
            </div>
            <a href="cabinet.html" class="inline-flex items-center gap-2 px-5 py-2.5 bg-slate-900/80 border border-blue-500/60 text-blue-100 font-bold text-sm uppercase tracking-wide rounded-lg transition-all duration-300 hover:bg-blue-600/85 hover:text-white hover:border-blue-300 shadow-[0_0_16px_rgba(59,130,246,0.28)]">
                <svg class="w-4 h-4" viewbox="0 0 24 24" fill="currentColor" aria-hidden="true">
                    <path d="M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Zm0 2c-4.411 0-8 2.015-8 4.5V21h16v-2.5c0-2.485-3.589-4.5-8-4.5Z"></path>
                </svg>
                Личный кабинет
            </a>
        </div>

        <button id="mobile-menu-toggle" class="lg:hidden z-50 text-white" type="button" aria-label="Открыть меню">
            <svg class="w-6 h-6" fill="none" stroke="currentColor" viewbox="0 0 24 24" aria-hidden="true">
                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
            </svg>
        </button>
    </div>
</header>

<div id="mobile-menu" class="hidden fixed inset-0 top-20 bg-black/90 backdrop-blur-sm lg:hidden z-30 animate-fade-in-up">
    <nav class="flex flex-col items-center justify-center h-full text-center space-y-8">
        <a href="index.htm" class="mobile-nav-link text-2xl uppercase font-bold tracking-widest text-gray-400 hover:text-white transition-colors duration-200">
            главная
        </a>
        <a href="shop.html" class="mobile-nav-link text-2xl uppercase font-bold tracking-widest text-gray-400 hover:text-white transition-colors duration-200">
            магазин
        </a>
        <a href="forbes.html" class="mobile-nav-link text-2xl uppercase font-bold tracking-widest text-blue-400 transition-colors duration-200">
            forbes
        </a>
        <a href="news.html" class="mobile-nav-link text-2xl uppercase font-bold tracking-widest text-gray-400 hover:text-white transition-colors duration-200">
            новости
        </a>
        <a href="https://forum-lunacy-rp.ru/index.php" target="_blank" rel="noopener noreferrer" class="mobile-nav-link text-2xl uppercase font-bold tracking-widest text-gray-400 hover:text-white transition-colors duration-200">
            форум
        </a>
        <a href="cabinet.html" class="mobile-nav-link mt-2 inline-flex items-center gap-2 px-8 py-4 bg-slate-900/80 border border-blue-500/60 text-blue-100 font-bold text-lg rounded-lg transition-all duration-300 hover:bg-blue-600/85 hover:text-white hover:border-blue-300">
            Личный кабинет
        </a>
    </nav>
</div>

<main class="pt-32 pb-20 min-h-screen bg-[#06142f] animate-fade-in-up">
    <div class="container mx-auto px-4 max-w-4xl">
        <h1 class="text-4xl md:text-5xl font-black text-center text-blue-300 mb-4 uppercase tracking-wider">
            Forbes
        </h1>
        <p class="text-gray-400 text-center mb-10">Топ самых богатых и влиятельных игроков Lunacy Online</p>

        <!-- Блок пьедестала (1, 2, 3 места) -->
        <div id="forbes-top3" class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-10 items-end">
            <!-- Пьедестал сгенерируется через JS -->
        </div>

        <!-- Таблица для остального топа -->
        <div class="bg-slate-900/80 border border-blue-800/40 rounded-xl overflow-hidden shadow-xl">
            <div id="forbes-list" class="divide-y divide-slate-800">
                <div class="p-6 text-center text-gray-400">
                    Загрузка списка богатейших игроков...
                </div>
            </div>
        </div>
    </div>
</main>

<footer class="theme-footer py-12 text-center text-gray-400">
    <div class="mx-auto px-4">
        <img src="images/logo.png" alt="Lunacy Logo" class="w-16 h-16 mx-auto mb-4">
        <p class="text-sm">&copy; 2026 Lunacy CRMP. Все права защищены.</p>
    </div>
</footer>

<script>
// Переключатель мобильного меню
const btn = document.getElementById('mobile-menu-toggle');
const menu = document.getElementById('mobile-menu');

if (btn && menu) {
    btn.addEventListener('click', () => {
        menu.classList.toggle('hidden');
    });
}

// Загрузка онлайна
async function updateOnline(){
    try{
        const response = await fetch("online.php");
        const data = await response.json();

        const playersEl = document.getElementById("header-online-players");
        const maxPlayersEl = document.getElementById("header-online-max");

        if(data.status === "online"){
            if(playersEl) playersEl.innerText = data.players;
            if(maxPlayersEl) maxPlayersEl.innerText = data.maxplayers;
        } else {
            if(playersEl) playersEl.innerText = "0";
            if(maxPlayersEl) maxPlayersEl.innerText = "0";
        }
    } catch(e) {
        const playersEl = document.getElementById("header-online-players");
        if(playersEl) playersEl.innerText = "Off";
    }
}
updateOnline();
setInterval(updateOnline, 5000);

// Подгрузка данных Forbes из BD
function formatMoney(amount) {
    return new Intl.NumberFormat('ru-RU').format(amount) + ' ₽';
}

function getSkinUrl(skinId) {
    return `images/skin/${skinId}.png`;
}

async function loadForbes() {
    const listContainer = document.getElementById('forbes-list');
    const top3Container = document.getElementById('forbes-top3');

    try {
        const response = await fetch('forbes_api.php');
        const players = await response.json();

        if (!Array.isArray(players) || players.length === 0) {
            listContainer.innerHTML = '<div class="p-6 text-center text-gray-400">Список пока пуст.</div>';
            return;
        }

        // Вывод ТОП-3 (Пьедестал)
        const top3 = players.slice(0, 3);
        const rest = players.slice(3);

        // Порядок на пьедестале: 2 место, 1 место, 3 место
        const pedestalOrder = [
            top3[1] || null, // 2 место
            top3[0] || null, // 1 место
            top3[2] || null  // 3 место
        ];

        top3Container.innerHTML = pedestalOrder.map((player, idx) => {
            if (!player) return '';
            const rank = players.indexOf(player) + 1;
            const isFirst = rank === 1;

            return `
                <div class="bg-slate-900/90 border ${isFirst ? 'border-yellow-500/60 shadow-[0_0_20px_rgba(234,179,8,0.2)]' : 'border-blue-800/40'} rounded-xl p-6 text-center flex flex-col items-center">
                    <div class="text-xs font-bold uppercase tracking-wider ${isFirst ? 'text-yellow-400' : 'text-blue-400'} mb-2">#${rank} Место</div>
                    <img src="${getSkinUrl(player.skin)}" onError="this.src='images/logo.png'" class="w-24 h-24 object-contain mb-3">
                    <div class="font-bold text-lg text-white">${player.name}</div>
                    <div class="text-sm ${isFirst ? 'text-yellow-400 font-bold' : 'text-green-400'} mt-1">${formatMoney(player.money)}</div>
                </div>
            `;
        }).join('');

        // Вывод остального списка (от 4 места и ниже)
        if (rest.length > 0) {
            listContainer.innerHTML = rest.map((player, idx) => `
                <div class="p-4 flex items-center justify-between hover:bg-slate-800/50 transition-colors">
                    <div class="flex items-center gap-4">
                        <span class="font-bold text-gray-500 w-6 text-center">#${idx + 4}</span>
                        <img src="${getSkinUrl(player.skin)}" onError="this.src='images/logo.png'" class="w-10 h-10 object-contain">
                        <span class="font-bold text-white">${player.name}</span>
                    </div>
                    <span class="text-green-400 font-semibold">${formatMoney(player.money)}</span>
                </div>
            `).join('');
        } else {
            listContainer.innerHTML = '';
        }

    } catch (e) {
        listContainer.innerHTML = '<div class="p-6 text-center text-red-400">Ошибка при загрузке данных топа.</div>';
    }
}

loadForbes();
</script>

</body>
</html>