Кейсы

Скрипт для автоматического боя с покемонами в онлайн-играх копии League-17

После того, как в 2016 году оригинальная браузерная игра по покемонам League-17.ru получила от Nintendo околосудебное письмо с требованием убрать торговую марку, администраторы поменяли сайт на другую игру.

Однако сейчас в 2021 году появились сайты-клоны старой игрушки. Стало их достаточно много, насчитал около 8 штук.

Выбрав одну из них, мне стало лень постоянно сидеть в игре, поэтому был написан скрипт для браузера (любой, где есть возможность открыть консоль), в котором можно запустить что-то типо автоматического боя.

Как запустить?

  1. Открываем вкладку с игрой
  2. Если у вас Google Chrome, нажимаем кнопку F12.
  3. Открывается какой-то монстр.
  4. Находим там раздел Console.
  1. Копируем код, который написан ниже с некоторыми изменениями.
  2. Нажимаем Enter.
  3. Радуемся:)

Как приспособить код для своего покемона?

В коде есть первая строка let ataks = [«#atk17», «#atk52″,»#atk163», «#atk53»];. В ней нужно аккуратно поменять числа на другие. Узнать номер атаки можно через инфо атаки, например, у атаки Sand Attack номер будет 28 (см фото)

let ataks = ["#atk17", "#atk52","#atk163", "#atk53"];
let escaped = ["214", "251", "280", "328", "333", "403", "412", "412.2", "413", "413.1", "420", "511", "513", "515", "588", "616", "627", "629", "631", "632", "641", "641.1", "642", "642.1", "708", "710", "744", "765", "766"]
 
getJSON = function (url, sendingData, successHandler, errorHandler = null) {
    let xhr = typeof XMLHttpRequest != 'undefined'
    ? new XMLHttpRequest()
    : new ActiveXObject('Microsoft.XMLHTTP');
    xhr.open('POST', url, true);
    xhr.onreadystatechange = function () {
        let status;
        let data;
        if (xhr.readyState == 4) { // `DONE`
            status = xhr.status;
            if (status == 200) {
                data = xhr.responseText;
                successHandler && successHandler(data);
            } else {
                errorHandler && errorHandler(status);
            }
        }
    };
    xhr.send(sendingData);
};
let audio = new Audio('https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3');
// запускается каждые 2 секунды
let intervalId = window.setInterval(function(){
 
    // проверка на шайни и сбегов 
    let shine_1 =_location.document.querySelectorAll(".poketitle");
    if (shine_1.length == 0) {return;}
    if (shine_1[1].innerText.toUpperCase().indexOf("SHINE") != -1) {console.log("Shine"); audio.play(); return;}
    if (shine_1[1].innerText.toUpperCase().indexOf("ШАЙНИ") != -1) {console.log("Shine"); audio.play();return;}
    let quit = 0;
    escaped.forEach(e =>{
        if (shine_1[1].innerText.toUpperCase().indexOf(e) != -1) {quit = 1; console.log(e); return;}
    })
 
    if (quit == 1) {audio.play(); return;}
 
    // если вылезла капча, меняем название страницы и выходим из функции
    captcha = _location.document.querySelector('[name="captcha"]')
    if (captcha) {audio.play();}
 
    // если есть кнопка "уйти" - жмякаем
    eb = _location.document.querySelector("#exitFight")
    if (eb) {console.log("Уйти");eb.click();}
 
    // если есть кнопка атака (номера атак меняю вручную)
    // сначала юзаю по-максимуму одну атаку, затем,если больше нельзя юзать, то перехожу на другую
    let is_hill = 0;
    for (i =0; i<ataks.length; i++) {
        e = ataks[i];
        buttonAttack = _location.document.querySelector(e)
        if (buttonAttack) {
            if (parseInt(buttonAttack.parentElement.children[3].innerText.replace(/\s+/g, '')[0]) == 0) {
                is_hill +=1; 
                continue;
            } else {
                
                console.log("Атака "+ e);
                buttonAttack.click()
                break
            }
        }
    }
	
	let Struggle = _location.document.querySelector("#atk165")
    if (Struggle) {
        let sendingData = new FormData();
        sendingData.append("pid", 0);
        sendingData.append("i_id", 17);
        sendingData.append("but", 'use');
        getJSON("https://league17reborn.ru/game.php?fun=fight",sendingData, data =>{ return;} )
    }
}, 2000);