// mehhh's Private Lumbridge Flax Spinner
// - - - - - - - - - - - -
// From using/buying this script, the buyer agrees to:
// - Not redistribute this script to any other site or leak it to any other site.
// - That this script is property of mehhh.
import java.awt.*;
import java.util.ArrayList;
import com.speljohan.rsbot.bot.*;
import com.speljohan.rsbot.event.events.ServerMessageEvent;
import com.speljohan.rsbot.event.listeners.*;
import com.speljohan.rsbot.script.*;
import com.speljohan.rsbot.script.wrappers.*;
public class LumbFlaxSpinnerUs extends Script implements PaintListener, ServerMessageListener {
public RSTile[] deathToCastlePath = {new RSTile(3214, 3215), new RSTile(3206, 3210)};
boolean proggy = false;
long startTime = System.currentTimeMillis();
int stringsBanked = 0;
int bankFail = 0;
int bankNPC = 4907;
private RSTile LADDER = new RSTile(3209, 9616);
final int FLAX_ID = 1779;
final int BOW_STRING_ID = 1777;
final int DOOR_CLOSE_ID = 36844;
final int DOOR_CLOSE_ID1 = 36830;
final int BOW_STRING_CHILD_ID = 17;
final int[] SPINNING_WHEEL_ID = {36970, 36785};
final int SPINNING_INTERFACE_ID = 459;
final int[] BANK_ID = {36786, 36831};
private void pause() {
wait(random(200, 300));
}
public RSTile bankBoothTile = new RSTile(3208, 3220);
final Color BG = new Color(0, 0, 0, 100);
final Color WHITE = new Color(255, 255, 255, 255);
final RSTile STAIRCASE_TILE2 = new RSTile(3206, 3210);
final RSTile bankTile = new RSTile(3208, 3220);
final RSTile BOOTH_TILE = new RSTile(3208, 3221);
final RSTile DOOR_CLOSE_TILE = new RSTile(3207, 3214);
final RSTile DOOR_CLOSE_TILE1 = new RSTile(3208, 3212);
final RSTile STAIRCASE_TILE = new RSTile(3205, 3208);
final RSTile STAIRCASE_TILE1 = new RSTile(3204, 3207);
final RSTile DEATH_TILE = new RSTile(3214, 3214);
final RSTile DEATH_TILE1 = new RSTile(3206, 3210);
public String getName() {
return "LumbFlaxSpinnerUs";
}
public double getVersion() {
return 6.2;
}
public String getAuthor() {
return "mehhh/..:loading:../Mike";
}
public String getScriptCategory() {
return "Crafting";
}
public String getScriptDescription() {
return "\n" + "
\n" + "\n" + ""
+ ""
+ getName()
+ "
"
+ "\n"
+ "Author: "
+ getAuthor()
+ "
\n"
+ "Version: "
+ getVersion()
+ "
\n"
+ "
\n"
+ "Starting Location: Lumbridge Bank & put Flax in FIFTH bank slot.
"
+ "Function: Spins Flax."
+ "
"
+ "Version Notes: "
+ ""
+ "- "
+ "6.1: Small edits"
+ "
"
+ " - Logs off when out of flax now."
+ " - "
+ "6.0: Final Version (NOT)"
+ "
"
+ " - Tuned up the script."
+ "
"
+ " - Should run back into bank if misclicked out of the bank."
+ " - "
+ "5.8: Re-fixed Deathwalk"
+ "
"
+ " - Fix and edited deathwalk so it works and that it is better than before."
+ "
"
+ " - Should run back into bank if misclicked out of the bank. (NEEDS FEEDBACK AGAIN)"
+ " - "
+ "5.7: Fastest and New Features (NEEDS FEEDBACK AGAIN)"
+ "
"
+ " - Fastest the script can possibly run."
+ "
"
+ " - Should run back into bank if misclicked out of the bank. (NEEDS FEEDBACK AGAIN)"
+ "
"
+ " - Should run back into Lumbridge Castle when dead. (NEEDS FEEDBACK)"
+ " - "
+ "5.6: Small Edits and New Feature (UNTESTED, NEED FEEDBACK)"
+ "
"
+ " - Script should perform a little bit faster."
+ "
"
+ " - Should run back into bank if misclicked out of the bank. (NEED FEEDBACK)"
+ " - "
+ "5.5: Faster script"
+ "
"
+ " - Script should perform a faster."
+ " - "
+ "5.4: Fixed Deathwalk"
+ "
"
+ " - Fixed up deathwalk so it walks much better and is more accurate."
+ " - "
+ "5.3: Removed Beeps"
+ "
"
+ " - Removed annoying beeps that would cause Rsbot to go white screen and continuously beep."
+ " - "
+ "5.2: Poison Detection"
+ "
"
+ " - Now if poisoned, climbs up the stairs and waits for 3-4 minutes then climb back down."
+ " - "
+ "5.0: GLOBAL DEATHWALK"
+ "
"
+ " - Now can start the script anywhere in the world."
+ "
"
+ " - Deathwalk from anywhere in Runescape."
+ " " + "- " + "4.*: mehhh's Release Versions" + "
"
+ " - Now shows profit made."
+ "
"
+ " - Runs to spinner and banks a LOT better."
+ "
"
+ " - Editted so then that it withdraws in fifth bank slot."
+ "
"
+ " - Added a new spinner ID."
+ "" + "- " + "3.*: mehhh's Release Versions" + "
"
+ " - Recolored paint for more visibility."
+ "
"
+ " - Fixed not going upstairs when being attacked. (credits to alowaniak for combat detection)"
+ "
"
+ " - Fixed getting stuck on stairs, spinning room, and in bank."
+ "
"
+ " - Fixed running into the spinning room after opening the door."
+ "
"
+ " - Banks a LOT better."
+ "
"
+ " - Runs away from combat -- credits to alowaniak."
+ "" + "- " + "0.*: Beta Versions" + "
" +
"
" + "\n" + "";
}
public boolean onStart(String[] args) {
bankFail = 0;
proggy = true;
tries2 = 0;
startTime = System.currentTimeMillis();
stringsBanked = 0;
Bot.getEventManager().addListener(PaintListener.class, this);
Bot.getEventManager().addListener(ServerMessageListener.class, this);
return true;
}
public void logoutFor(int i) {}
public void onFinish() {
Bot.getEventManager().removeListener(PaintListener.class, this);
Bot.getEventManager().removeListener(ServerMessageListener.class, this);
}
public RSTile bankTile() {
return new RSTile(random(3208, 3209), random(3220, 3220));
}
public RSTile deathTile() {
return new RSTile(random(3214, 3215), random(3213, 3217));
}
public RSTile staircaseTile() {
return new RSTile(random(3205, 3207), random(3205, 3209));
}
public RSTile staircaseTile1() {
return new RSTile(random(3205, 3206), random(3209, 3209));
}
public RSTile ladderTile() {
return new RSTile(random(3208, 3208), random(9615, 9618));
}
public RSTile doorCloseTile() {
return new RSTile(random(3208, 3208), random(3212, 3212));
}
public boolean isInSpinningRoom() {
RSTile myLocation = getMyPlayer().getLocation();
int myX = myLocation.getX();
int myY = myLocation.getY();
if (myX >= 3208 && myX <= 3212 && myY >= 3211 && myY <= 3217
&& getPlane() == 1) {
return true;
}
return false;
}
public boolean isInChefRoom() {
RSTile myLocation = getMyPlayer().getLocation();
int myX = myLocation.getX();
int myY = myLocation.getY();
if (myX >= 3205 && myX <= 3212 && myY >= 3212 && myY <= 3217
&& getPlane() == 0) {
return true;
}
return false;
}
public boolean isInBasement() {
RSTile myLocation = getMyPlayer().getLocation();
int myX = myLocation.getX();
int myY = myLocation.getY();
if (myX >= 3208 && myX <= 3219 && myY >= 9615 && myY <= 9624
&& getPlane() == 0) {
return true;
}
return false;
}
public boolean isInBank() {
RSTile myLocation = getMyPlayer().getLocation();
int myX = myLocation.getX();
int myY = myLocation.getY();
if (myX >= 3207 && myX <= 3209 && myY >= 3215 && myY <= 3220
&& getPlane() == 2) {
return true;
}
return false;
}
public boolean isOutside1() {
RSTile myLocation = getMyPlayer().getLocation();
int myX = myLocation.getX();
int myY = myLocation.getY();
if (myX >= 3205 && myX <= 3206 && myY >= 3212 && myY <= 3223
&& getPlane() == 2) {
return true;
}
return false;
}
public boolean isOutside2() {
RSTile myLocation = getMyPlayer().getLocation();
int myX = myLocation.getX();
int myY = myLocation.getY();
if (myX >= 3209 && myX <= 3213 && myY >= 3223 && myY <= 3225
&& getPlane() == 2) {
return true;
}
return false;
}
public boolean isOutside3() {
RSTile myLocation = getMyPlayer().getLocation();
int myX = myLocation.getX();
int myY = myLocation.getY();
if (myX >= 3211 && myX <= 3213 && myY >= 3215 && myY <= 3222
&& getPlane() == 2) {
return true;
}
return false;
}
public boolean isOutside4() {
RSTile myLocation = getMyPlayer().getLocation();
int myX = myLocation.getX();
int myY = myLocation.getY();
if (myX >= 3205 && myX <= 3213 && myY >= 3212 && myY <= 3214
&& getPlane() == 2) {
return true;
}
return false;
}
public boolean isOutside5() {
RSTile myLocation = getMyPlayer().getLocation();
int myX = myLocation.getX();
int myY = myLocation.getY();
if (myX >= 3205 && myX <= 3207 && myY >= 3224 && myY <= 3229
&& getPlane() == 2) {
return true;
}
return false;
}
public RSTile spinningRoomTile() {
return new RSTile(random(3209, 3210), random(3213, 3213));
}
public RSTile outsideDoor() {
return new RSTile(random(3205, 3207), random(3208, 3216));
}
public boolean isDoorClosed() {
if (getPlane() == 1 && !isInSpinningRoom()) {
if (Calculations.canReach(spinningRoomTile(), true)) {
return false;
}
}
if (getPlane() == 1 && isInSpinningRoom()) {
if (Calculations.canReach(staircaseTile(), true)) {
return false;
}
}
return true;
}
public boolean isChefDoorClosed() {
if (getPlane() == 0 && !isInChefRoom()) {
if (Calculations.canReach(doorCloseTile(), true)) {
return false;
}
}
if (getPlane() == 0 && isInChefRoom()) {
if (Calculations.canReach(staircaseTile1(), true)) {
return false;
}
}
return true;
}
public boolean walkToTile(RSTile tile) {
if (walkPathMM2(generatePath(tile), 17)) {
return true;
}
return false;
}
public int flaxCount() {
return getInventoryCount(FLAX_ID);
}
public int bowstringCount() {
return getInventoryCount(BOW_STRING_ID);
}
public boolean isInArea(int maxX, int minY, int minX, int maxY) {
int x = getMyPlayer().getLocation().getX();
int y = getMyPlayer().getLocation().getY();
if (x >= minX && x <= maxX
&& y >= minY && y <= maxY) {
return true;
}
return false;
}
public int loop() {
if(!isLoggedIn()) {
return random(100, 200);
}
if (getEnergy() >= random(60, 100)) {
setRun(true);
wait(random(400, 500));
}
try {
if (getMyPlayer().isMoving()) {
wait(random(25,50));
return random(20, 25);
}
int height = getPlane();
if (!RSInterface.getInterface(SPINNING_INTERFACE_ID).isValid()) {
if (flaxCount() == 0) {
atInterface(SPINNING_INTERFACE_ID, 12);
} else if (!bank.getInterface().isValid()) {
if (getEnergy() >= random(60, 100)) {
setRun(true);
}
}
}
//credits to alowaniak
//thanks to alowaniak
if(getMyPlayer().isInCombat()) {
log("Avoiding combat...");
if(getPlane() == 1) {
if(canReach(STAIRCASE_TILE, true)) {
if(!tileOnScreen(new RSTile(STAIRCASE_TILE.getX() - 1, STAIRCASE_TILE.getY()))) {
walkTileMM(STAIRCASE_TILE);
} else {
atTile(STAIRCASE_TILE, "up");
}
} else {
openDoor(getObjectAt(DOOR_CLOSE_TILE));
log("Opening door to avoid combat...");
}
return random(300, 600);
} else if(getPlane() == 2) {
if(!tileOnScreen(STAIRCASE_TILE)) {
walkTileMM(STAIRCASE_TILE);
} else {
atTile(STAIRCASE_TILE, "down");
}
return random(300, 600);
}
}
//----------------------------------------
//----------------------------------------
if (height == 0) {
if (isInBasement()) {
if (!walkToTile(ladderTile())) {
wait(random(10000, 12000));
}
if (!atTile(LADDER, "up")) {
turnToTile(LADDER);
return random(9200, 9500);
}
}
}
if (isInChefRoom()) {
if(canReach(STAIRCASE_TILE2, true)) {
if(!tileOnScreen(new RSTile(STAIRCASE_TILE2.getX(), STAIRCASE_TILE2.getY() - 1))) {
walkTileMM(STAIRCASE_TILE2);
}
} else {
walkTileMM(new RSTile(3208, 3212));
wait(random(5000, 5200));
openDoor1(getObjectAt(DOOR_CLOSE_TILE1));
log("Opening door from chef room to stairs...");
wait(random(300, 500));
walkTileMM(STAIRCASE_TILE2);
wait(random(1000, 1200));
}
if (!atTile(STAIRCASE_TILE1, "up")) {
turnToTile(STAIRCASE_TILE1);
}
}
if (height == 0) {
if (distanceTo(new RSTile(3226, 3224)) >= 26) {
//thanks to alowaniak
//credits to alowaniak
if(isLoggedIn()) {
openTab(TAB_MAGIC);
wait(random(1200, 1500));
castSomeSpell(0);
wait(random(3000, 4000));
if(getMyPlayer().getAnimation() != -1) {
tries2 = 0;
return random(20000, 22000);
}
else if(tries2 <= 8) {
tries2 ++;
return random(1000, 3000);
}
log("Got lost and couldn't do home tele.");
log("Will stop script now.");
stopAllScripts();
return -1;
}
//----------------------------------------
//----------------------------------------
} else {
if (!atTile(STAIRCASE_TILE1, "up")) {
turnToTile(STAIRCASE_TILE1);
}
wait(random(10500, 10700));
if(!tileOnScreen(new RSTile(DEATH_TILE.getX(), DEATH_TILE.getY()))) {
walkTileMM(DEATH_TILE);
wait(random(300, 500));
}
wait(random(10500, 10700));
if(!tileOnScreen(new RSTile(DEATH_TILE1.getX(), DEATH_TILE1.getY()))) {
walkTileMM(DEATH_TILE1);
wait(random(300, 500));
}
wait(random(10500, 10700));
if (!atTile(STAIRCASE_TILE1, "up")) {
turnToTile(STAIRCASE_TILE1);
}
}
}
if (height == 1) {
if (distanceTo(new RSTile(3226, 3224)) >= 53) {
//thanks to alowaniak
//credits to alowaniak
if(isLoggedIn()) {
openTab(TAB_MAGIC);
wait(random(1200, 1500));
castSomeSpell(0);
wait(random(3000, 4000));
if(getMyPlayer().getAnimation() != -1) {
tries2 = 0;
return random(20000, 22000);
}
else if(tries2 <= 8) {
tries2 ++;
return random(1000, 3000);
}
log("Got lost and couldn't do home tele.");
log("Will stop script now.");
stopAllScripts();
return -1;
}
//----------------------------------------
//----------------------------------------
if (!atTile(STAIRCASE_TILE1, "up")) {
turnToTile(STAIRCASE_TILE1);
}
wait(random(10500, 10700));
if(!tileOnScreen(new RSTile(DEATH_TILE.getX(), DEATH_TILE.getY()))) {
walkTileMM(DEATH_TILE);
wait(random(300, 500));
}
wait(random(10500, 10700));
if(!tileOnScreen(new RSTile(DEATH_TILE1.getX(), DEATH_TILE1.getY()))) {
walkTileMM(DEATH_TILE1);
wait(random(300, 500));
}
wait(random(10500, 10700));
if (!atTile(STAIRCASE_TILE1, "up")) {
turnToTile(STAIRCASE_TILE1);
}
}
}
if (height == 2) {
if (distanceTo(new RSTile(3226, 3224)) >= 52) {
//thanks to alowaniak
//credits to alowaniak
if(isLoggedIn()) {
openTab(TAB_MAGIC);
wait(random(1200, 1500));
castSomeSpell(0);
wait(random(3000, 4000));
if(getMyPlayer().getAnimation() != -1) {
tries2 = 0;
return random(20000, 22000);
}
else if(tries2 <= 8) {
tries2 ++;
return random(1000, 3000);
}
log("Got lost and couldn't do home tele.");
log("Will stop script now.");
stopAllScripts();
return -1;
}
//----------------------------------------
//----------------------------------------
if (!atTile(STAIRCASE_TILE1, "up")) {
turnToTile(STAIRCASE_TILE1);
}
wait(random(10500, 10700));
if(!tileOnScreen(new RSTile(DEATH_TILE.getX(), DEATH_TILE.getY()))) {
walkTileMM(DEATH_TILE);
wait(random(300, 500));
}
wait(random(10500, 10700));
if(!tileOnScreen(new RSTile(DEATH_TILE1.getX(), DEATH_TILE1.getY()))) {
walkTileMM(DEATH_TILE1);
wait(random(300, 500));
}
wait(random(10500, 10700));
if (!atTile(STAIRCASE_TILE1, "up")) {
turnToTile(STAIRCASE_TILE1);
}
}
}
if (height == 3) {
if (distanceTo(new RSTile(3226, 3224)) >= 52) {
//thanks to alowaniak
//credits to alowaniak
if(isLoggedIn()) {
openTab(TAB_MAGIC);
wait(random(1200, 1500));
castSomeSpell(0);
wait(random(3000, 4000));
if(getMyPlayer().getAnimation() != -1) {
tries2 = 0;
return random(20000, 22000);
}
else if(tries2 <= 8) {
tries2 ++;
return random(1000, 3000);
}
log("Got lost and couldn't do home tele.");
log("Will stop script now.");
stopAllScripts();
return -1;
}
//----------------------------------------
//----------------------------------------
if (!atTile(STAIRCASE_TILE1, "up")) {
turnToTile(STAIRCASE_TILE1);
}
wait(random(10500, 10700));
if(!tileOnScreen(new RSTile(DEATH_TILE.getX(), DEATH_TILE.getY()))) {
walkTileMM(DEATH_TILE);
wait(random(300, 500));
}
wait(random(10500, 10700));
if(!tileOnScreen(new RSTile(DEATH_TILE1.getX(), DEATH_TILE1.getY()))) {
walkTileMM(DEATH_TILE1);
wait(random(300, 500));
}
wait(random(10500, 10700));
if (!atTile(STAIRCASE_TILE1, "up")) {
turnToTile(STAIRCASE_TILE1);
}
}
}
if (height == 1 && distanceTo(new RSTile(3226, 3224)) <= 52) {
if (flaxCount() > 0 || getMyPlayer().isInCombat()) {
if (!isInSpinningRoom()) {
if (isDoorClosed()) {
if (walkToTile(outsideDoor())) {
RSObject door = getObjectAt(DOOR_CLOSE_TILE);
if (door == null
|| door.getID() != DOOR_CLOSE_ID) {
return random(200, 300);
}
atDoor(door, "east", "Open");
return random(250, 300);
}
} else {
walkTileMM(new RSTile((3209 + random(0,1)), (3213 - random(0,1))));
}
} else {
for (int i = 0; i <= 10; i++) {
if (getMyPlayer().getAnimation() != -1) {
return random(150, 200);
} else {
wait(random(100, 150));
}
}
if (flaxCount() == 0) {
return random(150, 200);
}
if (RSInterface.getInterface(SPINNING_INTERFACE_ID)
.isValid()) {
atInterface(SPINNING_INTERFACE_ID,
BOW_STRING_CHILD_ID, "all");
return random(150, 200);
}
RSObject spinner = findObject(SPINNING_WHEEL_ID);
if (spinner == null) {
return random(150, 200);
}
if (!atObject(spinner, "Spin Spinning Wheel")) {
turnToTile(spinner.getLocation());
return random(50, 100);
}
return random(150, 200);
}
} else {
if (isDoorClosed()) {
RSObject door = getObjectAt(DOOR_CLOSE_TILE);
if (door == null || door.getID() != DOOR_CLOSE_ID) {
return random(200, 300);
}
atDoor(door, "east", "Open");
return random(250, 300);
}
if (!walkToTile(staircaseTile())) {
return random(100, 200);
}
if (!atTile(STAIRCASE_TILE, "up")) {
turnToTile(STAIRCASE_TILE);
}
}
}
if(height == 2 && distanceTo(new RSTile(3226, 3224)) <= 52) {
if (flaxCount() > 0) {
if (!walkToTile(staircaseTile())) {
return random(100, 200);
}
if (!atTile(STAIRCASE_TILE, "down")) {
turnToTile(STAIRCASE_TILE);
}
} else {
if (isInBank()) {
if (bank.getInterface().isValid()) {
int temp = bowstringCount();
if (bank.depositAllExcept(FLAX_ID)) {
stringsBanked += temp;
pause();
pause();
clickMouse(random(218, 238), random(95, 120), false);
pause();
if (!getTopText().contains("flax")) {
bankFail++;
if (bankFail >= 20) {
log("Banking failed. Possibly ran out of flax!");
wait(random(500, 1000));
bank.close();
wait(random(1050, 1200));
logout();
stopAllScripts();
return -1;
}
return random(350, 400);
}
if (atMenu("All")) {
bankFail = 0;
return random(650, 675);
}
}
}
if (!atTile(BOOTH_TILE, "Use-quickly")) {
return random(100, 200);
}
} else {
if (!isOutside1()) {
walkToTile(bankTile());
return random(100, 200);
}
if (!isOutside2()) {
walkToTile(bankTile());
return random(100, 200);
}
if (!isOutside3()) {
walkToTile(bankTile());
return random(100, 200);
}
if (!isOutside4()) {
walkToTile(bankTile());
return random(100, 200);
}
if (!isOutside5()) {
walkToTile(bankTile());
return random(100, 200);
}
walkToTile(bankTile());
return random(100, 200);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return random(575, 600);
}
//thanks
//to
//alowaniak
public void openDoor(RSObject door) {
walkTileMM(door.getLocation());
setCameraRotation(random(40, 141));
atDoor(door, "east", "Open");
}
//----------------------------------------
//----------------------------------------
//thanks
//to
//alowaniak
public void openDoor1(RSObject door) {
walkTileMM(door.getLocation());
setCameraRotation(random(40, 141));
atDoor(door, "south", "Open");
}
//----------------------------------------
//----------------------------------------
int tries2;
public boolean castSomeSpell(int spell) {
if (getCurrentTab() != TAB_MAGIC) {
openTab(TAB_MAGIC);
return false;
}
if(spell == 19)
spell = 60;
else if(spell == 61) {
spell = 63;
} else if(spell >= 30) {
spell--;
}
if(spell >= 64) {
return false;
}
if(!RSInterface.getInterface(192).isValid())
return false;
return atSpellInterface(spell, "cast");
}
//thanks
//to
//alowaniak
public boolean atSpellInterface(int spell, String actionContains) {
RSInterfaceChild i = RSInterface.getChildInterface(192, spell);
if (!i.isValid()) return false;
Rectangle pos = i.getArea();
if (pos.x == -1 || pos.y == -1 || pos.width == -1 || pos.height == -1) return false;
moveMouse((int) random(pos.getMinX(), pos.getMaxX()), (int) random(pos.getMinY(), pos.getMaxY()));
clickMouse(true);
return true;
}
//----------------------------------------
//----------------------------------------
int string = 190;
int flax = 90;
public void onRepaint(Graphics g) {
if (isLoggedIn() && proggy == true) {
long millis = System.currentTimeMillis() - startTime;
long seconds2 = millis / 1000;
long hours = millis / (1000 * 60 * 60);
millis -= hours * 1000 * 60 * 60;
long minutes = millis / (1000 * 60);
millis -= minutes * 1000 * 60;
long seconds = millis / 1000;
String hoursString = "";
String minutesString = "";
String secondsString = seconds + "";
String type = "seconds";
if (minutes > 0) {
minutesString = minutes + ":";
type = "minutes";
}
if (hours > 0) {
hoursString = hours + ":";
type = "hours";
}
if (minutesString.length() == 1) {
minutesString = "0" + minutesString;
}
if (hoursString.length() == 1) {
hoursString = "0" + hoursString;
}
if (secondsString.length() == 1) {
secondsString = "0" + secondsString;
}
int x = 18;
int y = 18;
g.setColor(BG);
g.fill3DRect(12, 23, 360, 123, true);
g.setColor(WHITE);
g.drawString( getName() + " v" + getVersion() + " by " + getAuthor(), x, y += 20);
g.drawString("Running for " + hoursString + minutesString + secondsString + " " + type + ".", x, y += 20);
g.drawString("Profit if flax is bought: " + ((stringsBanked * string) - (stringsBanked * flax)) + ".", x, y += 20);
g.drawString("Profit if flax is picked: " + (stringsBanked * string) + ".", x, y += 20);
g.drawString("Spun " + (stringsBanked + getInventoryCount(BOW_STRING_ID)) + " flax.", x, y += 20);
if (seconds2 != 0) {
g.drawString("Averaging " + (stringsBanked + getInventoryCount(BOW_STRING_ID)) * 3600 / seconds2 + " strings per hour.", x, y += 20);
}
}
}
public void serverMessageRecieved(ServerMessageEvent e) {
String message = e.getMessage().toLowerCase();
if (message.contains("You need to wait another ")
&& message.contains(" to cast this spell.")) {
int num = Integer.parseInt(message.split(" ")[5]);
logoutFor(num * 1000 * 60 * 60);
}
stringsBanked += getInventoryCount(BOW_STRING_ID);
if(message.contains("flax")) {
log("Sorry, we don't have any more have enough flax to spin. Trying again..");
}
if(message.contains("poisoned")) {
if(getPlane() == 1) {
if(canReach(STAIRCASE_TILE, true)) {
if(!tileOnScreen(new RSTile(STAIRCASE_TILE.getX() - 1, STAIRCASE_TILE.getY()))) {
walkTileMM(STAIRCASE_TILE);
} else {
atTile(STAIRCASE_TILE, "up");
}
} else {
openDoor(getObjectAt(DOOR_CLOSE_TILE));
log("Opening door to avoid combat...");
}
wait(random(3*60*1000,4*60*1000));
log("Poison wore off.");
} else if(getPlane() == 2) {
if(!tileOnScreen(STAIRCASE_TILE)) {
walkTileMM(STAIRCASE_TILE);
} else {
atTile(STAIRCASE_TILE, "down");
}
}
}
}
public int getAngleToCoordinates(int x2, int y2) {
int x1 = getMyPlayer().getLocation().getX();
int y1 = getMyPlayer().getLocation().getY();
int x = x1 - x2;
int y = y1 - y2;
double angle = Math.toDegrees(Math.atan2(x, y));
if (x == 0 && y > 0) {
angle = 180;
}
if (x < 0 && y == 0) {
angle = 90;
}
if (x == 0 && y < 0) {
angle = 0;
}
if (x < 0 && y == 0) {
angle = 270;
}
if (x < 0 && y > 0) {
angle += 270;
}
if (x > 0 && y > 0) {
angle += 90;
}
if (x < 0 && y < 0) {
angle = Math.abs(angle) - 180;
}
if (x > 0 && y < 0) {
angle = Math.abs(angle) + 270;
}
if (angle < 0) {
angle = 360 + angle;
}
if (angle >= 360) {
angle -= 360;
}
return (int) angle;
}
public void turnToTile(RSTile tile) {
int angle = getAngleToCoordinates(tile.getX(), tile.getY());
angle = angle + random(-20, 20);
if (angle < 0) {
angle = 360 + angle;
}
if (angle >= 360) {
angle -= 360;
}
setCameraRotation2(angle);
}
public void setMaxAltitude() {
Bot.getInputManager().pressKey((char) 38);
wait(random(500,1000));
Bot.getInputManager().releaseKey((char) 38);
}
public void setCameraRotation2(int degrees) {
// Made by aftermath. Was suggested into SVN and i just added it into
// here until somebody does the right thing
char left = 37;
char right = 39;
char whichDir = left;
int start = getCameraAngle();
if (start < 180) {
start += 360;
}
if (degrees < 180) {
degrees += 360;
}
if (degrees > start) {
if (degrees - 180 < start) {
whichDir = right;
}
} else if (start > degrees) {
if (start - 180 >= degrees) {
whichDir = right;
}
}
degrees %= 360;
Bot.getInputManager().pressKey(whichDir);
int timeWaited = 0;
while (getCameraAngle() > degrees + 5 || getCameraAngle() < degrees - 5) {
wait(10);
timeWaited += 10;
if (timeWaited > 500) {
int time = timeWaited - 500;
if (time == 0) {
Bot.getInputManager().pressKey(whichDir);
} else if (time % 40 == 0) {
Bot.getInputManager().pressKey(whichDir);
}
}
}
Bot.getInputManager().releaseKey(whichDir);
}
public RSTile[] generatePath(RSTile tile) {
return generatePath(tile.getX(), tile.getY());
}
public RSTile[] generatePath(int destinationX, int destinationY) { // Most
// credits
// go to
// aftermath...
// I
// asked
// for a
// theory
// and
// he
// gives
// me
// the
// whole
// method.
// ~Mike
int startX = getMyPlayer().getLocation().getX();
int startY = getMyPlayer().getLocation().getY();
double dx, dy;
ArrayList list = new ArrayList();
list.add(new RSTile(startX, startY));
while (Math.hypot(destinationY - startY, destinationX - startX) > 8) {
dx = destinationX - startX;
dy = destinationY - startY;
int gamble = random(14, 17);
while (Math.hypot(dx, dy) > gamble) {
dx *= .95;
dy *= .95;
}
startX += (int) dx;
startY += (int) dy;
list.add(new RSTile(startX, startY));
}
list.add(new RSTile(destinationX, destinationY));
return list.toArray(new RSTile[list.size()]);
}
public String getTopText() {
return getMenuItems().get(0).toLowerCase();
}
RSTile current2 = null;
public boolean walkPathMM2(RSTile[] path, int maxDist) {
try {
RSTile next = nextTile(path, maxDist);
if (next != null && !next.equals(current2)) {
walkTileMM(next);
current2 = next;
return false;
} else if (next != null && next.equals(current2)) {
return false;
}
} catch (Exception e) {
return false;
}
return true;
}
public RSTile nextTile2(RSTile[] path, int maxDist) {
RSTile cur = getMyPlayer().getLocation();
for (int i = path.length - 1; i >= 0; i--) {
if (distanceBetween(cur, path[i]) <= maxDist) {
return path[i];
}
}
return null;
}
}