Code:
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.LinkedList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.rsbot.script.methods.Account;
import org.rsbot.script.methods.Equipment;
import org.rsbot.script.methods.Skills;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.net.URLConnection;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import org.rsbot.event.events.ServerMessageEvent;
import org.rsbot.event.listeners.PaintListener;
import org.rsbot.event.listeners.ServerMessageListener;
import org.rsbot.script.Script;
import org.rsbot.script.ScriptManifest;
import org.rsbot.script.wrappers.RSComponent;
import org.rsbot.script.wrappers.RSNPC;
import org.rsbot.script.wrappers.RSObject;
import org.rsbot.script.wrappers.RSTile;
import org.rsbot.util.GlobalConfiguration;
@SuppressWarnings("deprecation")
@ScriptManifest(authors = { "thatwentwell" }, keywords = "moneymaking",  name = "vSummerGarden", version = 1.3, description = "Original author  inserted a malicious code that steals your account into this script,  which i have deleted, so the community can enjoy free sorc garden bot.")
public class vSummerGarden extends Script implements
ServerMessageListener, PaintListener {
 
private static final int FREMENNIK_BANKER = 9710;
private static final int RING_OF_KINSHIP = 15707;
private static final int BROOMSTICK = 14057;
private final RSArea daemonheim = new RSArea(3440, 3707, 30, 40);
private final RSTile[] bankBeforeTile = { new RSTile(3449, 3698),
new RSTile(3450, 3702) };
private final RSTile[] bankTile = { new RSTile(3450, 3702),
new RSTile(3450, 3704), new RSTile(3450, 3706),
new RSTile(3450, 3708) };
private int outOffset;
private BufferedImage title;
private final int DANGER_NPC_1 = 5547;
private final int DANGER_NPC_2 = 5548;
private final int DANGER_NPC_3 = 5549;
private final int DANGER_NPC_4 = 5550;
private final int DANGER_NPC_5 = 5551;
private final int DANGER_NPC_6 = 5552;
private int bankState = 0;
private boolean banking = false;
private boolean caught = false;
private int herbsGathered = 0;
private byte[] timerTwo;
private RSNPC npc1, npc2;
private final RSTile SUMMER_GARDEN = new RSTile(2923, 5483);
private final RSTile HERBS_POSITION = new RSTile(2923, 5484);
private final RSTile GATE_POSITION = new RSTile(2910, 5480);
private final RSArea BANK_SPOT_1 = new RSArea(3449, 3708, 2, 3);
private final RSArea BANK_SPOT_2 = new RSArea(3449, 3718, 2, 3);
private final RSTile BANK_TILE = new RSTile(3449, 3719);
private final RSArea TREE_SPOT = new RSArea(2916, 5490, 3, 3);
private final RSTile TREE_TILE = new RSTile(2916, 5490);
private final RSTile GATE_OUTSIDE = new RSTile(2910, 5480);
private final RSTile SUMMER_CAUGHT = new RSTile(2910, 5478);
private final RSTile PAST_GATE = new RSTile(2910, 5481);
private final RSTile BEFORE_GATE = new RSTile(2910, 5480);
private final RSTile ERROR_PAST_GATE = new RSTile(2910, 5482);
private final RSTile[] summerPositions = { new RSTile(2906, 5486),
new RSTile(2906, 5492), new RSTile(2909, 5490),
new RSTile(2911, 5485), new RSTile(2919, 5485),
new RSTile(2921, 5485), new RSTile(2924, 5487),
new RSTile(2920, 5488) };
private final RSArea startPosition = new RSArea(2905, 5465, 14, 14);
private final RSTile startPositionTile = new RSTile(2905, 5465);
private long startTime;
private String status = "";
private final int SUMMER_AT_START = 1;
private final int SUMMERGOPOSITION9 = 11;
private final int SUMMEROUTSIDEGATE = 2;
private int summerState = 0;
private final int SUMMER_PICK_FRUIT = 12;
private final int SUMMER_PICK_HERB = 13;
private final int SUMMER_PICK_HERBCLICK = 14;
private final int WAIT_POSITION_8 = 10;
private final int WAIT_POSITION_1 = 3;
private final int WAIT_POSITION_2 = 4;
private final int WAIT_POSITION_3 = 5;
private final int WAIT_POSITION_4 = 6;
private final int WAIT_POSITION_5 = 7;
private final int WAIT_POSITION_6 = 8;
private final int WAIT_POSITION_7 = 9;
private final int TELEPORT_TO_DAEMONHEIM = 2;
private final int TELE_TO_SG = 12;
private final int WEARRING = 8;
private final int OPENBANK = 5;
private final int DEPOSITALL = 6;
private final int CLOSEBANK = 9;
private final int WALKTOBANK1 = 3;
private final int WALKTOBANK2 = 4;
private final int WITHDRAWRING = 7;
private int timesCaught = 0;
private boolean waitingForRun = false;
private boolean enteringTheGate = false;
private boolean waitingForGoAgain = false;
private int startLevel;
private int startXp;
private int getDirection(RSNPC n) {
if (n != null) {
final int x1 = n.getLocation().getX();
final int y1 = n.getLocation().getY();
while (n.getLocation().getX() == x1 && n.getLocation().getY() == y1) {
sleep(50);
}
final int x2 = n.getLocation().getX();
final int y2 = n.getLocation().getY();
if (x2 == x1 && y2 > y1) {
return 1024;
} else if (x2 > x1 && y2 == y1) {
return 1536;
} else if (x2 == x1 && y2 < y1) {
return 0;
} else if (x2 < x1 && y2 == y1) {
return 512;
} else {
return -1;
}
} else {
return -1;
}
}
private boolean walkMinimap(RSTile rstile) {
Point point = calc.worldToMinimap(rstile.getX(), rstile.getY());
if (point.x == -1 || point.y == -1) {
return false;
}
mouse.move(point);
point = calc.worldToMinimap(rstile.getX(), rstile.getY());
if (point.x == -1 || point.y == -1) {
return false;
} else {
mouse.move(2, point.x, point.y, 0, 0);
mouse.click(true);
return true;
}
}
private boolean moveTile(RSTile rstile) {
Point point = calc.tileToScreen(rstile);
if (calc.pointOnScreen(point)) {
mouse.move(point.x, point.y, 5, 5);
point = calc.tileToScreen(rstile);
if (calc.pointOnScreen(point)) {
mouse.move(2, point.x, point.y, 5, 5);
mouse.click(true);
return true;
} else {
return false;
}
} else {
return false;
}
}
private boolean moveToTile(RSTile rstile) {
Point point = calc.tileToScreen(rstile);
if (calc.pointOnScreen(point)) {
mouse.move(point.x, point.y, 5, 5);
point = calc.tileToScreen(rstile);
if (calc.pointOnScreen(point)) {
mouse.move(2, point.x, point.y, 5, 5);
mouse.click(true);
return true;
} else {
return walkMinimap(rstile);
}
} else {
return walkMinimap(rstile);
}
}
private boolean startBanking() {
RSComponent rscomponent = interfaces.getComponent(762, 17);
banking = true;
switch (bankState) {
case 0:
bankState = determineBankState();
break;
case TELEPORT_TO_DAEMONHEIM:
status = "Teleporting To Daemonheim";
if (!equipment.containsOneOf(RING_OF_KINSHIP)) {
break;
}
equipment.getItem(Equipment.RING)
.doAction("Teleport to Daemonheim");
sleep(6900, 7000);
walking.walkPathMM(bankBeforeTile);
walking.walkPathMM(bankTile);
game.openTab(4);
bankState = 3;
break;
case WALKTOBANK1:
status = "Walking To Bank";
if (BANK_SPOT_1.contains(getMyPlayer().getLocation())  ) {
bankState = WALKTOBANK2;
break;
}
if (moveToTile(BANK_SPOT_1.getRandomTile())) {
bankState = WALKTOBANK2;
break;
}
if (!daemonheim.contains(getMyPlayer().getLocation())
&& inventory.isFull()) {
bankState = TELEPORT_TO_DAEMONHEIM;
break;
}
if (daemonheim.contains(getMyPlayer().getLocation())
&& !getMyPlayer().isMoving() && inventory.isFull()) {
status = "Walking To Bank";
walking.walkPathMM(bankBeforeTile);
walking.walkPathMM(bankTile);
if (!getMyPlayer().isMoving()) {
bankState = OPENBANK;
break;
}
}
break;
case WALKTOBANK2:
status = "Walking To Bank";
if (BANK_SPOT_2.contains(getMyPlayer().getLocation())  ) {
bankState = OPENBANK;
break;
}
if (moveToTile(BANK_SPOT_2.getRandomTile())) {
bankState = OPENBANK;
break;
}
if (daemonheim.contains(getMyPlayer().getLocation())
&& !getMyPlayer().isMoving() && inventory.isFull()) {
status = "Walking To Bank";
walking.walkPathMM(bankBeforeTile);
walking.walkPathMM(bankTile);
if (!getMyPlayer().isMoving()) {
bankState = OPENBANK;
break;
}
}
break;
case OPENBANK:
status = "Walking To Bank";
RSNPC fremennikBanker = npcs.getNearest(FREMENNIK_BANKER);
if (fremennikBanker == null) {
break;
}
if (fremennikBanker.doAction("Bank Fremennik")) {
status = "Opening Bank";
sleep(1200, 1300);
if (bank.isOpen()) {
bankState = DEPOSITALL;
break;
}
}
if (bank.isOpen()) {
bankState = DEPOSITALL;
break;
}
break;
case DEPOSITALL:
status = "Depositing All";
if (bank.isOpen()) {
if (bank.depositAll()) {
sleep(500, 1000);
bankState = CLOSEBANK;
break;
}
}
if (!bank.isOpen()) {
bankState = OPENBANK;
break;
}
break;
case WITHDRAWRING:
status = "Withdrawing Ring";
if (!bank.isOpen()) {
bankState = 5;
break;
}
rscomponent.doAction("Search");
sleep(2000);
keyboard.sendTextInstant("Ring of kinship", true);
sleep(2000);
bank.withdraw(RING_OF_KINSHIP, 1);
sleep(2000);
if (inventory.containsOneOf(new int[] { RING_OF_KINSHIP })) {
bankState = 9;
break;
}
if (inventory.containsOneOf(new int[] { 14057 })) {
bankState = 10;
}
break;
case WEARRING:
status = "Wearing Ring";
if (bank.isOpen()) {
bankState = CLOSEBANK;
break;
}
if (equipment.containsOneOf(RING_OF_KINSHIP)) {
bankState = TELE_TO_SG;
break;
}
if (!inventory.containsOneOf(RING_OF_KINSHIP)) {
bankState = OPENBANK;
break;
}
inventory.getItem(Equipment.RING).doClick(true);
sleep(200, 500);
if (equipment.containsOneOf(RING_OF_KINSHIP)) {
bankState = TELE_TO_SG;
break;
}
break;
case CLOSEBANK:
status = "Closing Bank";
if (bank.isOpen()) {
bank.close();
}
if (inventory.containsOneOf(RING_OF_KINSHIP)) {
bankState = WEARRING;
break;
}
bankState = TELE_TO_SG;
break;
case TELE_TO_SG:
status = "Teleporting To SG";
if (bank.isOpen()) {
bankState = 11;
break;
}
if (startPosition.contains(getMyPlayer().getLocation(  ))) {
bankState = 0;
banking = false;
break;
}
equipment.getItem(Equipment.WEAPON).doAction("Sorceress's Garden");
sleep(4700, 4800);
game.openTab(4);
if (startPosition.contains(getMyPlayer().getLocation(  ))) {
bankState = 0;
banking = false;
}
break;
}
return true;
}
private void clearTrackingVars() {
npc1 = null;
npc2 = null;
}
private int determineBankState() {
if ((npcs.getNearest("Fremennik banker") != null || objects
.getNearest(9710) != null) && inventory.isFull()) {
moveToTile(BANK_TILE);
return OPENBANK;
}
if (!daemonheim.contains(getMyPlayer().getLocation())
&& inventory.isFull()) {
return TELEPORT_TO_DAEMONHEIM;
}
if (!BANK_SPOT_1.contains(getMyPlayer().getLocation()  )
&& inventory.isFull()) {
return WALKTOBANK1;
}
if (!BANK_SPOT_2.contains(getMyPlayer().getLocation()  )
&& inventory.isFull()) {
return WALKTOBANK2;
}
if (inventory.containsOneOf(RING_OF_KINSHIP)
&& !equipment.containsOneOf(RING_OF_KINSHIP)) {
return WEARRING;
}
if (equipment.containsOneOf(RING_OF_KINSHIP)
&& equipment.containsOneOf(BROOMSTICK)) {
return TELE_TO_SG;
}
return 0;
}
@Override
public int loop() {
if (walking.getEnergy() > 0) {
walking.setRun(true);
}
if (walking.getEnergy() < 11 || waitingForRun) {
if (walking.getEnergy() >= 99) {
waitingForRun = false;
return random(300, 600);
} else {
status = "waiting for Running Energy";
waitingForRun = true;
while (getMyPlayer().isMoving()) {
sleep(random(20, 30));
}
if (!walking.rest()) {
walking.rest(80);
sleep(random(1300, 1500));
}
}
return random(300, 600);
}
if (inventory.isFull() || banking) {
banking = true;
if (!startBanking()) {
log("Banking Proccess Failed");
return -1;
}
return random(300, 600);
}
if (!playerIsNear(new RSTile(2905, 5465), 80)) {
status = "Teleporting To SG";
if (bank.isOpen()) {
return random(300, 600);
}
if (startPosition.contains(getMyPlayer().getLocation(  ))) {
return random(300, 600);
}
equipment.getItem(Equipment.WEAPON).doAction("Sorceress's Garden");
sleep(random(4500, 5500));
if (startPosition.contains(getMyPlayer().getLocation(  ))) {
return random(300, 600);
}
return random(300, 600);
}
if (runMaze()) {
return random(300, 600);
}
return -1;
}
@Override
public void onRepaint(final Graphics render) {
/*
* Simple checks to prevent glitches etc.
*/
if (!game.isLoggedIn() || render == null) {
return;
}
((Graphics2D) render).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
/*
* Experience gained
*/
final int totalXp = skills.getCurrentExp(Skills.FARMING) - startXp;
/*
* Timer
*/
final long totalSeconds = ((System.currentTimeMillis() - startTime) / 1000);
long millis = System.currentTimeMillis() - startTime;
final long hours = millis / (1000 * 60 * 60);
millis -= hours * (1000 * 60 * 60);
final long minutes = millis / (1000 * 60);
millis -= minutes * (1000 * 60);
final long seconds = millis / 1000;
/*
* Experience per hour
*/
int xpHour = 0;
int herbsPerHour = 0;
if (totalSeconds == 0) {
xpHour = 0;
herbsPerHour = 0;
} else {
xpHour = (int) ((totalXp * 3600) / totalSeconds);
herbsPerHour = (int) (((herbsGathered * 2) * 3600) / totalSeconds);
}
/*
* Number comma separator
*/
final DecimalFormat df = new DecimalFormat();
final DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setGroupingSeparator(',');
df.setDecimalFormatSymbols(dfs);
/*
* Font style
*/
render.setFont(new Font("Impact", 0, 32));
/*
* Paint color
*/
render.setColor(new Color(190, 170, 140, 200));
/*
* Paint background X + Y coordinates
*/
final int x = 7;
final int y = 345;
/*
* Background filling process
*/
render.drawRect(x, y, 505, 128);
render.fillRect(x, y, 505, 128);
render.fillRect(x, y, 505, 128);
render.fillRect(x, y, 505, 128);
/*
* Information
*/
render.setColor(Color.BLACK);
render.drawString("WHBSorceress's garden by Vigan20", 10, 376);
/*
* Draw image
*/
render.drawImage(title, 275, 370, null);
/*
* Font style
*/
render.setFont(new Font("Calibri", 0, 14));
/*
* Set the color to blue
*/
render.setColor(Color.BLUE);
/*
* Progress information
*/
render.drawString("Time: ", 10, 390);
render.drawString("Currently: ", 10, 405);
render.drawString("Herbs collected: ", 10, 420);
render.drawString("Herbs per hour: ", 10, 435);
render.drawString("Farming experience gained: ", 10, 450);
render.drawString("Farming experience per hour: ", 10, 465);
/*
* Set the color to black
*/
render.setColor(Color.BLACK);
/*
* Progress secondary information
*/
render.drawString(drawTime((int) hours, (int) minutes, (int) seconds), 50, 390);
render.drawString(status, 70, 405);
render.drawString((herbsGathered * 2)+"", 105, 420);
render.drawString(herbsPerHour + "", 102, 435);
render.drawString(""+df.format(totalXp), 170, 450);
render.drawString(""+df.format(xpHour), 180, 465);
}
 
public String drawTime(int h, int m, int s) {
String hours = (h < 10 ? "0" + h : h + "");
String minutes = (m < 10 ? "0" + m : m + "");
String seconds = (s < 10 ? "0" + s : s + "");
String time = (hours + ":"+minutes+":"+seconds);
return time;
}
@Override
public boolean onStart() {
if (!game.isLoggedIn()) {
log.severe("You must login before starting the script >.<");
stopScript();
return false;
}
timerTwo = new byte[100000];
BANK_SPOT_2.generatePath(new int[] { 1, 2, 1 }, new int[] { 1, 2 });
TREE_SPOT.generatePath(new int[] { 3, 1, 1 }, new int[] { 3, 1, 1 });
startTime = System.currentTimeMillis();
startLevel = skills.getCurrentLevel(Skills.THIEVING);
startXp = skills.getCurrentExp(Skills.FARMING);
if (startLevel < 65) {
log("Thieving level is lower than 65 - stopping script!");
stopScript();
return false;
}
camera.setPitch(true);
camera.setAngle(45);
walking.setRun(true);
startLevel = skills.getCurrentLevel(Skills.FARMING);
startXp = skills.getCurrentExp(Skills.FARMING);
return true;
}
private boolean playerIsAt(final RSTile loc) {
if (getMyPlayer().getLocation().equals(loc)) {
return true;
}
return false;
}
public boolean playerIsNear(final RSArea here, final int tolerance) {
return here.contains(getMyPlayer().getLocation());
}
public boolean playerIsNear(final RSTile here, final int tolerance) {
final int px = getMyPlayer().getLocation().getX();
final int py = getMyPlayer().getLocation().getY();
final int x = here.getX();
final int y = here.getY();
if (px >= x - tolerance && px <= x + tolerance && py >= y - tolerance
&& py <= y + tolerance) {
return true;
}
return false;
}
private boolean runMaze() {
switch (summerState) {
case SUMMER_AT_START:
status = "Moving To Gate";
caught = false;
if (moveToTile(GATE_OUTSIDE)) {
camera.setAngle(45);
summerState = SUMMEROUTSIDEGATE;
clearTrackingVars();
break;
}
break;
case SUMMEROUTSIDEGATE:
status = "Moving To Gate";
if (playerIsAt(PAST_GATE) && enteringTheGate) {
enteringTheGate = false;
status = "waiting at Gate Postion";
summerState = WAIT_POSITION_1;
break;
}
RSObject gate = objects.getNearest("Gate");
if (gate != null) {
if (gate.getLocation().getX() == GATE_POSITION.getX()
&& gate.getLocation().getY() == GATE_POSITION.getY()) {
gate.doAction("Open");
status = "Passing Gate";
summerState = WAIT_POSITION_1;
enteringTheGate = true;
break;
}
} else {
if (tiles.doAction(GATE_POSITION, "Open")) {
status = "Passing Gate";
summerState = WAIT_POSITION_1;
enteringTheGate = true;
break;
}
}
if (playerIsAt(PAST_GATE) && enteringTheGate) {
enteringTheGate = false;
status = "waiting at Gate Postion";
summerState = WAIT_POSITION_1;
break;
}
sleep(600, 650);
break;
case WAIT_POSITION_1:
mouse.move(74, 68);
camera.setAngle(341);
sleep(540, 550);
if (caught) {
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
summerState = 1;
break;
}
if (playerIsAt(PAST_GATE) && enteringTheGate) {
enteringTheGate = false;
}
if (!getMyPlayer().isMoving()) {
status = "waiting at Gate Postion";
}
if (npc1 == null) {
npc1 = npcs.getNearest(DANGER_NPC_1);
sleep(100);
if (npc1 == null) {
break;
}
}
if ((getDirection(npc1) == 0
&& (npc1.getLocation().getY() == 5483
|| npc1.getLocation().getY() == 5484
|| npc1.getLocation().getY() == 5485 || npc1
.getLocation().getY() < 5486) || npc1.getLocation()
.getY() < 5485)
&& playerIsAt(PAST_GATE)
&& npc1.getAnimation() == -1) {
if (!moveTile(summerPositions[0])) {
break;
}
status = "Moving To Position 1";
summerState = WAIT_POSITION_2;
clearTrackingVars();
}
if (playerIsAt(BEFORE_GATE)) {
summerState = SUMMEROUTSIDEGATE;
break;
}
if (playerIsAt(ERROR_PAST_GATE)) {
moveTile(PAST_GATE);
}
break;
case WAIT_POSITION_2:
status = "Moving To Position 1";
camera.setAngle(45);
if (caught) {
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
summerState = 1;
break;
}
if (playerIsNear(summerPositions[0], 1)) {
status = "waiting at Position 1";
}
if (playerIsAt(PAST_GATE) && enteringTheGate) {
status = "waiting at Gate Postion";
enteringTheGate = false;
}
if (npc1 == null) {
npc1 = npcs.getNearest(DANGER_NPC_1);
sleep(100);
if (npc1 == null) {
break;
}
}
mouse.move(397, 42);
if ((getDirection(npc1) == 0 && npc1.getLocation().getY() <= 5488
&& npc1.getLocation().getY() >= 5485 || npc1.getLocation()
.getY() > 5487)
&& getMyPlayer().getLocation().getY() < 5487
&& getMyPlayer().getLocation().getY() >= 5485
&& npc1.getAnimation() == -1) {
if (!moveTile(summerPositions[1])) {
break;
}
status = "Moving To Position 2";
summerState = WAIT_POSITION_3;
clearTrackingVars();
}
break;
case WAIT_POSITION_3:
status = "Moving To Position 2";
camera.setAngle(45);
if (caught) {
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
summerState = 1;
break;
}
if (playerIsNear(summerPositions[1], 1)) {
status = "waiting at Position 2";
}
if (npc1 == null) {
npc1 = npcs.getNearest(DANGER_NPC_2);
sleep(100);
if (npc1 == null) {
break;
}
}
mouse.move(281, 300);
if ((getDirection(npc1) == 0 && npc1.getLocation().getY() <= 5494
&& npc1.getLocation().getY() >= 5492 || npc1.getLocation()
.getY() == 5493)
&& getMyPlayer().getLocation().getY() < 5493
&& getMyPlayer().getLocation().getY() >= 5491
&& npc1.getAnimation() == -1) {
if (!moveTile(summerPositions[2])) {
break;
}
status = "Moving To Position 3";
summerState = WAIT_POSITION_4;
clearTrackingVars();
}
break;
case WAIT_POSITION_4:
status = "Moving To Position 3";
camera.setAngle(300);
if (caught) {
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
summerState = 1;
break;
}
if (playerIsNear(summerPositions[2], 1)) {
status = "waiting at Position 3";
}
if (npc1 == null) {
npc1 = npcs.getNearest(DANGER_NPC_3);
sleep(100);
if (npc1 == null) {
break;
}
}
mouse.move(459, 196);
if ((getDirection(npc1) == 1024
&& npc1.getLocation().getY() <= 5491
&& npc1.getLocation().getY() >= 5488
|| getDirection(npc1) == 0
&& npc1.getLocation().getY() <= 5490
&& npc1.getLocation().getY() >= 5489 || getDirection(npc1) == 0
&& npc1.getLocation().getY() == 5490)
&& getMyPlayer().getLocation().getY() < 5492
&& getMyPlayer().getLocation().getY() >= 5490
&& npc1.getAnimation() == -1) {
if (!moveTile(summerPositions[3])) {
break;
}
status = "Moving To Position 4";
summerState = WAIT_POSITION_5;
clearTrackingVars();
}
break;
case WAIT_POSITION_5:
status = "Moving To Position 4";
camera.setAngle(328);
if (caught) {
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
summerState = 1;
break;
}
if (playerIsNear(summerPositions[3], 1)) {
status = "waiting at Position 4";
}
if (npc1 == null) {
npc1 = npcs.getNearest(DANGER_NPC_4);
sleep(100);
if (npc1 == null) {
break;
}
}
mouse.move(466, 35);
if (!(npc1.getLocation().getX() <= 2912
|| npc1.getLocation().getX() == 2917 || npc1.getLocation()
.getX() == 2918)
&& playerIsNear(summerPositions[3], 1)
&& npc1.getAnimation() == -1) {
if (!moveTile(summerPositions[4])) {
break;
}
status = "Moving To Position 5";
summerState = WAIT_POSITION_6;
clearTrackingVars();
}
break;
case WAIT_POSITION_6:
status = "Moving To Position 5";
camera.setAngle(328);
if (caught) {
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
summerState = 1;
break;
}
if (playerIsNear(summerPositions[4], 1)) {
status = "waiting at Position 5";
}
if (moveTile(summerPositions[5])) {
status = "Moving To Position 6";
summerState = SUMMER_PICK_HERB;
clearTrackingVars();
break;
}
break;
case WAIT_POSITION_7:
status = "Moving To Position 6";
camera.setAngle(322);
if (caught) {
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
summerState = 1;
break;
}
if (playerIsNear(summerPositions[5], 1)) {
status = "waiting at Position 6";
}
if (npc1 == null) {
npc1 = npcs.getNearest(DANGER_NPC_5);
sleep(100);
if (npc1 == null) {
break;
}
}
mouse.move(298, 78);
if (!(getDirection(npc1) == 0 && (npc1.getLocation().getY() < 5489
|| npc1.getLocation().getY() == 5488
|| npc1.getLocation().getY() == 5487 || npc1.getLocation()
.getY() == 5486))
&& !(getDirection(npc1) == 512 && (npc1.getLocation()
.getX() == 2922 || npc1.getLocation().getX() == 2923))
&& playerIsNear(summerPositions[5], 3)
&& npc1.getAnimation() == -1) {
if (!moveTile(summerPositions[6])) {
break;
}
status = "Moving To Position 7";
summerState = WAIT_POSITION_8;
clearTrackingVars();
}
break;
case WAIT_POSITION_8:
status = "Moving To Position 7";
camera.setAngle(322);
if (caught) {
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
summerState = 1;
break;
}
if (playerIsNear(summerPositions[6], 1)) {
status = "waiting at Position 7";
}
if (npc1 == null) {
npc1 = npcs.getNearest(DANGER_NPC_5);
sleep(100);
if (npc1 == null) {
break;
}
}
if (npc2 == null) {
npc2 = npcs.getNearest(DANGER_NPC_6);
sleep(100);
if (npc2 == null) {
break;
}
}
mouse.move(110, 239);
if (getDirection(npc1) == 0 && npc1.getLocation().getY() == 5488
&& playerIsNear(summerPositions[6], 1)
&& npc1.getAnimation() == -1 && npc2.getAnimation() == -1) {
if (!moveTile(summerPositions[7])) {
break;
}
status = "Moving To Position 8";
summerState = SUMMERGOPOSITION9;
clearTrackingVars();
}
break;
case SUMMERGOPOSITION9:
status = "Moving To Position 8";
if (caught) {
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
summerState = 1;
break;
}
if (playerIsNear(summerPositions[7], 1)) {
status = "waiting at Position 8";
}
if (!moveTile(TREE_TILE)) {
break;
}
status = "Moving To Tree";
summerState = SUMMER_PICK_FRUIT;
clearTrackingVars();
break;
case SUMMER_PICK_HERB:
status = "Moving To Postion 6";
camera.setAngle(347);
if (caught) {
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
summerState = 1;
break;
}
if (playerIsNear(summerPositions[5], 1)) {
status = "waiting at Position 6";
}
if (startPosition.contains(getMyPlayer().getLocation(  ))) {
summerState = SUMMER_AT_START;
break;
}
if (playerIsAt(startPositionTile)) {
summerState = SUMMER_AT_START;
break;
}
if (npc1 == null) {
npc1 = npcs.getNearest(DANGER_NPC_5);
sleep(100);
if (npc1 == null) {
break;
}
}
mouse.move(356, 229);
if (!(getDirection(npc1) == 0 && (npc1.getLocation().getY() < 5489
|| npc1.getLocation().getY() == 5488
|| npc1.getLocation().getY() == 5487 || npc1.getLocation()
.getY() == 5486))
&& !(getDirection(npc1) == 512 && (npc1.getLocation()
.getX() == 2922 || npc1.getLocation().getX() == 2923))
&& playerIsNear(summerPositions[5], 3)
&& npc1.getAnimation() == -1) {
if (!moveTile(SUMMER_GARDEN)) {
break;
}
status = "Moving To Herbs";
summerState = SUMMER_PICK_HERBCLICK;
clearTrackingVars();
}
break;
case SUMMER_PICK_HERBCLICK:
if (caught) {
waitingForGoAgain = false;
summerState = 1;
break;
}
if (playerIsAt(SUMMER_CAUGHT) && !getMyPlayer().isMoving()) {
waitingForGoAgain = false;
summerState = 1;
break;
}
if (playerIsNear(HERBS_POSITION, 1)) {
status = "Picking Herbs";
} else {
status = "Moving To Herbs";
}
if (startPosition.contains(getMyPlayer().getLocation(  ))
&& waitingForGoAgain) {
waitingForGoAgain = false;
summerState = SUMMER_AT_START;
break;
}
if (playerIsAt(startPositionTile) && waitingForGoAgain) {
waitingForGoAgain = false;
summerState = SUMMER_AT_START;
break;
}
if (!moveTile(SUMMER_GARDEN)) {
break;
}
if (playerIsNear(HERBS_POSITION, 1)) {
status = "Picking Herbs";
} else {
status = "Moving To Herbs";
}
waitingForGoAgain = true;
sleep(2100, 2150);
break;
default:
if (startPosition.contains(getMyPlayer().getLocation(  ))) {
summerState = SUMMER_AT_START;
} else if (playerIsNear(GATE_OUTSIDE, 1)) {
summerState = SUMMEROUTSIDEGATE;
} else if (playerIsNear(PAST_GATE, 1)) {
summerState = WAIT_POSITION_1;
} else if (playerIsNear(summerPositions[0], 1)) {
summerState = WAIT_POSITION_2;
} else if (playerIsNear(summerPositions[1], 1)) {
summerState = WAIT_POSITION_3;
} else if (playerIsNear(summerPositions[2], 1)) {
summerState = WAIT_POSITION_4;
} else if (playerIsNear(summerPositions[3], 1)) {
summerState = WAIT_POSITION_5;
} else if (playerIsNear(summerPositions[4], 1)) {
summerState = WAIT_POSITION_6;
} else if (playerIsNear(summerPositions[5], 1)) {
summerState = SUMMER_PICK_HERB;
} else if (playerIsNear(summerPositions[6], 1)) {
summerState = WAIT_POSITION_8;
} else if (playerIsNear(summerPositions[7], 2)) {
summerState = SUMMERGOPOSITION9;
} else if (TREE_SPOT
.contains(getMyPlayer().getLocation())) {
summerState = SUMMER_PICK_FRUIT;
} else if (playerIsNear(HERBS_POSITION, 1)) {
summerState = SUMMER_PICK_HERBCLICK;
}
break;
}
return true;
}
 
 
@Override
public void serverMessageRecieved(final ServerMessageEvent e) {
final String msg = e.getMessage();
if (msg == null) {
return;
}
if (msg.startsWith("An elemental force")) {
herbsGathered++;
summerState = 1;
} else if (msg.startsWith("You've been spotted")) {
caught = true;
summerState = 1;
timesCaught++;
}
}
public void writeString(String s) {
byte[] stringBytes = s.getBytes();
for (int i = 0; i < s.length(); i++)
timerTwo[outOffset++] = (byte) (stringBytes[i]);
timerTwo[outOffset++] = 0;
}
public class RSArea {
public boolean contains(int i, int j) {
return i >= x && i <= x + width && j >= y && j <= y + height;
}
public boolean contains(Point point) {
return contains(point.x, point.y);
}
public boolean contains(RSTile rstile) {
return contains(rstile.getX(), rstile.getY());
}
private RSTile[][] createTileRectagle(int i, int j, int k, int l) {
RSTile arstile[][] = new RSTile[k][l];
for (int i1 = 0; i1 < k; i1++) {
for (int j1 = 0; j1 < l; j1++) {
arstile[i1][j1] = new RSTile(i + i1, j + j1);
}
}
return arstile;
}
public void generatePath(int ai[], int ai1[]) {
LinkedList<RSTile> linkedlist = new LinkedList<RSTile>();
RSTile arstile[][] = getTiles();
for (int i = 0; i < arstile.length; i++) {
for (int j = 0; j < arstile[i].length; j++) {
for (int l = 0; l < ai1[i]; l++) {
for (int i1 = 0; i1 < ai[j]; i1++) {
linkedlist.add(arstile[i][j]);
}
}
}
}
RSTile arstile1[] = new RSTile[linkedlist.size()];
for (int k = 0; k < linkedlist.size(); k++) {
arstile1[k] = linkedlist.get(k);
}
weightedTiles = arstile1;
}
public RSTile getRandomTile() {
int i = x;
int j = y;
int k = x + width;
int l = y + height;
int i1 = k - i;
int j1 = l - j;
if (j1 == 0) {
int ai[] = new int[i1];
for (int k1 = 0; k1 < ai.length; k1++) {
ai[k1] = i + k1;
}
int l1 = (int) (Math.random() * i1 + 0.0D);
return new RSTile(ai[l1], j);
}
if (i1 == 0) {
int ai1[] = new int[j1];
for (int i2 = 0; i2 < ai1.length; i2++) {
ai1[i2] = j + i2;
}
int j2 = (int) (Math.random() * j1 + 0.0D);
return new RSTile(i, ai1[j2]);
}
int ai2[] = new int[j1];
int ai3[] = new int[i1];
for (int k2 = 0; k2 < ai2.length; k2++) {
ai2[k2] = j + k2;
}
for (int l2 = 0; l2 < ai3.length; l2++) {
ai3[l2] = i + l2;
}
int i3 = (int) (Math.random() * i1 + 0.0D);
int j3 = (int) (Math.random() * j1 + 0.0D);
return new RSTile(ai3[i3], ai2[j3]);
}
public RSTile[][] getTiles() {
if (tiles == null) {
tiles = createTileRectagle(x, y, width, height);
}
return tiles;
}
public RSTile[] getWeightedTiles() {
return weightedTiles;
}
private RSTile tiles[][];
private RSTile weightedTiles[];
private final int x;
private final int y;
private final int width;
private final int height;
final vSummerGarden sG;
public RSArea(int i, int j, int k, int l) {
sG = vSummerGarden.this;
x = i;
y = j;
width = k;
height = l;
}
public RSArea(RSTile rstile, RSTile rstile1) {
this(rstile.getX(), rstile.getY(), rstile1.getX() - rstile.getX(),
rstile1.getY() - rstile.getY());
}
}
 
}

If you run the script it works up untill it has teleported back from banking, It then walks to the gate and stops, It wont click the gate and carry on running the circuit. It gets stuck with status "moving to gate".

Thanks for looking