Rare scripts Posted July 18, 2019 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
Lecune Posted September 12, 2020 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..
UkBenH Posted October 17, 2020 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.