Imthabawse Posted May 1, 2019 Posted May 1, 2019 (edited) Simple Woodcutter & Firemaker for Tree's. Wondering how I can make bot move based off of game message "You can't light a fire here." Any help would be appreciated. Edited May 1, 2019 by Imthabawse
FuryShark Posted May 1, 2019 Posted May 1, 2019 public void onMessage(Message message) throws java.lang.InterruptedException{ if (message.getType() == Message.MessageType.GAME) { String txt = message.getMessage().toLowerCase(); if (txt.contains("you can't light a fire here.") { movePosition = true; } } } 1
dazeldo Posted May 1, 2019 Posted May 1, 2019 private void lightFire() { if (standingOnFire()) { getEmptyPosition().ifPresent(position -> { WalkingEvent walkingEvent = new WalkingEvent(position); walkingEvent.setMinDistanceThreshold(0); execute(walkingEvent); }); } else if (!"Tinderbox".equals(getInventory().getSelectedItemName())) { getInventory().getItem("Tinderbox").interact("Use"); } else if (getInventory().getItem("Logs").interact()) { Position playerPos = myPosition(); Sleep.sleepUntil(() -> !myPosition().equals(playerPos), 10_000, 600); } } private boolean standingOnFire() { return getObjects().singleFilter(getObjects().getAll(), obj -> obj.getPosition().equals(myPosition()) && obj.getName().equals("Fire")) != null; } private Optional<Position> getEmptyPosition() { List<Position> allPositions = myPlayer().getArea(10).getPositions(); // Remove any position with an object (except ground decorations, as they can be walked on) for (RS2Object object : getObjects().getAll()) { if (object instanceof GroundDecoration) { continue; } allPositions.removeIf(position -> object.getPosition().equals(position)); } allPositions.removeIf(position -> !getMap().canReach(position)); return allPositions.stream().min(Comparator.comparingInt(p -> myPosition().distance(p))); } Take a look at this! From @Explv's AIO. 1
Imthabawse Posted May 1, 2019 Author Posted May 1, 2019 Thank you guys! I will mess around with this after work.
Elixar Posted May 5, 2019 Posted May 5, 2019 On 5/1/2019 at 1:06 PM, FuryShark said: public void onMessage(Message message) throws java.lang.InterruptedException{ if (message.getType() == Message.MessageType.GAME) { String txt = message.getMessage().toLowerCase(); if (txt.contains("you can't light a fire here.") { movePosition = true; } } } Using onMessage should be avoided, it uses a seperate thread and will be constantly listening / checking if the message is there, this takes up more CPU no? Correct me if I'm wrong Always go with as few threads as possible and make use of private code. EXPLVs code above seems to be more efficient for anyone reading this 1