Guest User

Untitled

a guest
Jan 23rd, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.16 KB | None | 0 0
  1. import java.awt.Color;
  2. import java.awt.Font;
  3. import java.awt.Graphics;
  4. import java.awt.Point;
  5. import java.awt.Rectangle;
  6. import java.awt.event.MouseEvent;
  7. import java.awt.event.MouseListener;
  8.  
  9. import java.util.ArrayList;
  10.  
  11. import org.rsbot.event.events.ServerMessageEvent;
  12. import org.rsbot.event.listeners.PaintListener;
  13. import org.rsbot.event.listeners.ServerMessageListener;
  14. import org.rsbot.script.Script;
  15. import org.rsbot.script.ScriptManifest;
  16. import org.rsbot.script.methods.Game;
  17. import org.rsbot.script.methods.Skills;
  18. import org.rsbot.script.wrappers.RSArea;
  19. import org.rsbot.script.wrappers.RSGroundItem;
  20. import org.rsbot.script.wrappers.RSItem;
  21. import org.rsbot.script.wrappers.RSNPC;
  22. import org.rsbot.script.wrappers.RSObject;
  23. import org.rsbot.script.wrappers.RSTile;
  24.  
  25. @ScriptManifest(authors = { "kiko" }, keywords = "Dungeoneering", name = "iDungeon",
  26. version = 0.50, description = "Runs floors on complexity 1. Fo realz this time.")
  27.  
  28. public class iDungeon extends Script implements PaintListener, MouseListener, ServerMessageListener {
  29. // Script
  30. final double vers = 0.50;
  31. long startTime, runTime;
  32.  
  33. // Food & Equipment
  34. final int smuggler = 11226, ourWep = 16939;
  35. final int heimCrab = 18159, redEye = 18161, duskEel = 18163, flatFish = 18165, shortFin = 18167;
  36. RSGroundItem foodItem;
  37. final int[] foods = { heimCrab, redEye, duskEel, flatFish, shortFin };
  38. final int[] meleeEquips = { 16647, 16669, 16713, 16939, 16941, 17239 };
  39. final int[] rangeEquips = { 17173, 17319, 16875, 16325 };
  40. final int[] mageEquips = { 17217, 16845, 17009 };
  41. final int[] saveItems = { 17786, 17780 };
  42. int[] equips = {};
  43. int combatTriangle;
  44.  
  45. // Monsters
  46. RSNPC closestMonster = null;
  47. int[] icyBones = { 10044 };
  48.  
  49. // Keys
  50. final int[] orangeKeys = { 18202, 18204, 18206, 18208, 18210, 18212, 18214, 18216 };
  51. final int[] silverKeys = { 18218, 18220, 18222, 18224, 18226, 18228, 18230, 18232 };
  52. final int[] yellowKeys = { 18234, 18236, 18238, 18240, 18242, 18244, 18246, 18248 };
  53. final int[] greenKeys = { 18250, 18252, 18254, 18256, 18258, 18260, 18262, 18264 };
  54. final int[] blueKeys = { 18266, 18268, 18270, 18272, 18274, 18276, 18278, 18280 };
  55. final int[] purpleKeys = { 18282, 18284, 18286, 18288, 18290, 18292, 18294, 18296 };
  56. final int[] crimsonKeys = { 18298, 18300, 18302, 18304, 18306, 18308, 18310, 18312 };
  57. final int[] goldKeys = { 18314, 18316, 18318, 18320, 18322, 18324, 18326, 18328 };
  58. final int[][] keys = { orangeKeys, silverKeys, yellowKeys, greenKeys, blueKeys, purpleKeys, crimsonKeys, goldKeys };
  59.  
  60. // Doors
  61. final int[] standardDoors = { 50346, 50342 };
  62. final int[] orangeDoors = { 50208, 50209, 50210, 50211, 50212, 50213, 50214, 50215 };
  63. final int[] silverDoors = { 50216, 50217, 50218, 50219, 50220, 50221, 50222, 50223 };
  64. final int[] yellowDoors = { 50224, 50225, 50226, 50227, 50228, 50229, 50230, 50231 };
  65. final int[] greenDoors = { 50232, 50233, 50234, 50235, 50236, 50237, 50238, 15239 };
  66. final int[] blueDoors = { 50240, 50241, 50242, 50243, 50244, 50245, 50246, 50247 };
  67. final int[] purpleDoors = { 50248, 50249, 50250, 50251, 50252, 50253, 50254, 50255 };
  68. final int[] crimsonDoors = { 50256, 50257, 50258, 50259, 50260, 50261, 50262, 50263 };
  69. final int[] goldDoors = { 50264, 50265, 50266, 50267, 50268, 50269, 50270, 50271 };
  70. final int[][] doors = { orangeDoors, silverDoors, yellowDoors, greenDoors, blueDoors, purpleDoors, crimsonDoors, goldDoors, standardDoors };
  71.  
  72. ArrayList<RSArea> openedDoors = new ArrayList<RSArea>();
  73. ArrayList<RSArea> unopenedDoors = new ArrayList<RSArea>();
  74. ArrayList<RSArea> lockedDoors = new ArrayList<RSArea>();
  75. ArrayList<RSArea> drawDoors = new ArrayList<RSArea>();
  76. ArrayList<RSArea> newDoors = new ArrayList<RSArea>();
  77. RSArea nearDoor;
  78. RSTile nearDoorTile;
  79. RSObject doorObject, doorObject2;
  80.  
  81. // Rooms
  82. int smallestDist, roomNumber;
  83. final RSTile[] blankTile = { new RSTile(0, 0)};
  84.  
  85. ArrayList<RSArea> doorPaths = new ArrayList<RSArea>();
  86. ArrayList<RSArea> rooms = new ArrayList<RSArea>();
  87. ArrayList<RSArea> walkBack1 = new ArrayList<RSArea>();
  88. ArrayList<RSArea> walkBack2 = new ArrayList<RSArea>();
  89. ArrayList<RSArea> walkBack3 = new ArrayList<RSArea>();
  90. ArrayList<RSArea> deathWalk = new ArrayList<RSArea>();
  91. ArrayList<RSTile> oldObjectTiles = new ArrayList<RSTile>();
  92. ArrayList<RSTile> newObjectTiles = new ArrayList<RSTile>();
  93. ArrayList<Rectangle> roomRects = new ArrayList<Rectangle>();
  94. RSArea currentRoom, oldRoom;
  95.  
  96. // Others
  97. int swX, swY, neX, neY;
  98. int getAction, xpStart, xpGain, eph, levels, degree, restarts, dungeonCount;
  99. boolean newDungeon, goodDoor, explored, isDead, deathWalkBack, walkBackPath, cameraTurn;
  100. String location, status = "", itemName;
  101. RSObject finishLadder;
  102. Point mp = new Point(0,0);
  103. RSTile myLoc;
  104.  
  105.  
  106.  
  107. public boolean onStart() {
  108. newDungeon = true;
  109. log("Welcome to iDungeon v" + vers);
  110. while(!game.isLoggedIn() && !getMyPlayer().isValid()) {
  111. sleep(1500);
  112. }
  113. camera.setAltitude(true);
  114. xpStart = skills.getCurrentExp(Skills.DUNGEONEERING);
  115. if (skills.getRealLevel(Skills.PRAYER) > 42)
  116. DoOption[3] = true;
  117. startTime = System.currentTimeMillis();
  118. showStats = true;
  119. showOptions = false;
  120. return true;
  121. }
  122.  
  123. public void onFinish() {
  124. }
  125.  
  126.  
  127. public void getLocation() {
  128. myLoc = getMyPlayer().getLocation();
  129. RSObject stairs = objects.getNearest(50552);
  130. RSObject entrance = objects.getNearest(48496);
  131. if(npcs.getNearest(smuggler) != null) {
  132. if(newDungeon) {
  133. status = "Starting a new dungeon!";
  134. currentRoom = null;
  135. startDungeon();
  136. }
  137. } else if (stairs != null && stairs.getLocation() != null) {
  138. status = "Jumping down the stairs...";
  139. if (!stairs.isOnScreen()) {
  140. walking.walkTileMM(stairs.getLocation());
  141. camera.turnToObject(stairs);
  142. }
  143. camera.setAngle(camera.getAngle() + random(10, 30));
  144. stairs.doAction("Jump");
  145. sleep(1500);
  146. } else if (entrance != null && entrance.getLocation() != null) {
  147. status = "Entering Daemonheim...";
  148. if (!entrance.isOnScreen()) {
  149. walking.walkTileMM(entrance.getLocation());
  150. camera.turnToObject(entrance);
  151. }
  152. sleep(500);
  153. entrance.doAction("Climb");
  154. while (!interfaces.get(210).isValid())
  155. sleep(1000);
  156. interfaces.get(210).getComponent(2).doClick();
  157. sleep(1000);
  158. interfaces.get(236).getComponent(1).doClick();
  159. sleep(1000);
  160. entrance.doAction("Climb");
  161. sleep(1000);
  162. interfaces.get(947).getComponent(48).doAction("Select");
  163. sleep(1000);
  164. interfaces.get(947).getComponent(761).doAction("Confirm");
  165. sleep(1000);
  166. interfaces.get(938).getComponent(60).doAction("Select");
  167. sleep(750);
  168. interfaces.get(938).getComponent(37).doAction("Confirm");
  169. doorPaths.clear();
  170. rooms.clear();
  171. oldObjectTiles.clear();
  172. openedDoors.clear();
  173. unopenedDoors.clear();
  174. lockedDoors.clear();
  175. drawDoors.clear();
  176. degree = 0;
  177. restarts = 0;
  178. sleep(1000);
  179. startDungeon();
  180. } else if (isDead)
  181. onDeath();
  182. if(!rooms.isEmpty() && myLoc != null) {
  183. for(int I = 0; I < rooms.size(); I++) {
  184. if(rooms.get(I) != null && rooms.get(I).contains(myLoc)) {
  185. currentRoom = rooms.get(I);
  186. roomNumber = I;
  187. }
  188. }
  189. }
  190. }
  191.  
  192.  
  193. private void exploreNewRoom() {
  194. RSObject finishLadder = objects.getNearest(49695);
  195. RSObject exitLadder = objects.getNearest(49696);
  196. if (finishLadder != null) {
  197. log("It's boss killing time! :D");
  198. killBoss();
  199. return;
  200. } else if (exitLadder != null) {
  201. finishDungeon();
  202. return;
  203. } else if (oldRoom != null && oldRoom != currentRoom) {
  204. nearDoor = objects.getNearest(standardDoors[1]).getArea();
  205. openedDoors.add(nearDoor);
  206. unopenedDoors.remove(openedDoors);
  207. }
  208.  
  209. if (!rooms.contains(myLoc)) {
  210. currentRoom = getNewRoomArea();
  211. if (currentRoom != null)
  212. rooms.add(currentRoom);
  213. status = "Exploring a new room!";
  214. oldObjectTiles.addAll(newObjectTiles);
  215. newObjectTiles.clear();
  216. while (getMonsters()) {
  217. sleep(1000);
  218. }
  219. status = "Picking up items";
  220. while (pickupKeys()) {
  221. sleep(2000);
  222. }
  223. if (DoOption[4]) {
  224. pickupFood();
  225. }
  226. log("Cleared room " + (roomNumber+1));
  227. openGoodDoor();
  228. } else log("Unable to determine room to explore.");
  229. }
  230.  
  231.  
  232. private void startDungeon() {
  233. status = "Beginning a new dungeon!";
  234. log("Starting a new dungeon");
  235. camera.setAltitude(true);
  236. newDungeon = false;
  237. combat.setAutoRetaliate(true);
  238. combat.setFightMode(1);
  239. getNewRoomArea();
  240. if (degree > 8) {
  241. log("This dungeon is the wrong size or has already been explored.");
  242. exitDungeon();
  243. }
  244. getLocation();
  245. if(DoOption[1])
  246. equips = rangeEquips;
  247. else if(DoOption[2])
  248. equips = mageEquips;
  249. else equips = meleeEquips;
  250. while(inventory.containsOneOf(equips)) {
  251. for(int itemID : equips) {
  252. RSItem item = inventory.getItem(itemID);
  253. if(item != null) {
  254. item.doClick(true);
  255. }
  256. sleep(1000);
  257. }
  258. inventory.dropAllExcept(saveItems);
  259. sleep(2000);
  260. }
  261. while (pickupKeys())
  262. sleep(2000);
  263. if (DoOption[4])
  264. pickupFood();
  265. openGoodDoor();
  266. }
  267.  
  268.  
  269. private void restartDungeon() {
  270. status = "Restarting dungeon...";
  271. log("No forward progress could be made, restarting path.");
  272. if (restarts == 0)
  273. walkBack1.addAll(doorPaths);
  274. if (restarts == 1)
  275. walkBack2.addAll(doorPaths);
  276. if (restarts == 2)
  277. walkBack3.addAll(doorPaths);
  278. restarts++;
  279. doorPaths.clear();
  280. drawDoors.clear();
  281. if (currentRoom != rooms.get(0)) {
  282. castDungeonSpell(24, "Cast");
  283. while(getMyPlayer().getAnimation() != 4852)
  284. sleep(200);
  285. }
  286. sleep(1000);
  287. currentRoom = rooms.get(0);
  288.  
  289. pickupKeys();
  290. openGoodDoor();
  291. }
  292.  
  293. private void onDeath() {
  294. deathWalkBack = true;
  295. deathWalk.clear();
  296. deathWalk.addAll(doorPaths);
  297. castDungeonSpell(24, "Cast");
  298. sleep(10000);
  299. doorPaths.clear();
  300. openGoodDoor();
  301. }
  302.  
  303. private void finishDungeon() {
  304. RSObject finishLadder = objects.getNearest(49696);
  305. RSTile finishTile = finishLadder.getLocation();
  306. if(finishLadder != null) {
  307. log("Exit found, completeing dungeon.");
  308. walking.walkTileMM(finishTile);
  309. sleep(2000);
  310. while(!interfaces.get(236).isValid()) {
  311. finishLadder.doClick();
  312. sleep(1000);
  313. }
  314. interfaces.get(236).getComponent(1).doClick();
  315. status = "Waiting for next dungeon...";
  316. sleep(2000);
  317. doorPaths.clear();
  318. rooms.clear();
  319. oldObjectTiles.clear();
  320. openedDoors.clear();
  321. unopenedDoors.clear();
  322. lockedDoors.clear();
  323. drawDoors.clear();
  324. restarts = 0;
  325. degree = 0;
  326. dungeonCount++;
  327. while(interfaces.get(933).isValid()) {
  328. sleep(2000);
  329. }
  330. newDungeon = true;
  331. startDungeon();
  332. }
  333. }
  334. private void exitDungeon() {
  335. status = "Exiting bad dungeon...";
  336. if (currentRoom != rooms.get(0)) {
  337. castDungeonSpell(24, "Cast");
  338. while(getMyPlayer().getAnimation() != 4852)
  339. sleep(200);
  340. }
  341. sleep(1000);
  342. RSObject exitLadder = objects.getNearest(51156);
  343. RSTile exitTile = finishLadder.getLocation();
  344. if(exitLadder != null) {
  345. walking.walkTileMM(exitTile);
  346. sleep(2000);
  347. while(!interfaces.get(211).isValid()) {
  348. finishLadder.doClick();
  349. sleep(1000);
  350. }
  351. interfaces.get(211).getComponent(3).doClick();
  352. sleep(1000);
  353. interfaces.get(236).getComponent(1).doClick();
  354.  
  355. sleep(2000);
  356. doorPaths.clear();
  357. rooms.clear();
  358. oldObjectTiles.clear();
  359. openedDoors.clear();
  360. unopenedDoors.clear();
  361. lockedDoors.clear();
  362. drawDoors.clear();
  363. restarts = 0;
  364. degree = 0;
  365. newDungeon = true;
  366. getLocation();
  367. }
  368. }
  369.  
  370.  
  371.  
  372. private boolean openGoodDoor() {
  373. getLocation();
  374. doorObject = null;
  375. doorObject2 = null;
  376. nearDoor = getClosestDoor();
  377. if(nearDoor != null) {
  378. status = "Opening door...";
  379. nearDoorTile = nearDoor.getCentralTile();
  380. doorObject = objects.getTopAt(nearDoorTile);
  381. int doorID = doorObject.getID();
  382. walking.walkTileMM(nearDoorTile);
  383. camera.turnToObject(doorObject);
  384. oldRoom = currentRoom;
  385. if (doorID == 50346 || doorObject.getID() == 50342) {
  386. openGuardianDoor();
  387. } else {
  388. doorObject2 = objects.getNearest(doorID + 145);
  389. openLockedDoor();
  390. }
  391. while(unopenedDoors.contains(nearDoor)) {
  392. unopenedDoors.remove(nearDoor);
  393. }
  394. openedDoors.add(nearDoor);
  395. doorPaths.add(nearDoor);
  396. nearDoor = null;
  397. doorObject2 = null;
  398. exploreNewRoom();
  399. return true;
  400. } else {
  401. log("Reached a dead end, returning to start.");
  402. restartDungeon();
  403. }
  404. return false;
  405. }
  406.  
  407. public int loop() {
  408. if(game.isLoggedIn())
  409. getLocation();
  410. return 500;
  411. }
  412.  
  413.  
  414. private boolean killBoss() {
  415. RSObject exitLadder = objects.getNearest(49696);
  416. if (objects.getNearest(49283) != null) {
  417. status = "Killing the Gluttonous Behemoth!";
  418. walking.walkTileMM(new RSTile(swX+4, neY-3), 0, 0);
  419. while (exitLadder == null) {
  420. exitLadder = objects.getNearest(49696);
  421. eatFood();
  422. sleep(1000);
  423. }
  424. } else if (npcs.getNearest(icyBones).isValid()) {
  425. status = "Killing Icy Bones!";
  426. while (exitLadder == null) {
  427. exitLadder = objects.getNearest(49696);
  428. eatFood();
  429. sleep(1000);
  430. }
  431. } else if (objects.getNearest(51148) != null) {
  432. status = "Killing Astea Frostweb!";
  433. while (exitLadder == null) {
  434. exitLadder = objects.getNearest(49696);
  435. eatFood();
  436. sleep(1000);
  437. }
  438. } else {
  439. status = "Killing unknown boss...";
  440. log("Unable to detect boss type... Lets hope attacking & safing is enough!");
  441. while (exitLadder == null) {
  442. exitLadder = objects.getNearest(49696);
  443. eatFood();
  444. sleep(1000);
  445. }
  446. }
  447. finishDungeon();
  448. return true;
  449. }
  450.  
  451.  
  452. private ArrayList<RSTile> getAllNewTiles() {
  453. RSObject[] allObject = objects.getAll();
  454. for(RSObject object : allObject)
  455. newObjectTiles.add(object.getLocation());
  456. newObjectTiles.removeAll(oldObjectTiles);
  457. return newObjectTiles;
  458. }
  459.  
  460.  
  461. private RSArea getNewRoomArea() {
  462. int tX = 0, tY = 0;
  463. swX = 20000;
  464. swY = 20000;
  465. neX = 0;
  466. neY = 0;
  467. RSArea roomArea;
  468. getAllNewTiles();
  469. if(newObjectTiles != null && newObjectTiles.size() > 0) {
  470. for(RSTile tile : newObjectTiles) {
  471. tX = tile.getX();
  472. tY = tile.getY();
  473. if(tX <= swX && tY <= swY) {
  474. swX = tX;
  475. swY = tY;
  476. }
  477. }
  478. for(RSTile tile : newObjectTiles) {
  479. tX = tile.getX();
  480. tY = tile.getY();
  481. if(tX >= neX && tY >= neY) {
  482. neX = tX;
  483. neY = tY;
  484. }
  485. }
  486. oldObjectTiles.addAll(newObjectTiles);
  487. newObjectTiles.clear();
  488. if(swX > 0 && swY > 0 && neX > 0 && neY > 0) {
  489. roomArea = new RSArea(swX, swY, neX, neY);
  490. if (roomArea != null)
  491. rooms.add(roomArea);
  492. return roomArea;
  493. }
  494. }
  495. return null;
  496. }
  497.  
  498.  
  499. private ArrayList<RSArea> getNewDoorAreas() {
  500. newDoors.clear();
  501. RSObject[] allObject = objects.getAll();
  502. for(RSObject object : allObject) {
  503. for(int I=0; I<doors.length; I++) {
  504. for(int J=0; J<doors[I].length; J++) {
  505. int objectID = object.getID();
  506. if(objectID == doors[I][J]) {
  507. RSArea doorArea = object.getArea();
  508. if(doors[I][J] == 50346 || doors[I][J] == 50342 ) {
  509. newDoors.add(doorArea);
  510. } else {
  511. newDoors.add(doorArea);
  512. lockedDoors.add(doorArea);
  513. }
  514. }
  515. }
  516. }
  517. }
  518. drawDoors.addAll(newDoors);
  519. if (deathWalkBack) {
  520. newDoors.retainAll(deathWalk);
  521. openedDoors.removeAll(deathWalk);
  522. unopenedDoors.retainAll(deathWalk);
  523. walkBackPath = false;
  524. deathWalkBack = true;
  525. log("Deathwalking.");
  526. } else if (degree > 0) {
  527. if(restarts == degree) {
  528. log("Walkback 1");
  529. newDoors.addAll(walkBack1);
  530. openedDoors.removeAll(walkBack1);
  531. walkBackPath = true;
  532. } else if (restarts == degree + 1 ) {
  533. log("Walkback 2");
  534. newDoors.addAll(walkBack2);
  535. openedDoors.removeAll(walkBack2);
  536. walkBackPath = true;
  537.  
  538. } else if(restarts == degree + 2 ) {
  539. log("Walkback 3");
  540. newDoors.addAll(walkBack3);
  541. openedDoors.removeAll(walkBack3);
  542. walkBackPath = true;
  543. } else if(restarts > degree + 2) {
  544. log("Restarted too many times, resetting all doors.");
  545. openedDoors.clear();
  546. walkBackPath = true;
  547. }
  548. }
  549. newDoors.removeAll(openedDoors);
  550. return newDoors;
  551. }
  552.  
  553. private RSArea getClosestDoor() {
  554. getNewDoorAreas();
  555. if (rooms.size() == 1) {
  556. degree = getNewDoorAreas().size();
  557. log("Degree " + degree + " dungeon.");
  558. }
  559. getLocation();
  560. if (!newDoors.isEmpty() && currentRoom != null) {
  561. RSArea closestDoor = null;
  562. RSObject otherSide = objects.getNearest(standardDoors[1]);
  563. unopenedDoors.removeAll(openedDoors);
  564. for (RSArea door : newDoors) {
  565. RSTile doorTile = door.getCentralTile();
  566. if (currentRoom.contains(doorTile)) {
  567. RSObject doorObj = objects.getTopAt(doorTile);
  568. if ((doorObj != null && (otherSide == null || calc.distanceBetween(doorTile, otherSide.getLocation()) > 5))) {
  569. int doorID = doorObj.getID();
  570. if (lockedDoors.contains(door)) {
  571. for (int I=0; I<doors.length; I++) {
  572. for (int J = 0; J<doors[I].length; J++) {
  573. if (doorID == doors[I][J] && inventory.contains(keys[I][J])) {
  574. closestDoor = door;
  575. return closestDoor;
  576. }
  577. }
  578. }
  579. } else {
  580. closestDoor = door;
  581. return closestDoor;
  582. }
  583. }
  584. } else if (currentRoom.contains(doorTile) && (deathWalkBack || walkBackPath)) {
  585. log("Opening based on walkback");
  586. int doorID = objects.getTopAt(doorTile).getID();
  587. if (lockedDoors.contains(door)) {
  588. for (int I=0; I<doors.length; I++) {
  589. for (int J = 0; J<doors[I].length; J++) {
  590. if (doorID == doors[I][J] && inventory.contains(keys[I][J])) {
  591. closestDoor = door;
  592. return closestDoor;
  593. }
  594. }
  595. }
  596. } else {
  597. closestDoor = door;
  598. return closestDoor;
  599. }
  600. }
  601. }
  602. } else {
  603. log("No new doors available. Returning to start.");
  604. restartDungeon();
  605. }
  606. return null;
  607. }
  608.  
  609. private boolean getMonsters() {
  610. RSTile npcTile = new RSTile(0, 0);
  611. closestMonster = null;
  612. for (RSNPC monster : npcs.getAll()) {
  613. if (monster != null && monster.getID() != smuggler) {
  614. if (calc.distanceTo(monster.getLocation()) < calc.distanceTo(npcTile)) {
  615. npcTile = monster.getLocation();
  616. closestMonster = monster;
  617. }
  618. }
  619. }
  620. if (closestMonster != null) {
  621. status = "Slaying monsters...";
  622. do {
  623. if (!getMyPlayer().isInCombat()) {
  624. if (!closestMonster.isOnScreen()) {
  625. walking.walkTileMM(closestMonster.getLocation());
  626. sleep(1000);
  627. }
  628. if (!getMyPlayer().isInCombat())
  629. closestMonster.doAction("Attack");
  630. sleep(1000);
  631. if (getMyPlayer().getHPPercent() < 50)
  632. eatFood();
  633. }
  634. } while (getMyPlayer().isInCombat());
  635. if (getMyPlayer().getHPPercent() < 70)
  636. eatFood();
  637. return true;
  638. }
  639. return false;
  640. }
  641.  
  642. private void openGuardianDoor() {
  643. do {
  644. if (cameraTurn) {
  645. camera.setAngle(camera.getAngle() + random(50, 90));
  646. camera.setPitch(random(50, 70));
  647. cameraTurn = false;
  648. }
  649. doorObject.doAction("Enter");
  650. sleep(1000);
  651. getLocation();
  652. } while (oldRoom.contains(myLoc));
  653. }
  654.  
  655. private void openLockedDoor() {
  656. while (objects.getNearest(doorObject2.getID()) != null && getMyPlayer().getAnimation() != 13798) {
  657. sleep(300);
  658. doorObject2.doAction("Unlock");
  659. sleep(300);
  660. if(getMyPlayer().getAnimation() == 13798)
  661. break;
  662. sleep(300);
  663. }
  664. lockedDoors.remove(nearDoor);
  665. sleep(1500);
  666. do {
  667. if (cameraTurn) {
  668. camera.setAngle(camera.getAngle() + random(50, 90));
  669. camera.setPitch(random(50, 70));
  670. cameraTurn = false;
  671. }
  672. doorObject.doAction("Open");
  673. sleep(1000);
  674. getLocation();
  675. } while (oldRoom.contains(myLoc));
  676. }
  677.  
  678.  
  679. private boolean eatFood() {
  680. while (inventory.containsAll(foods) && getMyPlayer().getHPPercent() < 50) {
  681. for (int food : foods) {
  682. RSItem item = inventory.getItem(food);
  683. if(item != null) {
  684. item.doClick(true);
  685. }
  686. }
  687. }
  688. return true;
  689. }
  690.  
  691. private boolean pickupKeys() {
  692. for (int I[] : keys) {
  693. for (int keyID : I) {
  694. RSGroundItem grabKey = groundItems.getNearest(keyID);
  695. if (grabKey != null) {
  696. log("Picking up key id: " + keyID);
  697. if (inventory.isFull()) {
  698. log("Inventory too full, dropping to make room.");
  699. inventory.dropAllExcept(I);
  700. }
  701. pickUpItem(keyID, grabKey.getLocation());
  702. return true;
  703. }
  704. }
  705. }
  706. return false;
  707. }
  708.  
  709. private boolean pickupFood() {
  710. do {
  711. foodItem = groundItems.getNearest(foods);
  712. if (foodItem != null) {
  713. pickUpItem(foodItem.getItem().getID(), foodItem.getLocation());
  714. sleep(2000);
  715. }
  716. } while (foodItem != null && DoOption[4]);
  717. return false;
  718. }
  719.  
  720.  
  721. private boolean pickUpItem(int itemID, RSTile tile) {
  722. String itemName = getItemName(itemID);
  723. while (!tiles.doAction(tile, "Take "+ itemName) && DoOption[4]) {
  724. if (calc.distanceTo(tile) > 3) {
  725. walking.walkTileMM(tile);
  726. camera.turnToTile(tile);
  727. sleep(500);
  728. }
  729. while (getMyPlayer().isMoving())
  730. sleep(500);
  731. sleep(1500);
  732. }
  733. return true;
  734. }
  735.  
  736. private String getItemName(int id) {
  737. for(int I=0; I<keys.length; I++) {
  738. for(int J=0; J<keys[I].length; J++) {
  739. if(id == keys[0][I])
  740. return "Orange";
  741. else if(id == keys[1][J])
  742. return "Silver";
  743. else if(id == keys[2][J])
  744. return "Yellow";
  745. else if(id == keys[3][J])
  746. return "Green";
  747. else if(id == keys[4][J])
  748. return "Blue";
  749. else if(id == keys[5][J])
  750. return "Purple";
  751. else if(id == keys[6][J])
  752. return "Crimson";
  753. else if(id == keys[7][J])
  754. return "Gold";
  755. }
  756. }
  757. if (id == shortFin)
  758. return "Short-finned eel";
  759. else if(id == redEye)
  760. return "Red-eye";
  761. else if(id == flatFish)
  762. return "Giant flatfish";
  763. else if(id == duskEel)
  764. return "Dusk eel";
  765. else if(id == heimCrab)
  766. return "Heim crab";
  767. else
  768. return grandExchange.getItemName(id);
  769. }
  770.  
  771. private boolean castDungeonSpell(int spell, String castType) {
  772. if (game.getCurrentTab() != Game.TAB_MAGIC) {
  773. game.openTab(Game.TAB_MAGIC);
  774. for (int i = 0; i < 100; i++) {
  775. sleep(20);
  776. if (game.getCurrentTab() == Game.TAB_MAGIC) {
  777. break;
  778. }
  779. }
  780. sleep(random(150, 250));
  781. }
  782. return game.getCurrentTab() == Game.TAB_MAGIC
  783. && interfaces.get(950).getComponent(spell).doAction(castType);
  784. }
  785.  
  786.  
  787. public void serverMessageRecieved(ServerMessageEvent e) {
  788. String message = e.getMessage();
  789. if(message.contains("Oh dear")) {
  790. log("Damn... we died. Walking back.");
  791. isDead = true;
  792. }
  793. if(message.contains("can't reach")) {
  794. cameraTurn = true;
  795. }
  796. }
  797.  
  798.  
  799. // Paint
  800. boolean showStats, showOptions, OptionsDrawn;
  801. boolean Option1 = true, Option2, Option3, Option4, Option5 = true;
  802. boolean[] DoOption = { Option1, Option2, Option3, Option4, Option5 };
  803.  
  804. private final Color BT1 = new Color(0, 0, 0, 200);
  805. private final Color BT2 = new Color(0, 0, 0, 150);
  806. private final Color BT3 = new Color(255, 255, 255, 210);
  807. private final Color RD1 = new Color(255, 0, 0, 130);
  808. private final Color RD2 = new Color(180, 0, 0, 130);
  809. private final Color GN1 = new Color(0, 255, 0, 130);
  810. private final Color GN2 = new Color(0, 130, 0, 80);
  811. private final Color BLK = new Color(0, 0, 0);
  812. private final Color WHT = new Color(255, 255, 255);
  813. private final Font Font1 = new Font("Arial", Font.BOLD, 11);
  814.  
  815. Rectangle PaintStats = new Rectangle(7, 345, 80, 15);
  816. Rectangle PaintOptions = new Rectangle(91, 345, 80, 15);
  817. Rectangle PaintStatus = new Rectangle(175, 345, 190, 15);
  818. Rectangle PaintOption1 = new Rectangle(100, 376, 13, 13);
  819. Rectangle PaintOption2 = new Rectangle(180, 376, 13, 13);
  820. Rectangle PaintOption3 = new Rectangle(260, 376, 13, 13);
  821. Rectangle PaintOption4 = new Rectangle(100, 410, 13, 13);
  822. Rectangle PaintOption5 = new Rectangle(180, 410, 13, 13);
  823. Rectangle[] mTabs = { PaintStats, PaintOptions };
  824. Rectangle[] mOption = { PaintOption1, PaintOption2, PaintOption3, PaintOption4, PaintOption5 };
  825.  
  826. public void onRepaint(Graphics g) {
  827. if (game.isLoggedIn()) {
  828. if (currentRoom != null && myLoc != null && currentRoom.contains(myLoc)) {
  829. // g.setColor(BLK);
  830. // g.fillRect(9, 461, 34, 10);
  831. for (RSArea door : openedDoors) {
  832. if (currentRoom.contains(door.getCentralTile())) {
  833. g.setColor(new Color(0, 255, 0));
  834. break;
  835. }
  836. }
  837. for (RSArea door : unopenedDoors) {
  838. if (currentRoom.contains(door.getCentralTile())) {
  839. g.setColor(new Color(255, 255, 0));
  840. break;
  841. }
  842. }
  843. for (RSArea door : lockedDoors) {
  844. if (currentRoom.contains(door.getCentralTile())) {
  845. g.setColor(new Color(255, 0, 0));
  846. break;
  847. }
  848. }
  849. g.setColor(new Color(0, 0, 255));
  850. Point mm1 = calc.tileToMinimap(currentRoom.getNearestTile(new RSTile(0, 0)));
  851. Point mm2 = calc.tileToMinimap(currentRoom.getNearestTile(new RSTile(0, 20000)));
  852. Point mm3 = calc.tileToMinimap(currentRoom.getNearestTile(new RSTile(20000, 20000)));
  853. Point mm4 = calc.tileToMinimap(currentRoom.getNearestTile(new RSTile(20000, 0)));
  854. int[] allX = { mm1.x, mm2.x, mm3.x, mm4.x };
  855. int[] allY = { mm1.y, mm2.y, mm3.y, mm4.y };
  856. int[] allX2 = { mm1.x+1, mm2.x+1, mm3.x-1, mm4.x-1 };
  857. int[] allY2 = { mm1.y+1, mm2.y-1, mm3.y-1, mm4.y+1 };
  858. g.drawPolygon(allX, allY, 4);
  859. g.drawPolygon(allX2, allY2, 4);
  860. }
  861. for (RSArea door : drawDoors) {
  862. if (calc.distanceTo(door.getCentralTile()) < 15) {
  863. if (lockedDoors.contains(door))
  864. g.setColor(new Color(255, 0, 0));
  865. else if (unopenedDoors.contains(door))
  866. g.setColor(new Color(255, 255, 0));
  867. else if (openedDoors.contains(door))
  868. g.setColor(new Color(0, 255, 0));
  869. else g.setColor(new Color(255, 255, 255));
  870. Point mm1 = calc.tileToMinimap(door.getNearestTile(new RSTile(0, 0)));
  871. Point mm2 = calc.tileToMinimap(door.getNearestTile(new RSTile(0, 20000)));
  872. Point mm3 = calc.tileToMinimap(door.getNearestTile(new RSTile(20000, 20000)));
  873. Point mm4 = calc.tileToMinimap(door.getNearestTile(new RSTile(20000, 0)));
  874. int[] allX = { mm1.x-1, mm1.x-1, mm2.x+1, mm2.x+1 };
  875. int[] allY = { mm1.y-1, mm2.y+1, mm3.y+1, mm4.y-1 };
  876. g.fillPolygon(allX, allY, 4);
  877. }
  878. }
  879.  
  880.  
  881. String hrs, mins, secs;
  882. long millis = System.currentTimeMillis() - startTime;
  883. runTime = System.currentTimeMillis() - startTime;
  884. long hours = millis / (1000 * 60 * 60);
  885. millis -= hours * (1000 * 60 * 60);
  886. long minutes = millis / (1000 * 60);
  887. millis -= minutes * (1000 * 60);
  888. long seconds = millis / 1000;
  889. if (hours < 10)
  890. hrs = "0" + hours;
  891. else hrs = "" + hours;
  892. if (minutes < 10)
  893. mins = "0" + minutes;
  894. else mins = "" + minutes;
  895. if (seconds < 10)
  896. secs = "0" + seconds;
  897. else secs = "" + seconds;
  898. xpGain = skills.getCurrentExp(Skills.DUNGEONEERING) - xpStart;
  899. eph = (int) ((3600000.0 / (double) runTime) * xpGain);
  900.  
  901. g.setColor(BT1);
  902. g.fillRect(7, 362, 490, 96);
  903. if (showStats) {
  904. g.setColor(BT3);
  905. g.drawString("Time running: " + hrs + ":" + mins + ":" + secs, 15, 377);
  906. g.drawString("Dungeons Completed: " + dungeonCount, 15, 395);
  907. g.drawString("Levels gained: " + levels, 15, 413);
  908. g.drawString("Xp gained: " + xpGain, 15, 431);
  909. g.drawString("Xp per hour: " + eph, 15, 449);
  910. g.drawString("Current room: " + (roomNumber + 1), 200, 395);
  911. g.drawString("Tokens gained: " + (xpGain / 10), 200, 413);
  912. g.setColor(BT1);
  913. g.fillRect(7, 360, 80, 2);
  914. } else if (PaintStats.contains(mp)) {
  915. g.setColor(BT2);
  916. } else {
  917. g.setColor(BT1);
  918. }
  919. g.fillRect(PaintStats.x, PaintStats.y, PaintStats.width, PaintStats.height);
  920. if (showOptions) {
  921. OptionsDrawn = true;
  922. for (int I = 0; I < DoOption.length; I++) {
  923. if (DoOption[I]) {
  924. if (mOption[I].contains(mp)) {
  925. g.setColor(GN2);
  926. } else { g.setColor(GN1); }
  927. } else if (mOption[I].contains(mp)) {
  928. g.setColor(RD2);
  929. } else { g.setColor(RD1); }
  930. g.fillRect(mOption[I].x, mOption[I].y, mOption[I].width, mOption[I].height);
  931. g.setColor(BLK);
  932. g.drawRect(mOption[I].x, mOption[I].y, mOption[I].width, mOption[I].height);
  933. }
  934. g.setColor(WHT);
  935. g.drawString("Combat style:", 10, 388);
  936. g.drawString("Setup:", 56, 422);
  937. g.setColor(BT3);
  938. g.drawString("Melee", 118, 388);
  939. g.drawString("Range", 198, 388);
  940. g.drawString("Mage", 278, 388);
  941. g.drawString("Prayers", 118, 422);
  942. g.drawString("Eating", 198, 422);
  943. g.setColor(BT1);
  944. g.fillRect(91, 360, 80, 2);
  945. } else if (PaintOptions.contains(mp)) {
  946. g.setColor(BT2);
  947. } else {
  948. g.setColor(BT1);
  949. }
  950. g.fillRect(PaintOptions.x, PaintOptions.y, PaintOptions.width, PaintOptions.height);
  951. g.fillRect(PaintStatus.x, PaintStatus.y, PaintStatus.width, PaintStatus.height);
  952. g.setFont(Font1);
  953. g.setColor(BT1);
  954. g.drawString("iDungeon v" + vers + " by kiko", 369, 357);
  955. g.setColor(WHT);
  956. g.drawString("Experience", 18, 356);
  957. g.drawString("Settings", 108, 356);
  958. g.setColor(GN1);
  959. g.drawString(status, 180, 356);
  960. }
  961. }
  962.  
  963.  
  964. public void mouseMoved(MouseEvent e) {
  965. mp = e.getPoint();
  966. }
  967. public void mouseClicked(MouseEvent e) {
  968. Point p = e.getPoint();
  969. if(PaintStats.contains(p)) {
  970. showStats = true;
  971. showOptions = false;
  972.  
  973. }
  974. if(PaintOptions.contains(p)) {
  975. showStats = false;
  976. showOptions = true;
  977. }
  978. if(showOptions && OptionsDrawn) {
  979. for(int I=0; I < mOption.length; I++) {
  980. if(mOption[I].contains(p)) {
  981. if (I == 0) {
  982. if (DoOption[I] == false)
  983. DoOption[I] = true;
  984. DoOption[1] = false;
  985. DoOption[2] = false;
  986. } else if (I == 1) {
  987. if (DoOption[I] == false)
  988. DoOption[I] = true;
  989. DoOption[0] = false;
  990. DoOption[2] = false;
  991. } else if (I == 2) {
  992. if (DoOption[I] == false)
  993. DoOption[I] = true;
  994. DoOption[0] = false;
  995. DoOption[1] = false;
  996. }
  997. if (I == 3) {
  998. if (DoOption[I] == false) {
  999. DoOption[I] = true;
  1000. log("Praying enabled.");
  1001. } else {
  1002. DoOption[I] = false;
  1003. log("Praying disabled.");
  1004. }
  1005. }
  1006. if (I == 4) {
  1007. if (DoOption[I] == false) {
  1008. DoOption[I] = true;
  1009. log("Eating enabled.");
  1010. } else {
  1011. DoOption[I] = false;
  1012. log("Eating disabled.");
  1013. }
  1014. }
  1015. }
  1016. }
  1017. }
  1018. }
  1019. public void mousePressed(MouseEvent e) { }
  1020. public void mouseReleased(MouseEvent e) { }
  1021. public void mouseEntered(MouseEvent e) { }
  1022. public void mouseExited(MouseEvent e) { }
  1023. }
Add Comment
Please, Sign In to add comment