Jump to content

Grand Exchange Help


Recommended Posts

Posted

I am wanting to sell an item and collect the coins, and then eventually buy some things after (buying part isnt in code just need to figure out sell first) and I am unsure what I'm doing wrong. I've tried to do my due diligence on this by researching, but there isn't many posts about the GE which tells me this is probably something super simple lol. Any help is appreciated.

 

        // Interact with a Grand Exchange Clerk to sell the lobsters
        NPC clerk = getNpcs().closest("Grand Exchange Clerk");
        if (clerk.isVisible()) {
            if(!getGrandExchange().isOpen()) {
                clerk.interact("Exchange");
                log("interacted with clerk");
            }

            if(getGrandExchange().isOpen()){
                getGrandExchange().sellItem(379, 10, 1);
                sleep(random(5000,7000));
                getGrandExchange().collect();
                sleep(random(2000,4000));
                getGrandExchange().close();
                log("lobsters sold!");
            }
            else {
                log("Clerk not found.");
            }
        }



 

Posted

Add this method somewhere in the class, and then add 

if (getGrandExchange().isOpen() && hasPendingCollect()) {
log("We have some items to collect first...");
getGrandExchange().collect();
return 600;
}
 

and declare this method:

    private boolean hasPendingCollect() {
        return Arrays.stream(Box.values())
                .filter(box -> getGrandExchange().getStatus(box).equals(Status.FINISHED_SALE)
                        || getGrandExchange().getStatus(box).equals(Status.FINISHED_BUY))
                .count() > 0;
    }

Posted
32 minutes ago, Czar said:

Add this method somewhere in the class, and then add 

if (getGrandExchange().isOpen() && hasPendingCollect()) {
log("We have some items to collect first...");
getGrandExchange().collect();
return 600;
}
 

and declare this method:

    private boolean hasPendingCollect() {
        return Arrays.stream(Box.values())
                .filter(box -> getGrandExchange().getStatus(box).equals(Status.FINISHED_SALE)
                        || getGrandExchange().getStatus(box).equals(Status.FINISHED_BUY))
                .count() > 0;
    }

Sorry I should have clarified. The code above will open up the GE, then close it. The sell Item method is essentially skipped for some reason. Would you be able to provide a small sell snippet being utilized with your code so I have something to reference?

Posted

Thanks for describing the problem more. I didn't have much to go off the PM you sent me, unsure where it was failing so I had to guess. 
Consider adding a ConditionalSleep that awaits the results of Czar's function as there is no guarantee that lobsters will sell. Its 1 gp but you may adjust that to maybe 150 in the future. 

 private boolean hasPendingCollect() {
        return Arrays.stream(Box.values())
                .filter(box -> getGrandExchange().getStatus(box).equals(Status.FINISHED_SALE)
                        || getGrandExchange().getStatus(box).equals(Status.FINISHED_BUY))
                .count() > 0;
    }

Then preforms the actual collection. 

boolean hasCollect = ConditionalSleep2.sleep(30000, () -> hasPendingCollect());
if (getGrandExchange().isOpen() && hasCollect) {
  log("We have some items to collect first...");
  getGrandExchange().collect();
  return 600;
}


 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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