Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.96 KB | None | 0 0
  1. var gameMinLength = 48000; // time in milliseconds, minimum game length, 180 seconds default (1 game/3 minutes)
  2.  
  3. var unableToConnectRetry = 1; // time in minutes to retry connecting on connection fail (real value is +/- 1 min)
  4. var realmDownRetry = 300; // time in minutes to retry connecting on a realm down (default is 300 minutes)
  5. var disconnectedRetry = 5; // time in minutes to retry on a disconnection (usually ip ban related)
  6. var cdkeyInUseRetry = 1; // time in minutes to retry on a cdkey in use error message (set to 0 to stop)
  7. var connectingToBnetTimeout = 20000; // time in milliseconds to wait for a login to time out and click cancel and retry
  8. var characterScreenTimeout = 10000; // time in milliseconds to wait for character screen to appear
  9. var pleaseWaitTimeout = 10000; // time in milliseconds to wait for a please wait popup
  10. var createGameThreshold = 5000; // time in milliseconds to wait between making games
  11. var createGameThresholdRandom = 9000000000; // time in milliseconds to randomly add +/- to the game create time
  12. var createGameTimeout = 1500; // time in milliseconds to register a failed to create game
  13. var waitInLineTimeout = 10000; // time in milliseconds to wait in lines for a create game (60 second default)
  14. var characterSelectDelay = 1000; // time in milliseconds to wait before selecting a character on the char screen
  15. var loginDelay = 1000; // time in milliseconds to wait before submitting login information
  16. var clickDelay = 500; // wait X milliseconds before next action after a click event
  17. var textDelay = 500; // wait X milliseconds before next action after inserting text into a textbox
  18. var clickDelayRandom = 500; // random amount of time to add to a click
  19. var textDelayRandom = 500; // random amount of time to add to a text set
  20. var gameDoesNotExistDelayMin = 600000; // how long to wait when a Game Does Not Exist occurs - minimum - default 10 minutes
  21. var gameDoesNotExistDelayMax = 900000; // how long to wait when a Game Does Not Exist occurs - maximum - default 15 minutes
  22. var gameDoesNotExistTimeout = 30000; // how long to wait for the dialog to disappear (default 30 seconds, don't change this)
  23. var joinChatAfterGame = true; // join chat after leaving a game
  24. var joinRandomChannel = false; // if this is true, will join a random channel, otherwise it will use the channel below..
  25. var joinChannelInChat = "op al"; // leave blank to not join a private channel
  26. var waitBeforeEnterChatMin = 1000; // min how long to wait before entering chat
  27. var waitBeforeEnterChatMax = 2000; // max how long to wait before entering chat
  28. var waitInChatBeforeActionsMin = 2000; // min how long to wait before joining channel
  29. var waitInChatBeforeActionsMax = 3000; // max how long to wait before joining channel
  30.  
  31. // DONT EDIT ANYTHING BELOW THIS
  32.  
  33. // D2NT Manager Command
  34. const D2NT_MGR_LOADING = 1;
  35. const D2NT_MGR_READY = 2;
  36. const D2NT_MGR_LOGIN = 3;
  37. const D2NT_MGR_CREATE_GAME = 4;
  38. const D2NT_MGR_INGAME = 5;
  39. const D2NT_MGR_RESTART = 6;
  40. const D2NT_MGR_CHICKEN = 7;
  41. const D2NT_MGR_PRINT_STATUS = 8;
  42. const D2NT_MGR_PRINT_LOG = 9;
  43.  
  44. var lastGameMade = GetTickCount();
  45. var lastGameStatus = 0;
  46. var nextGameMake = 0;
  47. var inGameAt = 0;
  48. var chatActionsDone = false;
  49. var lastGameFailed = false;
  50.  
  51. Include("libs/controlInfo.ntl");
  52.  
  53. var controlData = new controlInfo();
  54.  
  55. function NTMain()
  56. {
  57. Delay(1000);
  58.  
  59. var _ingame = false;
  60.  
  61. controlData.clickDelay = clickDelay;
  62. controlData.textDelay = textDelay;
  63. controlData.clickDelayRandom = clickDelayRandom;
  64. controlData.textDelayRandom = textDelayRandom;
  65.  
  66. while(1)
  67. {
  68. if(me.ingame)
  69. {
  70. if(!inGameAt)
  71. inGameAt = GetTickCount();
  72.  
  73. if(!_ingame)
  74. {
  75. RunGC(); // run garbage collector between each game
  76.  
  77. if(Load("NTBot/NTBotGame.ntj"))
  78. {
  79. _ingame = true;
  80.  
  81. if(me.playtype > 0)
  82. sendEventToOOG(D2NT_MGR_INGAME, "In Game[IP:" + me.gameserverip.split(".")[3] + "]", 0);
  83. else
  84. sendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
  85.  
  86. lastGameStatus = 2; // in game successful
  87. }
  88. }
  89.  
  90. Delay(1000);
  91. }
  92. else
  93. {
  94. if(_ingame)
  95. {
  96. _ingame = false;
  97.  
  98. sendEventToOOG(D2NT_MGR_READY, "", 0);
  99. }
  100.  
  101. locationAction(controlData.getLocation());
  102.  
  103. Delay(500);
  104. }
  105. }
  106. }
  107.  
  108. function locationAction(location)
  109. {
  110. switch(location.id)
  111. {
  112. case 3: // Lobby Chat
  113. if(!chatActionsDone)
  114. {
  115. chatActionsDone = true;
  116. Delay(Random(waitInChatBeforeActionsMin, waitInChatBeforeActionsMax));
  117.  
  118. if(joinRandomChannel || joinChannelInChat != "")
  119. {
  120. Say("/join " + (joinRandomChannel ? getRandomString(Random(3,10)) : joinChannelInChat));
  121. Delay(1000);
  122. }
  123. }
  124. case 1: // Lobby
  125. if(location.id == 1 && joinChatAfterGame)
  126. {
  127. Delay(Random(waitBeforeEnterChatMin, waitBeforeEnterChatMax));
  128. controlData.click(controlData.controls.lobby.button.enterChat);
  129. break;
  130. }
  131.  
  132. if(GetTickCount() > nextGameMake)
  133. {
  134. var _control;
  135.  
  136. lastGameFailed = false;
  137.  
  138. switch(lastGameStatus)
  139. {
  140. case 0:
  141. _control = controlData.get(controlData.controls.lobby.button.create);
  142. if(_control && _control.pressed)
  143. {
  144. controlData.click(controlData.controls.lobby.button.join);
  145. Delay(500);
  146. }
  147.  
  148. controlData.click(controlData.controls.lobby.button.create);
  149. nextGameMake = GetTickCount() + createGameTimeout; // set our timeout
  150. sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
  151. break;
  152. case 1: // game failed, rollover to reset timer
  153. inGameAt = GetTickCount(); // reset inGameAt, to wait how long we should have waited..
  154. lastGameFailed = true;
  155. case 2:
  156. outputGameLength();
  157. lastGameStatus = 0;
  158. setNextGameMake();
  159. sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
  160. break;
  161. }
  162. }
  163. else
  164. timeoutDelay(nextGameMake-GetTickCount(), location);
  165. break;
  166.  
  167. case 2: // Waiting In Line
  168. if(GetTickCount()-lastGameMade > waitInLineTimeout)
  169. controlData.click(controlData.controls.lobby.inLine.button.cancel);
  170. break;
  171.  
  172. case 4: // Create Game
  173. sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);
  174.  
  175. locationTimeout(5000, location);
  176.  
  177. lastGameMade = GetTickCount();
  178. lastGameStatus = 1; // pending creation
  179. break;
  180.  
  181. case 5: // Join Game
  182. break;
  183.  
  184. case 6: // Ladder
  185. break;
  186.  
  187. case 7: // Channel List
  188. break;
  189.  
  190. case 8: // Main Menu
  191. if(controlData.getCurrentRealmIndex() == me.gatewayid)
  192. {
  193. outputGameLength();
  194. controlData.click(controlData.gameTypes[me.playtype]);
  195. }
  196. else
  197. controlData.click(controlData.controls.mainMenu.button.gateway);
  198. break;
  199.  
  200. case 9: // Login
  201. sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
  202. Delay(loginDelay);
  203.  
  204. controlData.setText(controlData.controls.login.editBox.accountName, me.account);
  205.  
  206. sendEventToOOG(D2NT_MGR_LOGIN, location.name, 0);
  207.  
  208. locationTimeout(5000, location);
  209. break;
  210.  
  211. case 10: // Login Error (this is a fatal error, so stop)
  212. sendEventToOOG(D2NT_MGR_RESTART, location.name, 10);
  213. Delay(3500);
  214. break;
  215.  
  216. case 11: // Unable To Connect
  217. timeoutDelay(unableToConnectRetry*60*1000, location)
  218. controlData.click(controlData.controls.login.unableToConnect.button.ok);
  219. break;
  220.  
  221. case 12: // Character Select
  222. var _time, _control;
  223.  
  224. sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
  225.  
  226. for(_time = 0 ; _time < characterScreenTimeout ; _time += 500)
  227. {
  228. _control = controlData.get(controlData.controls.characterSelect.textBox.characterInfo[me.charloc]);
  229. if(_control && _control.GetText() != undefined)
  230. break;
  231.  
  232. Delay(500);
  233. }
  234.  
  235. if(_time < characterScreenTimeout)
  236. {
  237. Delay(characterSelectDelay);
  238.  
  239. controlData.click(controlData.controls.characterSelect.textBox.characters[me.charloc], 0, 0, 1);
  240. controlData.click(controlData.controls.characterSelect.textBox.characterInfo[me.charloc], 0, 0, 1);
  241.  
  242. // reset last game made, so it doesnt make a game immediately
  243. inGameAt = 0;
  244. setNextGameMake();
  245. }
  246. else
  247. {
  248. controlData.click(controlData.controls.characterSelect.button.exit);
  249. timeoutDelay(realmDownRetry*60*1000, location);
  250. }
  251. break;
  252.  
  253. case 13: // Realm Down - Character Select screen
  254. controlData.click(controlData.controls.characterSelect.button.exit);
  255. timeoutDelay(realmDownRetry*60*1000, location);
  256. break;
  257.  
  258. case 14: // Character Select - Disconnected
  259. timeoutDelay(disconnectedRetry*60*1000, location);
  260. controlData.click(controlData.controls.characterSelect.disconnected.button.ok);
  261. break;
  262.  
  263. case 15: // New Character
  264. break;
  265.  
  266. case 16: // Character Select - Please Wait popup
  267. if(!locationTimeout(pleaseWaitTimeout, location))
  268. controlData.click(controlData.controls.characterSelect.pleaseWait.button.cancel);
  269. break;
  270.  
  271. case 17: // Lobby - Lost Connection - just click okay, since we're toast anyway
  272. controlData.click(controlData.controls.lobby.lostConnection.button.ok);
  273. break;
  274.  
  275. case 18: // D2 Splash
  276. controlData.click(controlData.controls.d2Splash.textBox.copyright);
  277. break;
  278.  
  279. case 19: // Login - Cdkey In Use
  280. timeoutDelay(cdkeyInUseRetry*60*1000, location);
  281. controlData.click(controlData.controls.login.cdkeyInUse.button.ok);
  282. break;
  283.  
  284. case 20: // Single Player - Select Difficulty
  285. controlData.click(controlData.singlePlayerDifficulties[me.diff]);
  286. break;
  287.  
  288. case 21: // Main Menu - Connecting
  289. if(!locationTimeout(connectingToBnetTimeout, location))
  290. controlData.click(controlData.controls.mainMenu.connecting.button.cancel);
  291. break;
  292.  
  293. case 22: // Login - Invalid Cdkey (classic or xpac)
  294. sendEventToOOG(D2NT_MGR_RESTART, location.name, 3600);
  295. Delay(3500);
  296. break;
  297.  
  298. case 23: // Character Select - Connecting
  299. if(!locationTimeout(characterScreenTimeout, location))
  300. controlData.click(controlData.controls.characterSelect.button.exit);
  301. break;
  302.  
  303. case 24: // Server Down - not much to do but wait..
  304. break;
  305.  
  306. case 25: // Lobby - Please Wait
  307. if(!locationTimeout(pleaseWaitTimeout, location))
  308. controlData.click(controlData.controls.lobby.pleaseWait.button.cancel);
  309. break;
  310.  
  311. case 26: // Lobby - Game Name Exists
  312. sendEventToOOG(D2NT_MGR_PRINT_LOG, "ΓΏE00000Game already exists", 0);
  313.  
  314. inGameAt = 0;
  315. lastGameStatus = 0;
  316. setNextGameMake();
  317.  
  318. locationTimeout(15000, location);
  319. break;
  320.  
  321. case 27: // Gateway Select
  322. controlData.clickRealmEntry(me.gatewayid);
  323. controlData.click(controlData.controls.gateway.button.ok);
  324. break;
  325.  
  326. case 28: // Lobby - Game Does Not Exist
  327. inGameAt = Random(gameDoesNotExistDelayMin, gameDoesNotExistDelayMax);
  328. lastGameStatus = 0;
  329. setNextGameMake();
  330.  
  331. locationTimeout(gameDoesNotExistTimeout, location);
  332. break;
  333. }
  334. }
  335.  
  336. function sendEventToOOG(locationId, statusString, pendingTime)
  337. {
  338. return SendCopyData("D2NT Manager", null, (locationId<<16)|pendingTime, statusString);
  339. }
  340.  
  341. function setNextGameMake()
  342. {
  343. lastGameMade = GetTickCount();
  344. nextGameMake = lastGameMade + createGameThreshold + Random(0-createGameThresholdRandom, createGameThresholdRandom) + inGameAt;
  345. inGameAt = 0;
  346. chatActionsDone = false;
  347. }
  348.  
  349. function outputGameLength()
  350. {
  351. if(inGameAt)
  352. {
  353. duration = GetTickCount() - inGameAt;
  354.  
  355. inGameAt = (duration < gameMinLength ? gameMinLength - duration : 0);
  356. }
  357. }
  358.  
  359. function locationTimeout(time, location)
  360. {
  361. endtime = GetTickCount() + time;
  362.  
  363. while(controlData.getLocation().id == location.id && endtime > GetTickCount())
  364. {
  365. sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " (" + parseInt((endtime-GetTickCount())/1000) + "s)", 0);
  366. Delay(500);
  367. }
  368.  
  369. return (controlData.getLocation().id != location.id);
  370. }
  371.  
  372. function timeoutDelay(time, location)
  373. {
  374. endtime = GetTickCount() + time;
  375.  
  376. while(endtime > GetTickCount())
  377. {
  378. sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " (" + parseInt((endtime-GetTickCount())/1000) + "s)", 0);
  379. Delay(1000);
  380. }
  381. }
  382.  
  383. function getRandomString(_length)
  384. {
  385. _retString = "";
  386. _charSet = "0123456789abcdefghijklmnopqrstuvwxyz";
  387.  
  388. while(_length--)
  389. {
  390. _retString += _charSet.charAt(Random(0, _charSet.length-1));
  391. Delay(1);
  392. }
  393.  
  394. return _retString;
  395. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement