Main Shops By web crawler 296 installs Rating 0.0 (0) approved

Neopets - Auto-haggler

Neopets - Auto-haggler
https://www.scriptneo.com/script/neopets-auto-haggler

Version selector


SHA256
5a4498154bfc155de6aaed87de0476676d5f81d85094d197cdea1fbf66c07d42
No scan flags on this version.

Source code

// ==UserScript==
// @name        Neopets: Auto Haggler
// @version     1.0
// @namespace   https://www.scriptneo.com/userscript/neopets-auto-haggler
// @description Auto haggles in the Neopian Shops
// @match       *://*.neopets.com/haggle.phtml*
// @match       *://*.neopets.com/captcha_show.phtml*
// @require     https://code.jquery.com/jquery-3.4.1.min.js
// @grant       window.focus
// @grant       unsafeWindow
// @downloadURL  https://www.scriptneo.com/scripts/download.php?id=7
// @updateURL    https://www.scriptneo.com/scripts/download.php?id=7
// ==/UserScript==


var url = document.URL;
var OCR = true;
var return_ab = true;
var min = 0;
var max = 200;


function random(min, max) {
	return Math.floor(Math.random() * (max-min)) + min;
}

function solve_captcha(url) {
    return new Promise( resolve => {
        var captcha = new Image();
        captcha.src = url;
        captcha.onload = () => {
            var width = captcha.width;
            var height = captcha.height;

            var canvas = unsafeWindow.document.createElement('canvas');
            canvas.width = width;
            canvas.height = width;
            canvas.getContext("2d").drawImage(captcha, 0, 0);

            var imgData = canvas.getContext("2d").getImageData(0, 0, width, height);
            var lowy = 999;
            var lowx = 999;
            var low = 999;

            for (var x = 0; x < imgData.width; x++){
                for (var y = 0; y < imgData.height; y++){
                    var i = x*4+y*4*imgData.width;
                    var avg = Math.floor((imgData.data[i]+imgData.data[i+1]+imgData.data[i+2])/3);
                    if (avg < low){
                        low = avg;
                        lowx = x;
                        lowy = y;
                    }
                }
            }
            resolve({lowx, lowy});
        };
    });
}

function smart_haggle(haggle_price){
    console.log('haggle_price', haggle_price);
    var val = new Array(2);
    val[0] = haggle_price.substr(0, 1);
    val[1] = haggle_price.substr(1, 1);
    console.log('val0', val[0]);
    console.log('val1', val[1]);

    var x = 0;
    var end_price = "";

    for(x=0; x<haggle_price.length; x++){
        end_price += val[(x%2)];
    }
    return end_price;
}

(async () => {
    var $;
    if (typeof $ === 'undefined') $ = unsafeWindow.$;

    const html = $('html').html();


    if(url.includes('haggle.phtml')){

     //   window.focus();

        if(document.body.innerHTML.indexOf("is SOLD OUT!") > -1) {
setTimeout(function(){
document.querySelector("#container__2020 > div.shop-bg").click();
}, 500);
}
       if(document.body.innerHTML.indexOf("has been added to your inventory") > -1) {
//window.focus();
setTimeout(function(){
document.querySelector("#container__2020 > div.shop-bg").click();
}, 6000);
}

       if(document.body.innerHTML.indexOf("one item every five seconds") > -1) {
//window.focus();
location.reload();

}
        var haggle_price = $('#shopkeeper_makes_deal').find('b').get(0).innerHTML;
        haggle_price = (haggle_price.match("([0-9-,]+)")[0]).replace(",", "");
        $('input[name=current_offer]').val(haggle_price);

        if(OCR){
            const {lowx: x, lowy: y} = await solve_captcha(document.querySelector('input[type="image"]').src);
            setTimeout(function(){
                var haggleform = document.querySelector('form[name="haggleform"]');
                var newInput = document.createElement("input");
                var newInput2 = document.createElement("input");

                newInput.type="hidden";
                newInput.name="x";
                newInput.value=x;
                haggleform.appendChild(newInput);

                newInput2.type="hidden";
                newInput2.name="y";
                newInput2.value=y;
                haggleform.appendChild(newInput2);
                haggleform.submit();
            }, random(min,max))
        }
        return;
    }
})();