import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import org.rsbot.event.events.MessageEvent; import org.rsbot.event.listeners.MessageListener; import org.rsbot.event.listeners.PaintListener; import org.rsbot.script.Script; import org.rsbot.script.ScriptManifest; import org.rsbot.script.util.Filter; import org.rsbot.script.wrappers.RSObject; import org.rsbot.script.wrappers.RSTile; import org.rsbot.script.wrappers.RSTilePath; import java.awt.*; import javax.imageio.ImageIO; import java.io.IOException; import java.net.URL; @ScriptManifest( authors = {"RuNnNy"}, version = 1.0, keywords = {"mining", "banking", "money", "mithril", "coal"}, description = "RuNnNy_Mithril_CoalMiner, by RuNnNy", name = "RuNnNy_Mithril_CoalMiner" ) public class RuNnNy_Mithril_CoalMiner extends Script implements PaintListener, MessageListener { ScriptManifest props = getClass().getAnnotation(ScriptManifest.class); public int depositBoxID = 25937; public int[] oreIDs = new int[]{32439, 32440, 32438, 32426, 32427, 32428}; public int miningAnimation = 624; RSTile[] tilesToDepositbox = {new RSTile (1066, 4573), new RSTile (1054, 4574), new RSTile (1045, 4573), new RSTile (1043, 4578)}; RSTilePath pathToDepositbox; long startTime; int expGained = 0; int startExp = 0; int oresMined = 0; public boolean onStart() { pathToDepositbox = walking.newTilePath(tilesToDepositbox); startTime = System.currentTimeMillis(); startExp = skills.getCurrentExp(skills.MINING); return true; } @Override public int loop() { if (inventory.isFull()) { if (atBank()) { // doBank(); useDepositBox(); } else { walk(); } } else { if(atMine()) { mineOres(); }else{ walkR(); } } antiBan(); return random(600, 800); } private void mineOres() { RSObject rock = objects.getNearest(oreIDs); if (getMyPlayer().getAnimation() != miningAnimation) { rock.doAction ("Mine"); // if (random(1,15) == 7) antiBan(); } antiBan(); sleep (1200, 2000); } private void walkR() { pathToDepositbox.reverse(); pathToDepositbox.traverse(); pathToDepositbox.reverse(); } private void walk() { pathToDepositbox.traverse(); // if(random(0, 20) == 10) antiBan(); } public void onFinsih() { log ("Thank you for using " + props.name() + " v" + props.version() + "!"); } private boolean atBank() { RSObject bank = objects.getNearest(depositBoxID); if(bank !=null) { if(bank.isOnScreen()) { return true; } } return false; } private boolean atMine() { RSObject ore = objects.getNearest(oreIDs); if (ore != null) { if (ore.isOnScreen()) { return true; } } return false; } //START: Code generated using Enfilade's Easel private Image getImage(String url) { try { return ImageIO.read(new URL(url)); } catch(IOException e) { return null; } } private final Color color1 = new Color(0, 0, 255, 133); private final Color color2 = new Color(0, 0, 0); private final Color color3 = new Color(0, 0, 0, 202); private final BasicStroke stroke1 = new BasicStroke(1); private final Font font1 = new Font("Impact", 1, 20); private final Font font2 = new Font("Georgia", 0, 15); private final Font font3 = new Font("SimSun", 0, 13); private final Image img1 = getImage("http://images1.wikia.nocookie.net/__cb20100917030156/runescape/images/8/80/Mining_Detail.PNG"); private void openDepositBox(){ RSObject bankDepositBox = objects.getNearest(depositBoxID); if (bankDepositBox != null && !bank.isOpen()) { bankDepositBox.doAction("deposit"); } } private void doBank() { /*if(bank.isDepositOpen()) { bank.depositAll(); sleep(800, 1200); } else { bank.openDepositBox(); sleep(1800, 2200); }*/ /*Filter depBox = new Filter() { public boolean accept(RSObject rso) { return rso != null && rso.getID() == depositBoxID; } };*/ } public void useDepositBox() { RSObject bankDepositBox = objects.getNearest(depositBoxID); if (bankDepositBox != null) { bankDepositBox.doAction("Deposit"); bank.depositAll(); /*bank.*/ sleep (3000, 4000); mouse.move(random(335, 360), random(265, 285)); mouse.click(true); bank.close(); } } @Override public void onRepaint(Graphics g1) { expGained = skills.getCurrentExp(skills.MINING) - startExp; long millis = System.currentTimeMillis() - startTime; long hours = millis / (1000 * 60 * 60); millis -= hours * (1000 * 60 *60); long minutes = millis / (1000 * 60); millis -= minutes * (1000 * 60); long seconds = millis / 1000; float xpsec = 0; if ((minutes > 0 || hours > 0 || seconds > 0) && expGained > 0) { xpsec = ((float) expGained)/(float)(seconds + (minutes*60)+ (hours*60*60)); } float xpmin = xpsec * 60; float xphour = xpmin * 60; float oresec = 0; if ((minutes > 0 || hours > 0 || seconds > 0) && oresMined > 0) { oresec = ((float) oresMined)/(float)(seconds + (minutes*60)+ (hours*60*60)); } float oremin = oresec * 60; float orehour = oremin * 60; Graphics2D g = (Graphics2D)g1; g.setColor(color1); g.fillRect(6, 345, 489, 230); g.setColor(color2); g.setStroke(stroke1); g.drawRect(6, 345, 489, 230); g.setFont(font1); g.setColor(color3); g.drawString("RuNnNy_Mithril_CoalMiner V" + props.version(), 27, 374); g.setFont(font2); g.drawString("Runtime:" + hours + ":" + minutes + ":" + seconds , 252, 398); g.drawString("Experience gained: " + expGained + " Exp/h: " + (int)xphour, 253, 422); g.drawString("Ores mined: " + oresMined + " Ores/h: " + (int)orehour, 253, 448); g.setFont(font3); g.drawString("Made by RuNnNy", 393, 470); g.drawImage(img1, 439, 351, null); } //END: Code generated using Enfilade's Easel @Override public void messageReceived(MessageEvent e) { String txt = e.getMessage(); if(txt.contains("You manage to mine")) { oresMined++; } } private void antiBan () { int r = random(0, 50); switch(r) { case 1: game.openTab(game.TAB_STATS); break; case 2: game.openTab(game.TAB_FRIENDS); break; case 4: game.openTab(game.TAB_EQUIPMENT); break; case 3: mouse.moveSlightly(); sleep(500, 800); break; case 7: mouse.moveRandomly(10, 50); break; case 16: mouse.moveOffScreen(); sleep(2000, 3000); break; case 18: camera.moveRandomly(random(750, 1250)); break; } } }