Guest User

Untitled

a guest
Jan 18th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.94 KB | None | 0 0
  1. /**
  2. * @filename Rushee.js
  3. * @author kolton
  4. * @desc Rushee script that works with Rusher
  5. */
  6.  
  7. function Rushee() {
  8. var act, leader, target,
  9. actions = [];
  10.  
  11. this.findLeader = function (name) {
  12. var party = getParty(name);
  13.  
  14. if (party) {
  15. return party;
  16. }
  17.  
  18. return false;
  19. };
  20.  
  21. // Get leader's act from Party Unit
  22. this.checkLeaderAct = function (unit) {
  23. if (unit.area <= 39) {
  24. return 1;
  25. }
  26.  
  27. if (unit.area >= 40 && unit.area <= 74) {
  28. return 2;
  29. }
  30.  
  31. if (unit.area >= 75 && unit.area <= 102) {
  32. return 3;
  33. }
  34.  
  35. if (unit.area >= 103 && unit.area <= 108) {
  36. return 4;
  37. }
  38.  
  39. return 5;
  40. };
  41.  
  42. this.revive = function () {
  43. while (me.mode === 0) {
  44. delay(40);
  45. }
  46.  
  47. if (me.mode === 17) {
  48. me.revive();
  49.  
  50. while (!me.inTown) {
  51. delay(40);
  52. }
  53. }
  54. };
  55.  
  56. this.checkQuest = function (id, state) {
  57. sendPacket(1, 0x40);
  58. delay(500);
  59.  
  60. return me.getQuest(id, state);
  61. };
  62.  
  63. this.getQuestItem = function (classid, chestid) {
  64. var chest, item,
  65. tick = getTickCount();
  66.  
  67. if (me.getItem(classid)) {
  68. return true;
  69. }
  70.  
  71. if (me.inTown) {
  72. return false;
  73. }
  74.  
  75. chest = getUnit(2, chestid);
  76.  
  77. if (!chest) {
  78. return false;
  79. }
  80.  
  81. Misc.openChest(chest);
  82.  
  83. item = getUnit(4, classid);
  84.  
  85. if (!item) {
  86. if (getTickCount() - tick < 500) {
  87. delay(500);
  88. }
  89.  
  90. return false;
  91. }
  92.  
  93. return Pickit.pickItem(item) && delay(1000);
  94. };
  95.  
  96. this.checkQuestMonster = function (classid) {
  97. var monster = getUnit(1, classid);
  98.  
  99. if (monster) {
  100. while (monster.mode !== 12 && monster.mode !== 0) {
  101. delay(500);
  102. }
  103.  
  104. return true;
  105. }
  106.  
  107. return false;
  108. };
  109.  
  110. this.tyraelTalk = function () {
  111. var i,
  112. npc = getUnit(1, "tyrael");
  113.  
  114. if (!npc) {
  115. return false;
  116. }
  117.  
  118. for (i = 0; i < 3; i += 1) {
  119. if (getDistance(me, npc) > 3) {
  120. Pather.moveToUnit(npc);
  121. }
  122.  
  123. npc.interact();
  124. delay(1000 + me.ping);
  125. me.cancel();
  126.  
  127. if (Pather.getPortal(null)) {
  128. me.cancel();
  129.  
  130. break;
  131. }
  132. }
  133.  
  134. return Pather.usePortal(null) || Pather.usePortal(null, Config.Leader);
  135. };
  136.  
  137. this.cubeStaff = function () {
  138. var staff = me.getItem("vip"),
  139. amulet = me.getItem("msf");
  140.  
  141. if (!staff || !amulet) {
  142. return false;
  143. }
  144.  
  145. Storage.Cube.MoveTo(amulet);
  146. Storage.Cube.MoveTo(staff);
  147. Cubing.openCube();
  148. print("making staff");
  149. transmute();
  150. delay(750 + me.ping);
  151. Cubing.emptyCube();
  152. me.cancel();
  153.  
  154. return true;
  155. };
  156.  
  157. this.placeStaff = function () {
  158. var staff, item,
  159. tick = getTickCount(),
  160. orifice = getUnit(2, 152);
  161.  
  162. if (!orifice) {
  163. return false;
  164. }
  165.  
  166. Misc.openChest(orifice);
  167.  
  168. staff = me.getItem(91);
  169.  
  170. if (!staff) {
  171. if (getTickCount() - tick < 500) {
  172. delay(500);
  173. }
  174.  
  175. return false;
  176. }
  177.  
  178. staff.toCursor();
  179. submitItem();
  180. delay(750 + me.ping);
  181.  
  182. // unbug cursor
  183. item = me.findItem(-1, 0, 3);
  184.  
  185. if (item && item.toCursor()) {
  186. Storage.Inventory.MoveTo(item);
  187. }
  188.  
  189. return true;
  190. };
  191.  
  192. this.changeAct = function (act) {
  193. var npc,
  194. preArea = me.area;
  195.  
  196. if (me.mode === 17) {
  197. me.revive();
  198.  
  199. while (!me.inTown) {
  200. delay(500);
  201. }
  202. }
  203.  
  204. if (me.act === act) {
  205. return true;
  206. }
  207.  
  208. try {
  209. switch (act) {
  210. case 2:
  211. if (me.act >= 2) {
  212. break;
  213. }
  214.  
  215. Town.move("warriv");
  216.  
  217. npc = getUnit(1, "warriv");
  218.  
  219. if (!npc || !npc.openMenu()) {
  220. return false;
  221. }
  222.  
  223. Misc.useMenu(0x0D36);
  224.  
  225. break;
  226. case 3:
  227. if (me.act >= 3) {
  228. break;
  229. }
  230.  
  231. Pather.usePortal(50, Config.Leader);
  232. Pather.moveToExit(40, true);
  233.  
  234. npc = getUnit(1, "jerhyn");
  235.  
  236. if (!npc || !npc.openMenu()) {
  237. Pather.moveTo(5166, 5206);
  238.  
  239. return false;
  240. }
  241.  
  242. me.cancel();
  243. Pather.moveToExit(50, true);
  244. Pather.usePortal(40, Config.Leader);
  245. Town.move("meshif");
  246.  
  247. npc = getUnit(1, "meshif");
  248.  
  249. if (!npc || !npc.openMenu()) {
  250. return false;
  251. }
  252.  
  253. Misc.useMenu(0x0D38);
  254.  
  255. break;
  256. case 4:
  257. if (me.act >= 4) {
  258. break;
  259. }
  260.  
  261. if (me.inTown) {
  262. Town.move("cain");
  263.  
  264. npc = getUnit(1, "deckard cain");
  265.  
  266. if (!npc || !npc.openMenu()) {
  267. return false;
  268. }
  269.  
  270. me.cancel();
  271. Pather.usePortal(102, Config.Leader);
  272. } else {
  273. delay(1500);
  274. }
  275.  
  276. Pather.moveTo(17591, 8070);
  277. Pather.usePortal(null);
  278.  
  279. break;
  280. case 5:
  281. if (me.act >= 5) {
  282. break;
  283. }
  284.  
  285. Town.move("tyrael");
  286.  
  287. npc = getUnit(1, "tyrael");
  288.  
  289. if (!npc || !npc.openMenu()) {
  290. return false;
  291. }
  292.  
  293. delay(me.ping + 1);
  294.  
  295. if (getUnit(2, 566)) {
  296. me.cancel();
  297. Pather.useUnit(2, 566, 109);
  298. } else {
  299. Misc.useMenu(0x58D2);
  300. }
  301.  
  302. break;
  303. }
  304.  
  305. delay(1000 + me.ping * 2);
  306.  
  307. while (!me.area) {
  308. delay(500);
  309. }
  310.  
  311. if (me.area === preArea) {
  312. me.cancel();
  313. Town.move("portalspot");
  314. say("Act change failed.");
  315.  
  316. return false;
  317. }
  318.  
  319. say("Act change done.");
  320. } catch (e) {
  321. return false;
  322. }
  323.  
  324. return true;
  325. };
  326.  
  327. addEventListener("chatmsg",
  328. function (who, msg) {
  329. if (who === Config.Leader) {
  330. actions.push(msg);
  331. }
  332. });
  333.  
  334. // START
  335. if (me.inTown) {
  336. Town.move("portalspot");
  337. }
  338.  
  339. while (!leader) {
  340. leader = this.findLeader(Config.Leader);
  341.  
  342. delay(500);
  343. }
  344.  
  345. say("Leader found.");
  346.  
  347. while (true) {
  348. try {
  349. if (actions.length > 0) {
  350. switch (actions[0]) {
  351. case "all in":
  352. switch (leader.area) {
  353. case 49: // Pick Book of Skill, use Book of Skill
  354. Town.move("portalspot");
  355. Pather.usePortal(49, Config.Leader);
  356. delay(500);
  357.  
  358. while (true) {
  359. target = getUnit(4, 552);
  360.  
  361. if (!target) {
  362. break;
  363. }
  364.  
  365. Pickit.pickItem(target);
  366. delay(250);
  367.  
  368. if (me.getItem(552)) {
  369. print("Using book of skill");
  370. clickItem(1, me.getItem(552));
  371.  
  372. break;
  373. }
  374. }
  375.  
  376. Pather.usePortal(40, Config.Leader);
  377. actions.shift();
  378.  
  379. break;
  380. }
  381.  
  382. actions.shift();
  383.  
  384. break;
  385. case "1":
  386. while (!leader.area) {
  387. delay(500);
  388. }
  389.  
  390. //print(leader.area);
  391.  
  392. if (!Config.Rushee.Quester) {
  393. //print("not a quester");
  394. actions.shift();
  395.  
  396. break;
  397. }
  398.  
  399. act = this.checkLeaderAct(leader);
  400.  
  401. if (me.act !== act) {
  402. Town.goToTown(act);
  403. Town.move("portalspot");
  404. }
  405.  
  406. switch (leader.area) {
  407. case 37: // Catacombs level 4
  408. if (!Pather.usePortal(37, Config.Leader)) {
  409. break;
  410. }
  411.  
  412. target = Pather.getPortal(null, Config.Leader);
  413.  
  414. if (target) {
  415. Pather.walkTo(target.x, target.y);
  416. }
  417.  
  418. actions.shift();
  419.  
  420. break;
  421. case 49:
  422. Town.move("portalspot");
  423.  
  424. if (Pather.usePortal(49, Config.Leader)) {
  425. actions.shift();
  426. }
  427.  
  428. break;
  429. case 60: // Halls of the Dead level 3
  430. Pather.usePortal(60, Config.Leader);
  431. this.getQuestItem(549, 354);
  432. Pather.usePortal(40, Config.Leader);
  433.  
  434. actions.shift();
  435.  
  436. break;
  437. case 61: // Claw Viper Temple level 2
  438. Pather.usePortal(61, Config.Leader);
  439. this.getQuestItem(521, 149);
  440. Pather.usePortal(40, Config.Leader);
  441. Town.move("drognan");
  442.  
  443. target = getUnit(1, "drognan");
  444.  
  445. if (target && target.openMenu()) {
  446. actions.shift();
  447. me.cancel();
  448. say("drognan done");
  449. }
  450.  
  451. Town.move("portalspot");
  452.  
  453. break;
  454. case 64: // Maggot Lair level 3
  455. Pather.usePortal(64, Config.Leader);
  456. this.getQuestItem(92, 356);
  457. delay(500);
  458. Pather.usePortal(40, Config.Leader);
  459. this.cubeStaff();
  460.  
  461. actions.shift();
  462.  
  463. break;
  464. case 74: // Arcane Sanctuary
  465. if (!Pather.usePortal(74, Config.Leader)) {
  466. break;
  467. }
  468.  
  469. actions.shift();
  470.  
  471. break;
  472. case 66: // Tal Rasha's Tombs
  473. case 67:
  474. case 68:
  475. case 69:
  476. case 70:
  477. case 71:
  478. case 72:
  479. Pather.usePortal(null, Config.Leader);
  480. this.placeStaff();
  481. Pather.usePortal(40, Config.Leader);
  482. actions.shift();
  483.  
  484. break;
  485. case 73: // Duriel's Lair
  486. Pather.usePortal(73, Config.Leader);
  487. this.tyraelTalk();
  488.  
  489. actions.shift();
  490.  
  491. break;
  492. case 83: // Travincal
  493. if (!Pather.usePortal(83, Config.Leader)) {
  494. me.cancel();
  495.  
  496. break;
  497. }
  498.  
  499. actions.shift();
  500.  
  501. break;
  502. case 94: // Ruined Temple
  503. if (!Pather.usePortal(94, Config.Leader)) {
  504. me.cancel();
  505.  
  506. break;
  507. }
  508.  
  509. target = getUnit(2, 193);
  510.  
  511. Misc.openChest(target);
  512. delay(300);
  513.  
  514. target = getUnit(4, 548);
  515.  
  516. Pickit.pickItem(target);
  517. Pather.usePortal(75, Config.Leader);
  518. Town.move("alkor");
  519.  
  520. target = getUnit(1, "alkor");
  521.  
  522. if (target && target.openMenu()) {
  523. me.cancel();
  524. }
  525.  
  526. Town.move("portalspot");
  527. actions.shift();
  528.  
  529. break;
  530. case 102: // Durance of Hate level 3
  531. if (!Pather.usePortal(102, Config.Leader)) {
  532. me.cancel();
  533.  
  534. break;
  535. }
  536.  
  537. actions.shift();
  538.  
  539. break;
  540. case 104: // sometimes the portal can be in city of the damned...
  541. case 105:
  542. if (Pather.usePortal(null, Config.Leader)) {
  543. actions.shift();
  544. }
  545.  
  546. break;
  547. case 108: // Chaos Sanctuary
  548. Pather.usePortal(108, Config.Leader);
  549. Pather.moveTo(7762, 5268);
  550. Packet.flash(me.gid);
  551. delay(500);
  552. Pather.walkTo(7763, 5267, 2);
  553.  
  554. while (!getUnit(1, 243)) {
  555. delay(500);
  556. }
  557.  
  558. Pather.moveTo(7763, 5267);
  559. actions.shift();
  560.  
  561. break;
  562. case 110: // Bloody Foothils
  563. Pather.usePortal(110, Config.Leader);
  564. actions.shift();
  565.  
  566. break;
  567. case 114: // Frozen River
  568. Town.move("malah");
  569.  
  570. target = getUnit(1, "malah");
  571.  
  572. if (target && target.openMenu()) {
  573. me.cancel();
  574. }
  575.  
  576. Pather.usePortal(114, Config.Leader);
  577. delay(500);
  578.  
  579. target = getUnit(2, 558);
  580.  
  581. if (target) {
  582. Pather.moveToUnit(target);
  583. sendPacket(1, 0x13, 4, 0x2, 4, target.gid);
  584. delay(1000);
  585. me.cancel();
  586. }
  587.  
  588. actions.shift();
  589.  
  590. break;
  591. default: // unsupported area
  592. actions.shift();
  593.  
  594. break;
  595. }
  596.  
  597. break;
  598. case "2": // Go back to town and check quest
  599. if (!Config.Rushee.Quester) {
  600. switch (leader.area) {
  601. // Non-questers can piggyback off quester out messages
  602. case 110: // Shenk
  603. if (me.act === 5) {
  604. Town.move("larzuk");
  605.  
  606. target = getUnit(1, "larzuk");
  607.  
  608. if (target && target.openMenu()) {
  609. me.cancel();
  610. }
  611. }
  612.  
  613. break;
  614. case 114: // Anya
  615. if (me.act === 5) {
  616. Town.move("malah");
  617.  
  618. target = getUnit(1, "malah");
  619.  
  620. if (target && target.openMenu()) {
  621. me.cancel();
  622. }
  623.  
  624. if (me.getItem(646)) {
  625. print("Using scroll of resistance");
  626. clickItem(1, me.getItem(646));
  627. }
  628. }
  629.  
  630. break;
  631. case 104:
  632. case 105:
  633. if (me.act === 4 && this.checkQuest(25, 1)) {
  634. Town.move(NPC.Tyrael);
  635.  
  636. target = getUnit(1, "tyrael");
  637.  
  638. if (target && target.openMenu()) {
  639. me.cancel();
  640. }
  641. }
  642.  
  643. break;
  644. }
  645.  
  646. actions.shift();
  647.  
  648. break;
  649. }
  650.  
  651. switch (me.area) {
  652. case 37: // Catacombs level 4
  653. this.revive();
  654.  
  655. // Go to town if not there, break if procedure fails
  656. if (!me.inTown && !Pather.usePortal(1, Config.Leader)) {
  657. break;
  658. }
  659.  
  660. if (!this.checkQuest(6, 4)) {
  661. D2Bot.printToConsole("Andariel quest failed", 9);
  662. quit();
  663. }
  664.  
  665. actions.shift();
  666.  
  667. break;
  668. case 49: // Sewers 3
  669. this.revive();
  670.  
  671. if (!me.inTown && !Pather.usePortal(40, Config.Leader)) {
  672. break;
  673. }
  674.  
  675. actions.shift();
  676.  
  677. break;
  678. case 74: // Arcane Sanctuary
  679. this.revive();
  680.  
  681. if (!me.inTown && !Pather.usePortal(40, Config.Leader)) {
  682. break;
  683. }
  684.  
  685. Town.move("atma");
  686.  
  687. target = getUnit(1, 176); // Atma
  688.  
  689. if (target && target.openMenu()) {
  690. me.cancel();
  691. } else {
  692. break;
  693. }
  694.  
  695. if (!this.checkQuest(13, 0)) {
  696. D2Bot.printToConsole("Summoner quest failed", 9);
  697. quit();
  698. }
  699.  
  700. Town.move("portalspot");
  701. actions.shift();
  702.  
  703. break;
  704. case 83: // Travincal
  705. this.revive();
  706.  
  707. if (!me.inTown && !Pather.usePortal(75, Config.Leader)) {
  708. break;
  709. }
  710.  
  711. Town.move("cain");
  712.  
  713. target = getUnit(1, NPC.Cain);
  714.  
  715. if (target && target.openMenu()) {
  716. me.cancel();
  717. } else {
  718. break;
  719. }
  720.  
  721. if (!this.checkQuest(21, 0)) {
  722. D2Bot.printToConsole("Travincal quest failed", 9);
  723. quit();
  724. }
  725.  
  726. Town.move("portalspot");
  727. actions.shift();
  728.  
  729. break;
  730. case 102: // Durance 2
  731. this.revive();
  732.  
  733. if (!Pather.usePortal(75, Config.Leader)) {
  734. break;
  735. }
  736.  
  737. actions.shift();
  738.  
  739. break;
  740. case 104:
  741. case 105:
  742. this.revive();
  743.  
  744. if (!me.inTown && !Pather.usePortal(103, Config.Leader)) {
  745. break;
  746. }
  747.  
  748. if (this.checkQuest(25, 1)) {
  749. Town.move(NPC.Tyrael);
  750.  
  751. target = getUnit(1, "tyrael");
  752.  
  753. if (target && target.openMenu()) {
  754. me.cancel();
  755. }
  756.  
  757. Town.move("portalspot");
  758. }
  759.  
  760. actions.shift();
  761.  
  762. break;
  763. case 108: // Chaos Sanctuary
  764. this.revive();
  765.  
  766. if (me.gametype === 0) {
  767. D2Bot.restart();
  768.  
  769. break;
  770. }
  771.  
  772. if (!me.inTown && !Pather.usePortal(103, Config.Leader)) {
  773. break;
  774. }
  775.  
  776. actions.shift();
  777.  
  778. break;
  779. case 110: // Bloody Foothils
  780. this.revive();
  781.  
  782. if (!me.inTown && !Pather.usePortal(109, Config.Leader)) {
  783. break;
  784. }
  785.  
  786. Town.move("larzuk");
  787.  
  788. target = getUnit(1, "larzuk");
  789.  
  790. if (target && target.openMenu()) {
  791. me.cancel();
  792. }
  793.  
  794. Town.move("portalspot");
  795. actions.shift();
  796.  
  797. break;
  798. case 114: // Frozen River
  799. this.revive();
  800.  
  801. if (!me.inTown && !Pather.usePortal(109, Config.Leader)) {
  802. break;
  803. }
  804.  
  805. Town.move("malah");
  806.  
  807. target = getUnit(1, "malah");
  808.  
  809. if (target && target.openMenu()) {
  810. me.cancel();
  811. }
  812.  
  813. if (me.getItem(646)) {
  814. print("Using Scroll of Resistance");
  815. clickItem(1, me.getItem(646));
  816. }
  817.  
  818. Town.move("portalspot");
  819. actions.shift();
  820.  
  821. break;
  822. default:
  823. Town.move("portalspot");
  824. actions.shift();
  825.  
  826. break;
  827. }
  828.  
  829. break;
  830. case "3": // Bumper
  831. if (!Config.Rushee.Bumper) {
  832. actions.shift();
  833.  
  834. break;
  835. }
  836.  
  837. while (!leader.area) {
  838. delay(500);
  839. }
  840.  
  841. act = this.checkLeaderAct(leader);
  842.  
  843. if (me.act !== act) {
  844. Town.goToTown(act);
  845. Town.move("portalspot");
  846. }
  847.  
  848. switch (leader.area) {
  849. case 120: // Arreat Summit
  850. if (!Pather.usePortal(120, Config.Leader)) {
  851. break;
  852. }
  853.  
  854. // Wait until portal is gone
  855. while (Pather.getPortal(109, Config.Leader)) {
  856. delay(500);
  857. }
  858.  
  859. // Wait until portal is up again
  860. while (!Pather.getPortal(109, Config.Leader)) {
  861. delay(500);
  862. }
  863.  
  864. if (!Pather.usePortal(109, Config.Leader)) {
  865. break;
  866. }
  867.  
  868. actions.shift();
  869.  
  870. break;
  871. case 132: // Worldstone Chamber
  872. if (!Pather.usePortal(132, Config.Leader)) {
  873. break;
  874. }
  875.  
  876. actions.shift();
  877.  
  878. break;
  879. }
  880.  
  881. break;
  882. case "quit":
  883. quit();
  884.  
  885. break;
  886. case "exit":
  887. case "bye ~":
  888. D2Bot.restart();
  889.  
  890. break;
  891. case "a2":
  892. if (!this.changeAct(2)) {
  893. break;
  894. }
  895.  
  896. target = getUnit(1, "jerhyn");
  897.  
  898. if (target) {
  899. target.openMenu();
  900. }
  901.  
  902. me.cancel();
  903. Town.move("portalspot");
  904. actions.shift();
  905.  
  906. break;
  907. case "a3":
  908. if (!this.changeAct(3)) {
  909. break;
  910. }
  911.  
  912. Town.move("portalspot");
  913. actions.shift();
  914.  
  915. break;
  916. case "a4":
  917. if (!this.changeAct(4)) {
  918. break;
  919. }
  920.  
  921. Town.move("portalspot");
  922. actions.shift();
  923.  
  924. break;
  925. case "a5":
  926. if (!this.changeAct(5)) {
  927. break;
  928. }
  929.  
  930. Town.move("portalspot");
  931. actions.shift();
  932.  
  933. break;
  934. case me.name + " quest":
  935. say("I am quester.");
  936.  
  937. Config.Rushee.Quester = true;
  938.  
  939. actions.shift();
  940.  
  941. break;
  942. default: // Invalid command
  943. actions.shift();
  944.  
  945. break;
  946. }
  947. }
  948. } catch (e) {
  949. if (me.mode === 17) {
  950. me.revive();
  951.  
  952. while (!me.inTown) {
  953. delay(500);
  954. }
  955. }
  956. }
  957.  
  958. if (getUIFlag(0x17)) {
  959. me.cancel();
  960. }
  961.  
  962. delay(500);
  963. }
  964.  
  965. return true;
  966. }
Add Comment
Please, Sign In to add comment