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.

Ardougne Agility Course

Featured Replies

package main;

import org.osbot.rs07.api.map.Position;
import org.osbot.rs07.api.model.GroundItem;
import org.osbot.rs07.api.ui.Skill;
import org.osbot.rs07.script.Script;
import org.osbot.rs07.script.ScriptManifest;

import java.awt.*;
import java.text.NumberFormat;
import java.util.Locale;

@ScriptManifest(author = "Famers", info = "Ardougne Agility Course", name ="Ardougne Agility", version = 1.0, logo = "")
public class ArdyAgility extends Script {
    private enum State {
        WaitStart,
        Part1,
        Part2,
        Part3,
        Part4,
        Part5,
        Part6,
        Part7,
    }

    private static int PART_1 = 15608; // Wooden Beams
    private static int PART_2 = 15609; // Gap
    private static int PART_3 = 26635; // Plank
    private static int PART_4 = 15610; // Gap
    private static int PART_5 = 15611; // Gap
    private static int PART_6 = 28912; // Steep Roof
    private static int PART_7 = 15612; // Gap

    private static Position PART_1_POS = new Position(2671, 3299, 3);
    private static Position PART_2_POS = new Position(2665, 3318, 3);
    private static Position PART_3_POS = new Position(2656, 3318, 3);
    private static Position PART_4_POS = new Position(2653, 3314, 3);
    private static Position PART_5_POS = new Position(2651, 3309, 3);
    private static Position PART_6_POS = new Position(2656, 3297, 3);

    private static int MARK_OF_GRACE = 11849;

    private State state;
    private int hourExp, totalExp;
    public void onStart() throws InterruptedException {
        experienceTracker.start(Skill.AGILITY);
        state = State.WaitStart;

        while (myPosition().getZ() != 0) {
            sleep(1000);
        }
        state = State.Part1;
    }

    public void onPaint(Graphics2D g) {
        g.setFont(new Font("Consolas", Font.PLAIN, 12));
        g.drawString("State: " + state, 10, 290);
        totalExp = experienceTracker.getGainedXP(Skill.AGILITY);
        hourExp =  experienceTracker.getGainedXPPerHour(Skill.AGILITY);
        g.drawString("Agility Exp Gained: " + totalExp + " (" + NumberFormat.getNumberInstance(Locale.US).format(hourExp) + "xp/h)", 10, 320);
    }

    private int attempts = 0;
    @Override
    public int onLoop() {
        Position self = myPosition();
        if (self.getZ() == 0 && state != State.Part1) {
            state = State.Part1;
            return random(300, 400);
        }

        switch (state) {
            case Part1:
                if (positionEquals(self, PART_1_POS)) {
                    state = State.Part2;
                }
                if (self.getZ() == 0 || attempts > 10) {
                    objects.closest(PART_1).interact();
                    attempts = 0;
                    return random(5000, 5500);
                }
                break;
            case Part2:
                if (positionEquals(self, PART_2_POS)) {
                    state = State.Part3;
                }
                if (positionEquals(self, PART_1_POS) || attempts > 10) {
                    objects.closest(PART_2).interact();
                    attempts = 0;
                    return random(1200, 1500);
                }
                break;
            case Part3:
                if (positionEquals(self, PART_3_POS)) {
                    state = State.Part4;
                }
                if (positionEquals(self, PART_2_POS) || attempts > 10) {
                    objects.closest(PART_3).interact();
                    attempts = 0;
                    return random(1200, 1500);
                }
                break;
            case Part4:
                java.util.List<GroundItem> groundItems = getGroundItems()
                        .filter(groundItem -> groundItem.getId() == MARK_OF_GRACE);
                int itemCount = groundItems.stream()
                        .map(item -> item.getAmount())
                        .reduce(0, (a, b) -> a + b);
                if (itemCount >= 5) {
                    for (GroundItem item : groundItems) {
                        item.interact();
                    }
                }
                if (positionEquals(self, PART_4_POS)) {
                    state = State.Part5;
                }
                if (positionEquals(self, PART_3_POS) || attempts > 10) {
                    objects.closest(PART_4).interact();
                    attempts = 0;
                    return random(1200, 1500);
                }
                break;
            case Part5:
                if (positionEquals(self, PART_5_POS)) {
                    state = State.Part6;
                }
                if (positionEquals(self, PART_4_POS) || attempts > 10) {
                    objects.closest(PART_5).interact();
                    attempts = 0;
                    return random(1200, 1500);
                }
                break;
            case Part6:
                if (positionEquals(self, PART_6_POS)) {
                    state = State.Part7;
                }
                if (positionEquals(self, PART_5_POS) || attempts > 10) {
                    objects.closest(PART_6).interact();
                    attempts = 0;
                    return random(1200, 1500);
                }
                break;
            case Part7:
                if (positionEquals(self, PART_6_POS) || attempts > 10) {
                    objects.closest(PART_7).interact();
                    attempts = 0;
                    return random(1200, 1500);
                }
                break;
        }

        attempts++;
        return random(600, 700);
    }

    private static boolean positionEquals(Position a, Position b) {
        return a.getX() == b.getX() && a.getY() == b.getY() && a.getZ() == b.getZ();
    }
}

 

Very simple but it worked. Note I only used it after 96 agility so idk if it recovers after failing. (~57k/hr if you position camera such that it doesn't need to reposition)

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.