HWM_AH_Helper

Торговый помощник (удобное выставление лотов и автозаполнение цены)

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name           HWM_AH_Helper
// @namespace      Рианти
// @description    Торговый помощник (удобное выставление лотов и автозаполнение цены)
// @version        1.1
// @include        http://www.heroeswm.ru/auction_new_lot.php
// ==/UserScript==

//====Init Vars====//
var artsArray = {"leatherhat":"helm","leather_helm":"helm","wizard_cap":"helm","chain_coif":"helm","necrohelm2":"helm","xymhelmet15":"helm","mhelmetzh13":"helm","hunter_roga1":"helm","mif_lhelmet":"helm","tj_helmet3":"helm","zxhelmet13":"helm","shelm12":"helm","steel_helmet":"helm","mif_hhelmet":"helm","tj_helmet1":"helm","shelm16":"helm","gm_hat":"helm","tj_helmet2":"helm","sh_helmet":"helm","lizard_helm":"helm","mage_helm":"helm","hunter_helm":"helm","ogre_helm":"helm","orc_hat":"helm","shelm8":"helm","myhelmet15":"helm","helmet17":"helm","necrohelm3":"helm","necrohelm1":"helm","mhelmet17":"helm","knowledge_hat":"helm","hunter_hat1":"helm","wzzamulet16":"necklace","gm_amul":"necklace","mmzamulet16":"necklace","smamul17":"necklace","sh_amulet2":"necklace","hunter_amulet1":"necklace","bafamulet15":"necklace","amulet_of_luck":"necklace","samul14":"necklace","wzzamulet13":"necklace","sharik":"necklace","5years_star":"necklace","zub":"necklace","warrior_pendant":"necklace","mamulet19":"necklace","power_pendant":"necklace","hunter_pendant1":"necklace","amulet19":"necklace","magic_amulet":"necklace","bravery_medal":"necklace","mmzamulet13":"necklace","snowjinka":"necklace","sosulka":"necklace","samul17":"necklace","smamul14":"necklace","2year_amul_lords":"necklace","7ka":"necklace","3year_amul":"necklace","rog_demon":"necklace","samul8":"necklace","4year_klever":"necklace","tjam1":"necklace","hauberk":"cuirass","gm_arm":"cuirass","sh_armor":"cuirass","hunter_armor1":"cuirass","tjarmor2":"cuirass","armor15":"cuirass","marmor17":"cuirass","lizard_armor":"cuirass","sarmor16":"cuirass","armor17":"cuirass","leather_shiled":"cuirass","leatherplate":"cuirass","mif_light":"cuirass","tjarmor3":"cuirass","sarmor9":"cuirass","miff_plate":"cuirass","sarmor13":"cuirass","mage_armor":"cuirass","robewz15":"cuirass","wiz_robe":"cuirass","hunter_jacket1":"cuirass","ciras":"cuirass","full_plate":"cuirass","tjarmor1":"cuirass","cloack17":"cloack","cloackwz15":"cloack","scloack8":"cloack","gm_protect":"cloack","sh_cloak":"cloack","hunter_mask1":"cloack","soul_cape":"cloack","wiz_cape":"cloack","scloack16":"cloack","powercape":"cloack","scoutcloack":"cloack","antiair_cape":"cloack","antimagic_cape":"cloack","antifire_cape":"cloack","battlem_cape":"cloack","sunart2":"weapon","staff":"weapon","sword18":"weapon","wood_sword":"weapon","long_bow":"weapon","dubina":"weapon","ogre_bum":"weapon","gdubina":"weapon","gm_kastet":"weapon","hunterdagger":"weapon","tunnel_kirka":"weapon","bludgeon":"weapon","sunart1":"weapon","kopie":"weapon","sh_spear":"weapon","pika":"weapon","shortbow":"weapon","dem_kosa":"weapon","huntersword2":"weapon","gnome_hammer":"weapon","gm_abow":"weapon","goblin_bow":"weapon","sh_bow":"weapon","centaurbow":"weapon","hunter_bow2":"weapon","hunter_bow1":"weapon","bow14":"weapon","bow17":"weapon","scroll18":"weapon","gm_sword":"weapon","power_sword":"weapon","sunart3":"weapon","requital_sword":"weapon","firsword15":"weapon","ssword16":"weapon","ssword8":"weapon","sh_sword":"weapon","ssword10":"weapon","sunart4":"weapon","dem_dmech":"weapon","broad_sword":"weapon","def_sword":"weapon","blacksword":"weapon","blacksword1":"weapon","slayersword":"weapon","mif_sword":"weapon","mif_staff":"weapon","molot_tan":"weapon","ssword13":"weapon","mstaff13":"weapon","mstaff8":"weapon","smstaff16":"weapon","staff18":"weapon","sor_staff":"weapon","ffstaff15":"weapon","mstaff10":"weapon","mm_sword":"weapon","mm_staff":"weapon","hunterdsword":"weapon","energy_scroll":"weapon","composite_bow":"weapon","steel_blade":"weapon","hunter_sword1":"weapon","dem_dtopor":"weapon","orc_axe":"weapon","topor_skelet":"weapon","sea_trident":"weapon","large_shield":"shield","round_shiled":"shield","tj-shield3":"shield","shield13":"shield","s_shield":"shield","ru_statue":"shield","tj-shield1":"shield","gm_defence":"shield","tj-shield2":"shield","dragon_shield":"shield","sh_shield":"shield","huntershield2":"shield","hunter_shield1":"shield","shield16":"shield","shield19":"shield","sshield5":"shield","sshield11":"shield","defender_shield":"shield","sshield14":"shield","boots2":"boots","leatherboots":"boots","hunter_boots":"boots","mif_lboots":"boots","tj_vboots3":"boots","hunter_boots3":"boots","boots13":"boots","sboots12":"boots","sboots16":"boots","gm_spdb":"boots","tj_vboots2":"boots","sh_boots":"boots","lizard_boots":"boots","hunter_boots2":"boots","hunter_boots1":"boots","boots15":"boots","boots17":"boots","mboots17":"boots","mboots14":"boots","sboots9":"boots","steel_boots":"boots","shoe_of_initiative":"boots","wiz_boots":"boots","mif_hboots":"boots","tj_vboots1":"boots","warring13":"ring","gm_rring":"ring","ring19":"ring","wwwring16":"ring","warriorring":"ring","ring2013":"ring","mmmring16":"ring","i_ring":"ring","gm_sring":"ring","sh_ring1":"ring","hunter_ring2":"ring","smring10":"ring","mring19":"ring","circ_ring":"ring","hunter_ring1":"ring","powerring":"ring","bring14":"ring","sring4":"ring","sh_ring2":"ring","doubt_ring":"ring","rashness_ring":"ring","darkring":"ring","sring17":"ring","verve_ring":"ring","smring17":"ring","magring13":"ring","sring10":"ring","6ring":"ring","thief_paper":"other","hunter_gloves1":"other","gm_3arrows":"other","sh_4arrows":"other","hunter_arrows1":"other","thief_neckl":"thief","tm_amulet":"thief","thief_arb":"thief","tm_arb":"thief","thief_goodarmor":"thief","tm_armor":"thief","thief_ml_dagger":"thief","tm_knife":"thief","tm_mring":"thief","ring_of_thief":"thief","tm_wring":"thief","thief_msk":"thief","tm_msk":"thief","thief_cape":"thief","tm_cape":"thief","thief_fastboots":"thief","tm_boots":"thief","tact1w1_wamulet":"tactic","tactcv1_armor":"tactic","tactsm0_dagger":"tactic","tactspw_mring":"tactic","tactwww_wring":"tactic","tact765_bow":"tactic","tactms1_mamulet":"tactic","tactpow_cloack":"tactic","tactmag_staff":"tactic","tactzl4_boots":"tactic","tactaz_axe":"tactic","tacthapp_helmet":"tactic","tactdff_shield":"tactic","v_1armor":"verb","verb11_sword":"verb","verbboots":"verb","ve_helm":"verb","vrb_shild":"verb","piratehat3":"helm","dragon_crown":"helm","surv_mhelmetcv":"helm","surv_helmetpi":"helm","piratehat2":"helm","piratehat1":"helm","8amul_inf":"necklace","quest_pendant1":"necklace","neut_amulet":"necklace","surv_wamuletik":"necklace","trinitypendant":"necklace","tjam2":"necklace","surv_mamulka":"necklace","tjam3":"necklace","dudka":"necklace","magneticarmor":"cuirass","surv_armorsu":"cuirass","pir_armor1":"cuirass","student_armor":"cuirass","surv_marmoroz":"cuirass","pir_armor3":"cuirass","pir_armor2":"cuirass","vtjcloak1":"cloack","vtjcloak3":"cloack","surv_mcloacksv":"cloack","vtjcloak2":"cloack","surv_cloacksrv":"cloack","surv_halberdzg":"weapon","surv_crossbowsurv":"weapon","vbow1":"weapon","vtmsword1":"weapon","dagger":"weapon","surv_daggermd":"weapon","windsword":"weapon","p_sword3":"weapon","surv_sword2sd":"weapon","pegaskop":"weapon","vtmsword3":"weapon","vbow3":"weapon","vbow2":"weapon","lbow":"weapon","vtmsword2":"weapon","surv_sword_surv":"weapon","cold_sword2014":"weapon","surv_staffik":"weapon","p_sword2":"weapon","surv_scrollcd":"weapon","surv_axes":"weapon","p_sword1":"weapon","bshield3":"shield","bshield1":"shield","wshield":"shield","gargoshield":"shield","sshield17":"shield","bshield2":"shield","surv_shieldvv":"shield","polkboots3":"boots","surv_mbootsbb":"boots","polkboots2":"boots","surv_bootsurv":"boots","polkboots1":"boots","surv_wring2o":"ring","v-ring2":"ring","gring":"ring","surv_mring2fpg":"ring","ttring":"ring","surv_wring1my":"ring","blackring":"ring","surv_mring1fd":"ring","v-ring3":"ring","vbolt3":"ring","v-ring1":"ring","vbolt1":"ring","vbolt2":"ring","compass":"other","thief_premiumring2":"thief","thief_premiumring3":"thief","bwar1":"medals","bwar2":"medals","kwar2":"medals","bwar3":"medals","kwar3":"medals","bwar4":"medals","kwar4":"medals","bwar5":"medals","kwar5":"medals","bwar6":"medals","kwar6":"medals","gnomewar6":"medals","bwar_splo":"medals","kwar_splo":"medals","bwar_stoj":"medals","gnomewar_stoj":"medals","kwar_stoj":"medals","bwar_takt":"medals","warthief_medal3":"medals","magewar3":"medals","magewar4":"medals","demwar3":"medals","demwar4":"medals"}
var elementsTable = { 'EL_42' : 'abrasive', 'EL_43' : 'snake_poison', 'EL_46' : 'tiger_tusk', 'EL_44' : 'ice_crystal', 'EL_45' : 'moon_stone', 'EL_40' : 'fire_crystal', 'EL_37' : 'meteorit', 'EL_41' : 'witch_flower', 'EL_39' : 'wind_flower', 'EL_78' : 'fern_flower', 'EL_38' : 'badgrib' };

if(GM_getValue("AH_Helper_Setting_1") == null) GM_setValue("AH_Helper_Setting_1", 2);
if(GM_getValue("AH_Helper_Setting_2") == null) GM_setValue("AH_Helper_Setting_2", 2);
if(GM_getValue("AH_Helper_Setting_3") == null) GM_setValue("AH_Helper_Setting_3", 1);
if(GM_getValue("AH_Helper_Setting_4") == null) GM_setValue("AH_Helper_Setting_4", 1);

var artsToShow = 3;
//=================//

//====AJAX functions====//
function getPageContent(url)
{
    var xmlhttp = get_xmlHttp();
    xmlhttp.open("GET", url, false);
    xmlhttp.overrideMimeType('text/plain; charset=windows-1251');
    xmlhttp.send(null);
    if(xmlhttp.status == 200)
        return xmlhttp.responseText;
    return '';
}
function get_xmlHttp()
{
    var xmlhttp;
    try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch(e){
        try{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
        catch(e){ xmlhttp = false; }
    }
    if(!xmlhttp && typeof XMLHttpRequest != 'undefined')
    { xmlhttp = new XMLHttpRequest(); }
    return xmlhttp;
}
//======================//
//====Script Logic====//
function selectionChanged(){
    var artName = select.options[select.selectedIndex].value;
    var artData = select.options[select.selectedIndex].text;
    artSelected(artName, artData);
}
function artSelected(artName, artData){
    if(elementsTable[artName] != null){
        var temp = artData.split(' ');
        var quantity = (temp[temp.length-1].split('(')[1]).split(')')[0];
        elementSelected(elementsTable[artName], quantity);
    }
    else {
        artName = artName.split('@')[0];
        if(artsArray[artName] == null) return;
        var itemParseRegexp = /.* (\d+)\/(\d+)( \((\d+)\)|)/;
        var data = artData.match(itemParseRegexp);
        var dur1 = data[1]; var dur2 = data[2];
        var quantity = 1; if (data[4] != null) quantity = data[4];
        ammunitionSelected(artName, dur1, dur2, quantity);
    }
}
function elementSelected(element, quantity){
    var countField = document.getElementsByName("count")[0];
    if(quantity > 10) countField.value = 10;
    else countField.value = quantity;
    var arts = findOffersForElement(element);
    if(arts.length == 0) {
        showNoArtsFound();
        return;
    }
    arts.sort(comparePrice);
    msgBox1.innerHTML = "<b>Лоты конкурентов:</b>";
    var numerator = artsToShow, htmlOutput = "", bestPrice;
    for (var id in arts){
        if(numerator == artsToShow){
            bestPrice = arts[id].price;
        }
        if(numerator-- == 0) break;
        htmlOutput += presentElementsOffer(arts[id]);
        if (numerator > 0) htmlOutput += "<br>";
    }
    msgBox2.innerHTML = htmlOutput;

    var priceField = document.getElementsByName("price")[0];
    priceField.value = bestPrice - GM_getValue("AH_Helper_Setting_3");
}
function ammunitionSelected(artName, artDur1, artDur2, quantity){
    var countField = document.getElementsByName("count")[0];
    if(quantity > 3) countField.value = 3;
    else countField.value = quantity;
    var marketOffers = findOffersForArt(artName);
    var arts = [];
    for (var offer in marketOffers){
        if(GM_getValue("AH_Helper_Setting_2") == 2){
            if(marketOffers[offer].dur1 != artDur1 || marketOffers[offer].dur2 != artDur2) continue;
        }
        arts[offer] = marketOffers[offer];
    }
    if(arts.length == 0) {
        showNoArtsFound();
        return;
    }
    arts.sort(comparePPB);
    msgBox1.innerHTML = "<b>Лоты конкурентов:</b>";
    var numerator = artsToShow, htmlOutput = "", bestPPB, bestPrice;
    for (var id in arts){
        if(numerator == artsToShow){
            bestPPB = arts[id].ppb;
            bestPrice = arts[id].price;
        }
        if(numerator-- == 0) break;
        htmlOutput += presentAmmunitionOffer(arts[id]);
        if (numerator > 0) htmlOutput += "<br>";
    }
    msgBox2.innerHTML = htmlOutput;

    var priceField = document.getElementsByName("price")[0];
    if(GM_getValue("AH_Helper_Setting_1") == 2){
        if(GM_getValue("AH_Helper_Setting_2") == 1) {
            priceField.value = Math.floor(artDur1 * bestPPB) - GM_getValue("AH_Helper_Setting_3");
        } else {
            priceField.value = bestPrice - GM_getValue("AH_Helper_Setting_3");
        }
    } else{
        priceField.value = artDur1 * Math.floor((bestPPB - GM_getValue("AH_Helper_Setting_3")));
    }
}
function findOffersForArt(artName){
    var artCategory = artsArray[artName];
    var artAHurl = 'http://www.heroeswm.ru/auction.php?cat=' + artCategory + '&sort=4&type=0&art_type=' + artName + '&sbn=1&sau=0';
    var page = getPageContent(artAHurl);
    var lotRegexp = /<a href="art_info\.php\?id=[\s\S]+?Прочность: (\d+?)\/(\d+?)".+?(|<b>(\d) шт\.<\/b>)<\/td><\/tr><\/table>.+?alt=""><\/td><td>([,\d]+?)<\/td><\/tr>.+?<\/table><\/td><td>(.*?) <\/td>.+?(<a class=pi href="pl_info\.php\?id=\d+?"><b>.+?<\/b><\/a>)<BR>/g;
    var match, offers = [], quantity, price;
    while (match = lotRegexp.exec(page))
    {
        quantity = 1;
        if(match[4] != null) quantity = match[4];
        price = parseInt(deleteAll(match[5], ','));
        offers.push({'dur1' : match[1], 'dur2' : match[2], 'quantity' : quantity, 'price' : price, 'priceString' : match[5], 'length' : match[6], 'owner' : match[7], 'ppb' : Math.round(10 * price / parseInt(match[1])) / 10});
    }
    return offers;
}
function findOffersForElement(elementName){
    var artAHurl = 'http://www.heroeswm.ru/auction.php?cat=elements&sort=4&type=0&art_type=' + elementName + '&sbn=1&sau=0';
    var page = getPageContent(artAHurl);
    var lotRegexp = /\[i\]<\/a><\/b><BR><b>(\d+?) шт\.<\/b><\/td>.*?"Золото" alt=""><\/td><td>([,\d]+?)<\/td><\/tr>.*?<\/tr><\/table><\/td><td>(.+?) <\/td><td valign=top.*?(<a class=pi href="pl_info\.php\?id=\d+?"><b>.*?<\/b><\/a>)<BR>/g
    var match, offers = [];
    while (match = lotRegexp.exec(page))
    {
        offers.push({'quantity' : match[1], 'price' : parseInt(deleteAll(match[2], ',')), 'priceString' : match[2], 'length' : match[3], 'owner' : match[4]});
    }
    return offers;
}
function presentAmmunitionOffer(offer){
    return 'Цена за бой: ' + offer.ppb + ' Цена: ' + offer.priceString + ' Прочность: ' + offer.dur1 + '/' + offer.dur2 + ' Кол-во: ' + offer.quantity + ' Длительность: ' + offer.length + ' Владелец: ' + offer.owner;
}
function presentElementsOffer(offer){
    return 'Цена: ' + offer.priceString + ' Кол-во: ' + offer.quantity + ' Длительность: ' + offer.length + ' Владелец: ' + offer.owner;
}
function comparePPB(a, b) {
    if (a.ppb < b.ppb)
        return -1;
    if (a.ppb > b.ppb)
        return 1;
    return 0;
}
function comparePrice(a, b) {
    if (a.price < b.price)
        return -1;
    if (a.price > b.price)
        return 1;
    return 0;
}
function deleteAll(string, valToDel){
    return string.split(valToDel).join('');
}
function showNoArtsFound(){
    alert("Подобных артефактов на рынке не найдено.");
}
//====================//

//====UI====//
var ss1 = document.createElement("input"); ss1.type = "radio"; ss1.name = "DiscountType"; ss1.value = 1; if(GM_getValue("AH_Helper_Setting_1") == 1) ss1.checked = true; ss1.onchange = function(){GM_setValue("AH_Helper_Setting_1", 1); selectionChanged();};
var ss2 = document.createElement("input"); ss2.type = "radio"; ss2.name = "DiscountType"; ss2.value = 2; if(GM_getValue("AH_Helper_Setting_1") == 2) ss2.checked = true; ss2.onchange = function(){GM_setValue("AH_Helper_Setting_1", 2); selectionChanged();};
var ss3 = document.createElement("input"); ss3.type = "radio"; ss3.name = "CompetitorFilterType"; ss3.value = 1; if(GM_getValue("AH_Helper_Setting_2") == 1) ss3.checked = true; ss3.onchange = function(){GM_setValue("AH_Helper_Setting_2", 1); selectionChanged();};
var ss4 = document.createElement("input"); ss4.type = "radio"; ss4.name = "CompetitorFilterType"; ss4.value = 2; if(GM_getValue("AH_Helper_Setting_2") == 2) ss4.checked = true; ss4.onchange = function(){GM_setValue("AH_Helper_Setting_2", 2); selectionChanged();};
var ss5 = document.createElement("input"); ss5.type = "text"; ss5.name = "DiscountValue"; ss5.size = "2"; ss5.value = GM_getValue("AH_Helper_Setting_3"); ss5.onchange = function(){GM_setValue("AH_Helper_Setting_3", ss5.value); selectionChanged();};

var ssLabel0 = document.createElement("b"); ssLabel0.style="font-size:12px;"; ssLabel0.innerHTML = "Настройки скрипта<br><br>";
var ssLabel1 = document.createElement("i"); ssLabel1.style="font-size:12px;"; ssLabel1.innerHTML = "Выставление цены со скидкой: снижение цены за бой<br>";
var ssLabel2 = document.createElement("i"); ssLabel2.style="font-size:12px;"; ssLabel2.innerHTML = "Выставление цены со скидкой: снижение конечной цены артефакта<br><br>";
var ssLabel3 = document.createElement("i"); ssLabel3.style="font-size:12px;"; ssLabel3.innerHTML = "Учёт конкурентов: учитывать все лоты<br>";
var ssLabel4 = document.createElement("i"); ssLabel4.style="font-size:12px;"; ssLabel4.innerHTML = "Учёт конкурентов: учитывать только лоты с идентичной прочностью артефактов<br><br>";
var ssLabel5 = document.createElement("i"); ssLabel5.style="font-size:12px;"; ssLabel5.innerHTML = "Скидка: ";

var workTable = document.querySelector(".wbwhite");
workTable.appendChild(ssLabel0); workTable.appendChild(ss1); workTable.appendChild(ssLabel1);
workTable.appendChild(ss2); workTable.appendChild(ssLabel2); workTable.appendChild(ss3); workTable.appendChild(ssLabel3);
workTable.appendChild(ss4); workTable.appendChild(ssLabel4); workTable.appendChild(ssLabel5); workTable.appendChild(ss5);

var outputBox = document.createElement("div"); outputBox.style = "font-size:12px;"; outputBox.innerHTML = ""; workTable.insertBefore(outputBox, workTable.firstChild);
var msgBox1 = document.createElement("p"); msgBox1.style = "font-size:12px;"; outputBox.appendChild(msgBox1);
var msgBox2 = document.createElement("p"); msgBox2.style = "font-size:12px;"; outputBox.appendChild(msgBox2);
//==========//

var duration = document.getElementsByName("duration")[0];
duration.value = GM_getValue("AH_Helper_Setting_4");
duration.onchange = function(){ GM_setValue("AH_Helper_Setting_4", duration.value); };

var select = document.getElementsByName("item")[0];
select.onchange = selectionChanged;