I'm trying to make my script walk from the mine back to the bank and it's acting weird. I have this for the positions:
private Position[] path = {
new Position(3289, 3371, 0),
new Position(3290, 3374, 0),
new Position(3294, 3386, 0),
new Position(3290, 3391, 0),
new Position(3291, 3401, 0),
new Position(3289, 3406, 0),
new Position(3286, 3418, 0),
new Position(3276, 3426, 0),
new Position(3264, 3429, 0),
new Position(3254, 3421, 0)
};
I manually put them in so I don't know why it's acting odd. Once it gets to the 3rd position it clicks back towards the mine then starts walking South. Any idea what's causing this?
Here is my whole script for reference.
import java.awt.Graphics;
import org.osbot.script.Script;
import org.osbot.script.ScriptManifest;
import org.osbot.script.mouse.MinimapTileDestination;
import org.osbot.script.rs2.map.Position;
import org.osbot.script.rs2.model.RS2Object;
import org.osbot.script.rs2.utility.Area;
@ScriptManifest(author ="Lingoling", info="Mines Tin in Varrock east. Start in bank or at mine.", name = "BasicMiner", version = 0)
public class BasicMiner extends Script {
private static final int[] TIN_ID = {11636,11634, 11635};
private enum State {
MINE, WALK_TO_BANK, BANK, WALK_TO_MINE};
private State getState() {
if (client.getInventory().isFull() && MINE_AREA.contains(myPlayer()))
return State.WALK_TO_BANK;
if (!client.getInventory().isFull() && BANK_AREA.contains(myPlayer()))
return State.WALK_TO_MINE;
if (client.getInventory().isFull() && BANK_AREA.contains(myPlayer()))
return State.BANK;
return State.MINE;
}
private Position[] path = {
new Position(3289, 3371, 0),
new Position(3290, 3374, 0),
new Position(3294, 3386, 0),
new Position(3290, 3391, 0),
new Position(3291, 3401, 0),
new Position(3289, 3406, 0),
new Position(3286, 3418, 0),
new Position(3276, 3426, 0),
new Position(3264, 3429, 0),
new Position(3254, 3421, 0)
};
private static final Area MINE_AREA = new Area(3277, 3358, 3293, 3371);
private static final Area BANK_AREA = new Area(3250, 3419, 3257, 3423);
private void traversePath(Position[] path, boolean reversed) throws InterruptedException {
if (!reversed) {
for (int i = 1; i < path.length; i++)
if (!walkTile(path[i]))
i--;
} else {
for (int i = path.length-2; i > 0; i--)
if (!walkTile(path[i]))
i++;
}
}
private boolean walkTile(Position p) throws InterruptedException {
client.moveMouse(new MinimapTileDestination(bot, p), false);
sleep(random(150, 250));
client.pressMouse();
int failsafe = 0;
while (failsafe < 10 && myPlayer().getPosition().distance(p) > 2) {
sleep(200);
failsafe++;
if (myPlayer().isMoving())
failsafe = 0;
}
if (failsafe == 10)
return false;
return true;
}
@Override
public void onStart() {
log("I like women but they don't like me, and it's hard, yes siree");
}
@Override
public int onLoop() throws InterruptedException {
switch (getState()) {
case MINE:
if (!myPlayer().isAnimating()) {
RS2Object vein = closestObject(TIN_ID);
if (vein != null) {
if (vein.interact("Mine"))
sleep(random(1000, 1500));
}
}
break;
case WALK_TO_BANK:
traversePath(path, false);
sleep(random(1500, 2500));
break;
case WALK_TO_MINE:
traversePath(path, true);
sleep(random(1500, 2500));
break;
case BANK:
RS2Object bank = closestObjectForName("Bank booth");
if (bank != null) {
if (bank.interact("Bank")) {
while (!client.getBank().isOpen())
sleep(250);
client.getBank().depositAll();
}
}
break;
}
return random(200, 300);
}
@Override
public void onExit() {
log("Thanks ********a.");
}
@Override
public void onPaint(Graphics g) {
}
}