HWM_CommitMultipleTransfers

Отправить несколько переводов золота за раз

目前為 2017-11-22 提交的版本,檢視 最新版本

// ==UserScript==
// @name         HWM_CommitMultipleTransfers
// @namespace    Небылица
// @version      1.21
// @description  Отправить несколько переводов золота за раз
// @author       Небылица
// @include      /^https{0,1}:\/\/((www|qrator)\.heroeswm\.ru|178\.248\.235\.15)\/transfer\.php.*/
// ==/UserScript==

(function() {
    'use strict';

    // Настройки – указание уникального значения sign и времени задержки
    var sign = ""; // вписать свой sign
    var delay = 1000; // время ожидания между запросами в мс

//============<Вспомогательные функции>============//
    function sendPOSTRequest(url, params){ // Универсалка для отправки POST-запроса
        var xhr = new XMLHttpRequest();
        xhr.open('POST', url, true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.send(params);
        return true;
    }
    function encodeCP1251(text){ // Спасибо Граде за функцию, взял как есть:) Перекодирует русский текст так, чтобы при отправке запроса не выходили кракозябры
        var cp1251_to_utf8 = 
            {
                'А': '%C0', 
                'Б': '%C1',
                'В': '%C2',
                'Г': '%C3',
                'Д': '%C4',
                'Е': '%C5',
                'Ж': '%C6',
                'З': '%C7',
                'И': '%C8',
                'Й': '%C9',
                'К': '%CA',
                'Л': '%CB',
                'М': '%CC',
                'Н': '%CD',
                'О': '%CE',
                'П': '%CF',

                'Р': '%D0', 
                'С': '%D1',
                'Т': '%D2',
                'У': '%D3',
                'Ф': '%D4',
                'Х': '%D5',
                'Ц': '%D6',
                'Ч': '%D7',
                'Ш': '%D8',
                'Щ': '%D9',
                'Ъ': '%DA',
                'Ы': '%DB',
                'Ь': '%DC',
                'Э': '%DD',
                'Ю': '%DE',
                'Я': '%DF',

                'а': '%E0', 
                'б': '%E1',
                'в': '%E2',
                'г': '%E3',
                'д': '%E4',
                'е': '%E5',
                'ж': '%E6',
                'з': '%E7',
                'и': '%E8',
                'й': '%E9',
                'к': '%EA',
                'л': '%EB',
                'м': '%EC',
                'н': '%ED',
                'о': '%EE',
                'п': '%EF',

                'р': '%F0', 
                'с': '%F1',
                'т': '%F2',
                'у': '%F3',
                'ф': '%F4',
                'х': '%F5',
                'ц': '%F6',
                'ч': '%F7',
                'ш': '%F8',
                'щ': '%F9',
                'ъ': '%FA',
                'ы': '%FB',
                'ь': '%FC',
                'э': '%FD',
                'ю': '%FE',
                'я': '%FF',

                'Ё': '%A8',
                'ё': '%B8',

                ' ': '%20', 
                '!': '%21',
                '(': '%28',
                ')': '%29',
                '*': '%2A',
                '+': '%2B',
                ',': '%2C',
                '-': '%2D',
                '.': '%2E',
                '/': '%2F'              
            };
      
        var result = '';
        for(var i = 0; i < text.length; ++i)
        {
            var is_in_array = cp1251_to_utf8[text[i]] != undefined;

            if(is_in_array)                                
                result += cp1251_to_utf8[text[i]];
            else
                result += text[i];
        }    

        return result;
    }
    function isNaturalNumber(n) { // Проверка натуральности числа
        n = n.toString();
        var n1 = Math.abs(n),
            n2 = parseInt(n, 10);
        return !isNaN(n1) && n2 === n1 && n1.toString() === n && n1 !== 0;
    }
    function queryWrapper(nicknames, amounts, descriptions, i, sign, delay, urlAfter, e){ // Обёртка для цикличного отправщика запросов
        i++;
        if (i<nicknames.length){
            sendPOSTRequest("transfer.php",
                        "nick=" + encodeCP1251(nicknames[i]) + "&gold=" + amounts[i] + "&wood=0&ore=0&mercury=0&sulphur=0&crystal=0&gem=0&desc=" + encodeCP1251(descriptions[i]) + "&sign=" + sign);
            e.target.innerHTML = "Отправляем... " + (i+1).toString() + "/" + nicknames.length.toString();
            window.setTimeout(function(){queryWrapper(nicknames, amounts, descriptions, i, sign, delay, urlAfter, e);}, delay);
        } else { // закончили отправку, открываем страницу urlAfter
            window.setTimeout(function(){var newWindow = window.open(urlAfter, "_self");}, delay);
        }
    }
//============</Вспомогательные функции>============//


//============<Вывод формы>============//
    var form = document.getElementsByName("f")[0].parentNode;
    form.innerHTML = "<br><textarea id=nicknames cols=20 rows=10 placeholder=Ники></textarea><textarea id=amounts cols=8 rows=10 placeholder=Суммы></textarea><textarea id=descriptions cols=50 rows=10 placeholder=Подписи></textarea><br><form id=mode><input type=radio name=mode value=fromtop checked>Сверху вниз</input><br><input type=radio name=mode value=frombottom>Снизу вверх</input></form><button type=button id=submit>Отправить</button>";
    form.style = "text-align:center;";
//============</Вывод формы>============//


//============<Обработка данных формы>============//
    var button = document.getElementById("submit");
    button.onclick = function(e){
            try{
                console.log(e);
                e.preventDefault();
                e.target.innerHTML = "Отправляем...";
                e.target.disabled = true;

                // Вытаскиваем из страницы заполненные поля формы
                var nicknames = document.getElementById("nicknames").value.split(/\r?\n/);
                var amounts = document.getElementById("amounts").value.split(/\r?\n/);
                var descriptions = document.getElementById("descriptions").value.split(/\r?\n/);
                var mode = document.querySelector('input[name = "mode"]:checked').value;

                var idHref = document.querySelector("a[href^=\"pl_hunter_stat.php\"]").getAttribute("href");
                var urlAfter = "http://" + location.hostname + "/pl_transfers.php?id=" + idHref.split("=")[1];

//============<Обёртка с проверкой корректности введённых данных>============//
                // Проверка одинаковости количества строк в полях
                if (nicknames.length == amounts.length && amounts.length == descriptions.length){
                    // Проверка того, что все указанные суммы золота – натуральные числа
                    var amountsCorrect = 1;
                    for (var i=0; i<amounts.length; i++){
                        if (!isNaturalNumber(parseInt(amounts[i],10))){
                            alert("Суммы золота для переводов должны быть натуральными числами!");
                            e.target.innerHTML = "Отправить";
                            e.target.disabled = false;
                            amountsCorrect = 0;
                            break;
                         }
                    }
                    // Если всё норм, идём дальше
                    if (amountsCorrect){
                        // Переворачиваем массивы, если выбран вариант "снизу вверх"
                        if (mode === "frombottom") {
                            nicknames.reverse();
                            amounts.reverse();
                            descriptions.reverse();
                        }

                        // Делаем POST-запросы по количеству строк в полях и переходим на заданную страницу после
                        queryWrapper(nicknames, amounts, descriptions, -1, sign, delay, urlAfter, e);
                    }

                } else {
                    alert("Не совпадает количество строк в полях!");
                    e.target.innerHTML = "Отправить";
                    e.target.disabled = false;
                }
//============</Обёртка с проверкой корректности введённых данных>============//

            } catch (e){
                console.log(e);
            }
    };
//============</Обработка данных формы>============// 
})();
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

一年攒够 12 元

云驰互联

云驰互联