Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.AlphaComposite;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Point;
- import java.awt.Polygon;
- import java.awt.Rectangle;
- import java.util.Arrays;
- import org.powerbot.concurrent.Task;
- import org.powerbot.concurrent.strategy.Strategy;
- import org.powerbot.game.api.ActiveScript;
- import org.powerbot.game.api.Manifest;
- import org.powerbot.game.api.methods.Calculations;
- import org.powerbot.game.api.methods.Game;
- import org.powerbot.game.api.methods.Tabs;
- import org.powerbot.game.api.methods.Walking;
- import org.powerbot.game.api.methods.Widgets;
- import org.powerbot.game.api.methods.input.Mouse;
- import org.powerbot.game.api.methods.interactive.Players;
- import org.powerbot.game.api.methods.node.GroundItems;
- import org.powerbot.game.api.methods.node.Menu;
- import org.powerbot.game.api.methods.node.SceneEntities;
- import org.powerbot.game.api.methods.tab.Inventory;
- import org.powerbot.game.api.methods.tab.Skills;
- import org.powerbot.game.api.methods.widget.Camera;
- import org.powerbot.game.api.util.Filter;
- import org.powerbot.game.api.util.Random;
- import org.powerbot.game.api.util.Time;
- import org.powerbot.game.api.wrappers.Tile;
- import org.powerbot.game.api.wrappers.interactive.Player;
- import org.powerbot.game.api.wrappers.node.GroundItem;
- import org.powerbot.game.api.wrappers.node.Item;
- import org.powerbot.game.api.wrappers.node.SceneObject;
- import org.powerbot.game.api.wrappers.widget.WidgetChild;
- import org.powerbot.game.bot.event.MessageEvent;
- import org.powerbot.game.bot.event.listener.MessageListener;
- import org.powerbot.game.bot.event.listener.PaintListener;
- @Manifest(authors = { "_phl0w" }, name = "iTArcticPines", version = 1.1, description = "Chops arctic pines for you for the fastest woodcutting xp in game! Have urns in your inventory for better xp/h! - Picks up bird nests.", website = "http://www.powerbot.org/community/topic/699663-itarcticpines-chops-arctic-pines-fastest-wc-xph-urn-support/")
- public class iTArticPines extends ActiveScript implements PaintListener,
- MessageListener {
- private long startTime;
- private int startLevel, startXp, chopped, nests;
- private String status = "nothing";
- private Tile startTile;
- private final int[] BIRD_NESTS = { 5070, 5071, 5072, 5073, 5074, 5075,
- 7413, 11966 };
- @Override
- public void setup() {
- if (Game.isLoggedIn()) {
- if (Skills.getLevel(Skills.WOODCUTTING) < 54) {
- log.info("Arctic pines require a woodcutting level of at least 54.");
- stop();
- }
- startTile = new Tile(2329, 3829, 0);
- provide(new Chop());
- provide(new Walker());
- provide(new Dropper());
- provide(new Nest());
- provide(new Antiban());
- provide(new Urn());
- startTime = System.currentTimeMillis();
- startLevel = Skills.getLevel(Skills.WOODCUTTING);
- startXp = Skills.getExperience(Skills.WOODCUTTING);
- } else {
- log.info("Start the script AFTER logging in.");
- stop();
- }
- }
- private class Urn extends Strategy implements Task {
- @Override
- public boolean validate() {
- return Inventory.getCount(20318) > 0;
- }
- @Override
- public void run() {
- while (!Inventory.getItem(20318).getWidgetChild()
- .interact("Teleport")) {
- Time.sleep(Random.nextInt(80, 120));
- }
- status = "teleporting urn";
- Time.sleep(Random.nextInt(300, 400));
- if (Widgets.get(905, 14).validate()) {
- while (!Widgets.get(905, 14).interact("Teleport all")) {
- Time.sleep(Random.nextInt(80, 120));
- }
- Time.sleep(Random.nextInt(300, 400));
- }
- }
- }
- private class Nest extends Strategy implements Task {
- @Override
- public boolean validate() {
- return getNest() != null && getNest().isOnScreen();
- }
- @Override
- public void run() {
- status = "taking nest";
- while (!getNest().interact("Take", "Bird's nest")) {
- Time.sleep(Random.nextInt(80, 120));
- }
- nests++;
- }
- }
- private class Chop extends Strategy implements Task {
- @Override
- public boolean validate() {
- return Players.getLocal().getAnimation() == -1
- && Inventory.getCount() != 28
- && Inventory.getCount(20318) == 0;
- }
- @Override
- public void run() {
- if (Tabs.getCurrent() != Tabs.INVENTORY) {
- Tabs.INVENTORY.open();
- Time.sleep(Random.nextInt(100, 200));
- }
- while (!getPine().interact("Chop down")) {
- Time.sleep(Random.nextInt(80, 120));
- }
- status = "chopping";
- Time.sleep(Random.nextInt(1000, 1200));
- }
- }
- private class Walker extends Strategy implements Task {
- @Override
- public boolean validate() {
- return startTile != null
- && Calculations.distance(startTile, Players.getLocal()
- .getLocation()) > 8;
- }
- @Override
- public void run() {
- Walking.findPath(startTile).traverse();
- }
- }
- private class Dropper extends Strategy implements Task {
- @Override
- public boolean validate() {
- return Inventory.getCount() == 28;
- }
- @Override
- public void run() {
- for (Item i : Inventory.getItems()) {
- if (i.getId() == 10810) {
- WidgetChild item = i.getWidgetChild();
- Mouse.hop(item.getAbsoluteX() + Random.nextInt(1, 5),
- item.getAbsoluteY() + Random.nextInt(1, 5));
- Mouse.click(false);
- while (!Menu.isOpen()) {
- Time.sleep(Random.nextInt(1, 20));
- }
- Menu.select("Drop");
- }
- }
- }
- }
- private class Antiban extends Strategy implements Task {
- @Override
- public boolean validate() {
- return true;
- }
- @Override
- public void run() {
- if (Random.nextInt(1, 250) < 14) {
- executeAntiban();
- }
- Time.sleep(Random.nextInt(1000, 2000));
- }
- public void executeAntiban() {
- int dx, dy;
- int r = Random.nextInt(0, 5);
- switch (r) {
- case 0:
- case 1:
- status = "moving camera";
- Camera.setAngle(Random.nextInt(20, 300));
- break;
- case 2:
- case 3:
- status = "moving mouse";
- dx = Random.nextInt(-30, 30);
- dy = Random.nextInt(-30, 30);
- Mouse.move(Mouse.getX() + dx, Mouse.getY() + dy);
- Time.sleep(Random.nextInt(20, 150));
- break;
- case 4:
- status = "checking player";
- Player player = Players.getNearest(new Filter<Player>() {
- @Override
- public boolean accept(Player p) {
- return !p.equals(Players.getLocal());
- }
- });
- if (player != null) {
- player.click(false);
- Time.sleep(Random.nextInt(400, 1000));
- dx = Random.nextInt(-16, 16);
- dy = Random.nextInt(-60, -20);
- Mouse.move(Mouse.getX() + dx, Mouse.getY() + dy);
- }
- Time.sleep(Random.nextInt(20, 150));
- break;
- case 5:
- status = "random examine";
- for (SceneObject random : SceneEntities
- .getLoaded(new Filter<SceneObject>() {
- @Override
- public boolean accept(SceneObject obj) {
- return obj != null
- && obj.isOnScreen()
- && Calculations.distance(Players
- .getLocal().getLocation(), obj
- .getLocation()) < 8;
- }
- })) {
- while (!random.interact("Examine")) {
- Time.sleep(Random.nextInt(80, 120));
- }
- Time.sleep(Random.nextInt(300, 400));
- }
- break;
- }
- status = "chopping";
- }
- }
- private AlphaComposite makeComposite(float alpha) {
- int type = AlphaComposite.SRC_OVER;
- return (AlphaComposite.getInstance(type, alpha));
- }
- @Override
- public void onRepaint(Graphics g) {
- Graphics2D g2d = (Graphics2D) g;
- Font title = new Font("Monotype Corsiva", Font.PLAIN, 25);
- Font author = new Font("Monotype Corsiva", Font.PLAIN, 16);
- Font info = new Font("Book Antiqua", Font.PLAIN, 15);
- Rectangle bg = new Rectangle(10, 23, 236, 150);
- Rectangle border = new Rectangle(8, 21, 240, 154);
- g2d.setColor(Color.DARK_GRAY);
- g2d.setComposite(makeComposite(0.5f));
- g2d.fill(bg);
- g2d.setColor(Color.BLACK);
- g2d.fill(border);
- g2d.setComposite(makeComposite(1.0f));
- g2d.setColor(Color.WHITE);
- g2d.fill(new Rectangle(Mouse.getX() + 1, Mouse.getY() - 4, 2, 15));
- g2d.fill(new Rectangle(Mouse.getX() - 6, Mouse.getY() + 2, 16, 2));
- int expGained = Skills.getExperiences()[Skills.WOODCUTTING] - startXp;
- int expHour = (int) ((expGained) * 3600000D / (System
- .currentTimeMillis() - startTime));
- int cutHour = (int) ((chopped) * 3600000D / (System.currentTimeMillis() - startTime));
- g2d.setFont(title);
- g2d.drawString("iTArcticPines", 12, 43);
- g2d.setFont(author);
- g2d.drawString("By: Flow_HRS", 12, 58);
- g2d.setFont(info);
- g2d.drawString(
- "WCing: "
- + Skills.getLevels()[Skills.WOODCUTTING]
- + "(+"
- + (Skills.getLevels()[Skills.WOODCUTTING] - startLevel)
- + "). TTL: "
- + getTimeTillLevel(Skills.WOODCUTTING, expGained,
- expHour) + " ("
- + getPercentToNextLevel(Skills.WOODCUTTING) + "%).",
- 12, 78);
- g2d.drawString("WC XP gained: " + expGained + ". (" + expHour + "/h)",
- 12, 93);
- g2d.drawString("Chopped " + chopped + " pines.", 12, 108);
- g2d.drawString("Chopping " + cutHour + " pines per hour.", 12, 123);
- g2d.drawString("Nests: " + nests + ".", 12, 138);
- g2d.drawString("Status: " + status + ".", 12, 153);
- g2d.drawString("Time running: "
- + formatTime(System.currentTimeMillis() - startTime) + ".", 12,
- 168);
- drawTile(g2d, Players.getLocal().getLocation(), Color.GREEN);
- }
- private String formatTime(final long milliseconds) {
- final long t_seconds = milliseconds / 1000;
- final long t_minutes = t_seconds / 60;
- final long t_hours = t_minutes / 60;
- final long seconds = t_seconds % 60;
- final long minutes = t_minutes % 60;
- final long hours = t_hours % 500;
- return hours + ":" + minutes + ":" + seconds;
- }
- public void drawTile(Graphics2D g, Tile tile, Color col) {
- for (Polygon poly : tile.getBounds()) {
- boolean drawThisOne = true;
- for (int i = 0; i < poly.npoints; i++) {
- Point p = new Point(poly.xpoints[i], poly.ypoints[i]);
- if (!Calculations.isOnScreen(p)) {
- drawThisOne = false;
- }
- }
- if (drawThisOne) {
- Color col2 = new Color(col.getRed(), col.getGreen(),
- col.getBlue(), 80);
- g.setColor(col2);
- g.fillPolygon(poly);
- g.setColor(col);
- g.drawPolygon(poly);
- }
- }
- }
- private String getTimeTillLevel(int skill, int expGained, int expPerHour) {
- int currentLevel = Skills.getLevel(skill);
- if (currentLevel == 99) {
- return "n/a";
- }
- int expTillNextLevel = Skills.getExperienceToLevel(skill,
- currentLevel + 1);
- if (expGained > 0) {
- return Time.format((long) ((double) expTillNextLevel
- / (double) expPerHour * 3600000));
- }
- return "0:0:0";
- }
- private int getPercentToNextLevel(int index) {
- int lvl = Skills.getRealLevel(index);
- if (lvl == 99 || Skills.getLevel(Skills.WOODCUTTING) == 99) {
- return 100;
- }
- int xpTotal = Skills.XP_TABLE[lvl + 1] - Skills.XP_TABLE[lvl];
- if (xpTotal == 0) {
- return 0;
- }
- int xpDone = Skills.getExperience(index) - Skills.XP_TABLE[lvl];
- return 100 * xpDone / xpTotal;
- }
- @Override
- public void messageReceived(MessageEvent arg0) {
- String msg = arg0.getMessage();
- if (msg.contains("arctic pine logs")) {
- chopped++;
- }
- }
- private SceneObject getPine() {
- return SceneEntities.getNearest(new Filter<SceneObject>() {
- @Override
- public boolean accept(SceneObject obj) {
- return obj.getId() == 70057;
- }
- });
- }
- private GroundItem getNest() {
- return GroundItems.getNearest(new Filter<GroundItem>() {
- public boolean accept(GroundItem grounditem) {
- Arrays.sort(BIRD_NESTS);
- return Arrays.binarySearch(BIRD_NESTS, grounditem
- .getGroundItem().getId()) >= 0;
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement