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!