Jump to content

1rubygrabber f2p (170k gp/h)


the1btcuser

Recommended Posts

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
  • Like 2
Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

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