// ==UserScript== // @name HWM_CommitMultipleTransfers // @namespace Небылица // @version 1.22 // @description Отправить несколько переводов золота за раз // @author Небылица // @include /^https{0,1}:\/\/((www|qrator)\.heroeswm\.ru|178\.248\.235\.15)\/transfer\.php.*/ // @grant GM_setValue // @grant GM_getValue // @downloadURL none // ==/UserScript== (function() { "use strict"; // Настройки – указание времени ожидания между запросами в мс var delay = 1000; // // Вспомогательные функции function sendGETRequest(url, callback){ // Универсалка для отправки GET-запроса к url с исполнением функции callback при получении ответа var xhr = new XMLHttpRequest(); xhr.open("GET", url, true); xhr.onreadystatechange = function(){ if (xhr.readyState === 4 && xhr.status === 200){ if (typeof callback === "function"){ callback.apply(xhr); } } }; xhr.send(); } function sendPOSTRequest(url, params, callback){ // Универсалка для отправки POST-запроса к url с параметрами params и исполнением функции callback при получении ответа var xhr = new XMLHttpRequest(); xhr.open("POST", url, true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); if (typeof callback === "function"){ xhr.onreadystatechange = function(){ if (xhr.readyState === 4 && xhr.status === 200){ callback.apply(xhr); } }; } xhr.send(params); } function encodeCP1251(text){ // Перекодирует русский текст так, чтобы при отправке запроса не выходили кракозябры (на базе функции из кода Gradient'a) var result = "", CP1251toUTF8 = { "А": "%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 i, maxI = text.length; for (i=0;i" + "" + "" + "
" + "
" + "Сверху вниз" + "
" + "Снизу вверх" + "
" + ""; transferForm.style = "text-align:center;"; // Определение id персонажа и его sign (в случае отсутствия сохранённого значения) var plId = document.querySelector("a[href^='pl_hunter_stat.php']").getAttribute("href").split("=")[1]; if (GM_getValue("sign|#" + plId) === undefined){ // после исполнения запроса к ключу "sign|#" + plId будет приписан sign, кнопку отправки не следует нажимать ранее getSign(plId); } // Обработка данных формы var submitButton = document.getElementById("submit"); submitButton.onclick = function(event){ // выключаем для подстраховки дефолтное действие кнопки, ставим ей стили состояния отправки event.preventDefault(); event.target.innerHTML = "Отправляем..."; event.target.disabled = true; // берём из хранилища sign персонажа var sign = GM_getValue("sign|#" + plId); // вытаскиваем из страницы заполненные поля формы и собираем адрес для перехода после отправки переводов var nicknames = document.getElementById("nicknames").value.split(/\r?\n/), amounts = document.getElementById("amounts").value.split(/\r?\n/), descriptions = document.getElementById("descriptions").value.split(/\r?\n/), mode = document.querySelector("input[name='mode']:checked").value, urlAfter = "http://" + location.hostname + "/pl_transfers.php?id=" + plId; // проверка одинаковости количества строк в полях if (nicknames.length === amounts.length && amounts.length === descriptions.length){ // проверка того, что все указанные суммы золота – натуральные числа var amountsCorrect = true, i, maxI = amounts.length; for (i=0;i