тун сахур
админка счетчика постов
Сообщений 1 страница 3 из 3
Поделиться22026-07-01 21:17:53
[html]
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f4f7f6;
margin: 0;
padding: 20px;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
.lottery-container {
background: white;
border-radius: 12px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
padding: 30px;
max-width: 500px;
width: 100%;
text-align: center;
}
h2 {
color: #2c3e50;
margin-top: 0;
margin-bottom: 20px;
}
.task-box, .reward-box {
background: #eef2f5;
border: 2px dashed #bdc3c7;
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
min-height: 80px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1em;
color: #34495e;
transition: all 0.3s ease;
}
.reward-box {
background: #fff9e6;
border-color: #f1c40f;
display: none; /* Скрыто по умолчанию */
}
.reward-box.success {
background: #eafaf1;
border-color: #2ecc71;
color: #27ae60;
font-weight: bold;
}
button {
background-color: #3498db;
color: white;
border: none;
padding: 12px 24px;
border-radius: 6px;
font-size: 1em;
cursor: pointer;
transition: background-color 0.2s, transform 0.1s;
margin: 5px;
}
button:hover {
background-color: #2980b9;
}
button:active {
transform: scale(0.98);
}
button:disabled {
background-color: #95a5a6;
cursor: not-allowed;
transform: none;
}
.btn-complete {
background-color: #2ecc71;
display: none; /* Скрыто по умолчанию */
}
.btn-complete:hover {
background-color: #27ae60;
}
.loader {
border: 4px solid #f3f3f3;
border-top: 4px solid #3498db;
border-radius: 50%;
width: 30px;
height: 30px;
animation: spin 1s linear infinite;
margin: 0 auto;
display: none;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
</head>
<body>
<div class="lottery-container">
<h2>Ежедневная Лотерея</h2>
<p>Получите случайное задание, выполните его и заберите награду!</p>
<div id="taskDisplay" class="task-box">
Нажмите кнопку ниже, чтобы получить задание.
</div>
<div id="loadingIndicator" class="loader"></div>
<div id="rewardDisplay" class="reward-box">
<!-- Здесь будет награда -->
</div>
<div>
<button id="btnGetTask" onclick="generateTask()">Получить задание</button>
<button id="btnCompleteTask" class="btn-complete" onclick="completeTask()">Я выполнил(а) задание!</button>
</div>
</div>
<script>
// Массив с заданиями. Можете добавлять или изменять их здесь.
const tasks = [
"Написать 3 новых сообщения в игровых темах.",
"Создать новую тему для обсуждения во флудилке.",
"Оставить развернутый комментарий в профиле случайного пользователя.",
"Написать пост объемом не менее 1500 символов.",
"Поучаствовать в форумной игре (например, в 'Ассоциации').",
"Заполнить или обновить анкету своего персонажа.",
"Пригласить друга зарегистрироваться на форуме.",
"Оценить 5 последних постов других игроков.",
"Написать отзыв о форуме в специальной теме.",
"Сменить аватар на тематический (праздничный, сезонный)."
];
// Массив с наградами. Можете добавлять или изменять их здесь.
const rewards = [
"🏆 +100 очков репутации",
"💰 500 золотых монет на счет",
"✨ Уникальная медаль 'Счастливчик'",
"🎨 Право на бесплатную смену ника",
"💎 VIP-статус на 3 дня",
"🎁 Секретный подарок от Администрации",
"⭐ +50 очков опыта",
"🛡️ Иммунитет к бану на неделю (шутка, но может быть!)",
"📜 Индивидуальное звание под аватаром",
"💸 Удвоение опыта за следующий пост"
];
// Получаем элементы со страницы для взаимодействия с ними
const taskDisplay = document.getElementById('taskDisplay');
const rewardDisplay = document.getElementById('rewardDisplay');
const btnGetTask = document.getElementById('btnGetTask');
const btnCompleteTask = document.getElementById('btnCompleteTask');
const loadingIndicator = document.getElementById('loadingIndicator');
// Переменная для хранения текущего состояния
let isTaskActive = false;
let currentTask = ""; // Добавили переменную для хранения текущего задания
// Функция для получения случайного элемента из массива
function getRandomItem(array) {
const randomIndex = Math.floor(Math.random() * array.length);
return array[randomIndex];
}
// Функция, которая срабатывает при нажатии на "Получить задание"
function generateTask() {
if (isTaskActive) return; // Защита от повторного нажатия, если задание уже получено
// Анимация или индикация загрузки (опционально, для эффекта)
taskDisplay.style.opacity = 0.5;
setTimeout(() => {
currentTask = getRandomItem(tasks); // Сохраняем задание
taskDisplay.innerHTML = `<strong>Ваше задание:</strong><br><br>${currentTask}`;
taskDisplay.style.opacity = 1;
// Меняем состояние кнопок
btnGetTask.style.display = 'none';
btnCompleteTask.style.display = 'inline-block';
// Скрываем блок награды, если он был показан ранее
rewardDisplay.style.display = 'none';
rewardDisplay.classList.remove('success');
isTaskActive = true;
}, 500); // Небольшая задержка для имитации "выбора"
}
// Функция, которая срабатывает при нажатии на "Я выполнил(а) задание!"
function completeTask() {
if (!isTaskActive) return;
// Блокируем кнопку, чтобы не нажимали дважды
btnCompleteTask.disabled = true;
btnCompleteTask.innerText = "Проверка...";
taskDisplay.style.display = 'none'; // Скрываем задание
loadingIndicator.style.display = 'block'; // Показываем лоадер
// Имитация процесса проверки модератором или сервером (задержка 2 секунды)
setTimeout(() => {
loadingIndicator.style.display = 'none'; // Скрываем лоадер
// Выбираем случайную награду
const randomReward = getRandomItem(rewards);
// Формируем красивый блок с результатом, обернутый в [html]
const bbCodeResult = `[html]<div style="background:#eafaf1; border:2px solid #2ecc71; padding:15px; border-radius:8px; text-align:center; font-family:sans-serif; color:#2c3e50; margin: 10px 0;">
<h3 style="margin:0 0 10px 0; color:#27ae60;">Лотерея выполнена!</h3>
<p style="margin:5px 0;"><b>Задание:</b> ${currentTask}</p>
<p style="margin:5px 0;"><b>Награда:</b> <span style="font-size:1.1em;">${randomReward}</span></p>
</div>[/html]`;
// Пытаемся вставить результат в форму ответа Rusff
let inserted = false;
if (typeof insert === 'function') {
// Используем стандартную функцию Rusff для вставки BB-кодов
insert(bbCodeResult);
inserted = true;
} else {
// Либо ищем само поле ответа напрямую
const replyBox = document.getElementById('main-reply');
if (replyBox) {
replyBox.value += (replyBox.value ? '\n' : '') + bbCodeResult;
inserted = true;
}
}
// Отображаем награду
rewardDisplay.style.display = 'flex';
rewardDisplay.style.flexDirection = 'column'; // Выстраиваем элементы в колонку
rewardDisplay.classList.add('success');
if (inserted) {
rewardDisplay.innerHTML = `Поздравляем! Задание выполнено!<br><br><strong>Ваша награда:</strong><br>${randomReward}<br><br><span style="font-size: 0.85em; color: #27ae60;">✓ Код с результатом автоматически добавлен в форму ответа!</span>`;
} else {
// Если поля ответа нет на текущей странице, даем возможность скопировать код
rewardDisplay.innerHTML = `Поздравляем! Задание выполнено!<br><br><strong>Ваша награда:</strong><br>${randomReward}<br><br><span style="font-size: 0.85em; color: #e67e22;">Скопируйте код ниже и вставьте его в ваше сообщение:</span><textarea onclick="this.select()" style="width:100%; height:80px; margin-top:10px; padding:5px; font-family:monospace; font-size:12px; border:1px solid #bdc3c7; border-radius:4px; resize:vertical;">${bbCodeResult}</textarea>`;
}
// Возвращаем кнопки в исходное состояние (или можно оставить так до обновления страницы)
// Для цикличной игры раскомментируйте строки ниже:
/*
btnGetTask.style.display = 'inline-block';
btnGetTask.innerText = 'Получить новое задание';
btnCompleteTask.style.display = 'none';
btnCompleteTask.disabled = false;
btnCompleteTask.innerText = 'Я выполнил(а) задание!';
isTaskActive = false;
taskDisplay.style.display = 'flex'; // Возвращаем блок задания (пустой)
taskDisplay.innerHTML = "Нажмите кнопку ниже, чтобы получить новое задание.";
*/
// В текущем виде скрипт требует перезагрузки страницы для новой игры
btnCompleteTask.style.display = 'none';
// Добавляем кнопку "Сыграть еще раз" вместо исходных
const btnPlayAgain = document.createElement('button');
btnPlayAgain.innerText = "Сыграть еще раз";
btnPlayAgain.onclick = function() {
location.reload(); // Простая перезагрузка страницы
};
document.querySelector('.lottery-container div:last-child').appendChild(btnPlayAgain);
}, 2000); // 2000 миллисекунд = 2 секунды задержки
}
</script>
</body>
[/html]
Поделиться32026-07-01 21:23:19
[html]<style>
.lottery-wrapper {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
padding: 20px;
display: flex;
justify-content: center;
align-items: center;
background-color: transparent;
}
.lottery-container {
background: white;
border-radius: 12px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
padding: 30px;
max-width: 500px;
width: 100%;
text-align: center;
}
h2 {
color: #2c3e50;
margin-top: 0;
margin-bottom: 20px;
}
.task-box, .reward-box {
background: #eef2f5;
border: 2px dashed #bdc3c7;
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
min-height: 80px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1em;
color: #34495e;
transition: all 0.3s ease;
}
.reward-box {
background: #fff9e6;
border-color: #f1c40f;
display: none; /* Скрыто по умолчанию */
}
.reward-box.success {
background: #eafaf1;
border-color: #2ecc71;
color: #27ae60;
font-weight: bold;
}
button {
background-color: #3498db;
color: white;
border: none;
padding: 12px 24px;
border-radius: 6px;
font-size: 1em;
cursor: pointer;
transition: background-color 0.2s, transform 0.1s;
margin: 5px;
}
button:hover {
background-color: #2980b9;
}
button:active {
transform: scale(0.98);
}
button:disabled {
background-color: #95a5a6;
cursor: not-allowed;
transform: none;
}
.btn-complete {
background-color: #2ecc71;
display: none; /* Скрыто по умолчанию */
}
.btn-complete:hover {
background-color: #27ae60;
}
.loader {
border: 4px solid #f3f3f3;
border-top: 4px solid #3498db;
border-radius: 50%;
width: 30px;
height: 30px;
animation: spin 1s linear infinite;
margin: 0 auto;
display: none;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
<div class="lottery-wrapper">
<div class="lottery-container">
<h2>Ежедневная Лотерея</h2>
<p>Получите случайное задание, выполните его и заберите награду!</p>
<div id="taskDisplay" class="task-box">
Нажмите кнопку ниже, чтобы получить задание.
</div>
<div id="loadingIndicator" class="loader"></div>
<div id="rewardDisplay" class="reward-box">
<!-- Здесь будет награда -->
</div>
<div>
<button id="btnGetTask" onclick="generateTask()">Получить задание</button>
<button id="btnCompleteTask" class="btn-complete" onclick="completeTask()">Я выполнил(а) задание!</button>
</div>
</div>
<script>
// Массив с заданиями. Можете добавлять или изменять их здесь.
const tasks = [
"Написать 3 новых сообщения в игровых темах.",
"Создать новую тему для обсуждения во флудилке.",
"Оставить развернутый комментарий в профиле случайного пользователя.",
"Написать пост объемом не менее 1500 символов.",
"Поучаствовать в форумной игре (например, в 'Ассоциации').",
"Заполнить или обновить анкету своего персонажа.",
"Пригласить друга зарегистрироваться на форуме.",
"Оценить 5 последних постов других игроков.",
"Написать отзыв о форуме в специальной теме.",
"Сменить аватар на тематический (праздничный, сезонный)."
];
// Массив с наградами. Можете добавлять или изменять их здесь.
const rewards = [
"🏆 +100 очков репутации",
"💰 500 золотых монет на счет",
"✨ Уникальная медаль 'Счастливчик'",
"🎨 Право на бесплатную смену ника",
"💎 VIP-статус на 3 дня",
"🎁 Секретный подарок от Администрации",
"⭐ +50 очков опыта",
"🛡️ Иммунитет к бану на неделю (шутка, но может быть!)",
"📜 Индивидуальное звание под аватаром",
"💸 Удвоение опыта за следующий пост"
];
// Получаем элементы со страницы для взаимодействия с ними
const taskDisplay = document.getElementById('taskDisplay');
const rewardDisplay = document.getElementById('rewardDisplay');
const btnGetTask = document.getElementById('btnGetTask');
const btnCompleteTask = document.getElementById('btnCompleteTask');
const loadingIndicator = document.getElementById('loadingIndicator');
// Переменная для хранения текущего состояния
let isTaskActive = false;
let currentTask = ""; // Добавили переменную для хранения текущего задания
// Функция для получения случайного элемента из массива
function getRandomItem(array) {
const randomIndex = Math.floor(Math.random() * array.length);
return array[randomIndex];
}
// Функция, которая срабатывает при нажатии на "Получить задание"
function generateTask() {
if (isTaskActive) return; // Защита от повторного нажатия, если задание уже получено
// Анимация или индикация загрузки (опционально, для эффекта)
taskDisplay.style.opacity = 0.5;
setTimeout(() => {
currentTask = getRandomItem(tasks); // Сохраняем задание
taskDisplay.innerHTML = `<strong>Ваше задание:</strong><br><br>${currentTask}`;
taskDisplay.style.opacity = 1;
// Меняем состояние кнопок
btnGetTask.style.display = 'none';
btnCompleteTask.style.display = 'inline-block';
// Скрываем блок награды, если он был показан ранее
rewardDisplay.style.display = 'none';
rewardDisplay.classList.remove('success');
isTaskActive = true;
}, 500); // Небольшая задержка для имитации "выбора"
}
// Функция, которая срабатывает при нажатии на "Я выполнил(а) задание!"
function completeTask() {
if (!isTaskActive) return;
// Блокируем кнопку, чтобы не нажимали дважды
btnCompleteTask.disabled = true;
btnCompleteTask.innerText = "Проверка...";
taskDisplay.style.display = 'none'; // Скрываем задание
loadingIndicator.style.display = 'block'; // Показываем лоадер
// Имитация процесса проверки модератором или сервером (задержка 2 секунды)
setTimeout(() => {
loadingIndicator.style.display = 'none'; // Скрываем лоадер
// Выбираем случайную награду
const randomReward = getRandomItem(rewards);
// Формируем красивый блок с результатом, обернутый в [html]
const bbCodeResult = `[html]<div style="background:#eafaf1; border:2px solid #2ecc71; padding:15px; border-radius:8px; text-align:center; font-family:sans-serif; color:#2c3e50; margin: 10px 0;">
<h3 style="margin:0 0 10px 0; color:#27ae60;">Лотерея выполнена!</h3>
<p style="margin:5px 0;"><b>Задание:</b> ${currentTask}</p>
<p style="margin:5px 0;"><b>Награда:</b> <span style="font-size:1.1em;">${randomReward}</span></p>
</div>[/html]`;
// Пытаемся вставить результат в форму ответа Rusff
let inserted = false;
if (typeof insert === 'function') {
// Используем стандартную функцию Rusff для вставки BB-кодов
insert(bbCodeResult);
inserted = true;
} else {
// Либо ищем само поле ответа напрямую
const replyBox = document.getElementById('main-reply');
if (replyBox) {
replyBox.value += (replyBox.value ? '\n' : '') + bbCodeResult;
inserted = true;
}
}
// Отображаем награду
rewardDisplay.style.display = 'flex';
rewardDisplay.style.flexDirection = 'column'; // Выстраиваем элементы в колонку
rewardDisplay.classList.add('success');
if (inserted) {
rewardDisplay.innerHTML = `Поздравляем! Задание выполнено!<br><br><strong>Ваша награда:</strong><br>${randomReward}<br><br><span style="font-size: 0.85em; color: #27ae60;">✓ Код с результатом автоматически добавлен в форму ответа!</span>`;
} else {
// Если поля ответа нет на текущей странице, даем возможность скопировать код
rewardDisplay.innerHTML = `Поздравляем! Задание выполнено!<br><br><strong>Ваша награда:</strong><br>${randomReward}<br><br><span style="font-size: 0.85em; color: #e67e22;">Скопируйте код ниже и вставьте его в ваше сообщение:</span><textarea onclick="this.select()" style="width:100%; height:80px; margin-top:10px; padding:5px; font-family:monospace; font-size:12px; border:1px solid #bdc3c7; border-radius:4px; resize:vertical;">${bbCodeResult}</textarea>`;
}
// Возвращаем кнопки в исходное состояние (или можно оставить так до обновления страницы)
// Для цикличной игры раскомментируйте строки ниже:
/*
btnGetTask.style.display = 'inline-block';
btnGetTask.innerText = 'Получить новое задание';
btnCompleteTask.style.display = 'none';
btnCompleteTask.disabled = false;
btnCompleteTask.innerText = 'Я выполнил(а) задание!';
isTaskActive = false;
taskDisplay.style.display = 'flex'; // Возвращаем блок задания (пустой)
taskDisplay.innerHTML = "Нажмите кнопку ниже, чтобы получить новое задание.";
*/
// В текущем виде скрипт требует перезагрузки страницы для новой игры
btnCompleteTask.style.display = 'none';
// Добавляем кнопку "Сыграть еще раз" вместо исходных
const btnPlayAgain = document.createElement('button');
btnPlayAgain.innerText = "Сыграть еще раз";
btnPlayAgain.onclick = function() {
// Для форума просто сбрасываем виджет без перезагрузки страницы
btnCompleteTask.disabled = false;
btnCompleteTask.innerText = "Я выполнил(а) задание!";
btnCompleteTask.style.display = 'none';
btnGetTask.style.display = 'inline-block';
taskDisplay.style.display = 'flex';
taskDisplay.innerHTML = 'Нажмите кнопку ниже, чтобы получить задание.';
rewardDisplay.style.display = 'none';
rewardDisplay.classList.remove('success');
isTaskActive = false;
btnPlayAgain.remove();
};
document.querySelector('.lottery-container div:last-child').appendChild(btnPlayAgain);
}, 2000); // 2000 миллисекунд = 2 секунды задержки
}
</script>
</div>[/html]

