diff --git a/com/dax/walker/engine/EntityHandler.java b/com/dax/walker/engine/EntityHandler.java index 8cf6f10..8a258fa 100644 --- a/com/dax/walker/engine/EntityHandler.java +++ b/com/dax/walker/engine/EntityHandler.java @@ -9,15 +9,20 @@ import org.rspeer.runetek.adapter.Positionable; import org.rspeer.runetek.adapter.component.InterfaceComponent; import org.rspeer.runetek.adapter.scene.Npc; +import org.rspeer.runetek.api.Game; import org.rspeer.runetek.api.commons.Time; import org.rspeer.runetek.api.component.Dialog; +import org.rspeer.runetek.api.component.tab.Inventory; import org.rspeer.runetek.api.movement.position.Position; import org.rspeer.runetek.api.movement.transportation.CharterShip; import org.rspeer.runetek.api.scene.Npcs; +import org.rspeer.runetek.api.scene.Players; +import org.rspeer.ui.Log; import java.util.Arrays; import java.util.Comparator; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; import java.util.regex.Pattern; @DoNotRename @@ -48,7 +53,63 @@ public static PathHandleState handleCharter(CharterShip.Destination destination, if (!CharterShip.isInterfaceOpen()) return PathHandleState.FAILED; return CharterShip.charter(destination) ? PathHandleState.SUCCESS : PathHandleState.FAILED; } - + + public static PathHandleState handleShantayPass(WalkCondition walkCondition) { + Npc shantay = Npcs.getNearest("Shantay"); + + AtomicBoolean exitCondition = new AtomicBoolean(false); + if (!Inventory.contains("Shantay pass") && (shantay == null || !shantay.interact("Buy-pass") || !Time.sleepUntil(() -> { + if (Inventory.contains("Shantay pass")) { + return true; + } + if (walkCondition.getAsBoolean()) { + exitCondition.set(true); + return true; + } + return false; + },5000))){ + return PathHandleState.FAILED; + } + if (exitCondition.get()) return PathHandleState.EXIT; + return BrokenPathHandler.handle(new Position(3304, 3117, 0), new Position(3304, 3315, 0), walkCondition); + } + + public static PathHandleState handleMagicCarpet(WalkCondition walkCondition, String destination) { + Npc target = Npcs.getNearest(npc -> npc.getName().equals("Rug Merchant") && npc.containsAction("Travel")); + + if (target == null) return PathHandleState.FAILED; + if (!target.interact("Travel")) return PathHandleState.FAILED; + + AtomicBoolean exitCondition = new AtomicBoolean(false); + if (Time.sleepUntil(() -> { + if (Dialog.isViewingChatOptions()) { + return true; + } + if (walkCondition.getAsBoolean()) { + exitCondition.set(true); + return true; + } + return false; + },5000) && exitCondition.get()){ + return PathHandleState.EXIT; + } + if (!Dialog.process(destination)) return PathHandleState.FAILED; + if (!Time.sleepUntil(() -> Players.getLocal().getStance() == 6936, 10000)) return PathHandleState.FAILED; + if (Time.sleepUntil(() -> { + if (Players.getLocal().getStance() != 6936) { + return true; + } + if (walkCondition.getAsBoolean()) { + exitCondition.set(true); + return true; + } + return false; + },60000) && exitCondition.get()){ + return PathHandleState.EXIT; + } + return PathHandleState.SUCCESS; + } + public static boolean selectOption() { InterfaceComponent option = Arrays.stream(Dialog.getChatOptions()) .max(Comparator.comparingInt(o -> getResponseValue(o.getText()))) diff --git a/com/dax/walker/engine/definitions/PathLink.java b/com/dax/walker/engine/definitions/PathLink.java index 3280a54..c0b9dc4 100644 --- a/com/dax/walker/engine/definitions/PathLink.java +++ b/com/dax/walker/engine/definitions/PathLink.java @@ -170,6 +170,26 @@ public enum PathLink { DEATH_PLATEAU_DUNGEON ( new Position(2858, 3577, 0), new Position(2269,4752,0), (start, end, walkCondition) -> BrokenPathHandler.NextMove.SAME_FLOOR.handle() ? PathHandleState.SUCCESS : PathHandleState.FAILED + ), + + CARPET_SHANTAY_POLLNIVNEACH ( + new Position(3311, 3109, 0), new Position(3350, 3002, 0), + (start, end, walkCondition) -> EntityHandler.handleMagicCarpet(walkCondition, "Pollnivneach") + ), + + CARPET_SHANTAY_BEDABIN_CAMP ( + new Position(3311, 3109, 0), new Position(3181, 3043, 0), + (start, end, walkCondition) -> EntityHandler.handleMagicCarpet(walkCondition, "Bedabin camp") + ), + + CARPET_BEDABIN_CAMP_SHANTAY ( + new Position(3181, 3043, 0), new Position(3311, 3109, 0), + (start, end, walkCondition) -> EntityHandler.handleMagicCarpet(walkCondition, "Shantay Pass") + ), + + CARPET_POLLNIVNEACH_SHANTAY ( + new Position(3350, 3002, 0), new Position(3311, 3109, 0), + (start, end, walkCondition) -> EntityHandler.handleMagicCarpet(walkCondition, "Shantay Pass") ); private Position a; diff --git a/com/dax/walker/engine/definitions/PopUpInterfaces.java b/com/dax/walker/engine/definitions/PopUpInterfaces.java index 39cad6f..f682cf8 100644 --- a/com/dax/walker/engine/definitions/PopUpInterfaces.java +++ b/com/dax/walker/engine/definitions/PopUpInterfaces.java @@ -2,11 +2,14 @@ import org.rspeer.runetek.adapter.component.InterfaceComponent; import org.rspeer.runetek.api.commons.Time; +import org.rspeer.runetek.api.component.InterfaceAddress; import org.rspeer.runetek.api.component.Interfaces; public enum PopUpInterfaces { + STRONGHOLD_PROMPT(() -> Interfaces.getComponent(579, 17)), - WILDERNESS_PROMPT(() -> Interfaces.getComponent(475, 11)); + WILDERNESS_PROMPT(() -> Interfaces.getComponent(475, 11)), + SHANTAY_PROMPT(() -> Interfaces.getComponent(565, 17)); private RSPopUp rsPopUp; diff --git a/com/dax/walker/engine/definitions/Teleport.java b/com/dax/walker/engine/definitions/Teleport.java index 8964991..3ab416b 100644 --- a/com/dax/walker/engine/definitions/Teleport.java +++ b/com/dax/walker/engine/definitions/Teleport.java @@ -185,8 +185,14 @@ public enum Teleport { () -> WearableItemTeleport.has(WearableItemTeleport.GLORY_MATCHER), () -> WearableItemTeleport.teleport(WearableItemTeleport.GLORY_MATCHER, Pattern.compile("(?i).*al kharid.*")) ), - - ; + + ARDOUGNE_CLOAK_MONASTERY( + 35, new Position(2609, 3222, 0), + () -> WearableItemTeleport.has(WearableItemTeleport.ARDOUGNE_CLOAK_MATCHER), + () -> WearableItemTeleport.teleport(WearableItemTeleport.ARDOUGNE_CLOAK_MATCHER, Pattern.compile("(?i).*monastery teleport.*")) + ); + + private int moveCost; private Position location; diff --git a/com/dax/walker/engine/definitions/WearableItemTeleport.java b/com/dax/walker/engine/definitions/WearableItemTeleport.java index fef5fc5..05c0331 100644 --- a/com/dax/walker/engine/definitions/WearableItemTeleport.java +++ b/com/dax/walker/engine/definitions/WearableItemTeleport.java @@ -16,6 +16,7 @@ public class WearableItemTeleport { public static final Pattern COMBAT_BRACE_MATCHER = Pattern.compile("(?i)combat brace.+\\(.+"); public static final Pattern GAMES_NECKLACE_MATCHER = Pattern.compile("(?i)game.+neck.+\\(.+"); public static final Pattern GLORY_MATCHER = Pattern.compile("(?i).+glory.*\\(.+"); + public static final Pattern ARDOUGNE_CLOAK_MATCHER = Pattern.compile("(?i)ardougne cloak.?.+"); private WearableItemTeleport() { @@ -31,7 +32,8 @@ public static boolean teleport(Pattern itemMatcher, Pattern option) { if (teleportEquipment(itemMatcher, option)) return true; Item inventoryItem = Inventory.getFirst(item -> itemMatcher.matcher(item.getName()).matches() && !item.isNoted()); if (inventoryItem == null) return false; - if (!inventoryItem.interact(s -> option.matcher(s).matches()) && !inventoryItem.interact("Rub")) return false; + if (inventoryItem.interact(s -> option.matcher(s).matches())) return true; + if (!inventoryItem.interact("Rub")) return false; if (!Time.sleepUntil(Dialog::isOpen, 5000)) return false; return Dialog.process(s -> option.matcher(s).matches()); }