Advertisement
phl0w

iTHerbCleaner

Jun 2nd, 2012
621
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.79 KB | None | 0 0
  1. import java.awt.AlphaComposite;
  2. import java.awt.Color;
  3. import java.awt.Dimension;
  4. import java.awt.Font;
  5. import java.awt.Graphics;
  6. import java.awt.Graphics2D;
  7. import java.awt.Rectangle;
  8. import java.awt.Toolkit;
  9.  
  10. import org.powerbot.concurrent.Task;
  11. import org.powerbot.concurrent.strategy.Strategy;
  12. import org.powerbot.game.api.ActiveScript;
  13. import org.powerbot.game.api.Manifest;
  14. import org.powerbot.game.api.methods.Tabs;
  15. import org.powerbot.game.api.methods.Widgets;
  16. import org.powerbot.game.api.methods.input.Mouse;
  17. import org.powerbot.game.api.methods.tab.Inventory;
  18. import org.powerbot.game.api.methods.tab.Skills;
  19. import org.powerbot.game.api.methods.widget.Bank;
  20. import org.powerbot.game.api.util.Random;
  21. import org.powerbot.game.api.util.Time;
  22. import org.powerbot.game.api.wrappers.node.Item;
  23. import org.powerbot.game.bot.event.MessageEvent;
  24. import org.powerbot.game.bot.event.listener.MessageListener;
  25. import org.powerbot.game.bot.event.listener.PaintListener;
  26.  
  27. import javax.swing.JFrame;
  28. import javax.swing.JSlider;
  29. import javax.swing.SwingUtilities;
  30. import javax.swing.UnsupportedLookAndFeelException;
  31.  
  32. @Manifest(authors = { "Flow", "BeeStar" }, name = "iTHerbCleaner", description = "Cleans your grimy herbs.", version = 1.4)
  33. public class iTHerbCleaner extends ActiveScript implements MessageListener,
  34.         PaintListener {
  35.  
  36.     private int selectedHerb = 0, cleans = 0, sleep = 200, startXp, startLevel;
  37.     private boolean guiInitialized;
  38.     private long startTime;
  39.     private String status;
  40.     boolean done;
  41.  
  42.     @Override
  43.     protected void setup() {
  44.         SwingUtilities.invokeLater(new Runnable() {
  45.             @Override
  46.             public void run() {
  47.                 JFrame gui = new GUI();
  48.                 gui.setVisible(true);
  49.             }
  50.         });
  51.  
  52.         provide(new Clean());
  53.         provide(new Banking());
  54.         provide(new CloseBank());
  55.         provide(new OpenBank());
  56.  
  57.         startXp = Skills.getExperience(Skills.HERBLORE);
  58.         startLevel = Skills.getLevel(Skills.HERBLORE);
  59.         startTime = System.currentTimeMillis();
  60.     }
  61.  
  62.     private int getHerbForName(String herb) {
  63.         Object[][] data = { { 199, "Guam" }, { 201, "Marrentil" },
  64.                 { 203, "Tarromin" }, { 205, "Harralander" }, { 207, "Ranarr" },
  65.                 { 209, "Irit" }, { 211, "Avantoe" }, { 213, "Kwuarm" },
  66.                 { 215, "Cadantine" }, { 2485, "Lantadyme" },
  67.                 { 217, "Dwarf Weed" }, { 221, "Torstol" },
  68.                 { 3049, "Toadflax" }, { 12174, "Spirit Weed" },
  69.                 { 14836, "Wergali" }, { 3051, "Snapdragon" },
  70.                 { 21626, "Fellstalk" } };
  71.         for (int i = 0; i < data.length; i++) {
  72.             if (data[i][1].equals(herb)) {
  73.                 return (Integer) data[i][0];
  74.             }
  75.         }
  76.         return -1;
  77.     }
  78.  
  79.     private AlphaComposite makeComposite(float alpha) {
  80.         int type = AlphaComposite.SRC_OVER;
  81.         return (AlphaComposite.getInstance(type, alpha));
  82.     }
  83.  
  84.     @Override
  85.     public void onRepaint(Graphics g) {
  86.         Graphics2D g2d = (Graphics2D) g;
  87.  
  88.         Font title = new Font("Monotype Corsiva", Font.PLAIN, 25);
  89.         Font author = new Font("Monotype Corsiva", Font.PLAIN, 16);
  90.         Font info = new Font("Book Antiqua", Font.PLAIN, 15);
  91.  
  92.         Rectangle bg = new Rectangle(10, 23, 250, 155);
  93.         Rectangle border = new Rectangle(8, 21, 254, 159);
  94.         g2d.setColor(Color.RED);
  95.         g2d.setComposite(makeComposite(0.5f));
  96.         g2d.fill(bg);
  97.         g2d.setColor(Color.BLACK);
  98.         g2d.fill(border);
  99.         g2d.setComposite(makeComposite(1.0f));
  100.  
  101.         g2d.setColor(Color.WHITE);
  102.  
  103.         g2d.fill(new Rectangle(Mouse.getX() + 1, Mouse.getY() - 4, 2, 15));
  104.         g2d.fill(new Rectangle(Mouse.getX() - 6, Mouse.getY() + 2, 16, 2));
  105.  
  106.         int expGained = Skills.getExperiences()[Skills.HERBLORE] - startXp;
  107.         int expHour = (int) ((expGained) * 3600000D / (System
  108.                 .currentTimeMillis() - startTime));
  109.         int madeHour = (int) ((cleans) * 3600000D / (System.currentTimeMillis() - startTime));
  110.         g2d.setFont(title);
  111.         g2d.drawString("iTHerbCleaner", 20, 50);
  112.         g2d.setFont(author);
  113.         g2d.drawString("By: Flow_HRS", 20, 65);
  114.  
  115.         g2d.setFont(info);
  116.         g2d.drawString("Herblore level: " + Skills.getLevels()[Skills.HERBLORE]
  117.                 + "/" + startLevel + ".", 20, 85);
  118.         g2d.drawString("Herblore experience gained: " + expGained + ".", 20,
  119.                 100);
  120.         g2d.drawString("Herblore experience/hour: " + expHour + ".", 20, 115);
  121.         g2d.drawString("Successfully cleaned " + cleans + " herbs.", 20, 130);
  122.         g2d.drawString("Cleaning " + madeHour + " herbs per hour.", 20, 145);
  123.         g2d.drawString("Status: " + status + ".", 20, 160);
  124.         g2d.drawString(
  125.                 "Time running: "
  126.                         + Time.format(System.currentTimeMillis() - startTime)
  127.                         + ".", 20, 175);
  128.     }
  129.  
  130.     @Override
  131.     public void messageReceived(MessageEvent arg0) {
  132.         String msg = arg0.getMessage();
  133.         if (msg.contains("clean the dirt")) {
  134.             cleans++;
  135.         }
  136.     }
  137.  
  138.     private class Clean extends Strategy implements Task {
  139.         @Override
  140.         public boolean validate() {
  141.             return guiInitialized && Inventory.getCount(selectedHerb) > 0
  142.                     && !Bank.isOpen();
  143.         }
  144.  
  145.         @Override
  146.         public void run() {
  147.             status = "cleaning";
  148.             int count = Inventory.getCount(selectedHerb);
  149.             int[] path = { 0, 4, 8, 12, 16, 20, 24, 25, 21, 17, 13, 9, 1, 5, 2,
  150.                     6, 10, 14, 18, 22, 26, 27, 23, 19, 15, 11, 7, 3 };
  151.             for (int slot = 0; slot < path.length; slot++) {
  152.                 Item item = Inventory.getItemAt(path[slot]);
  153.                 if (item.getId() == selectedHerb) {
  154.                     Mouse.hop(
  155.                             item.getWidgetChild().getAbsoluteX()
  156.                                     + Random.nextInt(0, 12),
  157.                             item.getWidgetChild().getAbsoluteY()
  158.                                     + Random.nextInt(0, 12));
  159.                     Mouse.click(true);
  160.                     count--;
  161.                     Time.sleep(count == 0 ? 200 : sleep);
  162.                 }
  163.                 done = true;
  164.             }
  165.         }
  166.     }
  167.  
  168.     private class CloseBank extends Strategy implements Task {
  169.  
  170.         @Override
  171.         public boolean validate() {
  172.             return guiInitialized && Bank.isOpen() && done == false;
  173.         }
  174.  
  175.         @Override
  176.         public void run() {
  177.             while (!Bank.close()) {
  178.                 Time.sleep(Random.nextInt(80, 120));
  179.             }
  180.             if (Inventory.getCount(selectedHerb) == 0) {
  181.                 stop();
  182.             }
  183.         }
  184.     }
  185.  
  186.     private class OpenBank extends Strategy implements Task {
  187.  
  188.         @Override
  189.         public boolean validate() {
  190.             return guiInitialized && done == true && !Bank.isOpen();
  191.         }
  192.  
  193.         @Override
  194.         public void run() {
  195.             if (Tabs.getCurrent() != Tabs.INVENTORY) {
  196.                 Tabs.INVENTORY.open();
  197.             }
  198.             while (!Bank.open()) {
  199.                 Time.sleep(Random.nextInt(80, 120));
  200.             }
  201.         }
  202.     }
  203.  
  204.     private class Banking extends Strategy implements Task {
  205.  
  206.         @Override
  207.         public boolean validate() {
  208.             return guiInitialized && done == true
  209.                     && Widgets.get(762, 1).validate();
  210.         }
  211.  
  212.         @Override
  213.         public void run() {
  214.             if (Inventory.getCount() != 0) {
  215.                 while (!Bank.depositInventory()) {
  216.                     Time.sleep(Random.nextInt(80, 120));
  217.                 }
  218.             }
  219.             Bank.withdraw(selectedHerb, 0);
  220.             done = false;
  221.             Time.sleep(Random.nextInt(30, 110));
  222.         }
  223.     }
  224.  
  225.     public class GUI extends javax.swing.JFrame {
  226.  
  227.         private static final long serialVersionUID = 1L;
  228.  
  229.         public GUI() {
  230.             initComponents();
  231.         }
  232.  
  233.         private void initComponents() {
  234.  
  235.             Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
  236.             int w = getSize().width;
  237.             int h = getSize().height;
  238.             int x = (dim.width - w) / 2;
  239.             int y = (dim.height - h) / 2;
  240.             setLocation(x, y);
  241.             try {
  242.                 for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager
  243.                         .getInstalledLookAndFeels()) {
  244.                     if ("Nimbus".equals(info.getName())) {
  245.                         javax.swing.UIManager.setLookAndFeel(info
  246.                                 .getClassName());
  247.                         break;
  248.                     }
  249.                 }
  250.             } catch (UnsupportedLookAndFeelException e) {
  251.  
  252.             } catch (ClassNotFoundException e) {
  253.  
  254.             } catch (InstantiationException e) {
  255.  
  256.             } catch (IllegalAccessException e) {
  257.  
  258.             }
  259.             jLabel1 = new javax.swing.JLabel();
  260.             jComboBox1 = new javax.swing.JComboBox();
  261.             jLabel2 = new javax.swing.JLabel();
  262.             jSlider1 = new javax.swing.JSlider();
  263.             jLabel3 = new javax.swing.JLabel();
  264.             jButton1 = new javax.swing.JButton();
  265.             jLabel4 = new javax.swing.JLabel();
  266.  
  267.             setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
  268.             setTitle("CleanHerb V1.3");
  269.  
  270.             jLabel1.setText("Select herb:");
  271.  
  272.             jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(
  273.                     new String[] { "Guam", "Marrentil", "Tarromin",
  274.                             "Harralander", "Ranarr", "Toadflax", "Spirit Weed",
  275.                             "Irit", "Wergali", "Avantoe", "Kwuarm",
  276.                             "Snapdragon", "Cadantine", "Lantadyme",
  277.                             "Dwarf Weed", "Torstol", "Fellstalk" }));
  278.  
  279.             jLabel2.setText("Select sleep time:");
  280.  
  281.             jSlider1.setMinimum(20);
  282.             jSlider1.setMaximum(1000);
  283.             jSlider1.setToolTipText("");
  284.             jSlider1.setValue(200);
  285.             jSlider1.addChangeListener(new javax.swing.event.ChangeListener() {
  286.                 public void stateChanged(javax.swing.event.ChangeEvent evt) {
  287.                     jSlider1StateChanged(evt);
  288.                 }
  289.             });
  290.  
  291.             jLabel3.setText("Start " + "@ SW/CW/Duel Arena/Lumb Underground");
  292.  
  293.             jButton1.setText("Start!");
  294.             jButton1.addActionListener(new java.awt.event.ActionListener() {
  295.                 public void actionPerformed(java.awt.event.ActionEvent evt) {
  296.                     jButton1ActionPerformed(evt);
  297.                 }
  298.             });
  299.  
  300.             jLabel4.setText("200 (ms)");
  301.  
  302.             javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
  303.                     getContentPane());
  304.             getContentPane().setLayout(layout);
  305.             layout.setHorizontalGroup(layout
  306.                     .createParallelGroup(
  307.                             javax.swing.GroupLayout.Alignment.LEADING)
  308.                     .addGroup(
  309.                             layout.createSequentialGroup()
  310.                                     .addContainerGap()
  311.                                     .addGroup(
  312.                                             layout.createParallelGroup(
  313.                                                     javax.swing.GroupLayout.Alignment.LEADING)
  314.                                                     .addGroup(
  315.                                                             javax.swing.GroupLayout.Alignment.TRAILING,
  316.                                                             layout.createSequentialGroup()
  317.                                                                     .addGap(0,
  318.                                                                             0,
  319.                                                                             Short.MAX_VALUE)
  320.                                                                     .addComponent(
  321.                                                                             jComboBox1,
  322.                                                                             javax.swing.GroupLayout.PREFERRED_SIZE,
  323.                                                                             125,
  324.                                                                             javax.swing.GroupLayout.PREFERRED_SIZE)
  325.                                                                     .addGap(83,
  326.                                                                             83,
  327.                                                                             83))
  328.                                                     .addGroup(
  329.                                                             layout.createSequentialGroup()
  330.                                                                     .addGroup(
  331.                                                                             layout.createParallelGroup(
  332.                                                                                     javax.swing.GroupLayout.Alignment.LEADING)
  333.                                                                                     .addGroup(
  334.                                                                                             layout.createParallelGroup(
  335.                                                                                                     javax.swing.GroupLayout.Alignment.TRAILING,
  336.                                                                                                     false)
  337.                                                                                                     .addComponent(
  338.                                                                                                             jButton1,
  339.                                                                                                             javax.swing.GroupLayout.DEFAULT_SIZE,
  340.                                                                                                             javax.swing.GroupLayout.DEFAULT_SIZE,
  341.                                                                                                             Short.MAX_VALUE)
  342.                                                                                                     .addComponent(
  343.                                                                                                             jLabel1,
  344.                                                                                                             javax.swing.GroupLayout.Alignment.LEADING)
  345.                                                                                                     .addGroup(
  346.                                                                                                             javax.swing.GroupLayout.Alignment.LEADING,
  347.                                                                                                             layout.createSequentialGroup()
  348.                                                                                                                     .addComponent(
  349.                                                                                                                             jLabel2)
  350.                                                                                                                     .addGap(18,
  351.                                                                                                                             18,
  352.                                                                                                                             18)
  353.                                                                                                                     .addComponent(
  354.                                                                                                                             jLabel4))
  355.                                                                                                     .addComponent(
  356.                                                                                                             jSlider1,
  357.                                                                                                             javax.swing.GroupLayout.DEFAULT_SIZE,
  358.                                                                                                             javax.swing.GroupLayout.DEFAULT_SIZE,
  359.                                                                                                             Short.MAX_VALUE))
  360.                                                                                     .addGroup(
  361.                                                                                             layout.createSequentialGroup()
  362.                                                                                                     .addGap(40,
  363.                                                                                                             40,
  364.                                                                                                             40)
  365.                                                                                                     .addComponent(
  366.                                                                                                             jLabel3)))
  367.                                                                     .addContainerGap()))));
  368.             layout.setVerticalGroup(layout
  369.                     .createParallelGroup(
  370.                             javax.swing.GroupLayout.Alignment.LEADING)
  371.                     .addGroup(
  372.                             layout.createSequentialGroup()
  373.                                     .addContainerGap()
  374.                                     .addComponent(jLabel1)
  375.                                     .addPreferredGap(
  376.                                             javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  377.                                     .addComponent(
  378.                                             jComboBox1,
  379.                                             javax.swing.GroupLayout.PREFERRED_SIZE,
  380.                                             javax.swing.GroupLayout.DEFAULT_SIZE,
  381.                                             javax.swing.GroupLayout.PREFERRED_SIZE)
  382.                                     .addPreferredGap(
  383.                                             javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  384.                                     .addGroup(
  385.                                             layout.createParallelGroup(
  386.                                                     javax.swing.GroupLayout.Alignment.BASELINE)
  387.                                                     .addComponent(jLabel2)
  388.                                                     .addComponent(jLabel4))
  389.                                     .addPreferredGap(
  390.                                             javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  391.                                     .addComponent(
  392.                                             jSlider1,
  393.                                             javax.swing.GroupLayout.PREFERRED_SIZE,
  394.                                             javax.swing.GroupLayout.DEFAULT_SIZE,
  395.                                             javax.swing.GroupLayout.PREFERRED_SIZE)
  396.                                     .addPreferredGap(
  397.                                             javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  398.                                     .addComponent(jLabel3)
  399.                                     .addPreferredGap(
  400.                                             javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  401.                                     .addComponent(jButton1)
  402.                                     .addContainerGap(
  403.                                             javax.swing.GroupLayout.DEFAULT_SIZE,
  404.                                             Short.MAX_VALUE)));
  405.             pack();
  406.         }
  407.  
  408.         private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
  409.             guiInitialized = true;
  410.             selectedHerb = getHerbForName(jComboBox1.getSelectedItem()
  411.                     .toString());
  412.             this.setVisible(false);
  413.             this.dispose();
  414.         }
  415.  
  416.         private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {
  417.             JSlider source = (JSlider) evt.getSource();
  418.             sleep = source.getValue();
  419.             jLabel4.setText(Integer.toString(sleep) + " (ms)");
  420.         }
  421.  
  422.         private javax.swing.JButton jButton1;
  423.         private javax.swing.JComboBox jComboBox1;
  424.         private javax.swing.JLabel jLabel1;
  425.         private javax.swing.JLabel jLabel2;
  426.         private javax.swing.JLabel jLabel3;
  427.         private javax.swing.JLabel jLabel4;
  428.         private javax.swing.JSlider jSlider1;
  429.     }
  430. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement