Takeoff OS Posted May 19 Share Posted May 19 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."); } } Quote Link to comment Share on other sites More sharing options...
Czar Posted May 19 Share Posted May 19 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; } Quote Link to comment Share on other sites More sharing options...
Takeoff OS Posted May 19 Author Share Posted May 19 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? Quote Link to comment Share on other sites More sharing options...
yfoo Posted May 20 Share Posted May 20 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; } Quote Link to comment Share on other sites More sharing options...