Botre Posted April 9, 2015 Share 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 Quote Link to comment Share on other sites More sharing options...
Joseph Posted April 9, 2015 Share Posted April 9, 2015 nice thank you for this . Not too sure about that 30 min timer delay lol Quote Link to comment Share on other sites More sharing options...
Botre Posted April 9, 2015 Author Share 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 Quote Link to comment Share on other sites More sharing options...
Joseph Posted April 9, 2015 Share 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 Quote Link to comment Share on other sites More sharing options...
Joseph Posted April 10, 2015 Share 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 Quote Link to comment Share on other sites More sharing options...