Jump to content

Bot World RandomSolver


Recommended Posts

Posted (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 by Botre
  • Like 1
Posted

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);
	}
  • Like 1

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...