import org.rsbot.event.listeners.PaintListener;
import org.rsbot.script.Script;
import org.rsbot.script.ScriptManifest;
import org.rsbot.script.methods.Game;
import org.rsbot.script.methods.Skills;
import org.rsbot.script.util.Filter;
import org.rsbot.script.util.Timer;
import org.rsbot.script.wrappers.*;
import java.awt.*;
/**
* A simple Ivy Chopper for free on RSBot.
* Please remember paid scripts are always better!
*/
@ScriptManifest(name = "godIvy", authors = {"Timer"}, description = "Cuts down ivy.", website = "http://www.powerbot.org/vb/showthread.php?t=783713", version = 0.1, keywords = {"bank", "ivy", "nest", "woodcutting"}, requiresVersion = 242)
public class godIvy extends Script implements PaintListener {
private static final Filter<RSGroundItem> BIRD_NEST = new Filter<RSGroundItem>() {
public boolean accept(RSGroundItem rsGroundItem) {
return rsGroundItem != null && rsGroundItem.getItem().getName() != null && rsGroundItem.getItem().getName().toLowerCase().contains("nest");
}
};
private static final Filter<RSObject> IVY = new Filter<RSObject>() {
public boolean accept(RSObject rsObject) {
return rsObject != null && rsObject.getName() != null && rsObject.getName().toLowerCase().equalsIgnoreCase("ivy");
}
};
private RSTile returnTile = null;
private RSWeb walkWeb = null;
private RSObject ivy = null;
@Override
public int loop() {
if (game.getPlane() != 0) {
return -1;
}
if ((getMyPlayer().isMoving() && walkWeb == null) || getMyPlayer().getAnimation() != -1) {
if (random(0, 10) == 0) {
mouse.moveRandomly(300);
} else if (random(0, 5) == 0) {
if (calc.pointOnScreen(mouse.getLocation())) {
mouse.moveOffScreen();
}
} else if (random(0, 10) == 0) {
camera.moveRandomly(5000);
} else if (random(0, 4) == 0) {
game.openTab(Game.TAB_STATS);
sleep(150);
skills.doHover(Skills.WOODCUTTING);
sleep(random(0, 5000));
game.openTab(Game.TAB_INVENTORY);
}
return random(2500, 4000);
}
if (inventory.isFull()) {
final RSTile tile = getMyPlayer().getLocation();
if (returnTile == null) {
returnTile = tile;
}
final RSTile bankTile = web.getNearestBank(tile);
if (bankTile != null) {
if (calc.distanceTo(bankTile) < 4) {
final int h = inventoryHatchetID();
if (bank.isOpen() || bank.open()) {
for (int i = 0; i < 10; i++) {
if (inventory.getCount() > 0) {
if (h != -1) {
bank.depositAllExcept(h);
} else {
bank.depositAll();
}
sleep(250);
}
}
walkWeb = null;
}
} else {
if (walkWeb == null) {
walkWeb = web.getWeb(tile, bankTile);
}
if (!walkWeb.finished()) {
if (!walkWeb.step()) {
walkWeb = null;
return 0;
}
} else {
walkWeb = null;
returnTile = null;
}
}
}
return 250;
} else {
final RSGroundItem groundItem = groundItems.getNearest(BIRD_NEST);
if (groundItem != null) {
groundItem.doAction("Take");
return 800;
}
}
if (returnTile != null) {
final RSTile tile = getMyPlayer().getLocation();
if (calc.distanceTo(returnTile) < 4) {
if (walkWeb == null) {
walkWeb = web.getWeb(tile, returnTile);
}
if (!walkWeb.finished()) {
if (!walkWeb.step()) {
walkWeb = null;
return 0;
}
} else {
walkWeb = null;
}
} else {
returnTile = null;
}
return 0;
}
RSObject ivyObject = objects.getNearest(IVY);
if (ivyObject != null) {
if (ivyObject.isOnScreen()) {
RSModel ivyModel = ivyObject.getModel();
if (ivyModel != null) {
Timer timer = new Timer(10000);
while (timer.isRunning()) {
Point p = ivyModel.getPoint();
if (calc.pointOnScreen(p)) {
mouse.move(p);
Timer waitTimer = new Timer(250);
while (waitTimer.isRunning()) {
if (mouse.getLocation().equals(p)) {
break;
}
sleep(random(25, 70));
}
sleep(random(150, 180));
if (menu.doAction("Chop")) {
ivy = ivyObject;
camera.turnTo(ivy);
return 250;
}
}
}
}
} else {
if (calc.canReach(ivyObject.getLocation(), false)) {
walking.walkTileMM(ivyObject.getLocation());
}
return 2500;
}
}
return 0;
}
public int inventoryHatchetID() {
return inventory.getItemID("hatchet");
}
public void onRepaint(Graphics render) {
if (ivy != null) {
RSModel model = ivy.getModel();
if (model != null) {
render.setColor(new Color(0, 0, 255, 75));
Polygon[] modelArray = model.getTriangles();
for (Polygon modelIndex : modelArray) {
render.fillPolygon(modelIndex);
}
}
}
}
@Override
public boolean onBreakStart() {
walkWeb = null;
return true;
}
}