Skip 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.

1rubygrabber f2p (170k gp/h)

Featured Replies

Spoiler
import org.osbot.rs07.api.map.Area;
import org.osbot.rs07.api.map.Position;
import org.osbot.rs07.api.model.*;
import org.osbot.rs07.api.ui.*;
import org.osbot.rs07.event.WalkingEvent;
import org.osbot.rs07.script.Script;
import org.osbot.rs07.script.ScriptManifest;
import org.osbot.rs07.utility.ConditionalSleep;


import java.awt.*;




@ScriptManifest(author = "the1btcuser", name = "1rubygrabber", info = "Free <3", version = 1, logo = "")
public final class Main extends Script {

    public String activity = "None";
    public String status = "None";

    @Override
    public void onExit() {
        log("Thank you for using 1rubygrabber.");
    }

    /* Converts ms to d:hr:s for paint */
    public final String formatTime(final long ms) {
        long s = ms / 1000, m = s / 60, h = m / 60, d = h / 24;
        s %= 60;
        m %= 60;
        h %= 24;

        return d > 0 ? String.format("%02d:%02d:%02d:%02d", d, h, m, s) :
                h > 0 ? String.format("%02d:%02d:%02d", h, m, s) :
                        String.format("%02d:%02d", m, s);
    }

    @Override
    public void onPaint(final Graphics2D g) {
        g.setColor(Color.BLACK);
        g.setColor(Color.WHITE);

        // Calculate the runtime
        final long runTime = System.currentTimeMillis() - startTime;
        g.drawString("Runtime: " + formatTime(runTime), 20, 295);
        g.drawString("Activity: " + activity, 20, 313);
        g.drawString("Status: " + status, 20, 331);
    }


    long startTime;

    @Override
    public final void onStart() {
        startTime = System.currentTimeMillis();
    }

    private void hopToRandomWorld() throws InterruptedException {
        // Array of F2P world IDs
        int[] f2pWorlds = {
                308, 326, 335, 371, 379, 380, 382, 383, 384, 394, 397, 398, 399, 417, 418, 430, 431, 433, 434, 435,
                436, 437, 451, 452, 453, 454, 455, 456, 475,
                476, 483, 497, 498, 499, 500, 501, 544, 545, 546, 547, 552, 553, 554, 555,
                575
        };

        int randomWorld = f2pWorlds[(int) (Math.random() * f2pWorlds.length)];

        getWorlds().hop(randomWorld);
        log("-----HOPPED-----------------------------");
        sleep(random(0));
    }

    @Override
    public final int onLoop() throws InterruptedException {
            activity="Ruby";
            Position grabb = new Position(3195, 9822, 0);
            Position rubypos = new Position(3196, 9822, 0);
            Position door1 = new Position(3192, 9824, 0);
            Position door2 = new Position(3191, 9825, 0);
            Position bank = new Position(3182, 3438, 0);
            Area room = new Area(
                    new int[][]{
                            { 3186, 9825 },
                            { 3186, 9818 },
                            { 3197, 9818 },
                            { 3197, 9825 },
                            { 3192, 9824 }
                    }
            );
            int[] emoteClickOrder = {18, 1, 8, 9, 6, 16, 14, 0, 4, 12, 17, 5, 2, 18, 15, 10, 3};

            if (!getInventory().isFull()) {
                if (room.contains(myPlayer())){
                    status="Grabbing ruby rings";
                    getWalking().webWalk(grabb);
                    GroundItem ruby = getGroundItems().closest(b -> b.getPosition().equals(rubypos) && b.getName().equalsIgnoreCase("Ruby ring"));
                    if (ruby != null && ruby.exists()) {
                        if (ruby.interact("Take")) {
                            log("Picked up ruby at position: " + rubypos);

                            new ConditionalSleep(100) {
                                @Override
                                public boolean condition() throws InterruptedException {
                                    return !ruby.exists();
                                }
                            }.sleep();
                        }
                    } else {
                        log("No ruby found at position: " + rubypos);
                        hopToRandomWorld();
                    }
                } else {
                    status="Going to ruby room";
                    getWalking().webWalk(door2);
                    WalkingEvent walkToRock2 = new WalkingEvent(door2);
                    walkToRock2.setMinDistanceThreshold(0);
                    execute(walkToRock2);

                    getTabs().open(Tab.EMOTES);
                    sleep(500);
                    for (int index : emoteClickOrder) {
                        getWidgets().get(216, 2, index).hover();
                        getMouse().click(false);
                        sleep(50);
                    }
                    sleep(1000);
                }
            } else {

                if (room.contains(myPlayer())){
                    status="Leaving ruby rings";
                    getWalking().webWalk(door1);
                    WalkingEvent walkToRock = new WalkingEvent(door1);
                    walkToRock.setMinDistanceThreshold(0);
                    execute(walkToRock);


                    getTabs().open(Tab.EMOTES);
                    sleep(500);

                    for (int index : emoteClickOrder) {
                        getWidgets().get(216, 2, index).hover();
                        getMouse().click(false);
                        sleep(50);
                    }
                    sleep(1000);
                } else {
                    status="Banking";
                    getWalking().webWalk(bank);

                    if (getBank().isOpen() || getBank().open()) {
                        getBank().depositAll();
                        sleep(500);
                        getBank().close();
                    }
                }

            }


        return random(50, 500);
    }

}

 

Grabs ruby rings at West Varrock bank.

Requires completing this: https://oldschool.runescape.wiki/w/Robes_of_Ruin 

 

Download:

https://www.mediafire.com/file/uuy2uo6hjdfd34r/1rubygrabber.jar/file

https://mega.nz/file/YAMigLyI#DzkXfM1F9UrZQx0zFA7SBDlUg-8ijIUNai1Jo39g9As

https://file.io/L5I83VshATNe

https://filebin.net/j4r28o6fbkogf73c

https://safenote.co/r/66d36af4a63bd7@22746948

 

Made it in a rush with chatgpt.

Edited by the1btcuser

  • the1btcuser changed the title to 1rubygrabber f2p (170k gp/h)

Wow, I didn't even know this was a thing in the game. 

Nice work!

If you are looking for potential improvements, I'd consider adding some logic to check that the emote succeeded by checking the players animation state continuously, if you can be bothered, you could even check the animation IDs to ensure that they did play in the right order too

Also conditional sleeping until the emote is finished or varying the time between emotes

haha wow had no clue this was a thing, thanks for sharing.

  • 1 month later...

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

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.