Advertisement
Zalgo2462

YewMurder

Oct 1st, 2011
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.43 KB | None | 0 0
  1. import org.rsbot.event.events.MessageEvent;
  2. import org.rsbot.event.listeners.MessageListener;
  3. import org.rsbot.event.listeners.PaintListener;
  4. import org.rsbot.script.Script;
  5. import org.rsbot.script.ScriptManifest;
  6. import org.rsbot.script.methods.Skills;
  7. import org.rsbot.script.wrappers.RSNPC;
  8. import org.rsbot.script.wrappers.RSObject;
  9. import org.rsbot.script.wrappers.RSTile;
  10.  
  11. import java.awt.*;
  12.  
  13. @ScriptManifest(authors = {"lord_qaz"}, name = "yewMurderGE", version = 3.0, description = "Chops yews at GE")
  14. public class yewMurderGE extends Script implements PaintListener, MessageListener
  15. {
  16. final double cVer = getClass().getAnnotation(ScriptManifest.class).version();
  17. final String cName = getClass().getAnnotation(ScriptManifest.class).name();
  18.  
  19. int startStatLvl;
  20. int startXp;
  21. int logs = 0;
  22.  
  23. String status = "Starting up";
  24.  
  25. long startTime = System.currentTimeMillis();
  26.  
  27. RSTile geTile = new RSTile(3188, 3491);
  28. RSTile bankTile = new RSTile(3185, 3477);
  29. RSTile yewTiles[] = {new RSTile(3205, 3504), new RSTile(3210, 3504), new RSTile(3222, 3503)};
  30. RSTile waitTiles[] = {new RSTile(3207, 3503), new RSTile(3208, 3503), new RSTile(3221, 3501)};
  31.  
  32. int hatchetID[] = {1351,1349,1361,1355,1357,1359,1353,6739};
  33.  
  34. int currentTree;
  35. boolean noHatchet = false;
  36. boolean kill = false;
  37. boolean treeSwitch = false;
  38. boolean atGrandExchange = false;
  39.  
  40. long treeTimer[] = new long[yewTiles.length];
  41.  
  42. enum treeStatus
  43. {
  44. GREEN, BROWN, RED
  45. }
  46.  
  47. treeStatus yewPositions[] = new treeStatus[yewTiles.length];
  48.  
  49. public boolean onStart()
  50. {
  51. log("Starting yewMurder");
  52.  
  53. startStatLvl = skills.getCurrentLevel(Skills.WOODCUTTING);
  54. startXp = skills.getCurrentExp(Skills.WOODCUTTING);
  55.  
  56. for (int i = 0; i < yewTiles.length; i++)
  57. {
  58. yewPositions[i] = treeStatus.GREEN;
  59. }
  60.  
  61. return true;
  62. }
  63.  
  64. public void onRepaint(Graphics g)
  65. {
  66. if (game.isLoggedIn())
  67. {
  68. double millis = System.currentTimeMillis() - startTime;
  69.  
  70. int levelChange = skills.getCurrentLevel(Skills.WOODCUTTING) - startStatLvl;
  71. int xpChange = skills.getCurrentExp(Skills.WOODCUTTING) - startXp;
  72. int clvl = skills.getCurrentLevel(Skills.WOODCUTTING);
  73. int xpPerHour = (int)((xpChange / millis) * (1000 * 3600));
  74. int lpH = (int)((logs / millis) * (1000 * 3600));
  75.  
  76. String time = formatTime((int)(millis/1000));
  77. String tTL = (xpChange != 0 && millis != 0) ? formatTime((int)((skills.getExpToNextLevel(Skills.WOODCUTTING) / (xpChange / millis)) / 1000)) : formatTime(0);
  78. String pTL = "" + skills.getPercentToNextLevel(Skills.WOODCUTTING);
  79.  
  80. //paint
  81. g.setColor(Color.WHITE);
  82. g.setFont(new Font("Arial", Font.BOLD, 14));
  83. g.drawString(cName + " v" + cVer + " ", 334, 33);
  84.  
  85. g.setFont(new Font("Arial", Font.PLAIN, 11));
  86. //draw green trees
  87. for (int i = 0;i < yewTiles.length;i++)
  88. {
  89. if (yewPositions[i] == treeStatus.GREEN)
  90. {
  91. g.setColor(new Color(80,225,100));
  92. g.fillOval(334 + i*20, 44, 16,16);
  93. }
  94. else if (yewPositions[i] == treeStatus.BROWN)
  95. {
  96. g.setColor(new Color(85,60,60));
  97. g.fillOval(334 + i*20, 44, 16,16);
  98.  
  99. g.setColor(Color.WHITE);
  100. int temp = (int)((System.currentTimeMillis() - treeTimer[i])/1000);
  101. drawCenteredString(temp + "", 334 + i*20 + 9, 56,g);
  102. }
  103. else if (yewPositions[i] == treeStatus.RED)
  104. {
  105. g.setColor(Color.RED);
  106. g.fillOval(334 + i*20, 44, 16,16);
  107. }
  108.  
  109. if (i == currentTree)
  110. {
  111. if (treeSwitch && yewPositions[i] != treeStatus.BROWN)
  112. {
  113. g.setColor(Color.CYAN);
  114. }
  115. else
  116. {
  117. g.setColor(Color.YELLOW);
  118. }
  119.  
  120. g.drawOval(334 + i*20, 44, 16,16);
  121. }
  122. }
  123.  
  124. g.setFont(new Font("zurich ex bt", Font.BOLD, 11));
  125.  
  126. g.setColor(new Color(255,255,255,255));
  127. g.drawString("Status: " + status, 334, 78);
  128. g.setFont(new Font("zurich ex bt", Font.PLAIN, 11));
  129. g.setColor(Color.ORANGE);
  130.  
  131. g.drawString("clvl: " + clvl + " lvl+: " + levelChange, 334, 89);
  132. g.drawString("xp+: " + xpChange + " xp/h: " + xpPerHour, 334, 100);
  133. g.drawString("ttL: " + tTL + " %tL: " + pTL + "%", 334, 111);
  134. g.drawString("logs: " + logs + " logs/h: " + lpH, 334,122);
  135. g.setColor(Color.YELLOW);
  136.  
  137. g.setFont(new Font("zurich ex bt", Font.BOLD, 11));
  138. g.drawString("Runtime: " + time, 334, 144);
  139.  
  140. }
  141. }
  142.  
  143. String formatTime(int seconds)
  144. {
  145. return ((seconds / 3600 < 10 ? "0" : "") + seconds / 3600 + ":" + (seconds / 60 % 60 < 10 ? "0" : "") + seconds / 60 % 60 + ":" + (seconds % 60 < 10 ? "0" : "") + seconds % 60);
  146. }
  147.  
  148. public void drawCenteredString(String s, int x, int y, Graphics g)
  149. {
  150. FontMetrics fm = g.getFontMetrics();
  151. int xN = x - fm.stringWidth(s) / 2;
  152. g.drawString(s, xN, y);
  153. }
  154.  
  155. int runControl()
  156. {
  157. if (!walking.isRunEnabled() && (walking.getEnergy() > random(20, 30)))
  158. {
  159. walking.setRun(true);
  160. return 500;
  161. }
  162. return 10;
  163. }
  164.  
  165. public void onFinish()
  166. {
  167. log("Exiting...");
  168. }
  169.  
  170. public int useBank()
  171. {
  172. try
  173. {
  174. if (bank.isOpen())
  175. {
  176. status = "Depositing";
  177. if (inventory.containsOneOf(hatchetID))
  178. {
  179. bank.depositAllExcept(hatchetID);
  180. }
  181. else
  182. {
  183. bank.depositAll();
  184. }
  185. }
  186. else
  187. {
  188. status = "Opening bank";
  189. //bank.open(); //damn thing sucks
  190. RSNPC banker = npcs.getNearest(3418);
  191. if (banker != null)
  192. {
  193. banker.interact("bank benutzen");
  194. }
  195. }
  196. }
  197. catch (Exception e)
  198. {
  199. log("useBank() error");
  200. e.printStackTrace();
  201. }
  202. return 1200;
  203. }
  204.  
  205. public int goYews()
  206. {
  207. //(3190,3488)
  208. if (getMyPlayer().getLocation().getX() < geTile.getX() && atGrandExchange)
  209. {
  210. walking.walkTileMM(new RSTile(3193, 3488));
  211. if(calc.distanceTo(geTile) <= 3) {
  212. atGrandExchange = false;
  213. }
  214. }
  215. else
  216. {
  217. walking.walkTileMM(yewTiles[0]);
  218. }
  219.  
  220. return 200;
  221. }
  222.  
  223. public boolean atYews()
  224. {
  225. for (treeStatus tr : yewPositions)
  226. {
  227. if (tr == treeStatus.RED)
  228. {
  229. return false;
  230. }
  231. }
  232. return true;
  233. }
  234.  
  235. public boolean atBank()
  236. {
  237. return calc.distanceTo(bankTile) <= 3;
  238. }
  239.  
  240. public boolean atGEEntrance()
  241. {
  242. return calc.distanceTo(geTile) <= 3;
  243. }
  244.  
  245. public int goBank()
  246. {
  247. if(!atGEEntrance() && !atGrandExchange) {
  248. walking.walkTileMM(geTile);
  249. } else {
  250. atGrandExchange = true;
  251. walking.walkTileMM(bankTile);
  252. }
  253. return 300;
  254. }
  255.  
  256. public int chopYews()
  257. {
  258. try
  259. {
  260. if (calc.tileOnScreen(yewTiles[currentTree]) && calc.distanceTo(yewTiles[currentTree]) < 5)
  261. {
  262. if (yewPositions[currentTree] == treeStatus.GREEN)
  263. {
  264. if (getMyPlayer().getAnimation() == -1 || treeSwitch)
  265. {
  266. status = "Clicking tree";
  267. objects.getTopAt(yewTiles[currentTree]).interact("Fällen");
  268. treeSwitch = false;
  269. return 400;
  270. }
  271. else
  272. {
  273. status = "Chopping";
  274. return runControl();
  275. }
  276. }
  277. else
  278. {
  279. //wait
  280. status = "Waiting for spawn";
  281. return 100;
  282. }
  283. }
  284. else
  285. {
  286. status = "Moving to tree";
  287. walking.walkTileMM(waitTiles[currentTree]);
  288. return 400;
  289. }
  290.  
  291. }
  292. catch (final Exception e)
  293. {
  294. log("chopYews() error, caught.");
  295. e.printStackTrace();
  296. }
  297. return 600;
  298. }
  299.  
  300. public int loop()
  301. {
  302. if (noHatchet)
  303. {
  304. log("No usable hatchet equipped or in inventory");
  305. return -1;
  306. }
  307.  
  308. if (kill)
  309. {
  310. log("Shutdown message received");
  311. return -1;
  312. }
  313.  
  314. getTreeStatus();
  315. int newTree = getCurrentTree();
  316.  
  317. if (currentTree != newTree)
  318. {
  319. treeSwitch = true;
  320. currentTree = newTree;
  321. }
  322.  
  323. if(atBank())
  324. {
  325. if(!inventory.isFull())
  326. {
  327. status = "Walking to yews";
  328. return goYews();
  329. }
  330. else
  331. {
  332. status = "Using bank";
  333. return useBank();
  334. }
  335. }
  336. else
  337. {
  338. if(!inventory.isFull())
  339. {
  340. if (!atYews())
  341. {
  342. return goYews();
  343. }
  344. return chopYews();
  345. }
  346. else
  347. {
  348. status = "Moving to bank";
  349. return goBank();
  350. }
  351. }
  352. }
  353.  
  354. void getTreeStatus()
  355. {
  356. for (int i = 0;i < yewTiles.length;i++)
  357. {
  358.  
  359. if (calc.distanceTo(yewTiles[i]) < 24)
  360. {
  361. RSObject obj = objects.getTopAt(yewTiles[i]);
  362. if (obj != null && obj.getName().equals("Eibenbaum"))
  363. {
  364. if (obj.hasAction("Fällen"))
  365. {
  366. yewPositions[i] = treeStatus.GREEN;
  367. }
  368. else
  369. {
  370. if (yewPositions[i] == treeStatus.GREEN)
  371. {
  372. treeTimer[i] = System.currentTimeMillis();
  373. }
  374. yewPositions[i] = treeStatus.BROWN;
  375. }
  376. }
  377. else
  378. {
  379. yewPositions[i] = treeStatus.RED;
  380. }
  381. }
  382. else
  383. {
  384. yewPositions[i] = treeStatus.RED;
  385. }
  386. }
  387. }
  388.  
  389. int getCurrentTree()
  390. {
  391. //don't change if current tree is fine
  392. if (yewPositions[currentTree] == treeStatus.GREEN)
  393. {
  394. return currentTree;
  395. }
  396.  
  397. //find a green tree first
  398. int lowestDist = -1;
  399. for (int i = 0;i < yewTiles.length; i++)
  400. {
  401. if (yewPositions[i] == treeStatus.GREEN)
  402. {
  403. lowestDist = i;
  404. break;
  405. }
  406. }
  407.  
  408. if (lowestDist != -1)
  409. {
  410. //use GREEN ones first
  411. for (int i = 0;i < yewTiles.length; i++)
  412. {
  413. if (yewPositions[i] == treeStatus.GREEN)
  414. {
  415. if (calc.distanceTo(yewTiles[i]) < calc.distanceTo(yewTiles[lowestDist]))
  416. {
  417. lowestDist = i;
  418. }
  419. }
  420. }
  421.  
  422. return lowestDist;
  423. }
  424.  
  425. //then check for highest timer.NO GREEN TREES SHOULD BE LEFT
  426. int highestTimer = 0;
  427. for (int i = 0;i < yewTiles.length; i++)
  428. {
  429. long time = System.currentTimeMillis() - treeTimer[i];
  430. long htime = System.currentTimeMillis() - treeTimer[highestTimer];
  431. if (time > htime)
  432. {
  433. highestTimer = i;
  434. }
  435. }
  436.  
  437. return highestTimer;
  438. }
  439.  
  440. public void messageReceived(MessageEvent e)
  441. {
  442. String message = e.getMessage();
  443. if (message.contains("eine Axt, um diesen Baum zu fällen"))
  444. {
  445. noHatchet = true;
  446. }
  447.  
  448. if (message.contains("Du erhältst einige"))
  449. {
  450. logs++;
  451. }
  452.  
  453. if (message.contains("too full"))
  454. {
  455. if (inventory.getCount() == 0 && !inventory.isFull())
  456. {
  457. log("Dein Inventar ist voll");
  458. kill = true;
  459. }
  460. }
  461. }
  462. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement