Jump to content

Trying to learn how to work with GE


heervangrijsburg

Recommended Posts

Spoiler

private void withdrawCoinsAndLogs() throws InterruptedException {
        while (!inventory.contains(995) || !inventory.contains(1511)) {
            if (bank.isOpen()) {
                bank.withdrawAll("Logs");
                new ConditionalSleep(5000) {
                    @Override
                    public boolean condition() {
                        return inventory.contains("Logs");
                    }
                }.sleep();
                bank.withdrawAll(995);
                new ConditionalSleep(5000) {
                    @Override
                    public boolean condition() {
                        return inventory.contains(995);
                    }
                }.sleep();
            } else {
                bank.open();
                new ConditionalSleep(5000) {
                    @Override
                    public boolean condition() {
                        return bank.isOpen();
                    }
                }.sleep();
            }
        }
    }

    public void sellLogs() throws InterruptedException {
        while (inventory.contains(1511)) {
            if (grandExchange.isOpen()) {
                grandExchange.sellItem(1511, 1, Math.toIntExact(inventory.getAmount(1511)));
                while (grandExchange.getAmountRemaining(GrandExchange.Box.BOX_1) != 0) {
                    new ConditionalSleep(5000) {
                        @Override
                        public boolean condition() {
                            return grandExchange.getAmountRemaining(GrandExchange.Box.BOX_1) == 0;
                        }
                    }.sleep();
                }
                grandExchange.collect();
            } else {
                NPC grandExchangClerk = npcs.closest(2148);
                grandExchangClerk.interact("Exchange");
                new ConditionalSleep(5000) {
                    @Override
                    public boolean condition() {
                        return grandExchange.isOpen();
                    }
                }.sleep();
            }
        }
    }

    public void buyaxe() throws InterruptedException {
        while (!inventory.contains(axe.axeToUseID())) {
            if (grandExchange.isOpen()) {
                grandExchange.buyItem(axe.axeToUseID(), axe.axeToUseName(), Math.toIntExact(inventory.getAmount(995)), 1);
                while (grandExchange.getAmountRemaining(GrandExchange.Box.BOX_1) != 0) {
                    new ConditionalSleep(5000) {
                        @Override
                        public boolean condition() {
                            return grandExchange.getAmountRemaining(GrandExchange.Box.BOX_1) == 0;
                        }
                    }.sleep();
                }
                grandExchange.collect();
            } else {
                NPC grandExchangClerk = npcs.closest(2148);
                grandExchangClerk.interact("Exchange");
                new ConditionalSleep(5000) {
                    @Override
                    public boolean condition() {
                        return grandExchange.isOpen();
                    }
                }.sleep();
            }
        }
    }

    @Override
    public int onLoop() throws InterruptedException {
        if (grandexchange_Area.contains(myPlayer())) {
            withdrawCoinsAndLogs();
            if (Math.toIntExact(inventory.getAmount(995)) >= 850) {
                buyaxe();
            } else {
                sellLogs();
            }
        } else {
            getWalking().webWalk(grandexchange_Area);
            new ConditionalSleep(5000) {
                @Override
                public boolean condition() {
                    return grandexchange_Area.contains(myPlayer());
                }
            }.sleep();
        }
        return 600;
    }
}

 

As the title says, I try to learn how to work with the GE. What I'm trying to do with this bot is that it gets coins and logs from the bank sells the logs at the GE (currently the logs can be sold at 1 gp later I will try to get the right prices from osbuddy).

 

then the bot would have to buy a steel axe at the GE (currently all coins in the inventory can be used for this later I will also try to get the right prices from osbuddy).

Unfortunately, the bot clicks randomly succeeds to get the coins and logs from the bank than he opens the GE to start clicking all over the place. Would anyone be able to look at my code and maybe give me a quick tutorial on how to work with the GE (preferably with a few examples)

thank you in advance
heervangrijsburg

 

 

Link to comment
Share on other sites

12 hours ago, heervangrijsburg said:

As the title says, I try to learn how to work with the GE. What I'm trying to do with this bot is that it gets coins and logs from the bank sells the logs at the GE (currently the logs can be sold at 1 gp later I will try to get the right prices from osbuddy).

then the bot would have to buy a steel axe at the GE (currently all coins in the inventory can be used for this later I will also try to get the right prices from osbuddy).

Unfortunately, the bot clicks randomly succeeds to get the coins and logs from the bank than he opens the GE to start clicking all over the place. Would anyone be able to look at my code and maybe give me a quick tutorial on how to work with the GE (preferably with a few examples)

thank you in advance

heervangrijsburg

There's a few things to address here... 

1. Try not to use static IDs, as these could change and it could break the script. Instead use a string literal to retrieve items 

if ( getInventory().contains("Logs") ) {}

2. Null check NPCs to avoid NullPointerExceptions, and move interactions to a conditional statement. This is so you can better deal with the success and failure events (true / false). 

NPC exchangeClerk = getNpcs().closest("Grand Exchange Clerk");

if ( exchangeClerk != null && exchangeClerk.interact("Exchange") ) {

	new ConditionalSleep(MethodProvider.random(2000, 2500)) {
		@Override
		public boolean condition() throws InterruptedException {
			return getGrandExchange().isOpen();
		}
	}.sleep();

}

3. Avoid while() statements, they are blocking the script onLoop(). The game environment is changing constantly and if the conditional for the while statement is unreachable your script will be unable to proceed. Instead write better conditionals. 

---

Spoiler Alert - if you want to use an event to handle this, here is my snippet. As you can see I need to remove the static IDs for Addy and Mith axe, I can do this using an API for the items and dynamically fill item IDs. 

Spoiler

package events;

import org.osbot.rs07.api.Bank;
import org.osbot.rs07.api.GrandExchange;
import org.osbot.rs07.api.map.Position;
import org.osbot.rs07.api.map.constants.Banks;
import org.osbot.rs07.api.model.Item;
import org.osbot.rs07.api.model.NPC;
import org.osbot.rs07.event.Event;
import org.osbot.rs07.script.MethodProvider;
import org.osbot.rs07.utility.ConditionalSleep;

import java.util.Arrays;
import java.util.List;

public class BuyAxesEvent extends Event {

    @Override
    public int execute() {
        if ( getInventory().contains("Adamant axe") && getInventory().contains("Mithril axe") ) {
            setFinished();
        } else if (!Banks.GRAND_EXCHANGE.contains(myPosition())) {
            getWalking().webWalk(Banks.GRAND_EXCHANGE);
        } else {

            Item logs = getInventory().getItem("Logs");

            if ( logs != null && !logs.isNote() ) {

                withdrawNotes(logs);

                return 1000;

            }

            sellLogs();


        }

        return 200;

    }

    private void withdrawNotes(Item item) {

        if ( getBank().isOpen() ) {

            if (getBank().getWithdrawMode() != Bank.BankMode.WITHDRAW_NOTE)
                getBank().enableMode(Bank.BankMode.WITHDRAW_NOTE);

            if (getBank().depositAll(item.getName())) {

                new ConditionalSleep(MethodProvider.random(2000, 2500)) {
                    @Override
                    public boolean condition() throws InterruptedException {
                        return !getInventory().contains(item.getName());
                    }
                }.sleep();

            getBank().withdrawAll(item.getName());

            }

        } else {

            NPC banker = getNpcs().closest("Banker");

            if ( banker != null && banker.interact("Bank") ) {

                new ConditionalSleep(MethodProvider.random(2000, 2500)) {
                    @Override
                    public boolean condition() throws InterruptedException {
                        return getBank().isOpen();
                    }
                }.sleep();

            }

        }

    }

    private void sellLogs(){

        if ( getBank().isOpen() )
            getBank().close();

        if ( ! getGrandExchange().isOpen() ) {

            NPC exchangeClerk = getNpcs().closest("Grand Exchange Clerk");

            if ( exchangeClerk != null && exchangeClerk.interact("Exchange") ) {

                new ConditionalSleep(MethodProvider.random(2000, 2500)) {
                    @Override
                    public boolean condition() throws InterruptedException {
                        return getGrandExchange().isOpen();
                    }
                }.sleep();

            }

        } else {

            if ( getInventory().contains("Logs") ) {

                Item logs = getInventory().getItem("Logs");

                if ( getGrandExchange().sellItem(logs.getId(), 1, logs.getAmount()) ) {

                    new ConditionalSleep(MethodProvider.random(2000, 2500)) {
                        @Override
                        public boolean condition() throws InterruptedException {
                            return getGrandExchange().getStatus(GrandExchange.Box.BOX_1) == GrandExchange.Status.PENDING_SALE;
                        }
                    }.sleep();

                }

            } else if ( getGrandExchange().getStatus(GrandExchange.Box.BOX_1) == GrandExchange.Status.FINISHED_SALE && getGrandExchange().collect() ) {

                new ConditionalSleep(MethodProvider.random(2000, 2500)) {
                    @Override
                    public boolean condition() throws InterruptedException {
                        return getInventory().contains("Coins");
                    }
                }.sleep();

            } else if ( getInventory().contains("Coins") ) {

                if ( getGrandExchange().getStatus(GrandExchange.Box.BOX_1).equals(GrandExchange.Status.EMPTY) && !getInventory().contains("Mithril axe")) {

                    if ( getGrandExchange().buyItem(1355, "Mithril axe", 1000, 1) ) {

                        new ConditionalSleep(MethodProvider.random(2000, 2500)) {
                            @Override
                            public boolean condition() throws InterruptedException {
                                return getGrandExchange().getStatus(GrandExchange.Box.BOX_1) == GrandExchange.Status.PENDING_BUY;
                            }
                        }.sleep();

                    }

                }

                if ( getGrandExchange().getStatus(GrandExchange.Box.BOX_2).equals(GrandExchange.Status.EMPTY) && !getInventory().contains("Adamant axe")) {

                    if ( getGrandExchange().buyItem(1357, "Adamant axe", 1000, 1) ) {

                        new ConditionalSleep(MethodProvider.random(2000, 2500)) {
                            @Override
                            public boolean condition() throws InterruptedException {
                                return getGrandExchange().getStatus(GrandExchange.Box.BOX_2) == GrandExchange.Status.PENDING_BUY;
                            }
                        }.sleep();

                    }

                }

                if ( getGrandExchange().getStatus(GrandExchange.Box.BOX_1).equals(GrandExchange.Status.FINISHED_BUY)|| getGrandExchange().getStatus(GrandExchange.Box.BOX_2).equals(GrandExchange.Status.FINISHED_BUY) ) {

                    if ( getGrandExchange().collect() ) {

                        new ConditionalSleep(MethodProvider.random(2000, 2500)) {
                            @Override
                            public boolean condition() throws InterruptedException {
                                return !getGrandExchange().isBuyOfferOpen();
                            }
                        }.sleep();

                    }

                }

            }

        }

    }

}

Run with 


import events.BuyAxesEvent;

private final BuyAxesEvent buyAxes = new BuyAxesEvent();

if (!getInventory().contains("Adamant axe")) {

	execute(buyAxes);

}

 

 

  • Like 1
Link to comment
Share on other sites

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