1
слот
Сообщений 1 страница 30 из 48
Поделиться22025-10-31 16:47:26
[html]<div id="slotMachine" style="width:380px; background:#222; color:#fff; border:2px solid #444; padding:15px; text-align:center; font-family:Georgia; margin:15px auto;">
<b>Слот-машина</b>
<div style="margin-top:6px; font-size:12px;">
Следующий ход через: <span id="timer"></span>
</div>
<div style="display:flex; justify-content:center; gap:10px; margin:14px 0;">
<div class="slotCell" id="slot1" style="width:80px;height:80px;background:#000;border:2px solid #555;display:flex;align-items:center;justify-content:center;"></div>
<div class="slotCell" id="slot2" style="width:80px;height:80px;background:#000;border:2px solid #555;display:flex;align-items:center;justify-content:center;"></div>
<div class="slotCell" id="slot3" style="width:80px;height:80px;background:#000;border:2px solid #555;display:flex;align-items:center;justify-content:center;"></div>
</div>
<button id="spinBtn" style="padding:8px 16px;cursor:pointer;background:#8a5721;color:#fff;border:2px solid #000;font-weight:bold;">Крутить 🎲</button>
<div id="winBox" style="display:none;padding:8px;background:#155c15;color:#fff;border:2px solid #0a3c0a;margin-top:10px;font-weight:bold;"></div>
<textarea id="resultText" style="width:100%;height:80px;margin-top:10px;"></textarea>
<button onclick="copyResult()" style="margin-top:5px;background:#444;border:1px solid #aaa;padding:4px 8px;cursor:pointer;color:#fff;">Копировать результат</button>
</div>
<script>
// ==== Настройки администратора ====
const COOLDOWN_HOURS = 0;
const COOLDOWN_MINUTES = 0;
// Награды
const REWARD_2 = "💰 Вы получили 10 монет!";
const REWARD_3 = "🏆 Джекпот! +100 монет и редкий предмет!";
const REWARD_NONE = "❌ Награды нет";
// Картинки
const symbols = [
"https://i.ibb.co/ncV6WsP/cherry.png",
"https://i.ibb.co/1mC9VDd/lemon.png",
"https://i.ibb.co/j5ZCW6n/star.png",
"https://i.ibb.co/CJ7dY4c/skull.png"
];
// ==== Элементы ====
const s1=document.getElementById("slot1"),
s2=document.getElementById("slot2"),
s3=document.getElementById("slot3"),
spinBtn=document.getElementById("spinBtn"),
resultText=document.getElementById("resultText"),
timer=document.getElementById("timer"),
winBox=document.getElementById("winBox"),
soundBtn=document.getElementById("soundBtn");
const CD = (COOLDOWN_HOURS*3600000) + (COOLDOWN_MINUTES*60000);
// ==== Таймер ====
function canSpin(){
let last = localStorage.getItem("slotLastSpin") || 0;
return Date.now() - last >= CD;
}
function updateTimer(){
let last = localStorage.getItem("slotLastSpin") || 0;
let diff = CD - (Date.now() - last);
if(diff <= 0){
timer.textContent = "можно крутить";
spinBtn.disabled = false;
return;
}
let m = Math.floor(diff/60000);
let s = Math.floor((diff%60000)/1000);
timer.textContent = `${m}м ${s}с`;
}
setInterval(updateTimer,1000);
updateTimer();
// ==== Кручение ====
spinBtn.onclick = function(){
if(!canSpin()){
alert("Ждите таймера!");
return;
}
if(soundOn) spinSound.play();
let r1 = symbols[Math.floor(Math.random()*symbols.length)];
let r2 = symbols[Math.floor(Math.random()*symbols.length)];
let r3 = symbols[Math.floor(Math.random()*symbols.length)];
s1.innerHTML=`<img src="${r1}" style="max-width:100%;max-height:100%;">`;
s2.innerHTML=`<img src="${r2}" style="max-width:100%;max-height:100%;">`;
s3.innerHTML=`<img src="${r3}" style="max-width:100%;max-height:100%;">`;
localStorage.setItem("slotLastSpin", Date.now());
spinBtn.disabled = true;
let arr=[r1,r2,r3];
let reward = REWARD_NONE;
winBox.style.display="block";
if(arr[0] === arr[1] && arr[1] === arr[2]){
reward = REWARD_3;
winBox.textContent = "🎉 ТРИ ОДИНАКОВЫХ! " + reward;
if(soundOn) winSound.play();
}
else if(arr.some((v,i)=>arr.indexOf(v)!=i)){
reward = REWARD_2;
winBox.textContent = "✅ ДВА ОДИНАКОВЫХ! " + reward;
if(soundOn) winSound.play();
}
else {
reward = REWARD_NONE;
winBox.textContent = reward;
}
resultText.value =
`🎰 Слот-машина:
${r1}
${r2}
${r3}
Результат: ${reward}`;
};
// ==== Копирование ====
function copyResult(){
resultText.select();
document.execCommand("copy");
alert("Скопировано!");
}
</script>[/html]
Поделиться32025-10-31 17:06:40
[html]<div id="slotMachine" style="width:380px; background:#1c1b1b; color:#fff; border:2px solid #5b482e; padding:15px; text-align:center; font-family:Georgia; margin:15px auto; border-radius:10px; box-shadow:0 0 10px rgba(0,0,0,0.6);">
<b style="font-size:20px;">🎰 Слот-машина</b>
<div style="margin-top:6px; font-size:13px; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;"></span>
</div>
<div style="display:flex; justify-content:center; gap:10px; margin:14px 0;">
<div class="slotCell" id="slot1" style="width:80px;height:80px;background:#000;border:2px solid #7c653f;border-radius:8px;display:flex;align-items:center;justify-content:center;"></div>
<div class="slotCell" id="slot2" style="width:80px;height:80px;background:#000;border:2px solid #7c653f;border-radius:8px;display:flex;align-items:center;justify-content:center;"></div>
<div class="slotCell" id="slot3" style="width:80px;height:80px;background:#000;border:2px solid #7c653f;border-radius:8px;display:flex;align-items:center;justify-content:center;"></div>
<div class="slotCell" id="slot4" style="width:80px;height:80px;background:#000;border:2px solid #7c653f;border-radius:8px;display:flex;align-items:center;justify-content:center;"></div>
</div>
<button id="spinBtn" style="padding:10px 18px;cursor:pointer;background:#b8863b;color:#fff;border:2px solid #000;font-weight:bold;border-radius:6px;box-shadow:0 0 5px rgba(0,0,0,0.6);">
Крутить 🎲
</button>
<div id="winBox" style="display:none;padding:10px;background:#0f3f0f;color:#fff;border:2px solid #0a260a;margin-top:12px;font-weight:bold;border-radius:6px;"></div>
<div id="resultCard" style="display:none; margin-top:12px; padding:10px; background:rgba(255,224,161,0.1); border:1px solid #9f8357; border-radius:8px; text-align:left; font-family:'Courier New', monospace; font-size:13px; white-space:pre-line; color:#ffddae; box-shadow:0 0 5px rgba(0,0,0,0.4);"></div>
<button onclick="copyResult()" style="margin-top:8px;background:#444;border:1px solid #aaa;padding:6px 10px;cursor:pointer;color:#fff;border-radius:6px;">
📋 Копировать результат
</button>
</div>
<script>
// ==== Настройки администратора ====
const COOLDOWN_HOURS = 0;
const COOLDOWN_MINUTES = 0;
// Награды
const REWARD_2 = "💰 +10 монет";
const REWARD_3 = "🏆 Джекпот: +100 монет и редкий предмет";
const REWARD_NONE = "—";
// Картинки
const symbols = [
"https://upforme.ru/uploads/001c/84/76/2/793146.png",
"https://upforme.ru/uploads/001c/84/76/2/635838.png",
"https://upforme.ru/uploads/001c/84/76/2/604915.png",
"https://upforme.ru/uploads/001c/84/76/2/703897.png",
"https://upforme.ru/uploads/001c/84/76/2/748831.png",
"https://upforme.ru/uploads/001c/84/76/2/540652.png"
];
// Elements
const s1=document.getElementById("slot1"),
s2=document.getElementById("slot2"),
s3=document.getElementById("slot3"),
s4=document.getElementById("slot4"), // новый слот
spinBtn=document.getElementById("spinBtn"),
timer=document.getElementById("timer"),
winBox=document.getElementById("winBox"),
resultCard=document.getElementById("resultCard");
const CD = (COOLDOWN_HOURS*3600000) + (COOLDOWN_MINUTES*60000);
// ==== Таймер ====
function canSpin(){
let last = localStorage.getItem("slotLastSpin") || 0;
return Date.now() - last >= CD;
}
function updateTimer(){
let last = localStorage.getItem("slotLastSpin") || 0;
let diff = CD -(Date.now() - last);
if(diff <= 0){
timer.textContent = "готово ✅";
spinBtn.disabled = false;
return;
}
let m = Math.floor(diff/60000);
let s = Math.floor((diff%60000)/1000);
timer.textContent = `${m}м ${s}с`;
}
setInterval(updateTimer,1000);
updateTimer();
// ==== Спин ====
spinBtn.onclick = function(){
if(!canSpin()){
alert("Подождите, пока истечёт время!");
return;
}
let r1 = symbols[Math.floor(Math.random()*symbols.length)];
let r2 = symbols[Math.floor(Math.random()*symbols.length)];
let r3 = symbols[Math.floor(Math.random()*symbols.length)];
let r4 = symbols[Math.floor(Math.random()*symbols.length)]; // новый слот
s1.innerHTML=`<img src="${r1}" style="max-width:100%;max-height:100%;">`;
s2.innerHTML=`<img src="${r2}" style="max-width:100%;max-height:100%;">`;
s3.innerHTML=`<img src="${r3}" style="max-width:100%;max-height:100%;">`;
s4.innerHTML=`<img src="${r4}" style="max-width:100%;max-height:100%;">`;
localStorage.setItem("slotLastSpin", Date.now());
spinBtn.disabled = true;
let arr = [r1,r2,r3,r4];
let reward = REWARD_NONE;
if(arr.every(v => v === arr[0])) reward = REWARD_3; // все 4 одинаковые
else if(arr.some((v,i)=>arr.indexOf(v)!=i)) reward = REWARD_2; // хотя бы 2 одинаковые
if(arr[0]===arr[1] && arr[1]===arr[2]) reward = REWARD_3;
else if(arr.some((v,i)=>arr.indexOf(v)!=i)) reward = REWARD_2;
winBox.style.display = reward!==REWARD_NONE ? "block" : "none";
winBox.textContent = reward!==REWARD_NONE ? "🎉 Победа! " + reward : "";
// красивый текст копирования
resultCard.style.display = "block";
resultCard.textContent =
`🎰 Слот-машина
🔹 Выпало:
${r1}
${r2}
${r3}
${r4}
🎁 Награда: ${reward}
`;
};
// ==== Копирование ====
function copyResult(){
const range = document.createRange();
range.selectNode(resultCard);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
document.execCommand("copy");
window.getSelection().removeAllRanges();
alert("📎 Результат скопирован!");
}
</script>
<script>
const SECRET_KEY = "SL0T_SECRET_2025"; // должен совпадать!
function decodeSlotBase64(encoded){
try {
let raw = decodeURIComponent(escape(atob(encoded)));
let [text, signLine] = raw.split("\n#SIGN=");
// проверяем подпись
let calc = btoa(
new Uint8Array(
[...(text + SECRET_KEY)].map(c => c.charCodeAt(0))
).reduce((a,b)=>a^b)
);
if (calc !== signLine) {
return "❌ Подделка результата!";
}
return text;
} catch(e){
return "⚠ Ошибка чтения кода";
}
}
// Автоподмена в постах
document.addEventListener("DOMContentLoaded", ()=>{
document.querySelectorAll("b64").forEach(tag=>{
let val = tag.textContent.trim();
tag.outerHTML = decodeSlotBase64(val);
});
});
</script>
[/html]
Поделиться42025-10-31 17:20:20
[html]
<div id="slotMachine" style="width:380px; background:#1c1b1b; color:#fff; border:2px solid #5b482e; padding:15px; text-align:center; font-family:Georgia; margin:15px auto; border-radius:10px; box-shadow:0 0 10px rgba(0,0,0,0.6);">
<b style="font-size:20px;">🎰 Слот-машина</b>
<div style="margin-top:6px; font-size:13px; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;"></span>
</div>
<div style="display:flex; justify-content:center; gap:10px; margin:14px 0;">
<div class="slotCell" id="slot1" style="width:80px;height:80px;background:#000;border:2px solid #7c653f;border-radius:8px;display:flex;align-items:center;justify-content:center;"></div>
<div class="slotCell" id="slot2" style="width:80px;height:80px;background:#000;border:2px solid #7c653f;border-radius:8px;display:flex;align-items:center;justify-content:center;"></div>
<div class="slotCell" id="slot3" style="width:80px;height:80px;background:#000;border:2px solid #7c653f;border-radius:8px;display:flex;align-items:center;justify-content:center;"></div>
</div>
<button id="spinBtn" style="padding:10px 18px;cursor:pointer;background:#b8863b;color:#fff;border:2px solid #000;font-weight:bold;border-radius:6px;box-shadow:0 0 5px rgba(0,0,0,0.6);">
Крутить 🎲
</button>
<div id="winBox" style="display:none;padding:10px;background:#0f3f0f;color:#fff;border:2px solid #0a260a;margin-top:12px;font-weight:bold;border-radius:6px;"></div>
<div id="resultCard" style="display:none; margin-top:12px; padding:10px; background:rgba(255,224,161,0.1); border:1px solid #9f8357; border-radius:8px; text-align:left; font-family:'Courier New', monospace; font-size:13px; white-space:pre-line; color:#ffddae; box-shadow:0 0 5px rgba(0,0,0,0.4);"></div>
<button onclick="copyResult()" style="margin-top:8px;background:#444;border:1px solid #aaa;padding:6px 10px;cursor:pointer;color:#fff;border-radius:6px;">
📋 Копировать результат (скрыто)
</button>
</div>
<script>
// ==== Настройки администратора ====
const COOLDOWN_HOURS = 0;
const COOLDOWN_MINUTES = 0;
// Награды
const REWARD_2 = "💰 +10 монет";
const REWARD_3 = "🏆 Джекпот: +100 монет и редкий предмет";
const REWARD_NONE = "—";
// Картинки
const symbols = [
"https://i.ibb.co/ncV6WsP/cherry.png",
"https://i.ibb.co/1mC9VDd/lemon.png",
"https://i.ibb.co/j5ZCW6n/star.png",
"https://i.ibb.co/CJ7dY4c/skull.png"
];
// Элементы
const s1=document.getElementById("slot1"),
s2=document.getElementById("slot2"),
s3=document.getElementById("slot3"),
spinBtn=document.getElementById("spinBtn"),
timer=document.getElementById("timer"),
winBox=document.getElementById("winBox"),
resultCard=document.getElementById("resultCard");
const CD = (COOLDOWN_HOURS*3600000) + (COOLDOWN_MINUTES*60000);
// ==== Секрет и подпись ====
const SECRET_KEY = "SL0T_SECRET_2025";
function sign(text){
return btoa(new Uint8Array([...text+SECRET_KEY].map(c=>c.charCodeAt(0))).reduce((a,b)=>a^b));
}
function makePacket(text){
const signature = sign(text);
return "[b64]" + btoa(unescape(encodeURIComponent(text + "\n#SIGN="+signature))) + "[/b64]";
}
// ==== Таймер ====
function canSpin(){
let last = localStorage.getItem("slotLastSpin") || 0;
return Date.now() - last >= CD;
}
function updateTimer(){
let last = localStorage.getItem("slotLastSpin") || 0;
let diff = CD -(Date.now() - last);
if(diff <= 0){
timer.textContent = "готово ✅";
spinBtn.disabled = false;
return;
}
let m = Math.floor(diff/60000);
let s = Math.floor((diff%60000)/1000);
timer.textContent = `${m}м ${s}с`;
}
setInterval(updateTimer,1000);
updateTimer();
// ==== Спин ====
let encodedResult = "";
spinBtn.onclick = function(){
if(!canSpin()){
alert("Подождите, пока истечёт время!");
return;
}
let r1 = symbols[Math.floor(Math.random()*symbols.length)];
let r2 = symbols[Math.floor(Math.random()*symbols.length)];
let r3 = symbols[Math.floor(Math.random()*symbols.length)];
s1.innerHTML=`<img src="${r1}" style="max-width:100%;max-height:100%;">`;
s2.innerHTML=`<img src="${r2}" style="max-width:100%;max-height:100%;">`;
s3.innerHTML=`<img src="${r3}" style="max-width:100%;max-height:100%;">`;
localStorage.setItem("slotLastSpin", Date.now());
spinBtn.disabled = true;
let arr=[r1,r2,r3];
let reward = REWARD_NONE;
if(arr[0]===arr[1] && arr[1]===arr[2]) reward = REWARD_3;
else if(arr.some((v,i)=>arr.indexOf(v)!=i)) reward = REWARD_2;
winBox.style.display = reward!==REWARD_NONE ? "block" : "none";
winBox.textContent = reward!==REWARD_NONE ? "🎉 Победа! " + reward : "";
// красивый вывод для игрока
resultCard.style.display = "block";
resultCard.textContent =
`🎰 Слот-машина
🔹 Выпало:
${r1}
${r2}
${r3}
🎁 Награда: ${reward}
`;
// скрытый код для форума с подписью и {NOW}
let hidden =
`🎰 Слот-машина
🔹 Выпало:
${r1}
${r2}
${r3}
🎁 Награда: ${reward}
🕒 Время хода (форум): {NOW}`;
encodedResult = makePacket(hidden);
};
// ==== Копирование скрытого результата ====
function copyResult(){
navigator.clipboard.writeText(encodedResult).then(()=>{
alert("✅ Скрытый результат скопирован. Вставь в сообщение!");
});
}
</script>
[/html]
Поделиться52025-10-31 19:34:08
[html]<div id="slotMachine" style="width:90%; max-width:500px; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; margin:2% auto; box-shadow:0 0 10px rgba(0,0,0,0.6);">
<b style="font-size:1.3em;">🎰 Слот-машина</b>
<div style="margin-top:1%; font-size:0.8em; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;"></span>
</div>
<div style="display:flex; justify-content:center; gap:2%; margin:3% 0;">
<div class="slotCell" id="slot1" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot2" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot3" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot4" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
</div>
<button id="spinBtn" style="padding:1% 3%; cursor:pointer; background:#b8863b; color:#fff; border:0.5% solid #000; font-weight:bold; border-radius:6px; box-shadow:0 0 5px rgba(0,0,0,0.6);">
Крутить 🎲
</button>
<div id="winBox" style="display:none; padding:2%; background:#0f3f0f; color:#fff; border-radius:6px; margin-top:2%; font-weight:bold;"></div>
<div id="resultCard" style="display:block; margin-top:2%; padding:2%; border-radius:8px; text-align:left; font-family:'Courier New', monospace; font-size:0.8em; white-space:pre-line; color:#ffddae; box-shadow:0 0 5px rgba(0,0,0,0.4); border:0.5% solid #7c653f;">
</div>
<button onclick="copyResult()" style="margin-top:2%; background:#444; border:0.3% solid #aaa; padding:1% 2%; cursor:pointer; color:#fff; border-radius:6px;">
📋 Копировать результат
</button>
</div>
<script>
// ==== Настройки администратора ====
const COOLDOWN_HOURS = 0;
const COOLDOWN_MINUTES = 0;
// Награды
const REWARD_2 = "💰 +10 монет";
const REWARD_3 = "🎁 +50 монет";
const REWARD_4 = "🏆 Джекпот +100 монет и редкий предмет";
const REWARD_NONE = "—";
// Картинки
const symbols = [
"https://upforme.ru/uploads/001c/84/76/2/793146.png",
"https://upforme.ru/uploads/001c/84/76/2/635838.png",
"https://upforme.ru/uploads/001c/84/76/2/604915.png",
"https://upforme.ru/uploads/001c/84/76/2/703897.png",
"https://upforme.ru/uploads/001c/84/76/2/748831.png",
"https://upforme.ru/uploads/001c/84/76/2/540652.png"
];
// Elements
const s1=document.getElementById("slot1"),
s2=document.getElementById("slot2"),
s3=document.getElementById("slot3"),
s4=document.getElementById("slot4"),
spinBtn=document.getElementById("spinBtn"),
timer=document.getElementById("timer"),
winBox=document.getElementById("winBox"),
resultCard=document.getElementById("resultCard");
const CD = (COOLDOWN_HOURS*3600000) + (COOLDOWN_MINUTES*60000);
// ==== Подпись и Base64 ====
const SECRET_KEY = "SL0T_SECRET_2025";
function sign(text){
return btoa(new Uint8Array([...text+SECRET_KEY].map(c=>c.charCodeAt(0))).reduce((a,b)=>a^b));
}
function makePacket(text){
const signature = sign(text);
return "[b64]" + btoa(unescape(encodeURIComponent(text + "\n#SIGN="+signature))) + "[/b64]";
}
// ==== Таймер ====
function canSpin(){
let last = localStorage.getItem("slotLastSpin") || 0;
return Date.now() - last >= CD;
}
function updateTimer(){
let last = localStorage.getItem("slotLastSpin") || 0;
let diff = CD -(Date.now() - last);
if(diff <= 0){
timer.textContent = "готово ✅";
spinBtn.disabled = false;
return;
}
let m = Math.floor(diff/60000);
let s = Math.floor((diff%60000)/1000);
timer.textContent = `${m}м ${s}с`;
}
setInterval(updateTimer,1000);
updateTimer();
// ==== Спин ====
let encodedResult = "";
spinBtn.onclick = function(){
if(!canSpin()){
alert("Подождите, пока истечёт время!");
return;
}
let r1 = symbols[Math.floor(Math.random()*symbols.length)];
let r2 = symbols[Math.floor(Math.random()*symbols.length)];
let r3 = symbols[Math.floor(Math.random()*symbols.length)];
let r4 = symbols[Math.floor(Math.random()*symbols.length)];
s1.innerHTML=`<img src="${r1}" style="max-width:100%;max-height:100%;">`;
s2.innerHTML=`<img src="${r2}" style="max-width:100%;max-height:100%;">`;
s3.innerHTML=`<img src="${r3}" style="max-width:100%;max-height:100%;">`;
s4.innerHTML=`<img src="${r4}" style="max-width:100%;max-height:100%;">`;
localStorage.setItem("slotLastSpin", Date.now());
spinBtn.disabled = true;
// Проверка совпадений
let arr = [r1,r2,r3,r4];
let counts = {};
arr.forEach(sym => counts[sym] = (counts[sym] || 0) +1);
let maxCount = Math.max(...Object.values(counts));
let reward = REWARD_NONE;
if(maxCount===4) reward = REWARD_4;
else if(maxCount===3) reward = REWARD_3;
else if(maxCount===2) reward = REWARD_2;
// Рамка winBox зависит от награды
winBox.style.display = "block";
if(reward===REWARD_4) winBox.style.border="0.5% solid gold";
else if(reward===REWARD_3) winBox.style.border="0.5% solid #ffd700";
else if(reward===REWARD_2) winBox.style.border="0.5% solid #c0a060";
else winBox.style.border="0.5% solid #7c653f";
winBox.textContent = `🎉 ${reward}`;
// Красивое окошко с результатом
resultCard.style.display="block";
let borderColor = reward===REWARD_4?"gold":reward===REWARD_3?"#ffd700":reward===REWARD_2?"#c0a060":"#7c653f";
resultCard.style.border=`0.5% solid ${borderColor}`;
let hidden = `🎰 Слот-машина
🔹 Выпало:
${r1}
${r2}
${r3}
${r4}
🎁 Награда: ${reward}
🕒 Время хода (форум): {NOW}`;
resultCard.textContent = hidden;
encodedResult = makePacket(hidden);
};
// ==== Копирование ====
function copyResult(){
navigator.clipboard.writeText(encodedResult).then(()=>alert("📎 Результат скопирован"));
}
</script>[/html]
Поделиться62025-10-31 19:54:57
[html]<div id="slotMachine" style="width:90%; max-width:500px; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; margin:2% auto; box-shadow:0 0 10px rgba(0,0,0,0.6);">
<b style="font-size:1.3em;">🎰 Слот-машина</b>
<div style="margin-top:1%; font-size:0.8em; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;"></span>
</div>
<div style="display:flex; justify-content:center; gap:2%; margin:3% 0;">
<div class="slotCell" id="slot1" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot2" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot3" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot4" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
</div>
<button id="spinBtn" style="padding:1% 3%; cursor:pointer; background:#b8863b; color:#fff; border:0.5% solid #000; font-weight:bold; border-radius:6px; box-shadow:0 0 5px rgba(0,0,0,0.6);">
Крутить 🎲
</button>
<!-- Отображение награды сразу -->
<div id="winDisplay" style="margin-top:2%; font-size:1.1em; font-weight:bold; color:#ffdd00;"></div>
<!-- Код результата в виде текста для копирования -->
<textarea id="resultCode" readonly style="width:100%; height:200px; margin-top:2%; background:#111; color:#ffddae; border-radius:6px; padding:1%; font-family:'Courier New', monospace; font-size:0.8em;"></textarea>
<button onclick="copyResult()" style="margin-top:2%; background:#444; border:0.3% solid #aaa; padding:1% 2%; cursor:pointer; color:#fff; border-radius:6px;">
📋 Копировать результат
</button>
</div>
<script>
const COOLDOWN_HOURS = 0;
const COOLDOWN_MINUTES = 0;
const REWARD_2 = "💰 +10 монет";
const REWARD_3 = "🎁 +50 монет";
const REWARD_4 = "🏆 Джекпот +100 монет и редкий предмет";
const REWARD_NONE = "Попробуй еще";
const symbols = [
"https://upforme.ru/uploads/001c/84/76/2/793146.png",
"https://upforme.ru/uploads/001c/84/76/2/635838.png",
"https://upforme.ru/uploads/001c/84/76/2/604915.png",
"https://upforme.ru/uploads/001c/84/76/2/703897.png",
"https://upforme.ru/uploads/001c/84/76/2/748831.png",
"https://upforme.ru/uploads/001c/84/76/2/540652.png"
];
const s1=document.getElementById("slot1"),
s2=document.getElementById("slot2"),
s3=document.getElementById("slot3"),
s4=document.getElementById("slot4"),
spinBtn=document.getElementById("spinBtn"),
timer=document.getElementById("timer"),
resultCode=document.getElementById("resultCode"),
winDisplay=document.getElementById("winDisplay");
const CD = (COOLDOWN_HOURS*3600000) + (COOLDOWN_MINUTES*60000);
function canSpin(){
let last = localStorage.getItem("slotLastSpin") || 0;
return Date.now() - last >= CD;
}
function updateTimer(){
let last = localStorage.getItem("slotLastSpin") || 0;
let diff = CD - (Date.now() - last);
if(diff <=0){
timer.textContent = "готово ✅";
spinBtn.disabled = false;
return;
}
let m=Math.floor(diff/60000);
let s=Math.floor((diff%60000)/1000);
timer.textContent=`${m}м ${s}с`;
}
setInterval(updateTimer,1000);
updateTimer();
spinBtn.onclick=function(){
if(!canSpin()){ alert("Подождите!"); return; }
let r1 = symbols[Math.floor(Math.random()*symbols.length)];
let r2 = symbols[Math.floor(Math.random()*symbols.length)];
let r3 = symbols[Math.floor(Math.random()*symbols.length)];
let r4 = symbols[Math.floor(Math.random()*symbols.length)];
[s1,s2,s3,s4].forEach((el,i)=>el.innerHTML=`<img src="${[r1,r2,r3,r4][i]}" style="max-width:80%;max-height:80%;margin:auto;">`);
localStorage.setItem("slotLastSpin", Date.now());
spinBtn.disabled = true;
let arr=[r1,r2,r3,r4];
let counts={};
arr.forEach(s=>counts[s]=(counts[s]||0)+1);
let maxCount=Math.max(...Object.values(counts));
let reward=REWARD_NONE;
if(maxCount===4) reward=REWARD_4;
else if(maxCount===3) reward=REWARD_3;
else if(maxCount===2) reward=REWARD_2;
// Показываем награду сразу под кнопкой
if(reward===REWARD_NONE){
winDisplay.textContent="Попробуй еще";
winDisplay.style.color="#ff5555";
} else {
winDisplay.innerHTML="🎉 Победа!<br>"+reward;
winDisplay.style.color="#ffdd00";
}
// Создаем HTML-код для копирования
const htmlResult = `
<div style="width:100%; max-width:500px; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; box-shadow:0 0 10px rgba(0,0,0,0.6); border:0.3% solid ${maxCount===4?'gold':maxCount===3?'#ffd700':maxCount===2?'#c0a060':'#7c653f'};">
<b style="font-size:1.2em;">🎰 Слот-машина</b>
<div style="display:flex; justify-content:center; gap:2%; margin:2% 0;">
<img src="${r1}" style="width:20%; border-radius:5px;">
<img src="${r2}" style="width:20%; border-radius:5px;">
<img src="${r3}" style="width:20%; border-radius:5px;">
<img src="${r4}" style="width:20%; border-radius:5px;">
</div>
<div>🎁 Награда: ${reward}</div>
<div style="font-size:0.8em; color:#d9c7a1;">🕒 Время хода (форум): ${new Date().toLocaleString()}</div>
</div>`;
resultCode.value = htmlResult;
};
// Копирование
function copyResult(){
resultCode.select();
document.execCommand("copy");
alert("📎 Код результата скопирован!");
}
</script>[/html]
Поделиться72025-10-31 19:55:51
[html]
<div style="width:100%; max-width:500px; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; box-shadow:0 0 10px rgba(0,0,0,0.6); border:0.3% solid #c0a060;">
<b style="font-size:1.2em;">🎰 Слот-машина</b>
<div style="display:flex; justify-content:center; gap:2%; margin:2% 0;">
<img src="https://upforme.ru/uploads/001c/84/76/2/635838.png" style="width:20%; border-radius:5px;">
<img src="https://upforme.ru/uploads/001c/84/76/2/703897.png" style="width:20%; border-radius:5px;">
<img src="https://upforme.ru/uploads/001c/84/76/2/635838.png" style="width:20%; border-radius:5px;">
<img src="https://upforme.ru/uploads/001c/84/76/2/540652.png" style="width:20%; border-radius:5px;">
</div>
<div>🎁 Награда: 💰 +10 монет</div>
<div style="font-size:0.8em; color:#d9c7a1;">🕒 Время хода (форум): 31.10.2025, 19:55:11</div>
</div>[/html]
Поделиться82025-10-31 20:35:08
[html]<div id="slotMachine" style="width:90%; max-width:500px; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; margin:2% auto; box-shadow:0 0 10px rgba(0,0,0,0.6);">
<b style="font-size:1.3em;">🎰 Слот-машина</b>
<div style="margin-top:1%; font-size:0.8em; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;"></span>
</div>
<div style="display:flex; justify-content:center; gap:2%; margin:3% 0;">
<div class="slotCell" id="slot1" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot2" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot3" style="flex:1; aspect-ratio:1; background:#000; border:0.5% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
</div>
<button id="spinBtn" style="padding:1% 3%; cursor:pointer; background:#b8863b; color:#fff; border:0.5% solid #000; font-weight:bold; border-radius:6px; box-shadow:0 0 5px rgba(0,0,0,0.6);">
Крутить 🎲
</button>
<!-- Отображение награды сразу -->
<div id="winDisplay" style="margin-top:2%; font-size:1.1em; font-weight:bold; color:#ffdd00;"></div>
<!-- Код результата в виде текста для копирования -->
<textarea id="resultCode" readonly style="width:100%; height:200px; margin-top:2%; background:#111; color:#ffddae; border-radius:6px; padding:1%; font-family:'Courier New', monospace; font-size:0.8em; "></textarea>
<button onclick="copyResult()" style="margin-top:2%; background:#444; border:0.3% solid #aaa; padding:1% 2%; cursor:pointer; color:#fff; border-radius:6px;">
📋 Копировать результат
</button>
</div>
<style>
/* Плавное появление карточки */
.resultFade {
opacity: 0;
transform: scale(0.9);
transition: all .35s ease;
}
/* Активное состояние — красиво проявляется */
.resultFade.show {
opacity: 1;
transform: scale(1);
}
</style>
<script>
const COOLDOWN_HOURS = 0;
const COOLDOWN_MINUTES = 0;
const REWARD_2 = "💰 +10 монет";
const REWARD_3 = "🎁 +50 монет";
const REWARD_4 = "🏆 Джекпот +100 монет и редкий предмет";
const REWARD_NONE = "Попробуй еще";
const symbols = [
"https://upforme.ru/uploads/001c/84/76/2/793146.png",
"https://upforme.ru/uploads/001c/84/76/2/635838.png",
"https://upforme.ru/uploads/001c/84/76/2/604915.png",
"https://upforme.ru/uploads/001c/84/76/2/703897.png",
"https://upforme.ru/uploads/001c/84/76/2/748831.png",
"https://upforme.ru/uploads/001c/84/76/2/540652.png"
];
const s1=document.getElementById("slot1"),
s2=document.getElementById("slot2"),
s3=document.getElementById("slot3"),
spinBtn=document.getElementById("spinBtn"),
timer=document.getElementById("timer"),
resultCode=document.getElementById("resultCode");
const CD = (COOLDOWN_HOURS*3600000) + (COOLDOWN_MINUTES*60000);
function canSpin(){
let last = localStorage.getItem("slotLastSpin") || 0;
return Date.now() - last >= CD;
}
function updateTimer(){
let last = localStorage.getItem("slotLastSpin") || 0;
let diff = CD - (Date.now() - last);
if(diff <=0){
timer.textContent = "готово ✅";
spinBtn.disabled = false;
return;
}
let m=Math.floor(diff/60000);
let s=Math.floor((diff%60000)/1000);
timer.textContent=`${m}м ${s}с`;
}
setInterval(updateTimer,1000);
updateTimer();
spinBtn.onclick=function(){
if(!canSpin()){ alert("Подождите!"); return; }
let r1 = symbols[Math.floor(Math.random()*symbols.length)];
let r2 = symbols[Math.floor(Math.random()*symbols.length)];
let r3 = symbols[Math.floor(Math.random()*symbols.length)];
[s1,s2,s3].forEach((el,i)=>el.innerHTML=`<img src="${[r1,r2,r3][i]}" style="max-width:80%;max-height:80%;margin:auto;">`);
localStorage.setItem("slotLastSpin", Date.now());
spinBtn.disabled = true;
let arr=[r1,r2,r3];
let counts={};
arr.forEach(s=>counts[s]=(counts[s]||0)+1);
let maxCount=Math.max(...Object.values(counts));
let reward=REWARD_NONE;
if(maxCount===4) reward=REWARD_4;
else if(maxCount===3) reward=REWARD_3;
else if(maxCount===2) reward=REWARD_2;
// Показываем награду сразу под кнопкой
if(reward===REWARD_NONE){
winDisplay.textContent="Попробуй еще";
winDisplay.style.color="#ff5555";
} else {
winDisplay.innerHTML="🎉 Победа!<br>"+reward;
winDisplay.style.color="#ffdd00";
}
// Создаем HTML-код для копирования
const htmlResult = `
<div id="resultCard" class="resultFade" style="display:none; margin-top:12px; padding:10px; background:rgba(255,224,161,0.1); border:1px solid #9f8357; border-radius:8px; text-align:left; font-family:'Courier New', monospace; font-size:13px; white-space:pre-line; color:#ffddae; box-shadow:0 0 5px rgba(0,0,0,0.4);"></div>
<div style="width:100%; max-width:500px; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; box-shadow:0 0 10px rgba(0,0,0,0.6); border:0.3% solid ${maxCount===4?'gold':maxCount===3?'#ffd700':maxCount===2?'#c0a060':'#7c653f'};">
<b style="font-size:1.2em;">🎰 Слот-машина</b>
<div style="display:flex; justify-content:center; gap:2%; margin:2% 0;">
<img src="${r1}" style="width:20%; border-radius:5px;">
<img src="${r2}" style="width:20%; border-radius:5px;">
<img src="${r3}" style="width:20%; border-radius:5px;">
</div>
<div>🎁 Награда: ${reward}</div>
`;
resultCode.value = htmlResult;
};
// Копирование
function copyResult(){
resultCode.select();
document.execCommand("copy");
alert("📎 Код результата скопирован!");
}
</script>[/html]
Поделиться92025-10-31 21:12:58
[html]<div id="slotMachine" style="width:90%; max-width:700px; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; margin:2% auto; box-shadow:0 0 10px rgba(0,0,0,0.6);">
<b style="font-size:1.3em;">🎰 Слот-машина</b>
<div style="margin-top:1%; font-size:0.9em; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;"></span>
</div>
<div style="display:flex; justify-content:center; gap:2%; margin:3% 0;">
<div class="slotCell" id="slot1" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot2" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot3" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
</div>
<button id="spinBtn" style="padding:1% 3%; cursor:pointer; background:#b8863b; color:#fff; border:0.3% solid #000; font-weight:bold; border-radius:6px; box-shadow:0 0 5px rgba(0,0,0,0.6);">
Крутить 🎲
</button>
<!-- Отображение награды сразу -->
<div id="winDisplay" style="margin-top:12px; font-size:1.1em; font-weight:bold; color:#ffdd00; min-height:2.2em;"></div>
<!-- Код результата в виде текста (HTML) для копирования -->
<textarea id="resultCode" readonly style="width:100%; height:220px; margin-top:12px; background:#0f0f10; color:#ffddae; border-radius:6px; padding:1%; font-family:'Courier New', monospace; font-size:0.85em; white-space:pre-wrap; overflow:auto;"></textarea>
<button onclick="copyResult()" style="margin-top:12px; background:#444; border:0.3% solid #aaa; padding:1% 2%; cursor:pointer; color:#fff; border-radius:6px;">
📋 Копировать результат
</button>
</div>
<style>
/* Плавное появление карточки (если нужно использовать при вставке на страницу) */
.resultFade { opacity:0; transform:scale(0.98); transition: all .35s ease; }
.resultFade.show { opacity:1; transform:scale(1); }
/* Победный эффект (можно добавить на winDisplay) */
.winGlow { animation: glowPulse 1s infinite alternate; }
@keyframes glowPulse {
from { text-shadow: 0 0 6px #ffd700; color:#fff2b8; }
to { text-shadow: 0 0 18px #ffd700, 0 0 36px #ffb700; color:#fff9db; }
}
</style>
<script>
/* ========== Настройки администратора ========== */
const COOLDOWN_HOURS = 0;
const COOLDOWN_MINUTES = 1; // пример: 0 минут — можно сразу крутить
/* Награды (числа) и тексты */
const REWARD_NONE_TEXT = "Попробуй еще";
const symbols = [
"https://upforme.ru/uploads/001c/84/76/2/793146.png", // индекс 0 - предмет №1 (особый для тройки=1000)
"https://upforme.ru/uploads/001c/84/76/2/635838.png", // индекс 1 - предмет №2 (особый для двойки=100)
"https://upforme.ru/uploads/001c/84/76/2/604915.png", // индекс 2 - предмет №3 (в комбо 3+4)
"https://upforme.ru/uploads/001c/84/76/2/703897.png", // индекс 3 - предмет №4 (в комбо 3+4)
// (можешь добавить далее предметы №5, №6, №7 и т.д.)
];
/* Элементы */
const s1 = document.getElementById("slot1"),
s2 = document.getElementById("slot2"),
s3 = document.getElementById("slot3"),
spinBtn = document.getElementById("spinBtn"),
timer = document.getElementById("timer"),
winDisplay = document.getElementById("winDisplay"),
resultCode = document.getElementById("resultCode");
const CD = (COOLDOWN_HOURS*3600000) + (COOLDOWN_MINUTES*60000);
/* Таймер кулдауна */
function canSpin(){
const last = localStorage.getItem("slotLastSpin") || 0;
return Date.now() - last >= CD;
}
function updateTimer(){
const last = localStorage.getItem("slotLastSpin") || 0;
const diff = CD - (Date.now() - last);
if(diff <= 0){
timer.textContent = "готово ✅";
spinBtn.disabled = false;
return;
}
const m = Math.floor(diff/60000);
const s = Math.floor((diff%60000)/1000);
timer.textContent = `${m}м ${s}с`;
}
setInterval(updateTimer,1000);
updateTimer();
/* Помощники: экранируем HTML для textarea (чтобы оно выглядело корректно при копировании) */
function escapeHtml(str){
return str.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
}
/* Основная логика спина и расчёт награды согласно твоим правилам */
spinBtn.onclick = function(){
if(!canSpin()){ alert("Подождите!"); return; }
// генерация выпадения (рандом)
const r1 = symbols[Math.floor(Math.random()*symbols.length)];
const r2 = symbols[Math.floor(Math.random()*symbols.length)];
const r3 = symbols[Math.floor(Math.random()*symbols.length)];
// отрисовать в слотах
[s1,s2,s3].forEach((el,i) => el.innerHTML = `<img src="${[r1,r2,r3][i]}" style="max-width:80%;max-height:80%;margin:auto;">`);
localStorage.setItem("slotLastSpin", Date.now());
spinBtn.disabled = true;
updateTimer();
// подсчёт
const arr = [r1,r2,r3];
const counts = {};
arr.forEach(s => counts[s] = (counts[s] || 0) + 1);
// default
let rewardValue = 0;
let rewardText = REWARD_NONE_TEXT;
let borderColor = "#7c653f";
// 1) три одинаковых
if (Object.values(counts).includes(3)) {
// проверяем, три предмета №1 (symbols[0])?
if (r1 === r2 && r2 === r3 && r1 === symbols[0]) {
rewardValue = 1000;
rewardText = "🏆 Тройка №1 — +1000";
borderColor = "gold";
} else {
rewardValue = 100;
rewardText = "🎉 Тройка — +100";
borderColor = "#ffd700";
}
}
// 2) пара (две одинаковых)
else if (Object.values(counts).includes(2)) {
// кто именно повторился?
const doubledKey = Object.keys(counts).find(k => counts[k] === 2);
if (doubledKey === symbols[1]) {
// двойка предмета №2
rewardValue = 100;
rewardText = "💎 Пара №2 — +100";
borderColor = "#c0a060";
} else {
rewardValue = 50;
rewardText = "✨ Пара — +50";
borderColor = "#c0a060";
}
}
// 3) спец-комбо: предмет №3 и №4 одновременно (в 3 слотах оба присутствуют)
else if (arr.includes(symbols[2]) && arr.includes(symbols[3])) {
rewardValue = 500;
rewardText = "🔥 Комбо №3 + №4 — +500";
borderColor = "#ff6a9a";
}
// показываем поле под кнопкой
if (rewardValue > 0) {
winDisplay.innerHTML = `<span class="winGlow">🎉 Победа!</span><br>${rewardText}`;
winDisplay.style.color = "#ffdd00";
} else {
winDisplay.textContent = "Попробуй еще";
winDisplay.style.color = "#ff5555";
winDisplay.classList.remove("winGlow");
}
// создаём HTML-код карточки результата (игрок будет копировать именно этот блок)
// ВАЖНО: здесь мы используем {NOW} — форум подставит своё время при публикации
const cardHtml =
`<div style="width:100%; max-width:640px; margin:0 auto; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; box-shadow:0 0 10px rgba(0,0,0,0.6); border:4px solid ${borderColor};">
<b style="font-size:1.1em; display:block; margin-bottom:6px;">🎰 Слот-машина</b>
<div style="display:flex; justify-content:center; gap:3%; margin:8px 0;">
<img src="${r1}" style="width:28%; border-radius:6px;">
<img src="${r2}" style="width:28%; border-radius:6px;">
<img src="${r3}" style="width:28%; border-radius:6px;">
</div>
<div style="font-weight:bold; margin-top:6px; color:#ffddae;">🎁 Награда: ${ rewardValue > 0 ? rewardText + " (" + rewardValue + ")" : "Нет — попробуй еще" }</div>
<div style="font-size:0.85em; color:#c8b892; margin-top:6px;">🕒 Время хода (форум): {NOW}</div>
</div>`;
// помещаем в textarea (пользователь увидит именно HTML-код карточки и сможет его скопировать)
resultCode.value = cardHtml;
};
/* Копирование кода (код в textarea копируется) */
function copyResult(){
if(!resultCode.value){
alert("Нет кода для копирования — сначала нажми «Крутить»");
return;
}
resultCode.select();
try {
document.execCommand("copy");
alert("📎 Код результата скопирован! Вставь в сообщение — форум подставит время {NOW}.");
} catch(e){
// fallback: navigator.clipboard
navigator.clipboard.writeText(resultCode.value).then(()=>{
alert("📎 Код результата скопирован!");
},()=>{ alert("Ошибка копирования."); });
}
}
</script>[/html]
Поделиться102025-10-31 21:25:06
[html]<div id="slotMachine" style="width:90%; max-width:600px; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; margin:2% auto; box-shadow:0 0 10px rgba(0,0,0,0.6);">
<b style="font-size:1.3em;">🎰 Слот-машина</b>
<div style="margin-top:1%; font-size:0.9em; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;"></span>
</div>
<div style="display:flex; justify-content:center; gap:2%; margin:3% 0;">
<div class="slotCell" id="slot1" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot2" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot3" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
</div>
<button id="spinBtn" style="padding:1% 3%; cursor:pointer; background:#b8863b; color:#fff; border:0.3% solid #000; font-weight:bold; border-radius:6px; box-shadow:0 0 5px rgba(0,0,0,0.6);">
Крутить 🎲
</button>
<!-- Отображение награды сразу -->
<div id="winDisplay" style="margin-top:12px; font-size:1.1em; font-weight:bold; color:#ffdd00; min-height:2.2em;"></div>
<!-- Код результата в виде текста (HTML) для копирования -->
<textarea id="resultCode" readonly style="width:97%; height:80px; margin-top:12px; background:#0f0f10; color:#ffddae; border-radius:6px; padding:1%; font-family:'Courier New', monospace; font-size:0.85em; white-space:pre-wrap; overflow:auto;"></textarea>
<button onclick="copyResult()" style="margin-top:12px; background:#444; border:0.3% solid #aaa; padding:1% 2%; cursor:pointer; color:#fff; border-radius:6px;">
📋 Копировать результат
</button>
</div>
<style>
/* Плавное появление карточки (если нужно использовать при вставке на страницу) */
.resultFade { opacity:0; transform:scale(0.98); transition: all .35s ease; }
.resultFade.show { opacity:1; transform:scale(1); }
/* Победный эффект (можно добавить на winDisplay) */
.winGlow { animation: glowPulse 1s infinite alternate; }
@keyframes glowPulse {
from { text-shadow: 0 0 6px #ffd700; color:#fff2b8; }
to { text-shadow: 0 0 18px #ffd700, 0 0 36px #ffb700; color:#fff9db; }
}
</style>
<script>
/* ========== Настройки администратора ========== */
const COOLDOWN_HOURS = 0;
const COOLDOWN_MINUTES = 1; // пример: 0 минут — можно сразу крутить
/* Награды (числа) и тексты */
const REWARD_NONE_TEXT = "Попробуй еще";
const symbols = [
"https://upforme.ru/uploads/001c/84/76/2/793146.png", // индекс 0 - предмет №1 (особый для тройки=1000)
"https://upforme.ru/uploads/001c/84/76/2/635838.png", // индекс 1 - предмет №2 (особый для двойки=100)
"https://upforme.ru/uploads/001c/84/76/2/604915.png", // индекс 2 - предмет №3 (в комбо 3+4)
"https://upforme.ru/uploads/001c/84/76/2/703897.png", // индекс 3 - предмет №4 (в комбо 3+4)
// (можешь добавить далее предметы №5, №6, №7 и т.д.)
];
/* Элементы */
const s1 = document.getElementById("slot1"),
s2 = document.getElementById("slot2"),
s3 = document.getElementById("slot3"),
spinBtn = document.getElementById("spinBtn"),
timer = document.getElementById("timer"),
winDisplay = document.getElementById("winDisplay"),
resultCode = document.getElementById("resultCode");
const CD = (COOLDOWN_HOURS*3600000) + (COOLDOWN_MINUTES*60000);
/* Таймер кулдауна */
function canSpin(){
const last = localStorage.getItem("slotLastSpin") || 0;
return Date.now() - last >= CD;
}
function updateTimer(){
const last = localStorage.getItem("slotLastSpin") || 0;
const diff = CD - (Date.now() - last);
if(diff <= 0){
timer.textContent = "готово ✅";
spinBtn.disabled = false;
return;
}
const m = Math.floor(diff/60000);
const s = Math.floor((diff%60000)/1000);
timer.textContent = `${m}м ${s}с`;
}
setInterval(updateTimer,1000);
updateTimer();
/* Помощники: экранируем HTML для textarea (чтобы оно выглядело корректно при копировании) */
function escapeHtml(str){
return str.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
}
/* Основная логика спина и расчёт награды согласно твоим правилам */
spinBtn.onclick = function(){
if(!canSpin()){ alert("Подождите!"); return; }
// генерация выпадения (рандом)
const r1 = symbols[Math.floor(Math.random()*symbols.length)];
const r2 = symbols[Math.floor(Math.random()*symbols.length)];
const r3 = symbols[Math.floor(Math.random()*symbols.length)];
// отрисовать в слотах
[s1,s2,s3].forEach((el,i) => el.innerHTML = `<img src="${[r1,r2,r3][i]}" style="max-width:80%;max-height:80%;margin:auto;">`);
localStorage.setItem("slotLastSpin", Date.now());
spinBtn.disabled = true;
updateTimer();
// подсчёт
const arr = [r1,r2,r3];
const counts = {};
arr.forEach(s => counts[s] = (counts[s] || 0) + 1);
// default
let rewardValue = 0;
let rewardText = REWARD_NONE_TEXT;
let borderColor = "#7c653f";
// 1) три одинаковых
if (Object.values(counts).includes(3)) {
// проверяем, три предмета №1 (symbols[0])?
if (r1 === r2 && r2 === r3 && r1 === symbols[0]) {
rewardValue = 1000;
rewardText = "🏆 Тройка №1 — +1000";
borderColor = "gold";
} else {
rewardValue = 100;
rewardText = "🎉 Тройка — +100";
borderColor = "#ffd700";
}
}
// 2) пара (две одинаковых)
else if (Object.values(counts).includes(2)) {
// кто именно повторился?
const doubledKey = Object.keys(counts).find(k => counts[k] === 2);
if (doubledKey === symbols[1]) {
// двойка предмета №2
rewardValue = 100;
rewardText = "💎 Пара №2 — +100";
borderColor = "#c0a060";
} else {
rewardValue = 50;
rewardText = "✨ Пара — +50";
borderColor = "#c0a060";
}
}
// 3) спец-комбо: предмет №3 и №4 одновременно (в 3 слотах оба присутствуют)
else if (arr.includes(symbols[2]) && arr.includes(symbols[3])) {
rewardValue = 500;
rewardText = "🔥 Комбо №3 + №4 — +500";
borderColor = "#ff6a9a";
}
// показываем поле под кнопкой
if (rewardValue > 0) {
winDisplay.innerHTML = `<span class="winGlow">🎉 Победа!</span><br>${rewardText}`;
winDisplay.style.color = "#ffdd00";
} else {
winDisplay.textContent = "Попробуй еще";
winDisplay.style.color = "#ff5555";
winDisplay.classList.remove("winGlow");
}
// создаём HTML-код карточки результата (игрок будет копировать именно этот блок)
// ВАЖНО: здесь мы используем {NOW} — форум подставит своё время при публикации
const cardHtml =
`<div style="width:100%; max-width:640px; margin:0 auto; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; box-shadow:0 0 10px rgba(0,0,0,0.6); border:4px solid ${borderColor};">
<b style="font-size:1.1em; display:block; margin-bottom:6px;">🎰 Слот-машина</b>
<div style="display:flex; justify-content:center; gap:3%; margin:8px 0;">
<img src="${r1}" style="width:28%; border-radius:6px;">
<img src="${r2}" style="width:28%; border-radius:6px;">
<img src="${r3}" style="width:28%; border-radius:6px;">
</div>
<div style="font-weight:bold; margin-top:6px; color:#ffddae;">🎁 Награда: ${ rewardValue > 0 ? rewardText + " (" + rewardValue + ")" : "Нет — попробуй еще" }</div>
<div style="font-size:0.85em; color:#c8b892; margin-top:6px;">🕒 Время хода (форум): {NOW}</div>
</div>`;
// помещаем в textarea (пользователь увидит именно HTML-код карточки и сможет его скопировать)
resultCode.value = cardHtml;
};
/* Копирование кода (код в textarea копируется) */
function copyResult(){
if(!resultCode.value){
alert("Нет кода для копирования — сначала нажми «Крутить»");
return;
}
resultCode.select();
try {
document.execCommand("copy");
alert("📎 Код результата скопирован! Вставь в сообщение — форум подставит время {NOW}.");
} catch(e){
// fallback: navigator.clipboard
navigator.clipboard.writeText(resultCode.value).then(()=>{
alert("📎 Код результата скопирован!");
},()=>{ alert("Ошибка копирования."); });
}
}
</script>[/html]
Поделиться112025-10-31 21:46:07
[html]<div id="slotMachine" style="width:90%; max-width:600px; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; margin:2% auto; box-shadow:0 0 10px rgba(0,0,0,0.6); position:relative;">
<!-- Ник и баланс -->
<div style="position:absolute; top:8px; left:8px; font-size:0.9em; color:#ffdd8a; text-align:left;">
👤 <span id="userName"></span><br>
💰 <span id="userCoins"></span>
</div>
<b style="font-size:1.3em;">🎰 Слот-машина</b>
<div style="margin-top:1%; font-size:0.9em; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;"></span>
</div>
<div style="display:flex; justify-content:center; gap:2%; margin:3% 0;">
<div class="slotCell" id="slot1" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot2" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot3" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
</div>
<button id="spinBtn" style="padding:1% 3%; cursor:pointer; background:#b8863b; color:#fff; border:0.3% solid #000; font-weight:bold; border-radius:6px; box-shadow:0 0 5px rgba(0,0,0,0.6);">
Крутить 🎲
</button>
<div id="winDisplay" style="margin-top:12px; font-size:1.1em; font-weight:bold; color:#ffdd00; min-height:2.2em;"></div>
<textarea id="resultCode" readonly style="width:97%; height:80px; margin-top:12px; background:#0f0f10; color:#ffddae; border-radius:6px; padding:1%; font-family:'Courier New', monospace; font-size:0.85em; white-space:pre-wrap; overflow:auto;"></textarea>
<button onclick="copyResult()" style="margin-top:12px; background:#444; border:0.3% solid #aaa; padding:1% 2%; cursor:pointer; color:#fff; border-radius:6px;">
📋 Копировать результат
</button>
</div>
<style>
.winGlow { animation: glowPulse 1s infinite alternate; }
@keyframes glowPulse {
from { text-shadow: 0 0 6px #ffd700; color:#fff2b8; }
to { text-shadow: 0 0 18px #ffd700, 0 0 36px #ffb700; color:#fff9db; }
}
</style>
<script>
/* Баланс и ник */
let userName = localStorage.getItem("slotUserName");
let userCoins = parseInt(localStorage.getItem("slotCoins") || "0");
if (!userName) {
userName = prompt("Введите ваш ник:");
if (!userName) userName = "Игрок";
localStorage.setItem("slotUserName", userName);
}
document.getElementById("userName").textContent = userName;
document.getElementById("userCoins").textContent = userCoins;
/* Кулдаун */
const COOLDOWN_MINUTES = 0;
const CD = COOLDOWN_MINUTES * 60000;
const timer = document.getElementById("timer");
const spinBtn = document.getElementById("spinBtn");
function canSpin(){
return Date.now() - (localStorage.getItem("slotLastSpin") || 0) >= CD;
}
function updateTimer(){
let last = localStorage.getItem("slotLastSpin") || 0;
let diff = CD - (Date.now() - last);
if (diff <= 0) { timer.textContent="готово ✅"; spinBtn.disabled=false; return; }
timer.textContent = Math.floor(diff/60000)+"м "+Math.floor((diff%60000)/1000)+"с";
}
setInterval(updateTimer,1000); updateTimer();
/* Символы */
const symbols = [
"https://upforme.ru/uploads/001c/84/76/2/793146.png",
"https://upforme.ru/uploads/001c/84/76/2/635838.png",
"https://upforme.ru/uploads/001c/84/76/2/604915.png",
"https://upforme.ru/uploads/001c/84/76/2/703897.png"
];
const ids = ["slot1","slot2","slot3"];
/* Спин */
spinBtn.onclick = function(){
if(!canSpin()){ alert("Подождите!"); return; }
let r = ids.map(()=> symbols[Math.floor(Math.random()*symbols.length)]);
ids.forEach((id,i)=>document.getElementById(id).innerHTML=`<img src="${r[i]}" style="max-width:80%;max-height:80%;">`);
localStorage.setItem("slotLastSpin", Date.now());
spinBtn.disabled = true;
let counts = {}; r.forEach(s=>counts[s]=(counts[s]||0)+1);
let reward = 0, text="", color="#7c653f";
if(Object.values(counts).includes(3)){
reward = 100; text="🎉 Тройка — +100"; color="#ffd700";
} else if(Object.values(counts).includes(2)){
reward = 50; text="✨ Пара — +50"; color="#c0a060";
} else if(r.includes(symbols[2]) && r.includes(symbols[3])){
reward = 500; text="🔥 Комбо №3+№4 — +500"; color="#ff6a9a";
} else {
text="Попробуй еще"; color="#7c653f";
}
/* ✅ добавляем и сохраняем монеты */
userCoins += reward;
localStorage.setItem("slotCoins", userCoins);
document.getElementById("userCoins").textContent = userCoins;
winDisplay.innerHTML = reward>0? `<span class="winGlow">Победа!</span><br>${text}` : text;
resultCode.value = `<div style="border:4px solid ${color}; padding:10px;">🎰 Результат | 🧑 ${userName} | 💰 ${reward}</div>`;
};
/* Копировать */
function copyResult(){
resultCode.select();
document.execCommand("copy");
alert("Скопировано!");
}
</script>[/html]
Поделиться122025-11-02 00:44:44
[html]<div id="slotMachine" style="width:90%; max-width:600px; background:#1c1b1b; color:#fff; border-radius:10px; padding:2%; text-align:center; font-family:Georgia; margin:2% auto; box-shadow:0 0 10px rgba(0,0,0,0.6); position:relative;">
<!-- Ник и баланс (теперь только сессионный) -->
<div style="position:absolute; top:8px; left:8px; font-size:0.9em; color:#ffdd8a; text-align:left;">
👤 <span id="userName">Загрузка...</span><br>
💰 <span id="userCoins">0</span> (выигрыш за сессию)
</div>
<b style="font-size:1.3em;">🎰 Слот-машина</b>
<div style="margin-top:1%; font-size:0.9em; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;"></span>
</div>
<div style="display:flex; justify-content:center; gap:2%; margin:3% 0;">
<div class="slotCell" id="slot1" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot2" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
<div class="slotCell" id="slot3" style="flex:1; aspect-ratio:1; background:#000; border:0.3% solid #7c653f; border-radius:8px; display:flex; align-items:center; justify-content:center;"></div>
</div>
<button id="spinBtn" style="padding:1% 3%; cursor:pointer; background:#b8863b; color:#fff; border:0.3% solid #000; font-weight:bold; border-radius:6px; box-shadow:0 0 5px rgba(0,0,0,0.6);">
Крутить и Отправить 🎲
</button>
<div id="winDisplay" style="margin-top:12px; font-size:1.1em; font-weight:bold; color:#ffdd00; min-height:2.2em;"></div>
<!-- Это поле теперь можно скрыть, но оставим для отладки -->
<textarea id="resultCode" readonly style="width:97%; height:80px; margin-top:12px; background:#0f0f10; color:#ffddae; border-radius:6px; padding:1%; font-family:'Courier New', monospace; font-size:0.85em; white-space:pre-wrap; overflow:auto; display: none;"></textarea>
<!-- Кнопка Копировать больше не так нужна, но пусть будет -->
<button onclick="copyResult()" style="margin-top:12px; background:#444; border:0.3% solid #aaa; padding:1% 2%; cursor:pointer; color:#fff; border-radius:6px; display: none;">
📋 Копировать результат
</button>
</div>
<style>
.winGlow { animation: glowPulse 1s infinite alternate; }
@keyframes glowPulse {
from { text-shadow: 0 0 6px #ffd700; color:#fff2b8; }
to { text-shadow: 0 0 18px #ffd700, 0 0 36px #ffb700; color:#fff9db; }
}
</style>
<script>
// Переменная для подсчета выигрыша за сессию (без localStorage)
let userCoins = 0;
/* Баланс и ник */
let userName = localStorage.getItem("slotUserName");
// Попытка найти ник на странице (для многих "rusff" форумов)
if (!userName) {
try {
// Ищем ссылку на профиль в шапке или юзербаре
let userLink = document.querySelector('#header-menu a[href*="showuser="], .userbar a[href*="showuser="], .username a, a.user-link');
if (userLink) {
userName = userLink.textContent.trim();
localStorage.setItem("slotUserName", userName);
}
} catch (e) {
console.log("Не удалось автоматически найти ник на странице.");
}
}
// Если все еще нет, спрашиваем
if (!userName) {
userName = prompt("Введите ваш ник:");
if (!userName) userName = "Игрок";
localStorage.setItem("slotUserName", userName);
}
document.getElementById("userName").textContent = userName;
document.getElementById("userCoins").textContent = userCoins;
/* Кулдаун (остается в localStorage для удобства в ОДНОМ браузере) */
const COOLDOWN_MINUTES = 0; // Вы можете вернуть сюда свое значение
const CD = COOLDOWN_MINUTES * 60000;
const timer = document.getElementById("timer");
const spinBtn = document.getElementById("spinBtn");
function canSpin(){
return Date.now() - (localStorage.getItem("slotLastSpin") || 0) >= CD;
}
function updateTimer(){
let last = localStorage.getItem("slotLastSpin") || 0;
let diff = CD - (Date.now() - last);
if (diff <= 0) { timer.textContent="готово ✅"; spinBtn.disabled=false; return; }
timer.textContent = Math.floor(diff/60000)+"м "+Math.floor((diff%60000)/1000)+"с";
spinBtn.disabled = true; // Блокируем кнопку, пока таймер идет
}
setInterval(updateTimer,1000); updateTimer();
/* Символы */
const symbols = [
"https://upforme.ru/uploads/001c/84/76/2/793146.png",
"https://upforme.ru/uploads/001c/84/76/2/635838.png",
"https://upforme.ru/uploads/001c/84/76/2/604915.png",
"https://upforme.ru/uploads/001c/84/76/2/703897.png"
];
const ids = ["slot1","slot2","slot3"];
const winDisplay = document.getElementById("winDisplay");
const resultCode = document.getElementById("resultCode");
/* Спин */
spinBtn.onclick = function(){
if(!canSpin()){
winDisplay.textContent = "Подождите! (Перезагрузите страницу, если таймер завис)";
return;
}
let r = ids.map(()=> symbols[Math.floor(Math.random()*symbols.length)]);
ids.forEach((id,i)=>document.getElementById(id).innerHTML=`<img src="${r[i]}" style="max-width:80%;max-height:80%;">`);
localStorage.setItem("slotLastSpin", Date.now());
spinBtn.disabled = true;
updateTimer(); // Сразу обновить таймер
let counts = {}; r.forEach(s=>counts[s]=(counts[s]||0)+1);
let reward = 0, text="", color="#7c653f";
if(Object.values(counts).includes(3)){
reward = 100; text="🎉 Тройка — +100"; color="#ffd700";
} else if(Object.values(counts).includes(2)){
reward = 50; text="✨ Пара — +50"; color="#c0a060";
} else if(r.includes(symbols[2]) && r.includes(symbols[3])){
reward = 500; text="🔥 Комбо №3+№4 — +500"; color="#ff6a9a";
} else {
text="Попробуй еще"; color="#7c653f";
}
/* ✅ Обновляем сессионные монеты */
userCoins += reward;
document.getElementById("userCoins").textContent = userCoins;
winDisplay.innerHTML = reward>0? `<span class="winGlow">Победа!</span><br>${text}` : text;
resultCode.value = `<div style="border:4px solid ${color}; padding:10px;">🎰 Результат | 🧑 ${userName} | 💰 ${reward}</div>`;
// --- БЛОК АВТО-ОТПРАВКИ ---
// ВАМ НУЖНО НАСТРОИТЬ ЭТИ ДВЕ СТРОКИ!
// Найдите селекторы для ПОЛЯ ВВОДА ТЕКСТА и КНОПКИ ОТПРАВКИ
//
// Как найти:
// 1. Кликните правой кнопкой мыши на поле, куда вы пишете пост -> "Посмотреть код" (Inspect)
// 2. Найдите его 'id' или 'name'. Например: id="message" или name="post"
// 3. То же самое для кнопки "Отправить". Например: name="submit"
//
// Примеры селекторов:
// "#message" (для id="message")
// "textarea[name='post']" (для name="post")
// "input[name='submit']" (для name="submit")
const FORUM_TEXTAREA_SELECTOR = "#main-reply"; // <-- ИСПРАВЛЕНО (для id="main-reply")
const FORUM_SUBMIT_SELECTOR = "input[name='submit']"; // <-- ВАШ ВАРИАНТ ВЕРНЫЙ (для name="submit")
try {
const textarea = document.querySelector(FORUM_TEXTAREA_SELECTOR);
const submitButton = document.querySelector(FORUM_SUBMIT_SELECTOR);
if (textarea && submitButton) {
textarea.value = resultCode.value; // Вставляем результат в поле
submitButton.click(); // Нажимаем "Отправить"
} else {
if (!textarea) console.error("Скрипт слота: Не найдено поле ввода текста по селектору:", FORUM_TEXTAREA_SELECTOR);
if (!submitButton) console.error("Скрипт слота: Не найдена кнопка отправки по селектору:", FORUM_SUBMIT_SELECTOR);
winDisplay.innerHTML += "<br><small>(Ошибка авто-отправки. Скопируйте вручную)</small>";
resultCode.style.display = 'block'; // Показываем поле, раз отправка не удалась
}
} catch (e) {
console.error("Ошибка при авто-отправке:", e);
winDisplay.innerHTML += "<br><small>(Ошибка авто-отправки. Скопируйте вручную)</small>";
resultCode.style.display = 'block';
}
};
/* Копировать (теперь запасная функция) */
function copyResult(){
resultCode.select();
document.execCommand("copy");
// Используем winDisplay для оповещения, т.к. alert() может блокироваться
winDisplay.textContent = "Скопировано!";
setTimeout(() => { winDisplay.textContent = ""; }, 2000);
}
</script>[/html]
Поделиться132025-11-03 22:04:58
[html]<textarea id="textToCopy" rows="4" cols="50">Здесь текст для копирования</textarea>
<br>
<button onclick="copyCode()">Скопировать</button>
<script>
function copyCode() {
const text = document.getElementById("textToCopy");
text.select();
text.setSelectionRange(0, 99999); // Для мобильных устройств
document.execCommand("copy");
alert("Скопировано в буфер!");
}
</script>[/html]
Поделиться142025-11-22 10:53:31
[html]<!-- ======= Слот-машина (вставить в тему id=13) ======= -->
<div id="slotMachine" style="width:90%; max-width:700px; background:#1c1b1b; color:#fff; border-radius:10px; padding:16px; text-align:center; font-family:Georgia; margin:16px auto; box-shadow:0 8px 24px rgba(0,0,0,0.6); position:relative;">
<div style="position:absolute; top:10px; left:12px; font-size:0.95em; color:#ffd87f; text-align:left;">
👤 <span id="userName">Загрузка...</span><br>
💰 <span id="userCoins">0</span> (общий)
</div>
<h3 style="margin:0 0 8px 0;">🎰 Слот-машина</h3>
<div style="margin:6px 0 12px 0; font-size:0.9em; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;">...</span>
</div>
<div id="reels" style="display:flex; justify-content:center; gap:12px; margin-bottom:12px;">
<div id="slot1" style="width:96px;height:96px;background:#000;border-radius:8px;display:flex;align-items:center;justify-content:center;border:2px solid #6f5b3e;"></div>
<div id="slot2" style="width:96px;height:96px;background:#000;border-radius:8px;display:flex;align-items:center;justify-content:center;border:2px solid #6f5b3e;"></div>
<div id="slot3" style="width:96px;height:96px;background:#000;border-radius:8px;display:flex;align-items:center;justify-content:center;border:2px solid #6f5b3e;"></div>
</div>
<button id="spinBtn" style="padding:10px 18px; background:#b8863b; color:#fff; border:none; border-radius:8px; cursor:pointer; font-weight:bold;">Крутить и Отправить 🎲</button>
<div id="winDisplay" style="margin-top:12px; font-size:1.05em; font-weight:bold; color:#ffdd00; min-height:36px;"></div>
<!-- поле для отладки/резерва (скрыто) -->
<textarea id="resultCode" readonly style="display:none; width:100%; height:90px; margin-top:10px; background:#0f0f10; color:#ffddae; padding:8px; border-radius:6px;"></textarea>
</div>
<style>
/* лёгкая подсветка при победе */
.winGlow { animation: glowPulse 1s infinite alternate; }
@keyframes glowPulse {
from { text-shadow:0 0 6px #ffd700; color:#fff2b8; }
to { text-shadow:0 0 18px #ffd700,0 0 36px #ffb700; color:#fff9db; }
}
</style>
<script>
(function(){
// ---------- Настройки ----------
const TOPIC_ID = 13; // <-- сюда id темы (уже 13)
const nickSelector = 'p.container span.item1 strong'; // твой селектор для ника
const FORUM_TEXTAREA_SELECTOR = "#main-reply"; // запасной путь (если хотим fallback)
const FORUM_SUBMIT_SELECTOR = "input[name='submit']";
const COOLDOWN_MINUTES = 0; // время между спинами
const CD = COOLDOWN_MINUTES * 60000;
// Символы (твои изображения)
const symbols = [
"https://upforme.ru/uploads/001c/84/76/2/793146.png", // индекс 0
"https://upforme.ru/uploads/001c/84/76/2/635838.png", // индекс 1
"https://upforme.ru/uploads/001c/84/76/2/604915.png", // индекс 2
"https://upforme.ru/uploads/001c/84/76/2/703897.png" // индекс 3
];
// Элементы
const el = id => document.getElementById(id);
const slotIds = ['slot1','slot2','slot3'];
const spinBtn = el('spinBtn');
const winDisplay = el('winDisplay');
const resultCode = el('resultCode');
const userNameEl = el('userName');
const userCoinsEl = el('userCoins');
const timerEl = el('timer');
// ---------- Ник и баланс ----------
let nickname = localStorage.getItem('slotUserName') || null;
let userCoins = parseInt(localStorage.getItem('slotUserCoins') || '0', 10);
function setNickname(n){
nickname = n || 'Игрок';
userNameEl.textContent = nickname;
try { localStorage.setItem('slotUserName', nickname); } catch(e){}
}
function setCoins(n){
userCoins = Number(n||0);
userCoinsEl.textContent = userCoins;
try { localStorage.setItem('slotUserCoins', userCoins); } catch(e){}
}
// Попытка найти ник по селектору. Ждём до 5сек, потом prompt.
(function findNick(){
if (nickname) { setNickname(nickname); return; }
let attempts = 0;
const maxAttempts = 25; // 25 * 200ms = 5s
const t = setInterval(()=>{
attempts++;
try {
const nickElement = document.querySelector(nickSelector);
if (nickElement && nickElement.textContent.trim()){
setNickname(nickElement.textContent.trim());
clearInterval(t);
} else if (attempts >= maxAttempts){
clearInterval(t);
const ask = prompt('Не удалось определить ник автоматически. Введите ник:');
setNickname(ask || 'Игрок');
}
} catch(e){
if (attempts >= maxAttempts){
clearInterval(t);
const ask = prompt('Введите ваш ник:');
setNickname(ask || 'Игрок');
}
}
}, 200);
})();
setCoins(userCoins);
// ---------- Таймер ----------
function canSpin(){
return Date.now() - (localStorage.getItem('slotLastSpin') || 0) >= CD;
}
function updateTimer(){
const last = localStorage.getItem('slotLastSpin') || 0;
const diff = CD - (Date.now() - last);
if (diff <= 0) { timerEl.textContent='готово ✅'; spinBtn.disabled = false; return; }
const m = Math.floor(diff/60000);
const s = Math.floor((diff%60000)/1000);
timerEl.textContent = `${m}м ${s}с`;
spinBtn.disabled = true;
}
setInterval(updateTimer,1000);
updateTimer();
// ---------- Вспомогательные ----------
function buildCardHtml(rImgs, rewardText, rewardValue, borderColor){
// Собираем HTML для публикации — в простом (форумном) виде
const imgsHtml = rImgs.map(u => `<img src="${u}" style="max-width:64px;max-height:64px;vertical-align:middle;margin:4px;">`).join(' ');
return `
🎰 <b>Слот-машина</b>
🔹 Выпало:
${rImgs.join(' | ')}
${imgsHtml}
🎁 Награда: ${rewardText} (${rewardValue})
🕒 Время: ${new Date().toLocaleString()}
Ник: ${nickname}
`;
}
// ---------- Логика наград (твои правила) ----------
// 3 одинаковых => 100, но если все 3 == symbols[0] => 1000
// 2 одинаковых => 50, but if doubled == symbols[1] => 100
// combo symbols[2] + symbols[3] present => 500
function calcReward(arr){
const counts = {};
arr.forEach(s => counts[s] = (counts[s]||0)+1);
// three of a kind
if (Object.values(counts).includes(3)){
// check special #1
if (arr[0] === arr[1] && arr[1] === arr[2] && arr[0] === symbols[0]) {
return { value: 1000, text: 'Тройка №1' , color: 'gold'};
}
return { value: 100, text: 'Тройка', color: '#ffd700' };
}
// pair
if (Object.values(counts).includes(2)){
const doubled = Object.keys(counts).find(k => counts[k] === 2);
if (doubled === symbols[1]) return { value:100, text:'Пара №2', color:'#c0a060' };
return { value:50, text:'Пара', color:'#c0a060' };
}
// combo 3+4
if (arr.includes(symbols[2]) && arr.includes(symbols[3])){
return { value:500, text:'Комбо №3+№4', color:'#ff6a9a' };
}
return { value:0, text:'Нет', color:'#7c653f' };
}
// ---------- Автопубликация (используется window.slotAutoPost если есть) ----------
function postResultToTopic(topicId, messageText, onSuccess, onError){
// если глобальная функция есть — используем её
if (window.slotAutoPost && typeof window.slotAutoPost === 'function'){
window.slotAutoPost(topicId, messageText, onSuccess, onError);
return;
}
// иначе пробуем AJAX через jQuery
if (window.jQuery){
$.ajax({
url: '/post.php?tid=' + topicId,
type: 'POST',
data: { form_sent: '1', req_message: messageText, submit: 'Отправить' },
success: function(resp){ if(onSuccess) onSuccess(resp); },
error: function(err){ if(onError) onError(err); }
});
return;
}
// fallback: попытка заполнить форму и нажать кнопку (если форма на странице)
try {
const ta = document.querySelector(FORUM_TEXTAREA_SELECTOR) || parent.document && parent.document.querySelector(FORUM_TEXTAREA_SELECTOR);
const sb = document.querySelector(FORUM_SUBMIT_SELECTOR) || parent.document && parent.document.querySelector(FORUM_SUBMIT_SELECTOR);
if (ta && sb){
ta.value = messageText;
ta.dispatchEvent(new Event('input',{bubbles:true}));
setTimeout(()=> sb.click(), 200);
if(onSuccess) onSuccess();
return;
}
} catch(e){}
if (onError) onError(new Error('No posting method available'));
}
// ---------- Основная кнопка: спин + пост ----------
spinBtn.addEventListener('click', function(){
if (!canSpin()){
winDisplay.textContent = 'Подождите немного перед следующим спином';
return;
}
// Генерация результатов (3 символа)
const res = [];
for (let i=0;i<3;i++){
res.push(symbols[Math.floor(Math.random()*symbols.length)]);
}
// Показать в интерфейсе
slotIds.forEach((id,i)=> el(id).innerHTML = `<img src="${res[i]}" style="max-width:80%;max-height:80%;">`);
// Сохраняем время
localStorage.setItem('slotLastSpin', Date.now());
updateTimer();
// Расчёт награды
const rewardObj = calcReward(res);
if (rewardObj.value > 0){
winDisplay.innerHTML = `<span class="winGlow">🎉 Победа!</span><br>${rewardObj.text} — +${rewardObj.value}`;
} else {
winDisplay.textContent = 'Попробуй еще';
}
// Обновляем баланс и localStorage
setCoins(Number(userCoins) + rewardObj.value);
// Формируем текст (plain/text) для поста — отображает 3 выпавших предмета и описание награды
const plainImgs = res.map(u => u).join('\n');
const messageText = `🎰 Слот-машина
🔹 Выпало:
${plainImgs}
🎁 ${rewardObj.text} — +${rewardObj.value} монет
🕒 Время: ${new Date().toLocaleString()}
Ник: ${nickname}
`;
// Скрытое поле для ручного копирования (если нужно)
resultCode.value = messageText;
// Публикуем в текущую тему (TOPIC_ID)
postResultToTopic(TOPIC_ID, messageText,
function ok(resp){
// успех — можно показать ссылку/сообщение
winDisplay.innerHTML += '<br><small>Результат отправлен в тему ✅</small>';
},
function err(e){
console.error('Автопост ошибка', e);
winDisplay.innerHTML += '<br><small>(Автопост недоступен — скопируйте вручную)</small>';
resultCode.style.display = 'block';
}
);
});
})();
</script>[/html]
Поделиться152025-11-22 11:24:43
[html]<!-- СЛОТ-МАШИНА (ТЕМА ID=13) -->
<div id="slotMachine" style="width:90%; max-width:700px; background:#1c1b1b; color:#fff; border-radius:10px; padding:16px; text-align:center; font-family:Georgia; margin:16px auto; box-shadow:0 8px 24px rgba(0,0,0,0.6); position:relative;">
<div style="position:absolute; top:10px; left:12px; font-size:0.95em; color:#ffd87f; text-align:left;">
👤 <span id="userName">Загрузка...</span><br>
💰 <span id="userCoins">0</span> (общий)
</div>
<h3 style="margin:0 0 8px 0;">🎰 Слот-машина</h3>
<div style="margin:6px 0 12px 0; font-size:0.9em; color:#d9c7a1;">
⏳ Новый спин через: <span id="timer" style="font-weight:bold; color:#ffdd8a;">...</span>
</div>
<div id="reels" style="display:flex; justify-content:center; gap:12px; margin-bottom:12px;">
<div id="slot1" style="width:96px;height:96px;background:#000;border-radius:8px;display:flex;align-items:center;justify-content:center;border:2px solid #6f5b3e;"></div>
<div id="slot2" style="width:96px;height:96px;background:#000;border-radius:8px;display:flex;align-items:center;justify-content:center;border:2px solid #6f5b3e;"></div>
<div id="slot3" style="width:96px;height:96px;background:#000;border-radius:8px;display:flex;align-items:center;justify-content:center;border:2px solid #6f5b3e;"></div>
</div>
<button id="spinBtn" style="padding:10px 18px; background:#b8863b; color:#fff; border:none; border-radius:8px; cursor:pointer; font-weight:bold;">Крутить и Отправить 🎲</button>
<div id="winDisplay" style="margin-top:12px; font-size:1.05em; font-weight:bold; color:#ffdd00; min-height:36px;"></div>
<textarea id="resultCode" readonly style="display:none; width:100%; height:90px; margin-top:10px; background:#0f0f10; color:#ffddae; padding:8px; border-radius:6px;"></textarea>
</div>
<style>
.winGlow { animation: glowPulse 1s infinite alternate; }
@keyframes glowPulse {
from { text-shadow:0 0 6px #ffd700; color:#fff2b8; }
to { text-shadow:0 0 18px #ffd700,0 0 36px #ffb700; color:#fff9db; }
}
</style>
<script>
(function(){
/* --------------------------
НАСТРОЙКИ
--------------------------- */
const TOPIC_ID = 13;
const symbols = [
"https://upforme.ru/uploads/001c/84/76/2/793146.png",
"https://upforme.ru/uploads/001c/84/76/2/635838.png",
"https://upforme.ru/uploads/001c/84/76/2/604915.png",
"https://upforme.ru/uploads/001c/84/76/2/703897.png"
];
/* --------------------------
ВЕРСИЯ АВТОПОСТА ЧЕРЕЗ FORUMAPI
--------------------------- */
function autoPostToTopic(tid, text, ok, err){
if (!window.FORUMAPITICKET || !window.USER_ID){
console.warn("Нет ForumAPI переменных ⇒ автопост невозможен");
if(err) err("no Ticket");
return;
}
$.ajax({
url: "/api/v1/post",
type: "POST",
data: {
method: "post",
forumapiticket: FORUMAPITICKET,
uid: USER_ID,
tid: tid,
message: text,
format: "json"
},
success: function(r){
if (r && r.result === "posted"){ ok(r); }
else err(r);
},
error: function(e){ err(e); }
});
}
/* --------------------------
АВТО-ОПРЕДЕЛЕНИЕ НИКА
--------------------------- */
let nickname = null;
function detectNickname(){
// Поддержка RusFF / MyBB шаблонов
const selectors = [
'p.container span.item1 strong',
'.container .item1 strong',
'#pun-crumbs1 li span strong',
'.pa-author strong'
];
for (let s of selectors){
const el = document.querySelector(s);
if (el && el.textContent.trim()){
return el.textContent.trim();
}
}
return prompt("Введите ваш ник:") || "Игрок";
}
nickname = detectNickname();
document.getElementById("userName").textContent = nickname;
/* --------------------------
ЧТЕНИЕ/ЗАПИСЬ МОНЕТ
--------------------------- */
let coins = Number(localStorage.getItem("slotCoins") || 0);
document.getElementById("userCoins").textContent = coins;
function addCoins(n){
coins += n;
localStorage.setItem("slotCoins", coins);
document.getElementById("userCoins").textContent = coins;
}
/* --------------------------
РАСЧЁТ НАГРАД
--------------------------- */
function calcReward(arr){
const c = {};
arr.forEach(s => c[s] = (c[s]||0)+1);
if (Object.values(c).includes(3)){
if (arr[0]===symbols[0] && arr[1]===symbols[0] && arr[2]===symbols[0])
return {v:1000, text:"Тройка №1"};
return {v:100, text:"Тройка"};
}
if (Object.values(c).includes(2)){
const dbl = Object.keys(c).find(k=>c[k]===2);
if (dbl === symbols[1]) return {v:100, text:"Пара №2"};
return {v:50, text:"Пара"};
}
if (arr.includes(symbols[2]) && arr.includes(symbols[3]))
return {v:500, text:"Комбо 3+4"};
return {v:0, text:"Нет"};
}
/* --------------------------
КНОПКА СПИН
--------------------------- */
document.getElementById("spinBtn").onclick = function(){
const r = [
symbols[Math.floor(Math.random()*symbols.length)],
symbols[Math.floor(Math.random()*symbols.length)],
symbols[Math.floor(Math.random()*symbols.length)]
];
["slot1","slot2","slot3"].forEach((id,i)=>{
document.getElementById(id).innerHTML = `<img src="${r[i]}" style="max-width:80%;max-height:80%;">`;
});
const reward = calcReward(r);
if (reward.v > 0){
document.getElementById("winDisplay").innerHTML =
`<span class="winGlow">🎉 Победа!</span><br>${reward.text} — +${reward.v}`;
} else {
document.getElementById("winDisplay").textContent = "Попробуй ещё";
}
addCoins(reward.v);
const msg =
`🎰 Слот-машина
🔹 Выпало:
${r[0]}
${r[1]}
${r[2]}
🎁 ${reward.text} — +${reward.v} монет
👤 Ник: ${nickname}
🕒 ${new Date().toLocaleString()}`;
autoPostToTopic(TOPIC_ID, msg,
() => {
document.getElementById("winDisplay").innerHTML += `<br><small>Результат отправлен в тему ✓</small>`;
},
() => {
document.getElementById("winDisplay").innerHTML += `<br><small>Ошибка автопоста — скопируйте вручную</small>`;
document.getElementById("resultCode").style.display = "block";
document.getElementById("resultCode").value = msg;
}
);
};
})();
</script>[/html]
Поделиться162025-11-23 19:06:01
[html]
<div class="slot-container">
<div class="top-panel">
<div class="top10">
<h3>TOP10</h3>
<ul id="top10-list">
<li>Jamie McClane - 10500$</li>
<li>Correy Sullivan - 6800$</li>
</ul>
</div>
<div class="timer" id="slot-timer">Загрузка таймера...</div>
</div>
<div class="slot-window">
<div class="slot-reel"><img></div>
<div class="slot-reel"><img></div>
<div class="slot-reel"><img></div>
</div>
<div class="slot-result" id="slot-result">Победа! Ты получаешь 1000$</div>
<div class="spin-area">
<label>
<input type="checkbox" id="confirm-bet"> подтверждаю стоимость ставки
</label>
<button id="slot-spin">SPIN</button>
</div>
<div class="player-info">
Katherine Grace - 800$
</div>
</div>
<style>
.slot-container {
width: 400px;
margin: 30px auto;
background: #3a3a3a;
border-radius: 10px;
padding: 15px;
font-family: Arial, sans-serif;
color: #fff;
position: relative;
}
.top-panel {
display: flex;
justify-content: space-between;
margin-bottom: 15px;
}
.top10 {
background: #ffc107;
padding: 10px;
border-radius: 5px;
width: 150px;
}
.top10 h3 {
margin: 0 0 5px 0;
color: #006400;
text-align: center;
}
.top10 ul {
list-style: none;
padding: 0;
margin: 0;
color: #000;
}
.timer {
color: #32cd32;
font-weight: bold;
align-self: center;
}
.slot-window {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
}
.slot-reel {
width: 80px;
height: 80px;
background: #111;
border-radius: 8px;
border: 2px solid #555;
overflow: hidden;
position: relative;
}
.slot-reel img {
width: 100%;
height: 100%;
object-fit: contain;
position: absolute;
top: 0;
transition: top 0.2s linear;
}
.slot-result {
font-size: 18px;
font-weight: bold;
text-align: center;
margin-bottom: 10px;
color: #ffd700;
text-shadow: 0 0 10px #ff0;
}
.spin-area {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
#slot-spin {
padding: 10px 30px;
font-size: 20px;
font-weight: bold;
background: #4CAF50;
border: none;
border-radius: 10px;
color: #fff;
cursor: pointer;
box-shadow: 0 0 10px #ff0;
position: relative;
top: 15px; /* Spin выходит за блок */
transition: all 0.3s ease;
}
#slot-spin:hover {
background: #f00;
box-shadow: 0 0 15px #f00;
}
.player-info {
text-align: right;
font-size: 14px;
color: #fff;
}
</style>
<script>
(function(){
const TIMER_HOURS = 0;
const TIMER_MINUTES = 0;
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,Blood,Potion": 500
};
const reels = document.querySelectorAll(".slot-reel img");
const spinBtn = document.getElementById("slot-spin");
const timerEl = document.getElementById("slot-timer");
const resultEl = document.getElementById("slot-result");
let lastSpin = localStorage.getItem("slotLastSpin") || 0;
function updateTimer() {
let diff = COOLDOWN - (Date.now() - lastSpin);
if(diff <= 0){
timerEl.textContent = "Можешь крутить! ✅";
spinBtn.disabled=false;
} else {
let h=Math.floor(diff/3600000),
m=Math.floor((diff%3600000)/60000),
s=Math.floor((diff%60000)/1000);
timerEl.textContent = `${h}ч ${m}м ${s}с`;
spinBtn.disabled=true;
}
}
setInterval(updateTimer,1000);
updateTimer();
function spinReels() {
if(Date.now() - lastSpin < COOLDOWN){
resultEl.textContent="Подожди, таймер не истёк!";
return;
}
spinBtn.disabled=true;
resultEl.textContent="";
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(()=>{
// ---- ОПРЕДЕЛЕНИЕ ВЫИГРЫША ----
let reward = 0;
const key = results.join(",");
for(let combo in winningCombos){
if(key === combo) reward = winningCombos[combo];
}
if(reward>0) resultEl.textContent = `Успех! Ты получил ${reward}$`;
else resultEl.textContent = "Неудача, попробуй ещё!";
// ---- HTML результата ----
const picsHTML = results.map(name=>{
const sym = symbols.find(s=>s.name===name);
return `<img src="${sym.url}" style="width:50px;height:50px;margin:2px;">`;
}).join("");
const messageHTML =
`<div style="border:2px solid gold; padding:10px; background:#111; color:#fff; font-family:Arial;">
<b>🎰 Результат слота:</b><br>${picsHTML}<br><b>${resultEl.textContent}</b>
</div>`;
// ---- КОДИРОВАНИЕ В BASE64 ----
const encoded = btoa(unescape(encodeURIComponent(messageHTML)));
// ---- ОТПРАВКА ЗАКОДИРОВАННОГО ----
window.parent.postMessage({
type:"slotResult",
payload:{ html: encoded }
},"*");
// ---- РЕЗЕРВНАЯ ОТПРАВКА В ТЕКСТ ----
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();
lastSpin = Date.now();
localStorage.setItem("slotLastSpin", lastSpin);
updateTimer();
}, Math.max(...durations));
}
spinBtn.addEventListener("click", spinReels);
})();
</script>
[/html]
Поделиться172025-11-23 22:05:04
[html]<button
onclick="sendUserData();"
style="
padding: 15px 30px;
font-size: 18px;
cursor: pointer;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 8px;
margin: 20px auto;
display: block;
font-weight: bold;
margin-bottom: 20px;
">
🚀 Запустить автоотправку
</button>
<script>
let profileName = 'GUEST_NICK';
let userId = 0; // 🔑 Идентификатор пользователя
// 🛑 Здесь вам нужно получить фактический ID пользователя,
// если он не задан сервером выше.
// Если ваша платформа хранит ID в переменной, используйте ее:
// userId = window.GLOBAL_USER_ID;
// Код для извлечения никнейма из DOM
const nickSelector = 'p.container span.item1 strong';
const nickElement = document.querySelector(nickSelector);
if (nickElement) {
const extractedNick = nickElement.textContent.trim();
if (extractedNick) {
profileName = extractedNick;
}
}
function sendUserData() {
// Проверяем, что ID и никнейм извлечены
if (userId === 0 || profileName === 'GUEST_NICK') {
console.error('❌ Не удалось получить ID или никнейм текущего пользователя.');
alert('Не удалось определить пользователя. Операция отменена.');
return;
}
// Отправляем объект с данными
window.parent.postMessage({
action: 'sendButtonClicked',
UserID: userId,
Username: profileName
}, '*');
}
</script>
[/html]
Поделиться182025-11-24 17:25:33
[html]
<div class="slot-secure" data-result="PGRpdiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBnb2xkO3BhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiMxMTE7Y29sb3I6I2ZmZjtmb250LWZhbWlseTpBcmlhbCI+CiAgICAgICAgICAgICAgICA8Yj7wn46wINCg0LXQt9GD0LvRjNGC0LDRgiDRgdC70L7RgtCwOjwvYj48YnI+PGltZyBzcmM9Imh0dHBzOi8vdXBmb3JtZS5ydS91cGxvYWRzLzAwMWMvNTIvYjYvMi82MDU5OTgucG5nIiBzdHlsZT0id2lkdGg6NTBweDtoZWlnaHQ6NTBweDttYXJnaW46MnB4OyI+PGltZyBzcmM9Imh0dHBzOi8vdXBmb3JtZS5ydS91cGxvYWRzLzAwMWMvNTIvYjYvMi82MDU5OTgucG5nIiBzdHlsZT0id2lkdGg6NTBweDtoZWlnaHQ6NTBweDttYXJnaW46MnB4OyI+PGltZyBzcmM9Imh0dHBzOi8vdXBmb3JtZS5ydS91cGxvYWRzLzAwMWMvNTIvYjYvMi82MDU5OTgucG5nIiBzdHlsZT0id2lkdGg6NTBweDtoZWlnaHQ6NTBweDttYXJnaW46MnB4OyI+PGJyPjxiPtCS0Ysg0LLRi9C40LPRgNCw0LvQuCAxMDAkPC9iPgogICAgICAgICAgICA8L2Rpdj4=">
Загрузка результата...
</div>
<script>
(function(){
try{
var el=document.querySelector(".slot-secure");
var enc=el.getAttribute("data-result");
el.innerHTML=decodeURIComponent(escape(atob(enc)));
}catch(e){document.querySelector(".slot-secure").innerHTML="<b>Ошибка результата</b>";}
})();
</script>
[/html]
Поделиться192025-11-24 23:24:15
[html]<div class="slot-container">
<div class="top-panel">
<div class="top10">
<h3>TOP10</h3>
<ul id="top10-list">
<li>Jamie McClane - 10500$</li>
<li>Correy Sullivan - 6800$</li>
</ul>
</div>
<div class="timer" id="slot-timer">Загрузка таймера...</div>
</div>
<div class="slot-window">
<div class="slot-reel"><img></div>
<div class="slot-reel"><img></div>
<div class="slot-reel"><img></div>
</div>
<div class="slot-result" id="slot-result">Победа! Ты получаешь 1000$</div>
<div class="spin-area">
<label>
<input type="checkbox" id="confirm-bet"> подтверждаю стоимость ставки
</label>
<button id="slot-spin">SPIN</button>
</div>
<div class="player-info">
Katherine Grace - 800$
</div>
</div>
<style>
.slot-container {
width: 400px;
margin: 30px auto;
background: #3a3a3a;
border-radius: 10px;
padding: 15px;
font-family: Arial, sans-serif;
color: #fff;
position: relative;
}
.top-panel {
display: flex;
justify-content: space-between;
margin-bottom: 15px;
}
.top10 {
background: #ffc107;
padding: 10px;
border-radius: 5px;
width: 150px;
}
.top10 h3 {
margin: 0 0 5px 0;
color: #006400;
text-align: center;
}
.top10 ul {
list-style: none;
padding: 0;
margin: 0;
color: #000;
}
.timer {
color: #32cd32;
font-weight: bold;
align-self: center;
}
.slot-window {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
}
.slot-reel {
width: 80px;
height: 80px;
background: #111;
border-radius: 8px;
border: 2px solid #555;
overflow: hidden;
position: relative;
}
.slot-reel img {
width: 100%;
height: 100%;
object-fit: contain;
position: absolute;
top: 0;
transition: top 0.2s linear;
}
.slot-result {
font-size: 18px;
font-weight: bold;
text-align: center;
margin-bottom: 10px;
color: #ffd700;
text-shadow: 0 0 10px #ff0;
}
.spin-area {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
#slot-spin {
padding: 10px 30px;
font-size: 20px;
font-weight: bold;
background: #4CAF50;
border: none;
border-radius: 10px;
color: #fff;
cursor: pointer;
box-shadow: 0 0 10px #ff0;
position: relative;
top: 15px; /* Spin выходит за блок */
transition: all 0.3s ease;
}
#slot-spin:hover {
background: #f00;
box-shadow: 0 0 15px #f00;
}
.player-info {
text-align: right;
font-size: 14px;
color: #fff;
}
</style>
[/html]
Поделиться202025-11-24 23:26:52
Автоотправка слота:<div data-slot-result><div style="border:2px solid gold; padding:10px; background:#111; color:#fff; font-family:Arial;">
<b>🎰 Результат слота:</b><br><img src="https://upforme.ru/uploads/001c/52/b6/2/610070.png" style="width:50px;height:50px;margin:2px;"><img src="https://upforme.ru/uploads/001c/52/b6/2/566605.png" style="width:50px;height:50px;margin:2px;"><img src="https://upforme.ru/uploads/001c/52/b6/2/319417.png" style="width:50px;height:50px;margin:2px;"><br><b>Неудача, попробуй ещё!</b>
</div></div>
Поделиться212025-11-25 00:15:14
[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;
}
.container {
display: flex;
max-width: 1200px;
width: 100%;
gap: 20px;
}
.top-players {
flex: 1;
background: rgba(30, 30, 46, 0.8);
border-radius: 15px;
padding: 20px;
border: 2px solid #4a4a6d;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
}
.top-players h2 {
text-align: center;
margin-bottom: 20px;
color: #ffd700;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.5);
font-size: 24px;
}
.player-list {
list-style: none;
}
.player-item {
display: flex;
justify-content: space-between;
padding: 10px 15px;
margin-bottom: 10px;
background: rgba(40, 40, 60, 0.7);
border-radius: 8px;
border-left: 4px solid #ffd700;
}
.player-name {
font-weight: bold;
}
.player-amount {
color: #4CAF50;
font-weight: bold;
}
.slot-machine-container {
flex: 2;
display: flex;
flex-direction: column;
align-items: center;
}
.timer-container {
background: rgba(30, 30, 46, 0.8);
padding: 15px 25px;
border-radius: 10px;
margin-bottom: 20px;
border: 2px solid #4a4a6d;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.4);
align-self: flex-end;
}
#slot-timer {
font-size: 18px;
color: #ffdd8a;
font-weight: bold;
text-shadow: 0 0 5px rgba(255, 221, 138, 0.7);
}
.slot-machine {
width: 100%;
max-width: 600px;
padding: 25px;
background: rgba(30, 30, 46, 0.9);
border-radius: 15px;
text-align: center;
color: #fff;
border: 2px solid #4a4a6d;
box-shadow: 0 0 25px rgba(0, 0, 0, 0.6);
position: relative;
}
.result-messages {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}
.win-message, .lose-message {
padding: 10px 20px;
border-radius: 8px;
font-weight: bold;
flex: 1;
margin: 0 10px;
}
.win-message {
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-message {
background: rgba(244, 67, 54, 0.2);
color: #f44336;
border: 2px solid #f44336;
}
.slot-window {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
background: rgba(20, 20, 35, 0.8);
padding: 15px;
border-radius: 10px;
border: 2px solid #555;
}
.slot-reel {
width: 120px;
height: 120px;
overflow: hidden;
border-radius: 10px;
background: #000;
border: 2px solid #555;
position: relative;
box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.7);
}
.slot-reel img {
width: 100%;
height: 100%;
object-fit: contain;
position: absolute;
top: 0;
transition: top 0.15s linear;
}
.spin-controls {
display: flex;
align-items: center;
justify-content: center;
margin-top: 20px;
gap: 15px;
}
.checkbox-container {
display: flex;
align-items: center;
gap: 8px;
background: rgba(40, 40, 60, 0.7);
padding: 10px 15px;
border-radius: 8px;
border: 1px solid #555;
}
.checkbox-container input {
width: 20px;
height: 20px;
cursor: pointer;
}
.checkbox-container label {
font-size: 14px;
color: #ccc;
}
#slot-spin {
padding: 15px 40px;
background: linear-gradient(to bottom, #4CAF50, #388E3C);
color: #fff;
border: none;
border-radius: 50px;
font-size: 20px;
font-weight: bold;
cursor: pointer;
margin-bottom: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
position: relative;
z-index: 10;
transform: translateY(10px);
}
#slot-spin:hover {
background: linear-gradient(to bottom, #66BB6A, #4CAF50);
box-shadow: 0 0 20px rgba(76, 175, 80, 0.7);
transform: translateY(5px);
}
#slot-spin:disabled {
background: #666;
cursor: not-allowed;
box-shadow: none;
transform: translateY(10px);
}
#slot-result {
font-size: 18px;
font-weight: bold;
min-height: 30px;
margin-top: 15px;
color: #ffd700;
text-shadow: 0 0 5px rgba(255, 215, 0, 0.7);
padding: 10px;
border-radius: 8px;
background: rgba(40, 40, 60, 0.5);
}
.player-info {
flex: 1;
background: rgba(30, 30, 46, 0.8);
border-radius: 15px;
padding: 20px;
border: 2px solid #4a4a6d;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
justify-content: center;
}
.player-info h2 {
text-align: center;
margin-bottom: 20px;
color: #ffd700;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.5);
font-size: 24px;
}
.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: 8px 12px;
background: rgba(50, 50, 70, 0.5);
border-radius: 6px;
}
.stat-label {
color: #ccc;
}
.stat-value {
color: #ffd700;
font-weight: bold;
}
</style>
</head>
<body>
<div class="container">
<!-- Левая панель с ТОП-10 игроками -->
<div class="top-players">
<h2>ТОП 10</h2>
<ul class="player-list">
<li class="player-item">
<span class="player-name">Jamie McClane</span>
<span class="player-amount">10500$</span>
</li>
<li class="player-item">
<span class="player-name">Correy Sullivan</span>
<span class="player-amount">6800$</span>
</li>
<li class="player-item">
<span class="player-name">Michael Rodriguez</span>
<span class="player-amount">5400$</span>
</li>
<li class="player-item">
<span class="player-name">Sarah Johnson</span>
<span class="player-amount">4900$</span>
</li>
<li class="player-item">
<span class="player-name">Alex Thompson</span>
<span class="player-amount">4200$</span>
</li>
<li class="player-item">
<span class="player-name">Emma Wilson</span>
<span class="player-amount">3800$</span>
</li>
<li class="player-item">
<span class="player-name">David Brown</span>
<span class="player-amount">3500$</span>
</li>
<li class="player-item">
<span class="player-name">Olivia Davis</span>
<span class="player-amount">3100$</span>
</li>
<li class="player-item">
<span class="player-name">James Miller</span>
<span class="player-amount">2800$</span>
</li>
<li class="player-item">
<span class="player-name">Sophia Garcia</span>
<span class="player-amount">2400$</span>
</li>
</ul>
</div>
<!-- Центральная часть с автоматом -->
<div class="slot-machine-container">
<div class="timer-container">
<div id="slot-timer">Загрузка таймера...</div>
</div>
<div class="slot-machine">
<div class="result-messages">
<div class="win-message">
ПОБЕДА!<br>Ты получаешь 1000$
</div>
<div class="lose-message">
Неудача<br>Попробуй еще
</div>
</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">SPIN</button>
</div>
<div id="slot-result"></div>
</div>
</div>
<!-- Правая панель с информацией об игроке -->
<div class="player-info">
<h2>Игрок</h2>
<div class="current-player">
<span class="player-name">Katherine Grace</span>
<span class="player-amount">800$</span>
</div>
<div class="player-stats">
<div class="stat-item">
<span class="stat-label">Всего игр:</span>
<span class="stat-value">24</span>
</div>
<div class="stat-item">
<span class="stat-label">Побед:</span>
<span class="stat-value">8</span>
</div>
<div class="stat-item">
<span class="stat-label">Процент побед:</span>
<span class="stat-value">33%</span>
</div>
<div class="stat-item">
<span class="stat-label">Макс. выигрыш:</span>
<span class="stat-value">1500$</span>
</div>
</div>
</div>
</div>
<script>
(function(){
const TIMER_HOURS = 0;
const TIMER_MINUTES = 0;
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,Blood,Potion": 500
};
const reels = document.querySelectorAll(".slot-reel img");
const spinBtn = document.getElementById("slot-spin");
const timerEl = document.getElementById("slot-timer");
const resultEl = document.getElementById("slot-result");
const confirmBet = document.getElementById("confirm-bet");
let lastSpin = localStorage.getItem("slotLastSpin") || 0;
// Обновление состояния кнопки в зависимости от галочки
function updateSpinButton() {
spinBtn.disabled = !confirmBet.checked || (Date.now() - lastSpin < COOLDOWN);
}
confirmBet.addEventListener("change", updateSpinButton);
function updateTimer() {
let diff = COOLDOWN - (Date.now() - lastSpin);
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();
}
}
setInterval(updateTimer,1000);
updateTimer();
function spinReels() {
if(!confirmBet.checked) {
resultEl.textContent = "Подтвердите стоимость ставки!";
return;
}
if(Date.now() - lastSpin < COOLDOWN){
resultEl.textContent="Подожди, таймер не истёк!";
return;
}
spinBtn.disabled=true;
resultEl.textContent="";
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(()=>{
// ---- ОПРЕДЕЛЕНИЕ ВЫИГРЫША ----
let reward = 0;
const key = results.join(",");
for(let combo in winningCombos){
if(key === combo) reward = winningCombos[combo];
}
if(reward>0) {
resultEl.textContent = `Успех! Ты получил ${reward}$`;
resultEl.style.color = "#4CAF50";
} else {
resultEl.textContent = "Неудача, попробуй ещё!";
resultEl.style.color = "#f44336";
}
// ---- HTML результата ----
const picsHTML = results.map(name=>{
const sym = symbols.find(s=>s.name===name);
return `<img src="${sym.url}" style="width:50px;height:50px;margin:2px;">`;
}).join("");
const messageHTML = `<div style="border:2px solid gold; padding:10px; background:#111; color:#fff; font-family:Arial;">
<b>🎰 Результат слота:</b><br>${picsHTML}<br><b>${resultEl.textContent}</b>
</div>`;
// ---- КОДИРОВАНИЕ В BASE64 ----
const encoded = btoa(unescape(encodeURIComponent(messageHTML)));
// ---- ОТПРАВКА ЗАКОДИРОВАННОГО ----
window.parent.postMessage({
type:"slotResult",
payload:{
html: encoded
}
},"*");
// ---- РЕЗЕРВНАЯ ОТПРАВКА В ТЕКСТ ----
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();
lastSpin = Date.now();
localStorage.setItem("slotLastSpin", lastSpin);
updateTimer();
}, Math.max(...durations));
}
spinBtn.addEventListener("click", spinReels);
})();
</script>
</body>
</html>[/html]
[hideprofile]
Поделиться222025-11-25 00:15:21
[html]
<div class="slot-secure" data-result="PGRpdiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBnb2xkOyBwYWRkaW5nOjEwcHg7IGJhY2tncm91bmQ6IzExMTsgY29sb3I6I2ZmZjsgZm9udC1mYW1pbHk6QXJpYWw7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+8J+OsCDQoNC10LfRg9C70YzRgtCw0YIg0YHQu9C+0YLQsDo8L2I+PGJyPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjA1OTk4LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvMzE5NDE3LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvODAyNjIzLnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxicj48Yj7QndC10YPQtNCw0YfQsCwg0L/QvtC/0YDQvtCx0YPQuSDQtdGJ0ZEhPC9iPgogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg==">
Загрузка результата...
</div>
<script>
(function(){
try {
var encoded = document.querySelector(".slot-secure").getAttribute("data-result");
var html = decodeURIComponent(escape(atob(encoded)));
document.querySelector(".slot-secure").innerHTML = html;
} catch(e){
document.querySelector(".slot-secure").innerHTML = "<b>Ошибка результата</b>";
}
})();
</script>
[/html]
Поделиться232025-11-25 00:25:12
[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;
}
.container {
display: flex;
max-width: 1200px;
width: 100%;
gap: 20px;
height: 700px;
}
.top-players {
flex: 1;
background: rgba(30, 30, 46, 0.8);
border-radius: 15px;
padding: 20px;
border: 2px solid #4a4a6d;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
height: 100%;
}
.top-players h2 {
text-align: center;
margin-bottom: 20px;
color: #ffd700;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.5);
font-size: 24px;
}
.player-list {
list-style: none;
overflow-y: auto;
flex: 1;
padding-right: 5px;
}
.player-list::-webkit-scrollbar {
width: 8px;
}
.player-list::-webkit-scrollbar-track {
background: rgba(40, 40, 60, 0.5);
border-radius: 4px;
}
.player-list::-webkit-scrollbar-thumb {
background: #ffd700;
border-radius: 4px;
}
.player-item {
display: flex;
justify-content: space-between;
padding: 12px 15px;
margin-bottom: 10px;
background: rgba(40, 40, 60, 0.7);
border-radius: 8px;
border-left: 4px solid #ffd700;
}
.player-name {
font-weight: bold;
}
.player-amount {
color: #4CAF50;
font-weight: bold;
}
.slot-machine-container {
flex: 2;
display: flex;
flex-direction: column;
align-items: center;
height: 100%;
}
.timer-container {
background: rgba(30, 30, 46, 0.8);
padding: 15px 25px;
border-radius: 10px;
margin-bottom: 20px;
border: 2px solid #4a4a6d;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.4);
align-self: flex-end;
}
#slot-timer {
font-size: 18px;
color: #ffdd8a;
font-weight: bold;
text-shadow: 0 0 5px rgba(255, 221, 138, 0.7);
}
.slot-machine {
width: 100%;
max-width: 600px;
padding: 25px;
background: rgba(30, 30, 46, 0.9);
border-radius: 15px;
text-align: center;
color: #fff;
border: 2px solid #4a4a6d;
box-shadow: 0 0 25px rgba(0, 0, 0, 0.6);
position: relative;
height: 100%;
display: flex;
flex-direction: column;
}
.result-display {
padding: 15px;
border-radius: 10px;
font-weight: bold;
font-size: 20px;
margin-bottom: 20px;
min-height: 70px;
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-between;
margin-bottom: 20px;
background: rgba(20, 20, 35, 0.8);
padding: 20px;
border-radius: 10px;
border: 2px solid #555;
flex: 1;
}
.slot-reel {
width: 130px;
height: 130px;
overflow: hidden;
border-radius: 10px;
background: #000;
border: 2px solid #555;
position: relative;
box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.7);
}
.slot-reel img {
width: 100%;
height: 100%;
object-fit: contain;
position: absolute;
top: 0;
transition: top 0.15s linear;
}
.spin-controls {
display: flex;
align-items: center;
justify-content: center;
margin-top: 20px;
gap: 15px;
}
.checkbox-container {
display: flex;
align-items: center;
gap: 8px;
background: rgba(40, 40, 60, 0.7);
padding: 10px 15px;
border-radius: 8px;
border: 1px solid #555;
}
.checkbox-container input {
width: 20px;
height: 20px;
cursor: pointer;
}
.checkbox-container label {
font-size: 14px;
color: #ccc;
}
#slot-spin {
padding: 15px 40px;
background: linear-gradient(to bottom, #4CAF50, #388E3C);
color: #fff;
border: none;
border-radius: 50px;
font-size: 20px;
font-weight: bold;
cursor: pointer;
margin-bottom: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
position: relative;
z-index: 10;
transform: translateY(10px);
}
#slot-spin:hover {
background: linear-gradient(to bottom, #66BB6A, #4CAF50);
box-shadow: 0 0 20px rgba(76, 175, 80, 0.7);
transform: translateY(5px);
}
#slot-spin:disabled {
background: #666;
cursor: not-allowed;
box-shadow: none;
transform: translateY(10px);
}
.player-info {
flex: 1;
background: rgba(30, 30, 46, 0.8);
border-radius: 15px;
padding: 20px;
border: 2px solid #4a4a6d;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
height: 100%;
}
.player-info h2 {
text-align: center;
margin-bottom: 20px;
color: #ffd700;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.5);
font-size: 24px;
}
.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;
flex: 1;
}
.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;
}
</style>
</head>
<body>
<div class="container">
<!-- Левая панель с ТОП-10 игроками -->
<div class="top-players">
<h2>ТОП 10</h2>
<ul class="player-list">
<li class="player-item">
<span class="player-name">Jamie McClane</span>
<span class="player-amount">10500$</span>
</li>
<li class="player-item">
<span class="player-name">Correy Sullivan</span>
<span class="player-amount">6800$</span>
</li>
<li class="player-item">
<span class="player-name">Michael Rodriguez</span>
<span class="player-amount">5400$</span>
</li>
<li class="player-item">
<span class="player-name">Sarah Johnson</span>
<span class="player-amount">4900$</span>
</li>
<li class="player-item">
<span class="player-name">Alex Thompson</span>
<span class="player-amount">4200$</span>
</li>
<li class="player-item">
<span class="player-name">Emma Wilson</span>
<span class="player-amount">3800$</span>
</li>
<li class="player-item">
<span class="player-name">David Brown</span>
<span class="player-amount">3500$</span>
</li>
<li class="player-item">
<span class="player-name">Olivia Davis</span>
<span class="player-amount">3100$</span>
</li>
<li class="player-item">
<span class="player-name">James Miller</span>
<span class="player-amount">2800$</span>
</li>
<li class="player-item">
<span class="player-name">Sophia Garcia</span>
<span class="player-amount">2400$</span>
</li>
<li class="player-item">
<span class="player-name">Robert Smith</span>
<span class="player-amount">2100$</span>
</li>
<li class="player-item">
<span class="player-name">Lisa Anderson</span>
<span class="player-amount">1900$</span>
</li>
</ul>
</div>
<!-- Центральная часть с автоматом -->
<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">
Добро пожаловать! Сделайте вашу ставку.
</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">SPIN</button>
</div>
</div>
</div>
<!-- Правая панель с информацией об игроке -->
<div class="player-info">
<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="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="max-win">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>
<script>
(function(){
// Имитация данных пользователя (в реальном приложении эти данные будут приходить с сервера)
const userData = {
userId: "12345",
nickname: "CyberPlayer",
balance: 800,
totalGames: 24,
wins: 8,
maxWin: 1500,
currentStreak: 2,
bestStreak: 5
};
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");
// Обновление информации о пользователе
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('win-rate').textContent = Math.round((userData.wins / userData.totalGames) * 100) + '%';
document.getElementById('max-win').textContent = userData.maxWin + '$';
document.getElementById('current-streak').textContent = userData.currentStreak;
document.getElementById('best-streak').textContent = userData.bestStreak;
}
let lastSpin = localStorage.getItem("slotLastSpin") || 0;
// Обновление состояния кнопки в зависимости от галочки
function updateSpinButton() {
spinBtn.disabled = !confirmBet.checked || (Date.now() - lastSpin < COOLDOWN);
}
confirmBet.addEventListener("change", updateSpinButton);
function updateTimer() {
let diff = COOLDOWN - (Date.now() - lastSpin);
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();
}
}
setInterval(updateTimer,1000);
updateTimer();
function spinReels() {
if(!confirmBet.checked) {
resultDisplay.textContent = "Подтвердите стоимость ставки!";
resultDisplay.className = "result-display lose-result";
return;
}
if(Date.now() - lastSpin < 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(()=>{
// ---- ОПРЕДЕЛЕНИЕ ВЫИГРЫША ----
let reward = 0;
const key = results.join(",");
for(let combo in winningCombos){
if(key === combo) reward = winningCombos[combo];
}
if(reward>0) {
resultDisplay.textContent = `ПОБЕДА! Ты получаешь ${reward}$`;
resultDisplay.className = "result-display win-result";
// Обновление данных пользователя
userData.balance += reward;
userData.totalGames += 1;
userData.wins += 1;
userData.currentStreak += 1;
if (userData.currentStreak > userData.bestStreak) {
userData.bestStreak = userData.currentStreak;
}
if (reward > userData.maxWin) {
userData.maxWin = reward;
}
} else {
resultDisplay.textContent = "Неудача! Попробуй еще раз.";
resultDisplay.className = "result-display lose-result";
// Обновление данных пользователя
userData.totalGames += 1;
userData.currentStreak = 0;
}
updateUserInfo();
// ---- HTML результата ----
const picsHTML = results.map(name=>{
const sym = symbols.find(s=>s.name===name);
return `<img src="${sym.url}" style="width:50px;height:50px;margin:2px;">`;
}).join("");
const messageHTML = `<div style="border:2px solid gold; padding:10px; background:#111; color:#fff; font-family:Arial;">
<b>🎰 Результат слота:</b><br>${picsHTML}<br><b>${resultDisplay.textContent}</b>
</div>`;
// ---- КОДИРОВАНИЕ В BASE64 ----
const encoded = btoa(unescape(encodeURIComponent(messageHTML)));
// ---- ОТПРАВКА ЗАКОДИРОВАННОГО ----
window.parent.postMessage({
type:"slotResult",
payload:{
html: encoded
}
},"*");
// ---- РЕЗЕРВНАЯ ОТПРАВКА В ТЕКСТ ----
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();
lastSpin = Date.now();
localStorage.setItem("slotLastSpin", lastSpin);
updateTimer();
}, Math.max(...durations));
}
spinBtn.addEventListener("click", spinReels);
// Инициализация данных пользователя при загрузке
updateUserInfo();
})();
</script>
</body>
</html>[/html]
Поделиться242025-11-25 00:25:22
[html]
<div class="slot-secure" data-result="PGRpdiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBnb2xkOyBwYWRkaW5nOjEwcHg7IGJhY2tncm91bmQ6IzExMTsgY29sb3I6I2ZmZjsgZm9udC1mYW1pbHk6QXJpYWw7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+8J+OsCDQoNC10LfRg9C70YzRgtCw0YIg0YHQu9C+0YLQsDo8L2I+PGJyPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvMzE5NDE3LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvMzE5NDE3LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjA1OTk4LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxicj48Yj7QndC10YPQtNCw0YfQsCEg0J/QvtC/0YDQvtCx0YPQuSDQtdGJ0LUg0YDQsNC3LjwvYj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4=">
Загрузка результата...
</div>
<script>
(function(){
try {
var encoded = document.querySelector(".slot-secure").getAttribute("data-result");
var html = decodeURIComponent(escape(atob(encoded)));
document.querySelector(".slot-secure").innerHTML = html;
} catch(e){
document.querySelector(".slot-secure").innerHTML = "<b>Ошибка результата</b>";
}
})();
</script>
[/html]
Поделиться252025-11-25 00:26:02
[html]
<div class="slot-secure" data-result="PGRpdiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBnb2xkOyBwYWRkaW5nOjEwcHg7IGJhY2tncm91bmQ6IzExMTsgY29sb3I6I2ZmZjsgZm9udC1mYW1pbHk6QXJpYWw7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+8J+OsCDQoNC10LfRg9C70YzRgtCw0YIg0YHQu9C+0YLQsDo8L2I+PGJyPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNTY2NjA1LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjA1OTk4LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvODAyNjIzLnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxicj48Yj7QndC10YPQtNCw0YfQsCEg0J/QvtC/0YDQvtCx0YPQuSDQtdGJ0LUg0YDQsNC3LjwvYj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4=">
Загрузка результата...
</div>
<script>
(function(){
try {
var encoded = document.querySelector(".slot-secure").getAttribute("data-result");
var html = decodeURIComponent(escape(atob(encoded)));
document.querySelector(".slot-secure").innerHTML = html;
} catch(e){
document.querySelector(".slot-secure").innerHTML = "<b>Ошибка результата</b>";
}
})();
</script>
[/html]
Поделиться262025-11-25 00:27:38
[html]
<div class="slot-secure" data-result="PGRpdiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBnb2xkOyBwYWRkaW5nOjEwcHg7IGJhY2tncm91bmQ6IzExMTsgY29sb3I6I2ZmZjsgZm9udC1mYW1pbHk6QXJpYWw7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+8J+OsCDQoNC10LfRg9C70YzRgtCw0YIg0YHQu9C+0YLQsDo8L2I+PGJyPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNTY2NjA1LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjA1OTk4LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjA1OTk4LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxicj48Yj7QndC10YPQtNCw0YfQsCEg0J/QvtC/0YDQvtCx0YPQuSDQtdGJ0LUg0YDQsNC3LjwvYj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4=">
Загрузка результата...
</div>
<script>
(function(){
try {
var encoded = document.querySelector(".slot-secure").getAttribute("data-result");
var html = decodeURIComponent(escape(atob(encoded)));
document.querySelector(".slot-secure").innerHTML = html;
} catch(e){
document.querySelector(".slot-secure").innerHTML = "<b>Ошибка результата</b>";
}
})();
</script>
[/html]
Поделиться272025-11-25 00:33:21
[html]
<div class="slot-secure" data-result="PGRpdiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBnb2xkOyBwYWRkaW5nOjEwcHg7IGJhY2tncm91bmQ6IzExMTsgY29sb3I6I2ZmZjsgZm9udC1mYW1pbHk6QXJpYWw7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+8J+OsCDQoNC10LfRg9C70YzRgtCw0YIg0YHQu9C+0YLQsDo8L2I+PGJyPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjA1OTk4LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjEwMDcwLnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjA1OTk4LnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxicj48Yj7QndC10YPQtNCw0YfQsCEg0J/QvtC/0YDQvtCx0YPQuSDQtdGJ0LUg0YDQsNC3LjwvYj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4=">
Загрузка результата...
</div>
<script>
(function(){
try {
var encoded = document.querySelector(".slot-secure").getAttribute("data-result");
var html = decodeURIComponent(escape(atob(encoded)));
document.querySelector(".slot-secure").innerHTML = html;
} catch(e){
document.querySelector(".slot-secure").innerHTML = "<b>Ошибка результата</b>";
}
})();
</script>
[/html]
Поделиться282025-11-25 00:47:30
[html]
<div class="slot-secure" data-result="PGRpdiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBnb2xkOyBwYWRkaW5nOjEwcHg7IGJhY2tncm91bmQ6IzExMTsgY29sb3I6I2ZmZjsgZm9udC1mYW1pbHk6QXJpYWw7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+8J+OsCDQoNC10LfRg9C70YzRgtCw0YIg0YHQu9C+0YLQsDo8L2I+PGJyPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjEwMDcwLnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjEwMDcwLnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxpbWcgc3JjPSJodHRwczovL3VwZm9ybWUucnUvdXBsb2Fkcy8wMDFjLzUyL2I2LzIvNjEwMDcwLnBuZyIgc3R5bGU9IndpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bWFyZ2luOjJweDsiPjxicj48Yj7Qn9Ce0JHQldCU0JAhINCi0Ysg0L/QvtC70YPRh9Cw0LXRiNGMIDMwMCQ8L2I+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+">
Загрузка результата...
</div>
<script>
(function(){
try {
var encoded = document.querySelector(".slot-secure").getAttribute("data-result");
var html = decodeURIComponent(escape(atob(encoded)));
document.querySelector(".slot-secure").innerHTML = html;
} catch(e){
document.querySelector(".slot-secure").innerHTML = "<b>Ошибка результата</b>";
}
})();
</script>
[/html]
Поделиться292025-11-25 00:48:44
[html]<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Игровой автомат</title>
<script src="https://cdn.jsdelivr.net/npm/@quadrosystems/mybb-sdk@0.9.7/lib/index.min.js"></script>
<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;
}
.container {
display: flex;
width: 95%;
max-width: 1400px;
gap: 20px;
height: 700px;
}
.top-players {
flex: 1;
min-width: 250px;
background: rgba(30, 30, 46, 0.8);
border-radius: 15px;
padding: 20px;
border: 2px solid #4a4a6d;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
height: 100%;
}
.top-players h2 {
text-align: center;
margin-bottom: 20px;
color: #ffd700;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.5);
font-size: 24px;
}
.player-list {
list-style: none;
overflow-y: auto;
flex: 1;
padding-right: 5px;
}
.player-list::-webkit-scrollbar {
width: 8px;
}
.player-list::-webkit-scrollbar-track {
background: rgba(40, 40, 60, 0.5);
border-radius: 4px;
}
.player-list::-webkit-scrollbar-thumb {
background: #ffd700;
border-radius: 4px;
}
.player-item {
display: flex;
justify-content: space-between;
padding: 12px 15px;
margin-bottom: 10px;
background: rgba(40, 40, 60, 0.7);
border-radius: 8px;
border-left: 4px solid #ffd700;
}
.player-name {
font-weight: bold;
}
.player-amount {
color: #4CAF50;
font-weight: bold;
}
.slot-machine-container {
flex: 2;
display: flex;
flex-direction: column;
align-items: center;
height: 100%;
min-width: 500px;
}
.timer-container {
background: rgba(30, 30, 46, 0.8);
padding: 15px 25px;
border-radius: 10px;
margin-bottom: 20px;
border: 2px solid #4a4a6d;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.4);
align-self: flex-end;
}
#slot-timer {
font-size: 18px;
color: #ffdd8a;
font-weight: bold;
text-shadow: 0 0 5px rgba(255, 221, 138, 0.7);
}
.slot-machine {
width: 100%;
padding: 25px;
background: rgba(30, 30, 46, 0.9);
border-radius: 15px;
text-align: center;
color: #fff;
border: 2px solid #4a4a6d;
box-shadow: 0 0 25px rgba(0, 0, 0, 0.6);
position: relative;
height: 100%;
display: flex;
flex-direction: column;
}
.result-display {
padding: 15px;
border-radius: 10px;
font-weight: bold;
font-size: 20px;
margin-bottom: 20px;
min-height: 70px;
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-between;
margin-bottom: 20px;
background: rgba(20, 20, 35, 0.8);
padding: 20px;
border-radius: 10px;
border: 2px solid #555;
flex: 1;
}
.slot-reel {
width: 130px;
height: 130px;
overflow: hidden;
border-radius: 10px;
background: #000;
border: 2px solid #555;
position: relative;
box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.7);
}
.slot-reel img {
width: 100%;
height: 100%;
object-fit: contain;
position: absolute;
top: 0;
transition: top 0.15s linear;
}
.spin-controls {
display: flex;
align-items: center;
justify-content: center;
margin-top: 20px;
gap: 15px;
}
.checkbox-container {
display: flex;
align-items: center;
gap: 8px;
background: rgba(40, 40, 60, 0.7);
padding: 10px 15px;
border-radius: 8px;
border: 1px solid #555;
}
.checkbox-container input {
width: 20px;
height: 20px;
cursor: pointer;
}
.checkbox-container label {
font-size: 14px;
color: #ccc;
}
#slot-spin {
padding: 15px 40px;
background: linear-gradient(to bottom, #4CAF50, #388E3C);
color: #fff;
border: none;
border-radius: 50px;
font-size: 20px;
font-weight: bold;
cursor: pointer;
margin-bottom: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
position: relative;
z-index: 10;
transform: translateY(10px);
}
#slot-spin:hover {
background: linear-gradient(to bottom, #66BB6A, #4CAF50);
box-shadow: 0 0 20px rgba(76, 175, 80, 0.7);
transform: translateY(5px);
}
#slot-spin:disabled {
background: #666;
cursor: not-allowed;
box-shadow: none;
transform: translateY(10px);
}
.player-info {
flex: 1;
min-width: 250px;
background: rgba(30, 30, 46, 0.8);
border-radius: 15px;
padding: 20px;
border: 2px solid #4a4a6d;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
height: 100%;
}
.player-info h2 {
text-align: center;
margin-bottom: 20px;
color: #ffd700;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.5);
font-size: 24px;
}
.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;
flex: 1;
}
.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;
}
@media (max-width: 1024px) {
.container {
flex-direction: column;
height: auto;
}
.top-players, .slot-machine-container, .player-info {
width: 100%;
min-width: auto;
}
.slot-machine-container {
order: 2;
}
.top-players, .player-info {
order: 1;
height: 300px;
}
}
</style>
</head>
<body>
<div class="container">
<!-- Левая панель с ТОП-10 игроками -->
<div class="top-players">
<h2>ТОП 10</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="slot-machine-container">
<div class="timer-container">
<div id="slot-timer">Можешь крутить! ✅</div>
</div>
<div class="slot-machine">
<div id="result-display" class="result-display">
Добро пожаловать! Сделайте вашу ставку.
</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">SPIN</button>
</div>
</div>
</div>
<!-- Правая панель с информацией об игроке -->
<div class="player-info">
<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="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="max-win">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>
<script>
(function(){
// Константы для работы с MyBB
const appId = 16777213;
const storageKey = "slotnick";
const GUEST_NICK = "Гость";
const READ_STATUS_KEY = "nygifts_read_status";
const STATS_KEY = "slot_stats";
const TOP_PLAYERS_KEY = "slot_top_players";
// Инициализация MyBB
let mybb;
let userData = {
userId: null,
nickname: GUEST_NICK,
balance: 0,
totalGames: 0,
wins: 0,
maxWin: 0,
currentStreak: 0,
bestStreak: 0,
readStatus: "0"
};
// Инициализация приложения
async function initApp() {
try {
mybb = new MyBB({
appId: appId,
appName: 'Slot Machine'
});
// Получаем информацию о пользователе
const userInfo = await mybb.getUser();
if (userInfo && userInfo.id) {
userData.userId = userInfo.id;
userData.nickname = userInfo.nickname || userInfo.name || GUEST_NICK;
} else {
userData.userId = "guest_" + Math.random().toString(36).substr(2, 9);
}
// Загружаем статистику из хранилища MyBB
await loadUserStats();
await loadTopPlayers();
// Обновляем интерфейс
updateUserInfo();
updateTopPlayers();
} catch (error) {
console.error("Ошибка инициализации MyBB:", error);
// Резервный вариант
userData.userId = "guest_" + Math.random().toString(36).substr(2, 9);
userData.nickname = GUEST_NICK;
updateUserInfo();
}
}
// Загрузка статистики пользователя
async function loadUserStats() {
try {
const stats = await mybb.storage.get(STATS_KEY + "_" + userData.userId);
if (stats) {
Object.assign(userData, stats);
}
} catch (error) {
console.error("Ошибка загрузки статистики:", error);
}
}
// Сохранение статистики пользователя
async function saveUserStats() {
try {
await mybb.storage.set(STATS_KEY + "_" + userData.userId, {
balance: userData.balance,
totalGames: userData.totalGames,
wins: userData.wins,
maxWin: userData.maxWin,
currentStreak: userData.currentStreak,
bestStreak: userData.bestStreak
});
} catch (error) {
console.error("Ошибка сохранения статистики:", error);
}
}
// Загрузка топа игроков
async function loadTopPlayers() {
try {
const topPlayers = await mybb.storage.get(TOP_PLAYERS_KEY);
if (!topPlayers) {
// Инициализируем пустой топ
await mybb.storage.set(TOP_PLAYERS_KEY, []);
}
} catch (error) {
console.error("Ошибка загрузки топа игроков:", error);
}
}
// Обновление топа игроков
async function updateTopPlayersList() {
try {
let topPlayers = await mybb.storage.get(TOP_PLAYERS_KEY) || [];
// Находим текущего игрока в топе
const existingPlayerIndex = topPlayers.findIndex(p => p.userId === userData.userId);
if (existingPlayerIndex !== -1) {
// Обновляем существующего игрока
topPlayers[existingPlayerIndex] = {
userId: userData.userId,
nickname: userData.nickname,
balance: userData.balance
};
} else {
// Добавляем нового игрока
topPlayers.push({
userId: userData.userId,
nickname: userData.nickname,
balance: userData.balance
});
}
// Сортируем по балансу и оставляем топ-10
topPlayers.sort((a, b) => b.balance - a.balance);
topPlayers = topPlayers.slice(0, 10);
// Сохраняем обновленный топ
await mybb.storage.set(TOP_PLAYERS_KEY, topPlayers);
return topPlayers;
} catch (error) {
console.error("Ошибка обновления топа игроков:", error);
return [];
}
}
// Обновление отображения топа игроков
async function updateTopPlayers() {
try {
const topPlayers = await mybb.storage.get(TOP_PLAYERS_KEY) || [];
const topPlayersList = document.getElementById('top-players-list');
if (topPlayers.length === 0) {
topPlayersList.innerHTML = '<li class="player-item"><span class="player-name">Пока нет игроков</span><span class="player-amount">0$</span></li>';
return;
}
topPlayersList.innerHTML = topPlayers.map((player, index) => `
<li class="player-item">
<span class="player-name">${player.nickname}</span>
<span class="player-amount">${player.balance}$</span>
</li>
`).join('');
} catch (error) {
console.error("Ошибка отображения топа игроков:", error);
}
}
const TIMER_HOURS = 0;
const TIMER_MINUTES = 0;
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");
// Обновление информации о пользователе
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('win-rate').textContent = userData.totalGames > 0 ?
Math.round((userData.wins / userData.totalGames) * 100) + '%' : '0%';
document.getElementById('max-win').textContent = userData.maxWin + '$';
document.getElementById('current-streak').textContent = userData.currentStreak;
document.getElementById('best-streak').textContent = userData.bestStreak;
}
let lastSpin = localStorage.getItem("slotLastSpin") || 0;
// Обновление состояния кнопки в зависимости от галочки
function updateSpinButton() {
spinBtn.disabled = !confirmBet.checked || (Date.now() - lastSpin < COOLDOWN);
}
confirmBet.addEventListener("change", updateSpinButton);
function updateTimer() {
let diff = COOLDOWN - (Date.now() - lastSpin);
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();
}
}
setInterval(updateTimer,1000);
updateTimer();
async function spinReels() {
if(!confirmBet.checked) {
resultDisplay.textContent = "Подтвердите стоимость ставки!";
resultDisplay.className = "result-display lose-result";
return;
}
if(Date.now() - lastSpin < 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];
}
if(reward>0) {
resultDisplay.textContent = `ПОБЕДА! Ты получаешь ${reward}$`;
resultDisplay.className = "result-display win-result";
// Обновление данных пользователя
userData.balance += reward;
userData.totalGames += 1;
userData.wins += 1;
userData.currentStreak += 1;
if (userData.currentStreak > userData.bestStreak) {
userData.bestStreak = userData.currentStreak;
}
if (reward > userData.maxWin) {
userData.maxWin = reward;
}
} else {
resultDisplay.textContent = "Неудача! Попробуй еще раз.";
resultDisplay.className = "result-display lose-result";
// Обновление данных пользователя
userData.totalGames += 1;
userData.currentStreak = 0;
}
// Сохраняем статистику и обновляем топ
await saveUserStats();
await updateTopPlayersList();
await updateTopPlayers();
updateUserInfo();
// ---- HTML результата с данными пользователя ----
const picsHTML = results.map(name=>{
const sym = symbols.find(s=>s.name===name);
return `<img src="${sym.url}" style="width:50px;height:50px;margin:2px;">`;
}).join("");
const messageHTML = `<div style="border:2px solid gold; padding:10px; background:#111; color:#fff; font-family:Arial;">
<b>🎰 Результат слота (ID: ${userData.userId}, Ник: ${userData.nickname}):</b><br>
${picsHTML}<br><b>${resultDisplay.textContent}</b><br>
<small>AppID: ${appId}, ReadStatus: ${userData.readStatus}</small>
</div>`;
// ---- КОДИРОВАНИЕ В BASE64 ----
const encoded = btoa(unescape(encodeURIComponent(messageHTML)));
// ---- ОТПРАВКА ЗАКОДИРОВАННОГО ----
window.parent.postMessage({
type:"slotResult",
payload:{
html: encoded,
userId: userData.userId,
nickname: userData.nickname,
appId: appId,
readStatus: userData.readStatus
}
},"*");
lastSpin = Date.now();
localStorage.setItem("slotLastSpin", lastSpin);
updateTimer();
}, Math.max(...durations));
}
spinBtn.addEventListener("click", spinReels);
// Инициализация приложения при загрузке
initApp();
})();
</script>[/html]
Поделиться302025-11-25 00:48:50
[html]
<div class="slot-secure" data-result="PGRpdiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBnb2xkOyBwYWRkaW5nOjEwcHg7IGJhY2tncm91bmQ6IzExMTsgY29sb3I6I2ZmZjsgZm9udC1mYW1pbHk6QXJpYWw7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+8J+OsCDQoNC10LfRg9C70YzRgtCw0YIg0YHQu9C+0YLQsCAoSUQ6IGd1ZXN0X3RzNjd0Z2ZobCwg0J3QuNC6OiDQk9C+0YHRgtGMKTo8L2I+PGJyPgogICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly91cGZvcm1lLnJ1L3VwbG9hZHMvMDAxYy81Mi9iNi8yLzYxMDA3MC5wbmciIHN0eWxlPSJ3aWR0aDo1MHB4O2hlaWdodDo1MHB4O21hcmdpbjoycHg7Ij48aW1nIHNyYz0iaHR0cHM6Ly91cGZvcm1lLnJ1L3VwbG9hZHMvMDAxYy81Mi9iNi8yLzU2NjYwNS5wbmciIHN0eWxlPSJ3aWR0aDo1MHB4O2hlaWdodDo1MHB4O21hcmdpbjoycHg7Ij48aW1nIHNyYz0iaHR0cHM6Ly91cGZvcm1lLnJ1L3VwbG9hZHMvMDAxYy81Mi9iNi8yLzYxMDA3MC5wbmciIHN0eWxlPSJ3aWR0aDo1MHB4O2hlaWdodDo1MHB4O21hcmdpbjoycHg7Ij48YnI+PGI+0J3QtdGD0LTQsNGH0LAhINCf0L7Qv9GA0L7QsdGD0Lkg0LXRidC1INGA0LDQty48L2I+PGJyPgogICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+QXBwSUQ6IDE2Nzc3MjEzLCBSZWFkU3RhdHVzOiAwPC9zbWFsbD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4=">
Загрузка результата...
</div>
<script>
(function(){
try {
var encoded = document.querySelector(".slot-secure").getAttribute("data-result");
var html = decodeURIComponent(escape(atob(encoded)));
document.querySelector(".slot-secure").innerHTML = html;
} catch(e){
document.querySelector(".slot-secure").innerHTML = "<b>Ошибка результата</b>";
}
})();
</script>
[/html]