Conderoga

CSmith

Mar 8th, 2011
97
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.awt.event.*;
  2. import java.awt.*;
  3. import java.util.*;
  4. import java.io.*;
  5. import java.net.*;
  6. import java.lang.reflect.Method;
  7. import javax.swing.*;
  8. import org.rsbot.script.*;
  9. import org.rsbot.script.methods.Game;
  10. import org.rsbot.script.methods.Skills;
  11. import org.rsbot.script.wrappers.*;
  12. import org.rsbot.event.events.MessageEvent;
  13. import org.rsbot.event.listeners.*;
  14. import javax.imageio.ImageIO;
  15.  
  16. @ScriptManifest(authors = { "Conderoga" }, keywords = "Smithing", name = "Conderoga's Smither", version = 2.00,description = "Fast Edgeville Gold smelter/ Cannonball maker.")
  17. /*UpdateLog:
  18. v1.00 - GUI, Paint, Edgeville only
  19. v2.00 - Revised for RSBot 2.0, added gold
  20.  
  21. */
  22.  
  23. public class CSmith extends Script implements PaintListener, MessageListener {
  24.  
  25. private boolean guiWait = true;
  26. private boolean guiExit = true;
  27. private String type = "WAITING";
  28.  
  29.  
  30. CSmithGui gui;
  31. private int steelBarID = 2353;
  32. private int goldBarID = 2357;
  33. private int coalID = 453;
  34. private int goldOreID = 444;
  35. private int cannonballID = 2;
  36. private int [] mouldID = {4};
  37.  
  38. private int steelBarValue = 0;
  39. private int goldBarValue = 0;
  40. private int goldOreValue = 0;
  41. private int goldValue = 0;
  42. private int cannonballValue = 0;
  43. private int profitMargin = 0;
  44. private int amntBalls = 0;
  45. private int amntBars = 0;
  46. private int numToMake = 1000000000;
  47.  
  48. private RSTile bankTile;
  49. private RSTile furnaceTile;
  50. private int furnaceID;
  51.  
  52. private int startLevel;
  53. private int startExp;
  54. private int expGained;
  55. private int lvlsGained;
  56. private long startTime;
  57. private double startTimeDbl;
  58. private long ExpHr;
  59. private int safety = 0;
  60. private String status;
  61. private Point p;
  62. private int tempNumSmithed = 0;
  63. private int oneTimeOnly = 0;
  64.  
  65.  
  66.  
  67.  
  68. public boolean onStart() {
  69. //Credits to Zombieknight for this:-----------------
  70. final int welcome = JOptionPane.showConfirmDialog(null,"Before using my script, would you like to thank me\nby clicking some adverts?","Welcome", JOptionPane.YES_NO_OPTION);
  71. if (welcome == 0) {
  72. final String message = "<html>Thank you for your support!<br /></html>";
  73. JOptionPane.showMessageDialog(null, message);
  74. openURL("http://adf.ly/AgSn");
  75. }
  76. //=------------------------------------------------------*/
  77. gui = new CSmithGui();
  78. gui.setVisible(true);
  79. while(guiWait)
  80. {
  81. sleep(100);
  82. }
  83. startTime = System.currentTimeMillis();
  84. startTimeDbl = System.currentTimeMillis();
  85. log("Using "+numToMake+" bars.");
  86.  
  87.  
  88.  
  89. return !guiExit;
  90. }
  91. public void startUpStuff() {
  92. status = "Retrieving prices.";
  93. if(type.equals("Cannonballs")){
  94. steelBarValue = getGEValue("Steel Bar",2353);
  95. cannonballValue = getGEValue("Cannonball",2);
  96.  
  97. profitMargin = (cannonballValue*4)-steelBarValue;
  98. }
  99. else if(type.equals("Gold")){
  100.  
  101. goldBarValue = getGEValue("Gold bar",goldBarID);
  102. goldOreValue = getGEValue("Gold ore",goldOreID);
  103.  
  104. profitMargin = goldBarValue-goldOreValue;
  105. }
  106.  
  107.  
  108. bankTile = new RSTile(3097,3495);
  109. furnaceTile = new RSTile(3110,3502);
  110. furnaceID = 26814;
  111.  
  112. startTime = System.currentTimeMillis();
  113. status = "Starting.";
  114. camera.setAngle(0);
  115. camera.setPitch(true);
  116. if(walking.getEnergy()> 15)
  117. walking.setRun(true);
  118. }
  119. public void messageReceived(final MessageEvent e) {
  120. final String serverString = e.getMessage();
  121. if (serverString.toLowerCase().contains("remove the cannonballs from the"))
  122. amntBalls+=4;
  123. else if(serverString.toLowerCase().contains("you retrieve a bar"))
  124. {
  125. amntBars++;
  126. }
  127. else if(serverString.toLowerCase().contains("2"))
  128. {
  129. amntBars++;
  130. }
  131. else if(serverString.toLowerCase().contains("3"))
  132. {
  133. amntBars++;
  134. amntBars++;
  135. }
  136. else if(serverString.toLowerCase().contains("4"))
  137. {
  138. amntBars++;
  139. amntBars++;
  140. amntBars++;
  141. }
  142. else if(serverString.toLowerCase().contains("you've just advanced"))
  143. {
  144. smith();
  145. }
  146. }
  147. public boolean checkAnim() {
  148. if(!hasBars())
  149. return false;
  150. for(int i = 0; i<5;i++){
  151.  
  152. if(getMyPlayer().getAnimation()==827||getMyPlayer().getAnimation()==899||getMyPlayer().getAnimation()==3243)
  153. { status = "Smithing.";
  154. return true;
  155. }
  156. sleep(500);
  157. }
  158. status = "Not Smithing.";
  159. return false;
  160. }
  161.  
  162. public void walkToBank()
  163. { status = "Walking to bank.";
  164. if(!walking.isRunEnabled()&&walking.getEnergy()>20){
  165. walking.setRun(true);
  166. sleep(random(600,800));
  167. }
  168. walking.walkTileMM(bankTile);
  169. sleep(random(1500,2000));
  170. while(getMyPlayer().isMoving())
  171. sleep(random(100,200));
  172. }
  173. public boolean hasBars()
  174. {
  175. RSItem [] inv = inventory.getItems();
  176. for(int i = 0; i<inv.length;i++)
  177. {
  178. if(inv[i].getID()==steelBarID&&type.equals("Cannonballs"))
  179. return true;
  180. else if(inv[i].getID()==goldOreID&&type.equals("Gold"))
  181. return true;
  182. }
  183. return false;
  184. }
  185. public void bank()
  186. {
  187. mouse.setSpeed(random(6,8));
  188. camera.setPitch(true);
  189. do{
  190. mouse.move(calc.tileToScreen(bankTile),2,2);
  191. menu.doAction("Use-quickly Bank booth");
  192. sleep(random(1000,1200));
  193. }while(!bank.isOpen());
  194.  
  195. status = "Depositing.";
  196. if(type.equals("Cannonballs"))
  197. bank.depositAllExcept(4);
  198. else
  199. bank.depositAll();
  200.  
  201. status = "Withdrawing.";
  202. sleep(random(600,800));
  203. mouse.move(55,109,5,5);
  204. mouse.click(false);
  205. sleep(random(600,800));
  206. menu.doAction("Withdraw-All");
  207.  
  208. status = "Moving to furnace.";
  209. walking.walkTileMM(new RSTile(3108,3501));
  210. sleep(random(1500,2000));
  211. while(getMyPlayer().isMoving())
  212. sleep(random(100,200));
  213. sleep(random(600,800));
  214.  
  215. }
  216. public boolean isInRoom()
  217. {
  218. return getMyPlayer().getLocation().getX()>=3106&&getMyPlayer().getLocation().getX()<=3110&&getMyPlayer().getLocation().getY()>=3498&&getMyPlayer().getLocation().getY()<=3502;
  219.  
  220. }
  221. public static int getGEValue(String name, int id){
  222. try{
  223. String [] temp = name.split(" ");
  224. String newName = "";
  225. for(int i = 0; i<temp.length; i++)
  226. if(i==temp.length-1)
  227. newName+=temp[i];
  228. else
  229. newName+="_"+temp[i];
  230. URL url = new URL("http://services.runescape.com/m=itemdb_rs/"+newName+"/viewitem.ws?obj="+id);
  231. InputStream is = url.openStream();
  232. InputStreamReader isr = new InputStreamReader(is);
  233. BufferedReader br = new BufferedReader(isr);
  234. String line;
  235. String num = "";
  236. while((line=br.readLine())!=null){
  237. if(line.contains("Current guide price:"))
  238. num = line;
  239. }
  240. System.out.println(num);
  241. if(num.length()<29)
  242. return -1;
  243. else{
  244. num = num.substring(28);
  245. num = num.replaceAll(",", "");
  246. return Integer.parseInt(num);
  247. }
  248.  
  249. }catch(Exception e){
  250. return -1;
  251. }
  252. }
  253. public void smith()
  254. { status = "Starting to Smith";
  255. if(random(1,4)==2){
  256. camera.setAngle(0);
  257. camera.setPitch(true);
  258. }
  259. mouse.move(704,445,5,5);
  260. mouse.click(true);
  261. RSObject [] test = objects.getAllAt(furnaceTile);
  262. RSObject furnace = null;
  263. for(int i = 0; i<test.length;i++)
  264. {
  265. if(test[i].getID()==furnaceID){
  266. furnace = test[i];
  267. break;
  268. }
  269. }
  270. RSModel m = furnace.getModel();
  271. Point p = m.getPoint();
  272. mouse.move(p,1,1);
  273. mouse.click(true);
  274.  
  275.  
  276. sleep(random(1500,1600));
  277. int x = (type.equals("Cannonballs")) ? random(222,293) : random(235,284);
  278. int y = (type.equals("Cannonballs")) ? random(400,450) : random(398,449);
  279. mouse.move(x,y,0,0);
  280. mouse.click(true);
  281.  
  282. sleep(random(600,800));
  283. checkAnim();
  284. }
  285. public Point midpoint(Point p1, Point p2)
  286. {
  287. Point temp = new Point((int)((p1.getX()+p2.getX())/2),(int)((p1.getY()+p2.getY())/2));
  288. return temp;
  289. }
  290. public int loop() {
  291. try{
  292.  
  293. if(safety<1)
  294. {
  295. startUpStuff();
  296. safety=1;
  297. }
  298. boolean temp = checkAnim();
  299. boolean temp2 = hasBars();
  300. if(type.equals("Cannonballs")&&amntBalls/4 >= numToMake)
  301. {
  302. log("Bar limit reached. Stopping script and logging out.");
  303. game.logout(true);
  304. stopScript();
  305. }
  306. else if(amntBars >= numToMake){
  307. log("Bar limit reached. Stopping script and logging out.");
  308. game.logout(true);
  309. stopScript();
  310. }
  311. if(!temp&&temp2)
  312. {
  313. smith();
  314. }
  315. if(!temp&&!temp2&&isInRoom())
  316. {
  317. walkToBank();
  318. bank();
  319. smith();
  320. }
  321. if(!temp&&!temp2&&!isInRoom())
  322. {
  323. bank();
  324. smith();
  325. }
  326.  
  327.  
  328.  
  329. antiBan(random(1,400));
  330. }
  331. catch (Exception e){}
  332. return random(600,800);
  333. }
  334. public void antiBan(int rand){
  335. status += "(AB)";
  336. mouse.setSpeed(random(7,8));
  337. if(rand==1)
  338. if(random(1, 8) == 2)
  339. mouse.moveRandomly(900,1200);
  340. if(rand==2)
  341. if(random(1, 8) == 2)
  342. mouse.moveRandomly(400,800);
  343. if(rand==3)
  344. if(random(1, 8) == 2)
  345. mouse.moveRandomly(200,700);
  346.  
  347. if(rand==4) //THIS CHECKS THE MINING STAT
  348. if(random(1, 6) == 2)
  349. {
  350. game.openTab(Game.TAB_STATS);
  351. sleep(random(600,800));
  352. skills.doHover(Skills.INTERFACE_SMITHING);
  353. sleep(random(1900,2000));
  354. game.openTab(Game.TAB_INVENTORY);
  355. }
  356. if(rand==5) //THIS CLICKS THE XP BUTTON UNDER THE COMPASS (Update thanks to Rawr =D)
  357. if(random(1, 24) == 2)
  358. {
  359. if (interfaces.get(548).getComponent(38).isValid()) {
  360. return;
  361. } else {
  362. if (interfaces.get(548).getComponent(0).doClick()) {
  363. sleep(1500);
  364. }
  365. }
  366. }
  367. if(rand==7) //RANDOM SPIN
  368. if(random(1, 3) == 2)
  369. {int r = random(1,2);
  370. camera.setAngle(random(1,359));
  371. if(r!=1)
  372. camera.setPitch(random(1,99));}
  373.  
  374. if(rand==8) //THIS CHECKS A RANDOM TAB
  375. if(random(1, 4) == 2)
  376. {
  377. int[] tabs = {0,2,3,5,6,7,9,10,11,12,13,14,15};
  378. game.openTab(tabs[random(0,tabs.length-1)]);
  379. mouse.moveRandomly(175,200);
  380. sleep(random(1600,1800));
  381. sleep(random(900,1000));
  382.  
  383. }
  384. if(rand==9)
  385. if(random(1,10)==2)
  386. mouse.moveOffScreen();
  387. status=status.substring(0,status.indexOf('('));
  388. }
  389. public void onRepaint(Graphics g)
  390. {
  391. if(game.isLoggedIn())
  392. {
  393. if(startExp==0)
  394. {
  395. startExp = skills.getCurrentExp(skills.getIndex("smithing"));
  396. startLevel = skills.getCurrentLevel(skills.getIndex("smithing"));
  397. }
  398.  
  399. lvlsGained = skills.getCurrentLevel(skills.getIndex("smithing")) - startLevel;
  400. expGained = skills.getCurrentExp(skills.getIndex("smithing")) - startExp;
  401.  
  402. //setting up the time
  403. long ms = System.currentTimeMillis() - startTime;
  404. double ms2 = System.currentTimeMillis() - startTimeDbl;
  405. long hours = ms/3600000;
  406. ms = ms-(hours*3600000);
  407. long minutes = ms/60000;
  408. ms = ms-(minutes*60000);
  409. long seconds = ms/1000;
  410. // |
  411. //Background v transparency!
  412. g.setColor(new Color(0, 0, 0, 205));
  413. g.fillRoundRect(333, 175, 181, 164, 6, 6); //Background
  414. long expToLvl = skills.getExpToNextLevel(skills.getIndex("smithing"));
  415. long time2Lvl = 0;
  416. long time2LvlHrs = 0;
  417. long time2LvlMins = 0;
  418. long time2LvlSec = 0;
  419. if(ms2!=0&&expGained!=0){
  420. time2Lvl = (long)(expToLvl/(expGained/(ms2/3600000))*3600000);
  421. time2LvlHrs = time2Lvl/3600000;
  422. time2Lvl -= time2LvlHrs*3600000;
  423. time2LvlMins = time2Lvl/60000;
  424. time2Lvl -= time2LvlMins*60000;
  425. time2LvlSec = time2Lvl/1000;
  426. }
  427. //Text Color and Output
  428. g.setColor(new Color(255,0,0,255));
  429. g.setFont(new Font("Comic Sans MS", Font.PLAIN, 12));
  430. g.drawString("Conderoga's Smither v2.00",338,192);
  431. g.setFont(new Font("Comic Sans MS", Font.PLAIN, 11));
  432. g.drawString("Levels Gained: "+lvlsGained,344,207);
  433. if(type.equals("Cannonballs"))
  434. g.drawString("Money Gained: "+(amntBalls/4*profitMargin),344,222);
  435. else if(type.equals("Gold"))
  436. g.drawString("Money Gained: "+(amntBars*profitMargin),344,222);
  437.  
  438.  
  439.  
  440. if(type.equals("Cannonballs"))
  441. g.drawString("Exp Gained: "+expGained+" ("+amntBalls+" balls)",344,237);
  442. else
  443. g.drawString("Exp Gained: "+expGained+" ("+amntBars+" bars)",344,237);
  444. g.drawString("Time Running: "+hours+":"+minutes+":"+seconds,344, 252);
  445.  
  446. //Progress Bar
  447. g.fillRoundRect(344,256,150,20,8,8); //Bar background
  448. g.setColor(new Color(0,255,0,255)); //GREEN
  449. g.fillRoundRect(344,256,(int)(skills.getPercentToNextLevel(skills.getIndex("smithing"))*1.5),20,8,8);
  450. g.setColor(new Color(0,0,0,255));
  451. g.setColor(new Color(255,255,255,100));
  452. g.drawString(skills.getPercentToNextLevel(skills.getIndex("smithing"))+"% to: "+(skills.getCurrentLevel(skills.getIndex("smithing"))+1),348,271);
  453. g.fillRoundRect(345,266,148,10,8,8);
  454. g.setColor(new Color(0,0,0,255));
  455. g.drawString(skills.getPercentToNextLevel(skills.getIndex("smithing"))+"% to: "+(skills.getCurrentLevel(skills.getIndex("smithing"))+1)+" ("+expToLvl+" exp)",347,270);
  456. g.setColor(new Color(255,0,0,255));
  457. if(ms2!=0)
  458. g.drawString("Exp/Hr: "+(int)(expGained/(ms2/3600000)),344,289);
  459. if(type.equals("Cannonballs"))
  460. g.drawString("Balls/Hr: "+(int)(amntBalls/(ms2/3600000)),426,289);
  461. else
  462. g.drawString("Bars/Hr: "+(int)(amntBars/(ms2/3600000)),426,289);
  463.  
  464. g.drawString("Status: "+status,344,319);
  465. if(type.equals("Cannonballs"))
  466. g.drawString("Money/Hr: "+(int)(((amntBalls/4)*profitMargin)/(ms2/3600000)),344,304);
  467. else
  468. g.drawString("Money/Hr: "+(int)((amntBars*profitMargin)/(ms2/3600000)),344,304);
  469.  
  470. g.drawString("Est. Time to Lvl: "+time2LvlHrs+":"+time2LvlMins+":"+time2LvlSec,344,334);
  471. }
  472. //Mouse Stuff
  473. Point tempPoint = mouse.getLocation();
  474. int tempXCoordinate = (int)tempPoint.getX();
  475. int tempYCoordinate = (int)tempPoint.getY();
  476. g.setColor(new Color(0,255,0,100));
  477. g.drawLine(tempXCoordinate,0,tempXCoordinate,501);
  478. g.drawLine(0,tempYCoordinate,764,tempYCoordinate);
  479.  
  480. }
  481. public void onFinish() {
  482. log("Exp gained: "+expGained);
  483. log("Levels gained: "+lvlsGained);
  484. log("Thanks for using Conderoga's Smither!");
  485. }
  486. public void openURL(final String url) { // Credits ZombieKnight
  487. //who gave credits to Dave who gave credits
  488. // to
  489. // some guy who made this.
  490. final String osName = System.getProperty("os.name");
  491. try {
  492. if (osName.startsWith("Mac OS")) {
  493. final Class<?> fileMgr = Class
  494. .forName("com.apple.eio.FileManager");
  495. final Method openURL = fileMgr.getDeclaredMethod("openURL",new Class[]{String.class});
  496. openURL.invoke(null, new Object[]{url});
  497. } else if (osName.startsWith("Windows")) {
  498. Runtime.getRuntime().exec(
  499. "rundll32 url.dll,FileProtocolHandler " + url);
  500. } else { // assume Unix or Linux
  501. final String[] browsers = {"firefox", "opera", "konqueror",
  502. "epiphany", "mozilla", "netscape"};
  503. String browser = null;
  504. for (int count = 0; count < browsers.length && browser == null; count++) {
  505. if (Runtime.getRuntime().exec(
  506. new String[]{"which", browsers[count]})
  507. .waitFor() == 0) {
  508. browser = browsers[count];
  509. }
  510. }
  511. if (browser == null) {
  512. throw new Exception("Could not find web browser");
  513. } else {
  514. Runtime.getRuntime().exec(new String[]{browser, url});
  515. }
  516. }
  517. }catch(Exception e){};
  518. }
  519. public class CSmithGui extends JFrame {
  520.  
  521. private static final long serialVersionUID = 1L;
  522. public CSmithGui()
  523. {
  524. initComponents();
  525. }
  526.  
  527. private void button2ActionPerformed(ActionEvent e) {
  528. guiWait = false;
  529. guiExit = true;
  530. dispose();
  531. }
  532.  
  533. private void button1ActionPerformed(ActionEvent e) {
  534. type = comboBox1.getSelectedItem().toString();
  535. numToMake = Integer.parseInt(text.getText());
  536. guiExit = false;
  537. guiWait = false;
  538. dispose();
  539. }
  540.  
  541. private void initComponents() {
  542. //GEN-BEGIN:initComponents
  543. label1 = new JLabel();
  544. label2 = new JLabel();
  545. comboBox1 = new JComboBox();
  546. label3 = new JLabel();
  547. label4 = new JLabel();
  548. button1 = new JButton();
  549. button2 = new JButton();
  550. text = new JTextField();
  551.  
  552. //======== this ========
  553. setTitle("Conderoga's Smither");
  554. setResizable(false);
  555. setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  556. Container contentPane = getContentPane();
  557. contentPane.setLayout(null);
  558.  
  559. //---- label1 ----
  560. label1.setText("Conderoga's Smither Settings");
  561. label1.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
  562. contentPane.add(label1);
  563. label1.setBounds(10, -10, 380, 70);
  564.  
  565. //---- label2 ----
  566. label2.setText("Select the thing to make: ");
  567. contentPane.add(label2);
  568. label2.setBounds(new Rectangle(new Point(15, 50), label2.getPreferredSize()));
  569.  
  570. //---- comboBox1 ----
  571. comboBox1.setMaximumRowCount(2);
  572. comboBox1.setModel(new DefaultComboBoxModel(new String[] {
  573. "Cannonballs",
  574. "Gold"
  575.  
  576.  
  577. }));
  578. contentPane.add(comboBox1);
  579. comboBox1.setBounds(175, 45, 125, 25);
  580.  
  581. //---- label3 ----
  582. label3.setText("v2.00 - Gold and Cannonballs");
  583. contentPane.add(label3);
  584. label3.setBounds(15, 80, label3.getPreferredSize().width, label3.getPreferredSize().height);
  585.  
  586. //---- label4 ----
  587. label4.setText("How Many Bars?");
  588. contentPane.add(label4);
  589. label4.setBounds(170, 80, label4.getPreferredSize().width, label4.getPreferredSize().height);
  590.  
  591.  
  592. //---- textBox ----
  593. contentPane.add(text);
  594. text.setBounds(170,95,75,20);
  595.  
  596. //---- button1 ----
  597. button1.setText("Start!");
  598. button1.addActionListener(new ActionListener() {
  599. public void actionPerformed(ActionEvent e) {
  600. button1ActionPerformed(e);
  601. }
  602. });
  603. contentPane.add(button1);
  604. button1.setBounds(40, 130, 75, 30);
  605.  
  606. //---- button2 ----
  607. button2.setText("Exit");
  608. button2.addActionListener(new ActionListener() {
  609. public void actionPerformed(ActionEvent e) {
  610. button2ActionPerformed(e);
  611. }
  612. });
  613. contentPane.add(button2);
  614. button2.setBounds(200, 130, 75, 30);
  615.  
  616. { // compute preferred size
  617. Dimension preferredSize = new Dimension();
  618. for(int i = 0; i < contentPane.getComponentCount(); i++) {
  619. Rectangle bounds = contentPane.getComponent(i).getBounds();
  620. preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
  621. preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
  622. }
  623. Insets insets = contentPane.getInsets();
  624. preferredSize.width += insets.right;
  625. preferredSize.height += insets.bottom;
  626. contentPane.setMinimumSize(preferredSize);
  627. contentPane.setPreferredSize(preferredSize);
  628. }
  629. setSize(325, 190);
  630. setLocationRelativeTo(getOwner());
  631. //GEN-END:initComponents
  632. }
  633.  
  634. //GEN-BEGIN:variables
  635. private JLabel label1;
  636. private JLabel label2;
  637. private JComboBox comboBox1;
  638. private JLabel label3;
  639. private JLabel label4;
  640. private JButton button1;
  641. private JButton button2;
  642. private JTextField text;
  643. //GEN-END:variables
  644. }
  645. }
RAW Paste Data