Optimize walking and add custom starting condition

This commit is contained in:
Yuri Moens 2021-10-20 10:39:10 +02:00
parent 7cae9e07d0
commit 0cb56342ee
Signed by: ymo
GPG Key ID: F6D51D6FE15BE924
3 changed files with 54 additions and 17 deletions

View File

@ -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;

View File

@ -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<Tile> 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<Tile> getPath() {
return path;
}
public boolean canStart() {
return startCondition.verify();
}
}

View File

@ -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<Integer, Rectangle> 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) {