Botre Posted April 9, 2015 Posted April 9, 2015 (edited) A simple event to escape bot worlds. Code: package dependencies.experimental; import org.osbot.rs07.api.filter.Filter; import org.osbot.rs07.api.ui.World; import org.osbot.rs07.script.MethodProvider; import org.osbot.rs07.script.RandomEvent; import org.osbot.rs07.script.RandomSolver; import dependencies.imported.MilliTimer; /** * @author Bjorn Krols (Botre) * @version 0.0 * @since April 9, 2015 */ public class BotWorldSolver extends RandomSolver { /** * The filter used to hop to an appropriate world. */ private Filter<World> filter; /** * A timer that records the time elapsed since world detection. */ private MilliTimer timer; /** * The amount of time, in seconds, to wait before hopping. */ private int seconds; public BotWorldSolver() { super(RandomEvent.OTHER); } /** * Return true if and only if player is in a bot world. */ @Override public boolean shouldActivate() { if (filter == null) prepareFilter(); return inBotWorld(); } @Override public void onStart() throws InterruptedException { super.onStart(); // Create a new timer instance. timer = new MilliTimer(); // Set the time to wait before hopping is allowed (30 seconds - 20 minutes). seconds = MethodProvider.random.nextInt(1200000) + 30; } @SuppressWarnings("unchecked") @Override public int onLoop() throws InterruptedException { if (!inBotWorld()) stop(); if (timer.getElapsedSeconds() > seconds) getWorlds().hop(filter); return 1000; } @Override public void onExit() throws InterruptedException { super.onExit(); // Clear timer instance. timer = null; } public void prepareFilter() { // Fetch current world. World current = getWorlds().getWorld(getClient().getCurrentWorld()); // Is current world P2P? final Boolean members = Boolean.valueOf(current.isMembers()); // Is current world PVP? final Boolean pvp = Boolean.valueOf(current.isPvpWorld()); // Create filter based on previous results. filter = new Filter<World>() { @Override public boolean match(World world) { return world.isMembers() == members && world.isPvpWorld() == pvp && !world.isFull(); } }; } public boolean inBotWorld() { int myWorld = getClient().getCurrentWorld(); return myWorld == 385 || myWorld == 386; } } How to register: // Register BotWorldSolver. getBot().getRandomExecutor().registerRandoms(new BotWorldSolver()); Loaded 1 third-party random solvers! Edited April 9, 2015 by Botre 1
Joseph Posted April 9, 2015 Posted April 9, 2015 nice thank you for this . Not too sure about that 30 min timer delay lol
Botre Posted April 9, 2015 Author Posted April 9, 2015 nice thank you for this . Not too sure about that 30 min timer delay lol It's a random time between 30 seconds and twenty minutes, feel free to mod it to a more appropriate interval
Joseph Posted April 9, 2015 Posted April 9, 2015 It's a random time between 30 seconds and twenty minutes, feel free to mod it to a more appropriate interval certainly sir
Joseph Posted April 10, 2015 Posted April 10, 2015 for those that get error with the timer: change a few thing to this /** * A timer that records the time elapsed since world detection. */ private long timer; @Override public void onStart() throws InterruptedException { super.onStart(); // Create a new timer instance. this.timer = System.currentTimeMillis(); // Set the time to wait before hopping is allowed (30 seconds - 20 minutes). seconds = MethodProvider.random.nextInt(1200000) + 30; } @SuppressWarnings("unchecked") @Override public int onLoop() throws InterruptedException { if (!inBotWorld()) stop(); if (getTimerElapsedSeconds() > seconds) getWorlds().hop(filter); return 1000; } add on: public int getTimerElapsedSeconds() { return (int) (System.currentTimeMillis() - this.timer / 1000); } 1