(function(){ // Найдём нужные элементы const spans = document.querySelectorAll('.global-stats__item-value strong span'); if (spans.length < 4) return; const onlineSpan = spans[0]; // Онлайн const playersSpan = spans[1]; // Всего игроков const gamesSpan = spans[2]; // Всего игр const wonTodaySpan = spans[3]; // Выиграно сегодня // --------------------------------------------------------------- // 1) Онлайн (как пример флуктуации) // --------------------------------------------------------------- let currentOnline = getRandomInt(2000, 4000); onlineSpan.textContent = formatNumber(currentOnline); setInterval(() => { let step = getRandomInt(-300, 300); currentOnline += step; if (currentOnline < 500) currentOnline = 500; if (currentOnline > 6000) currentOnline = 6000; onlineSpan.textContent = formatNumber(currentOnline); }, 5000); // --------------------------------------------------------------- // 2) Глобальные переменные (получим с сервера) // --------------------------------------------------------------- let totalGames = 0; let wonToday = 0.0; let totalPlayers = 0; // "Всего игроков" let playersLastUpdate = 0; // Unix-время (в секундах), когда последний раз обновляли // Сначала подождём 2 секунды: setTimeout(() => { // Теперь GET: /wp-json/casino-stats/v1/get fetch('/wp-json/casino-stats/v1/get') .then(r => r.json()) .then(data => { totalGames = data.totalGames; wonToday = data.wonToday; totalPlayers = data.totalPlayers; playersLastUpdate = data.playersLastUpdate; // unixtime // Отображаем gamesSpan.textContent = formatNumber(totalGames); wonTodaySpan.textContent = formatMoney(wonToday); playersSpan.textContent = formatNumber(totalPlayers); // Запускаем логику "Всего игр" (каждые 3..5 сек) scheduleNextGamesIncrement(); // Запускаем логику "Выиграно сегодня" (каждые 15..50 сек) scheduleNextWonIncrement(); // Запускаем логику "Всего игроков" (проверять раз в 5 минут) checkPlayersIncrement(); setInterval(checkPlayersIncrement, 5 * 60 * 1000); }) .catch(err => { console.error('Ошибка при GET:', err); }); }, 2000); // 2000 мс = 3 секунды // --------------------------------------------------------------- // 3) "Всего игр": каждые 3..5 секунд + (5..50) // --------------------------------------------------------------- function scheduleNextGamesIncrement() { const interval = getRandomInt(3000, 5000); // 3..5 сек setTimeout(() => { const inc = getRandomInt(5, 50); // 5..50 fetch('/wp-json/casino-stats/v1/increment', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ gamesInc: inc, wonInc: 0, playersInc: 0 }) }) .then(r => r.json()) .then(updated => { totalGames = updated.totalGames; wonToday = updated.wonToday; // не меняли, но вернётся totalPlayers = updated.totalPlayers; // не меняли, но вернётся playersLastUpdate = updated.playersLastUpdate; gamesSpan.textContent = formatNumber(totalGames); wonTodaySpan.textContent = formatMoney(wonToday); playersSpan.textContent = formatNumber(totalPlayers); scheduleNextGamesIncrement(); }) .catch(err => { console.error('Ошибка increment для игр:', err); scheduleNextGamesIncrement(); }); }, interval); } // --------------------------------------------------------------- // 4) "Выиграно сегодня": каждые 15..50 секунд + (100k..150k) // --------------------------------------------------------------- function scheduleNextWonIncrement() { const interval = getRandomInt(120000, 240000); // 120..240 сек (2..4 мин) setTimeout(() => { const inc = getRandomInt(1, 80000); // 100k..150k fetch('/wp-json/casino-stats/v1/increment', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ gamesInc: 0, wonInc: inc, playersInc: 0 }) }) .then(r => r.json()) .then(updated => { totalGames = updated.totalGames; wonToday = updated.wonToday; totalPlayers = updated.totalPlayers; playersLastUpdate = updated.playersLastUpdate; gamesSpan.textContent = formatNumber(totalGames); wonTodaySpan.textContent = formatMoney(wonToday); playersSpan.textContent = formatNumber(totalPlayers); scheduleNextWonIncrement(); }) .catch(err => { console.error('Ошибка increment для выигрыша:', err); scheduleNextWonIncrement(); }); }, interval); } // --------------------------------------------------------------- // 5) "Всего игроков": Раз в час +1..50 // // - checkPlayersIncrement() вызывается каждые 60 сек (setInterval) // - Если текущее время > playersLastUpdate + 3600, делаем POST // --------------------------------------------------------------- function checkPlayersIncrement() { const nowSec = Math.floor(Date.now() / 1000); // Проверяем, прошло ли >= 1 час if (nowSec - playersLastUpdate >= 3600) { // Время "крутить"! const inc = getRandomInt(1, 50); fetch('/wp-json/casino-stats/v1/increment', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ gamesInc: 0, wonInc: 0, playersInc: inc }) }) .then(r => r.json()) .then(updated => { totalGames = updated.totalGames; wonToday = updated.wonToday; totalPlayers = updated.totalPlayers; playersLastUpdate = updated.playersLastUpdate; gamesSpan.textContent = formatNumber(totalGames); wonTodaySpan.textContent = formatMoney(wonToday); playersSpan.textContent = formatNumber(totalPlayers); console.log(`Players incremented by ${inc}. Now total = ${totalPlayers}.`); }) .catch(err => { console.error('Ошибка increment для игроков:', err); }); } } // --------------------------------------------------------------- // Вспомогательные функции // --------------------------------------------------------------- function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function formatNumber(num) { return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " "); } function formatMoney(num) { const parts = (+num).toFixed(2).split('.'); parts[0] = formatNumber(parts[0]); return parts.join('.'); } })();