Compare commits

..

2 Commits

Author SHA1 Message Date
0cb56342ee Optimize walking and add custom starting condition 2021-10-20 10:39:10 +02:00
7cae9e07d0 Optimize picking up mark 2021-10-20 10:38:31 +02:00
5 changed files with 61 additions and 20 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) {

View File

@ -4,9 +4,12 @@ import io.reisub.dreambot.util.Constants;
import io.reisub.dreambot.util.Util;
import org.dreambot.api.methods.Calculations;
import org.dreambot.api.methods.MethodContext;
import org.dreambot.api.methods.MethodProvider;
import org.dreambot.api.methods.container.impl.Inventory;
import org.dreambot.api.methods.interactive.Players;
import org.dreambot.api.methods.item.GroundItems;
import org.dreambot.api.script.TaskNode;
import org.dreambot.api.utilities.impl.Condition;
import org.dreambot.api.wrappers.items.GroundItem;
import org.dreambot.api.wrappers.items.Item;
@ -29,14 +32,14 @@ public class PickupMark extends TaskNode {
Item marks = Inventory.get(Constants.MARK_OF_GRACE);
final int count = marks == null ? 0 : marks.getAmount();
mark.interact();
mark.interactForceLeft(Constants.TAKE);
if (MethodContext.sleepUntil(() -> {
Item currentMarks = Inventory.get(Constants.MARK_OF_GRACE);
return currentMarks != null && currentMarks.getAmount() > count;
}, Calculations.random(5000, 5500))) {
}, () -> Players.localPlayer().isMoving(), Calculations.random(1200, 1300), 50)) {
marksPickedUp++;
}
};
return Calculations.random(250, 400);
}

View File

@ -55,6 +55,7 @@ public class Constants {
// Actions
public static final String USE = "Use";
public static final String TAKE = "Take";
public static final String USE_ROD = "Use-rod";
public static final String INTERACT = "Interact";
public static final String PICK_UP = "Pick-up";