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