import org.rsbot.bot.Bot;
import org.rsbot.bot.input.CanvasWrapper;
import org.rsbot.event.listeners.PaintListener;
import org.rsbot.script.Calculations;
import org.rsbot.script.Methods;
import org.rsbot.script.Script;
import org.rsbot.script.ScriptManifest;
import org.rsbot.script.wrappers.*;
import org.rsbot.util.GlobalConfiguration;
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.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Map;
/**
* Created by IntelliJ IDEA. User: Bool Date: 30-okt-2009 Time: 23:39:10
*/
@ScriptManifest(authors = { "Bool" }, category = "Combat", name = "BPestControlV2", version = 2.0, description = "<html><body style=\"font-family: Arial; padding: 10px;\">Select your account and press OK to show the GUI.</body></html>")
public class BPestControlV2 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) {
}
}
}
}
class BGUI extends JFrame implements ActionListener {
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 JList list;
private JComboBox comboBox;
public BGUI() {
initGUI();
}
private void initGUI() {
setAlwaysOnTop(true);
setResizable(false);
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {}
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 450, 288);
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);
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");
chckbxUseSpecialAttack.setBounds(10, 10, 126, 17);
panel.add(chckbxUseSpecialAttack);
chckbxUseQuickPrayer = new JCheckBox("Use quick prayer");
chckbxUseQuickPrayer.setBounds(10, 27, 126, 17);
panel.add(chckbxUseQuickPrayer);
comboBox = new JComboBox();
comboBox.setModel(new DefaultComboBoxModel(jobsStrings));
comboBox.setBounds(10, 50, 126, 24);
panel.add(comboBox);
btnAddJob = new JButton("Add Job");
btnAddJob.setBounds(20, 80, 103, 23);
btnAddJob.addActionListener(this);
panel.add(btnAddJob);
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, 148, 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) {
start = true;
attackPortals = chckbxAttackPortals.isSelected();
attackSpinner = chckbxattackspinners.isSelected();
if(pickupArrows){
if(getCurrentTab() != TAB_EQUIPMENT)
openTab(TAB_EQUIPMENT);
arrowID = getEquipmentArray()[13];
}
if(DBaxe){
if(getCurrentTab() != TAB_EQUIPMENT)
openTab(TAB_EQUIPMENT);
oldID = getEquipmentArray()[3];
}
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, 3, 5);
Squire = 3802;
} else if (i == 1) {
plankID = 25631;
boatArea = new RSArea(2638, 2642, 3, 5);
Squire = 6140;
} else {
plankID = 25632;
boatArea = new RSArea(2632, 2649, 3, 5);
Squire = 6141;
}
dispose();
}
if(e.getSource() == btnAddJob){
jobmodel.addElement(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 JButton btnStartScript;
private JCheckBox chckbxUseSpecialAttack;
private JCheckBox chckbxUseQuickPrayer;
private JCheckBox chckbxAttackPortals;
private JComboBox comboBox_2;
private JCheckBox chckbxattackspinners;
}
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 void Finish() {
done = true;
}
public final String getName() {
return n;
}
public boolean isFinished() {
return done;
}
public String toString() {
return "Name " + getName();
}
}
private class Armour {
public int TOP, WEAPON, SHIELD, BOTTOM, ARROWS;
public int ALL[] = { TOP, WEAPON, SHIELD, BOTTOM, ARROWS };
}
private class Portal {
private final RSTile Location;
private final String Name;
private final RSTile gateLoc;
public boolean changed = false;
private Armour armour;
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 void changeArmour() {
if (armour == null) {
changed = true;
return;
}
for (int i : armour.ALL) {
atInventoryItem(i, "");
try {
Thread.sleep(random(600, 800));
} catch (InterruptedException e) {
}
}
}
public RSArea getArea() {
RSArea a = null;
if (getName().equals("E")) {
a = new RSArea(voidLoc.getX() + 24, voidLoc.getY() - 20, 3, 5);
} else if (getName().equals("W")) {
a = new RSArea(voidLoc.getX() - 25, voidLoc.getY() - 15, 4, 3);
} else if (getName().contains("SE")) {
a = new RSArea(voidLoc.getX() + 16, voidLoc.getY() - 34, 4, 3);
} else if (getName().contains("SW")) {
a = new RSArea(voidLoc.getX() - 8, voidLoc.getY() - 35, 5, 3);
}
return a;
}
public RSObject getGate() {
return getObjectAt(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 = getNearestNPCByName("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, 14, 14);
} else if (getName().equals("W")) {
a = new RSArea(voidLoc.getX() - 30, voidLoc.getY() - 24, 16, 19);
} else if (getName().contains("SE")) {
a = new RSArea(voidLoc.getX(), voidLoc.getY() - 45, 28, 21);
} else if (getName().contains("SW")) {
a = new RSArea(voidLoc.getX() - 17, voidLoc.getY() - 44, 17, 20);
}
return a;
}
public boolean isGateOpen() {
return getGate() == null || getGate().getID() > 14240;
}
public boolean isOpen() {
try {
if (getName().equals("W")) {
if (Integer.parseInt(getInterface(408, 13).getText()) < 10) {
return false;
}
}
if (getName().equals("E")) {
if (Integer.parseInt(getInterface(408, 14).getText()) < 10) {
return false;
}
}
if (getName().equals("SE")) {
if (Integer.parseInt(getInterface(408, 15).getText()) < 10) {
return false;
}
}
if (getName().equals("SW")) {
if (Integer.parseInt(getInterface(408, 16).getText()) < 10) {
return false;
}
}
} catch (final Exception e) {
return false;
}
return true;
}
private void openGate() {
while (inPest() && !isGateOpen()) {
if(getMyPlayer().isMoving()){
try{
Thread.sleep(random(500,600));
}catch(Exception e){
}
continue;
}
final Point p = Calculations.tileToScreen(getGateLocation());
if (!pointOnScreen(p)) {
walkTileMM(getGateLocation());
try {
Thread.sleep(random(500, 700));
} catch (InterruptedException ignored) {
}
continue;
}
doAction(p, "Open");
}
}
public void walkTo() {
final Portal p = getNearestPortal();
boolean died = false;
final RSNPC npc = getNearestNPCByID(squire);
if (npc != null) {
if (distanceTo(npc) < 10) {
died = true;
}
}
boolean atDoor = false;
while (inPest() && distanceTo(getLocation()) > 10 && isOpen()) {
if (getMyPlayer().isInCombat()
&& getMyPlayer().getHPPercent() < 2
&& distanceTo(getNearestNPCByID(squire)) > 15) {
return;
}
if (died) {
try{
enablePrayer();
Thread.sleep(random(300,800));
setRun(true);
Thread.sleep(random(300,800));
doDragonBattleAxe();
Thread.sleep(random(300,800));
}catch(Exception e){}
if (!atDoor) {
walkPath(genPath(getGateLocation()));
if (!isGateOpen() && tileOnScreen(getGateLocation())) {
openGate();
if (isGateOpen()) {
atDoor = true;
}
}
if (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 final LinkedList<Job> jobQ = new LinkedList<Job>();
private final LinkedList<Portal> portalQ = new LinkedList<Portal>();
private final LinkedList<Break> breakQ = new LinkedList<Break>();
private final ArrayList<String> antibanQ = new ArrayList<String>();
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 noHP = false;
private boolean DBaxe = false;
private boolean pickupArrows = false;
private RSTile[] path;
private final int Interface_250 = 213;
private int plankID = 14315;
private final int squire = 3781;
private int Squire;
private int failsafe = 0;
private int nextAnti = random(2000, 12000);
private int points = 0;
private int specialPercent = 0;
private int arrowID = 0;
private int oldPoints = 0;
private int gainedPoints = 0;
private int lost = 0;
private int won = 0;
private RSArea boatArea = null;
private RSTile voidLoc = null;
long lastNPC = 0;
private long lastAnti = 0;
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", "Top",
"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;
boolean allJobsFinished() {
Job j = null;
for (Job job : jobQ) {
if (!(j = job).isFinished()) {
break;
}
}
return j == null;
}
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;
Bot.getInputManager().pressKey(dir);
Thread.sleep(random(500,2000));
Bot.getInputManager().releaseKey(dir);
break;
case MOVE_MOUSE:
moveMouse(random(0, CanvasWrapper.getGameWidth()), random(0,
CanvasWrapper.getGameHeight()));
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;
Bot.getInputManager().pressKey(dir);
try {
Thread.sleep(random(500, 2000));
} catch (InterruptedException e) {
e.printStackTrace();
}
Bot.getInputManager().releaseKey(dir);
}
};
Thread mouse = new Thread() {
@Override
public void run() {
moveMouse(random(0, CanvasWrapper.getGameWidth()), random(0,
CanvasWrapper.getGameHeight()));
}
};
camera.start();
mouse.start();
while (camera.isAlive() || mouse.isAlive())
wait(random(100, 300));
break;
case RIGHT_CLICK_OBJECT:
RSObject obj = getObjOnScreen();
if (obj != null) {
clickMouse(Calculations.tileToScreen(obj.getLocation()), false);
Thread.sleep(random(500,2000));
while(isMenuOpen()){
moveMouseRandomly(20);
}
}
break;
case RIGHT_CLICK_NPC:
RSNPC npc = getNPCOnScreen();
if (npc != null) {
clickMouse(npc.getScreenLocation(), false);
Thread.sleep(random(500,2000));
while(isMenuOpen()){
moveMouseRandomly(20);
}
}
break;
case RIGHT_CLICK_PLAYER:
RSPlayer player = getPlayerOnScreen();
if (player != null) {
clickMouse(player.getScreenLocation(), false);
Thread.sleep(random(500,2000));
while(isMenuOpen()){
moveMouseRandomly(20);
}
}
break;
default:
break;
}
}
public RSObject getObjOnScreen(){
ArrayList<RSObject> result = new ArrayList<RSObject>();
for(int x = 0; x < 104; x++){
for(int y = 0; y < 104;y++){
RSObject obj = getObjectAt(x + Bot.getClient().getBaseX(),y + Bot.getClient().getBaseY());
if(obj != null){
Point p = Calculations.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(){
final int[] validNpcs = Bot.getClient().getRSNPCIndexArray();
final org.rsbot.accessors.RSNPC[] npcs = Bot.getClient()
.getRSNPCArray();
final ArrayList<RSNPC> p = new ArrayList<RSNPC>();
for (final int element : validNpcs) {
if (npcs[element] == null) {
continue;
}
final RSNPC player = new RSNPC(npcs[element]);
try {
if (!tileOnScreen(player.getLocation())) {
continue;
}
p.add(player);
} catch (final Exception ignored) {
}
}
if (p.size() == 0) {
return null;
} else if (p.size() == 1) {
return p.get(0);
}
return p.get(random(0, p.size() - 1));
}
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;
}
public boolean arrayContains(final String[] array, final String option) {
if (array == null) {
return false;
}
for (final String s : array) {
if (s.contains(option)) {
return true;
}
}
return false;
}
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 (!tileOnScreen(n.getLocation())) {
while (inPest() && atPortal()
&& !walkPath(genPath(n.getLocation()))) {
wait(random(200, 500));
}
}
try {
Point p = n.getScreenLocation();
while ((p = n.getScreenLocation()) != null && p.x != -1
&& getMouseLocation().distance(n.getScreenLocation()) > {
moveMouse(p, 5, 5);
}
if (!pointOnScreen(getMouseLocation())) {
return false;
}
if (getTopText().contains(action)) {
clickMouse(true);
} else if (menuContains(action)) {
clickMouse(false);
return atMenu(action);
} else {
return false;
}
} catch (final Exception ignored) {
}
return true;
}
@Override
public int getMouseSpeed() {
return random(5, 7);
}
void clickRandomPlayer() {
RSPlayer p;
if ((p = getPlayerOnScreen()) != null) {
if (p.getScreenLocation().x != -1 && p.getScreenLocation().y != -1) {
moveMouse(p.getScreenLocation());
clickMouse(false);
wait(random(800, 1000));
moveMouse(random(0, 763), random(0, 503));
}
}
}
boolean doAction(final Point p, final String action) {
if (p.x == -1 || p.y == -1) {
return false;
}
while (p.x != -1 && getMouseLocation().distance(p) > {
moveMouse(p);
}
if (!pointOnScreen(getMouseLocation())) {
return false;
}
if (getTopText().contains(action)) {
clickMouse(true);
} else if (menuContains(action)) {
clickMouse(false);
return atMenu(action);
} else {
return false;
}
return true;
}
void doJob() {
final Job j = getJob();
if (j == null) {
return;
}
if(j.points == 250 && !got250)
return;
if(j.points >= points)
return;
while (!getInterface(267).isValid() || getInterface(267).isValid()
&& getInterface(267, 34).getAbsoluteX() < 10) {
if(getMyPlayer().getInteracting() != null)
continue;
if(getNearestNPCByID(3788) == null){
walkPath(genPath(new RSTile(2661,2650)), 2);
}else if (distanceTo(getNearestNPCByID(3788)) > 3) {
walkPath(genPath(getNearestNPCByID(3788).getLocation()), 2);
}
if (clickNPC(getNearestNPCByID(3788), "Exchange")) {
wait(random(800, 1200));
} else {
wait(random(300, 700));
}
}
wait(random(800, 1000));
int i = 0;
boolean skip = false;;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(188, 223), random(67, 72), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(188, 223), random(104, 112), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(188, 223), random(144, 151), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(188, 223), random(180, 188), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(406, 444), random(67, 72), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(406, 444), random(104, 112), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(406, 444), random(144, 151), true);
skip = true;
}
if(!skip){
clickMouse(481, 179, true);
wait(random(800, 900));
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(300, 340), random(111, 119), true);
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(80, 120), random(150, 155), true);
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(300, 340), random(190, 197), true);
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(80, 120), random(188, 193), true);
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(80, 120), random(225, 234), true);
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(300, 340), random(151, 156), true);
}
jobQ.remove(j);
wait(random(800, 1000));
clickMouse(random(190, 320), random(285, 320), true);
oldPoints = 0;
played = false;
points = 0;
got250 = false;
}
@Override
public boolean tileOnMap(RSTile tile) {
Point center = tileToMinimap(getLocation());
return tileToMinimap(tile).distance(center) <= 70;
}
void enablePrayer() {
if (!PrayerEnabled() && usePray) {
clickMouse(random(715, 752), random(60, 80), true);
}
}
int enterBoat() {
portalQ.clear();
final RSObject o = getPlank();
if (o != null && !onBoat()) {
final RSTile t = o.getLocation();
final Point p = Calculations.tileToScreen(t);
if (p.x == -1 || p.y == -1) {
walkTileMM(t);
}
if (doAction(p, "Cross")) {
return random(1000, 1300);
}
}
return random(600, 800);
}
RSObject getPlank() {
for (int x = 0; x < 104; x++) {
for (int y = 0; y < 104; y++) {
RSObject obj = getObjectAt(x + Bot.getClient().getBaseX(), y
+ Bot.getClient().getBaseY());
if (obj != null && obj.getID() == plankID)
return obj;
}
}
return null;
}
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<RSTile> tiles = new ArrayList<RSTile>();
final ArrayList<RSTile> path = new ArrayList<RSTile>();
while (Methods.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<RSTile> tiles, final RSTile t) {
RSTile nearest = tiles.get(0);
for (RSTile tile : tiles) {
if (Methods.distanceBetween(tile, t) < Methods.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 (distanceTo(p.getLocation()) < 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 (distanceTo(p.getLocation()) < distanceTo(winner.getLocation())) {
winner = p;
}
}
return winner;
}
RSTile getNext(final RSTile[] path) {
RSTile nearest = path[0];
for (final RSTile element : path) {
if (Methods.distanceBetween(element, path[path.length - 1]) < Methods
.distanceBetween(nearest, path[path.length - 1])) {
if (tileOnMap(element)) {
nearest = element;
}
}
}
return nearest;
}
RSPlayer getPlayerOnScreen() {
final int[] validPlayers = Bot.getClient().getRSPlayerIndexArray();
final org.rsbot.accessors.RSPlayer[] players = Bot.getClient()
.getRSPlayerArray();
final ArrayList<RSPlayer> p = new ArrayList<RSPlayer>();
for (final int element : validPlayers) {
if (players[element] == null) {
continue;
}
final RSPlayer player = new RSPlayer(players[element]);
try {
if (!tileOnScreen(player.getLocation())) {
continue;
}
p.add(player);
} catch (final Exception ignored) {
}
}
if (p.size() == 0) {
return null;
} else if (p.size() == 1) {
return p.get(0);
}
return p.get(random(0, p.size() - 1));
}
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;
}
public RSTile getRandom(final RSArea a) {
try {
final RSTile[][] tiles = a.getTiles();
final int y = random(0, tiles.length - 1);
final int x = random(0, tiles[y].length - 1);
return tiles[x][y];
} catch (final Exception ignored) {
}
return new RSTile(-1, -1);
}
Portal getRandomOpenPortal() {
if (portalQ.size() < 1) {
return null;
}
final ArrayList<Portal> po = new ArrayList<Portal>();
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 = getMenuItems().toArray(
new String[getMenuItems().size()]);
if (menuItems.length == 0) {
return "Cancel";
}
while (menuItems[0].contains("Cancel")
&& pointOnScreen(getMouseLocation())
&& System.currentTimeMillis() - start < 700) {
menuItems = getMenuItems().toArray(
new String[getMenuItems().size()]);
}
return menuItems[0];
} catch (Exception e) {
return getTopText();
}
}
boolean inPest() {
return getNearestNPCByID(Squire) == null;
}
@Override
public int loop() {
try {
if(gc == 0)
gc = System.currentTimeMillis();
if(!onBoat() && !inPest()){
Break b = getCurrentBreak();
if(b != null && b.needsBreak())
b.takeBreak();
}
if (this.getInterface(Interface_250).isValid()) {
got250 = true;
}
if (getMyPlayer().isInCombat() && getMyPlayer().getHPPercent() < 2
&& distanceTo(getNearestNPCByID(squire)) > 15) {
return random(600, 800);
}
if (!onBoat() && !inPest() && getJob() != null) {
doJob();
}
if (getJob() == null && got250) {
logout();
log("Thanks for using BPestControll");
log("Reached 250 points and out of jobs");
}
if (isMenuOpen()) {
moveMouse(random(5, 760), random(5, 500));
}
if (!inPest() && !onBoat()) {
return enterBoat();
}
if (onBoat()) {
String s = "";
if (getInterface(407, 16) != null) {
s = getInterface(407, 16).getText();
}
points = Integer.parseInt(s.replace("Pest Points: ", ""));
if (played) {
if (points > oldPoints) {
gainedPoints += points - oldPoints;
}
if (points - oldPoints == 0) {
lost++;
} else {
won++;
}
}
oldPoints = points;
played = false;
return random(400,700);
}
if (getNearestNPCByID(squire) != null) {
voidLoc = getNearestNPCByID(squire).getLocation();
fillPortalList();
}
if (inPest()) {
return pestLoop();
}
} catch (Exception ignored) {}
return random(100, 800);
}
boolean menuContains(final String a) {
try {
final long start = System.currentTimeMillis();
String[] menuItems = getMenuItems().toArray(
new String[getMenuItems().size()]);
while (menuItems[0].contains("Cancel")
&& pointOnScreen(getMouseLocation())
&& System.currentTimeMillis() - start < 700) {
menuItems = getMenuItems().toArray(
new String[getMenuItems().size()]);
}
for (final String element : menuItems) {
if (element.contains(a)) {
return true;
}
}
} catch (final Exception ignored) {
}
return false;
}
@Override
public void moveMouse(final int x, final int y) {
if (x != -1 && y != -1) {
moveMouse(x, y, 0, 0);
}
}
@Override
public void moveMouse(final Point p) {
if (p.x != -1 && p.y != -1) {
moveMouse(p.x, p.y, 0, 0);
}
}
@Override
public void moveMouse(final Point p, final int rX, final int rY) {
final int X = p.x + random(-(rX / 2), (rX / 2));
final int Y = p.y + random(-(rY / 2), (rY / 2));
moveMouse(X, Y);
}
boolean onBoat() {
return boatArea != null
&& boatArea.contains(getMyPlayer().getLocation());
}
@Override
public void onFinish() {
log("Gained " + gainedPoints + " points.");
}
public void onRepaint(final Graphics g) {
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("BPestControlV2 made by Bool", x, y += g
.getFontMetrics().getHeight());
height += g.getFontMetrics().getHeight();
width = (int) g.getFontMetrics().getStringBounds(
"BPestControlV2 made by Bool", 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) {
}
}
@Override
public boolean onStart(final Map<String, String> l) {
start = false;
final BGUI gui = new BGUI();
gui.setVisible(true);
while (gui.isVisible()) {
wait(random(500, 600));
}
if (!start) {
return false;
}
if (start) {
new Thread(new animationChecker()).start();
antiban.start();
}
log("starting script");
pf = new Pathfinder();
return start;
// return true;
}
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) {
RSItemTile t = getGroundItem(arrowID);
if(t != null && t.isValid()){
atTile(t, "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);
}
}
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")) {
return random(600, 1200);
}
}
path = null;
if (failsafe > 4) {
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++;
wait(random(600, 800));
}
return random(400,700);
}
} catch (final Exception ignored) {
}
return random(400,700);
}
boolean PrayerEnabled() {
return getSetting(1395) > 0;
}
private int i = 0;
boolean walkPath(final RSTile[] path) {
final char left = 37;
final char right = 39;
RSTile tile = getNext(path);
moveMouse(Calculations.worldToMinimap(tile.getX(), tile.getY()));
if (!inPest()) {
return true;
}
if (i == 7) {
char dir = random(0, 3) == 2 ? left : right;
Bot.getInputManager().pressKey(dir);
wait(random(800, 1200));
Bot.getInputManager().releaseKey(dir);
i = 0;
return false;
}
if (getTopText().contains("ancel")) {
i++;
return false;
}
try {
walkTileMM(getNext(path));
wait(random(200, 500));
while (getMyPlayer().isMoving() && distanceTo(getDestination()) > 7) {
wait(random(600, 800));
}
} catch (final Exception ignored) {
}
return distanceTo(path[path.length - 1]) < 10 || !inPest();
}
void checkSpecial() {
if (specialPercent == 0 || isSpecialEnabled())
return;
int percent = (getSetting(300) / 10);
if (percent > specialPercent) {
RSInterfaceChild child = RSInterface.getChildInterface(884, 4);
if (getCurrentTab() != TAB_ATTACK)
openTab(TAB_ATTACK);
atInterface(child);
wait(random(400, 700));
}
}
boolean isSpecialEnabled() {
return getSetting(301) == 1;
}
void walkPath(final RSTile[] path, final int i) {
try {
walkTileMM(getNext(path));
wait(random(200, 500));
while (getMyPlayer().isMoving() && distanceTo(getDestination()) > 7) {
wait(random(600, 800));
}
} catch (final Exception ignored) {
}
}
int daxeID = 0;
int oldID = 0;
public void doDragonBattleAxe(){
if(!DBaxe)
return;
if (getCurrentTab() != TAB_INVENTORY)
openTab(TAB_INVENTORY);
atInventoryItem(daxeID, "");
if (getCurrentTab() != TAB_ATTACK)
openTab(TAB_ATTACK);
RSInterfaceChild child = RSInterface.getChildInterface(884, 4);
atInterface(child);
wait(random(1200, 1500));
if (getCurrentTab() != TAB_INVENTORY)
openTab(TAB_INVENTORY);
atInventoryItem(oldID, "");
}
RSNPC getNPC(boolean spinner) {
final String[] names = { "Shifter", "Defiler", "Torcher", "Brawler",
"Ravager", "Spinner" };
RSNPC closest = null;
final int[] validNPCs = Bot.getClient().getRSNPCIndexArray();
final org.rsbot.accessors.RSNPC[] npcs = Bot.getClient()
.getRSNPCArray();
ArrayList<RSNPC> result = new ArrayList<RSNPC>();
for (final int element : validNPCs) {
if (npcs[element] == null) {
continue;
}
final RSNPC Monster = new RSNPC(npcs[element]);
try {
for (final String name : names) {
if (!name.equals(Monster.getName())
|| distanceBetween(
getCurrentPortal().getLocation(), Monster
.getLocation()) > 10
|| Monster.isInCombat()
&& Monster.getHPPercent() < 10) {
continue;
}
result.add(Monster);
}
} catch (final Exception e) {
e.printStackTrace();
}
}
if (result.size() == 0)
return null;
RSNPC s = null;
for (RSNPC npc : result) {
if (spinner) {
if (npc.getName().equalsIgnoreCase("Spinner")) {
if (s == null || distanceTo(s) > distanceTo(npc))
s = npc;
}
}
if (closest == null || distanceTo(closest) > distanceTo(npc))
closest = npc;
}
if (spinner && s != null) {
return s;
}
return closest;
}
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 (isLoggedIn())
logout();
Time.reset();
log("Taking break for " + Time.toString());
while (!Time.isDone()) {
try {
Thread.sleep(random(500, 800));
} catch (InterruptedException e) {}
}
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));
}
public String timeRemaining() {
return timeToString(((System.currentTimeMillis() - start) + time));
}
}
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;
}
public boolean needUpdate(){
try{
URL url = new URL("http://boolscripts.site11.com/Scripts/version");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line = reader.readLine();
double i = Double.parseDouble(line);
if(i > version)
return true;
}catch(Exception e){}
return true;
}
Thread antiban = new Thread() {
@Override
public void run() {
setName("Antiban");
while (isActive) {
try {
if(!isLoggedIn()){
Thread.sleep(300,400);
continue;
}
int i = random(0, 150);
if (i == 4 || i == 9)
performAntiban(antibanQ.get(random(0,antibanQ.size())));
sleep(random(100, 2000));
} catch (InterruptedException ignored) {
}
}
}
};
class Pathfinder {
public int basex, basey;
public int[][] blocks;
public Pathfinder() {
reload();
}
public void reload() {
basex = Bot.getClient().getBaseX();
basey = Bot.getClient().getBaseY();
blocks = Bot.getClient().getRSGroundDataArray()[Bot.getClient()
.getPlane()].getBlocks();
}
public RSTile[] findPath(RSTile dest) {
if (!isValid())
reload();
return findPath(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 (!canReach(new RSTile(dest.x + basex, dest.y + basey), false)) {
return null;
}
ArrayList<Node> closed = new ArrayList<Node>();
ArrayList<Node> open = new ArrayList<Node>();
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<RSTile> result = new ArrayList<RSTile>();
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;
}
public Node getBestNode(ArrayList<Node> 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 (double) (Math.sqrt((dx * dx) + (dy * dy)));
}
public double getMovementCost(Node current, Node dest) {
return (double) Math.hypot(dest.x - current.x, dest.y - current.y);
}
/**
* credits to jacmob
*/
public ArrayList<Node> getNodesAround(Node node) {
final ArrayList<Node> tiles = new ArrayList<Node>();
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 validTile(RSTile tile) {
if (!isValid())
reload();
int x = tile.getX() - basex;
int y = tile.getY() - basey;
return x > 0 && x < 105 && y > 0 && y < 105;
}
public boolean isValid() {
return basex == Bot.getClient().getBaseX()
&& basey == Bot.getClient().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;
}
}
}
}
import org.rsbot.bot.input.CanvasWrapper;
import org.rsbot.event.listeners.PaintListener;
import org.rsbot.script.Calculations;
import org.rsbot.script.Methods;
import org.rsbot.script.Script;
import org.rsbot.script.ScriptManifest;
import org.rsbot.script.wrappers.*;
import org.rsbot.util.GlobalConfiguration;
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.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Map;
/**
* Created by IntelliJ IDEA. User: Bool Date: 30-okt-2009 Time: 23:39:10
*/
@ScriptManifest(authors = { "Bool" }, category = "Combat", name = "BPestControlV2", version = 2.0, description = "<html><body style=\"font-family: Arial; padding: 10px;\">Select your account and press OK to show the GUI.</body></html>")
public class BPestControlV2 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) {
}
}
}
}
class BGUI extends JFrame implements ActionListener {
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 JList list;
private JComboBox comboBox;
public BGUI() {
initGUI();
}
private void initGUI() {
setAlwaysOnTop(true);
setResizable(false);
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {}
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 450, 288);
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);
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");
chckbxUseSpecialAttack.setBounds(10, 10, 126, 17);
panel.add(chckbxUseSpecialAttack);
chckbxUseQuickPrayer = new JCheckBox("Use quick prayer");
chckbxUseQuickPrayer.setBounds(10, 27, 126, 17);
panel.add(chckbxUseQuickPrayer);
comboBox = new JComboBox();
comboBox.setModel(new DefaultComboBoxModel(jobsStrings));
comboBox.setBounds(10, 50, 126, 24);
panel.add(comboBox);
btnAddJob = new JButton("Add Job");
btnAddJob.setBounds(20, 80, 103, 23);
btnAddJob.addActionListener(this);
panel.add(btnAddJob);
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, 148, 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) {
start = true;
attackPortals = chckbxAttackPortals.isSelected();
attackSpinner = chckbxattackspinners.isSelected();
if(pickupArrows){
if(getCurrentTab() != TAB_EQUIPMENT)
openTab(TAB_EQUIPMENT);
arrowID = getEquipmentArray()[13];
}
if(DBaxe){
if(getCurrentTab() != TAB_EQUIPMENT)
openTab(TAB_EQUIPMENT);
oldID = getEquipmentArray()[3];
}
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, 3, 5);
Squire = 3802;
} else if (i == 1) {
plankID = 25631;
boatArea = new RSArea(2638, 2642, 3, 5);
Squire = 6140;
} else {
plankID = 25632;
boatArea = new RSArea(2632, 2649, 3, 5);
Squire = 6141;
}
dispose();
}
if(e.getSource() == btnAddJob){
jobmodel.addElement(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 JButton btnStartScript;
private JCheckBox chckbxUseSpecialAttack;
private JCheckBox chckbxUseQuickPrayer;
private JCheckBox chckbxAttackPortals;
private JComboBox comboBox_2;
private JCheckBox chckbxattackspinners;
}
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 void Finish() {
done = true;
}
public final String getName() {
return n;
}
public boolean isFinished() {
return done;
}
public String toString() {
return "Name " + getName();
}
}
private class Armour {
public int TOP, WEAPON, SHIELD, BOTTOM, ARROWS;
public int ALL[] = { TOP, WEAPON, SHIELD, BOTTOM, ARROWS };
}
private class Portal {
private final RSTile Location;
private final String Name;
private final RSTile gateLoc;
public boolean changed = false;
private Armour armour;
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 void changeArmour() {
if (armour == null) {
changed = true;
return;
}
for (int i : armour.ALL) {
atInventoryItem(i, "");
try {
Thread.sleep(random(600, 800));
} catch (InterruptedException e) {
}
}
}
public RSArea getArea() {
RSArea a = null;
if (getName().equals("E")) {
a = new RSArea(voidLoc.getX() + 24, voidLoc.getY() - 20, 3, 5);
} else if (getName().equals("W")) {
a = new RSArea(voidLoc.getX() - 25, voidLoc.getY() - 15, 4, 3);
} else if (getName().contains("SE")) {
a = new RSArea(voidLoc.getX() + 16, voidLoc.getY() - 34, 4, 3);
} else if (getName().contains("SW")) {
a = new RSArea(voidLoc.getX() - 8, voidLoc.getY() - 35, 5, 3);
}
return a;
}
public RSObject getGate() {
return getObjectAt(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 = getNearestNPCByName("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, 14, 14);
} else if (getName().equals("W")) {
a = new RSArea(voidLoc.getX() - 30, voidLoc.getY() - 24, 16, 19);
} else if (getName().contains("SE")) {
a = new RSArea(voidLoc.getX(), voidLoc.getY() - 45, 28, 21);
} else if (getName().contains("SW")) {
a = new RSArea(voidLoc.getX() - 17, voidLoc.getY() - 44, 17, 20);
}
return a;
}
public boolean isGateOpen() {
return getGate() == null || getGate().getID() > 14240;
}
public boolean isOpen() {
try {
if (getName().equals("W")) {
if (Integer.parseInt(getInterface(408, 13).getText()) < 10) {
return false;
}
}
if (getName().equals("E")) {
if (Integer.parseInt(getInterface(408, 14).getText()) < 10) {
return false;
}
}
if (getName().equals("SE")) {
if (Integer.parseInt(getInterface(408, 15).getText()) < 10) {
return false;
}
}
if (getName().equals("SW")) {
if (Integer.parseInt(getInterface(408, 16).getText()) < 10) {
return false;
}
}
} catch (final Exception e) {
return false;
}
return true;
}
private void openGate() {
while (inPest() && !isGateOpen()) {
if(getMyPlayer().isMoving()){
try{
Thread.sleep(random(500,600));
}catch(Exception e){
}
continue;
}
final Point p = Calculations.tileToScreen(getGateLocation());
if (!pointOnScreen(p)) {
walkTileMM(getGateLocation());
try {
Thread.sleep(random(500, 700));
} catch (InterruptedException ignored) {
}
continue;
}
doAction(p, "Open");
}
}
public void walkTo() {
final Portal p = getNearestPortal();
boolean died = false;
final RSNPC npc = getNearestNPCByID(squire);
if (npc != null) {
if (distanceTo(npc) < 10) {
died = true;
}
}
boolean atDoor = false;
while (inPest() && distanceTo(getLocation()) > 10 && isOpen()) {
if (getMyPlayer().isInCombat()
&& getMyPlayer().getHPPercent() < 2
&& distanceTo(getNearestNPCByID(squire)) > 15) {
return;
}
if (died) {
try{
enablePrayer();
Thread.sleep(random(300,800));
setRun(true);
Thread.sleep(random(300,800));
doDragonBattleAxe();
Thread.sleep(random(300,800));
}catch(Exception e){}
if (!atDoor) {
walkPath(genPath(getGateLocation()));
if (!isGateOpen() && tileOnScreen(getGateLocation())) {
openGate();
if (isGateOpen()) {
atDoor = true;
}
}
if (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 final LinkedList<Job> jobQ = new LinkedList<Job>();
private final LinkedList<Portal> portalQ = new LinkedList<Portal>();
private final LinkedList<Break> breakQ = new LinkedList<Break>();
private final ArrayList<String> antibanQ = new ArrayList<String>();
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 noHP = false;
private boolean DBaxe = false;
private boolean pickupArrows = false;
private RSTile[] path;
private final int Interface_250 = 213;
private int plankID = 14315;
private final int squire = 3781;
private int Squire;
private int failsafe = 0;
private int nextAnti = random(2000, 12000);
private int points = 0;
private int specialPercent = 0;
private int arrowID = 0;
private int oldPoints = 0;
private int gainedPoints = 0;
private int lost = 0;
private int won = 0;
private RSArea boatArea = null;
private RSTile voidLoc = null;
long lastNPC = 0;
private long lastAnti = 0;
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", "Top",
"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;
boolean allJobsFinished() {
Job j = null;
for (Job job : jobQ) {
if (!(j = job).isFinished()) {
break;
}
}
return j == null;
}
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;
Bot.getInputManager().pressKey(dir);
Thread.sleep(random(500,2000));
Bot.getInputManager().releaseKey(dir);
break;
case MOVE_MOUSE:
moveMouse(random(0, CanvasWrapper.getGameWidth()), random(0,
CanvasWrapper.getGameHeight()));
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;
Bot.getInputManager().pressKey(dir);
try {
Thread.sleep(random(500, 2000));
} catch (InterruptedException e) {
e.printStackTrace();
}
Bot.getInputManager().releaseKey(dir);
}
};
Thread mouse = new Thread() {
@Override
public void run() {
moveMouse(random(0, CanvasWrapper.getGameWidth()), random(0,
CanvasWrapper.getGameHeight()));
}
};
camera.start();
mouse.start();
while (camera.isAlive() || mouse.isAlive())
wait(random(100, 300));
break;
case RIGHT_CLICK_OBJECT:
RSObject obj = getObjOnScreen();
if (obj != null) {
clickMouse(Calculations.tileToScreen(obj.getLocation()), false);
Thread.sleep(random(500,2000));
while(isMenuOpen()){
moveMouseRandomly(20);
}
}
break;
case RIGHT_CLICK_NPC:
RSNPC npc = getNPCOnScreen();
if (npc != null) {
clickMouse(npc.getScreenLocation(), false);
Thread.sleep(random(500,2000));
while(isMenuOpen()){
moveMouseRandomly(20);
}
}
break;
case RIGHT_CLICK_PLAYER:
RSPlayer player = getPlayerOnScreen();
if (player != null) {
clickMouse(player.getScreenLocation(), false);
Thread.sleep(random(500,2000));
while(isMenuOpen()){
moveMouseRandomly(20);
}
}
break;
default:
break;
}
}
public RSObject getObjOnScreen(){
ArrayList<RSObject> result = new ArrayList<RSObject>();
for(int x = 0; x < 104; x++){
for(int y = 0; y < 104;y++){
RSObject obj = getObjectAt(x + Bot.getClient().getBaseX(),y + Bot.getClient().getBaseY());
if(obj != null){
Point p = Calculations.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(){
final int[] validNpcs = Bot.getClient().getRSNPCIndexArray();
final org.rsbot.accessors.RSNPC[] npcs = Bot.getClient()
.getRSNPCArray();
final ArrayList<RSNPC> p = new ArrayList<RSNPC>();
for (final int element : validNpcs) {
if (npcs[element] == null) {
continue;
}
final RSNPC player = new RSNPC(npcs[element]);
try {
if (!tileOnScreen(player.getLocation())) {
continue;
}
p.add(player);
} catch (final Exception ignored) {
}
}
if (p.size() == 0) {
return null;
} else if (p.size() == 1) {
return p.get(0);
}
return p.get(random(0, p.size() - 1));
}
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;
}
public boolean arrayContains(final String[] array, final String option) {
if (array == null) {
return false;
}
for (final String s : array) {
if (s.contains(option)) {
return true;
}
}
return false;
}
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 (!tileOnScreen(n.getLocation())) {
while (inPest() && atPortal()
&& !walkPath(genPath(n.getLocation()))) {
wait(random(200, 500));
}
}
try {
Point p = n.getScreenLocation();
while ((p = n.getScreenLocation()) != null && p.x != -1
&& getMouseLocation().distance(n.getScreenLocation()) > {
moveMouse(p, 5, 5);
}
if (!pointOnScreen(getMouseLocation())) {
return false;
}
if (getTopText().contains(action)) {
clickMouse(true);
} else if (menuContains(action)) {
clickMouse(false);
return atMenu(action);
} else {
return false;
}
} catch (final Exception ignored) {
}
return true;
}
@Override
public int getMouseSpeed() {
return random(5, 7);
}
void clickRandomPlayer() {
RSPlayer p;
if ((p = getPlayerOnScreen()) != null) {
if (p.getScreenLocation().x != -1 && p.getScreenLocation().y != -1) {
moveMouse(p.getScreenLocation());
clickMouse(false);
wait(random(800, 1000));
moveMouse(random(0, 763), random(0, 503));
}
}
}
boolean doAction(final Point p, final String action) {
if (p.x == -1 || p.y == -1) {
return false;
}
while (p.x != -1 && getMouseLocation().distance(p) > {
moveMouse(p);
}
if (!pointOnScreen(getMouseLocation())) {
return false;
}
if (getTopText().contains(action)) {
clickMouse(true);
} else if (menuContains(action)) {
clickMouse(false);
return atMenu(action);
} else {
return false;
}
return true;
}
void doJob() {
final Job j = getJob();
if (j == null) {
return;
}
if(j.points == 250 && !got250)
return;
if(j.points >= points)
return;
while (!getInterface(267).isValid() || getInterface(267).isValid()
&& getInterface(267, 34).getAbsoluteX() < 10) {
if(getMyPlayer().getInteracting() != null)
continue;
if(getNearestNPCByID(3788) == null){
walkPath(genPath(new RSTile(2661,2650)), 2);
}else if (distanceTo(getNearestNPCByID(3788)) > 3) {
walkPath(genPath(getNearestNPCByID(3788).getLocation()), 2);
}
if (clickNPC(getNearestNPCByID(3788), "Exchange")) {
wait(random(800, 1200));
} else {
wait(random(300, 700));
}
}
wait(random(800, 1000));
int i = 0;
boolean skip = false;;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(188, 223), random(67, 72), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(188, 223), random(104, 112), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(188, 223), random(144, 151), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(188, 223), random(180, 188), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(406, 444), random(67, 72), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(406, 444), random(104, 112), true);
skip = true;
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(406, 444), random(144, 151), true);
skip = true;
}
if(!skip){
clickMouse(481, 179, true);
wait(random(800, 900));
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(300, 340), random(111, 119), true);
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(80, 120), random(150, 155), true);
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(300, 340), random(190, 197), true);
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(80, 120), random(188, 193), true);
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(80, 120), random(225, 234), true);
}
i++;
if (j.getName().equals(jobsStrings[i])) {
clickMouse(random(300, 340), random(151, 156), true);
}
jobQ.remove(j);
wait(random(800, 1000));
clickMouse(random(190, 320), random(285, 320), true);
oldPoints = 0;
played = false;
points = 0;
got250 = false;
}
@Override
public boolean tileOnMap(RSTile tile) {
Point center = tileToMinimap(getLocation());
return tileToMinimap(tile).distance(center) <= 70;
}
void enablePrayer() {
if (!PrayerEnabled() && usePray) {
clickMouse(random(715, 752), random(60, 80), true);
}
}
int enterBoat() {
portalQ.clear();
final RSObject o = getPlank();
if (o != null && !onBoat()) {
final RSTile t = o.getLocation();
final Point p = Calculations.tileToScreen(t);
if (p.x == -1 || p.y == -1) {
walkTileMM(t);
}
if (doAction(p, "Cross")) {
return random(1000, 1300);
}
}
return random(600, 800);
}
RSObject getPlank() {
for (int x = 0; x < 104; x++) {
for (int y = 0; y < 104; y++) {
RSObject obj = getObjectAt(x + Bot.getClient().getBaseX(), y
+ Bot.getClient().getBaseY());
if (obj != null && obj.getID() == plankID)
return obj;
}
}
return null;
}
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<RSTile> tiles = new ArrayList<RSTile>();
final ArrayList<RSTile> path = new ArrayList<RSTile>();
while (Methods.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<RSTile> tiles, final RSTile t) {
RSTile nearest = tiles.get(0);
for (RSTile tile : tiles) {
if (Methods.distanceBetween(tile, t) < Methods.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 (distanceTo(p.getLocation()) < 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 (distanceTo(p.getLocation()) < distanceTo(winner.getLocation())) {
winner = p;
}
}
return winner;
}
RSTile getNext(final RSTile[] path) {
RSTile nearest = path[0];
for (final RSTile element : path) {
if (Methods.distanceBetween(element, path[path.length - 1]) < Methods
.distanceBetween(nearest, path[path.length - 1])) {
if (tileOnMap(element)) {
nearest = element;
}
}
}
return nearest;
}
RSPlayer getPlayerOnScreen() {
final int[] validPlayers = Bot.getClient().getRSPlayerIndexArray();
final org.rsbot.accessors.RSPlayer[] players = Bot.getClient()
.getRSPlayerArray();
final ArrayList<RSPlayer> p = new ArrayList<RSPlayer>();
for (final int element : validPlayers) {
if (players[element] == null) {
continue;
}
final RSPlayer player = new RSPlayer(players[element]);
try {
if (!tileOnScreen(player.getLocation())) {
continue;
}
p.add(player);
} catch (final Exception ignored) {
}
}
if (p.size() == 0) {
return null;
} else if (p.size() == 1) {
return p.get(0);
}
return p.get(random(0, p.size() - 1));
}
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;
}
public RSTile getRandom(final RSArea a) {
try {
final RSTile[][] tiles = a.getTiles();
final int y = random(0, tiles.length - 1);
final int x = random(0, tiles[y].length - 1);
return tiles[x][y];
} catch (final Exception ignored) {
}
return new RSTile(-1, -1);
}
Portal getRandomOpenPortal() {
if (portalQ.size() < 1) {
return null;
}
final ArrayList<Portal> po = new ArrayList<Portal>();
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 = getMenuItems().toArray(
new String[getMenuItems().size()]);
if (menuItems.length == 0) {
return "Cancel";
}
while (menuItems[0].contains("Cancel")
&& pointOnScreen(getMouseLocation())
&& System.currentTimeMillis() - start < 700) {
menuItems = getMenuItems().toArray(
new String[getMenuItems().size()]);
}
return menuItems[0];
} catch (Exception e) {
return getTopText();
}
}
boolean inPest() {
return getNearestNPCByID(Squire) == null;
}
@Override
public int loop() {
try {
if(gc == 0)
gc = System.currentTimeMillis();
if(!onBoat() && !inPest()){
Break b = getCurrentBreak();
if(b != null && b.needsBreak())
b.takeBreak();
}
if (this.getInterface(Interface_250).isValid()) {
got250 = true;
}
if (getMyPlayer().isInCombat() && getMyPlayer().getHPPercent() < 2
&& distanceTo(getNearestNPCByID(squire)) > 15) {
return random(600, 800);
}
if (!onBoat() && !inPest() && getJob() != null) {
doJob();
}
if (getJob() == null && got250) {
logout();
log("Thanks for using BPestControll");
log("Reached 250 points and out of jobs");
}
if (isMenuOpen()) {
moveMouse(random(5, 760), random(5, 500));
}
if (!inPest() && !onBoat()) {
return enterBoat();
}
if (onBoat()) {
String s = "";
if (getInterface(407, 16) != null) {
s = getInterface(407, 16).getText();
}
points = Integer.parseInt(s.replace("Pest Points: ", ""));
if (played) {
if (points > oldPoints) {
gainedPoints += points - oldPoints;
}
if (points - oldPoints == 0) {
lost++;
} else {
won++;
}
}
oldPoints = points;
played = false;
return random(400,700);
}
if (getNearestNPCByID(squire) != null) {
voidLoc = getNearestNPCByID(squire).getLocation();
fillPortalList();
}
if (inPest()) {
return pestLoop();
}
} catch (Exception ignored) {}
return random(100, 800);
}
boolean menuContains(final String a) {
try {
final long start = System.currentTimeMillis();
String[] menuItems = getMenuItems().toArray(
new String[getMenuItems().size()]);
while (menuItems[0].contains("Cancel")
&& pointOnScreen(getMouseLocation())
&& System.currentTimeMillis() - start < 700) {
menuItems = getMenuItems().toArray(
new String[getMenuItems().size()]);
}
for (final String element : menuItems) {
if (element.contains(a)) {
return true;
}
}
} catch (final Exception ignored) {
}
return false;
}
@Override
public void moveMouse(final int x, final int y) {
if (x != -1 && y != -1) {
moveMouse(x, y, 0, 0);
}
}
@Override
public void moveMouse(final Point p) {
if (p.x != -1 && p.y != -1) {
moveMouse(p.x, p.y, 0, 0);
}
}
@Override
public void moveMouse(final Point p, final int rX, final int rY) {
final int X = p.x + random(-(rX / 2), (rX / 2));
final int Y = p.y + random(-(rY / 2), (rY / 2));
moveMouse(X, Y);
}
boolean onBoat() {
return boatArea != null
&& boatArea.contains(getMyPlayer().getLocation());
}
@Override
public void onFinish() {
log("Gained " + gainedPoints + " points.");
}
public void onRepaint(final Graphics g) {
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("BPestControlV2 made by Bool", x, y += g
.getFontMetrics().getHeight());
height += g.getFontMetrics().getHeight();
width = (int) g.getFontMetrics().getStringBounds(
"BPestControlV2 made by Bool", 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) {
}
}
@Override
public boolean onStart(final Map<String, String> l) {
start = false;
final BGUI gui = new BGUI();
gui.setVisible(true);
while (gui.isVisible()) {
wait(random(500, 600));
}
if (!start) {
return false;
}
if (start) {
new Thread(new animationChecker()).start();
antiban.start();
}
log("starting script");
pf = new Pathfinder();
return start;
// return true;
}
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) {
RSItemTile t = getGroundItem(arrowID);
if(t != null && t.isValid()){
atTile(t, "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);
}
}
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")) {
return random(600, 1200);
}
}
path = null;
if (failsafe > 4) {
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++;
wait(random(600, 800));
}
return random(400,700);
}
} catch (final Exception ignored) {
}
return random(400,700);
}
boolean PrayerEnabled() {
return getSetting(1395) > 0;
}
private int i = 0;
boolean walkPath(final RSTile[] path) {
final char left = 37;
final char right = 39;
RSTile tile = getNext(path);
moveMouse(Calculations.worldToMinimap(tile.getX(), tile.getY()));
if (!inPest()) {
return true;
}
if (i == 7) {
char dir = random(0, 3) == 2 ? left : right;
Bot.getInputManager().pressKey(dir);
wait(random(800, 1200));
Bot.getInputManager().releaseKey(dir);
i = 0;
return false;
}
if (getTopText().contains("ancel")) {
i++;
return false;
}
try {
walkTileMM(getNext(path));
wait(random(200, 500));
while (getMyPlayer().isMoving() && distanceTo(getDestination()) > 7) {
wait(random(600, 800));
}
} catch (final Exception ignored) {
}
return distanceTo(path[path.length - 1]) < 10 || !inPest();
}
void checkSpecial() {
if (specialPercent == 0 || isSpecialEnabled())
return;
int percent = (getSetting(300) / 10);
if (percent > specialPercent) {
RSInterfaceChild child = RSInterface.getChildInterface(884, 4);
if (getCurrentTab() != TAB_ATTACK)
openTab(TAB_ATTACK);
atInterface(child);
wait(random(400, 700));
}
}
boolean isSpecialEnabled() {
return getSetting(301) == 1;
}
void walkPath(final RSTile[] path, final int i) {
try {
walkTileMM(getNext(path));
wait(random(200, 500));
while (getMyPlayer().isMoving() && distanceTo(getDestination()) > 7) {
wait(random(600, 800));
}
} catch (final Exception ignored) {
}
}
int daxeID = 0;
int oldID = 0;
public void doDragonBattleAxe(){
if(!DBaxe)
return;
if (getCurrentTab() != TAB_INVENTORY)
openTab(TAB_INVENTORY);
atInventoryItem(daxeID, "");
if (getCurrentTab() != TAB_ATTACK)
openTab(TAB_ATTACK);
RSInterfaceChild child = RSInterface.getChildInterface(884, 4);
atInterface(child);
wait(random(1200, 1500));
if (getCurrentTab() != TAB_INVENTORY)
openTab(TAB_INVENTORY);
atInventoryItem(oldID, "");
}
RSNPC getNPC(boolean spinner) {
final String[] names = { "Shifter", "Defiler", "Torcher", "Brawler",
"Ravager", "Spinner" };
RSNPC closest = null;
final int[] validNPCs = Bot.getClient().getRSNPCIndexArray();
final org.rsbot.accessors.RSNPC[] npcs = Bot.getClient()
.getRSNPCArray();
ArrayList<RSNPC> result = new ArrayList<RSNPC>();
for (final int element : validNPCs) {
if (npcs[element] == null) {
continue;
}
final RSNPC Monster = new RSNPC(npcs[element]);
try {
for (final String name : names) {
if (!name.equals(Monster.getName())
|| distanceBetween(
getCurrentPortal().getLocation(), Monster
.getLocation()) > 10
|| Monster.isInCombat()
&& Monster.getHPPercent() < 10) {
continue;
}
result.add(Monster);
}
} catch (final Exception e) {
e.printStackTrace();
}
}
if (result.size() == 0)
return null;
RSNPC s = null;
for (RSNPC npc : result) {
if (spinner) {
if (npc.getName().equalsIgnoreCase("Spinner")) {
if (s == null || distanceTo(s) > distanceTo(npc))
s = npc;
}
}
if (closest == null || distanceTo(closest) > distanceTo(npc))
closest = npc;
}
if (spinner && s != null) {
return s;
}
return closest;
}
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 (isLoggedIn())
logout();
Time.reset();
log("Taking break for " + Time.toString());
while (!Time.isDone()) {
try {
Thread.sleep(random(500, 800));
} catch (InterruptedException e) {}
}
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));
}
public String timeRemaining() {
return timeToString(((System.currentTimeMillis() - start) + time));
}
}
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;
}
public boolean needUpdate(){
try{
URL url = new URL("http://boolscripts.site11.com/Scripts/version");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line = reader.readLine();
double i = Double.parseDouble(line);
if(i > version)
return true;
}catch(Exception e){}
return true;
}
Thread antiban = new Thread() {
@Override
public void run() {
setName("Antiban");
while (isActive) {
try {
if(!isLoggedIn()){
Thread.sleep(300,400);
continue;
}
int i = random(0, 150);
if (i == 4 || i == 9)
performAntiban(antibanQ.get(random(0,antibanQ.size())));
sleep(random(100, 2000));
} catch (InterruptedException ignored) {
}
}
}
};
class Pathfinder {
public int basex, basey;
public int[][] blocks;
public Pathfinder() {
reload();
}
public void reload() {
basex = Bot.getClient().getBaseX();
basey = Bot.getClient().getBaseY();
blocks = Bot.getClient().getRSGroundDataArray()[Bot.getClient()
.getPlane()].getBlocks();
}
public RSTile[] findPath(RSTile dest) {
if (!isValid())
reload();
return findPath(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 (!canReach(new RSTile(dest.x + basex, dest.y + basey), false)) {
return null;
}
ArrayList<Node> closed = new ArrayList<Node>();
ArrayList<Node> open = new ArrayList<Node>();
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<RSTile> result = new ArrayList<RSTile>();
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;
}
public Node getBestNode(ArrayList<Node> 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 (double) (Math.sqrt((dx * dx) + (dy * dy)));
}
public double getMovementCost(Node current, Node dest) {
return (double) Math.hypot(dest.x - current.x, dest.y - current.y);
}
/**
* credits to jacmob
*/
public ArrayList<Node> getNodesAround(Node node) {
final ArrayList<Node> tiles = new ArrayList<Node>();
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 validTile(RSTile tile) {
if (!isValid())
reload();
int x = tile.getX() - basex;
int y = tile.getY() - basey;
return x > 0 && x < 105 && y > 0 && y < 105;
}
public boolean isValid() {
return basex == Bot.getClient().getBaseX()
&& basey == Bot.getClient().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;
}
}
}
}