[html]<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Игровой автомат</title>
<style>
/* ------------------------------------------------ */
/* ОСНОВНЫЕ СТИЛИ */
/* ------------------------------------------------ */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
body {
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
color: #fff;
}
/* ------------------------------------------------ */
/* СТИЛИ ЕДИНОГО КОНТЕЙНЕРА */
/* ------------------------------------------------ */
.unified-container {
display: flex;
width: 100%;
max-width: 1200px;
background: rgba(30, 30, 46, 0.9);
border-radius: 20px;
border: 3px solid #4a4a6d;
box-shadow: 0 0 40px rgba(0, 0, 0, 0.7);
overflow: hidden;
}
/* ------------------------------------------------ */
/* ТОП-10 СЛЕВА СО СКРОЛЛОМ */
/* ------------------------------------------------ */
.top-players {
flex: 0 0 250px;
background: rgba(40, 40, 60, 0.9);
padding: 15px;
overflow-y: auto;
border-right: 2px solid #5a5a80;
}
.top-players h2 {
position: sticky;
top: 0;
background: rgba(40, 40, 60, 0.95);
padding-bottom: 10px;
z-index: 10;
}
.player-list { list-style: none; padding-top: 5px; }
.player-item { display: flex; justify-content: space-between; padding: 10px 5px; margin-bottom: 5px; background: rgba(50, 50, 70, 0.6); border-radius: 6px; border-left: 3px solid #ffd700; font-size: 14px; transition: background 0.2s; }
.player-item:hover { background: rgba(60, 60, 80, 0.7); }
.player-item.user-highlight { border-left: 3px solid #4CAF50; background: rgba(76, 175, 80, 0.1); }
.top-players::-webkit-scrollbar { width: 8px; }
.top-players::-webkit-scrollbar-thumb { background: #5a5a80; border-radius: 10px; }
.top-players::-webkit-scrollbar-track { background: #30304a; }
/* ------------------------------------------------ */
/* ПРАВАЯ ЧАСТЬ (СЛОТ + СТАТИСТИКА) */
/* ------------------------------------------------ */
.right-section {
flex-grow: 1;
display: flex;
flex-direction: column;
padding: 20px;
align-items: center;
}
.slot-machine-container {
width: 100%;
max-width: 500px;
display: flex;
flex-direction: column;
align-items: center;
}
/* ------------------------------------------------ */
/* СТИЛИ КНОПКИ SPIN И КОНТРОЛОВ */
/* ------------------------------------------------ */
.spin-controls {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 15px;
gap: 10px;
}
.checkbox-container {
padding: 8px 12px;
align-self: flex-start;
margin-left: 20px;
}
#slot-spin {
width: 90%;
max-width: 300px;
height: 60px;
font-size: 28px;
font-weight: bold;
color: #fff;
background: linear-gradient(145deg, #ff416c, #ff4b2b);
border: none;
border-radius: 12px;
cursor: pointer;
box-shadow: 0 10px 20px rgba(255, 75, 43, 0.6), 0 0 0 4px #ffc107;
transition: all 0.2s ease;
text-transform: uppercase;
}
#slot-spin:hover:not(:disabled) {
background: linear-gradient(145deg, #ff4b2b, #ff416c);
transform: scale(1.03);
box-shadow: 0 12px 25px rgba(255, 75, 43, 0.8), 0 0 0 6px #ffd700;
}
#slot-spin:disabled {
background: #4a4a6d;
cursor: not-allowed;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
opacity: 0.7;
}
/* ------------------------------------------------ */
/* СТИЛИ СТАТИСТИКИ И СЛОТА */
/* ------------------------------------------------ */
#toggle-stats-btn {
background: linear-gradient(to right, #4a4a6d, #5a5a80);
color: #fff;
border: none;
border-radius: 8px;
padding: 10px 15px;
font-size: 14px;
cursor: pointer;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
transition: background 0.3s ease, transform 0.2s ease;
margin-top: 20px;
display: flex;
align-items: center;
gap: 8px;
width: 90%;
max-width: 500px;
justify-content: center;
}
#toggle-stats-btn:hover {
background: linear-gradient(to right, #5a5a80, #6a6a90);
transform: translateY(-2px);
}
.player-info {
background: rgba(30, 30, 46, 0.8);
border-radius: 15px;
padding: 15px;
border: 2px solid #6a6a90;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.5);
width: 90%;
max-width: 500px;
max-height: 0;
overflow: hidden;
opacity: 0;
padding-top: 0;
padding-bottom: 0;
margin-top: 10px;
transition: max-height 0.5s ease-in-out, opacity 0.4s ease, padding 0.5s ease;
}
.player-info.open {
max-height: 500px;
opacity: 1;
padding-top: 15px;
padding-bottom: 15px;
}
.top-players h2, .player-info h2 {
text-align: center; margin-bottom: 15px; color: #ffd700; text-shadow: 0 0 10px rgba(255, 215, 0, 0.5); font-size: 20px;
}
.player-name { font-weight: bold; }
.player-amount { color: #4CAF50; font-weight: bold; }
.timer-container { background: rgba(30, 30, 46, 0.8); padding: 10px 15px; border-radius: 10px; margin-bottom: 15px; border: 2px solid #4a4a6d; box-shadow: 0 0 15px rgba(0, 0, 0, 0.4); align-self: flex-end; }
#slot-timer { font-size: 16px; color: #ffdd8a; font-weight: bold; text-shadow: 0 0 5px rgba(255, 221, 138, 0.7); }
.slot-machine { width: 100%; padding: 15px; background: rgba(40, 40, 60, 0.9); border-radius: 10px; text-align: center; color: #fff; border: 2px solid #5a5a80; box-shadow: 0 0 25px rgba(0, 0, 0, 0.4); position: relative; }
.result-display { padding: 10px; margin-bottom: 15px; font-size: 16px; min-height: 50px; display: flex; align-items: center; justify-content: center; transition: all 0.5s ease; }
.win-result { background: rgba(76, 175, 80, 0.2); color: #4CAF50; border: 2px solid #4CAF50; box-shadow: 0 0 15px rgba(76, 175, 80, 0.5); text-shadow: 0 0 5px rgba(76, 175, 80, 0.7); }
.lose-result { background: rgba(244, 67, 54, 0.2); color: #f44336; border: 2px solid #f44336; box-shadow: 0 0 15px rgba(244, 67, 54, 0.3); }
.slot-window { display: flex; justify-content: space-around; margin-bottom: 15px; padding: 10px; border-radius: 10px; border: 2px solid #555; background: rgba(20, 20, 35, 0.8);}
.slot-reel { width: 80px; height: 80px; overflow: hidden; border-radius: 8px; background: #000; border: 2px solid #555; position: relative; box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.7); }
.slot-reel img { width: 100%; height: 100%; object-fit: contain; top: 0; transition: top 0.15s linear; }
.current-player { display: flex; justify-content: space-between; padding: 15px; background: rgba(40, 40, 60, 0.7); border-radius: 10px; border-left: 4px solid #4CAF50; margin-bottom: 15px; }
.player-stats { display: flex; flex-direction: column; gap: 10px; }
.stat-item { display: flex; justify-content: space-between; padding: 10px 12px; background: rgba(50, 50, 70, 0.5); border-radius: 6px; }
.stat-label { color: #ccc; }
.stat-value { color: #ffd700; font-weight: bold; }
.last-spin-result {
background: rgba(90, 90, 128, 0.3);
border: 1px solid #6a6a90;
border-radius: 8px;
padding: 10px;
margin-bottom: 10px;
font-size: 14px;
}
.last-spin-win { color: #4CAF50; border-color: #4CAF50; background: rgba(76, 175, 80, 0.1); }
.last-spin-lose { color: #f44336; border-color: #f44336; background: rgba(244, 67, 54, 0.1); }
/* ------------------------------------------------ */
/* МЕДИА-ЗАПРОС ДЛЯ АДАПТИВНОСТИ */
/* ------------------------------------------------ */
@media (max-width: 850px) {
.unified-container {
flex-direction: column;
max-width: 550px;
}
.top-players {
flex: none;
width: 100%;
max-height: 250px;
border-right: none;
border-bottom: 2px solid #5a5a80;
border-radius: 20px 20px 0 0;
}
.right-section {
padding: 15px;
}
.top-players h2 {
position: static;
background: none;
}
.slot-machine-container {
max-width: none;
}
.player-info {
max-width: none;
}
#toggle-stats-btn {
max-width: none;
}
}
</style>
</head>
<body>
<div class="unified-container">
<div class="top-players">
<h2>ТОП ИГРОКОВ</h2>
<ul class="player-list" id="top-players-list">
<!-- Список будет заполняться динамически -->
<li class="player-item"><span class="player-name">Загрузка...</span><span class="player-amount">0$</span></li>
</ul>
</div>
<div class="right-section">
<div class="slot-machine-container">
<div class="timer-container">
<div id="slot-timer">Можешь крутить! ✅</div>
</div>
<div class="slot-machine">
<div id="result-display" class="result-display">
Добро пожаловать! Жми SPIN, испытай удачу!
</div>
<div class="slot-window">
<div class="slot-reel"><img src="https://upforme.ru/uploads/001c/52/b6/2/605998.png" alt="Symbol"></div>
<div class="slot-reel"><img src="https://upforme.ru/uploads/001c/52/b6/2/319417.png" alt="Symbol"></div>
<div class="slot-reel"><img src="https://upforme.ru/uploads/001c/52/b6/2/802623.png" alt="Symbol"></div>
</div>
<div class="spin-controls">
<div class="checkbox-container">
<input type="checkbox" id="confirm-bet">
<label for="confirm-bet">подтверждаю стоимость ставки</label>
</div>
<button id="slot-spin" disabled>SPIN</button>
</div>
</div>
</div>
<button id="toggle-stats-btn">
<span>Показать/Скрыть статистику игрока</span>
<span class="arrow">▼</span>
</button>
<div class="player-info" id="player-stats-block">
<h2>Ваша статистика</h2>
<div class="current-player">
<span class="player-name" id="player-nickname">Загрузка...</span>
<span class="player-amount" id="player-balance">0$</span>
</div>
<!-- Блок последнего спина -->
<div class="last-spin-result" id="last-spin-result">
Последний спин: не было
</div>
<div class="player-stats">
<div class="stat-item">
<span class="stat-label">Всего игр:</span>
<span class="stat-value" id="total-games">0</span>
</div>
<div class="stat-item">
<span class="stat-label">Побед:</span>
<span class="stat-value" id="wins">0</span>
</div>
<div class="stat-item">
<span class="stat-label">Процент побед:</span>
<span class="stat-value" id="win-rate">0%</span>
</div>
<div class="stat-item">
<span class="stat-label">Общий выигрыш:</span>
<span class="stat-value" id="total-winnings">0$</span>
</div>
<div class="stat-item">
<span class="stat-label">Текущая серия:</span>
<span class="stat-value" id="current-streak">0</span>
</div>
<div class="stat-item">
<span class="stat-label">Лучшая серия:</span>
<span class="stat-value" id="best-streak">0</span>
</div>
</div>
</div>
</div>
</div>
<script>
(function(){
// --- СКРИПТ ДЛЯ ПЕРЕКЛЮЧЕНИЯ СТАТИСТИКИ ---
const statsBlock = document.getElementById('player-stats-block');
const toggleBtn = document.getElementById('toggle-stats-btn');
toggleBtn.addEventListener('click', () => {
statsBlock.classList.toggle('open');
});
// ------------------------------------------------
// Константы для работы с mybb хранилищем
const appId = 16777213;
const storageKey = "slotbank";
const GUEST_NICK = "Гость";
// Функция для работы с mybb хранилищем
async function mybbStorage(action, key, value = null) {
try {
if (typeof mybb === 'undefined' || !mybb.storage) {
console.warn('MyBB хранилище недоступно, используем localStorage');
return localFallback(action, key, value);
}
const fullKey = `${storageKey}_${key}`;
switch(action) {
case 'get':
return await mybb.storage.get(appId, fullKey);
case 'set':
return await mybb.storage.set(appId, fullKey, value);
case 'getAll':
return await mybb.storage.getAll(appId);
default:
return null;
}
} catch (error) {
console.error('Ошибка mybb хранилища:', error);
return localFallback(action, key, value);
}
}
// Фолбэк на localStorage
function localFallback(action, key, value = null) {
const fullKey = `${storageKey}_${key}`;
switch(action) {
case 'get':
const item = localStorage.getItem(fullKey);
return item ? JSON.parse(item) : null;
case 'set':
localStorage.setItem(fullKey, JSON.stringify(value));
return true;
case 'getAll':
const allData = {};
for (let i = 0; i < localStorage.length; i++) {
const k = localStorage.key(i);
if (k.startsWith(storageKey)) {
try {
allData[k.replace(`${storageKey}_`, '')] = JSON.parse(localStorage.getItem(k));
} catch (e) {
console.error('Ошибка парсинга:', e);
}
}
}
return allData;
default:
return null;
}
}
// Функция для поиска никнейма
function getCurrentUserNick() {
let currentUserId = null;
let currentNick = GUEST_NICK;
const profileLink = document.querySelector('a[href*="profile.php?id="]');
if (profileLink) {
const href = profileLink.getAttribute('href');
const idMatch = href.match(/id=(\d+)/);
if (idMatch && idMatch[1]) {
currentUserId = idMatch[1];
}
const parentBlock = profileLink.closest('div, p, li, span');
if (parentBlock) {
const nickElement = parentBlock.querySelector('strong');
if (nickElement) {
currentNick = nickElement.textContent.trim();
return { id: currentUserId, nick: currentNick, source: 'Через уникальную ссылку' };
}
}
}
const fallbackNickElement = document.querySelector('strong');
if (fallbackNickElement) {
currentNick = fallbackNickElement.textContent.trim();
return { id: 'Неизвестен', nick: currentNick, source: 'Первый тег <strong>' };
}
return { id: 'Неизвестен', nick: GUEST_NICK, source: 'Не найдено' };
}
// Получение ID пользователя
async function getUserId() {
const userData = getCurrentUserNick();
if (userData.id && userData.id !== 'Неизвестен') {
return userData.id;
}
let userId = await mybbStorage('get', 'userId');
if (!userId) {
userId = "user_" + Math.floor(Math.random() * 10000);
await mybbStorage('set', 'userId', userId);
}
return userId;
}
// Получение ника пользователя
function getUserNickname() {
const userData = getCurrentUserNick();
return userData.nick;
}
// Загрузка данных пользователя из хранилища
async function loadUserData() {
const userId = await getUserId();
const nickname = getUserNickname();
let userData = await mybbStorage('get', `user_${userId}`);
if (!userData) {
userData = {
userId: userId,
nickname: nickname,
balance: 1000,
totalGames: 0,
wins: 0,
totalWinnings: 0,
maxWin: 0,
currentStreak: 0,
bestStreak: 0,
lastSpin: null,
lastSpinResult: null
};
await mybbStorage('set', `user_${userId}`, userData);
} else {
// Обновляем никнейм, если он изменился
userData.nickname = nickname;
}
return userData;
}
// Сохранение данных пользователя
async function saveUserData(userData) {
await mybbStorage('set', `user_${userData.userId}`, userData);
}
// Загрузка топа игроков
async function loadTopPlayers() {
const allData = await mybbStorage('getAll');
const players = [];
for (const key in allData) {
if (key.startsWith('user_') && allData[key] && allData[key].totalWinnings > 0) {
players.push(allData[key]);
}
}
// Сортируем по общему выигрышу (по убыванию)
players.sort((a, b) => b.totalWinnings - a.totalWinnings);
return players.slice(0, 10); // Только топ-10
}
// Обновление топа игроков
async function updateTopPlayers() {
const topPlayers = await loadTopPlayers();
const topList = document.getElementById('top-players-list');
const currentUserId = await getUserId();
topList.innerHTML = '';
if (topPlayers.length === 0) {
topList.innerHTML = '<li class="player-item"><span class="player-name">Нет данных</span><span class="player-amount">0$</span></li>';
return;
}
topPlayers.forEach((player, index) => {
const li = document.createElement('li');
li.className = 'player-item';
if (player.userId === currentUserId) {
li.classList.add('user-highlight');
}
li.innerHTML = `
<span class="player-name">${index + 1}. ${player.nickname}</span>
<span class="player-amount">${player.totalWinnings}$</span>
`;
topList.appendChild(li);
});
}
// Игровые константы
const TIMER_HOURS = 0;
const TIMER_MINUTES = 1;
const COOLDOWN = (TIMER_HOURS*60 + TIMER_MINUTES)*60*1000;
const symbols = [
{name:"Tikva", url:"https://upforme.ru/uploads/001c/52/b6/2/605998.png"},
{name:"Cherep", url:"https://upforme.ru/uploads/001c/52/b6/2/319417.png"},
{name:"Zombie", url:"https://upforme.ru/uploads/001c/52/b6/2/802623.png"},
{name:"Blood", url:"https://upforme.ru/uploads/001c/52/b6/2/566605.png"},
{name:"Potion", url:"https://upforme.ru/uploads/001c/52/b6/2/610070.png"}
];
const winningCombos = {
"Tikva,Tikva,Tikva": 100,
"Cherep,Cherep,Cherep": 150,
"Zombie,Zombie,Zombie": 200,
"Blood,Blood,Blood": 250,
"Potion,Potion,Potion": 300,
"Zombie,Blood,Potion": 500
};
const reels = document.querySelectorAll(".slot-reel img");
const spinBtn = document.getElementById("slot-spin");
const timerEl = document.getElementById("slot-timer");
const resultDisplay = document.getElementById("result-display");
const confirmBet = document.getElementById("confirm-bet");
// Основной объект пользователя
let userData = null;
// Функция для создания HTML результата
function createSlotResultHTML(resultSymbols, isWin, winAmount, resultMessage) {
const symbolsHTML = resultSymbols.map(symbolName => {
const symbol = symbols.find(s => s.name === symbolName);
if (symbol) {
return `<div style="width:80px;height:80px;border-radius:10px;border:2px solid #555;background:#000;overflow:hidden;box-shadow:0 0 10px rgba(0,0,0,0.5);margin:0 5px;"><img src="${symbol.url}" alt="${symbolName}" style="width:100%;height:100%;object-fit:contain;"></div>`;
}
return '';
}).join('');
const winStyle = isWin ?
"background:rgba(76,175,80,0.2);color:#4CAF50;border:2px solid #4CAF50;box-shadow:0 0 20px rgba(76,175,80,0.5);text-shadow:0 0 5px rgba(76,175,80,0.7)" :
"background:rgba(244,67,54,0.2);color:#f44336;border:2px solid #f44336;box-shadow:0 0 20px rgba(244,67,54,0.3)";
return `
<div style="background:rgba(30,30,46,0.95);border:2px solid #5a5a80;border-radius:15px;padding:15px;margin:10px 0;max-width:500px;box-shadow:0 0 25px rgba(0,0,0,0.6);">
<div style="text-align:center;margin-bottom:15px;color:#ffd700;text-shadow:0 0 10px rgba(255,215,0,0.5);font-size:20px;border-bottom:2px solid #4a4a6d;padding-bottom:10px;">
Результат слота
</div>
<div style="display:flex;flex-direction:column;align-items:center;gap:15px;">
<div style="display:flex;justify-content:center;gap:15px;margin-bottom:15px;">
${symbolsHTML}
</div>
<div style="text-align:center;padding:12px;border-radius:10px;font-size:18px;font-weight:bold;width:100%;${winStyle}">
${resultMessage}
</div>
<div style="text-align:center;margin-top:10px;font-size:14px;color:#aaa;border-top:1px solid #4a4a6d;padding-top:10px;">
Игрок: <strong style="color:#ffd700;">${userData.nickname}</strong> | Баланс: <strong style="color:#4CAF50;">${userData.balance}$</strong>
</div>
</div>
</div>`;
}
// Обновление информации о пользователе
function updateUserInfo() {
document.getElementById('player-nickname').textContent = userData.nickname;
document.getElementById('player-balance').textContent = userData.balance + '$';
document.getElementById('total-games').textContent = userData.totalGames;
document.getElementById('wins').textContent = userData.wins;
document.getElementById('total-winnings').textContent = userData.totalWinnings + '$';
document.getElementById('win-rate').textContent = userData.totalGames > 0 ?
Math.round((userData.wins / userData.totalGames) * 100) + '%' : '0%';
document.getElementById('current-streak').textContent = userData.currentStreak;
document.getElementById('best-streak').textContent = userData.bestStreak;
// Обновление информации о последнем спине
const lastSpinEl = document.getElementById('last-spin-result');
if (userData.lastSpinResult) {
lastSpinEl.textContent = `Последний спин: ${userData.lastSpinResult}`;
lastSpinEl.className = userData.lastSpinResult.includes('ПОБЕДА') ?
'last-spin-result last-spin-win' : 'last-spin-result last-spin-lose';
} else {
lastSpinEl.textContent = 'Последний спин: не было';
lastSpinEl.className = 'last-spin-result';
}
}
// Обновление состояния кнопки
function updateSpinButton() {
spinBtn.disabled = !confirmBet.checked || (Date.now() - (userData.lastSpin || 0) < COOLDOWN);
}
confirmBet.addEventListener("change", updateSpinButton);
function updateTimer() {
let diff = COOLDOWN - (Date.now() - (userData.lastSpin || 0));
if(diff <= 0){
timerEl.textContent = "Можешь крутить! ✅";
updateSpinButton();
} else {
let h=Math.floor(diff/3600000),
m=Math.floor((diff%3600000)/60000),
s=Math.floor((diff%60000)/1000);
timerEl.textContent = `${h}ч ${m}м ${s}с`;
updateSpinButton();
}
}
async function spinReels() {
if(!confirmBet.checked) {
resultDisplay.textContent = "Подтвердите стоимость ставки!";
resultDisplay.className = "result-display lose-result";
return;
}
if(Date.now() - (userData.lastSpin || 0) < COOLDOWN){
resultDisplay.textContent = "Подожди, таймер не истёк!";
resultDisplay.className = "result-display lose-result";
return;
}
spinBtn.disabled=true;
resultDisplay.textContent = "Крутим...";
resultDisplay.className = "result-display";
let results=[];
let durations=[1000, 1300, 1600];
reels.forEach((img,index)=>{
let cycles = 12 + Math.floor(Math.random()*8);
let finalSymbol = symbols[Math.floor(Math.random()*symbols.length)];
results.push(finalSymbol.name);
let step=0;
let interval = setInterval(()=>{
let sym = symbols[Math.floor(Math.random()*symbols.length)];
img.style.top="-100%";
img.src = sym.url;
setTimeout(()=>{
img.style.top="0";
}, 10);
step++;
if(step>=cycles){
img.src = finalSymbol.url;
img.style.top="0";
clearInterval(interval);
}
}, durations[index]/cycles);
});
setTimeout(async () => {
let reward = 0;
const key = results.join(",");
for(let combo in winningCombos){
if(key === combo) reward = winningCombos[combo];
}
let resultMessage = "";
let isWin = false;
if(reward > 0) {
isWin = true;
resultMessage = `ПОБЕДА! Ты выиграл ${reward}$`;
resultDisplay.textContent = resultMessage;
resultDisplay.className = "result-display win-result";
userData.balance += reward;
userData.totalGames += 1;
userData.wins += 1;
userData.totalWinnings += reward;
userData.currentStreak += 1;
if (userData.currentStreak > userData.bestStreak) {
userData.bestStreak = userData.currentStreak;
}
if (reward > userData.maxWin) {
userData.maxWin = reward;
}
} else {
resultMessage = "Неудача! Попробуй еще раз.";
resultDisplay.textContent = resultMessage;
resultDisplay.className = "result-display lose-result";
userData.totalGames += 1;
userData.currentStreak = 0;
}
userData.lastSpin = Date.now();
userData.lastSpinResult = resultMessage;
await saveUserData(userData);
updateUserInfo();
await updateTopPlayers();
const messageHTML = createSlotResultHTML(results, isWin, reward, resultMessage);
const encoded = btoa(unescape(encodeURIComponent(messageHTML)));
window.parent.postMessage({
type:"slotResult",
payload:{
html: encoded,
userId: userData.userId,
nickname: userData.nickname,
result: resultMessage,
reward: reward
}
},"*");
const trySend = () => {
const textarea = document.getElementById('main-reply');
const submitBtn = document.querySelector('input[name="submit"]');
if(textarea && submitBtn){
textarea.value = encoded;
submitBtn.click();
} else {
setTimeout(trySend,150);
}
};
trySend();
updateTimer();
}, Math.max(...durations));
}
// Инициализация
async function init() {
userData = await loadUserData();
updateUserInfo();
await updateTopPlayers();
updateSpinButton();
const timerInterval = setInterval(updateTimer, 1000);
spinBtn.addEventListener("click", spinReels);
// Обновляем список игроков каждые 30 секунд
setInterval(async () => {
await updateTopPlayers();
}, 30000);
}
// Запуск инициализации
init();
})();
</script>
</body>
</html>[/html]
[hideprofile]