Jump to content
View in the app

A better way to browse. Learn more.

OSBot :: 2007 OSRS Botting

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Rooftop agility shell

Featured Replies

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;

import org.osbot.rs07.api.filter.Filter;
import org.osbot.rs07.api.map.Area;
import org.osbot.rs07.api.map.Position;
import org.osbot.rs07.api.model.Entity;
import org.osbot.rs07.api.model.GroundItem;
import org.osbot.rs07.api.model.NPC;
import org.osbot.rs07.api.model.RS2Object;
import org.osbot.rs07.api.ui.Skill;
import org.osbot.rs07.script.Script;
import org.osbot.rs07.script.ScriptManifest;

/**
 * BigBotsOnly - This script is ready to run, however- you should not.
 */

@ScriptManifest(author = "BigBotsOnly", info = "Completes selected Agility rooftop course.", name = "RooftopAgility", version = 1.0, logo = "url")
public class Main extends Script{

	private int maxSleep = 1297; //make this random
	private int minSleep = 489; //make this random
	private int idleCycle = 0;
	private int lapsCompleted = 0;
	private int obsticlesFailed = 0;
	private int currentObsticle = 0;
	private int markOfGrace = 0;
	
	private Area[] failedObsticle;
	
	private Area[] targetArea;

	private int[] objectIDS;
	
	private Position[] landingPosition;
	
	private String[] getInteractionLable;
	
	private Position startLocation;
	
	private String foodItem = "Trout"; //change this with GUI or manually
	
	@Override
	public void onStart() {
		log("Setting up..");
		skills.getExperienceTracker().start(Skill.AGILITY);
		this.startTime = System.currentTimeMillis();
		
		//edit this for GUI to change course
		log("Reading SeersVillage variables..");
		failedObsticle = SeersVillage.failedObsticle;
		targetArea = SeersVillage.targetArea;
		objectIDS = SeersVillage.objectIDS;
		landingPosition = SeersVillage.landingPosition;
		getInteractionLable = SeersVillage.getInteractionLable;
		startLocation = SeersVillage.startLocation;
		
		
		log("Setup complete, starting script..");
	}

	public Main(){

		this.font1 = new Font("Lao UI", 0, 13);
		this.color2 = new Color(255, 255, 255);
	}

	@Override
	public int onLoop() throws InterruptedException {
		if(myPlayer().isAnimating()){
			//setStatus("Running..");
			idleCycle = 0;
			return random(minSleep,  minSleep+random(maxSleep));
		}
		if(!myPlayer().isAnimating()){
			//we have come to a standstill
			if(idleCycle > 20)
			{
				log("Something has happened, terminating script for account safety.");
				this.stop(true);
				return 200;
			}

			if(idleCycle > 2 && !myPlayer().isAnimating()){
			//	log("Getting new action");
				
				if(myPlayer().getHealthPercent() < 50) {
					//check if player has food
					if(inventory.contains(foodItem)) {
						setStatus("Eating..");
						inventory.interact(foodItem, "Eat");
						return random(minSleep,  minSleep+random(maxSleep));
					} else {
						if(getSkills().getDynamic(Skill.HITPOINTS) < 8){
							log("We have ran out of food and have no hp left. Terminating script for account safety.");
							this.stop();
							return random(minSleep,  minSleep+random(maxSleep));
						}
						log("We have ran out of food, continuing till we have less than 8 hp.");
					}
				}
				
				currentObsticle = getCurrentStep();
				
				GroundItem item = getGroundItems().closest("Mark of Grace");
				if(getMap().canReach(item)) {
					setStatus("Picking Mark of Grace");
					if(item != null)
						if(item.interact("take")) {
							markOfGrace++;
						}
					new BotTimer(5000, 100) {
	        		    public boolean breakCondition() {
	        		        return item == null;
	        		    }
			 		}.sleep();
				}
				
				if(currentObsticle == -1) {
					//failed obsticle.
					obsticlesFailed++;
					setStatus("Walking to start");
					walking.walk(startLocation);
					//return random(minSleep,  minSleep+random(maxSleep));
				}
				if(currentObsticle == -2) {
					//unknown location
					log("Unknown location..");
					if(idleCycle > 20) {
						log("Something has happened, terminating script for account safety.");
						this.stop(true);
						return 200;
					}
					return random(minSleep,  minSleep+random(maxSleep));
				}
				if(currentObsticle == landingPosition.length-1) {
					//finished course
					lapsCompleted++;
					setStatus("Walking to start");
					walking.walk(startLocation);
					return 20+random(minSleep);
				}

				Entity nextObsticle = objects.closest(objectIDS[currentObsticle]);
				if(nextObsticle == null) {
					log("Can't find next obsticle.");
					return 500;
				}
				log("Current step: "+currentObsticle+ "Next obsticle: "+nextObsticle.getId());
				if(nextObsticle.interact(getInteractionLable[currentObsticle])) {
					setStatus("Performing "+getInteractionLable[currentObsticle]);
			 		new BotTimer(5000, 100) {
	        		    public boolean breakCondition() {
	        		        return landingPosition[currentObsticle].distance(myPlayer().getPosition()) <= 1;
	        		    }
			 		}.sleep();
					//return 10+random(maxSleep);
				} else {
					log("Can't click next obsticle.");
				}
				
				return random(minSleep, minSleep+random(maxSleep));
			}
			//log("idleCycle++ : "+idleCycle);
			idleCycle++;

		}
		return random(minSleep, minSleep+random(maxSleep));
	}

	private int getCurrentStep() {
		for(int i = 0; i < failedObsticle.length; i++) {
			if(failedObsticle[i].contains(myPlayer().getPosition())){
				// Player has failed an obsticle.. Resetting course.
				return -1;
			}
		}
		if(landingPosition[landingPosition.length-1].distance(myPlayer().getPosition()) <= 1) {
			return landingPosition.length-1;
		}
		//TODO load this into seersvillage class or load only on seers village.
		if(SeersVillage.inSpecialLocation(myPlayer())) {
			//this is the step that prolly will ban your account, fix it dawg
			return 4;
		}
		//end TODO
		for(int i = 0; i < landingPosition.length; i++) {
			if(landingPosition[i].distance(myPlayer().getPosition()) <= 1) {
				//log("In landing position..");
				return i;
			}
		}
		for(int i = 0; i < targetArea.length; i++) {
			targetArea[i].setPlane(myPlayer().getZ());
			if(targetArea[i].contains(myPlayer())){
				//log("In target area..");
				return i;
			}
		}
		return -2;
	}

	@Override
	public void onExit() {
		log("Reading debug..");
		log("Starting lvl: "+(skills.getStatic(Skill.AGILITY) - skills.getExperienceTracker().getGainedLevels(Skill.AGILITY))+", Level now: "+skills.getStatic(Skill.AGILITY)+", Total xp gained: "+skills.getExperienceTracker().getGainedXP(Skill.AGILITY));
		log("Time ran: "+skills.getExperienceTracker().getElapsed(Skill.AGILITY) +" Gained: "+skills.getExperienceTracker().getGainedLevels(Skill.AGILITY) + " levels.");
		log("Script has been terminated. ");
	}

	private final Font font1;
	private final Color color2;
	private long startTime;
	private final Image backpaint = getImage("https://i.imgur.com/wDpknA6.png");//https://i.imgur.com/DOQPPs5.png //https://i.imgur.com/S6wqJnK.png
	public boolean showRandomWarning(){
		return getClosestNPC() != null;
	}

	private Image getImage(String url) {
		try {
			return ImageIO.read(new URL(url));
		}
		catch (IOException e) {}
		return null;
	}

	private NPC getClosestNPC() {
		NPC closest = null;
		double lowest = Double.MAX_VALUE;

		for(NPC npc : getNpcs().getAll()) {
			final double distance = npc.getPosition().distance(myPosition());
			if(npc.isInteracting(myPlayer()) && distance < lowest) {
				closest = npc;
				lowest = distance;
			}
		}
		return closest;
	}

	private int getHourly(int amount) {
		return (int)((double)amount * 3600000.0 / (double)(System.currentTimeMillis() - startTime));
	}

	@Override
	public void onPaint(Graphics2D g) {
		millis = System.currentTimeMillis() - startTime;
		hours = millis / 3600000;
		millis -= hours * 3600000;
		minutes = millis / 60000;
		millis -= minutes * 60000;
		seconds = millis / 1000;
		
		//g.setFont(font3);
		//g.setColor(color3);

		g.drawImage(backpaint, 0, 229, null);

		if(showRandomWarning()){
		//	g.drawImage(warning, 1, 100, null);
		}

		g.setFont(font1);
		g.setColor(color2);

		int x = 15;
		int y = 250;
		g.drawString("Time: " + (hours < 10 ? "0"+hours : hours) + " : " +  (minutes < 10 ? "0"+minutes : minutes) + " : " + (seconds < 10 ? "0"+seconds : seconds), x, y); y+=13;
		g.drawString("Laps: "+lapsCompleted+", ("+getHourly(lapsCompleted)+"/h), Fails: "+obsticlesFailed+" ("+getHourly(obsticlesFailed)+"/h), Marks: "+markOfGrace+" ("+getHourly(markOfGrace)+"/h)", x, y); y+=14;
		g.drawString("Experience: "+getSkills().getExperienceTracker().getGainedXP(Skill.AGILITY)+", ("+(getSkills().getExperienceTracker().getGainedXPPerHour(Skill.AGILITY))+" /h)", x, y); y+=13;
		g.drawString("Status: "+getStatus()+"", x, y); y+=13;

	}
	private String getStatus() {
		return status;
	}
	private String status = "Loading..";
	private String setStatus(String status) {
		return this.status = status;
	}

	private long millis;
	private long hours;
	private long minutes;
	private long seconds;
}
import org.osbot.rs07.api.map.Area;
import org.osbot.rs07.api.map.Position;
import org.osbot.rs07.api.model.Entity;

public class SeersVillage {

	public static Position startLocation = new Position(2729, 3488, 0);
	
	public static Area[] failedObsticle = {
			new Area(2715, 3491, 2718, 3496), 
			new Area(2706, 3483, 2715, 3486), 
		};
	
	public static Area[] targetArea = {
		new Area(2727, 3487, 2731, 3489), 
		new Area(2722, 3490, 2730, 3497), 
		new Area(2705, 3487, 2715, 3496),  
		new Area(2709, 3476, 2716, 3482),  
		new Area(2700, 3470, 2716, 3474),
		new Area(2698, 3459, 2702, 3465),
	};
	
	public static int[] objectIDS = {
			11373, 11374, 11378, 11375, 11376, 11377
	}; 
	
	public static Position[] landingPosition = {
		new Position(1111, 1111, 1), //spoof
		new Position(2729, 3491, 3), //0
		new Position(2713, 3494, 2), //1
		new Position(2710, 3480, 2), //2
		new Position(2712, 3472, 3), //3
		new Position(2702, 3465, 2), //4
		new Position(2704, 3464, 0) //5
	};
	
	public static String[] getInteractionLable = {
			"Climb-up",
			"Jump",
			"Cross",
			"Jump",
			"Jump",
			"Jump"
	};
	
	public static boolean inSpecialLocation(Entity player) {
		return (player.getPosition().getX() == 2709 || player.getPosition().getX() == 2710 || player.getPosition().getX() == 2711 || player.getPosition().getX() == 2712 || player.getPosition().getX() == 2713 || player.getPosition().getX() == 2714) && player.getPosition().getY() == 3472;
	}
	
}

I think you're probably better off without botting agility. This script is just a basic shell that I made up quickly, unless you modify this script you're gonna have a bad time.

agility.png.f61bb43ab2e2d37642c8145849bcebd3.png

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.