Advertisement
kolton

Untitled

Jul 12th, 2012
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.28 KB | None | 0 0
  1. var muler, mulerStatus,
  2. makeNext = false,
  3. status = "loading";
  4.  
  5. // Mule Data object manipulates external mule datafile
  6. var MuleData = {
  7. // create a new mule datafile
  8. create: function () {
  9. var obj, string;
  10.  
  11. obj = {
  12. account: "",
  13. accNum: 0,
  14. character: "",
  15. charNum: 0,
  16. fullChars: []
  17. };
  18.  
  19. string = JSON.stringify(obj);
  20.  
  21. FileTools.writeText("AutoMule." + AutoMule.realm + ".json", string);
  22. },
  23.  
  24. // read data from the mule datafile and return the data object
  25. read: function () {
  26. var obj, string;
  27.  
  28. string = FileTools.readText("AutoMule." + AutoMule.realm + ".json");
  29. obj = JSON.parse(string);
  30.  
  31. return obj;
  32. },
  33.  
  34. // write a data object to the mule datafile
  35. write: function (obj) {
  36. var string = JSON.stringify(obj);
  37.  
  38. FileTools.writeText("AutoMule." + AutoMule.realm + ".json", string);
  39. }
  40. };
  41.  
  42. // stash picked items
  43. function stashItems() {
  44. var i,
  45. items = me.getItems();
  46.  
  47. for (i = 0; i < items.length; i += 1) {
  48. if (items[i].mode === 0 && items[i].location === 3) {
  49. Storage.Stash.MoveTo(items[i]);
  50. }
  51. }
  52.  
  53. return true;
  54. }
  55.  
  56. // pick items from ground
  57. function pickItems() {
  58. var canFit, item,
  59. rval = "done",
  60. list = [];
  61.  
  62. while (true) {
  63. if (mulerStatus === "done") {
  64. item = getUnit(4, -1, 3); // item, on ground
  65.  
  66. if (item) {
  67. do {
  68. list.push(copyUnit(item));
  69. } while (item.getNext());
  70. }
  71.  
  72. while (list.length > 0) {
  73. item = list.shift();
  74. canFit = Storage.Inventory.CanFit(item);
  75.  
  76. if (!canFit) {
  77. stashItems();
  78.  
  79. canFit = Storage.Inventory.CanFit(item);
  80. }
  81.  
  82. if (canFit) {
  83. Pickit.pickItem(item);
  84. } else {
  85. rval = "next";
  86. }
  87. }
  88.  
  89. break;
  90. } else {
  91. //sendCopyData(null, muler, 0, "report");
  92. D2Bot.shoutGlobal("report", 0);
  93. }
  94.  
  95. delay(1000);
  96. }
  97.  
  98. return rval;
  99. }
  100.  
  101. // muler/mule communication function
  102. function CopyDataEvent(mode, msg) {
  103. // mode check instead of msg check because of crashes
  104. switch (mode) {
  105. case 0: // mule request
  106. //sendCopyData(null, msg, 0, status);
  107. D2Bot.shoutGlobal(status, 0);
  108.  
  109. muler = msg;
  110.  
  111. break;
  112. case 1: // begin item pickup
  113. status = "begin";
  114.  
  115. break;
  116. case 2: // get muler's status
  117. mulerStatus = msg;
  118.  
  119. break;
  120. }
  121. }
  122.  
  123. // set next account - increase account number in mule datafile
  124. function nextAccount() {
  125. var obj = MuleData.read();
  126.  
  127. obj.accNum = obj.accNum + 1;
  128. obj.account = AutoMule.accountPrefix + obj.accNum;
  129. obj.character = "";
  130. obj.charNum = 0;
  131. obj.fullChars = [];
  132.  
  133. MuleData.write(obj);
  134.  
  135. return obj.account;
  136. }
  137.  
  138. // set next character - increase character number in mule datafile
  139. function nextChar() {
  140. var i, num,
  141. charSuffix = "",
  142. charNumbers = "abcdefghijklmnopqrstuvwxyz",
  143. obj = MuleData.read();
  144.  
  145. num = obj.accNum.toString();
  146.  
  147. for (i = 0; i < num.length; i += 1) {
  148. charSuffix += charNumbers[parseInt(num[i], 10)];
  149. }
  150.  
  151. charSuffix += charNumbers[obj.charNum];
  152. obj.charNum = obj.charNum + 1;
  153. obj.character = AutoMule.charPrefix + charSuffix;
  154.  
  155. MuleData.write(obj);
  156.  
  157. return obj.character;
  158. }
  159.  
  160. include("json2.js");
  161. include("oog.js");
  162. include("automule.js");
  163. include("mulelogger.js");
  164. include("NTItemParser.dbl");
  165. include("common/storage.js");
  166. include("common/pickit.js");
  167. include("common/town.js");
  168. include("common/pather.js");
  169. include("common/misc.js");
  170. include("common/config.js");
  171. include("common/prototypes.js");
  172. load("tools/heartbeat.js");
  173.  
  174. addEventListener("copydata", CopyDataEvent);
  175.  
  176. function main() {
  177. var obj;
  178.  
  179. // ugly solution to uglier problem - pickItem area update
  180. if (!FileTools.exists("data/" + me.profile + ".json")) {
  181. DataFile.create();
  182. }
  183.  
  184. // create mule datafile if it doesn't exist
  185. if (!FileTools.exists("AutoMule." + AutoMule.realm + ".json")) {
  186. MuleData.create();
  187. }
  188.  
  189. while (true) {
  190. if (me.gameReady) {
  191. if (status === "loading") {
  192. status = "ready";
  193.  
  194. D2Bot.printToConsole("In mule game.");
  195. Storage.Init();
  196. }
  197.  
  198. while (status !== "begin") {
  199. delay(500);
  200. }
  201.  
  202. me.overhead("begin");
  203.  
  204. switch (pickItems()) {
  205. // done picking, tell the muler to leave game and kill mule profile
  206. case "done":
  207. //sendCopyData(null, muler, 0, "quit");
  208. D2Bot.shoutGlobal("quit", 0);
  209. MuleLogger.logChar();
  210. delay(500);
  211. D2Bot.printToConsole("Done muling.");
  212. D2Bot.stop();
  213.  
  214. break;
  215. // can't fit more items, get to next character or account
  216. case "next":
  217. MuleLogger.logChar();
  218. delay(500);
  219. makeNext = true;
  220. obj = MuleData.read();
  221.  
  222. obj.fullChars.push(me.name);
  223. MuleData.write(obj);
  224. nextChar();
  225. D2Bot.printToConsole("Mule full, getting next character.");
  226. quit();
  227.  
  228. break;
  229. }
  230. }
  231.  
  232. locationAction(getLocation());
  233. delay(1000);
  234. }
  235. }
  236.  
  237. function locationAction(location) {
  238. var obj, info;
  239.  
  240. switch (location) {
  241. case 1:
  242. case 3:
  243. if (makeNext) {
  244. ControlAction.click(6, 693, 490, 80, 20);
  245.  
  246. break;
  247. }
  248.  
  249. ControlAction.click(6, 652, 469, 120, 20); // Join
  250.  
  251. break;
  252. case 4:
  253. delay(2000);
  254. createGame(AutoMule.muleGameName[0], AutoMule.muleGameName[1]);
  255. delay(2000);
  256.  
  257. break;
  258. case 5:
  259. delay(2000);
  260. joinGame(AutoMule.muleGameName[0], AutoMule.muleGameName[1]);
  261. delay(2000);
  262.  
  263. break;
  264. case 8: // menu
  265. case 9: // login
  266. if (makeNext) {
  267. makeNext = false;
  268. }
  269.  
  270. obj = MuleData.read();
  271.  
  272. if (!obj.account || obj.account.indexOf(AutoMule.accountPrefix) < 0) {
  273. nextAccount();
  274.  
  275. obj = MuleData.read();
  276. }
  277.  
  278. info = {
  279. realm: AutoMule.realm,
  280. account: obj.account,
  281. password: AutoMule.accountPassword
  282. };
  283.  
  284. if (!ControlAction.loginAccount(info)) {
  285. ControlAction.makeAccount(info);
  286. //FileTools.writeText("mules/" + info.account + ".txt", "");
  287. D2Bot.printToConsole("Made account: " + info.account);
  288. }
  289.  
  290. break;
  291. case 18: // splash
  292. ControlAction.click();
  293.  
  294. break;
  295. case 12: // char select
  296. case 15: // new character (selected)
  297. case 29: // new character (list)
  298. case 42: // empty char screen
  299. obj = MuleData.read();
  300.  
  301. if (makeNext) {
  302. if (obj.fullChars.length === 8) {
  303. ControlAction.click(6, 33, 572, 128, 35);
  304. nextAccount();
  305.  
  306. break;
  307. }
  308.  
  309. makeNext = false;
  310. }
  311.  
  312. if (!obj.character || obj.character.indexOf(AutoMule.charPrefix) < 0) {
  313. nextChar();
  314.  
  315. obj = MuleData.read();
  316. }
  317.  
  318. info = {
  319. account: obj.account,
  320. charName: obj.character,
  321. ladder: AutoMule.ladder,
  322. hardcore: AutoMule.hardcore,
  323. expansion: AutoMule.expansion,
  324. charClass: "amazon"
  325. };
  326.  
  327. if (ControlAction.findCharacter(info)) {
  328. ControlAction.loginCharacter(info);
  329. } else {
  330. if (ControlAction.getCharacters().length >= 8) { // premade account that's already full
  331. ControlAction.click(6, 33, 572, 128, 35);
  332. nextAccount();
  333.  
  334. break;
  335. }
  336.  
  337. if (!ControlAction.makeCharacter(info)) {
  338. nextChar();
  339.  
  340. break;
  341. }
  342.  
  343. //FileTools.appendText("mules/" + info.account + ".txt", info.charName + "\n");
  344. D2Bot.printToConsole("Made character: " + info.charName);
  345. }
  346.  
  347. break;
  348. case 26: // game already exists
  349. ControlAction.click(6, 652, 469, 120, 20); // Join
  350.  
  351. break;
  352. case 28: // Lobby - Game Does Not Exist
  353. ControlAction.click(6, 533, 469, 120, 20);
  354.  
  355. break;
  356. case 30: // charname already exists
  357. ControlAction.click(6, 351, 337, 96, 32);
  358.  
  359. break;
  360. }
  361. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement