Greasy Fork is available in English.

HWM_InstantParametersChange

Мгновенная переброска параметров до заданных значений, не требует места в инвентаре для зелья. Использована форма от похожего скрипта авторства УжеЛежу.

// ==UserScript==
// @name          HWM_InstantParametersChange
// @version       1
// @namespace     Рианти
// @description   Мгновенная переброска параметров до заданных значений, не требует места в инвентаре для зелья. Использована форма от похожего скрипта авторства УжеЛежу.
// @include       *heroeswm*/home.php*
// @include       http://178.248.235.15/home.php*
// @grant         GM_xmlhttpRequest
// ==/UserScript==

var xmlHttp = false;
var host = location.host;
var rst = 1;

as = document.getElementsByTagName("a");
counter_stat_begin = 0;
counter_stat_end = 0;
tbl = false;
stats_names = ["attack", "defence", "power", "knowledge"];
urls = [];
stats = [];
counts_url = 0;
inc_all = true;
var tr_info = false;
var tbl = false;
var sendStatus = 0;
var parameter_sets = [];
var name_parameter_sets = [];
var count_parameter_sets = 0;
var tgr_stance;

imgs = document.getElementsByTagName("img");
for (id_img in imgs) {
    img = imgs[id_img].src;
    if (img && img.indexOf("s_luck.gif") > -1)
        tr_info = imgs[id_img].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
}

td_reset = tr_info.insertCell(2);
td_reset.align = "center";
td_reset.style= "vertical-align: top;";
style_button = "style='background-color:#F5F3EA;cursor:pointer;border-radius:4px;border:1px solid #5D413A;padding:3'";
style_delete = "style='background-color:#FF0000;cursor:pointer;border-radius:4px;border:1px solid #5D413A;padding:3;color:#FFFFFF'";

function init_reset_info() {
    var ii = 0;
    parameter_sets = [];
    name_parameter_sets = [];
    for (var i = 0; i < 10; i++) {
        if (localStorage['parameter_sets_' + i]) {
            parameter_sets[ii] = localStorage['parameter_sets_' + i];
            name_parameter_sets[ii] = localStorage['name_parameter_sets_' + i];
            if (i > ii) {
                delete localStorage['parameter_sets_' + i];
                localStorage['parameter_sets_' + ii] = parameter_sets[ii];
                delete localStorage['name_parameter_sets_' + i];
                localStorage['name_parameter_sets_' + ii] = name_parameter_sets[ii];
            }
            ii++;
        }
    }

    count_parameter_sets = parameter_sets.length;
    reset_info = "<table width=100%>";
    reset_info += "<tr align='center'><td colspan=7 " + style_button + " id=reset>Сбросить параметры</td></tr>";
    reset_info += "<tr align='center'><td colspan=7 " + style_button + " id=tgr_switch>Наборы статов</td></tr>";
    {
        reset_info += "<tr align='center' class='tgr'><td colspan=7>Наборы параметров:</td></tr>";
        if (parameter_sets.length == 0) {
            reset_info += "<tr align='center' class='tgr'><td colspan=6>0 наборов</td></tr>";
        } else {
            for (var j = 0; j < parameter_sets.length; j++) {
                set_infos = parameter_sets[j].split(".");
                set_info = "";
                for (var k = 0; k < set_infos.length; k++) {
                    if (set_infos[k] / 1 > 0) {
                        set_info += "+<b>" + set_infos[k] + "</b><img width=15 src='http://dcdn.heroeswm.ru/i/s_" + stats_names[k] + ".gif'>";
                    }
                }
                set_info = set_info.substr(1);
                set_info = (j + 1) + ". " + name_parameter_sets[j] + " " + "<span style='font-size:11px'>[" + set_info + "]</span>";
                reset_info += "<tr align='center' class='tgr'>";
                reset_info += "<td colspan=5 align=left>" + set_info + "</td>";
                reset_info += "<td id=apply_set_" + j + " " + style_button + " width=10 title='Применить'><b>(+)</b></td>";
                reset_info += "<td id=delete_set_" + j + " " + style_delete + " width=10 title='Удалить'><b>X</b></td>";
                reset_info += "</tr>";
            }
        }
        reset_info += "<tr align='center' class='tgr'><td colspan=7>Добавить набор:</td></tr>";
        reset_info += "<tr align='center' class='tgr'>";
        reset_info += "<td>Имя</td>";
        reset_info += "<td><img src='http://dcdn.heroeswm.ru/i/s_attack.gif'></td>";
        reset_info += "<td><img src='http://dcdn.heroeswm.ru/i/s_defence.gif'></td>";
        reset_info += "<td><img src='http://dcdn.heroeswm.ru/i/s_power.gif'></td>";
        reset_info += "<td><img src='http://dcdn.heroeswm.ru/i/s_knowledge.gif'></td>";
        reset_info += "<td id=add_set rowspan=2 colspan=2 " + style_button + ">Добавить</td>";
        reset_info += "</tr>";
        reset_info += "<tr align='center' class='tgr'>";
        reset_info += "<td><input id=set_name type=text size=10 maxlength=8></td>";
        reset_info += "<td><input id=set_a type=text size=1></td>";
        reset_info += "<td><input id=set_d type=text size=1></td>";
        reset_info += "<td><input id=set_p type=text size=1></td>";
        reset_info += "<td><input id=set_k type=text size=1></td>";
        reset_info += "</tr>";
        reset_info += "</table>";
        td_reset.innerHTML = reset_info;
        for (var k = 0; k < parameter_sets.length; k++) {
            $('apply_set_' + k).addEventListener(
                "click",
                function () {
                    var id = this.id;
                    count_set = id.split("_")[2];
                    set_infos = parameter_sets[count_set].split(".");
                    quickApplyParams(set_infos);
                }
            );
            $('delete_set_' + k).addEventListener(
                "click",
                function () {
                    var id = this.id;
                    count_set = id.split("_")[2];
                    console.log(localStorage['parameter_sets_' + count_set]);
                    if (localStorage['parameter_sets_' + count_set]) {
                        localStorage.removeItem('parameter_sets_' + count_set);
                        localStorage.removeItem('name_parameter_sets_' + count_set);
                        console.log(localStorage['parameter_sets_' + count_set]);
                        init_reset_info();
                    }
                }
            );
        }
        $('add_set').onclick = add_set;
    }
    $('reset').onclick = reset_parameters;
    $('tgr_switch').onclick = toggle_setups;
    if(tgr_stance == null){
        tgr_stance = 1;
        toggle_setups();
    }
}

init_reset_info();

function $( id ) {
    return document.getElementById( id );
}

function toggle_setups(){
    tgr_stance = (tgr_stance + 1) % 2;
    var tgr_rows = document.querySelectorAll('tr[class="tgr"]'),
        rid;
    for (rid = 0; rid < tgr_rows.length; rid++){
        if(!tgr_stance) tgr_rows[rid].style = 'visibility: collapse;';
        else tgr_rows[rid].style = 'visibility: initial;';
    }
}

function startAjax() {
    if (!xmlHttp && typeof XMLHttpRequest != 'undefined')
        xmlHttp = new XMLHttpRequest();
}

function send(url, afterSend) {
    xmlHttp.open("GET", url, true);
    xmlHttp.onreadystatechange = afterSend;
    xmlHttp.send(null);
}

function afterSend() {
    rst = xmlHttp.readyState;
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            if (sendStatus == 1) {
                sign = xmlHttp.responseText.split("sign=");
                sign = sign[1].substr(0, sign[1].indexOf("\""));
                if (sign) {
                    send("http://" + host + "/shop.php?b=reset_tube&cat=potions&sign=" + sign, afterSend);
                    sendStatus = 2;
                }
            } else if (sendStatus == 2) {
                send("http://" + host + "/inventory.php", afterSend);
                sendStatus = 3;
            } else if (sendStatus == 3) {
                text = xmlHttp.responseText;
                reset_tube = text.split("id=reset_tube");
                reset_tube = reset_tube[1].split("?dress=");
                reset_tube = reset_tube[1].substr(0, reset_tube[1].indexOf("'"));
                if (reset_tube) {
                    send("http://" + host + "/inventory.php?dress=" + reset_tube, afterSend);
                    sendStatus = 4;
                }
            } else if (sendStatus == 4) {
                location.href = "http://" + host + "/home.php";
            } else {
                counter_stat_end++;
                $("progress_stats").style.width = counter_stat_end * 100 / points + "%";
                $("progress_stats").innerHTML = "<b>" + counter_stat_end + "/" + points + "</b>";
                if (counter_stat_end == points)
                    location.href = "http://" + host + "/home.php";

                console.log(stats[counter_stat_end - 1]);
                n = tbl.rows[stats[counter_stat_end - 1]].cells[2].innerHTML;
                n = n.substr(n.indexOf("+") + 1);
                n = n.substr(0, n.indexOf("<"));
                tbl.rows[stats[counter_stat_end - 1]].cells[2].innerHTML = "<b style='color:red'>&nbsp;+" + (n / 1 + 1) + "</b>";
                m = tbl.rows[4].cells[0].innerHTML;
                m = m.substr(m.lastIndexOf(" ") + 1);
                console.log("m = '" + m + "'");
                tbl.rows[4].cells[0].innerHTML = "<b>Свободных очков от навыка:</b> " + (m / 1 - 1);
                rst = 0;
            }
        }
    }
}

function reset_parameters() {
    send("http://" + host + "/shop.php?cat=potions", afterSend);
    $("reset").innerHTML = "Сбросить параметры <img width=15 src='http://dcdn2.heroeswm.ru/i/loading.gif'>";
    sendStatus = 1;
}

function add_set() {
    var parameter_set = ($('set_a').value ? $('set_a').value : 0) + ".";
    parameter_set += ($('set_d').value ? $('set_d').value : 0) + ".";
    parameter_set += ($('set_p').value ? $('set_p').value : 0) + ".";
    parameter_set += ($('set_k').value ? $('set_k').value : 0);
    localStorage['parameter_sets_' + count_parameter_sets] = parameter_set;
    localStorage['name_parameter_sets_' + count_parameter_sets] = $('set_name').value ? $('set_name').value : "Набор" + (count_parameter_sets + 1);
    init_reset_info();
}

function quickApplyParams(stats) {
    var attack = parseInt(stats[0]),
        defence = parseInt(stats[1]),
        SM = parseInt(stats[2]),
        knowlege = parseInt(stats[3]);

    requestPage ('http://www.heroeswm.ru/skillwheel.php', function (dom) {
        var curPerks = dom.querySelector('object[classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"] param[name="FlashVars"]').value.split('|');
        curPerks[0] = curPerks[0].split('$');
        curPerks[0] = '$' + curPerks[0][curPerks[0].length - 1];
        var chosenPerks = [];

        for (var i = 8; i < curPerks.length; i += 9)
            if(curPerks[i] == '1') chosenPerks.push(curPerks[i - 8].replace('$', ''));

        var params = '', buildperks0 = '', t;

        for (var p = 0; p <=30; p++) {
            if(chosenPerks.length) {
                t = chosenPerks.shift();
                params = 'param' + p + '=' + t + '&' + params;
                buildperks0 += t + '%3B';
            } else {
                params = 'param' + p + '=&' + params;
            }
        }
        
        var enlightenmentStats = Math.floor(parseInt(document.body.innerHTML.match(/Боевой уровень: (\d+)/)[1]) / new Object({0: 99, 1: 4, 2: 3, 3: 2})[(buildperks0.match(/enlightenment/g) || []).length]);
        var maxStatId = [{i: 0, v: attack}, {i: 1, v: defence}, {i: 2, v: SM}, {i: 3, v: knowlege}].sort(function(a,b){return b.v > a.v})[0].i;
        var enlightenmentString = 'pstat3=0&pstat2=0&pstat1=0&pstat0=0'.replace('pstat' + maxStatId + '=0', 'pstat' + maxStatId + '=' + enlightenmentStats);

        var postVars = 'loading=true&rand=0%2E521691998932511&reset%5Fall=0&setall=1&setpstats=' + (enlightenmentStats > 0 ? 1 : 0) + '&' + params + 'buildperks0=' + buildperks0 + '&buildbaseid0=99&buildname0=&setstats=1&stat3=' + knowlege + '&stat2=' + SM + '&stat1=' + defence + '&stat0=' + attack + '&' + enlightenmentString + '&onData=%5Btype%20Function%5D';
        applyChanges('http://www.heroeswm.ru/skillwheel.php', postVars);
    });
}

function applyChanges(url, params) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open('POST', url, true);
    xmlhttp.overrideMimeType('text/plain; charset=windows-1251');
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send(params);
    xmlhttp.onreadystatechange = function() {
    if(xmlhttp.status == 200)
        document.location.reload();
    }
}

function requestPage (url, onloadHandler) {
  console.log('[HWM_InstantParametersChange] loading: ', url);
  GM_xmlhttpRequest({
    overrideMimeType: 'text/plain; charset=windows-1251',
    synchronous: false,
    url: url,
    method: "GET",
    onload: function(response) {
      onloadHandler(new DOMParser().parseFromString(response.responseText, 'text/html').documentElement);
    },
    onerror: function() { requestPage (url, onloadHandler) },
    ontimeout: function() { requestPage (url, onloadHandler) },
    timeout: 5000
  });
}

startAjax();