All pastes #439232 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-04-14 02:41 UTC
rendered paste body
/*
 *	Kitty Flax Stringer
 *  (kittyFlaxStringer.java)
 *
 *   Start at bank, with flax in first slot.
 *
 *  Credits:
 *  kr0n1k - Borrowed BankBooth class and used as template
 *     for spiralStaircase and closedDoor, even though you got it from ruler. ;)
 *
 *  Copyright © 2007 Michael West
 */


import impsoft.nexus.bots.color.constants.*;
import impsoft.nexus.bots.color.methods.*;
import impsoft.nexus.bots.color.scriptobjects.*;
import impsoft.nexus.bots.reflection.scriptobjects.walking.*;
import impsoft.nexus.bots.color.listeners.ChatListener;
import java.awt.Rectangle;


public class kittyFlaxStringer extends ColorScript implements ChatListener{
	public final static double version = 1.0;
	public String[] commands = new String[] { "Spin 100 flax", "Spin 250 Flax", "Spin 500 Flax", "Use arguments box" };
	public String author = "T3h Ub3r K1tten";
	public String description = "Spins flax at Lumbridge";

	private kittyBankBooth bank;
	private spiralStaircase stairs;
	private closedDoor door;
	private spinningWheel wheel;
	private flaxCounter flaxLeft;

	private boolean noFlax = false;
	private boolean debug = false;

	private void debugLog(String logWhat) {if (debug) log("DEBUG: " + logWhat);}
	private void debugLog(String name, String logWhat) {if (debug) log("DEBUG (" + name + "): " + logWhat);}

	private void progressReport() {
		log("******** kittyFlaxStringer ********");
		log("******* By: T3h ub3r k1tten *******");
		log("*** Runs     : " + flaxLeft.runsDone());
		log("*** Flax spun: " + flaxLeft.numberSpun());
		log("*** Fights   : " + fights);
		log("***********************************");
	}

	private String concArray(String[] theArray) {
		StringBuffer buf = new StringBuffer();
		for (String value: theArray) {
			buf.append( value);
		}
		return buf.toString();
	}

	private short[][][] xBmp = BitmapFromString(9, 13, "z78DA33753135313137258B744302C48863CA1A80017E715C7A31D593A78B783FE2B705BF5DC4DB426A3820BB8A16214F497CE10A31624292181200BB5DA1F2");

	public void chat(String message) {
		if (message.contains("out of flax")) noFlax = true;
		if (message.contains("poisoned")){
			log("You've been poisoned by the strange plant!");
			progressReport();
		}
	}

	private int bsSpun() throws InterruptedException{
		int i = 0;
		while(true){
			i++;
			if (i==28) break;
			hoverMouseOverInventoryIndex(i);
			if (getTopText().contains("flax")) return 28-i;
			sleep(500);
		}
		return 0;
	}

	public boolean doStart(String cmd, String[] args) throws InterruptedException, IndexOutOfBoundsException {
		debugLog("doStart(" + cmd + "," + concArray(args) + ");");
		Integer a = 0;
		if (cmd.contains("arguments")) a =Integer.parseInt( concArray(args));
		if (cmd.contains("100")) a = 100;
		if (cmd.contains("250")) a = 250;
		if (cmd.contains("500")) a = 500;
		debugLog("doStart", "a=" + a.toString());
		if (a==0) return false;
		flaxLeft = new flaxCounter(a);
		bank = new kittyBankBooth(this);
		wheel = new spinningWheel(this);
		stairs = new spiralStaircase(this);
		door = new closedDoor(this);
		return true;
	}

	private AryanTile stairsTile = new AryanTile(3205,3209, this);
	private AryanTile wheelTile1 = new AryanTile(3205,3209, this);
	private AryanTile wheelTile2 = new AryanTile(3209,3213, this);
	private AryanTile bankTile = new AryanTile(3208,3220,this);

	private void walkToSpinningWheel() throws InterruptedException, SpinningWheelNotFoundException{
		wheelTile1.walkTo();
		door.open();
		wheelTile2.walkTo();
	}

	private int fights = 0;

    public boolean inFight() throws InterruptedException {
    	Rectangle HitBox = new Rectangle(210, 110, 300, 175);
		XY GreenHealthBar = findXY(getColorArray2d(), new RGB(0, 255, 0), HitBox);

		if(GreenHealthBar != null) {
			fights++;
			log("Found fight! Finishing spinning prematurely.");
			return true;
		} else {
			return false;
		}
    }

    private void spin() throws InterruptedException, SpinningWheelNotFoundException, SpinningMenuException {
    	wheel.spinMenu();
		sleep(500);
		XY xXY = FindBitmap(xBmp);
		mouseMove(xXY);
		sleep(200);
		mouseClickLeft(xXY);
		sleep(1500);
		SendText("2");
		sleep(500);
		SendText("8");
		sleep(500);
		SendKey(10);
		sleep(1000);
    }

	@Override
	public void script() throws InterruptedException {
		try {
			int i = 0;
			int j = 0;
			debugLog("script",this.getClass().getName() + " v" + Double.toString(version) + " by " + author);
			log(this.getClass().getName() + " v" + Double.toString(version) + " by " + author);
			sleep(2000);
			if (!isLoggedIn()) {
				while(!isLoggedIn()) {
					debugLog("script","Logged out");
					log("Logged Out...");
					sleep(5000);
				}
			}

			while (flaxLeft.runsLeft() > 0) {
				setRun(true);
				setTab(3);
				debugLog("script", "bank.bank();");
				bank.bank();
				sleep(500);
				debugLog("script", "stairsTile.walkTo();");
				stairsTile.walkTo();
				sleep(500);
				debugLog("script", "stairs.climb(false);");
				stairs.climb(false);
				sleep(3000);
				debugLog("script", "walkToSpinningWheel();");
				walkToSpinningWheel();
				sleep(500);
				door.open();
				sleep(500);
				debugLog("script", "spin();");
				spin();
				while(true && !noFlax) {
					if (inFight()) j++;
					if (j == 3) {
						fights++;
						break;
					}
					i++;
					if (i == 6) spin();
					sleep(10000);
					if (i >= 10) break;
				}
				debugLog("script","stairsTile.walkTo();");
				stairsTile.walkTo();
				sleep(1000);
				debugLog("script", "stairs.climb();");
				stairs.climb(true);
				sleep(1000);
				debugLog("script","walkToBank();");
				bankTile.walkTo();
				flaxLeft.banked(bsSpun());
				progressReport();
			}
		} catch (StairsNotFoundException ex) {
			log("Spiral staircase not found!");
		} catch (IndexOutOfBoundsException ex) {
			log("Args did not contain a valid number for how many flax to spin!");
		} catch (BankNotFoundException ex) {
			log("Bank not found! Start at the bank!");
		} catch (InterruptedException ex) {
			log("Script terminating due to interrupt by iBot");
		} catch (SpinningWheelNotFoundException ex) {
			log("Spinning wheel not found!");
		} catch (BankWithdrawalErrorException ex) {
			log("Failed withdrawing flax!");
			log("Put flax in first bank slot!");
		} catch (SpinningMenuException ex) {
			log ("Failed to select menu for spinning flax");
		} catch (NullPointerException ex) {
			log ("Null pointer exception!");
		} finally {
			progressReport();
		}
	}
}

class spinningWheel extends RGBCluster {

	public spinningWheel(GameScreenMethods methods) {
		super(new RGB[] { new RGB(222, 217, 217), new RGB(127, 86, 13), new RGB(95, 63, 8)  },methods);
	}

	public  void open() throws InterruptedException, SpinningWheelNotFoundException{
		int i = 0;
		while(true) {
			try {
				gatherNewPoints(15);
				sortPointsByDistanceToXY(new XY((int) Areas.GAME.getCenterX(),(int) Areas.GAME.getCenterY()));
				if (!doTopTextAndMenu("Spin", "Spin")) {
					i++;
					if (i >= 5) throw new SpinningWheelNotFoundException();
				}	else {
					break;
				}
			} catch (NullPointerException ex){
				throw new SpinningWheelNotFoundException();
			}
		}
	}


	@SuppressWarnings("static-access")
	public void spinMenu() throws InterruptedException, SpinningWheelNotFoundException, SpinningMenuException {
		open();
		theScript.sleep(2000);
		theScript.mouseMove(new Rectangle(249,103,7,7));
		theScript.sleep(250 + theScript.random(25,300));
		theScript.mouseClickRight(theScript.currentMouseX(),theScript.currentMouseY());
		theScript.sleep(1000);
	}
}

class closedDoor extends RGBCluster {

	public closedDoor(GameScreenMethods methods) {
		super(new RGB[] { new RGB(201, 75, 51), new RGB(114, 110, 37), new RGB(80, 48, 37)  },
				methods);
	}

	public boolean open() throws InterruptedException {
		int i = 0;
		while (true) {
			gatherNewPoints(15);
			sortPointsByDistanceToXY(new XY((int) Areas.GAME.getCenterX(),(int) Areas.GAME.getCenterY()));
			if (!doTopTextAndMenu("Open Door", "Open")) {
				i++;
				if (i >=3) {
					return false;
				}
			} else {
				return true;
			}
		}
	}

}

class spiralStaircase extends RGBCluster {

	public spiralStaircase(GameScreenMethods methods) {
		super(new RGB[] { new RGB(80, 54, 8), new RGB(80, 80, 76) },
				methods);
	}

	public void climb(boolean up) throws InterruptedException, StairsNotFoundException {
		int i = 0;
		boolean exit = false;
		String find1;
		String find2;
		if (up) {
			find1 = "Climb";
			find2 = "Climb-up";
		} else {
			find1 = "Climb";
			find2 = "Climb-down";
		}
		while (!exit) {
			gatherNewPoints(5*i);
			sortPointsByDistanceToXY(new XY((int) Areas.GAME.getCenterX(),(int) Areas.GAME.getCenterY()));
			if (!doTopTextAndMenu(find1, find2)) {
				i++;
				if (i >= 5) { throw new StairsNotFoundException();}
			} else {
				exit = true;
				break;
			}
		}
	}

}

class kittyBankBooth extends RGBCluster {
	public kittyBankBooth(GameScreenMethods methods) {
		super(new RGB[] { new RGB(90, 66, 8), new RGB(137, 116, 77),new RGB(176, 168, 144) }, methods);
	}

	public void fixBank() throws InterruptedException{
		theScript.mouseMove(new Rectangle(472,82,4,4));
		theScript.sleep(250);
		theScript.mouseClickLeft(theScript.currentMouseX(), theScript.currentMouseY());
	}

	@SuppressWarnings({ "static-access", "deprecation" })
	public void bank() throws InterruptedException, BankNotFoundException, BankWithdrawalErrorException {
		Timer theJig = new Timer(30000);
		int i = 0;
		boolean j = false;
		boolean dontExit = true;
		while (!theJig.isUp() && dontExit) {
			while (true) {
				gatherNewPoints(10);
				if (doTopTextAndMenu("Bank", "quickly")){
					j = true;
					break;
				}
				i++;
				if (i >= 5) throw new BankNotFoundException();
			}
			if (j) {
				fixBank();
				theScript.sleep(2000);
				theScript.doActionAtInventory(new String[] { "Flax" },"All", 28);
				theScript.sleep(2500);
				theScript.mouseMove(new Rectangle(89,72,10,10));
				theScript.sleep(250 + theScript.random(25,3000));
				theScript.mouseClickRight(theScript.currentMouseX(),theScript.currentMouseY());
				theScript.sleep(2000);
				Menu menu = theScript.getMenu(Areas.GAME, 2000);
				if (menu != null) {
					if (menu.selectContains("Withdraw All Flax")) {
					} else {
						menu.exit();
						throw new BankWithdrawalErrorException("Could not withdraw flax");
					}
				} else {
					throw new BankWithdrawalErrorException();
				}
				theScript.mouseMove(new Rectangle(478,36,5,5));
				theScript.sleep(250 + theScript.random(25,300));
				theScript.mouseClickLeft(theScript.currentMouseX(),theScript.currentMouseY());
				theScript.sleep(2000);
				dontExit = false;
			} else {
				throw new BankNotFoundException();
			}
		}
	}
}

class flaxCounter {
	private int flax = 0;
	private int runs = 0;
	private int flaxSpun = 0;
	public flaxCounter(int start) {
		flax = start;
	}

	public int numberSpun() {
		return flaxSpun;
	}

	public int runsDone() {
		return runs;
	}

	public void banked(int i) {
		runs++;
		if (flax <= i) {
			flax = 0;
		} else {
			flax = flax - i;
			flaxSpun = flaxSpun + i;
		}
	}

	public int runsLeft() {
		return flax / 28;
	}
}

class SpinningMenuException extends Exception {
	private static final long serialVersionUID = -2919554898916621091L;
	SpinningMenuException() {}
	SpinningMenuException(String msg) {super(msg);}
}
class SpinningWheelNotFoundException extends Exception {
	private static final long serialVersionUID = -7345560108795323342L;
	SpinningWheelNotFoundException() {}
	SpinningWheelNotFoundException(String msg) {super(msg);}
}
class StairsNotFoundException extends Exception {
	private static final long serialVersionUID = 5040645221733848390L;
	StairsNotFoundException() {}
	StairsNotFoundException(String msg) {super(msg);}
}
class BankNotFoundException extends Exception {
	private static final long serialVersionUID = 6065024886620443334L;
	BankNotFoundException() {}
	BankNotFoundException(String msg) {super(msg);}
}
class BankWithdrawalErrorException extends Exception {
	private static final long serialVersionUID = 6320222594769892684L;
	BankWithdrawalErrorException() {}
	BankWithdrawalErrorException(String msg) {super(msg);}
}