Advertisement
phl0w

iTArcticPines

May 24th, 2012
979
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.57 KB | None | 0 0
  1. import java.awt.AlphaComposite;
  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.Point;
  7. import java.awt.Polygon;
  8. import java.awt.Rectangle;
  9. import java.util.Arrays;
  10.  
  11. import org.powerbot.concurrent.Task;
  12. import org.powerbot.concurrent.strategy.Strategy;
  13. import org.powerbot.game.api.ActiveScript;
  14. import org.powerbot.game.api.Manifest;
  15. import org.powerbot.game.api.methods.Calculations;
  16. import org.powerbot.game.api.methods.Game;
  17. import org.powerbot.game.api.methods.Tabs;
  18. import org.powerbot.game.api.methods.Walking;
  19. import org.powerbot.game.api.methods.Widgets;
  20. import org.powerbot.game.api.methods.input.Mouse;
  21. import org.powerbot.game.api.methods.interactive.Players;
  22. import org.powerbot.game.api.methods.node.GroundItems;
  23. import org.powerbot.game.api.methods.node.Menu;
  24. import org.powerbot.game.api.methods.node.SceneEntities;
  25. import org.powerbot.game.api.methods.tab.Inventory;
  26. import org.powerbot.game.api.methods.tab.Skills;
  27. import org.powerbot.game.api.methods.widget.Camera;
  28. import org.powerbot.game.api.util.Filter;
  29. import org.powerbot.game.api.util.Random;
  30. import org.powerbot.game.api.util.Time;
  31. import org.powerbot.game.api.wrappers.Tile;
  32. import org.powerbot.game.api.wrappers.interactive.Player;
  33. import org.powerbot.game.api.wrappers.node.GroundItem;
  34. import org.powerbot.game.api.wrappers.node.Item;
  35. import org.powerbot.game.api.wrappers.node.SceneObject;
  36. import org.powerbot.game.api.wrappers.widget.WidgetChild;
  37. import org.powerbot.game.bot.event.MessageEvent;
  38. import org.powerbot.game.bot.event.listener.MessageListener;
  39. import org.powerbot.game.bot.event.listener.PaintListener;
  40.  
  41. @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/")
  42. public class iTArticPines extends ActiveScript implements PaintListener,
  43.         MessageListener {
  44.  
  45.     private long startTime;
  46.     private int startLevel, startXp, chopped, nests;
  47.     private String status = "nothing";
  48.     private Tile startTile;
  49.     private final int[] BIRD_NESTS = { 5070, 5071, 5072, 5073, 5074, 5075,
  50.             7413, 11966 };
  51.  
  52.     @Override
  53.     public void setup() {
  54.         if (Game.isLoggedIn()) {
  55.             if (Skills.getLevel(Skills.WOODCUTTING) < 54) {
  56.                 log.info("Arctic pines require a woodcutting level of at least 54.");
  57.                 stop();
  58.             }
  59.             startTile = new Tile(2329, 3829, 0);
  60.             provide(new Chop());
  61.             provide(new Walker());
  62.             provide(new Dropper());
  63.             provide(new Nest());
  64.             provide(new Antiban());
  65.             provide(new Urn());
  66.             startTime = System.currentTimeMillis();
  67.             startLevel = Skills.getLevel(Skills.WOODCUTTING);
  68.             startXp = Skills.getExperience(Skills.WOODCUTTING);
  69.         } else {
  70.             log.info("Start the script AFTER logging in.");
  71.             stop();
  72.         }
  73.     }
  74.  
  75.     private class Urn extends Strategy implements Task {
  76.  
  77.         @Override
  78.         public boolean validate() {
  79.             return Inventory.getCount(20318) > 0;
  80.         }
  81.  
  82.         @Override
  83.         public void run() {
  84.             while (!Inventory.getItem(20318).getWidgetChild()
  85.                     .interact("Teleport")) {
  86.                 Time.sleep(Random.nextInt(80, 120));
  87.             }
  88.             status = "teleporting urn";
  89.             Time.sleep(Random.nextInt(300, 400));
  90.             if (Widgets.get(905, 14).validate()) {
  91.                 while (!Widgets.get(905, 14).interact("Teleport all")) {
  92.                     Time.sleep(Random.nextInt(80, 120));
  93.                 }
  94.                 Time.sleep(Random.nextInt(300, 400));
  95.             }
  96.         }
  97.     }
  98.  
  99.     private class Nest extends Strategy implements Task {
  100.  
  101.         @Override
  102.         public boolean validate() {
  103.             return getNest() != null && getNest().isOnScreen();
  104.         }
  105.  
  106.         @Override
  107.         public void run() {
  108.             status = "taking nest";
  109.             while (!getNest().interact("Take", "Bird's nest")) {
  110.                 Time.sleep(Random.nextInt(80, 120));
  111.             }
  112.             nests++;
  113.         }
  114.     }
  115.  
  116.     private class Chop extends Strategy implements Task {
  117.  
  118.         @Override
  119.         public boolean validate() {
  120.             return Players.getLocal().getAnimation() == -1
  121.                     && Inventory.getCount() != 28
  122.                     && Inventory.getCount(20318) == 0;
  123.         }
  124.  
  125.         @Override
  126.         public void run() {
  127.             if (Tabs.getCurrent() != Tabs.INVENTORY) {
  128.                 Tabs.INVENTORY.open();
  129.                 Time.sleep(Random.nextInt(100, 200));
  130.             }
  131.             while (!getPine().interact("Chop down")) {
  132.                 Time.sleep(Random.nextInt(80, 120));
  133.             }
  134.             status = "chopping";
  135.             Time.sleep(Random.nextInt(1000, 1200));
  136.         }
  137.     }
  138.  
  139.     private class Walker extends Strategy implements Task {
  140.  
  141.         @Override
  142.         public boolean validate() {
  143.             return startTile != null
  144.                     && Calculations.distance(startTile, Players.getLocal()
  145.                             .getLocation()) > 8;
  146.         }
  147.  
  148.         @Override
  149.         public void run() {
  150.             Walking.findPath(startTile).traverse();
  151.         }
  152.     }
  153.  
  154.     private class Dropper extends Strategy implements Task {
  155.  
  156.         @Override
  157.         public boolean validate() {
  158.             return Inventory.getCount() == 28;
  159.         }
  160.  
  161.         @Override
  162.         public void run() {
  163.             for (Item i : Inventory.getItems()) {
  164.                 if (i.getId() == 10810) {
  165.                     WidgetChild item = i.getWidgetChild();
  166.                     Mouse.hop(item.getAbsoluteX() + Random.nextInt(1, 5),
  167.                             item.getAbsoluteY() + Random.nextInt(1, 5));
  168.                     Mouse.click(false);
  169.                     while (!Menu.isOpen()) {
  170.                         Time.sleep(Random.nextInt(1, 20));
  171.                     }
  172.                     Menu.select("Drop");
  173.                 }
  174.             }
  175.         }
  176.     }
  177.  
  178.     private class Antiban extends Strategy implements Task {
  179.  
  180.         @Override
  181.         public boolean validate() {
  182.             return true;
  183.         }
  184.  
  185.         @Override
  186.         public void run() {
  187.             if (Random.nextInt(1, 250) < 14) {
  188.                 executeAntiban();
  189.             }
  190.             Time.sleep(Random.nextInt(1000, 2000));
  191.         }
  192.  
  193.         public void executeAntiban() {
  194.             int dx, dy;
  195.             int r = Random.nextInt(0, 5);
  196.             switch (r) {
  197.             case 0:
  198.             case 1:
  199.                 status = "moving camera";
  200.                 Camera.setAngle(Random.nextInt(20, 300));
  201.                 break;
  202.             case 2:
  203.             case 3:
  204.                 status = "moving mouse";
  205.                 dx = Random.nextInt(-30, 30);
  206.                 dy = Random.nextInt(-30, 30);
  207.                 Mouse.move(Mouse.getX() + dx, Mouse.getY() + dy);
  208.                 Time.sleep(Random.nextInt(20, 150));
  209.                 break;
  210.             case 4:
  211.                 status = "checking player";
  212.                 Player player = Players.getNearest(new Filter<Player>() {
  213.                     @Override
  214.                     public boolean accept(Player p) {
  215.                         return !p.equals(Players.getLocal());
  216.                     }
  217.                 });
  218.                 if (player != null) {
  219.                     player.click(false);
  220.                     Time.sleep(Random.nextInt(400, 1000));
  221.                     dx = Random.nextInt(-16, 16);
  222.                     dy = Random.nextInt(-60, -20);
  223.                     Mouse.move(Mouse.getX() + dx, Mouse.getY() + dy);
  224.                 }
  225.                 Time.sleep(Random.nextInt(20, 150));
  226.                 break;
  227.             case 5:
  228.                 status = "random examine";
  229.                 for (SceneObject random : SceneEntities
  230.                         .getLoaded(new Filter<SceneObject>() {
  231.                             @Override
  232.                             public boolean accept(SceneObject obj) {
  233.                                 return obj != null
  234.                                         && obj.isOnScreen()
  235.                                         && Calculations.distance(Players
  236.                                                 .getLocal().getLocation(), obj
  237.                                                 .getLocation()) < 8;
  238.                             }
  239.                         })) {
  240.                     while (!random.interact("Examine")) {
  241.                         Time.sleep(Random.nextInt(80, 120));
  242.                     }
  243.                     Time.sleep(Random.nextInt(300, 400));
  244.                 }
  245.                 break;
  246.             }
  247.             status = "chopping";
  248.         }
  249.     }
  250.  
  251.     private AlphaComposite makeComposite(float alpha) {
  252.         int type = AlphaComposite.SRC_OVER;
  253.         return (AlphaComposite.getInstance(type, alpha));
  254.     }
  255.  
  256.     @Override
  257.     public void onRepaint(Graphics g) {
  258.         Graphics2D g2d = (Graphics2D) g;
  259.  
  260.         Font title = new Font("Monotype Corsiva", Font.PLAIN, 25);
  261.         Font author = new Font("Monotype Corsiva", Font.PLAIN, 16);
  262.         Font info = new Font("Book Antiqua", Font.PLAIN, 15);
  263.  
  264.         Rectangle bg = new Rectangle(10, 23, 236, 150);
  265.         Rectangle border = new Rectangle(8, 21, 240, 154);
  266.         g2d.setColor(Color.DARK_GRAY);
  267.         g2d.setComposite(makeComposite(0.5f));
  268.         g2d.fill(bg);
  269.         g2d.setColor(Color.BLACK);
  270.         g2d.fill(border);
  271.         g2d.setComposite(makeComposite(1.0f));
  272.  
  273.         g2d.setColor(Color.WHITE);
  274.  
  275.         g2d.fill(new Rectangle(Mouse.getX() + 1, Mouse.getY() - 4, 2, 15));
  276.         g2d.fill(new Rectangle(Mouse.getX() - 6, Mouse.getY() + 2, 16, 2));
  277.  
  278.         int expGained = Skills.getExperiences()[Skills.WOODCUTTING] - startXp;
  279.         int expHour = (int) ((expGained) * 3600000D / (System
  280.                 .currentTimeMillis() - startTime));
  281.         int cutHour = (int) ((chopped) * 3600000D / (System.currentTimeMillis() - startTime));
  282.         g2d.setFont(title);
  283.         g2d.drawString("iTArcticPines", 12, 43);
  284.         g2d.setFont(author);
  285.         g2d.drawString("By: Flow_HRS", 12, 58);
  286.  
  287.         g2d.setFont(info);
  288.         g2d.drawString(
  289.                 "WCing: "
  290.                         + Skills.getLevels()[Skills.WOODCUTTING]
  291.                         + "(+"
  292.                         + (Skills.getLevels()[Skills.WOODCUTTING] - startLevel)
  293.                         + "). TTL: "
  294.                         + getTimeTillLevel(Skills.WOODCUTTING, expGained,
  295.                                 expHour) + " ("
  296.                         + getPercentToNextLevel(Skills.WOODCUTTING) + "%).",
  297.                 12, 78);
  298.         g2d.drawString("WC XP gained: " + expGained + ". (" + expHour + "/h)",
  299.                 12, 93);
  300.         g2d.drawString("Chopped " + chopped + " pines.", 12, 108);
  301.         g2d.drawString("Chopping " + cutHour + " pines per hour.", 12, 123);
  302.         g2d.drawString("Nests: " + nests + ".", 12, 138);
  303.         g2d.drawString("Status: " + status + ".", 12, 153);
  304.         g2d.drawString("Time running: "
  305.                 + formatTime(System.currentTimeMillis() - startTime) + ".", 12,
  306.                 168);
  307.         drawTile(g2d, Players.getLocal().getLocation(), Color.GREEN);
  308.     }
  309.  
  310.     private String formatTime(final long milliseconds) {
  311.         final long t_seconds = milliseconds / 1000;
  312.         final long t_minutes = t_seconds / 60;
  313.         final long t_hours = t_minutes / 60;
  314.         final long seconds = t_seconds % 60;
  315.         final long minutes = t_minutes % 60;
  316.         final long hours = t_hours % 500;
  317.         return hours + ":" + minutes + ":" + seconds;
  318.     }
  319.  
  320.     public void drawTile(Graphics2D g, Tile tile, Color col) {
  321.         for (Polygon poly : tile.getBounds()) {
  322.             boolean drawThisOne = true;
  323.             for (int i = 0; i < poly.npoints; i++) {
  324.                 Point p = new Point(poly.xpoints[i], poly.ypoints[i]);
  325.                 if (!Calculations.isOnScreen(p)) {
  326.                     drawThisOne = false;
  327.                 }
  328.             }
  329.             if (drawThisOne) {
  330.                 Color col2 = new Color(col.getRed(), col.getGreen(),
  331.                         col.getBlue(), 80);
  332.                 g.setColor(col2);
  333.                 g.fillPolygon(poly);
  334.                 g.setColor(col);
  335.                 g.drawPolygon(poly);
  336.             }
  337.         }
  338.     }
  339.  
  340.     private String getTimeTillLevel(int skill, int expGained, int expPerHour) {
  341.         int currentLevel = Skills.getLevel(skill);
  342.         if (currentLevel == 99) {
  343.             return "n/a";
  344.         }
  345.         int expTillNextLevel = Skills.getExperienceToLevel(skill,
  346.                 currentLevel + 1);
  347.         if (expGained > 0) {
  348.             return Time.format((long) ((double) expTillNextLevel
  349.                     / (double) expPerHour * 3600000));
  350.         }
  351.         return "0:0:0";
  352.     }
  353.  
  354.     private int getPercentToNextLevel(int index) {
  355.         int lvl = Skills.getRealLevel(index);
  356.         if (lvl == 99 || Skills.getLevel(Skills.WOODCUTTING) == 99) {
  357.             return 100;
  358.         }
  359.         int xpTotal = Skills.XP_TABLE[lvl + 1] - Skills.XP_TABLE[lvl];
  360.         if (xpTotal == 0) {
  361.             return 0;
  362.         }
  363.         int xpDone = Skills.getExperience(index) - Skills.XP_TABLE[lvl];
  364.         return 100 * xpDone / xpTotal;
  365.     }
  366.  
  367.     @Override
  368.     public void messageReceived(MessageEvent arg0) {
  369.         String msg = arg0.getMessage();
  370.         if (msg.contains("arctic pine logs")) {
  371.             chopped++;
  372.         }
  373.     }
  374.  
  375.     private SceneObject getPine() {
  376.         return SceneEntities.getNearest(new Filter<SceneObject>() {
  377.             @Override
  378.             public boolean accept(SceneObject obj) {
  379.                 return obj.getId() == 70057;
  380.             }
  381.         });
  382.     }
  383.  
  384.     private GroundItem getNest() {
  385.         return GroundItems.getNearest(new Filter<GroundItem>() {
  386.             public boolean accept(GroundItem grounditem) {
  387.                 Arrays.sort(BIRD_NESTS);
  388.                 return Arrays.binarySearch(BIRD_NESTS, grounditem
  389.                         .getGroundItem().getId()) >= 0;
  390.             }
  391.         });
  392.     }
  393. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement