Здесь делается вжух 🪄

test

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » test » Тестовый форум » слот


слот

Сообщений 1 страница 30 из 48

1

1

0

2

[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]

0

3

[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]

0

4

[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]

0

5

[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]

0

6

[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]

0

7

[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]

0

8

[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]

0

9

[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]

0

10

[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]

0

11

[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]

0

12

[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]

0

13

[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]

0

14

[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]

0

15

[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]

0

16

[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]

0

17

[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]

0

18

[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]

0

19

[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]

0

20

Автоотправка слота:<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>

0

21

[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]

0

22

[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]

0

23

[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]

0

24

[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]

0

25

[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]

0

26

[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]

0

27

[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]

0

28

[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]

0

29

[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]

0

30

[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]

0


Вы здесь » test » Тестовый форум » слот


Рейтинг форумов | Создать форум бесплатно