Rare scripts Posted July 18, 2019 Share Posted July 18, 2019 (edited) Wrote this quickly in 15min, hope somebody can learn something from it .jar file is at end of topic. -Rare import java.awt.Color; import java.awt.Graphics2D; import java.util.ArrayList; import java.util.List; import java.util.function.BooleanSupplier; import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.map.Position; import org.osbot.rs07.api.model.GroundItem; import org.osbot.rs07.api.ui.Message; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; @ScriptManifest(author = "Rare Scripts", name = "Plank Looter", info = "Loot planks at Barbarian Outpost", version = 1, logo = "") public final class PlankLooter extends Script { String currentState; public final Position bankTile = new Position(2536, 3572, 0); public final Position plankTile = new Position(2553, 3575, 0); @Override public final void onStart() { currentState = "Starting script..."; } public void hopWorld() throws InterruptedException { int oldWorld = getWorlds().getCurrentWorld(); if (getWorlds().hopToP2PWorld()) { Sleep.sleepUntil(() -> getWorlds().getCurrentWorld() != oldWorld && getClient().isLoggedIn(), 7000); } } public void handleBank() throws InterruptedException { if (getBank().getDepositBox().open()) { Sleep.sleepUntil(() -> getBank().getDepositBox().isOpen(), 9000); if (getBank().getDepositBox().isOpen()) { getBank().getDepositBox().depositAll(); if (getBank().getDepositBox().close()) { Sleep.sleepUntil(() -> !getBank().getDepositBox().isOpen(), 9000); } } } } public boolean findPlanks() { GroundItem i = getGroundItems().closest("Plank"); return i != null && map.canReach(i) && map.distance(i) <= 15; } public void lootPlanks() { GroundItem i = getGroundItems().closest("Plank"); if (i != null && map.canReach(i) && map.distance(i) <= 15) { if (i.interact("Take")) { Sleep.sleepUntil(() -> !i.exists() || i == null || getInventory().isFull(), 9000); } } } @Override public final int onLoop() throws InterruptedException { if (getInventory().isFull()) { if (bankTile.distance(myPlayer().getPosition()) <= 2) { currentState = "Banking"; handleBank(); } else { currentState = "Running to Bank"; getWalking().webWalk(bankTile); } } else { if (plankTile.distance(myPlayer().getPosition()) <= 7) { if (findPlanks()) { currentState = "Looting Planks"; lootPlanks(); } else { currentState = "No Planks, hop world"; hopWorld(); } } else { currentState = "Running to Planks"; getWalking().webWalk(plankTile); } } return random(50, 500); } @Override public final void onExit() { log("Script terminated! :)"); } @Override public final void onMessage(final Message message) { // log("New msg: " + message.getMessage()); } @Override public void onPaint(final Graphics2D g) { g.drawString("Rare Plank Looter", 12, 130); g.drawString("State: " + currentState, 12, 150); } } Sleep class (Special thanks to Explv): import java.util.function.BooleanSupplier; import org.osbot.rs07.utility.ConditionalSleep; //Thanks to Explv: class Sleep extends ConditionalSleep { private final BooleanSupplier condition; public Sleep(final BooleanSupplier condition, final int timeout) { super(timeout); this.condition = condition; } @Override public final boolean condition() throws InterruptedException { return condition.getAsBoolean(); } public static boolean sleepUntil(final BooleanSupplier condition, final int timeout) { return new Sleep(condition, timeout).sleep(); } } PlankLooter.jar Edited July 18, 2019 by Rare scripts 2 Quote Link to comment Share on other sites More sharing options...
Lecune Posted September 12, 2020 Share Posted September 12, 2020 hello i kinda wrote whole script over so i can learn from it but my problem is now that it doesnt run to the bank but the currentState says it is at that state this is what i got: if (getInventory().isFull()) { if (bankTile.distance(myPlayer().getPosition()) <= 2) { currentState = "Banking"; hb(); } else { currentState = "Running to Bank"; getWalking().webWalk(bankTile); } public void hb() throws InterruptedException { if (getBank().getDepositBox().open()) { Sleep.sleepUntil(() -> getBank().getDepositBox().isOpen(), 9000); if (getBank().getDepositBox().isOpen()) { getBank().getDepositBox().depositAll(); if (getBank().getDepositBox().close()) { Sleep.sleepUntil(() -> !getBank().getDepositBox().isOpen(), 8000); } } } } its the Deposit box at BA.. Quote Link to comment Share on other sites More sharing options...
UkBenH Posted October 17, 2020 Share Posted October 17, 2020 On 9/12/2020 at 6:04 AM, Lecune said: hello i kinda wrote whole script over so i can learn from it but my problem is now that it doesnt run to the bank but the currentState says it is at that state this is what i got: if (getInventory().isFull()) { if (bankTile.distance(myPlayer().getPosition()) <= 2) { currentState = "Banking"; hb(); } else { currentState = "Running to Bank"; getWalking().webWalk(bankTile); } public void hb() throws InterruptedException { if (getBank().getDepositBox().open()) { Sleep.sleepUntil(() -> getBank().getDepositBox().isOpen(), 9000); if (getBank().getDepositBox().isOpen()) { getBank().getDepositBox().depositAll(); if (getBank().getDepositBox().close()) { Sleep.sleepUntil(() -> !getBank().getDepositBox().isOpen(), 8000); } } } } its the Deposit box at BA.. I ended up changing the banking part to this: public void handleBank() throws InterruptedException { if (!getBank().isOpen()){ //If the bank is not open getBank().open(); //Opens bank chests, booths, etc. if (getBank().isOpen()) { getBank().depositAll(); if (getBank().close()) { Sleep.sleepUntil(() -> !getBank().isOpen(), 4000); } } } } hope that helps you. Quote Link to comment Share on other sites More sharing options...