Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.67 KB | None | 0 0
  1. /**
  2. * @filename Cows.js
  3. * @author kolton
  4. * @desc clear the Moo Moo Farm without killing the Cow King
  5. */
  6.  
  7. function Cows() {
  8. this.buildCowRooms = function () {
  9. var i, j, room, kingPreset, badRooms, badRooms2,
  10. finalRooms = [],
  11. indexes = [];
  12.  
  13. kingPreset = getPresetUnit(me.area, 1, 773);
  14. badRooms = getRoom(kingPreset.roomx * 5 + kingPreset.x, kingPreset.roomy * 5 + kingPreset.y).getNearby();
  15.  
  16. for (i = 0; i < badRooms.length; i += 1) {
  17. badRooms2 = badRooms[i].getNearby();
  18.  
  19. for (j = 0; j < badRooms2.length; j += 1) {
  20. if (indexes.indexOf(badRooms2[j].x + "" + badRooms2[j].y) === -1) {
  21. indexes.push(badRooms2[j].x + "" + badRooms2[j].y);
  22. }
  23. }
  24. }
  25.  
  26. room = getRoom();
  27.  
  28. do {
  29. if (indexes.indexOf(room.x + "" + room.y) === -1) {
  30. finalRooms.push([room.x * 5 + room.xsize / 2, room.y * 5 + room.ysize / 2]);
  31. }
  32. } while (room.getNext());
  33.  
  34. return finalRooms;
  35. };
  36.  
  37. this.clearCowLevel = function () {
  38. if (Config.MFLeader) {
  39. Pather.makePortal();
  40. say("cows");
  41. }
  42.  
  43. var room, result, myRoom,
  44. rooms = this.buildCowRooms();
  45.  
  46. function RoomSort(a, b) {
  47. return getDistance(myRoom[0], myRoom[1], a[0], a[1]) - getDistance(myRoom[0], myRoom[1], b[0], b[1]);
  48. }
  49.  
  50. while (rooms.length > 0) {
  51. // get the first room + initialize myRoom var
  52. if (!myRoom) {
  53. room = getRoom(me.x, me.y);
  54. }
  55.  
  56. if (room) {
  57. if (room instanceof Array) { // use previous room to calculate distance
  58. myRoom = [room[0], room[1]];
  59. } else { // create a new room to calculate distance (first room, done only once)
  60. myRoom = [room.x * 5 + room.xsize / 2, room.y * 5 + room.ysize / 2];
  61. }
  62. }
  63.  
  64. rooms.sort(RoomSort);
  65. room = rooms.shift();
  66.  
  67. result = Pather.getNearestWalkable(room[0], room[1], 10, 2);
  68.  
  69. if (result) {
  70. Pather.moveTo(result[0], result[1], 3);
  71.  
  72. if (!Attack.clear(30)) {
  73. return false;
  74. }
  75. }
  76. }
  77.  
  78. return true;
  79. };
  80.  
  81. this.getLeg = function () {
  82. var i, portal, wirt, leg, gid;
  83.  
  84. if (me.getItem(88)) {
  85. return me.getItem(88);
  86. }
  87.  
  88. Pather.useWaypoint(4);
  89. Precast.doPrecast(true);
  90. Pather.moveToPreset(me.area, 1, 737, 8, 8);
  91.  
  92. for (i = 0; i < 6; i += 1) {
  93. portal = Pather.getPortal(38);
  94.  
  95. if (portal) {
  96. Pather.usePortal(null, null, portal);
  97.  
  98. break;
  99. }
  100.  
  101. delay(500);
  102. }
  103.  
  104. if (!portal) {
  105. throw new Error("Tristram portal not found");
  106. }
  107.  
  108. Pather.moveTo(25048, 5177);
  109.  
  110. wirt = getUnit(2, 268);
  111.  
  112. for (i = 0; i < 8; i += 1) {
  113. wirt.interact();
  114. delay(500);
  115.  
  116. leg = getUnit(4, 88);
  117.  
  118. if (leg) {
  119. gid = leg.gid;
  120.  
  121. Pickit.pickItem(leg);
  122. Town.goToTown();
  123.  
  124. return me.getItem(-1, -1, gid);
  125. }
  126. }
  127.  
  128. throw new Error("Failed to get the leg");
  129. };
  130.  
  131. this.getTome = function () {
  132. var tome,
  133. myTome = me.findItem("tbk", 0, 3),
  134. akara = Town.initNPC("Shop");
  135.  
  136. tome = me.getItem("tbk");
  137.  
  138. if (tome) {
  139. do {
  140. if (!myTome || tome.gid !== myTome.gid) {
  141. return copyUnit(tome);
  142. }
  143. } while (tome.getNext());
  144. }
  145.  
  146. if (!akara) {
  147. throw new Error("Failed to buy tome");
  148. }
  149.  
  150. tome = akara.getItem("tbk");
  151.  
  152. if (tome.buy()) {
  153. tome = me.getItem("tbk");
  154.  
  155. if (tome) {
  156. do {
  157. if (!myTome || tome.gid !== myTome.gid) {
  158. return copyUnit(tome);
  159. }
  160. } while (tome.getNext());
  161. }
  162. }
  163.  
  164. throw new Error("Failed to buy tome");
  165. };
  166.  
  167. this.openPortal = function (leg, tome) {
  168. var i;
  169.  
  170. if (!Town.openStash()) {
  171. throw new Error("Failed to open stash");
  172. }
  173.  
  174. if (!Cubing.emptyCube()) {
  175. throw new Error("Failed to empty cube");
  176. }
  177.  
  178. if (!Storage.Cube.MoveTo(leg) || !Storage.Cube.MoveTo(tome) || !Cubing.openCube()) {
  179. throw new Error("Failed to cube leg and tome");
  180. }
  181.  
  182. transmute();
  183. delay(500);
  184.  
  185. for (i = 0; i < 10; i += 1) {
  186. if (Pather.getPortal(39)) {
  187. return true;
  188. }
  189.  
  190. delay(200);
  191. }
  192.  
  193. throw new Error("Portal not found");
  194. };
  195.  
  196. var leg, tome;
  197.  
  198.  
  199. /*
  200.  
  201. if (me.getQuest(4, 10)) { // king dead or cain not saved
  202. throw new Error("Already killed the Cow King.");
  203. }
  204. */
  205.  
  206. if (!me.getQuest(4, 0)) {
  207. throw new Error("Cain quest incomplete");
  208. }
  209.  
  210. switch (me.gametype) {
  211. case 0: // classic
  212. if (!me.getQuest(26, 0)) { // diablo not completed
  213. throw new Error("Diablo quest incomplete.");
  214. }
  215.  
  216. break;
  217. case 1: // expansion
  218. if (!me.getQuest(40, 0)) { // baal not completed
  219. throw new Error("Baal quest incomplete.");
  220. }
  221.  
  222. break;
  223. }
  224.  
  225. Town.goToTown(1);
  226. Town.doChores();
  227.  
  228. leg = this.getLeg();
  229. tome = this.getTome();
  230.  
  231. this.openPortal(leg, tome);
  232. Pather.usePortal(39);
  233. Precast.doPrecast(false);
  234. this.clearCowLevel();
  235.  
  236. return true;
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement