From 0cb56342eef68595003234f7b1b7c65f2612cfee Mon Sep 17 00:00:00 2001 From: Yuri Moens Date: Wed, 20 Oct 2021 10:39:10 +0200 Subject: [PATCH] Optimize walking and add custom starting condition --- .../io/reisub/dreambot/cagility/CAgility.java | 3 ++ .../io/reisub/dreambot/cagility/Obstacle.java | 15 ++++++ .../cagility/tasks/HandleObstacle.java | 53 +++++++++++++------ 3 files changed, 54 insertions(+), 17 deletions(-) diff --git a/CAgility/src/io/reisub/dreambot/cagility/CAgility.java b/CAgility/src/io/reisub/dreambot/cagility/CAgility.java index f8662b5..fd24cd5 100644 --- a/CAgility/src/io/reisub/dreambot/cagility/CAgility.java +++ b/CAgility/src/io/reisub/dreambot/cagility/CAgility.java @@ -8,8 +8,11 @@ import io.reisub.dreambot.util.Constants; import io.reisub.dreambot.util.randomevents.GenieSolver; import io.reisub.dreambot.util.tasks.Eat; import io.reisub.dreambot.util.tasks.kitten.KittenTask; +import org.dreambot.api.methods.MethodProvider; +import org.dreambot.api.methods.interactive.Players; import org.dreambot.api.methods.skills.Skill; import org.dreambot.api.script.Category; +import org.dreambot.api.script.ScriptManager; import org.dreambot.api.script.ScriptManifest; import org.dreambot.api.script.TaskNode; diff --git a/CAgility/src/io/reisub/dreambot/cagility/Obstacle.java b/CAgility/src/io/reisub/dreambot/cagility/Obstacle.java index 566628c..dddd252 100644 --- a/CAgility/src/io/reisub/dreambot/cagility/Obstacle.java +++ b/CAgility/src/io/reisub/dreambot/cagility/Obstacle.java @@ -1,16 +1,19 @@ package io.reisub.dreambot.cagility; +import io.reisub.dreambot.util.Util; import org.dreambot.api.methods.interactive.GameObjects; import org.dreambot.api.methods.interactive.Players; import org.dreambot.api.methods.map.Area; import org.dreambot.api.methods.map.Tile; import org.dreambot.api.methods.walking.path.impl.LocalPath; +import org.dreambot.api.utilities.impl.Condition; import org.dreambot.api.wrappers.interactive.GameObject; public class Obstacle { private final int id; private final Area area; private final LocalPath path; + private Condition startCondition; private Obstacle next; public Obstacle(int id, Area area, Tile... walkingTiles) { @@ -18,6 +21,14 @@ public class Obstacle { this.area = area; path = new LocalPath<>(); path.addAll(walkingTiles); + + startCondition = Util::playerIsIdle; + } + + public Obstacle(int id, Area area, Condition startCondition, Tile... walkingTiles) { + this(id, area, walkingTiles); + + this.startCondition = startCondition; } public int getID() { @@ -43,4 +54,8 @@ public class Obstacle { public LocalPath getPath() { return path; } + + public boolean canStart() { + return startCondition.verify(); + } } diff --git a/CAgility/src/io/reisub/dreambot/cagility/tasks/HandleObstacle.java b/CAgility/src/io/reisub/dreambot/cagility/tasks/HandleObstacle.java index 5d6d04c..b6b7c76 100644 --- a/CAgility/src/io/reisub/dreambot/cagility/tasks/HandleObstacle.java +++ b/CAgility/src/io/reisub/dreambot/cagility/tasks/HandleObstacle.java @@ -7,6 +7,7 @@ import org.dreambot.api.input.Mouse; import org.dreambot.api.input.mouse.destination.impl.MiniMapTileDestination; import org.dreambot.api.methods.Calculations; import org.dreambot.api.methods.MethodContext; +import org.dreambot.api.methods.MethodProvider; import org.dreambot.api.methods.interactive.Players; import org.dreambot.api.methods.item.GroundItems; import org.dreambot.api.methods.map.Area; @@ -15,6 +16,7 @@ import org.dreambot.api.methods.walking.impl.Walking; import org.dreambot.api.methods.walking.path.impl.LocalPath; import org.dreambot.api.script.ScriptManager; import org.dreambot.api.script.TaskNode; +import org.dreambot.api.utilities.impl.Condition; import org.dreambot.api.wrappers.interactive.GameObject; import org.dreambot.api.wrappers.items.GroundItem; @@ -90,10 +92,17 @@ public class HandleObstacle extends TaskNode { new Tile(2704, 3498, 2), new Tile(2704, 3487, 2))), new Obstacle(14929, new Area( - new Tile(2708, 3482, 2), - new Tile(2717, 3482, 2), - new Tile(2717, 3475, 2), - new Tile(2708, 3475, 2))), + new Tile(2708, 3475, 2), + new Tile(2716, 3475, 2), + new Tile(2716, 3484, 2), + new Tile(2708, 3484, 2)), + () -> { + Area startArea = new Area( + new Tile(2710, 3482, 2), + new Tile(2710, 3481, 2) + ); + return startArea.contains(Players.localPlayer()); + }), new Obstacle(14930, new Area( new Tile(2716, 3468, 3), new Tile(2699, 3468, 3), @@ -136,6 +145,7 @@ public class HandleObstacle extends TaskNode { private final Course course; private final Map hoverMap; + private Obstacle current; private int retries = 0; public HandleObstacle(Course course) { @@ -147,24 +157,24 @@ public class HandleObstacle extends TaskNode { public boolean accept() { GroundItem mark = GroundItems.closest(Constants.MARK_OF_GRACE); - return Util.playerIsIdle() && (mark == null || !mark.canReach()); - } - - @Override - public int execute() { - Obstacle current = course.getCurrentObstacle(); + current = course.getCurrentObstacle(); if (current == null) { - if (retries >= 10) { + if (retries >= 20) { MethodContext.logError("Player is in an unsupported area: " + Players.localPlayer().getTile().toString() + ". Stopping."); ScriptManager.getScriptManager().stop(); } else { retries++; } - return Calculations.random(300, 400); + return false; } retries = 0; + return (current.canStart() || Util.playerIsIdle()) && (mark == null || !mark.canReach()); + } + + @Override + public int execute() { final GameObject currentObject = current.getGameObject(); if (currentObject == null) return Calculations.random(300, 500); @@ -180,10 +190,13 @@ public class HandleObstacle extends TaskNode { } for (Tile t : path) { - final Tile target = t.getRandomizedTile(1); - Walking.clickTileOnMinimap(target); + Tile target = t.getRandomizedTile(1); + while (!Walking.clickTileOnMinimap(target)) { + target = t.getRandomizedTile(2); + } - MethodContext.sleepUntil(() -> target.distance(Players.localPlayer()) < Calculations.random(4, 7), Calculations.random(14000, 15000)); + Tile finalTarget = target; + MethodContext.sleepUntil(() -> finalTarget.distance(Players.localPlayer()) < Calculations.random(4, 7), Calculations.random(14000, 15000)); } } @@ -197,11 +210,17 @@ public class HandleObstacle extends TaskNode { hoverMap.put(current.getID(), currentObject.getBoundingBox()); } - if (!isWalking) { + if (!isWalking && !current.canStart()) { MethodContext.sleepUntil(Util::playerIsIdle, Calculations.random(3000, 3500)); } - currentObject.interact(); + if (isWalking) { + Mouse.setAlwaysHop(true); + currentObject.interactForceLeft(currentObject.getActions()[0]); + Mouse.setAlwaysHop(false); + } else { + currentObject.interactForceLeft(currentObject.getActions()[0]); + } Rectangle hoverRect = hoverMap.get(current.getNext().getID()); if (hoverRect != null) {