Advertisement
DraculaxAOE

NTHelper for Reset

Nov 21st, 2016
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 52.06 KB | None | 0 0
  1. // *** Global vars ***
  2.  
  3. var debug = false;
  4.  
  5. var pathRushBots = "NTRush/rushbots/";
  6. var isBusy = false;
  7. var isPaused;
  8. var isFollowingEnabled = true;
  9. var isAttackEnabled = true;
  10. var isAutoEnchantEnabled = false;
  11. var leaderUnit;
  12. var leaderPlayerUnit;
  13. var followRange = 5;
  14. var attackRange = 15;
  15. var _AvoidedDiabloExpOverflow = false;
  16. var _AvoidedNickExpOverflow = false;
  17. var _AvoidedBaalExpOverflow = false;
  18. var ForceStopAttack = false;
  19. // *** Global vars ***
  20.  
  21. function NTMain()
  22. {
  23. // From Diabolic's script
  24. Include("NTRush/funcs/RushCommon.ntl");
  25. Include("NTRush/funcs/Message.ntl");
  26. Common.IncludeFuncs();
  27.  
  28. Include("libs/common/NTCommon.ntl");
  29. NTC_IncludeLibs();
  30. NTC_IncludeConfig("NTBot/char_configs");
  31.  
  32. NT_LoadConfig();
  33. NTSI_LoadNIPFiles("NTBot/item_configs");
  34.  
  35. NTA_Initialize();
  36.  
  37. // Wait for the leader to join the game
  38. var leaderInGame = false;
  39. for(i = 0; i < NTConfig_PartyMaxTime+1; i++)
  40. {
  41. if(CheckLeader(NTConfig_Leader))
  42. {
  43. leaderName = NTConfig_Leader;
  44. leaderInGame = true;
  45. break;
  46. }
  47. else
  48. if(CheckLeader(NT_File("logs/" + me.account + ".leaderName.txt", 0)))
  49. {
  50. leaderName = NT_File("logs/" + me.account + ".leaderName.txt", 0);
  51. leaderInGame = true;
  52. break;
  53. }
  54. else
  55. if(CheckLeader(NT_File("AILS/Logs/TristLeader.leadername.txt", 0)))
  56. {
  57. leaderName = NT_File("AILS/Logs/TristLeader.leadername.txt", 0);
  58. leaderInGame = true;
  59. break;
  60. }
  61. Delay(1000);
  62. }
  63.  
  64. // End script if the leader wasn't found
  65. if(!leaderInGame)
  66. {
  67. if(debug)
  68. Print(COLOR_5 + "Leader: " + leaderName + " - not found!");
  69. NTC_Delay(500);
  70. NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
  71. }
  72. else
  73. {
  74. RegisterEvent( EVENT_GAMEMSG, ChatHandler );
  75. if(debug)
  76. Print(COLOR_5 + "!Leader: " + leaderName);
  77. leaderUnit = GetLeaderUnit(leaderName);
  78. leaderPlayerUnit = GetLeader(leaderName);
  79. }
  80.  
  81. if(NTC_InTown(me))
  82. {
  83. NTTMGR_TownManager();
  84. }
  85.  
  86. //Stop script every few minutes, need extra NTHelpers' in char config to cover leader's entire run!
  87. //minimum number of NTHelper.ntj push needed = leader's game length in minutes / _ScriptLengthInMinutes
  88. //If put too many NTHelper's in char config, may stall helpers exiting the game after leader left!
  89. var _endTime = null;
  90. _ScriptLengthInMinutes = 9999;
  91. _endTime = GetTickCount() + _ScriptLengthInMinutes*60*1000;
  92.  
  93. while(CheckLeader(leaderName) && GetTickCount() < _endTime)
  94. {
  95. Action();
  96. NTC_Delay(100);
  97. }
  98.  
  99. //Add the non-in-town check so the helper only stops the script when it's not in town. Otherwise it would town first then come back
  100. while(CheckLeader(leaderName) && !NTC_InTown(me))
  101. {
  102. Action();
  103. NTC_Delay(100);
  104. }
  105.  
  106. if(CheckLeader(leaderName))
  107. {
  108. Print(COLOR_5 + "Reloading");
  109.  
  110. // //If leecher pickit and gambling are disabled, drop free gold in town for leader to gamble
  111. // if(!NTConfig_Gamble && me.GetStat(14) >= 500000 && NTC_InTown(me) && CheckAct(me) == CheckAct(leaderPlayerUnit))
  112. // {
  113. // GiveTits();
  114. // }
  115. }
  116. else
  117. {
  118. Print(COLOR_5 + "Exiting");
  119. }
  120.  
  121. NTC_Delay(500);
  122. NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
  123. }
  124.  
  125. function Action()
  126. {
  127. if(me.mode === 0 || me.mode === 17)
  128. {
  129. isBusy = false;
  130. me.Cancel(0);
  131. me.Cancel(1);
  132. Delay(1000);
  133. if(me.mode !== 0 && me.mode !== 17)
  134. {
  135. if(debug)
  136. Print(COLOR_5 + "I'm alive!");
  137. isFollowingEnabled = false;
  138. }
  139. }
  140.  
  141. if(!isBusy && NTC_InMyParty(leaderName))
  142. {
  143. if(isFollowingEnabled)
  144. {
  145. Follow();
  146. }
  147. }
  148.  
  149. if(!isBusy && isAutoEnchantEnabled)
  150. {
  151. // TBA with a global tick counter
  152. // Maybe a player array with some kind of player-specific timer
  153. // Who knows...
  154. }
  155.  
  156. if(NTC_InTown(me))
  157. {
  158. if(NTTMGR_CheckScrolls(1) < 8 || NTTMGR_CheckScrolls(0) < 10)
  159. {
  160. NTTMGR_TownManager();
  161. }
  162. }
  163. }
  164.  
  165. function ChatHandler( msg, type )
  166. {
  167. if(NTConfig_HelperHumor)
  168. {
  169. // My attempt at making the bot have humour
  170. // 3 checks per 1000 === 0.3% chance
  171. var _funny = Random(1, 1000);
  172. var _skip = false;
  173. switch(_funny)
  174. {
  175. case 1:
  176. Print(COLOR_5 + "Hmm... I don't feel like it. Ask me later.");
  177. _skip = true;
  178. break;
  179. case 500:
  180. Print(COLOR_5 + "Why don't you do it? I'm tired.");
  181. _skip = true;
  182. break;
  183. case 1000:
  184. Print(COLOR_5 + "Hah, you wish...");
  185. _skip = true;
  186. break;
  187. }
  188. if(_skip)
  189. {
  190. return;
  191. }
  192. }
  193.  
  194. switch( type )
  195. {
  196. case 0: // white
  197. if(!NTConfig_AllowCommands)
  198. {
  199. return;
  200. }
  201. _msgsplit = msg.toLowerCase().split(":");
  202. if( _msgsplit.length >= 1 && _msgsplit[1] !== undefined )
  203. {
  204. var _name = _msgsplit[0].substring(3, _msgsplit[0].length - 3);
  205. var _commands = _msgsplit[1].substring(1).split(" ");
  206. }
  207. else
  208. return;
  209.  
  210. if(_name == me.name.toLowerCase())
  211. return;
  212.  
  213. if( _commands[0] == me.name.toLowerCase() ) // remove char name.
  214. for(var f = 0; f <= _commands.length-1; f++)
  215. _commands[f] = _commands[f+1];
  216.  
  217. if(_commands.length > 1) // make sure nothing is undefined. grr.
  218. for(var i = 0; i <= _commands.length-1; i++)
  219. if(!_commands[i])
  220. _commands[i] = "";
  221.  
  222. while(_commands.length < 5)
  223. _commands.push("");
  224.  
  225. if(_commands[0] == "p" && _name == leaderName)
  226. {
  227. isPaused = !isPaused;
  228. if(isPaused)
  229. Print(COLOR_5 + "~Paused chat commands");
  230. else
  231. Print(COLOR_5 + "~Unpaused chat commands");
  232. }
  233.  
  234. if( !isBusy && !isPaused && _name == leaderName.toLowerCase())
  235. CommandHandler( _commands[0], _commands[1], _commands[2], _commands[3], _commands[4] );
  236. break;
  237. case 1: // red
  238. break;
  239. case 2: // green
  240. if(!NTConfig_AllowCommands)
  241. {
  242. return;
  243. }
  244. if(msg.indexOf("From ") > -1 && msg.indexOf(" (*") > -1)
  245. {
  246. _msgsplit = msg.toLowerCase().split(" (*");
  247. if( _msgsplit.length == 2 && _msgsplit[1] !== undefined )
  248. {
  249. var _name = _msgsplit[0].split(" ")[1];
  250. var _commands = _msgsplit[1].split("):")[1].substring(1).split(" ");
  251. }
  252. else
  253. return;
  254. }
  255. else
  256. if(msg.indexOf(" whispers: ") > -1)
  257. {
  258. _msgsplit = msg.toLowerCase().split(" whispers:");
  259. if( _msgsplit.length == 2 && _msgsplit[1] !== undefined )
  260. {
  261. var _name = _msgsplit[0];
  262. var _commands = _msgsplit[1].substring(1).split(" ");
  263. }
  264. else
  265. return;
  266. }
  267. else
  268. {
  269. if(msg.indexOf("has joined your party to fight the forces of evil") > -1)
  270. {
  271. if(NTConfig_GreetPlayers)
  272. {
  273. _split = msg.split("has joined");
  274. _name = _split[0];
  275. var saystring;
  276. if(NTConfig_GreetMsg.indexOf("%name%") !== -1)
  277. {
  278. saystring = NTConfig_GreetMsg.replace("%name%", _name);
  279. Whisper(_name, saystring);
  280. }
  281. else
  282. {
  283. Whisper(_name, NTConfig_GreetMsg);
  284. }
  285. }
  286. }
  287. return;
  288. }
  289.  
  290. if(_name == me.name.toLowerCase())
  291. return;
  292.  
  293. if( _commands[0] == me.name.toLowerCase() ) // remove char name.
  294. for(var f = 0; f <= _commands.length-1; f++)
  295. _commands[f] = _commands[f+1];
  296.  
  297. if(_commands.length > 1) // make sure nothing is undefined. grr.
  298. for(var i = 0; i <= _commands.length-1; i++)
  299. if(!_commands[i])
  300. _commands[i] = "";
  301.  
  302. while(_commands.length < 5)
  303. _commands.push("");
  304.  
  305. if(_commands[0] == "p" && _name == leaderName)
  306. {
  307. isPaused = !isPaused;
  308. if(isPaused)
  309. Print(COLOR_5 + "~Paused chat commands");
  310. else
  311. Print(COLOR_5 + "~Unpaused chat commands");
  312. }
  313.  
  314. if( !isBusy && !isPaused && _name == leaderName.toLowerCase())
  315. CommandHandler( _commands[0], _commands[1], _commands[2], _commands[3], _commands[4] );
  316. break;
  317. case 3: // blue
  318. break;
  319. case 4: // brown
  320. /*
  321. if(NTConfig_GreetPlayers)
  322. {
  323. if(msg.indexOf("joined our world. Diablo") != -1)
  324. {
  325. _split = msg.split("(");
  326. _name = _split[0];
  327. var saystring;
  328. if(NTConfig_GreetMsg.indexOf("%name%") != -1)
  329. {
  330. saystring = NTConfig_GreetMsg.replace("%name%", _name);
  331. Whisper(_name, saystring);
  332. }
  333. else
  334. {
  335. Whisper(_name, NTConfig_GreetMsg);
  336. }
  337. }
  338. }
  339. */
  340. if(NTConfig_PortalAtLeechersCorpses)
  341. {
  342. if(msg.indexOf(" was slain by ") != -1)
  343. {
  344. _split = msg.split(" was slain by ");
  345. _name = _split[0].substring(3, _split[0].length - 3);
  346. TPAtPlayersBody(_split[0], _split[1]);
  347. }
  348. }
  349. break;
  350. default:
  351. break;
  352. }
  353. }
  354.  
  355. function CommandHandler( msg1, msg2, msg3, msg4, msg5 )
  356. {
  357. switch( msg1 )
  358. {
  359. case "dbg": // keep right above goto command without a break
  360. if(debug)
  361. Print(COLOR_5 + "Debug: Leader Coordinates: X: " + leaderPlayerUnit.x + " " + "Y: " + leaderPlayerUnit.y);
  362. if(debug)
  363. Print(COLOR_5 + "Debug: Leader Area ID: " + leaderPlayerUnit.areaid);
  364. msg2 = leaderPlayerUnit.areaid;
  365. msg3 = leaderPlayerUnit.x;
  366. msg4 = leaderPlayerUnit.y;
  367. case "goto":
  368. if(msg2 == 'trist')
  369. {
  370. if(!NTTM_CheckAct(1))
  371. {
  372. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
  373. return;
  374. }
  375. NTTMGR_TownManager();
  376. NTTM_TownMove("waypoint");
  377. NTM_TakeWaypoint(4);
  378. if(!NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_MONSTER, 737, 10, 10, false))
  379. {
  380. NTM_MakeTP();
  381. Print(COLOR_5 + "Failed to move to unit");
  382. //Delay(7500);
  383. //NTC_SendMsgToScript("NTBotGame.ntj", "NTM_MoveToPresetUnit()");
  384. return;
  385. }
  386. NTA_ClearPosition( 20 );
  387. NTM_MakeTP();
  388. }
  389. else
  390. if(me.areaid === parseInt(msg2))
  391. {
  392. if(parseInt(msg3) >= 0 && parseInt(msg4) >= 0)
  393. {
  394. Print(COLOR_5 + "Moving to: " + msg3 + ", " + msg4);
  395. if(!NTM_MoveTo(parseInt(msg2), parseInt(msg3), parseInt(msg4)))
  396. {
  397. Print(COLOR_5 + "!Failed to move");
  398. }
  399. }
  400. }
  401. break;
  402. case "exit":
  403. NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
  404. break;
  405. case "range":
  406. if(msg2 == "")
  407. followRange = 5;
  408. if(msg2 >= 3 && msg2 <= 30)
  409. followRange = msg2;
  410. else
  411. Print(COLOR_5 + "~Valid range is 3-30. Default is 5.");
  412. Print(COLOR_5 + "~Follow range set to: " + followRange);
  413. break;
  414. case "come":
  415. if(!isBusy && NTC_InTown(me))
  416. {
  417. NTTM_TownMove("portalspot");
  418. TakeLeaderTP();
  419. }
  420. break;
  421. case "my":
  422. if(msg2 == "tp" && !isBusy && NTC_InTown(me))
  423. {
  424. NTTM_TownMove("portalspot");
  425. Delay(250);
  426. TakeLeaderTP();
  427. }
  428. break;
  429. case "go":
  430. if(!isBusy && !NTC_InTown(me)){
  431. if(!TakeLeaderTP()){
  432. Town();
  433. }
  434. }
  435. break;
  436. case "s":
  437. me.Cancel(0);
  438. me.Cancel(1);
  439. ForceStopAttack = false;
  440. isAttackEnabled = true;
  441. return;
  442. break;
  443. case "g":
  444. me.Cancel(0);
  445. me.Cancel(1);
  446. // if(!NTC_InTown(me)){
  447. ForceStopAttack = true;
  448.  
  449. while(ForceStopAttack){
  450. isAttackEnabled = false;
  451. Follow();
  452. Delay(100);
  453. }
  454.  
  455. ForceStopAttack = false;
  456. isAttackEnabled = true;
  457. return;
  458. // }
  459. break;
  460. case "z":
  461. me.Cancel(0);
  462. me.Cancel(1);
  463. NTSI_PickItems();
  464. break;
  465. case "follow":
  466. if(msg2 == "on")
  467. {
  468. isFollowingEnabled = true;
  469. break;
  470. }
  471. else
  472. if(msg2 == "off")
  473. {
  474. isFollowingEnabled = false;
  475. break;
  476. }
  477. else
  478. {
  479. isFollowingEnabled = !isFollowingEnabled;
  480. }
  481. if(isFollowingEnabled)
  482. Print(COLOR_5 + "~Follow on");
  483. else
  484. Print(COLOR_5 + "~Follow off");
  485. break;
  486. case "bo":
  487. if(!isBusy)
  488. {
  489. NTP_DoPrecast( true );
  490. }
  491. break;
  492. case "buff":
  493. if(!isBusy)
  494. {
  495. NTP_DoPrecast( true );
  496. Chant( msg2 );
  497. }
  498. break;
  499. case "help":
  500. if(!isBusy)
  501. DisplayHelp( msg2 ); // Display help menu.
  502. break;
  503. case "clear":
  504. if(!isBusy)
  505. CommandClear( msg2 ); // Clear function.
  506. break;
  507. case "tp":
  508. if(!isBusy)
  509. TP(msg2); // TP functions.
  510. break;
  511. case "quest":
  512. if(!isBusy)
  513. Quest( msg2 ); // Quest functions.
  514. break;
  515. case "rush":
  516. if(!isBusy)
  517. Rush( msg2 ); // Rush functions.
  518. break;
  519. case "chant":
  520. if(!isBusy)
  521. Chant( msg2 ); // Chant functions.
  522. break;
  523. case "town":
  524. if(!isBusy)
  525. {
  526. isFollowingEnabled = false;
  527. Print(COLOR_5 + "~Follow off");
  528. if(!TakeLeaderTP())
  529. Town();
  530. }
  531. break;
  532. case "gold":
  533. if(!isBusy)
  534. GiveGold(msg2);
  535. break;
  536. case "titz":
  537. if(!isBusy)
  538. {
  539. if(NTC_InTown(me) && CheckAct(me) == CheckAct(leaderPlayerUnit))
  540. {
  541. GiveTits();
  542. }
  543. }
  544. else
  545. {
  546. // Print(COLOR_5 + "2 busy 2 titz, gtfo");
  547. }
  548. break;
  549. default: // Say this when you receive an invalid command.
  550. //Print(COLOR_5 + "!Invalid command: " + msg1 + " " + msg2 + " " + msg3 + "." );
  551. return 0;
  552. }
  553. return 1;
  554. }
  555.  
  556. function DisplayHelp(msg) // Eventually add multiple menus via 'help commandname'.
  557. {
  558. isBusy = true;
  559. switch(msg)
  560. {
  561. case "":
  562. Print(COLOR_5 + "With multiple followers, you can speak to them individually by saying their name first. Example: '" + me.name + " follow' would make me follow!");
  563. Print(COLOR_5 + "'follow' toggle following");
  564. Print(COLOR_5 + "'tp' make tp");
  565. Print(COLOR_5 + "'tp areaname' tp at waypoint");
  566. Print(COLOR_5 + "'range 3-30' set following range");
  567. Print(COLOR_5 + "'bo' prebuffs");
  568. Print(COLOR_5 + "'rush' starts rush");
  569. Print(COLOR_5 + "'rush 1-5' specific acts");
  570. Print(COLOR_5 + "'quest questname' specific quests");
  571. Print(COLOR_5 + "'chant' enchants players");
  572. Print(COLOR_5 + "'come' or 'go' portal commands");
  573. Print(COLOR_5 + "'gold 1-50000' drops gold");
  574. // Print(COLOR_5 + "'titz' drops titz");
  575. Print(COLOR_5 + "'clear' clears my position");
  576. break;
  577. case "tp":
  578. Print(COLOR_5 + "Type 'tp waypointname' and I will make a tp at that waypoint. For the Nith waypoint, you must say 'nit' instead.");
  579. Print(COLOR_5 + "Example: tp stony");
  580. break;
  581. default:
  582. Print(COLOR_5 + "'" + msg + "' does not have a help menu yet, or is an invalid command.");
  583. break;
  584. }
  585. NTC_Delay(500);
  586. isBusy = false;
  587. return;
  588. }
  589.  
  590. function Invalid(){Print(COLOR_5 + "!Invalid Command");}
  591. function NI(){Print(COLOR_5 + "Function not implemented. (yet)");}
  592. function Busy(){Print(COLOR_5 + "I'm busy!");}
  593.  
  594. function Follow( target )
  595. {
  596. var _distance = -1;
  597. var leaderPlayerUnitintown, _meintown;
  598.  
  599. if(!leaderUnit) // Make sure we have the leaders unit.
  600. {
  601. leaderUnit = GetLeaderUnit(leaderName);
  602. }
  603.  
  604. if(leaderPlayerUnit.areaid <= 0) // Don't do anything if we don't know the area yet.
  605. {
  606. return;
  607. }
  608.  
  609. if(CheckAct(me) !== CheckAct(leaderPlayerUnit) && NTC_InTown(me) && NTC_InTown(leaderPlayerUnit))
  610. {
  611. NTTM_TownMove("waypoint");
  612. NTC_PingDelay(200);
  613. NTM_TakeWaypoint(GetPlayerActWaypointID(leaderPlayerUnit));
  614. }
  615.  
  616. //Force extra helpers to town prior to killing Diablo, in order to avoid experience overflow
  617. if(NTConfig_AvoidExpOverflow == true && _AvoidedDiabloExpOverflow == false && leaderPlayerUnit.areaid === 108 && me.areaid === leaderPlayerUnit.areaid)
  618. {
  619. if(InfectorOfSoulsDead() || NTC_FindUnit(NTC_UNIT_MONSTER, 243))
  620. {
  621. _AvoidedDiabloExpOverflow = true;
  622. var _PlayerTotal;
  623. var _PartyTotal;
  624. var _ListHelper;
  625. _PlayerTotal = PlayerCount();
  626. _PartyTotal = PartyCount();
  627. _ListHelper = ListHelpers();
  628. AvoidDiabloExpOverflow(_PlayerTotal, _PartyTotal, _ListHelper);
  629. }
  630. else
  631. {
  632. _AvoidedDiabloExpOverflow = false;
  633. }
  634. }
  635.  
  636. //Force extra helpers to town prior to killing Baal, in order to avoid experience overflow
  637. if(NTConfig_AvoidExpOverflow == true && _AvoidedBaalExpOverflow == false && leaderPlayerUnit.areaid === 131 && me.areaid === leaderPlayerUnit.areaid)
  638. {
  639. if(ListerTheTormentorDead())
  640. {
  641. _AvoidedBaalExpOverflow = true;
  642. var _PlayerTotal;
  643. var _PartyTotal;
  644. var _ListHelper;
  645. _PlayerTotal = PlayerCount();
  646. _PartyTotal = PartyCount();
  647. _ListHelper = ListHelpers();
  648. AvoidBaalExpOverflow(_PlayerTotal, _PartyTotal, _ListHelper);
  649. }
  650. else
  651. {
  652. _AvoidedBaalExpOverflow = false;
  653. }
  654. }
  655.  
  656. //Force extra helpers to town prior to killing Nihlathak, in order to avoid experience overflow
  657. //The overflow ONLY occurs at 8pp + all party + all within 2 screens of Nick, so do Not perform the same area check since the leader will do Nick real quick...
  658. if(NTConfig_AvoidExpOverflow == true && _AvoidedNickExpOverflow == false && leaderPlayerUnit.areaid === 124)
  659. {
  660. _AvoidedNickExpOverflow = true;
  661. var _PlayerTotal;
  662. var _PartyTotal;
  663. var _ListHelper;
  664. _PlayerTotal = PlayerCount();
  665. //No same area check
  666. _PartyTotal = PartyCountNick();
  667. _ListHelper = ListHelpers();
  668. AvoidNickExpOverflow(_PlayerTotal, _PartyTotal, _ListHelper);
  669. }
  670.  
  671. // Get the distance between our character and the leader
  672. if(leaderUnit)
  673. {
  674. _distance = GetDistance(me, leaderUnit);
  675. }
  676. else
  677. {
  678. _distance = -1;
  679. }
  680.  
  681. // If we get a valid distance, and we're inside the follow range, we don't need to do anything except attack.
  682. // if(_distance <= followRange && _distance !== -1 && me.areaid == leaderPlayerUnit.areaid && !NTC_InTown(me))
  683. if(_distance <= followRange && _distance !== -1 && me.areaid === leaderPlayerUnit.areaid && !NTC_InTown(me))
  684. {
  685. if(isAttackEnabled)
  686. {
  687. var _atk = true;
  688. if(NTConfig_DoNotAttackAreas.length >= 1)
  689. {
  690. for(var i = 0; i < NTConfig_DoNotAttackAreas.length; i++)
  691. {
  692. if(NTConfig_DoNotAttackAreas[i] === me.areaid)
  693. {
  694. _atk = false;
  695. break;
  696. }
  697. }
  698. }
  699. if(_atk)
  700. {
  701. if(me.areaid !== 131)
  702. {
  703. // if(NTA_CheckForCloseMonsters(30))
  704. if(NTA_CheckForCloseMonsters(20))
  705. {
  706. hAttack();
  707. return;
  708. }
  709. }
  710. else if(me.areaid === 131)
  711. {
  712. // if(NTA_CheckForCloseMonsters(30))
  713. if(NTA_CheckForCloseMonsters(20))
  714. {
  715. hAttackThrone();
  716. return;
  717. }
  718. }
  719. }
  720. }
  721. return;
  722. }
  723.  
  724. // If we get a valid distance, and we're outside the follow range, but still inside the range for GetDistance() to work, attempt to get closer!
  725. // if(_distance >= followRange && _distance !== -1 && me.areaid == leaderPlayerUnit.areaid)
  726. if(_distance >= followRange && _distance !== -1 && me.areaid === leaderPlayerUnit.areaid)
  727. {
  728. if(!NTC_InTown(me))
  729. {
  730. if(leaderUnit)
  731. {
  732. NTM_GetCloserInt(leaderUnit);
  733. }
  734. else
  735. {
  736. NTM_MoveTo(leaderPlayerUnit.areaid, leaderPlayerUnit.x, leaderPlayerUnit.y);
  737. }
  738. }
  739. else
  740. {
  741. switch(me.areaid)
  742. {
  743. case 1:
  744. // no!
  745. NTM_GetCloserInt(leaderUnit);
  746. break;
  747. case 40:
  748. // no!
  749. NTM_GetCloserInt(leaderUnit);
  750. break;
  751. case 75:
  752. // no!
  753. NTM_GetCloserInt(leaderUnit);
  754. break;
  755. case 103:
  756. // no!
  757. NTM_GetCloserInt(leaderUnit);
  758. break;
  759. case 109:
  760. // no!
  761. NTM_GetCloserInt(leaderUnit);
  762. break;
  763. }
  764. }
  765. return;
  766. }
  767.  
  768. // If we get an INVALID distance (too far away for GetDistance()), but we're in the same area, attempt to move to the leader
  769. // if(_distance === -1 && me.areaid === leaderPlayerUnit.areaid && !NTC_InTown(me) && !NTC_InTown(leaderPlayerUnit))
  770. if(_distance === -1 && me.areaid === leaderPlayerUnit.areaid && !NTC_InTown(me) && !NTC_InTown(leaderPlayerUnit) && me.areaid >= 1 && leaderPlayerUnit.areaid >= 1)
  771. {
  772. NTM_MoveTo(leaderPlayerUnit.areaid, leaderPlayerUnit.x, leaderPlayerUnit.y);
  773. return;
  774. }
  775.  
  776. // If the leader is not in town, but we are
  777. if(!NTC_InTown(leaderPlayerUnit) && NTC_InTown(me))
  778. {
  779. // Get the distance between our character and the leader
  780. if(leaderUnit)
  781. {
  782. _distance = GetDistance(me, leaderUnit);
  783. }
  784. else
  785. {
  786. _distance = -1;
  787. }
  788.  
  789. // If we get a valid distance, and we're outside the follow range, attempt to get closer!
  790. // This covers walking out of acts
  791. if(_distance >= followRange && _distance !== -1)
  792. {
  793. if(leaderUnit)
  794. {
  795. NTM_GetCloserInt(leaderUnit);
  796. }
  797. else
  798. {
  799. NTM_MoveTo(leaderPlayerUnit.areaid, leaderPlayerUnit.x, leaderPlayerUnit.y);
  800. }
  801. return;
  802. }
  803.  
  804. // If leader took a WP to a different act, we want to try that wp, or just go to that act
  805. if(CheckAct(leaderPlayerUnit) !== CheckAct(me))
  806. {
  807. if(NTConfig_DoNotFollowAreas.length >= 1)
  808. {
  809. for(var i = 0; i < NTConfig_DoNotFollowAreas.length; i++)
  810. {
  811. if(NTConfig_DoNotFollowAreas[i] === leaderPlayerUnit.areaid)
  812. {
  813. NTTM_TownMove("waypoint");
  814. NTC_PingDelay(200);
  815. NTM_TakeWaypoint(GetPlayerActWaypointID(leaderPlayerUnit));
  816. Delay(200);
  817. NTTM_TownMove("portalspot");
  818. return;
  819. }
  820. }
  821. }
  822. var _mta = (AreaHasWaypoint(leaderPlayerUnit.areaid) ? leaderPlayerUnit.areaid : GetPlayerActWaypointID(leaderPlayerUnit));
  823. NTTM_TownMove("waypoint");
  824. NTC_PingDelay(200);
  825. NTM_TakeWaypoint(_mta);
  826. return;
  827. }
  828.  
  829. // Return if leader is in a no-follow-zone
  830. for(var i = 0; i < NTConfig_DoNotFollowAreas.length; i++)
  831. {
  832. if(NTConfig_DoNotFollowAreas[i] === leaderPlayerUnit.areaid)
  833. {
  834. return;
  835. }
  836. }
  837.  
  838. // Try to take any available portals
  839. if(NTC_InTown(me))
  840. {
  841. NTTM_TownMove("portalspot");
  842. Delay(250);
  843. }
  844.  
  845. if(TakeLeaderTP())
  846. {
  847. Delay(250);
  848. return;
  849. }
  850. else
  851. if(AreaHasWaypoint(leaderPlayerUnit.areaid))
  852. {
  853. for(var i = 0; i < NTConfig_DoNotFollowAreas.length; i++)
  854. {
  855. if(NTConfig_DoNotFollowAreas[i] === leaderPlayerUnit.areaid)
  856. {
  857. return;
  858. }
  859. }
  860. NTM_TakeWaypoint(leaderPlayerUnit.areaid);
  861. }
  862. return;
  863. }
  864.  
  865. // If we are not in town, but the leader is
  866. if(NTC_InTown(leaderPlayerUnit) && !NTC_InTown(me))
  867. {
  868. // Get the distance between our character and the leader
  869. if(leaderUnit)
  870. {
  871. _distance = GetDistance(me, leaderUnit);
  872. }
  873. else
  874. {
  875. _distance = -1;
  876. }
  877.  
  878. // If we get a valid distance, and we're outside the follow range, attempt to get closer!
  879. // This covers walking back in/out of acts and in/out of new areas
  880. if(_distance >= followRange && _distance !== -1)
  881. {
  882. if(leaderUnit)
  883. {
  884. NTM_GetCloserInt(leaderUnit);
  885. }
  886. else
  887. {
  888. NTM_MoveTo(leaderPlayerUnit.areaid, leaderPlayerUnit.x, leaderPlayerUnit.y);
  889. }
  890. return;
  891. }
  892.  
  893. // If leader took a WP to a different act, we want to try that wp, otherwise we simply get back to town
  894. if(_distance === -1 && CheckAct(me) !== CheckAct(leaderPlayerUnit))
  895. {
  896. if(!TakeLeaderTP())
  897. {
  898. if(!NTC_InTown(me))
  899. {
  900. // Last ditch effort, just go back to town
  901. if(!Town())
  902. {
  903. Whisper(leaderPlayerUnit.name, "I seem to be stuck!");
  904. }
  905. }
  906. }
  907. return;
  908. }
  909. // return;
  910.  
  911. // If leader went back to town
  912. // Try to take any available portals
  913. if(_distance === -1 && CheckAct(leaderPlayerUnit) == CheckAct(me) && me.areaid !== leaderPlayerUnit.areaid)
  914. {
  915. if(!TakeLeaderTP())
  916. {
  917. if(!NTC_InTown(me))
  918. {
  919. // Last ditch effort, just go back to town
  920. if(!Town())
  921. {
  922. Whisper(leaderPlayerUnit.name, "I seem to be stuck!");
  923. }
  924. }
  925. }
  926. //return;
  927. }
  928. return;
  929. }
  930.  
  931. // If we are both outside but in different areas
  932. if(me.areaid !== leaderPlayerUnit.areaid && !NTC_InTown(leaderPlayerUnit) && !NTC_InTown(me))
  933. {
  934. // Get the distance between our character and the leader
  935. if(leaderUnit)
  936. {
  937. _distance = GetDistance(me, leaderUnit);
  938. }
  939. else
  940. {
  941. _distance = -1;
  942. }
  943.  
  944. // If we get a valid distance, and we're outside the follow range, attempt to get closer!
  945. // This covers walking to new area id's
  946. if(_distance >= followRange && _distance !== -1 && me.areaid === leaderPlayerUnit.areaid)
  947. {
  948. if(leaderUnit)
  949. {
  950. NTM_GetCloserInt(leaderUnit);
  951. }
  952. else
  953. {
  954. NTM_MoveTo(leaderPlayerUnit.areaid, leaderPlayerUnit.x, leaderPlayerUnit.y);
  955. }
  956. return;
  957. }
  958.  
  959. // Check to see if we entered a doorway or stairs
  960. var _unit = GetPresetUnits(me.areaid, NTC_UNIT_TILE);
  961. if (_unit)
  962. {
  963. for (var i = 0; i < _unit.length; i += 1)
  964. {
  965. if (_unit[i].subareaid == leaderPlayerUnit.areaid)
  966. {
  967. if(!NTM_MoveToStair(me.areaid, leaderPlayerUnit.areaid)) {
  968. NTC_SendMsgToScript("NTBotGame.ntj", "NTM_MoveToStair()");
  969. return;
  970. }
  971. // Delay(1000);
  972. if(!NTM_TakeStair(leaderPlayerUnit.areaid)) {
  973. NTC_SendMsgToScript("NTBotGame.ntj", "NTM_TakeStair()");
  974. return;
  975. }
  976. return;
  977. }
  978. else{//New for lvl 1's follow
  979. if(leaderUnit)
  980. {
  981. NTM_GetCloserInt(leaderUnit);
  982. }
  983. else
  984. {
  985. NTM_MoveTo(leaderPlayerUnit.areaid, leaderPlayerUnit.x, leaderPlayerUnit.y);
  986. }
  987. return;
  988. }
  989. }
  990. }
  991.  
  992. // This covers outside-to-outside waypoint changes
  993. if(AreaHasWaypoint(leaderPlayerUnit.areaid))
  994. {
  995. if(NTM_TakeWaypoint(leaderPlayerUnit.areaid))
  996. {
  997. return;
  998. }
  999. }
  1000.  
  1001. // Check for special doors
  1002. // Leaving Arcane Sanctuary
  1003. if(me.areaid == 74 && leaderPlayerUnit.areaid == 54)
  1004. {
  1005. if(!NTM_TakeUnit(NTC_UNIT_OBJECT, 298))
  1006. {
  1007. Town();
  1008. }
  1009. return;
  1010. }
  1011.  
  1012. // Entering Arcane Sanctuary
  1013. if(me.areaid == 54 && leaderPlayerUnit.areaid == 74)
  1014. {
  1015. if(!NTM_TakeUnit(NTC_UNIT_OBJECT, 298))
  1016. {
  1017. Town();
  1018. }
  1019. return;
  1020. }
  1021.  
  1022. // Entering Duriel's Chamber
  1023. if(me.areaid >= 66 && me.areaid <= 72 && leaderPlayerUnit.areaid == 73)
  1024. {
  1025. if(!NTM_TakeUnit(NTC_UNIT_OBJECT, 100))
  1026. {
  1027. Town();
  1028. }
  1029. return;
  1030. }
  1031.  
  1032. // Entering Tristram
  1033. if(me.areaid == 4 && leaderPlayerUnit.areaid == 38)
  1034. {
  1035. if(!NTM_UsePortal("Portal", 38))
  1036. {
  1037. Town();
  1038. }
  1039. return;
  1040. }
  1041.  
  1042. // Exiting Tristram
  1043. if(me.areaid == 38 && leaderPlayerUnit.areaid == 4)
  1044. {
  1045. if(!NTM_UsePortal("Portal", 4))
  1046. {
  1047. Town();
  1048. }
  1049. return;
  1050. }
  1051.  
  1052. // Entering Baal's Chamber
  1053. if(me.areaid == 131 && leaderPlayerUnit.areaid == 132)
  1054. {
  1055. if(NTConfig_FollowtoWorldStone)
  1056. {
  1057. if(!NTM_TakeUnit(NTC_UNIT_OBJECT, 563))
  1058. {
  1059. Town();
  1060. }
  1061. return;
  1062. }
  1063. }
  1064.  
  1065. Town();
  1066. return;
  1067. }
  1068. }
  1069.  
  1070. function PlayerCount()
  1071. {
  1072. var _player;
  1073. var _playercount = 1;
  1074.  
  1075. _player = GetPlayerUnit();
  1076.  
  1077. if(_player)
  1078. {
  1079. while(_player.GetNext())
  1080. {
  1081. _playercount += 1;
  1082. }
  1083. }
  1084. else
  1085. {
  1086. return undefined;
  1087. }
  1088.  
  1089. return _playercount;
  1090. }
  1091.  
  1092. function PartyCount()
  1093. {
  1094. var _player;
  1095. var _myPartyId;
  1096. var _partycount = 1;
  1097.  
  1098. _player = GetPlayerUnit();
  1099.  
  1100. if(_player)
  1101. {
  1102. _myPartyId = _player.partyid;
  1103. if(_myPartyId != 65535)
  1104. {
  1105. while(_player.GetNext())
  1106. {
  1107. if(_player.name != me.name && _myPartyId == _player.partyid && _player.areaid === leaderPlayerUnit.areaid) {
  1108. _partycount += 1;
  1109. }
  1110. }
  1111. }
  1112. }
  1113. else
  1114. {
  1115. return undefined;
  1116. }
  1117.  
  1118. return _partycount;
  1119. }
  1120.  
  1121. //No same area check
  1122. function PartyCountNick()
  1123. {
  1124. var _player;
  1125. var _myPartyId;
  1126. var _partycount = 1;
  1127.  
  1128. _player = GetPlayerUnit();
  1129.  
  1130. if(_player)
  1131. {
  1132. _myPartyId = _player.partyid;
  1133. if(_myPartyId != 65535)
  1134. {
  1135. while(_player.GetNext())
  1136. {
  1137. if(_player.name != me.name && _myPartyId == _player.partyid) {
  1138. _partycount += 1;
  1139. }
  1140. }
  1141. }
  1142. }
  1143. else
  1144. {
  1145. return undefined;
  1146. }
  1147.  
  1148. return _partycount;
  1149. }
  1150.  
  1151. function ListHelpers()
  1152. {
  1153. var hcount = [];
  1154.  
  1155. if(NTConfig_HelperTownList.length < 1){
  1156. return hcount = [];
  1157. }
  1158.  
  1159. var i;
  1160.  
  1161. //Re-construct the list with only chars in game
  1162. for(i = 0; i < NTConfig_HelperTownList.length; i++)
  1163. {
  1164. if(CheckLeader(NTConfig_HelperTownList[i]))
  1165. {
  1166. hcount.push(NTConfig_HelperTownList[i]);
  1167. }
  1168. }
  1169.  
  1170. return hcount;
  1171. }
  1172.  
  1173. function InfectorOfSoulsDead()
  1174. {
  1175. _target = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2853));
  1176. if (!_target) {return false;}
  1177. return _target.mode == 12;
  1178. }
  1179.  
  1180. function ListerTheTormentorDead()
  1181. {
  1182. _target = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(21855));
  1183. if (!_target) {return false;}
  1184. return _target.mode == 12;
  1185. }
  1186.  
  1187. function AvoidDiabloExpOverflow(PlayerTotal, PartyTotal, ListHelper)
  1188. {
  1189. var num_player_desired;
  1190.  
  1191. if(PartyTotal == 1){
  1192. return;
  1193. }
  1194.  
  1195. if(ListHelper.length < 1){
  1196. return;
  1197. }
  1198.  
  1199. if(NTC_InTown(me))
  1200. {
  1201. while(leaderPlayerUnit.areaid === 108)
  1202. {
  1203. NTC_PingDelay(1000);
  1204. }
  1205. return;
  1206. }
  1207.  
  1208. switch(PlayerTotal)
  1209. {
  1210. case 1:
  1211. //No total exp penalty due to overflow
  1212. break;
  1213. case 2:
  1214. //No total exp penalty due to overflow
  1215. break;
  1216. case 3:
  1217. //No total exp penalty due to overflow
  1218. break;
  1219. case 4:
  1220. //No total exp penalty due to overflow
  1221. break;
  1222. case 5:
  1223. //Maximum total exp is attained when the number of party members nearby is 4
  1224. num_player_desired = 4;
  1225. if(PartyTotal > num_player_desired)
  1226. {
  1227. TownHelper(ListHelper, num_player_desired, PartyTotal);
  1228. }
  1229. break;
  1230. case 6:
  1231. //Maximum total exp is attained when the number of party members nearby is 4
  1232. num_player_desired = 4;
  1233. if(PartyTotal > num_player_desired)
  1234. {
  1235. TownHelper(ListHelper, num_player_desired, PartyTotal);
  1236. }
  1237. break;
  1238. case 7:
  1239. //Maximum total exp is attained when the number of party members nearby is 3
  1240. num_player_desired = 3;
  1241. if(PartyTotal > num_player_desired)
  1242. {
  1243. TownHelper(ListHelper, num_player_desired, PartyTotal);
  1244. }
  1245. break;
  1246. case 8:
  1247. //Maximum total exp is attained when the number of party members nearby is 8, but 3 is also okay...
  1248. //Do nothing if PartyTotal = 8 or 3
  1249. num_player_desired = 3;
  1250. if(PartyTotal > 3 && PartyTotal < 8)
  1251. {
  1252. TownHelper(ListHelper, num_player_desired, PartyTotal);
  1253. }
  1254. break;
  1255. }
  1256. return;
  1257. }
  1258.  
  1259. function AvoidBaalExpOverflow(PlayerTotal, PartyTotal, ListHelper)
  1260. {
  1261. var num_player_desired;
  1262.  
  1263. if(PartyTotal == 1){
  1264. return;
  1265. }
  1266.  
  1267. if(ListHelper.length < 1){
  1268. return;
  1269. }
  1270.  
  1271. if(NTC_InTown(me))
  1272. {
  1273. while(leaderPlayerUnit.areaid === 131 || leaderPlayerUnit.areaid === 132)
  1274. {
  1275. NTC_PingDelay(1000);
  1276. }
  1277. return;
  1278. }
  1279.  
  1280. switch(PlayerTotal)
  1281. {
  1282. case 1:
  1283. //No total exp penalty due to overflow
  1284. break;
  1285. case 2:
  1286. //No total exp penalty due to overflow
  1287. break;
  1288. case 3:
  1289. //No total exp penalty due to overflow
  1290. break;
  1291. case 4:
  1292. //Maximum total exp is attained when the number of party members nearby is 3
  1293. num_player_desired = 3;
  1294. if(PartyTotal > num_player_desired)
  1295. {
  1296. TownHelper(ListHelper, num_player_desired, PartyTotal);
  1297. }
  1298. break;
  1299. case 5:
  1300. //Maximum total exp is attained when the number of party members nearby is 2, but 5 is also okay...
  1301. //Do nothing if PartyTotal = 2
  1302. //Try to tackle the PartyTotal == 5 case anyway...
  1303. num_player_desired = 2;
  1304. if(PartyTotal > 2 && PartyTotal <= 5)
  1305. {
  1306. TownHelper(ListHelper, num_player_desired, PartyTotal);
  1307. }
  1308. break;
  1309. case 6:
  1310. //Maximum total exp is attained when the number of party members nearby is 5
  1311. num_player_desired = 5;
  1312. if(PartyTotal > num_player_desired)
  1313. {
  1314. TownHelper(ListHelper, num_player_desired, PartyTotal);
  1315. }
  1316. break;
  1317. case 7:
  1318. //Maximum total exp is attained when the number of party members nearby is 7, but 4 is also okay...
  1319. //Do nothing if PartyTotal = 7 or 4
  1320. num_player_desired = 4;
  1321. if(PartyTotal > 4 && PartyTotal < 7)
  1322. {
  1323. TownHelper(ListHelper, num_player_desired, PartyTotal);
  1324. }
  1325. break;
  1326. case 8:
  1327. //Maximum total exp is attained when the number of party members nearby is 4, but 6 is also okay... Maybe 8...
  1328. //Do nothing if PartyTotal = 4
  1329. //Try to tackle the PartyTotal == 6 case anyway...
  1330. num_player_desired = 4;
  1331. if(PartyTotal > 4 && PartyTotal <= 8)
  1332. {
  1333. TownHelper(ListHelper, num_player_desired, PartyTotal);
  1334. }
  1335. break;
  1336. }
  1337. return;
  1338. }
  1339.  
  1340. function AvoidNickExpOverflow(PlayerTotal, PartyTotal, ListHelper)
  1341. {
  1342. var num_player_desired;
  1343.  
  1344. if(PartyTotal == 1){
  1345. return;
  1346. }
  1347.  
  1348. if(ListHelper.length < 1){
  1349. return;
  1350. }
  1351.  
  1352. // if(NTC_InTown(me))
  1353. // {
  1354. // while(leaderPlayerUnit.areaid === 124)
  1355. // {
  1356. // NTC_PingDelay(1000);
  1357. // }
  1358. // return;
  1359. // }
  1360.  
  1361. switch(PlayerTotal)
  1362. {
  1363. case 1:
  1364. //No total exp penalty due to overflow
  1365. break;
  1366. case 2:
  1367. //No total exp penalty due to overflow
  1368. break;
  1369. case 3:
  1370. //No total exp penalty due to overflow
  1371. break;
  1372. case 4:
  1373. //No total exp penalty due to overflow
  1374. break;
  1375. case 5:
  1376. //No total exp penalty due to overflow
  1377. break;
  1378. case 6:
  1379. //No total exp penalty due to overflow
  1380. break;
  1381. case 7:
  1382. //No total exp penalty due to overflow
  1383. break;
  1384. case 8:
  1385. //Maximum total exp is attained when the number of party members nearby is 7
  1386. num_player_desired = 7;
  1387. if(PartyTotal > num_player_desired)
  1388. {
  1389. TownHelper(ListHelper, num_player_desired, PartyTotal);
  1390. }
  1391. break;
  1392. }
  1393. return;
  1394. }
  1395.  
  1396. function TownHelper(ListHelper, num_player_desired, PartyTotal)
  1397. {
  1398. var i;
  1399. var num_helper_kicked;
  1400.  
  1401. if(ListHelper.length < 1){
  1402. return false;
  1403. }
  1404.  
  1405. //The number of helpers that needs to be kicked back to town, this is always greater than 0 by definition
  1406. num_helper_kicked = PartyTotal - num_player_desired;
  1407.  
  1408. //For now, if can't reach num_player_desired after kicking all helpers back to town, do nothing. Will consider this case later...
  1409. if(num_helper_kicked > ListHelper.length){
  1410. return;
  1411. }
  1412.  
  1413. //Kick extra helpers back to town
  1414. for(i = 0; i < ListHelper.length; i++)
  1415. {
  1416. //Won't town if my name is not in the list
  1417. if(me.name == ListHelper[i] && i <= num_helper_kicked - 1)
  1418. {
  1419. Town();
  1420. while(leaderPlayerUnit.areaid === 108 || leaderPlayerUnit.areaid === 131 || leaderPlayerUnit.areaid === 132 || leaderPlayerUnit.areaid === 124)
  1421. {
  1422. NTC_PingDelay(1000);
  1423. }
  1424. break;
  1425. }
  1426. }
  1427. return;
  1428. }
  1429.  
  1430. function TPAtPlayersBody(playerName, enemysName)
  1431. {
  1432. var _playerUnit = aGetPlayerUnit(playerName);
  1433. var _playerUnit2 = GetLeader(playerName);
  1434. var _playerDistance;
  1435. if(_playerUnit)
  1436. _playerDistance = GetDistance(me, _playerUnit);
  1437. else
  1438. _playerDistance = -1;
  1439. var _playerArea = _playerUnit2.areaid;
  1440. var _myArea = me.areaid;
  1441.  
  1442. if(_playerDistance > 0 && _myArea == _playerArea)
  1443. {
  1444. if(_playerUnit)
  1445. NTM_GetCloserInt(_playerUnit);
  1446. else
  1447. NTM_MoveTo(leaderPlayerUnit.areaid, leaderPlayerUnit.x, leaderPlayerUnit.y);
  1448. TP("");
  1449. if(NTConfig_MessageDeadPlayers)
  1450. {
  1451. Whisper(playerName, NTConfig_DeadPlayerMsg);
  1452. }
  1453. }
  1454. }
  1455.  
  1456. function Guard() // Done
  1457. {
  1458. if(!NTC_InTown(me))
  1459. {
  1460. NTA_ClearPosition(15);
  1461. }
  1462. return;
  1463. }
  1464.  
  1465. function hAttack()
  1466. {
  1467. if(!NTC_InTown(me))
  1468. {
  1469. // if(NTA_CheckForCloseMonsters(30))
  1470. // {
  1471. // NTA_ClearPosition(30);
  1472. NTA_ClearPosition(20);
  1473. // Delay(1000);
  1474. Delay(200);
  1475. return;
  1476. // }
  1477. // Print(COLOR_5 + "Delay Now");
  1478. // return;
  1479. }
  1480. // Delay(1000);
  1481. Delay(200);
  1482. }
  1483.  
  1484. function hAttackThrone()
  1485. {
  1486. if(!NTC_InTown(me))
  1487. {
  1488. // if(NTA_CheckForCloseMonstersThrone(30))
  1489. // {
  1490. // NTA_ClearPosition(30);
  1491. NTA_ClearPosition(20);
  1492. // NTA_ClearPosition(30, false);
  1493. // Delay(1000);
  1494. Delay(200);
  1495. return;
  1496. // }
  1497. // Print(COLOR_5 + "Delay Now");
  1498. // return;
  1499. }
  1500. // Delay(1000);
  1501. Delay(200);
  1502. }
  1503.  
  1504. function isATown(id)
  1505. {
  1506. var _ret = false;
  1507. switch(id)
  1508. {
  1509. case 1: _ret = true; break;
  1510. case 40: _ret = true; break;
  1511. case 75: _ret = true; break;
  1512. case 103: _ret = true; break;
  1513. case 109: _ret = true; break;
  1514. }
  1515. return _ret;
  1516. }
  1517.  
  1518. function TakeLeaderTP() // Done
  1519. {
  1520. while(me.areaid == 0 || leaderPlayerUnit.areaid == 0)
  1521. {
  1522. NTC_Delay(100);
  1523. }
  1524. var _prearea = me.areaid;
  1525. var _preleaderarea = leaderPlayerUnit.areaid;
  1526. var _ret = false;
  1527. isBusy = true;
  1528.  
  1529. if(!NTC_InTown(me))
  1530. {
  1531. NTM_UsePortal("BluePortal", GetPlayerActWaypointID(me), leaderPlayerUnit.name);
  1532. NTC_PingDelay(NTConfig_AreaDelay);
  1533. if(NTC_InTown(me))
  1534. {
  1535. if(NTTMGR_CheckScrolls(1) < 8 || NTTMGR_CheckScrolls(0) < 10)
  1536. {
  1537. Whisper(leaderPlayerUnit.name, "Buying scrolls");
  1538. NTTMGR_TownManager();
  1539. }
  1540. }
  1541. }
  1542. else if(NTC_InTown(me))
  1543. {
  1544. NTM_UsePortal("BluePortal", _preleaderarea, leaderPlayerUnit.name);
  1545. NTC_PingDelay(NTConfig_AreaDelay);
  1546. if(!NTC_InTown(me))
  1547. {
  1548. NTP_DoPrecast(true);
  1549. }
  1550. }
  1551.  
  1552. if(_prearea !== me.areaid)
  1553. {
  1554. _ret = true;
  1555. }
  1556. else
  1557. {
  1558. _ret = false;
  1559. }
  1560.  
  1561. isBusy = false;
  1562. return _ret;
  1563. }
  1564.  
  1565. function GiveGold( amount ) // Done
  1566. {
  1567. isBusy = true;
  1568. _gold = me.GetStat(14);
  1569. if(amount != "")
  1570. {
  1571. if( parseInt(amount) <= 50000 && parseInt(amount) >= 1 )
  1572. {
  1573. if(parseInt(amount) <= _gold)
  1574. {
  1575. Gold(0, parseInt(amount));
  1576. }
  1577. else
  1578. {
  1579. Print(COLOR_5 + "Sorry, I am out of gold!");
  1580. }
  1581. NTC_Delay(1000);
  1582. }
  1583. else
  1584. {
  1585. Print(COLOR_5 + "Invalid amount. Valid range is 1-10000.");
  1586. }
  1587. }
  1588. else
  1589. {
  1590. Print(COLOR_5 + "Invalid amount. Valid range is 1-10000.");
  1591. }
  1592. isBusy = false;
  1593. }
  1594.  
  1595. function GiveTits()
  1596. {
  1597. isBusy = true;
  1598. milkz = 50000; //amount of real gold to spare
  1599. _gold = me.GetStat(14);
  1600.  
  1601. // Print(COLOR_5 + "Roger");
  1602.  
  1603. NTTMGR_BrgTits();
  1604.  
  1605. // Print(COLOR_5 + "my tits");
  1606.  
  1607. if(parseInt(milkz) <= _gold)
  1608. {
  1609. Gold(0, parseInt(milkz));
  1610. }
  1611. else
  1612. {
  1613. // Print(COLOR_5 + "Sorry, I am out of milkz!");
  1614. }
  1615. NTC_Delay(1000);
  1616.  
  1617. isBusy = false;
  1618. return;
  1619. }
  1620.  
  1621. function NTTMGR_BrgTits()
  1622. {
  1623. CheckForGoldWho = ["akara", "fara", "ormus", "jamella", "malah"];
  1624.  
  1625. switch(me.act){
  1626. case 1:
  1627. if(!NTTM_TownMove(CheckForGoldWho[0])) {
  1628. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
  1629. return;
  1630. }
  1631. break;
  1632. case 2:
  1633. if(!NTTM_TownMove(CheckForGoldWho[1])) {
  1634. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
  1635. return;
  1636. }
  1637. break;
  1638. case 3:
  1639. if(!NTTM_TownMove(CheckForGoldWho[2])) {
  1640. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
  1641. return;
  1642. }
  1643. break;
  1644. case 4:
  1645. if(!NTTM_TownMove(CheckForGoldWho[3])) {
  1646. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
  1647. return;
  1648. }
  1649. break;
  1650. case 5:
  1651. if(!NTTM_TownMove(CheckForGoldWho[4])) {
  1652. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
  1653. return;
  1654. }
  1655. break;
  1656. default:
  1657. break;
  1658. } return;
  1659. }
  1660.  
  1661. function Quest( msg ) // Done (needs testing)
  1662. {
  1663. if(!NTC_InTown(me))
  1664. Town();
  1665. switch(msg)
  1666. {
  1667. case "":
  1668. break;
  1669. case "cain":
  1670. Extras.Cain();
  1671. break;
  1672. case "andy":
  1673. case "andariel":
  1674. Quests.Andy();
  1675. break;
  1676. case "radament":
  1677. case "rada":
  1678. Extras.Radament();
  1679. break;
  1680. case "cube":
  1681. Quests.Cube();
  1682. break;
  1683. case "staff":
  1684. Quests.Staff();
  1685. break;
  1686. case "ammy":
  1687. Quests.Ammy();
  1688. break;
  1689. case "summoner":
  1690. Quests.Summoner();
  1691. break;
  1692. case "duriel":
  1693. Quests.Duriel();
  1694. break;
  1695. case "tome":
  1696. Extras.Tome();
  1697. break;
  1698. case "travincal":
  1699. case "trav":
  1700. Quests.Travincal();
  1701. break;
  1702. case "mephisto":
  1703. case "meph":
  1704. Quests.Mephisto();
  1705. break;
  1706. case "izual":
  1707. case "izzy":
  1708. Extras.Izual();
  1709. break;
  1710. case "diablo":
  1711. Quests.Diablo();
  1712. break;
  1713. case "shenk":
  1714. Extras.Shenk();
  1715. break;
  1716. case "anya":
  1717. Extras.Anya();
  1718. break;
  1719. case "ancients":
  1720. Quests.Ancients();
  1721. break;
  1722. case "baal":
  1723. Quests.Baal();
  1724. break;
  1725. case "imbue":
  1726. Imbue();
  1727. break;
  1728. default:
  1729. Invalid();
  1730. }
  1731. }
  1732.  
  1733. function Town() // Done
  1734. {
  1735. while(me.areaid == 0)
  1736. {
  1737. NTC_Delay(100);
  1738. }
  1739. var _ret = false;
  1740. var _prearea = me.areaid;
  1741.  
  1742. if(!NTC_InTown(me))
  1743. {
  1744. isBusy = true;
  1745. NTM_MakeTP();
  1746. NTC_PingDelay(500);
  1747.  
  1748. NTM_UsePortal("BluePortal", GetPlayerActWaypointID(me), me.charname);
  1749. NTC_PingDelay(NTConfig_AreaDelay);
  1750.  
  1751. if(NTC_InTown(me))
  1752. {
  1753. if(NTTMGR_CheckScrolls(1) < 8 || NTTMGR_CheckScrolls(0) < 10)
  1754. {
  1755. NTTMGR_TownManager();
  1756. }
  1757. }
  1758.  
  1759. if(_prearea !== me.areaid)
  1760. {
  1761. isBusy = false;
  1762. _ret = true;
  1763. return _ret;
  1764. }
  1765. else
  1766. {
  1767. isBusy = false;
  1768. _ret = false;
  1769. return _ret;
  1770. }
  1771. }
  1772. else if(NTC_InTown(me))
  1773. {
  1774. isBusy = true;
  1775. if(NTTMGR_CheckScrolls(1) < 8 || NTTMGR_CheckScrolls(0) < 10)
  1776. {
  1777. NTTMGR_TownManager();
  1778. }
  1779. isBusy = false;
  1780. _ret = true;
  1781. return _ret;
  1782. }
  1783. }
  1784.  
  1785. function Chant( msg ) // Done
  1786. {
  1787. if(msg == "on")
  1788. {
  1789. Print(COLOR_5 + "!Auto enchant turned on!");
  1790. Print(COLOR_5 + "Following and attacking disabled!");
  1791. isAutoEnchantEnabled = true;
  1792. return;
  1793. }
  1794.  
  1795. if(msg == "off")
  1796. {
  1797. Print(COLOR_5 + "!Auto enchant turned off!");
  1798. isAutoEnchantEnabled = false;
  1799. return;
  1800. }
  1801.  
  1802. isBusy = true;
  1803. if(!NTC_InTown(me) && NTC_GetSkillLevel(52))
  1804. {
  1805. // Enchant player
  1806. var _player = NTC_FindUnit(NTC_UNIT_PLAYER);
  1807. //var _merc = NTC_FindUnit(NTC_UNIT_MERC);
  1808. if(!_player)
  1809. return;
  1810. do
  1811. {
  1812. if(_player.name !== me.name && GetDistance(me, _player) <= 20 && NTC_InMyParty(_player.name))
  1813. {
  1814. NTC_Delay(750);
  1815. NTC_CastSkill(52, NTC_HAND_RIGHT, _player);
  1816. }
  1817.  
  1818. // Enchant merc
  1819. var _merc = NTC_FindUnit(NTC_UNIT_MERC);
  1820. if (_merc)
  1821. {
  1822. do
  1823. {
  1824. if(NTC_CheckOwner(_merc, _player.name) && GetDistance(me, _merc) < 20 && _merc.hp > 0 && _player.name !== me.name)
  1825. {
  1826. NTC_Delay(750);
  1827. NTC_CastSkill(52, NTC_HAND_RIGHT, _merc);
  1828. }
  1829. } while (_merc.GetNext());
  1830. }
  1831. } while( _player.GetNext() )
  1832. }
  1833. // else
  1834. else if(NTC_InTown(me))
  1835. {
  1836. Print(COLOR_5 + "I'm in town! Say 'help tp' for more information.");
  1837. }
  1838. isBusy = false;
  1839. }
  1840.  
  1841. function TP(msg) // Done
  1842. {
  1843. isBusy = true;
  1844. switch(msg)
  1845. {
  1846. case "":
  1847. if(!NTC_InTown(me))
  1848. {
  1849. if(!NTM_MakeTP())
  1850. {
  1851. Print(COLOR_5 + "Failed to make a TP");
  1852. }
  1853. break;
  1854. }
  1855. if(NTC_InTown(me))
  1856. {
  1857. Print(COLOR_5 + "I'm in town! Say 'help tp' for more information.");
  1858. }
  1859. isBusy = false;
  1860. break;
  1861.  
  1862. default:
  1863. var wpID = WaypointNameToID(msg);
  1864. if(wpID == -1)
  1865. {
  1866. Invalid();
  1867. isBusy = false;
  1868. return;
  1869. }
  1870.  
  1871. if(!NTC_InTown(me))
  1872. {
  1873. if(wpID != -1)
  1874. {
  1875. Town();
  1876. if(NTTMGR_CheckScrolls(1) <= 8)
  1877. {
  1878. Print(COLOR_5 + "Buying scrolls first!");
  1879. NTTMGR_TownManager();
  1880. }
  1881. NTTM_TownMove("waypoint")
  1882. NTM_TakeWaypoint(wpID);
  1883. if(!NTM_MakeTP())
  1884. {
  1885. Print(COLOR_5 + "Failed to make a TP");
  1886. }
  1887. break;
  1888. }
  1889. }
  1890. else
  1891. {
  1892. if(wpID != -1)
  1893. {
  1894. if(NTTMGR_CheckScrolls(1) <= 8)
  1895. {
  1896. Print(COLOR_5 + "Buying scrolls first!");
  1897. NTTMGR_TownManager();
  1898. }
  1899. NTTM_TownMove("waypoint")
  1900. NTM_TakeWaypoint(wpID);
  1901. if(!NTM_MakeTP())
  1902. {
  1903. Print(COLOR_5 + "Failed to make a TP"); // this too
  1904. }
  1905. }
  1906. }
  1907. break;
  1908. }
  1909. isBusy = false;
  1910. }
  1911.  
  1912. function CommandClear(msg) // Done
  1913. {
  1914. isBusy = true;
  1915. if(!NTC_InTown(me))
  1916. {
  1917. switch(msg)
  1918. {
  1919. case "":
  1920. NTA_ClearPosition( 30 )
  1921. break;
  1922. case "level":
  1923. NTA_ClearLevel();
  1924. break;
  1925. default:
  1926. if(msg >= 5 && msg <= 40)
  1927. NTA_ClearPosition(msg);
  1928. break;
  1929. }
  1930. }
  1931. else
  1932. {
  1933. Print(COLOR_5 + "I'm in town!");
  1934. }
  1935. isBusy = false;
  1936. }
  1937.  
  1938. function Rush( msg ) // Done (needs testing)
  1939. {
  1940. isBusy = true;
  1941. isFollowingEnabled = false;
  1942. isAutoEnchantEnabled = false;
  1943. switch(msg)
  1944. {
  1945. case "":
  1946. Rush1();
  1947. Rush2();
  1948. Rush3();
  1949. Rush4();
  1950. Rush5();
  1951. break;
  1952. case "1":
  1953. Print(COLOR_5 + "Starting act 1");
  1954. Rush1();
  1955. break;
  1956. case "2":
  1957. Print(COLOR_5 + "Starting act 2");
  1958. Rush2();
  1959. break;
  1960. case "3":
  1961. Print(COLOR_5 + "Starting act 3");
  1962. Rush3();
  1963. break;
  1964. case "4":
  1965. Print(COLOR_5 + "Starting act 4");
  1966. Rush4();
  1967. break;
  1968. case "5":
  1969. Print(COLOR_5 + "Starting act 5");
  1970. Rush5();
  1971. break;
  1972. default:
  1973. Invalid();
  1974. }
  1975. isBusy = false;
  1976. }
  1977.  
  1978. function Rush1()
  1979. {
  1980. if(NTConfig_Quest_Cain)
  1981. Extras.Cain();
  1982. Quests.Andy();
  1983. }
  1984.  
  1985. function Rush2()
  1986. {
  1987. if(NTConfig_Quest_Radament)
  1988. Extras.Radament();
  1989. if(me.diff == 0)
  1990. Quests.Cube();
  1991. Quests.Ammy();
  1992. Quests.Staff();
  1993. Quests.Summoner();
  1994. Quests.Duriel();
  1995. }
  1996.  
  1997. function Rush3()
  1998. {
  1999. if(NTConfig_Quest_Tome)
  2000. Extras.Tome();
  2001. Quests.Travincal();
  2002. Quests.Mephisto();
  2003. }
  2004.  
  2005. function Rush4()
  2006. {
  2007. if(NTConfig_Quest_Izual)
  2008. Extras.Izual();
  2009. Quests.Diablo();
  2010. }
  2011.  
  2012. function Rush5()
  2013. {
  2014. if(NTConfig_Quest_Shenk)
  2015. Extras.Shenk();
  2016. if(NTConfig_Quest_Anya)
  2017. Extras.Anya();
  2018. if(NTConfig_Quest_Ancients)
  2019. Quests.Ancients();
  2020. if(NTConfig_Quest_Baal)
  2021. Quests.Baal();
  2022. }
  2023.  
  2024. function Imbue()
  2025. {
  2026. if(!NTTM_CheckAct(1))
  2027. {
  2028. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
  2029. return;
  2030. }
  2031.  
  2032. NTTMGR_TownManager();
  2033.  
  2034. if(!NTTM_TownMove("waypoint"))
  2035. {
  2036. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
  2037. return;
  2038. }
  2039.  
  2040. if(!NTM_TakeWaypoint(27))
  2041. {
  2042. NTC_SendMsgToScript("NTBotGame.ntj", "NTM_TakeWaypoint()");
  2043. return;
  2044. }
  2045.  
  2046. NTP_DoPrecast(true);
  2047.  
  2048. if(!NTM_MoveToPresetUnit(28, NTC_UNIT_OBJECT, 108, 5, 5, false))
  2049. {
  2050. NTC_SendMsgToScript("NTBotGame.ntj", "NTM_MoveToPresetUnit()");
  2051. return;
  2052. }
  2053. NTM_MakeTP();
  2054. NTC_Delay(500);
  2055.  
  2056. // if(!NTA_KillMonster(GetLocaleString(2889)))
  2057. // {
  2058. // NTC_SendMsgToScript("NTBotGame.ntj", "NTA_KillMonster()");
  2059. // return;
  2060. // }
  2061. NTA_ClearPosition(10);
  2062. Town();
  2063. }
  2064.  
  2065. // ******************************************************************************
  2066. // Internal functions
  2067. // ******************************************************************************
  2068.  
  2069. function WaypointNameToID(name) // for Nith, you have to say 'nit' instead of 'hal'. Conflicts with 'hal'ls of the dead.
  2070. {
  2071. var partial = name.substring(0, 3);
  2072. var returnID = -1;
  2073.  
  2074. // Area name to area ID
  2075. switch(partial)
  2076. {
  2077. // Act 1
  2078. case "col": // cold plains
  2079. returnID = 3;
  2080. break;
  2081. case "sto": // stony field
  2082. returnID = 4;
  2083. break;
  2084. case "dar": // dark wood
  2085. returnID = 5;
  2086. break;
  2087. case "bla": // black marsh
  2088. returnID = 6;
  2089. break;
  2090. case "out": // outer cloister
  2091. returnID = 27;
  2092. break;
  2093. case "jai": // jail level 1
  2094. returnID = 29;
  2095. break;
  2096. case "inn": // inner cloister
  2097. returnID = 32;
  2098. break;
  2099. case "cat": // catacombs level 2
  2100. returnID = 35;
  2101. break;
  2102.  
  2103. // Act 2
  2104. case "sew": // sewers level 2
  2105. returnID = 48;
  2106. break;
  2107. case "hal": // halls of the dead level 2
  2108. returnID = 57;
  2109. break;
  2110. case "far": // far oasis
  2111. returnID = 43;
  2112. break;
  2113. case "los": // lost city
  2114. returnID = 44;
  2115. break;
  2116. case "pal": // palace
  2117. returnID = 52;
  2118. break;
  2119. case "arc": // arcane
  2120. returnID = 74;
  2121. break;
  2122. case "can": // canyon
  2123. returnID = 46;
  2124. break;
  2125.  
  2126. // Act 3
  2127. case "spi": // spider forest
  2128. returnID = 76;
  2129. break;
  2130. case "gre": // great marsh
  2131. returnID = 77;
  2132. break;
  2133. case "fla": // flayer jungle
  2134. returnID = 78;
  2135. break;
  2136. case "low": // lower kurast
  2137. returnID = 79;
  2138. break;
  2139. case "kur": // kurast bazar
  2140. returnID = 80;
  2141. break;
  2142. case "upp": // upper kurast
  2143. returnID = 81;
  2144. break;
  2145. case "tra": // travincal
  2146. returnID = 83;
  2147. break;
  2148. case "dur": // durance of hate level 2
  2149. returnID = 101;
  2150. break;
  2151.  
  2152. // Act 4
  2153. case "cit": // city of the damned
  2154. returnID = 106;
  2155. break;
  2156. case "riv": // river of flame
  2157. returnID = 107;
  2158. break;
  2159.  
  2160. // Act 5
  2161. case "fri": // fridgid highlands
  2162. returnID = 111;
  2163. break;
  2164. case "arr": // arreat summit
  2165. returnID = 112;
  2166. break;
  2167. case "cry": // crystalline passage
  2168. returnID = 113;
  2169. break;
  2170. case "gla": // glacial trail
  2171. returnID = 115;
  2172. break;
  2173. case "fro": // frozen tundra
  2174. returnID = 117;
  2175. break;
  2176. case "nit": // nith
  2177. returnID = 123;
  2178. break;
  2179. case "anc": // ancients
  2180. returnID = 118;
  2181. break;
  2182. case "wor": // worldstone
  2183. returnID = 129;
  2184. break;
  2185. default:
  2186. returnID = -1;
  2187. }
  2188. return returnID;
  2189. }
  2190.  
  2191. function AreaHasWaypoint(area)
  2192. {
  2193. var _ret = false;
  2194. switch(area)
  2195. {
  2196. // ACT_1
  2197. case 3: _ret = true; break; // LEVEL_COLD_PLAINS
  2198. case 4: _ret = true; break; // LEVEL_STONY_FIELD
  2199. case 5: _ret = true; break; // LEVEL_DARK_WOOD
  2200. case 6: _ret = true; break; // LEVEL_BLACK_MARSH
  2201. case 27: _ret = true; break; // LEVEL_OUTER_CLOISTER
  2202. case 29: _ret = true; break; // LEVEL_JAIL_LEVEL_1
  2203. case 32: _ret = true; break; // LEVEL_INNER_CLOISTER
  2204. case 35: _ret = true; break; // LEVEL_CATACOMBS_LEVEL_2
  2205.  
  2206. // ACT_2
  2207. case 40: _ret = true; break; // LEVEL_LUT_GHOLEIN
  2208. case 42: _ret = true; break; // LEVEL_DRY_HILLS
  2209. case 43: _ret = true; break; // LEVEL_FAR_OASIS
  2210. case 44: _ret = true; break; // LEVEL_LOST_CITY
  2211. case 46: _ret = true; break; // LEVEL_CANYON_OF_THE_MAGI
  2212. case 48: _ret = true; break; // LEVEL_SEWERS_LEVEL_2
  2213. case 52: _ret = true; break; // LEVEL_PALACE_CELLAR_LEVEL_1
  2214. case 57: _ret = true; break; // LEVEL_HALLS_OF_THE_DEAD_LEVEL_2
  2215. case 74: _ret = true; break; // LEVEL_ARCANE_SANCTUARY
  2216.  
  2217. // ACT_3
  2218. case 76: _ret = true; break; // LEVEL_SPIDER_FOREST
  2219. case 77: _ret = true; break; // LEVEL_GREAT_MARSH
  2220. case 78: _ret = true; break; // LEVEL_FLAYER_JUNGLE
  2221. case 79: _ret = true; break; // LEVEL_LOWER_KURASH
  2222. case 80: _ret = true; break; // LEVEL_KURASH_BAZAAR
  2223. case 81: _ret = true; break; // LEVEL_UPPER_KURAST
  2224. case 83: _ret = true; break; // LEVEL_TRAVINCAL
  2225. case 101: _ret = true; break; // LEVEL_DURANCE_OF_HATE_LEVEL_2
  2226.  
  2227. // ACT_4
  2228. case 103: _ret = true; break; // LEVEL_PANDEMONIUM_FORTRESS
  2229. case 106: _ret = true; break; // LEVEL_CITY_OF_THE_DAMNED
  2230. case 107: _ret = true; break; // LEVEL_RIVER_OF_FLAME
  2231.  
  2232. // ACT_5
  2233. case 109: _ret = true; break; // LEVEL_HARROGATH
  2234. case 111: _ret = true; break; // LEVEL_FRIGID_HIGHLANDS
  2235. case 112: _ret = true; break; // LEVEL_ARREAT_PLATEAU
  2236. case 113: _ret = true; break; // LEVEL_CRYSTALLINE_PASSAGE
  2237. case 115: _ret = true; break; // LEVEL_GLACIAL_TRAIL
  2238. case 117: _ret = true; break; // LEVEL_FROZEN_TUNDRA
  2239. case 118: _ret = true; break; // LEVEL_GLACIAL_CAVES_LEVEL_1
  2240. case 123: _ret = true; break; // LEVEL_HALLS_OF_DEATHS_CALLING
  2241. case 129: _ret = true; break; // LEVEL_THE_WORLDSTONE_KEEP_LEVEL_2
  2242.  
  2243. default: _ret = false; break; // All other areas have no waypoints
  2244. }
  2245. return _ret;
  2246. }
  2247.  
  2248. // from koltons script
  2249. function GetLeader(name)
  2250. {
  2251. _party = GetPlayerUnit();
  2252.  
  2253. if (_party) {
  2254. do {
  2255. if (_party.name === name) {
  2256. return _party;
  2257. }
  2258. } while (_party.GetNext());
  2259. }
  2260.  
  2261. return false;
  2262. }
  2263.  
  2264. // from koltons script
  2265. function GetLeaderUnit(name)
  2266. {
  2267. var _unit = NTC_FindUnit(NTC_UNIT_PLAYER);
  2268.  
  2269. if (_unit) {
  2270. do {
  2271. if (_unit.name === name) {
  2272. return _unit;
  2273. }
  2274. } while (_unit.GetNext());
  2275. }
  2276. return false;
  2277. }
  2278.  
  2279. function aGetPlayerUnit(name)
  2280. {
  2281. var _unit = NTC_FindUnit(NTC_UNIT_PLAYER);
  2282.  
  2283. if (_unit) {
  2284. do {
  2285. if (_unit.name === name) {
  2286. return _unit;
  2287. }
  2288. } while (_unit.GetNext());
  2289. }
  2290. return false;
  2291. }
  2292.  
  2293. // from koltons script
  2294. function CheckAct(leaderPlayerUnit)
  2295. {
  2296. if (leaderPlayerUnit.areaid <= 39) {
  2297. return 1;
  2298. } else if(leaderPlayerUnit.areaid >= 40 && leaderPlayerUnit.areaid <= 74) {
  2299. return 2;
  2300. } else if(leaderPlayerUnit.areaid >= 75 && leaderPlayerUnit.areaid <= 102) {
  2301. return 3;
  2302. } else if(leaderPlayerUnit.areaid >= 103 && leaderPlayerUnit.areaid <= 108) {
  2303. return 4;
  2304. }
  2305. else return 5;
  2306. }
  2307.  
  2308. function GetPlayerActWaypointID(leaderPlayerUnit)
  2309. {
  2310. if (leaderPlayerUnit.areaid <= 39) {
  2311. return 1;
  2312. } else if(leaderPlayerUnit.areaid >= 40 && leaderPlayerUnit.areaid <= 74) {
  2313. return 40;
  2314. } else if(leaderPlayerUnit.areaid >= 75 && leaderPlayerUnit.areaid <= 102) {
  2315. return 75;
  2316. } else if(leaderPlayerUnit.areaid >= 103 && leaderPlayerUnit.areaid <= 108) {
  2317. return 103;
  2318. }
  2319. else return 109;
  2320. }
  2321.  
  2322. function CheckLeader(name)
  2323. {
  2324. _player = GetPlayerUnit();
  2325. if(_player)
  2326. {
  2327. do
  2328. {
  2329. if(_player.name != name)
  2330. continue;
  2331. if(_player.name == name)
  2332. return true;
  2333. } while(_player.GetNext())
  2334. }
  2335. return false;
  2336. }
  2337.  
  2338. function NTH_GetDistance(sx, sy, ex, ey)
  2339. {
  2340. // Laziness
  2341. }
  2342.  
  2343. function Whisper(name, msg)
  2344. {
  2345. // Sends a in-game whisper via @charname msg
  2346. // This does NOT get you IP bans or realms downs
  2347. // :)
  2348. // Print(COLOR_5 + "@" + name + " " + msg);
  2349. }
  2350.  
  2351. function LogActionPl0x(message)
  2352. {
  2353. // Debugging stuff
  2354. var time = new Date();
  2355. var hour = time.getHours();
  2356. var minute = time.getMinutes();
  2357. var second = time.getSeconds();
  2358. var millisecond = time.getMilliseconds();
  2359. var DoN = "AM";
  2360. if (hour > 11) { DoN = "PM"; }
  2361. if (hour > 12) { hour = hour - 12; }
  2362. if (hour == 0) { hour = 12; }
  2363. if (hour < 10) { hour = "0" + hour; }
  2364. if (minute < 10) { minute = "0" + minute; }
  2365. if (second < 10) { second = "0" + second; }
  2366. if (String(millisecond).length == 2) { millisecond = millisecond + "0"; }
  2367. if (String(millisecond).length == 1) { millisecond = millisecond + "00"; }
  2368. var timeString = "[" + hour + ':' + minute + ':' + second + ":" + millisecond + " " + DoN + "]";
  2369.  
  2370. var file = FileOpen("logs/NTHelperDebug.txt", 2);
  2371. if(!file)
  2372. file = FileOpen("logs/NTHelperDebug.txt", 1);
  2373.  
  2374. file.WriteLine(timeString + ": " + message);
  2375. file.Close();
  2376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement