hwm_roulette

hwm_roulette_script

目前为 2023-12-02 提交的版本。查看 最新版本

// ==UserScript==
// @name         hwm_roulette
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  hwm_roulette_script
// @author       Salmon
// @match        https://my.lordswm.com/roulette.php*
// @match        https://www.heroeswm.ru/roulette.php*
// @include      https://my.lordswm.com/roulette.php*
// @include      https://www.heroeswm.ru/roulette.php*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=lordswm.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    const styledBtn = 'border: none; overflow: hidden; width:350px; margin-bottom: 4px; margin-top: 4px; text-overflow: ellipsis; white-space: nowrap; color: #592c08; font-family: verdana,geneva,arial cyr; position: relative; text-align: center; font-weight: 700; background: url(../i/homeico/art_btn_bg_gold.png) #dab761; background-size: 100% 100%; border-radius: 5px; box-shadow: inset 0 0 0 1px #fce6b0,inset 0 0 0 2px #a78750,0 0 0 1px rgba(0,0,0,.13); line-height: 25px; cursor: pointer; transition: -webkit-filter .15s;transition: filter .15s;'
    const nums = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36'];

    const createEl = (el, style, innerText, placeholder, type) => {
        let element = document.createElement(el);
        if (style) element.style = style;
        if (innerText) element.innerText = innerText;
        if (placeholder) element.placeholder = placeholder;
        if (type) element.type = type;
        return element;
    }


    let toogleRouletteScript = JSON.parse(localStorage.getItem('toogleRouletteScript'));
    if (toogleRouletteScript === null) localStorage.setItem('toogleRouletteScript', JSON.stringify(true));
    let toogleShow = toogleRouletteScript;

    let moneyValue = JSON.parse(localStorage.getItem('moneyValue'));
    if (moneyValue === null) localStorage.setItem('moneyValue', JSON.stringify(1000));

    let link = [...document.getElementsByTagName('a')];
    link = link.filter(el => el.innerText === 'Прошлая игра');
    if (link[1] === undefined) {
        setTimeout(() => location.reload(), 10000);
        return;
    } else {
        link = link[1].href;
    }

    const fetchXml = (callback) => {
        const xhr = new XMLHttpRequest();
        xhr.open('get', link);
        xhr.setRequestHeader('Content-type', 'text/html; charset=windows-1251');
        if (xhr.overrideMimeType) {
            xhr.overrideMimeType('text/html; charset=windows-1251');
        }

        xhr.addEventListener('load', () => {
            let parser = new DOMParser();
            let doc = parser.parseFromString(xhr.responseText, "text/html");
            callback(doc);
        })
        xhr.send();
    }

    let betsAmountHTML = document.getElementsByTagName('table')[16];
    let betsAmountBlock = [...betsAmountHTML.getElementsByTagName('tr')];
    let label = betsAmountBlock.shift();
    betsAmountBlock = betsAmountBlock.sort((a, b) => Number(b.firstChild.innerText.replace(',', '')) - Number(a.firstChild.innerText.replace(',', '')));
    betsAmountBlock = betsAmountBlock.reduce((acc, el) => {
        acc += `<tr>${el.innerHTML}</tr>`;
        return acc;
    }, label.innerHTML)
    betsAmountHTML.innerHTML = `<tbody>${betsAmountBlock}</tbody>`;

    //Init bet buttons and inputs
    let betInput = [...document.getElementsByTagName('input')]
    betInput = betInput.filter(el => el.name === 'bet')[0];

    let betType = [...document.getElementsByTagName('input')]
    betType = betType.filter(el => el.name === 'bettype')[0];

    let betBtn = [...document.getElementsByTagName('input')]
    betBtn = betBtn.filter(el => el.value === 'Поставить!')[0];

    //Creating panel element and playstyle buttons
    const panel = createEl('div', 'position: absolute; top: 150px; right: 30px; width: 450px; heigth: 250px; background-color: wheat; padding: 7px; text-align: center;', '');
    panel.style.visibility = toogleShow ? 'visible' : 'hidden';
    const resetBtn = createEl('div', 'width: 40px; height: 40px; cursor: pointer;');
    resetBtn.innerHTML = `<div><img style='width: 40px; height: 40px' src='https://cfcdn.lordswm.com/i/pl_info/btn_reset.png'/></div>`;
    const setMoneyValue = createEl('input', 'height: 25px; width: 350px; border: 1px solid #592c08; border-radius: 5px;', '', 'ставка', 'number');
    const setMoneyValueBtn = createEl('button', styledBtn, 'Задать ставку');
    const setMoneyValueInfoBlock = createEl('div', 'font-weight: bold;', `Ставка: ${moneyValue}`);
    const toogleRouletteScriptBtn = createEl('div', 'width: 90px; height: 90px; border-radius: 100%; background: wheat; cursor: pointer; position: absolute; z-index: 99999; top: 110px; left: 5px;');

    toogleRouletteScriptBtn.addEventListener('click', () => {
        toogleShow = !toogleShow;
        localStorage.setItem('toogleRouletteScript', JSON.stringify(toogleShow));
        panel.style.visibility = toogleShow ? 'visible' : 'hidden';
    })
    toogleRouletteScriptBtn.innerHTML = `<div><img style='width: 90px; height: 90px' src='https://cfcdn.lordswm.com/i/new_top/_panelRoulette.png'/></div>`;
    const betHistoryBlock = createEl('div', 'position: absolute; top: 300px; right: 30px;');
    const block = createEl('table');
    const br = createEl('div', 'border-radius: 7px; border-bottom: 4px solid rgb(218, 183, 97); ; border-top: 4px solid rgb(218, 183, 97); margin: 6px;');
    betHistoryBlock.appendChild(block);
    document.body.appendChild(toogleRouletteScriptBtn);

    //     const fetchXml = () => {
    //         return new Promise((resolve, reject) => {
    //             const xhr = new XMLHttpRequest();
    //             xhr.open('get', 'https://my.lordswm.com/inforoul.php?id');
    //             xhr.setRequestHeader('Content-type', 'text/html; charset=windows-1251');
    //             if (xhr.overrideMimeType) {
    //                 xhr.overrideMimeType('text/html; charset=windows-1251');
    //             }

    //             xhr.addEventListener('load', () => {
    //                 let parser = new DOMParser();
    //                 let doc = parser.parseFromString(xhr.responseText, "text/html");
    //                 let betHistory = doc.getElementsByTagName('table')[1];
    //                 betHistory = [...betHistory.getElementsByTagName('tr')];
    //                 let time = betHistory[0];
    //                 let bet = betHistory[3];
    //                 block.innerHTML = `<table class="wbwhite"><tbody>${betHistoryBlock.innerHTML} ${time.innerHTML} ${bet.innerHTML} </tbody></table>`;
    //             })
    //             xhr.send();
    //         })}

    let playOneNum = JSON.parse(localStorage.getItem('playOneNum'));
    if (playOneNum === null) localStorage.setItem('playOneNum', JSON.stringify(true));

    let playMultiNums = JSON.parse(localStorage.getItem('playMultiNums'));
    if (playMultiNums === null) localStorage.setItem('playMultiNums', JSON.stringify(false));

    let playToogle = JSON.parse(localStorage.getItem('playToogle'));
    if (playToogle === null) localStorage.setItem('playToogle', JSON.stringify(false));

    const playStyleLabel = createEl('div', 'text-align: center; font-size: 14px; font-weight: bold; ', `Сейчас включен режим ${playOneNum ? '1 число по кругу' : '4 числа по кругу'}`)
    const setPlayOneNum = createEl('button', styledBtn, 'Играть 1 число по кругу');
    const setPlayMultiNums = createEl('button', styledBtn, 'Играть 4 числа по кругу');
    const setPlayToogle = createEl('button', styledBtn, `${playToogle ? 'Остановить скрипт' : 'Запустить скрипт'}`)

    setPlayOneNum.addEventListener('click', () => {
        localStorage.setItem('playOneNum', JSON.stringify(true));
        localStorage.setItem('playMultiNums', JSON.stringify(false));
        location.reload();
    });

    setPlayMultiNums.addEventListener('click', () => {
        localStorage.setItem('playOneNum', JSON.stringify(false));
        localStorage.setItem('playMultiNums', JSON.stringify(true));
        location.reload();
    });

    setPlayToogle.addEventListener('click', () => {
        let toogle = playToogle;
        localStorage.setItem('playToogle', JSON.stringify(!playToogle));
        location.reload();
    });

    setMoneyValueBtn.addEventListener('click', () => {
        localStorage.setItem('moneyValue', JSON.stringify(setMoneyValue.value));
        location.reload();
    });

    panel.appendChild(playStyleLabel);
    panel.appendChild(setPlayOneNum);
    panel.appendChild(setPlayMultiNums);
    panel.appendChild(setPlayToogle);
    panel.appendChild(setMoneyValue);
    panel.appendChild(setMoneyValueInfoBlock);
    panel.appendChild(setMoneyValueBtn);
    document.body.appendChild(panel);

    //Gameplays
    if (playOneNum === true) {
        let temporaryNumsArray = JSON.parse(localStorage.getItem('temporaryNumsArray'));
        let numsCounter = JSON.parse(localStorage.getItem('numsCounter'));

        if (numsCounter == null) {
            localStorage.setItem('numsCounter', JSON.stringify(0));
            location.reload();
        }

        if (!temporaryNumsArray) {
            localStorage.setItem('temporaryNumsArray', JSON.stringify(nums));
            location.reload();
        }

        const playBlock = createEl('div', 'diplay: flex; flex-directon: column');
        const setNumsCounterInput = createEl('input', 'height: 25px; width: 350px; border: 1px solid #592c08; border-radius: 5px;', '', 'количество прокруток всех чисел', 'number');
        const setNumsCounterBtn = createEl('button', styledBtn, 'Задать');
        const numsCounertInfoBlock = createEl('div', 'font-weight: bold;', '');

        resetBtn.addEventListener('click', () => {
            localStorage.setItem('numsCounter', JSON.stringify(0));
            localStorage.setItem('temporaryNumsArray', JSON.stringify(nums));
            location.reload();
        })

        playBlock.appendChild(setNumsCounterInput);
        playBlock.appendChild(setNumsCounterBtn);
        playBlock.appendChild(numsCounertInfoBlock);
        playBlock.appendChild(resetBtn);

        numsCounertInfoBlock.innerText = `Осталось прокруток ${temporaryNumsArray.length} | Следующее число ${temporaryNumsArray.at(0)}`;

        setNumsCounterBtn.addEventListener('click', () => {
            let num = Number(setNumsCounterInput.value);
            if (num > 0) {
                localStorage.setItem('numsCounter', JSON.stringify(num * nums.length));
                let temp = [];
                for (let i = 0; i < num; i++) {
                    temp = [...temp, ...nums];
                }
                localStorage.setItem('temporaryNumsArray', JSON.stringify(temp));
                location.reload();
            }
        });


        panel.appendChild(playBlock);

        let checkMyBet = [...document.getElementsByTagName('center')];
        checkMyBet = checkMyBet[3].parentElement;
        checkMyBet = checkMyBet.getElementsByTagName('tr')[1].getElementsByTagName('td')[1].innerText;

        if (playToogle) {
            if (checkMyBet.includes('Straight up')) {
                return;
            } else if (temporaryNumsArray.length && numsCounter > 0) {
                betInput.value = moneyValue;
                betType.value = `Straight up ${temporaryNumsArray[0]}`;
                temporaryNumsArray.shift();
                localStorage.setItem('temporaryNumsArray', JSON.stringify(temporaryNumsArray));
                fetchXml();
                betBtn.click();
            } else {
                return;
            }
        }
    }

    if (playMultiNums === true) {
        let multiNumsMainArray = JSON.parse(localStorage.getItem('multiNumsMainArray'));
        let multiNumsAdditionalArray = JSON.parse(localStorage.getItem('multiNumsAdditionalArray'));
        let gameIndex = localStorage.getItem('gameIndex');
        let multiNumsCounter = localStorage.getItem('multiNumsCounter');

        if (multiNumsMainArray === null) {
            localStorage.setItem('multiNumsMainArray', JSON.stringify([]));
            location.reload();
        }

        if (multiNumsAdditionalArray === null) {
            localStorage.setItem('multiNumsAdditionalArray', JSON.stringify([]));
            location.reload();
        }

        if (gameIndex === null) {
            localStorage.setItem('gameIndex', 0);
            location.reload();
        }

        if (multiNumsCounter === null) {
            localStorage.setItem('multiNumsCounter', 0);
            location.reload();
        }

        const playBlock = createEl('div', 'diplay: flex; flex-directon: column');

        const setmultiNumsMainArray = createEl('input', 'height: 25px; width: 350px; border: 1px solid #592c08; border-radius: 5px;', '', 'основной массив', 'text');
        const setmultiNumsAdditionalArray = createEl('input', 'height: 25px; width: 350px; border: 1px solid #592c08; border-radius: 5px;', '', 'дополнительный массив', 'text');
        const setmultiNumsCounter = createEl('input', 'height: 25px; width: 350px; border: 1px solid #592c08; border-radius: 5px;', '', 'число повторений', 'number');
        const setMainArrayBtn = createEl('button', styledBtn, 'Задать числа основного массива');
        const setAdditionalArrayBtn = createEl('button', styledBtn, 'Задать числа дополнительного массива');
        const setMultiNumsCounterBtn = createEl('button', styledBtn, 'Задать числа повторений');

        const multiNumsMainArrayInfoBlock = createEl('div', 'font-weight: bold;', `Основной массив: ${multiNumsMainArray}`);
        const multiNumsAdditionalArrayInfoBlock = createEl('div', 'font-weight: bold;', `Дополнительный массив: ${multiNumsAdditionalArray}`);
        const multiNumsCounterInfoBlock = createEl('div', 'font-weight: bold;', `Количество повторений: ${multiNumsCounter}`);

        setMainArrayBtn.addEventListener('click', () => {
            let nums = setmultiNumsMainArray.value;
            nums = nums.split(' ');
            localStorage.setItem('multiNumsMainArray', JSON.stringify(nums));
            location.reload();
        });

        setAdditionalArrayBtn.addEventListener('click', () => {
            let nums = setmultiNumsAdditionalArray.value;
            nums = nums.split(' ');
            localStorage.setItem('multiNumsAdditionalArray', JSON.stringify(nums));
            location.reload();
        })

        setMultiNumsCounterBtn.addEventListener('click', () => {
            if (!setmultiNumsCounter.value) {
                alert('Необходимо указать число');
            } else {
                localStorage.setItem('multiNumsCounter', Number(setmultiNumsCounter.value));
                location.reload();
            }
        })

        resetBtn.addEventListener('click', () => {
            localStorage.setItem('multiNumsMainArray', JSON.stringify([]));
            localStorage.setItem('multiNumsAdditionalArray', JSON.stringify([]));
            localStorage.setItem('gameIndex', 0);
            localStorage.setItem('multiNumsCounter', 0);
            location.reload();
        })

        playBlock.appendChild(br);
        playBlock.appendChild(setmultiNumsMainArray);
        playBlock.appendChild(multiNumsMainArrayInfoBlock);
        playBlock.appendChild(setMainArrayBtn);
        playBlock.appendChild(br.cloneNode(true));
        playBlock.appendChild(setmultiNumsAdditionalArray);
        playBlock.appendChild(multiNumsAdditionalArrayInfoBlock);
        playBlock.appendChild(setAdditionalArrayBtn);
        playBlock.appendChild(br.cloneNode(true));
        playBlock.appendChild(multiNumsCounterInfoBlock);
        playBlock.appendChild(setmultiNumsCounter);
        playBlock.appendChild(setMultiNumsCounterBtn);
        playBlock.appendChild(resetBtn);

        panel.appendChild(playBlock);

        let checkMyBet = [...document.getElementsByTagName('center')];
        checkMyBet = checkMyBet[3].parentElement;
        let checkMyFirstBet = checkMyBet.getElementsByTagName('tr')[1].getElementsByTagName('td')[1].innerText;
        let checkMySecondBet = '';
        let checkMyThirdBet = '';
        let checkMyFourthBet = '';

        if (checkMyBet.getElementsByTagName('tr')[2]) checkMySecondBet = checkMyBet.getElementsByTagName('tr')[2].getElementsByTagName('td')[1].innerText;
        if (checkMyBet.getElementsByTagName('tr')[3]) checkMyThirdBet = checkMyBet.getElementsByTagName('tr')[3].getElementsByTagName('td')[1].innerText;
        if (checkMyBet.getElementsByTagName('tr')[4]) checkMyFourthBet = checkMyBet.getElementsByTagName('tr')[4].getElementsByTagName('td')[1].innerText;


        if (playToogle && Number(multiNumsCounter) > 0) {
            if (+gameIndex >= 4) {
                localStorage.setItem('gameIndex', 0);
                localStorage.setItem('multiNumsCounter', Number(multiNumsCounter) - 1);
                location.reload();
            }
            const checkLastBet = (doc) => {
                let lastNumber = doc.getElementsByTagName('table')[1];
                lastNumber = lastNumber.firstChild;
                lastNumber = lastNumber.firstChild.getElementsByTagName('b')[0].innerText;

                if (multiNumsMainArray.indexOf(lastNumber) !== -1) {
                    multiNumsMainArray = multiNumsMainArray.filter(el => el !== lastNumber);
                    multiNumsMainArray.push(multiNumsAdditionalArray[0]);
                    localStorage.setItem('multiNumsMainArray', JSON.stringify(multiNumsMainArray));
                    multiNumsAdditionalArray.shift();
                    localStorage.setItem('multiNumsAdditionalArray', JSON.stringify(multiNumsAdditionalArray));
                    location.reload();
                }
                if (checkMyFirstBet.includes('Straight up') && checkMySecondBet.includes('Straight up') && checkMyThirdBet.includes('Straight up') && checkMyFourthBet.includes('Straight up')) {
                    return;
                } else {
                    betInput.value = moneyValue;
                    betType.value = `Straight up ${multiNumsMainArray[gameIndex]}`;
                    localStorage.setItem('gameIndex', Number(gameIndex) + 1);
                    betBtn.click();
                }
            }
            fetchXml(checkLastBet);
        }
    }

})();