Created
April 5, 2012 22:58
-
-
Save xcvd/2314842 to your computer and use it in GitHub Desktop.
Goat Horn Crusher
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* )............( / | |
/ / ___/| \ / | |
/ | /o \/| | / | |
/ | \_____/\| | / | |
/ \ -xcvd- / / | |
/ ')__________(' */ | |
import org.powerbot.concurrent.Task; | |
import org.powerbot.concurrent.strategy.Strategy; | |
import org.powerbot.game.api.ActiveScript; | |
import org.powerbot.game.api.Manifest; | |
import org.powerbot.game.api.methods.Widgets; | |
import org.powerbot.game.api.methods.input.Mouse; | |
import org.powerbot.game.api.methods.interactive.NPCs; | |
import org.powerbot.game.api.methods.node.Menu; | |
import org.powerbot.game.api.methods.tab.Inventory; | |
import org.powerbot.game.api.methods.widget.Camera; | |
import org.powerbot.game.api.util.Filter; | |
import org.powerbot.game.api.util.Random; | |
import org.powerbot.game.api.util.Time; | |
import org.powerbot.game.api.wrappers.interactive.NPC; | |
import org.powerbot.game.api.wrappers.node.Item; | |
import org.powerbot.game.api.wrappers.widget.WidgetChild; | |
import org.powerbot.game.bot.event.listener.PaintListener; | |
import javax.imageio.ImageIO; | |
import java.awt.*; | |
import java.awt.image.BufferedImage; | |
import java.io.IOException; | |
import java.net.MalformedURLException; | |
import java.net.URL; | |
import java.util.Arrays; | |
/* | |
* Grinds chocolate at the GE | |
* Start near any GE bank | |
* | |
* @author xcvd | |
*/ | |
@Manifest(name = "Goat Horn Crusher", description = "Grinds goat horns. Start near a bank at the GE with pestle and mortar in toolbelt.", version = 1.1d, authors = {"xcvd"}, website="http://www.powerbot.org/community/topic/672724-xcvds-vial-filler-40-60k-an-hour/") | |
public class GoatHornCrusher extends ActiveScript implements PaintListener { | |
private static final int ITEM_ID_GOAT_HORN = 9735; | |
private static final int ITEM_ID_CRUSHED_GOAT_HORN = 9736; | |
private static int hornsGround = 0, profit = 0; | |
private static long startTime = System.currentTimeMillis(); | |
private static BufferedImage paintBackground; | |
private static Font georgia = new Font("Georgia", Font.PLAIN, 18); | |
@Override | |
protected void setup() { | |
provide(new ClickBank()); | |
provide(new DoBank()); | |
provide(new GrindChocolate()); | |
try { | |
paintBackground = ImageIO.read(new URL("http://localhostr.com/file/8XUiNiF/GoatHorn.png")); | |
} catch (MalformedURLException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
private final class ClickBank extends Strategy implements Task { | |
@Override | |
public boolean validate() { | |
for(Item i: Inventory.getItems()) | |
{ | |
if(i.getId() != ITEM_ID_GOAT_HORN) | |
return true; | |
} | |
return Inventory.getCount() != 28; | |
} | |
@Override | |
public void run() { | |
if(Camera.getYaw() > 50) | |
Camera.setNorth(); | |
Bank.open(); | |
Time.sleep(Random.nextInt(900, 1500)); | |
while(!Bank.isOpen()) | |
{ | |
Bank.open(); | |
Time.sleep(Random.nextInt(900, 1500)); | |
} | |
} | |
} | |
private final class DoBank extends Strategy implements Task { | |
@Override | |
public boolean validate() { | |
return Bank.isOpen(); | |
} | |
@Override | |
public void run() { | |
Time.sleep(Random.nextInt(900, 1500)); | |
while(Inventory.getCount() > 0) | |
{ | |
Bank.depositAll(); | |
Time.sleep(Random.nextInt(900, 1500)); | |
} | |
Bank.withdraw(ITEM_ID_GOAT_HORN, 0); | |
Bank.close(); | |
Time.sleep(Random.nextInt(500, 1000)); | |
while(Widgets.get(762, 1).isOnScreen()) | |
{ | |
Bank.close(); | |
Time.sleep(Random.nextInt(500, 1000)); | |
} | |
} | |
} | |
private final class GrindChocolate extends Strategy implements Task { | |
private static final int WIDGET_INTERACT = 905; | |
private static final int WIDGET_INTERACT_ITEM = 14; | |
@Override | |
public boolean validate() { | |
for(Item i:Inventory.getItems()) { | |
if(i.getId() != ITEM_ID_GOAT_HORN) | |
return false; | |
} | |
return true; | |
} | |
@Override | |
public void run() { | |
Time.sleep(Random.nextInt(100, 300)); | |
Inventory.getItems()[0].getWidgetChild().interact("Grind"); | |
Time.sleep(Random.nextInt(600, 1000)); | |
while(!Widgets.get(WIDGET_INTERACT).getChild(WIDGET_INTERACT_ITEM).isOnScreen()) | |
Time.sleep(40); | |
Widgets.get(WIDGET_INTERACT).getChild(WIDGET_INTERACT_ITEM).click(true); | |
int sleepTime = 0; | |
while(Inventory.getCount(new Filter<Item>() { public boolean accept(final Item n) | |
{ | |
return n.getId() == ITEM_ID_CRUSHED_GOAT_HORN; | |
}}) < 28) | |
{ | |
Time.sleep(500); | |
sleepTime += 500; | |
// crappy failsafe since Players.getLocal().getAnimation() seems to always return -1 | |
if(sleepTime % 5000 == 0 && Inventory.getCount(ITEM_ID_CRUSHED_GOAT_HORN) == 0) { | |
Inventory.getItems()[0].getWidgetChild().interact("Grind"); | |
Time.sleep(Random.nextInt(600, 1000)); | |
Widgets.get(WIDGET_INTERACT).getChild(WIDGET_INTERACT_ITEM).click(true); | |
} | |
} | |
hornsGround += 28; | |
profit += (28 * 132); | |
} | |
} | |
public static class Bank { | |
private static final int[] NPC_ID_BANKERS = {3416, 3418, 3293, 2718, 3293, 3416, 2718, 3418}; | |
private static final int WIDGET_BANK = 762; | |
private static final int WIDGET_BANK_INVENTORY = 95; | |
private static final int WIDGET_CHILD_DEPOSIT_ALL = 34; | |
private static final int WIDGET_CHILD_CLOSE = 45; | |
public static boolean isOpen() { | |
return Widgets.get(WIDGET_BANK, 1).isOnScreen(); | |
} | |
public static boolean open() { | |
final NPC banker = NPCs.getNearest(new Filter<NPC>() { | |
public boolean accept(final NPC banker) { | |
return banker != null && Arrays.binarySearch(NPC_ID_BANKERS, banker.getId()) != -1; | |
} | |
}); | |
return banker != null && banker.interact("Bank"); | |
} | |
public static boolean depositAll() { | |
return isOpen() && Widgets.get(WIDGET_BANK).getChild(WIDGET_CHILD_DEPOSIT_ALL).click(true); | |
} | |
public static boolean withdraw(final int itemId, int amount) { | |
final WidgetChild item = getItemWidgetChild(itemId); | |
if(item != null) { | |
final int bankSlotX = Widgets.get(WIDGET_BANK).getChild(WIDGET_BANK_INVENTORY).getRelativeX() + item.getRelativeX(); | |
final int bankSlotY = Widgets.get(WIDGET_BANK).getChild(WIDGET_BANK_INVENTORY).getRelativeY() + item.getRelativeY(); | |
if(Mouse.click(bankSlotX + (item.getWidth() / 2), bankSlotY + (item.getHeight() / 2), false)) { | |
if(amount > 0) | |
return Menu.isOpen() && Menu.select("Withdraw-" + amount); | |
else | |
return Menu.isOpen() && Menu.select("Withdraw-All"); | |
} | |
} | |
return false; | |
} | |
private static WidgetChild getItemWidgetChild(int id) { | |
WidgetChild item = null; | |
for(WidgetChild i:Widgets.get(WIDGET_BANK).getChild(WIDGET_BANK_INVENTORY).getChildren()) | |
{ | |
if(new Item(i).getId() == id) | |
{ | |
item = i; | |
break; | |
} | |
} | |
return item; | |
} | |
private static boolean close() { | |
return Widgets.get(WIDGET_BANK).getChild(WIDGET_CHILD_CLOSE).click(true); | |
} | |
} | |
public void onRepaint(final Graphics render) { | |
Graphics2D g2 = (Graphics2D)render; | |
g2.drawImage(paintBackground, 8, 345, null); | |
g2.setFont(georgia); | |
g2.setColor(Color.getHSBColor(0.616666667f, 0.05f, 0.46f)); | |
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); | |
g2.drawString("HORNS GROUND: " + hornsGround, 14, 410); | |
g2.drawString("TOTAL PROFIT: " + profit, 14, 442); | |
long timeNow = System.currentTimeMillis(); | |
g2.drawString("TIME RUNNING: " + (int)(timeNow-startTime)/3600000 + ":" + (int)((timeNow-startTime)-(((timeNow-startTime)/3600000)*3600000))/60000 + ":" + (int)((timeNow-startTime)-(((timeNow-startTime)/3600000)*3600000)-(((timeNow-startTime)-(((timeNow-startTime)/3600000)*3600000))/60000)*60000)/1000, 220, 410); | |
g2.drawString("PROFIT/HOUR: " + (int)(((double)profit/(double)(timeNow-startTime))*3600000), 220, 442); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment