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;
}
})();