HWM_AH_Helper

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

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==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;