/
MM_Designer
/
MySlavesTEST
Обзор
Документация
Войти
/
MM_Designer
/
MySlavesTEST
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
rating-script.js
469 строк
21 KB
MM_Designer
upload files
26 сен 2025, 21:43
26 сен 2025, 21:43
cda51ee
Код
Авторство
О чём код?
// Массивы данных для генерации const playerNames = [ 'Максим Максимов', 'Александр Македонский', 'Дмитрий Попов', 'Андрей Лялечка', 'Алексей Смирнов', 'Артём Кивиладзе', 'Худой малыш', 'Николай Гулулуш-Дидинахвамдис-Додеп', 'Maria Goncharova', 'Михаил Круг', 'Роман Обыкновенный', 'Сергей Исаев', 'Денис Сергеев', 'Евгений Ильяч', 'Илья Евгеньев', 'Кирилл Шевченко', 'Павел Воля', 'Анна Камрюха', 'Мария Шлюха', 'Елена ДабудиДабудай', 'Наталья... Нет блять рентгеноэлектрокардиография', 'Ольга Ничипоренко. Ой блять, Олег Нечипоренко', 'Татьяна Бударина', 'Ирина Мандавошка', 'Светлана Ефремова', 'Екатерина Белочку словила', 'Людмила Надежда смерть', ]; const firstNames = [ 'Максим', 'Александр', 'Дмитрий', 'Андрей', 'Алексей', 'Артём', 'Владимир', 'Юрий', 'Николай', 'Михаил', 'Роман', 'Сергей', 'Денис', 'Евгений', 'Илья', 'Кирилл', 'Павел', 'Владислав', 'Игорь', 'Олег', 'Анна', 'Мария', 'Елена', 'Наталья', 'Ольга', 'Татьяна', 'Ирина', 'Светлана', 'Екатерина', 'Людмила', 'Юлия', 'Галина', 'Валентина', 'Нина', 'Вера', 'Любовь', 'Лариса', 'Зинаида', 'Валерия', 'Алина' ]; const lastNames = [ 'Смирнов', 'Иванов', 'Кузнецов', 'Попов', 'Соколов', 'Лебедев', 'Козлов', 'Новиков', 'Морозов', 'Петров', 'Волков', 'Соловьёв', 'Васильев', 'Зайцев', 'Павлов', 'Семёнов', 'Голубев', 'Виноградов', 'Богданов', 'Воробьёв', 'Фёдоров', 'Михайлов', 'Беляев', 'Тарасов', 'Белов', 'Комаров', 'Орлов', 'Киселёв', 'Макаров', 'Андреев' ]; const clanNames = [ 'Dark Kingmoms', 'Рабство 2025 NEW', 'Нагибаторы', 'USSR', 'Адские чебуреки', 'Муххамеды', 'Russian Style', 'Deleted Group', 'Не опущена, а занижена', 'Набор в клан | Бездомные', 'Крутые парни', 'Легенды игры', 'Властелины тьмы', 'Непобедимые', 'Короли рабства', 'Элитный клуб', 'Мастера хаоса', 'Гильдия воинов', 'Братство стали', 'Огненные драконы', 'Ледяные волки', 'Золотые орлы' ]; // Функции для генерации случайных данных function randomInRange(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function generateRandomPlayerName() { return playerNames[Math.floor(Math.random() * playerNames.length)]; } function generateRandomPersonName() { const firstName = firstNames[Math.floor(Math.random() * firstNames.length)]; const lastName = lastNames[Math.floor(Math.random() * lastNames.length)]; return `${firstName} ${lastName}`; } function generateRandomClanName() { return clanNames[Math.floor(Math.random() * clanNames.length)]; } function formatNumber(num) { if (num >= 1000000000) { return (num / 1000000000).toFixed(1) + ' млрд'; } else if (num >= 1000000) { return (num / 1000000).toFixed(1) + ' млн'; } else if (num >= 1000) { return (num / 1000).toFixed(0) + ' тыс'; } return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' '); } function generateRandomBalance() { return randomInRange(50000000000, 500000000000); // от 50 млрд до 500 млрд } function generateRandomUsers() { return randomInRange(1000000, 100000000); // от 1 млн до 100 млн } function generateRandomMembers() { return randomInRange(50, 10000); // от 50 до 10000 участников } function generateLastSeen() { const timeOptions = [ 'только что', '2 мин назад', '5 мин назад', '15 мин назад', '30 мин назад', '1 час назад', '2 часа назад', '5 часов назад', '12 часов назад', 'вчера', '2 дня назад', '3 дня назад', 'неделю назад' ]; return timeOptions[Math.floor(Math.random() * timeOptions.length)]; } // Функция создания карточки игрока function createPlayerCard(name, balance, users, rank, isTop3 = false, isBanned = false) { let rankClass = 'normal'; let rankText = rank.toString(); if (isBanned) { rankClass = 'ban'; rankText = 'Бан'; } else if (isTop3) { switch(rank) { case 1: rankClass = 'gold'; rankText = 'Топ 1'; break; case 2: rankClass = 'silver'; rankText = 'Топ 2'; break; case 3: rankClass = 'bronze'; rankText = 'Топ 3'; break; } } return ` <div class="player-card" onclick="openPlayerProfile('${name}')"> <div class="player-avatar"> <img src="https://images.unsplash.com/photo-1724435811349-32d27f4d5806?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxwZXJzb24lMjBhdmF0YXIlMjBwcm9maWxlfGVufDF8fHx8MTc1NzczMzYxOHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral" alt="Avatar"> </div> <div class="player-info"> <h3>${name}</h3> <div class="player-stats"> <span class="balance">${formatNumber(balance)}</span> <div class="icon-database"> <svg viewBox="0 0 12 12" fill="none"> <path d="M6 4C8.48528 4 10.5 3.32843 10.5 2.5C10.5 1.67157 8.48528 1 6 1C3.51472 1 1.5 1.67157 1.5 2.5C1.5 3.32843 3.51472 4 6 4Z" stroke="#64748B" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M10.5 6C10.5 6.83 8.5 7.5 6 7.5C3.5 7.5 1.5 6.83 1.5 6" stroke="#64748B" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M1.5 2.5V9.5C1.5 10.33 3.5 11 6 11C8.5 11 10.5 10.33 10.5 9.5V2.5" stroke="#64748B" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="separator"></div> <span class="users">${formatNumber(users)}</span> <div class="icon-user"> <svg viewBox="0 0 12 12" fill="none"> <path d="M9.5 10.5V9.5C9.5 8.96957 9.28929 8.46086 8.91421 8.08579C8.53914 7.71071 8.03043 7.5 7.5 7.5H4.5C3.96957 7.5 3.46086 7.71071 3.08579 8.08579C2.71071 8.46086 2.5 8.96957 2.5 9.5V10.5" stroke="#64748B" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M6 5.5C7.10457 5.5 8 4.60457 8 3.5C8 2.39543 7.10457 1.5 6 1.5C4.89543 1.5 4 2.39543 4 3.5C4 4.60457 4.89543 5.5 6 5.5Z" stroke="#64748B" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> </div> </div> <div class="rank ${rankClass}">${rankText}</div> </div> `; } // Функция создания карточки друга function createFriendCard(name, balance, users, rank, isOnline = null) { const onlineStatus = isOnline !== null ? isOnline : Math.random() > 0.3; const statusClass = onlineStatus ? 'online' : 'offline'; const lastSeen = onlineStatus ? 'в сети' : generateLastSeen(); return ` <div class="player-card friend-card" onclick="openPlayerProfile('${name}')"> <div class="player-avatar"> <img src="https://images.unsplash.com/photo-1724435811349-32d27f4d5806?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxwZXJzb24lMjBhdmF0YXIlMjBwcm9maWxlfGVufDF8fHx8MTc1NzczMzYxOHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral" alt="Avatar"> </div> <div class="player-info"> <h3>${name}</h3> <div class="friend-status"> <div class="status-indicator ${statusClass}"></div> <span class="last-seen">${lastSeen}</span> <div class="separator"></div> <span class="balance">${formatNumber(balance)}</span> </div> </div> <div class="rank normal">${rank}</div> </div> `; } // Функция создания карточки клана function createClanCard(name, balance, members, rank, isTop3 = false) { let rankClass = 'normal'; let rankText = rank.toString(); if (isTop3) { switch(rank) { case 1: rankClass = 'gold'; rankText = 'Топ 1'; break; case 2: rankClass = 'silver'; rankText = 'Топ 2'; break; case 3: rankClass = 'bronze'; rankText = 'Топ 3'; break; } } return ` <div class="player-card clan-card" onclick="openClanProfile('${name}')"> <div class="player-avatar"> <img src="https://images.unsplash.com/photo-1724435811349-32d27f4d5806?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxwZXJzb24lMjBhdmF0YXIlMjBwcm9maWxlfGVufDF8fHx8MTc1NzczMzYxOHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral" alt="Clan Avatar"> </div> <div class="player-info"> <h3>${name}</h3> <div class="clan-stats"> <span class="balance">${formatNumber(balance)}</span> <div class="icon-database"> <svg viewBox="0 0 12 12" fill="none"> <path d="M6 4C8.48528 4 10.5 3.32843 10.5 2.5C10.5 1.67157 8.48528 1 6 1C3.51472 1 1.5 1.67157 1.5 2.5C1.5 3.32843 3.51472 4 6 4Z" stroke="#64748B" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M10.5 6C10.5 6.83 8.5 7.5 6 7.5C3.5 7.5 1.5 6.83 1.5 6" stroke="#64748B" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M1.5 2.5V9.5C1.5 10.33 3.5 11 6 11C8.5 11 10.5 10.33 10.5 9.5V2.5" stroke="#64748B" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="separator"></div> <span class="member-count">${formatNumber(members)} участников</span> </div> </div> <div class="rank ${rankClass}">${rankText}</div> </div> `; } // Функции генерации списков function generatePlayersList() { const playersList = document.getElementById('playersList'); let playersHTML = ''; // Генерируем топ игроков (1-50) for (let i = 1; i <= 50; i++) { const name = generateRandomPlayerName(); const balance = generateRandomBalance(); const users = generateRandomUsers(); const isTop3 = i <= 3; const isBanned = Math.random() < 0.1; // 10% шанс на бан playersHTML += createPlayerCard(name, balance, users, i, isTop3, isBanned); } playersList.innerHTML = playersHTML; } function generateFriendsList() { const friendsList = document.getElementById('friendsList'); let friendsHTML = ''; // Генерируем список друзей (25-35 человек) const friendsCount = randomInRange(25, 35); for (let i = 1; i <= friendsCount; i++) { const name = generateRandomPersonName(); const balance = generateRandomBalance(); const users = generateRandomUsers(); friendsHTML += createFriendCard(name, balance, users, i); } friendsList.innerHTML = friendsHTML; } function generateClansList() { const clansList = document.getElementById('clansList'); let clansHTML = ''; // Генерируем топ кланов (1-22) for (let i = 1; i <= 22; i++) { const name = generateRandomClanName(); const balance = generateRandomBalance(); const members = generateRandomMembers(); const isTop3 = i <= 3; clansHTML += createClanCard(name, balance, members, i, isTop3); } clansList.innerHTML = clansHTML; } // Функция генерации данных пользователя function generateUserData() { const userName = generateRandomPersonName(); const userBalance = formatNumber(generateRandomBalance()); const userUsers = formatNumber(generateRandomUsers()); const userRank = randomInRange(10, 100); document.getElementById('userName').textContent = userName; document.getElementById('userBalance').textContent = userBalance; document.getElementById('userUsers').textContent = userUsers; document.getElementById('userRank').textContent = userRank; } // Функция генерации данных клана пользователя function generateUserClanData() { const clanName = generateRandomClanName(); const clanBalance = formatNumber(generateRandomBalance()); const clanMembers = formatNumber(generateRandomMembers()); const clanRank = randomInRange(1, 50); document.getElementById('clanName').textContent = clanName; document.getElementById('clanBalance').textContent = clanBalance; document.getElementById('clanMembers').textContent = `${clanMembers} участников`; document.getElementById('clanRank').textContent = clanRank; } // Функция переключения вкладок function switchTab(tabName) { // Убираем активный класс со всех вкладок document.querySelectorAll('.tab').forEach(tab => { tab.classList.remove('active'); }); // Убираем активный класс со всех контентов document.querySelectorAll('.tab-content').forEach(content => { content.classList.remove('active'); }); // Убираем активный класс со всех карточек пользователя document.querySelectorAll('.user-card').forEach(card => { card.classList.remove('active'); }); // Добавляем активный класс к выбранной вкладке document.querySelector(`[data-tab="${tabName}"]`).classList.add('active'); // Показываем соответствующий контент document.getElementById(`${tabName}Content`).classList.add('active'); // Показываем соответствующую карточку пользователя if (tabName === 'players') { document.getElementById('playersUserCard').classList.add('active'); } else if (tabName === 'clans') { document.getElementById('clanUserCard').classList.add('active'); } // Обновляем заголовок страницы const titles = { 'players': 'Рейтинг игроков', 'friends': 'Рейтинг друзей', 'clans': 'Рейтинг кланов' }; document.title = `The РАБЫ - ${titles[tabName]}`; } // Функция обновления таймера function updateCountdown() { const countdownElement = document.getElementById('countdownTime'); // Генерируем случайное время от 10 до 30 часов const hours = randomInRange(10, 30); const minutes = randomInRange(0, 59); const seconds = randomInRange(0, 59); countdownElement.textContent = `${hours} часа, ${minutes} минут, ${seconds} секунд`; } // Функции для открытия профилей function openPlayerProfile(name) { // Открываем профиль раба с именем игрока window.location.href = `slave-profile.html?name=${encodeURIComponent(name)}`; } function openClanProfile(name) { showNotification(`Открытие профиля клана: ${name}`); } // Функция клика по карточке пользователя function openUserProfile() { const userName = document.getElementById('userName').textContent; window.location.href = `slave-profile.html?name=${encodeURIComponent(userName)}`; } function openUserClanProfile() { const clanName = document.getElementById('clanName').textContent; showNotification(`Открытие профиля клана: ${clanName}`); } // Функция показа уведомлений function showNotification(message) { const notification = document.createElement('div'); notification.style.cssText = ` position: fixed; top: 20px; right: 20px; background-color: #0f172a; color: white; padding: 12px 16px; border-radius: 8px; font-size: 14px; font-weight: 600; font-family: 'Inter', sans-serif; z-index: 1000; transform: translateX(100%); transition: transform 0.3s ease; max-width: 250px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); `; notification.textContent = message; document.body.appendChild(notification); setTimeout(() => { notification.style.transform = 'translateX(0)'; }, 100); setTimeout(() => { notification.style.transform = 'translateX(100%)'; setTimeout(() => { notification.remove(); }, 300); }, 3000); } // Инициализация при загрузке страницы document.addEventListener('DOMContentLoaded', function() { // Генерация данных пользователя и клана generateUserData(); generateUserClanData(); // Генерация всех списков generatePlayersList(); generateFriendsList(); generateClansList(); // Таймер updateCountdown(); // Таймер каждые 10 секунд для демонстрации setInterval(updateCountdown, 10000); // Обработчики для вкладок document.querySelectorAll('.tab').forEach(tab => { tab.addEventListener('click', function() { const tabName = this.getAttribute('data-tab'); switchTab(tabName); }); }); // Обработчики для карточек пользователя document.getElementById('playersUserCard').addEventListener('click', openUserProfile); document.getElementById('clanUserCard').addEventListener('click', openUserClanProfile); // Обработчик для иконки информации const infoIcon = document.querySelector('.info-icon'); if (infoIcon) { infoIcon.addEventListener('click', function() { showNotification('Время до конца текущего сезона рейтинга!'); }); } // Aнимациz появления элементов setTimeout(() => { const elements = document.querySelectorAll('.player-card'); elements.forEach((element, index) => { element.style.opacity = '0'; element.style.transform = 'translateY(10px)'; element.style.transition = 'all 0.3s ease'; setTimeout(() => { element.style.opacity = '1'; element.style.transform = 'translateY(0)'; }, index * 50); }); }, 100); // Навигация const navItems = document.querySelectorAll('.nav-item'); navItems.forEach(item => { item.addEventListener('click', function(e) { const href = this.getAttribute('href'); if (href && href !== '#' && href !== 'rating.html') { return; } if (href === 'rating.html') { e.preventDefault(); navItems.forEach(nav => nav.classList.remove('active')); this.classList.add('active'); } }); }); }); // Глобальные функции window.openPlayerProfile = openPlayerProfile; window.openClanProfile = openClanProfile; window.switchTab = switchTab;