import org.rsbot.event.listeners.PaintListener; import org.rsbot.script.Script; import org.rsbot.script.ScriptManifest; import org.rsbot.script.methods.Equipment; import org.rsbot.script.methods.Game; import org.rsbot.script.util.Filter; import org.rsbot.script.wrappers.*; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.LinkedList; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.lang.reflect.Method; import java.net.URL; import java.net.URLConnection; import org.rsbot.script.wrappers.RSNPC; import org.rsbot.script.wrappers.RSObject; import org.rsbot.script.wrappers.RSTile; @ScriptManifest(authors = {"Fixed by Louisc999"}, keywords = {"Minigames", "Combat"}, name = "BPestControl", version = 1.65, description = "Select options in the GUI.") public class BPestControl extends Script implements PaintListener { ScriptManifest sm = getClass().getAnnotation(ScriptManifest.class); double version = sm.version(); class AnimationChecker implements Runnable { public void run() { while (isActive()) { if (getMyPlayer().getAnimation() != -1) { lastAniChange = System.currentTimeMillis(); } try { Thread.sleep(500); } catch (Exception ignored) { } } } } private class Job { private final String n; private boolean done = false; public int points; public Job(final String name, int points) { n = name; this.points = points; } public final String getName() { return n; } public boolean isFinished() { return done; } public String toString() { return "Name " + getName(); } } private class Portal { private final RSTile Location; private final String Name; private final RSTile gateLoc; public Portal(final RSTile t, final String name, final RSTile g) { Location = t; Name = name; gateLoc = g; } public boolean equals(final Portal p) { return p.getLocation().getX() == getLocation().getX() && p.getLocation().getY() == getLocation().getY(); } public RSArea getArea() { RSArea a = null; if (getName().equals("E")) { a = new RSArea(voidLoc.getX() + 24, voidLoc.getY() - 20, voidLoc.getX() + 27, voidLoc.getY() - 15); } else if (getName().equals("W")) { a = new RSArea(voidLoc.getX() - 25, voidLoc.getY() - 15, voidLoc.getX() - 21, voidLoc.getY() - 12); } else if (getName().contains("SE")) { a = new RSArea(voidLoc.getX() + 16, voidLoc.getY() - 34, voidLoc.getX() + 20, voidLoc.getY() - 31); } else if (getName().contains("SW")) { a = new RSArea(voidLoc.getX() - 8, voidLoc.getY() - 35, voidLoc.getX() - 3, voidLoc.getY() - 32); } return a; } public RSObject getGate() { return objects.getTopAt(getGateLocation()); } public RSTile getGateLocation() { return gateLoc; } public RSTile getLocation() { return Location; } public String getName() { return Name; } public RSNPC getNPC() { if (!attackPortals) { return null; } final RSNPC portal = npcs.getNearest("Portal"); if (portal != null) { if (portal.isInCombat()) { return portal; } else { return null; } } return null; } public RSTile getRandom() { final RSTile[][] tiles = getArea().getTiles(); final int y = random(0, tiles.length - 1); final int x = random(0, tiles[y].length - 1); try { return tiles[x][y]; } catch (final Exception e) { return getRandom(); } } public RSArea getRealArea() { RSArea a = null; if (getName().equals("E")) { a = new RSArea(voidLoc.getX() + 16, voidLoc.getY() - 23, voidLoc.getX() + 30, voidLoc.getY() - 9); } else if (getName().equals("W")) { a = new RSArea(voidLoc.getX() - 30, voidLoc.getY() - 24, voidLoc.getX() - 14, voidLoc.getY() - 5); } else if (getName().contains("SE")) { a = new RSArea(voidLoc.getX(), voidLoc.getY() - 45, voidLoc.getX() + 28, voidLoc.getY() - 24); } else if (getName().contains("SW")) { a = new RSArea(voidLoc.getX() - 17, voidLoc.getY() - 44, voidLoc.getX(), voidLoc.getY() - 24); } return a; } public boolean isGateOpen() { return getGate() == null || getGate().getID() > 14240; } public boolean isOpen() { try { if (getName().equals("W")) { if (Integer.parseInt(interfaces.getComponent(408, 13).getText()) < 10) { return false; } } if (getName().equals("E")) { if (Integer.parseInt(interfaces.getComponent(408, 14).getText()) < 10) { return false; } } if (getName().equals("SE")) { if (Integer.parseInt(interfaces.getComponent(408, 15).getText()) < 10) { return false; } } if (getName().equals("SW")) { if (Integer.parseInt(interfaces.getComponent(408, 16).getText()) < 10) { return false; } } } catch (final Exception e) { return false; } return true; } private void openGate() { while (inPest() && !isGateOpen()) { if (getMyPlayer().isMoving()) { sleep(random(500, 600)); continue; } final Point p = calc.tileToScreen(getGateLocation()); if (!calc.pointOnScreen(p)) { walking.walkTileMM(getGateLocation()); try { Thread.sleep(random(500, 700)); } catch (InterruptedException ignored) { } continue; } moveMouse (p, 375, 165); mouse.clickSlightly(); sleep (random (2500,3000)); doAction(p, "Open"); } } public void walkTo() { final Portal p = getNearestPortal(); boolean died = false; final RSNPC npc = npcs.getNearest(squire); if (npc != null) { if (calc.distanceTo(npc) < 10) { died = true; } } boolean atDoor = false; while (inPest() && calc.distanceTo(getLocation()) > 10 && isOpen()) { if (getMyPlayer().isInCombat() && getMyPlayer().getHPPercent() < 2 && calc.distanceTo(npcs.getNearest(squire)) > 15) { return; } if (died) { try { enablePrayer(); Thread.sleep(random(300, 800)); walking.setRun(true); Thread.sleep(random(300, 800)); doDragonBattleAxe(); Thread.sleep(random(300, 800)); } catch (Exception ignored) { } if (!atDoor) { walkPath(genPath(getGateLocation())); if (!isGateOpen() && calc.tileOnScreen(getGateLocation())) { openGate(); if (isGateOpen()) { atDoor = true; } } if (calc.distanceTo(getGateLocation()) < 10 && isGateOpen()) { atDoor = true; } } if (atDoor) { walkPath(genPath(getRandom())); } } else if (p.getName().equals("E") && getName().equals("W")) { while (inPest() && getNearestPortal().getName().equals("E")) { final Portal se = getPortalByName("SE"); if (!walkPath(genPath(se.getRandom()))) { wait(400, 700); } } while (inPest() && getNearestPortal().getName().equals("SE")) { final Portal sw = getPortalByName("SW"); if (!walkPath(genPath(sw.getRandom()))) { wait(400, 700); } } } else if (p.getName().equals("W") && getName().equals("E")) { while (inPest() && getNearestPortal().getName().equals("W")) { final Portal sw = getPortalByName("SW"); if (!walkPath(genPath(sw.getRandom()))) { wait(400, 700); } } while (inPest() && getNearestPortal().getName().equals("SW")) { final Portal se = getPortalByName("SE"); if (!walkPath(genPath(se.getRandom()))) { wait(400, 700); } } while (!walkPath(genPath(getRandom()))) { wait(400, 700); } } else if (p.getName().equals("E") && getName().equals("SE")) { if (!walkPath(genPath(getLocation()))) { wait(400, 700); } } else if (p.getName().equals("SE") && getName().equals("E")) { while (!walkPath(genPath(getLocation()))) { wait(400, 700); } } else if (p.getName().equals("E") && getName().equals("SW")) { while (inPest() && getNearestPortal().getName().equals("E")) { final Portal se = getPortalByName("SE"); if (!walkPath(genPath(se.getRandom()))) { wait(400, 700); } } while (!walkPath(genPath(getRandom()))) { wait(400, 700); } } else if (p.getName().equals("SW") && getName().equals("E")) { while (inPest() && getNearestPortal().getName().equals("SW")) { final Portal se = getPortalByName("SE"); if (!walkPath(genPath(se.getRandom()))) { wait(400, 700); } } while (!walkPath(genPath(getRandom()))) { wait(400, 700); } } else if (p.getName().equals("W") && getName().equals("SW")) { if (!walkPath(genPath(getLocation()))) { wait(400, 700); } } else if (p.getName().equals("SW") && getName().equals("W")) { if (!walkPath(genPath(getLocation()))) { wait(400, 700); } } else if (p.getName().equals("SE") && getName().equals("W")) { while (inPest() && getNearestPortal().getName().equals("SE")) { final Portal se = getPortalByName("SW"); if (!walkPath(genPath(se.getRandom()))) { wait(400, 700); } } while (!walkPath(genPath(getRandom()))) { wait(400, 700); } } else if (p.getName().equals("W") && getName().equals("SE")) { while (inPest() && getNearestPortal().getName().equals("W")) { final Portal se = getPortalByName("SW"); if (!walkPath(genPath(se.getRandom()))) { wait(400, 700); } } while (!walkPath(genPath(getRandom()))) { wait(400, 700); } } else if (p.getName().equals("SW") && getName().equals("SE")) { if (!walkPath(genPath(getLocation()))) { wait(400, 700); } } else if (p.getName().equals("SE") && getName().equals("SW")) { if (!walkPath(genPath(getLocation()))) { wait(400, 700); } } } } public void wait(int min, int max) { try { Thread.sleep(random(min, max)); } catch (Exception ignored) { } } } //private static final int INTERFACE_250_PTS = 213; private final LinkedList jobQ = new LinkedList(); private final LinkedList portalQ = new LinkedList(); private final LinkedList breakQ = new LinkedList(); private final ArrayList antibanQ = new ArrayList(); private Portal current; private boolean start = false; private boolean attackPortals = false; private boolean usePray = false; private boolean played = false; private boolean got250 = false; private boolean attackSpinner = false; private boolean DBaxe = false; private boolean pickupArrows = false; private RSTile[] path; private int plankID = 14315; private final int squire = 3781; private int Squire; private int failsafe = 0; private int points = 0; //private int points = 0; private int specialPercent = 0; private int spendwhenpoints = 0; private int arrowID = 0; private int oldPoints = 0; private int gainedPoints = 0; private int AttState = 0; private int VarAttState = 0; private int lost = 0; private int won = 0; private RSArea boatArea = null; private RSArea BuyArea = null; private RSTile voidLoc = null; private RSTile standingTile = null; private RSTile standingTile2 = null; private long lastAniChange = 0; private long startTime = 0; private long gc = 0; public final int ROTATE_COMPASS = 0; public final int MOVE_MOUSE = 1; public final int MOVE_MOUSE_AND_ROTATE_COMPASS = 2; public final int RIGHT_CLICK_OBJECT = 3; public final int RIGHT_CLICK_NPC = 4; public final int RIGHT_CLICK_PLAYER = 5; private final String[] jobsStrings = new String[]{"Attack", "Defence", "Magic", "Prayer", "Strength", "Ranged", "Hitpoints", "melee helm", "ranger helm", "mage helm", "top", "robes", "gloves", "mace", "deflector", //"seal" }; //"Robe", "Range Helm", "Melee Helm", "Mage Helm", "Glove"}; private final int[] jobsPoints = new int[]{100, 100, 100, 100, 100, 100, 100, 250, 250, 200, 200, 200, 150}; private int width = 0; private int height = 0; private Break curBreak; Pathfinder pf; Runnable antiban = new Runnable() { public void run() { while (isActive()) { try { if (!game.isLoggedIn()) { Thread.sleep(300, 400); continue; } int i = random(0, 150); if (i == 4 || i == 9) performAntiban(antibanQ.get(random(0, antibanQ.size()))); Thread.sleep(random(100, 2000)); } catch (InterruptedException ignored) { } } } }; public void performAntiban(String antiban) throws InterruptedException { log("Doing : " + antiban.toLowerCase().replace('_', ' ')); int ab = AntibanStringToInteger(antiban); switch (ab) { case ROTATE_COMPASS: char dir = 37; if (random(0, 3) == 2) dir = 39; keyboard.pressKey(dir); Thread.sleep(random(500, 2000)); keyboard.releaseKey(dir); break; case MOVE_MOUSE: mouse.move(random(0, game.getWidth()), random(0, game.getHeight())); break; case MOVE_MOUSE_AND_ROTATE_COMPASS: Thread camera = new Thread() { @Override public void run() { char dir = 37; if (random(0, 3) == 2) dir = 39; keyboard.pressKey(dir); try { Thread.sleep(random(500, 2000)); } catch (InterruptedException e) { e.printStackTrace(); } keyboard.releaseKey(dir); } }; Thread mouseThread = new Thread() { @Override public void run() { mouse.move(random(0, game.getWidth()), random( 0, game.getHeight())); } }; camera.start(); mouseThread.start(); while (camera.isAlive() || mouseThread.isAlive()) Thread.sleep(random(100, 300)); break; case RIGHT_CLICK_OBJECT: RSObject obj = getObjOnScreen(); if (obj != null) { mouse.click(calc.tileToScreen(obj.getLocation()), false); Thread.sleep(random(500, 2000)); while (menu.isOpen()) { mouse.moveRandomly(20); } } break; case RIGHT_CLICK_NPC: RSNPC npc = getNPCOnScreen(); if (npc != null) { mouse.click(npc.getScreenLocation(), false); Thread.sleep(random(500, 2000)); while (menu.isOpen()) { mouse.moveRandomly(20); } } break; case RIGHT_CLICK_PLAYER: RSPlayer player = getPlayerOnScreen(); if (player != null) { mouse.click(player.getScreenLocation(), false); Thread.sleep(random(500, 2000)); while (menu.isOpen()) { mouse.moveRandomly(20); } } break; default: break; } } public RSObject getObjOnScreen() { ArrayList result = new ArrayList(); for (int x = 0; x < 104; x++) { for (int y = 0; y < 104; y++) { RSObject obj = objects.getTopAt( new RSTile(x + game.getBaseX(), y + game.getBaseY())); if (obj != null) { Point p = calc.tileToScreen(obj.getLocation()); if (p.x != -1) result.add(obj); } } } if (result.size() == 0) return null; return result.get(random(0, result.size())); } public RSNPC getNPCOnScreen() { RSNPC[] screen = npcs.getAll(new Filter() { public boolean accept(RSNPC npc) { return npc.isOnScreen(); } }); if (screen.length > 0) { return screen[random(0, screen.length)]; } return null; } public int AntibanStringToInteger(String a) { if (a.contains("rotate compass")) return ROTATE_COMPASS; else if (a.contains("move mouse")) return MOVE_MOUSE; else if (a.contains("MOVE_MOUSE_AND_ROTATE_COMPASS" .replaceAll("_", " ").toLowerCase())) return MOVE_MOUSE_AND_ROTATE_COMPASS; else if (a.contains("RIGHT_CLICK_OBJECT".replaceAll("_", " ") .toLowerCase())) return RIGHT_CLICK_OBJECT; else if (a.contains("RIGHT_CLICK_NPC".replaceAll("_", " ") .toLowerCase())) return RIGHT_CLICK_NPC; else if (a.contains("RIGHT_CLICK_PLAYER".replaceAll("_", " ") .toLowerCase())) return RIGHT_CLICK_PLAYER; return -1; } boolean atPortal() { for (final Portal p : portalQ) { if (p.getRealArea().contains(getMyPlayer().getLocation())) { return true; } } return false; } public Break getCurrentBreak() { if ((curBreak == null || curBreak.isDone) && breakQ.size() == 0) return null; if (curBreak == null || curBreak.isDone) curBreak = breakQ.remove(); if (curBreak.Time == null) curBreak.init(); return curBreak; } boolean clickNPC(final RSNPC n, final String action) { if (!calc.tileOnScreen(n.getLocation())) { while (inPest() && atPortal() && !walkPath(genPath(n.getLocation()))) { sleep(random(200, 500)); } } try { Point p; while ((p = n.getScreenLocation()) != null && p.x != -1 && mouse.getLocation().distance(n.getScreenLocation()) > 8) { moveMouse ( p , 1 , 1); } if (!calc.pointOnScreen(mouse.getLocation())) { return false; } if (getTopText().contains(action)) { mouse.click(true); } else if (menu.contains(action)) { mouse.click(false); return menu.doAction(action); } else { return false; } } catch (final Exception ignored) { } return true; } boolean doAction(final Point p, final String action) { if (p.x == -1 || p.y == -1) { return false; } while (p.x != -1 && mouse.getLocation().distance(p) > 8) { mouse.move(p); } if (!calc.pointOnScreen(mouse.getLocation())) { return false; } if (getTopText().contains(action)) { mouse.click(true); } else if (menu.contains(action)) { mouse.click(false); return menu.doAction(action); } else { return false; } return true; } public boolean tileOnMap(RSTile tile) { Point center = calc.tileToMinimap(getMyPlayer().getLocation()); return calc.tileToMinimap(tile).distance(center) <= 70; } void enablePrayer() { if (!PrayerEnabled() && usePray) { mouse.click(random(715, 752), random(60, 80), true); } } int enterBoat() { portalQ.clear(); final RSObject o = objects.getNearest(plankID); if (o != null && !onBoat()) { //camera.setAngle(random(1, 360)); camera.turnTo(o); if (interfaces.get(242).isValid() ) { lost++; interfaces.get(242).getComponent(6).doClick(); } if (interfaces.get(243).isValid() ) { won++; interfaces.get(243).getComponent(7).doClick(); } o.doAction("Cross"); sleep(random(1500,2000)); } return random(600, 800); } void fillPortalList() { if (portalQ.size() < 1) { portalQ.add(new Portal(new RSTile(voidLoc.getX() - 26, voidLoc .getY() - 15), "W", new RSTile(voidLoc.getX() - 12, voidLoc .getY() - 15))); portalQ.add(new Portal(new RSTile(voidLoc.getX() + 26, voidLoc .getY() - 18), "E", new RSTile(voidLoc.getX() + 15, voidLoc .getY() - 15))); portalQ.add(new Portal(new RSTile(voidLoc.getX() + 15, voidLoc .getY() - 36), "SE", new RSTile(voidLoc.getX() + 1, voidLoc .getY() - 22))); portalQ.add(new Portal(new RSTile(voidLoc.getX() - 9, voidLoc .getY() - 37), "SW", new RSTile(voidLoc.getX() + 1, voidLoc .getY() - 22))); } else { portalQ.clear(); fillPortalList(); } } RSTile[] genPath(final RSTile t) { RSTile[] temp = pf.findPath(t); if (temp != null) return temp; RSTile current = getMyPlayer().getLocation(); final ArrayList tiles = new ArrayList(); final ArrayList path = new ArrayList(); while (calc.distanceBetween(t, current) > 2) { final int x = current.getX(); final int y = current.getY(); tiles.add(new RSTile(x, y - 1)); tiles.add(new RSTile(x - 1, y)); tiles.add(new RSTile(x + 1, y)); tiles.add(new RSTile(x, y + 1)); tiles.add(new RSTile(x - 1, y - 1)); tiles.add(new RSTile(x + 1, y - 1)); tiles.add(new RSTile(x + 1, y + 1)); tiles.add(new RSTile(x - 1, y + 1)); final RSTile tile = getNearest(tiles, t); path.add(tile); this.path = path.toArray(new RSTile[path.size()]); current = tile; tiles.clear(); } this.path = path.toArray(new RSTile[path.size()]); return this.path; } Portal getCurrentPortal() { return current; } Job getJob() { if (jobQ.size() == 0) return null; return jobQ.getFirst(); } RSTile getNearest(final ArrayList tiles, final RSTile t) { RSTile nearest = tiles.get(0); for (RSTile tile : tiles) { if (calc.distanceBetween(tile, t) < calc.distanceBetween( nearest, t)) { nearest = tile; } } return nearest; } Portal getNearestOpenPortal() { if (portalQ.size() < 1) { return null; } Portal winner = null; for (final Portal p : portalQ) { if (p.isOpen()) { winner = p; } } if (winner == null) { return null; } for (final Portal p : portalQ) { if (!p.isOpen()) { continue; } if (calc.distanceTo(p.getLocation()) < calc.distanceTo(winner.getLocation())) { winner = p; } } current = winner; return winner; } Portal getNearestPortal() { if (portalQ.size() < 1) { return null; } Portal winner = portalQ.get(0); for (final Portal p : portalQ) { if (calc.distanceTo(p.getLocation()) < calc.distanceTo(winner.getLocation())) { winner = p; } } return winner; } RSTile getNext(final RSTile[] path) { RSTile nearest = path[0]; for (final RSTile element : path) { if (calc.distanceBetween(element, path[path.length - 1]) < calc .distanceBetween(nearest, path[path.length - 1])) { if (tileOnMap(element)) { nearest = element; } } } return nearest; } RSPlayer getPlayerOnScreen() { RSPlayer[] screen = players.getAll(new Filter() { public boolean accept(RSPlayer p) { return p.isOnScreen(); } }); if (screen.length > 0) { return screen[random(0, screen.length)]; } return null; } Portal getPortalByName(final String name) { if (portalQ.size() < 1) { return null; } for (final Portal p : portalQ) { if (p.getName().equalsIgnoreCase(name)) { return p; } } return null; } Portal getRandomOpenPortal() { if (portalQ.size() < 1) { return null; } final ArrayList po = new ArrayList(); for (final Portal p : portalQ) { if (p.isOpen()) { po.add(p); } } current = po.get(random(0, po.size())); return current; } String getTopText() { try { final long start = System.currentTimeMillis(); String[] menuItems = menu.getItems(); if (menuItems.length == 0) { return "Cancel"; } while (menuItems[0].contains("Cancel") && calc.pointOnScreen(mouse.getLocation()) && System.currentTimeMillis() - start < 700) { menuItems = menu.getItems(); } return menuItems[0]; } catch (Exception e) { return getTopText(); } } boolean inPest() { return npcs.getNearest(Squire) == null; } public void exchange() { if (getJob().getName().equals("Attack")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna click on 100x"); interfaces.get(1011).getComponent(87).doClick(); sleep(random(4000, 5000)); log ("we clicked 100x, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); } if (getJob().getName().equals("Defence")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna click on 100x"); interfaces.get(1011).getComponent(119).doClick(); sleep(random(4000, 5000)); log ("we clicked 100x, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); } if (getJob().getName().equals("Magic")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna click on 100x"); interfaces.get(1011).getComponent(167).doClick(); sleep(random(4000, 5000)); log ("we clicked 100x, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); } if (getJob().getName().equals("Prayer")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna click on 100x"); interfaces.get(1011).getComponent(183).doClick(); sleep(random(4000, 5000)); log ("we clicked 100x, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); } if (getJob().getName().equals("Strength")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna click on 100x"); interfaces.get(1011).getComponent(103).doClick(); sleep(random(4000, 5000)); log ("we clicked 100x, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); } if (getJob().getName().equals("Ranged")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna click on 100x"); interfaces.get(1011).getComponent(151).doClick(); sleep(random(4000, 5000)); log ("we clicked 100x, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); } if (getJob().getName().equals("Hitpoints")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna click on 100x"); interfaces.get(1011).getComponent(135).doClick(); sleep(random(4000, 5000)); log ("we clicked 100x, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); } //the void armor //if (getJob().getName().equals("seal")) { //sleep (random(6000,8000)); //sleep(random(5000, 6500)); // log ("we're gonna the tab"); ///interfaces.get(1011).getComponent(28).doClick(); // sleep(random(4000, 5000)); // log ("we clicked the tab, now click exchange.."); // sleep(random(3500,4600)); // interfaces.get(1011).getComponent(279).doClick(); // log ("we clicked exchange, now confirm"); // sleep(random(5000, 6500)); // interfaces.get(1011).getComponent(382).doClick(); // log ("we confirmed"); // walkPath(genPath(new RSTile (2657, 2639)), 2); //} if (getJob().getName().equals("deflector")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna the tab"); interfaces.get(1011).getComponent(28).doClick(); sleep(random(4000, 5000)); log ("we clicked the tab, now click exchange.."); sleep(random(3500,4600)); interfaces.get(1011).getComponent(266).doClick(); log ("we clicked exchange, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); jobQ.remove(); } if (getJob().getName().equals("mace")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna the tab"); interfaces.get(1011).getComponent(28).doClick(); sleep(random(4000, 5000)); log ("we clicked the tab, now click exchange.."); sleep(random(3500,4600)); interfaces.get(1011).getComponent(254).doClick(); log ("we clicked exchange, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); jobQ.remove(); } if (getJob().getName().equals("gloves")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna the tab"); interfaces.get(1011).getComponent(28).doClick(); sleep(random(4000, 5000)); log ("we clicked the tab, now click exchange.."); sleep(random(3500,4600)); interfaces.get(1011).getComponent(243).doClick(); log ("we clicked exchange, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); jobQ.remove(); } if (getJob().getName().equals("robes")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna the tab"); interfaces.get(1011).getComponent(28).doClick(); sleep(random(4000, 5000)); log ("we clicked the tab, now click exchange.."); sleep(random(3500,4600)); interfaces.get(1011).getComponent(231).doClick(); log ("we clicked exchange, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); jobQ.remove(); } if (getJob().getName().equals("top")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna the tab"); interfaces.get(1011).getComponent(28).doClick(); sleep(random(4000, 5000)); log ("we clicked the tab, now click exchange.."); sleep(random(3500,4600)); interfaces.get(1011).getComponent(219).doClick(); log ("we clicked exchange, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); jobQ.remove(); } if (getJob().getName().equals("mage helm")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna the tab"); interfaces.get(1011).getComponent(28).doClick(); sleep(random(4000, 5000)); log ("we clicked the tab, now click exchange.."); sleep(random(3500,4600)); interfaces.get(1011).getComponent(207).doClick(); log ("we clicked exchange, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); jobQ.remove(); } if (getJob().getName().equals("ranger helm")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna the tab"); interfaces.get(1011).getComponent(28).doClick(); sleep(random(4000, 5000)); log ("we clicked the tab, now click exchange.."); sleep(random(3500,4600)); interfaces.get(1011).getComponent(195).doClick(); log ("we clicked exchange, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); jobQ.remove(); } if (getJob().getName().equals("melee helm")) { sleep (random(6000,8000)); sleep(random(5000, 6500)); log ("we're gonna the tab"); interfaces.get(1011).getComponent(28).doClick(); sleep(random(4000, 5000)); log ("we clicked the tab, now click exchange.."); sleep(random(3500,4600)); interfaces.get(1011).getComponent(290).doClick(); log ("we clicked exchange, now confirm"); sleep(random(5000, 6500)); interfaces.get(1011).getComponent(382).doClick(); log ("we confirmed"); oldPoints = 0; played = false; points = 0; got250 = false; interfaces.get(1011).getComponent(51).doClick(); sleep (2000, 3500); walkPath(genPath(new RSTile (2657, 2639)), 2); jobQ.remove(); } //equipment: 21 & 28 //melee helm: 66 290 //ranger helm: 98 195 //mage helm: 114 207 //top: 130 219 //robes: 146 231 //gloves: 162 243 //mace: 254 //deflector: 178 266 //seal: 279 // "Attack", "Defence", // "Magic", "Prayer", "Strength", "Ranged", "Hitpoints", "Top", // "Robe", "Range Helm", "Melee Helm", "Mage Helm", "Glove" //jobQ.remove(j); } @Override public int loop() { VarAttState = GetAttState(); if (!(VarAttState == AttState)) { RSComponent set1 = interfaces.getComponent(884, 11); RSComponent set2 = interfaces.getComponent(884, 12); RSComponent set3 = interfaces.getComponent(884, 13); RSComponent set4 = interfaces.getComponent(884, 14); if (game.getCurrentTab() != Game.TAB_ATTACK) game.openTab(Game.TAB_ATTACK); if (AttState == 0) { set1.doClick(); } if (AttState == 1) { set2.doClick(); } if (AttState == 2) { set3.doClick(); } if (AttState == 3) { set4.doClick(); } } try { mouse.setSpeed(random(5, 8)); if (gc == 0) gc = System.currentTimeMillis(); if (!onBoat() && !inPest()) { Break b = getCurrentBreak(); if (b != null && b.needsBreak()) b.takeBreak(); } //if (interfaces.get(INTERFACE_250_PTS).isValid()) { // got250 = true; //} if (points >= spendwhenpoints && !inPest()) { log ("We have (more than) the required number of points!"); got250 = true; } if (getMyPlayer().isInCombat() && getMyPlayer().getHPPercent() < 2 && calc.distanceTo(npcs.getNearest(squire)) > 15) { return random(600, 800); } // if (!(getMyPlayer().isInCombat()) && inPest() && standStill() == true) { // log ("fixing standing still"); // } adding later RSNPC changer = npcs.getNearest(3788); RSNPC changer2 = npcs.getNearest(3789); if (!onBoat() && !inPest() && getJob() != null && got250 == true && !interfaces.get(1011).isValid()) { log ("we're gonna buy (dojob)"); //doJob(); final Job j = getJob(); if (j == null) { log ("we returned"); //return; } if (j.points == 100 && !got250) { log ("we returned 2"); //return; } //if (npcs.getNearest(3788) == null && !inBuyArea()) { // log ("the void is null"); // walkPath(genPath(new RSTile(9545, 10657)), 2); // walkPath(genPath(npcs.getNearest(3788).getLocation()), 2); // sleep(random(5000, 6500)); // clickNPC(npcs.getNearest(3788), "Exchange"); // } else if (calc.distanceTo(npcs.getNearest(3788)) > 3) { //} else if (npcs.getNearest(3788) != null && !inBuyArea()){ // log ("the void is not null"); // walkPath(genPath(new RSTile(2662, 2650)), 2); // walkPath(genPath(npcs.getNearest(3788).getLocation()), 2); // clickNPC(npcs.getNearest(3788), "Exchange"); // } //RSNPC changer = npcs.getNearest(3788); //RSNPC changer2 = npcs.getNearest(3789); //if (changer.isOnScreen()) { // clickNPC(npcs.getNearest(3788), "Exchange"); //log ("we clicked the void"); // exchange(); ///} else { // walkPath(genPath(npcs.getNearest(3788).getLocation()), 2); //} //if (changer2.isOnScreen()) { // clickNPC(npcs.getNearest(3789), "Exchange"); // log ("we clicked the void"); // exchange(); //} else { // walkPath(genPath(npcs.getNearest(3788).getLocation()), 2); //} if (changer.isOnScreen()&& !(interfaces.get(1011).isValid())) { log ("the changer is on screen"); clickNPC(npcs.getNearest(3788), "Exchange"); sleep (random(3000,4000)); } else { walkPath(genPath(npcs.getNearest(3788).getLocation()), 2); camera.turnTo(changer); sleep (random(1000,2000)); if (changer.isOnScreen()&& !(interfaces.get(1011).isValid())) { clickNPC(npcs.getNearest(3788), "Exchange"); sleep (random(3000,4000)); } else { if (changer2.isOnScreen() && !(interfaces.get(1011).isValid())) { log ("the changer is on screen"); clickNPC(npcs.getNearest(3789), "Exchange"); sleep (random(3000,4000)); } else { walkPath(genPath(npcs.getNearest(3789).getLocation()), 2); sleep (random(3000,4000)); clickNPC(npcs.getNearest(3789), "Exchange"); sleep (random(3000,4000)); } return 3000; } } } if (interfaces.get(1011).isValid()) { exchange(); } //if (inBuyArea()) { // log ("we're in the buy area"); // camera.turnToCharacter(changer); // } else { // log ("the changer is NOT on screen"); // walkPath(genPath(npcs.getNearest(3789).getLocation()), 2); // camera.turnToCharacter(changer); // clickNPC(npcs.getNearest(3789), "Exchange"); // sleep (random(3000,4000)); // if (interfaces.get(1011).isValid()) { // log ("interface is valid"); // exchange(); // } else { // walkPath(genPath(npcs.getNearest(3789).getLocation()), 2); // sleep (random(3000,4000)); // clickNPC(npcs.getNearest(3788), "Exchange"); // sleep (random(3000,4000)); // } // } // } return 4000; //} if (getJob() == null && got250) { game.logout(false); log("Thanks for using BPestControl"); log("Reached 250 points and out of jobs"); } if (menu.isOpen()) { mouse.move(random(5, 760), random(5, 500)); } if (!inPest() && !onBoat() && !inBuyArea() && !got250) { return enterBoat(); } if (onBoat()) { String s = ""; if (interfaces.getComponent(407, 16) != null) { s = interfaces.getComponent(407, 16).getText(); } points = Integer.parseInt(s.replace("Commendations: ", "")); if (played) { if (points > oldPoints) { gainedPoints += points - oldPoints; } //if (points - oldPoints == 0) { // lost++; //} else { // won++; //} } oldPoints = points; played = false; return random(400, 700); } if (npcs.getNearest(squire) != null) { voidLoc = npcs.getNearest(squire).getLocation(); fillPortalList(); } if (inPest()) { return pestLoop(); } } catch (Exception ignored) { } return random(100, 800); } public void moveMouse(final Point p, final int rX, final int rY) { final int X = p.x + random(-(rX / 1), (rX / 1)); final int Y = p.y + random(-(rY / 1), (rY / 1)); mouse.move(X, Y); } boolean onBoat() { return boatArea != null && boatArea.contains(getMyPlayer().getLocation()); } boolean inBuyArea() { //int[] BuyArea = {2658, 2646, 2671, 2658}; BuyArea = new RSArea (2658, 2647, 2667, 2659); return BuyArea != null && BuyArea.contains(getMyPlayer().getLocation()); } int GetAttState() { return settings.getSetting(43); } @Override public boolean onStart() { if (game.isLoggedIn()) { start = false; URLConnection url = null; BufferedReader in = null; JOptionPane.showMessageDialog(null, "Checking for updates... Click OK to continue!"); try { JOptionPane.showMessageDialog(null, "You have the latest version."); if (in != null) in.close(); } catch (IOException e) { return false; } final BGUI gui = new BGUI(); gui.setVisible(true); while (gui.isVisible()) { sleep(random(500, 600)); } if (!start) { return false; } new Thread(new AnimationChecker()).start(); new Thread(antiban).start(); log("starting script"); pf = new Pathfinder(); } else { log("Login before starting this script."); stopScript(false); return false; } return true;Gravemindx; remake by Louisc999."); log("Gained " + gainedPoints + " points."); } public void onRepaint(final Graphics g) { Point mLoc = mouse.getLocation(); g.setColor(Color.blue); g.drawLine(mLoc.x, 0, mLoc.x, 502); g.drawLine(0, mLoc.y, 764, mLoc.y); if (getCurrentBreak() != null) { g.drawString(getCurrentBreak().getTimeTillBreak(), 10, 400); g.drawString("" + getCurrentBreak().needsBreak(), 10, 415); } int y = 120; final int x = 20; g.setColor(new Color(51, 153, 255, 170)); g.fillRoundRect(15, 120, width, height, 5, 5); g.setColor(Color.WHITE); g.drawRoundRect(15, 120, width, height, 5, 5); width = 0; height = 0; if (startTime == 0) { startTime = System.currentTimeMillis(); } long millis = System.currentTimeMillis() - startTime; try { g.setColor(Color.WHITE); g.setFont(new Font("Arial", Font.BOLD, 14)); g.drawString("BPestControl by Louisc999 v1.66", x, y += g .getFontMetrics().getHeight()); height += g.getFontMetrics().getHeight(); width = (int) g.getFontMetrics().getStringBounds( "BPestControl by GrAVeMinDx v1.51", g).getWidth(); g.setFont(new Font("Arial", Font.PLAIN, 12)); g.drawString("Lost " + lost + " Games", x, y += g.getFontMetrics() .getHeight()); height += g.getFontMetrics().getHeight(); g.drawString("won " + won + " Games", x, y += g.getFontMetrics() .getHeight()); height += g.getFontMetrics().getHeight(); g.drawString("Gained " + gainedPoints + " points", x, y += g .getFontMetrics().getHeight()); height += g.getFontMetrics().getHeight(); g.drawString("Time running : " + timeToString(millis), x, y += g .getFontMetrics().getHeight()); height += g.getFontMetrics().getHeight(); if (getJob() != null) { if (g.getFontMetrics().getStringBounds( "Spending points on " + getJob().getName(), g) .getWidth() > width) { width = (int) g.getFontMetrics().getStringBounds( "Spending points on " + getJob().getName(), g) .getWidth(); } g.drawString("Spending points on " + getJob().getName() + " " + points, x, y += g.getFontMetrics().getHeight()); height += g.getFontMetrics().getHeight(); } height += 5; width += 10; } catch (final Exception ignored) { } } int pestLoop() { if (!played) { played = true; } try { if (!atPortal()) { final Portal p = getRandomOpenPortal(); p.walkTo(); return random(100, 600); } if (!getCurrentPortal().equals(getNearestPortal())) { if (getNearestOpenPortal() != null) { getNearestOpenPortal().walkTo(); } return random(100, 600); } if (!getCurrentPortal().isOpen()) { if (getNearestOpenPortal() != null) { getNearestOpenPortal().walkTo(); } return random(100, 600); } checkSpecial(); if (getMyPlayer().getInteracting() == null) { RSGroundItem t = groundItems.getNearest(arrowID); if (t != null && t.isOnScreen()) { t.doAction("Take"); return random(600, 800); } path = null; if (!inPest()) { return random(100, 500); } failsafe = 0; RSNPC c; if (getCurrentPortal().getNPC() != null) { c = getCurrentPortal().getNPC(); } else { c = getNPC(attackSpinner); } //if (c != null) { // if (clickNPC(c, "Attack")) { // return random(600, 1200); // } //} if (c != null) { clickNPC(c, "Attack"); //return random(10000, 13000); } //return random(400, 700); } else { RSNPC n = getNPC(true); if (n != null && n.getName().contains("Spinner")) { RSNPC inter = (RSNPC) getMyPlayer().getInteracting(); if ((inter != null && !inter.getName().equals(n.getName())) || inter == null) if (clickNPC(n, "Attack Spinner")) { //return random(600, 1200); } } path = null; if (failsafe > 4) { walking.walkTileMM(getNearestOpenPortal().getRandom()); } final RSNPC npc = (RSNPC) getMyPlayer().getInteracting(); if (getMyPlayer().isMoving() || getMyPlayer().getInteracting() != null || System.currentTimeMillis() - lastAniChange < 2000 || npc != null && npc.getName().contains("ortal")) { failsafe = 0; } else { failsafe++; sleep(random(600, 800)); } return random(400, 700); } } catch (final Exception ignored) { } return random(400, 700); } boolean PrayerEnabled() { return settings.getSetting(1395) > 0; } private int i = 0; boolean walkPath(final RSTile[] path) { final char left = 37; final char right = 39; RSTile tile = getNext(path); mouse.move(calc.worldToMinimap(tile.getX(), tile.getY())); if (!inPest()) { return true; } if (i == 7) { char dir = random(0, 3) == 2 ? left : right; keyboard.pressKey(dir); sleep(random(800, 1200)); keyboard.releaseKey(dir); i = 0; return false; } if (getTopText().contains("Cancel")) { i++; return false; } try { walking.walkTileMM(getNext(path)); sleep(random(200, 500)); while (getMyPlayer().isMoving() && calc.distanceTo(walking.getDestination()) > 7) { sleep(random(600, 800)); } } catch (final Exception ignored) { } return calc.distanceTo(path[path.length - 1]) < 10 || !inPest(); } void checkSpecial() { if (specialPercent == 0 ) { return; } int percent = (settings.getSetting(300) / 10); if (percent >= specialPercent && settings.getSetting(301) == 0) { RSComponent child = interfaces.getComponent(884, 4); if (game.getCurrentTab() != Game.TAB_ATTACK) game.openTab(Game.TAB_ATTACK); child.doClick(); sleep(random(2000, 3000)); } } void walkPath(final RSTile[] path, final int i) { try { walking.walkTileMM(getNext(path)); sleep(random(200, 500)); while (getMyPlayer().isMoving() && calc.distanceTo(walking.getDestination()) > 7) { sleep(random(600, 800)); } } catch (final Exception ignored) { } } int daxeID = 0; int oldID = 0; public void doDragonBattleAxe() { if (!DBaxe) return; if (game.getCurrentTab() != Game.TAB_INVENTORY) game.openTab(Game.TAB_INVENTORY); inventory.getItem(daxeID).doClick(true); game.openTab(Game.TAB_ATTACK); RSComponent child = interfaces.getComponent(884, 4); child.doClick(); sleep(random(1200, 1500)); if (game.getCurrentTab() != Game.TAB_INVENTORY) game.openTab(Game.TAB_INVENTORY); inventory.getItem(oldID).doClick(true); } RSNPC getNPC(boolean spinner) { final String[] names = {"Shifter", "Defiler", "Torcher", "Brawler", "Ravager", "Spinner"}; RSNPC closest = null; RSNPC[] result = npcs.getAll(new Filter() { public boolean accept(RSNPC monster) { for (String name : names) { if (!name.equals(monster.getName()) || calc.distanceBetween(getCurrentPortal().getLocation(), monster.getLocation()) > 10 || monster.isInCombat() && monster.getHPPercent() < 10) { continue; } return true; } return false; } }); if (result.length == 0) return null; RSNPC s = null; for (RSNPC npc : result) { if (spinner) { if (npc.getName().equalsIgnoreCase("Spinner")) { if (s == null || calc.distanceTo(s) > calc.distanceTo(npc)) s = npc; } } if (closest == null || calc.distanceTo(closest) > calc.distanceTo(npc)) closest = npc; } if (spinner && s != null) { return s; } return closest; } public String timeToString(long time) { final long hours = time / (1000 * 60 * 60); time -= hours * 1000 * 60 * 60; final long minutes = time / (1000 * 60); time -= minutes * 1000 * 60; final long seconds = time / 1000; String str = ""; if (hours < 10) str += "0"; str += hours + ":"; if (minutes < 10) str += "0"; str += minutes + ":"; if (seconds < 10) str += "0"; str += seconds; return str; } class Break { public boolean isDone = false; int time, after; public Timer Time; long end; public Break(int time, int after) { this.time = time; this.after = after; end = System.currentTimeMillis() + after; } public void init() { Time = new Timer(time); end = System.currentTimeMillis() + after; } public void takeBreak() { while (game.isLoggedIn()) game.logout(false); Time.reset(); log("Taking break for " + Time.toString()); while (!Time.isDone()) { try { Thread.sleep(random(500, 800)); } catch (InterruptedException ignored) { } } isDone = true; } public String getTimeTillBreak() { return timeToString(end - System.currentTimeMillis()); } public boolean needsBreak() { return System.currentTimeMillis() > end; } } // ---------- class Timer { private long start; private int time; public Timer(int time) { start = System.currentTimeMillis(); this.time = time; } public Timer() { this(0); } public boolean isDone() { return (System.currentTimeMillis() - start) > time; } public void reset() { start = System.currentTimeMillis(); } @Override public String toString() { return timeToString((System.currentTimeMillis() - start)); } } // ---------- class Pathfinder { public int basex, basey; public int[][] blocks; public Pathfinder() { reload(); } public void reload() { basex = game.getBaseX(); basey = game.getBaseY(); blocks = walking.getCollisionFlags(game.getPlane()); } public RSTile[] findPath(RSTile dest) { if (!isValid()) reload(); return findPath(getMyPlayer().getLocation(), dest); } public RSTile[] findPath(RSTile start, RSTile dest) { if (!isValid()) reload(); return findPath( new Node(start.getX() - basex, start.getY() - basey), new Node(dest.getX() - basex, dest.getY() - basey)); } public RSTile[] findPath(Node start, Node dest) { if (!isValid()) reload(); if (!calc.canReach(new RSTile(dest.x + basex, dest.y + basey), false)) { return null; } ArrayList closed = new ArrayList(); ArrayList open = new ArrayList(); Node current = start; open.add(current); while (open.size() != 0) { current = getBestNode(open); closed.add(current); open.remove(current); for (Node node : getNodesAround(current)) { if (!closed.contains(node)) { if (!open.contains(node)) { node.parent = current; node.cost = current.cost + getMovementCost(node, current); node.heuristic = node.cost + getHeuristicCost(node, dest); open.add(node); } else { if (current.cost + getMovementCost(node, current) < node.cost) { node.parent = current; node.cost = current.cost + getMovementCost(node, current); node.heuristic = node.cost + getHeuristicCost(node, dest); } } } } if (closed.contains(dest)) { final ArrayList result = new ArrayList(); Node node = closed.get(closed.size() - 1); while (node.parent != null) { result.add(new RSTile(node.x + basex, node.y + basey)); node = node.parent; } path = reversePath(result .toArray(new RSTile[result.size()])); return path; } } return null; } /** * Reverses an array of tiles. * * @param other The RSTile path array to reverse. * @return The reverse RSTile path for the given RSTile * path. */ @Deprecated public RSTile[] reversePath(RSTile[] other) { RSTile[] t = new RSTile[other.length]; for (int i = 0; i < t.length; i++) { t[i] = other[other.length - i - 1]; } return t; } public Node getBestNode(ArrayList nodes) { Node winner = null; for (Node node : nodes) { if (winner == null || node.cost < winner.cost) { winner = node; } } return winner; } public double getHeuristicCost(Node current, Node dest) { float dx = dest.x - current.x; float dy = dest.y - current.y; return Math.sqrt((dx * dx) + (dy * dy)); } public double getMovementCost(Node current, Node dest) { return Math.hypot(dest.x - current.x, dest.y - current.y); } /* (non-Javadoc) * credits to Jacmob */ public ArrayList getNodesAround(Node node) { final ArrayList tiles = new ArrayList(); final int curX = node.x, curY = node.y; if (curX > 0 && curY < 103 && (blocks[curX - 1][curY + 1] & 0x1280138) == 0 && (blocks[curX - 1][curY] & 0x1280108) == 0 && (blocks[curX][curY + 1] & 0x1280120) == 0) { tiles.add(new Node(curX - 1, curY + 1)); } if (curY < 103 && (blocks[curX][curY + 1] & 0x1280120) == 0) { tiles.add(new Node(curX, curY + 1)); } if (curX > 0 && curY < 103 && (blocks[curX - 1][curY + 1] & 0x1280138) == 0 && (blocks[curX - 1][curY] & 0x1280108) == 0 && (blocks[curX][curY + 1] & 0x1280120) == 0) { tiles.add(new Node(curX + 1, curY + 1)); } if (curX > 0 && (blocks[curX - 1][curY] & 0x1280108) == 0) { tiles.add(new Node(curX - 1, curY)); } if (curX < 103 && (blocks[curX + 1][curY] & 0x1280180) == 0) { tiles.add(new Node(curX + 1, curY)); } if (curX > 0 && curY > 0 && (blocks[curX - 1][curY - 1] & 0x128010e) == 0 && (blocks[curX - 1][curY] & 0x1280108) == 0 && (blocks[curX][curY - 1] & 0x1280102) == 0) { tiles.add(new Node(curX - 1, curY - 1)); } if (curY > 0 && (blocks[curX][curY - 1] & 0x1280102) == 0) { tiles.add(new Node(curX, curY - 1)); } if (curX < 103 && curY > 0 && (blocks[curX + 1][curY - 1] & 0x1280183) == 0 && (blocks[curX + 1][curY] & 0x1280180) == 0 && (blocks[curX][curY - 1] & 0x1280102) == 0) { tiles.add(new Node(curX + 1, curY - 1)); } return tiles; } public boolean isValid() { return basex == game.getBaseX() && basey == game.getBaseY(); } class Node { public final int x, y; public double cost = 0, heuristic = 0; public Node parent; public Node(int x, int y) { this.x = x; this.y = y; } public boolean equals(Object other) { if (other instanceof Node) { Node o = (Node) other; return x == o.x && y == o.y; } return false; } } } // ---------- class BGUI extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JPanel contentPane; private JTabbedPane tabbedPane; private JTable table; private JTextField textField; private JTextField textField_1; private JButton btnAddBreak; private DefaultTableModel model; private DefaultListModel jobmodel; private JButton btnAddAntiban; private JComboBox comboBox_1; private JList list_1; private JButton btnAddJob; private JButton btnDelJob; private JList list; private JComboBox comboBox; public BGUI() { super("BPestControl"); initGUI(); } private void initGUI() { setAlwaysOnTop(true); setResizable(false); try { UIManager.setLookAndFeel(UIManager .getSystemLookAndFeelClassName()); } catch (Exception ignored) { } setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); tabbedPane = new JTabbedPane(SwingConstants.LEFT); tabbedPane.setBounds(10, 10, 414, 218); contentPane.add(tabbedPane); final JPanel panel = new JPanel(); tabbedPane.addTab("Main", null, panel, null); final JLabel lblnote = new JLabel("note: fill in how much precent special it needs to be"); lblnote.setBounds(10, 232, 300, 16); contentPane.add(lblnote); final JLabel lblnote2 = new JLabel("to do a special attack (example: 80) no % symbol"); lblnote2.setBounds(43, 243, 300, 16); contentPane.add(lblnote2); btnStartScript = new JButton("Start script"); btnStartScript.addActionListener(this); btnStartScript.setBounds(327, 234, 97, 23); contentPane.add(btnStartScript); panel.setLayout(null); final JPanel panel_2 = new JPanel(); tabbedPane.addTab("Antiban", null, panel_2, null); chckbxUseSpecialAttack = new JCheckBox("Use special attack when at (fill in how much precent)"); chckbxUseSpecialAttack.setBounds(10, 10, 126, 17); panel.add(chckbxUseSpecialAttack); chckbxUseQuickPrayer = new JCheckBox("Use quick prayer"); chckbxUseQuickPrayer.setBounds(10, 27, 126, 17); panel.add(chckbxUseQuickPrayer); final JLabel spendnote = new JLabel("spend if we have"); spendnote.setBounds(28, 44, 126, 17); panel.add(spendnote); spendwhen = new JTextField(); spendwhen.setText("250"); spendwhen.setBounds(137, 43, 31, 19); panel.add(spendwhen); comboBox = new JComboBox(); comboBox.setModel(new DefaultComboBoxModel(jobsStrings)); comboBox.setBounds(10, 70, 126, 24); panel.add(comboBox); btnAddJob = new JButton("Add Job"); btnAddJob.setBounds(20, 95, 103, 23); btnAddJob.addActionListener(this); panel.add(btnAddJob); btnDelJob = new JButton("Delete Job"); btnDelJob.setBounds(20, 120, 103, 23); btnDelJob.addActionListener(this); panel.add(btnDelJob); final JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(180, 10, 126, 193); panel.add(scrollPane); jobmodel = new DefaultListModel(); list = new JList(jobmodel); scrollPane.setViewportView(list); list.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null)); final JPanel panel_7 = new JPanel(); tabbedPane.addTab("Break handler", null, panel_7, null); panel_2.setLayout(null); m = new DefaultListModel(); list_1 = new JList(m); list_1.setBorder(new LineBorder(new Color(0, 0, 0))); list_1.setBounds(10, 10, 307, 164); panel_2.add(list_1); btnAddAntiban = new JButton("Add antiban"); btnAddAntiban.addActionListener(this); btnAddAntiban.setBounds(10, 180, 97, 23); panel_2.add(btnAddAntiban); comboBox_1 = new JComboBox(); comboBox_1.setModel(new DefaultComboBoxModel(new String[]{ "rotate compass", "move mouse", "move mouse and rotate compass", "rest", "right click object", "right click npc", "right click player"})); comboBox_1.setBounds(113, 180, 204, 23); panel_2.add(comboBox_1); panel_7.setLayout(null); table = new JTable(); table.setBorder(new LineBorder(new Color(0, 0, 0))); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setBounds(10, 10, 301, 164); model = new DefaultTableModel(); table.setModel(model); model.addColumn(""); model.addColumn(""); panel_7.add(table); btnAddBreak = new JButton("Add break"); btnAddBreak.addActionListener(this); btnAddBreak.setBounds(10, 180, 89, 23); panel_7.add(btnAddBreak); final JLabel lblBreakFor = new JLabel("Break for"); lblBreakFor.setBounds(105, 183, 52, 16); panel_7.add(lblBreakFor); textField = new JTextField(); textField.setBounds(158, 181, 27, 21); panel_7.add(textField); textField.setColumns(10); final JLabel lblAfter = new JLabel("after "); lblAfter.setBounds(190, 183, 27, 16); panel_7.add(lblAfter); textField_1 = new JTextField(); textField_1.setBounds(218, 181, 26, 21); panel_7.add(textField_1); textField_1.setColumns(10); btnRemove = new JButton("Delete"); btnRemove.addActionListener(this); btnRemove.setBounds(248, 181, 65, 23); panel_7.add(btnRemove); comboBox_2 = new JComboBox(); comboBox_2.setModel(new DefaultComboBoxModel(new String[]{ "Novice", "Intermediate", "Veteran"})); comboBox_2.setBounds(10, 181, 141, 22); panel.add(comboBox_2); chckbxAttackPortals = new JCheckBox("Attack portals"); chckbxAttackPortals.setBounds(10, 145, 105, 17); panel.add(chckbxAttackPortals); specialtxt = new JTextField(); specialtxt.setText(""); specialtxt.setBounds(137, 10, 31, 19); panel.add(specialtxt); specialtxt.setColumns(10); chckbxattackspinners = new JCheckBox("Attack spinners"); chckbxattackspinners.setBounds(10, 160, 113, 17); panel.add(chckbxattackspinners); } DefaultListModel m; private JButton btnRemove; public void actionPerformed(final ActionEvent e) { if (e.getSource() == btnStartScript) { AttState = GetAttState(); start = true; attackPortals = chckbxAttackPortals.isSelected(); attackSpinner = chckbxattackspinners.isSelected(); spendwhenpoints = Integer.parseInt(spendwhen.getText()); if (pickupArrows) { if (game.getCurrentTab() != Game.TAB_EQUIPMENT) game.openTab(Game.TAB_EQUIPMENT); arrowID = equipment.getItem(Equipment.AMMO).getID(); } if (DBaxe) { if (game.getCurrentTab() != Game.TAB_EQUIPMENT) game.openTab(Game.TAB_EQUIPMENT); oldID = equipment.getItem(Equipment.WEAPON).getID(); } usePray = chckbxUseQuickPrayer.isSelected(); if (chckbxUseSpecialAttack.isSelected()) { try { specialPercent = Integer.parseInt(specialtxt.getText()); } catch (Exception check) { specialPercent = 0; } } else { specialPercent = 0; } for (int i = 0; i < jobmodel.getSize(); i++) { int index = 0; for (int j = 0; j < jobsStrings.length; j++) if (jobsStrings[j].equals(jobmodel.get(i).toString())) index = j; jobQ.add(new Job(jobmodel.get(i).toString(), jobsPoints[index])); } for (int i = 0; i < m.getSize(); i++) { antibanQ.add(m.get(i).toString()); } int i = comboBox_2.getSelectedIndex(); log("" + i); if (i == 0) { plankID = 14315; boatArea = new RSArea(2660, 2638, 2663, 2643); Squire = 3802; } else if (i == 1) { plankID = 25631; boatArea = new RSArea(2638, 2642, 2641, 2647); Squire = 6140; } else { plankID = 25632; boatArea = new RSArea(2632, 2649, 2635, 2654); Squire = 6141; } dispose(); } if (e.getSource() == btnAddJob) { jobmodel.addElement(comboBox.getSelectedItem()); } if (e.getSource() == btnDelJob) { jobmodel.removeElement(comboBox.getSelectedItem()); } if (e.getSource() == btnRemove) { if (table.getSelectedRow() != -1) model.removeRow(table.getSelectedRow()); } if (e.getSource() == btnAddAntiban) { m.addElement(comboBox_1.getSelectedItem()); } if (e.getSource() == btnAddBreak) { model.addRow(new Object[]{textField.getText(), textField_1.getText()}); } } double version = 1.0; private JTextField specialtxt; private JTextField spendwhen; private JButton btnStartScript; private JCheckBox chckbxUseSpecialAttack; private JCheckBox chckbxUseQuickPrayer; private JCheckBox chckbxAttackPortals; private JComboBox comboBox_2; private JCheckBox chckbxattackspinners; } }