Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function(){
- "use strict";
- // Golden Miner Prospector version 1.2.0
- //For todays date;
- Date.prototype.today = function(){
- return this.getFullYear() + "/" + (((this.getMonth()+1) < 10)?"0":"") + (this.getMonth()+1) +"/"+ ((this.getDate() < 10)?"0":"") + this.getDate();
- };
- //For the time now
- Date.prototype.timeNow = function(){
- return ((this.getHours() < 10)?"0":"") + this.getHours() +":"+ ((this.getMinutes() < 10)?"0":"") + this.getMinutes() +":"+ ((this.getSeconds() < 10)?"0":"") + this.getSeconds();
- };
- function ItemCompare(options){
- this.Enabled = options[0] || false;
- this.CheckGold = options[1] || false;
- this.CheckDiamonds = options[2] || false;
- this.CheckMagicFind = options[3] || false;
- this.CheckXp = options[4] || false;
- this.MinSockets = options[5] || 0;
- }
- function ItemType(elementClass, name, action, compareStats, quantityThreshold) {
- this.ElementClass = elementClass || null;
- this.Name = name || null;
- this.Action = action || null; // sell, drink, craft, stash
- this.CompareStats = new ItemCompare(compareStats); // checks to see if stats have been imporved, if not then executes action. Can also check for minimum sockets
- this.QuantityThreshold = quantityThreshold || null; // Action will not be executed unless the count of items of a type exceed this number, minimum number required to execute action
- }
- function Item(itemElement) {
- this.Id = null;
- this.StatChange = null;
- this.Stats = null;
- this.ActionElement = null;
- this.ExecuteAction = true;
- this.ActionExecuteTime = null;
- this.Place = null;
- this.Init(itemElement);
- }
- Item.prototype.Init = function(itemElement){
- this.Place = 'stash';
- this.Id = itemElement.getAttribute('stashid');
- if(!this.Id){
- this.Place = 'finds';
- this.Id = itemElement.getAttribute('findid');
- }
- };
- function addSuffixPadding(value, length) {
- value = value.toString();
- var diff = length - value.length;
- if(diff > 0) {
- return (value + new Array(diff).join(' '));
- }
- return value;
- }
- var itemTypes = [
- // Gems
- new ItemType('itemtype100','Tiny Ruby','sell', [], 0),
- new ItemType('itemtype101','Small Ruby','sell', [], 0),
- new ItemType('itemtype102','Big Ruby','sell', [], 0),
- new ItemType('itemtype103','Giant Ruby','sell', [], 0),
- new ItemType('itemtype110','Tiny Diamond','sell', [], 0),
- new ItemType('itemtype111','Small Diamond','sell', [], 0),
- new ItemType('itemtype112','Big Diamond','sell', [], 0),
- new ItemType('itemtype113','Giant Diamond','sell', [], 0),
- new ItemType('itemtype120','Tiny Amethyst','sell', [], 15),
- new ItemType('itemtype121','Small Amethyst','sell', [], 15),
- new ItemType('itemtype122','Big Amethyst','sell', [], 15),
- new ItemType('itemtype123','Giant Amethyst','sell', [], 15),
- new ItemType('itemtype130','Tiny Sapphire','sell', [], 0),
- new ItemType('itemtype131','Small Sapphire','sell', [], 0),
- new ItemType('itemtype132','Big Sapphire','sell', [], 0),
- new ItemType('itemtype133','Giant Sapphire','sell', [], 0),
- new ItemType('itemtype140','Tiny Starstone','sell', [], 0),
- new ItemType('itemtype141','Small Starstone','sell', [], 0),
- new ItemType('itemtype142','Big Starstone','sell', [], 0),
- new ItemType('itemtype143','Giant Starstone','sell', [], 0),
- // Potions
- new ItemType('itemtype8','Instant Gold Potion','drink', [], 50),
- new ItemType('itemtype9','Instant Diamond Potion','drink', [], 50),
- new ItemType('itemtype10','Gold Potion','drink', [], 0),
- new ItemType('itemtype11','Diamond Potion','drink', [], 0),
- new ItemType('itemtype12','Magic Find Potion','drink', [], 0),
- // Scrolls
- new ItemType('itemtype5','Blue scroll','craft', [], 0),
- new ItemType('itemtype6','Yellow scroll','craft', [], 0),
- new ItemType('itemtype7','Legendary scroll','craft', [], 0), // these chew up too much of my diamond supply
- new ItemType('itemtype13','Amnesia Scroll','sell', [], 5), // don't craft this one unless you want your stats reset automatically
- // Items
- new ItemType('itemtype0','pickaxe','sell', [true, true, false, true, false, 1], 0),
- new ItemType('itemtype1','armor','sell', [true, true, false, true, false, 1], 0),
- new ItemType('itemtype2','helm','sell', [true, true, false, true, false, 1], 0),
- new ItemType('itemtype3','ring','sell', [true, true, false, true, false, 1], 0),
- new ItemType('itemtype4','amulet','sell', [true, true, false, true, false, 1], 0)
- ];
- function appendNodeListToArray(targetArray, nodeList ){
- for (var i = 0; i < nodeList.length; ++i) {
- targetArray.push(nodeList[i]);
- }
- return targetArray;
- }
- function generateOutput(itemType, item, message) {
- var output = [
- addSuffixPadding(itemType.Action, 7),
- addSuffixPadding(itemType.Name, 25),
- 'from ' + addSuffixPadding(item.Place, 7),
- 'on ' + addSuffixPadding(item.ActionExecuteTime.today() + " @ " + item.ActionExecuteTime.timeNow(), 26)
- ];
- if(itemType.CompareStats.Enabled){
- output.push(' stats Change: ');
- output.push(' GPS:' + addSuffixPadding(parseInt(item.StatChange.goldPerSec, 10), 11));
- output.push(' DPS:' + addSuffixPadding(parseInt(item.StatChange.diamondsPerSec, 10), 7));
- output.push(' MF:' + addSuffixPadding(parseFloat(item.StatChange.magicFind).toFixed(2), 7));
- output.push(' XP:' + addSuffixPadding(parseInt(item.StatChange.maxXpPerSec, 10), 6));
- output.push(' Sockets:' + addSuffixPadding(parseInt(item.Stats.sockets, 10), 2));
- }
- output.push(message);
- return output.join('');
- }
- function automate(){
- itemTypes.every(function(itemType) {
- var itemTypeList = [],
- stashAreaList = document.getElementById('stash'),
- findsAreaList = document.getElementById('finds'),
- itemProcessed = false,
- item,
- output,
- message = '',
- countItemsOfType = 0,
- diamondBalance = 0;
- itemTypeList = appendNodeListToArray(itemTypeList, stashAreaList.getElementsByClassName(itemType.ElementClass));
- itemTypeList = appendNodeListToArray(itemTypeList, findsAreaList.getElementsByClassName(itemType.ElementClass));
- itemTypeList.every(function(itemElement){
- item = new Item(itemElement);
- countItemsOfType++;
- if(itemType.CompareStats.Enabled){
- item.StatChange = game.getStatsIfEquipped(item.Place, item.Id);
- item.Stats = game.data[item.Place][item.Id];
- var socketedMf = item.Stats.sockets * 0.4;
- if(
- (itemType.CompareStats.CheckGold && item.StatChange.goldPerSec > 0)
- || (itemType.CompareStats.CheckMagicFind && (item.StatChange.magicFind + socketedMf) >= 0)
- || (itemType.CompareStats.CheckDiamonds && item.StatChange.diamondsPerSec > 0)
- || (itemType.CompareStats.CheckXp && item.StatChange.maxXpPerSec > 0)
- ){
- if(item.ExecuteAction && item.Stats.sockets >= itemType.CompareStats.MinSockets ){
- // at least one of the stats is better then the currnetly equipped itemType, don't sell
- item.ExecuteAction = false;
- } else {
- message += " Not enough sockets. Has " + item.Stats.sockets + " needed " + itemType.CompareStats.MinSockets;
- }
- }
- }
- // don't execute action unless the item count exceeds threshold
- if(itemType.QuantityThreshold >= countItemsOfType){
- item.ExecuteAction = false;
- } else if(itemType.QuantityThreshold > 0) {
- // only do so for threshold > 0 so that the message is not printed for every item action
- message += ' QuantityThreshold of ' + itemType.QuantityThreshold + ' exceeded';
- }
- // make sure we have enough diamonds to craft a scroll
- if(itemType.Action === 'craft'){
- item.Stats = game.data[item.Place][item.Id];
- diamondBalance = parseInt(document.getElementById('diamond').innerHTML.replace(/ /g,''),10);
- // not enough diamonds, skip to next item in itemTypeList
- if(item.Stats.diamondsCost > diamondBalance){
- item.ExecuteAction = false;
- }
- }
- // skips to next item in itemTypeList
- if(!item.ExecuteAction){
- return true;
- }
- item.ActionElement = itemElement.getElementsByClassName(itemType.Action)[0];
- // make sure element exists or is found
- if(item.ActionElement) {
- item.ActionElement.click();
- item.ActionExecuteTime = new Date();
- itemProcessed = true;
- output = generateOutput(itemType, item, message);
- console.log(output);
- // exists the itemTypeList loop
- return false;
- }
- });
- // this ensures that only one item is sold per automation interval
- if(itemProcessed){
- return false;
- }
- return true;
- });
- }
- var automateInterval = setInterval(automate, 500);
- }());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement