Guest User

Untitled

a guest
Jun 19th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.94 KB | None | 0 0
  1. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  2. // CHANGE THESE VARIABLES //
  3. //{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  4.  
  5. //-----------------------------//
  6. // Character Name Configs //
  7. //-----------------------------//
  8. var leader = "Vitamins"; //Main Sorc Leader
  9. var pally = "iSpun"; //Main Pally
  10. var pally2 = "WeSpun"; //Helper Pally
  11. var pally3 = "pally3"; //Helper Pally2
  12. var barb = "Lurk"; //Main Barb
  13. var zon = "zon"; //Amazon
  14. var nec = "iBoNeD"; //Nec
  15. var sorc = "sorc"; //Sorc
  16. var leecher = "Leecher"; //Passive Leecher
  17. //--------------//
  18. // Settings //
  19. //--------------//
  20. var delay_start = 25000; //This is in milaseconds. Sorc delay to give Barb/Pally time to buy. Set to 0 to disable.
  21. var boss_only = true; //If true, kills boss first and ignores remaining monsters.
  22. var own_tp = true; //If true, each character will use their own TP to get to town.
  23. var pickit_seals = false; //Do you want helpers to Pickit Seals?
  24. //--------------------//
  25. // Announcements //
  26. //--------------------//
  27. var announce_active = true; //If true, sorc will use say commands
  28. var announce_bo = "BO"; //BO TP is Up commands
  29. var announce_viz = "Viz Up"; //Vizier Up command
  30. var announce_vizd = "Viz Down"; //Vizier Dead command
  31. var announce_inf = "Fect Up"; //Infect Up command
  32. var announce_infd = "Fect Down"; //Infect Dead command
  33. var announce_seis = "Seis Up"; //DeSeis Up command
  34. var announce_seisd = "Seis Down"; //DeSeis Dead command
  35. var announce_d = "Dia Out"; //Diablo Up command
  36. //-------------------//
  37. // Main Pally Config //
  38. //-------------------//
  39. var ham_viz = 5; //Ammount of pre-hammers for Vizier
  40. var ham_inf = 10; //Ammount of pre-hammers for Infector
  41. var ham_des = 10; //Ammount of pre-hammers for DeSeis
  42. var pally_Dia = false; //If true will help kill Diablo
  43. //---------------------//
  44. // Helper Pally Config //
  45. //---------------------//
  46. var ham2_viz = 5; //Ammount of pre-hammers for Vizier
  47. var ham2_inf = 12; //Ammount of pre-hammers for Infector
  48. var ham2_des = 12; //Ammount of pre-hammers for DeSeis
  49. var pally2_Dia = false; //If true will help kill Diablo
  50. //-----------------//
  51. // Amazon Config //
  52. //-----------------//
  53. var zon_Dia = false; //If true will help kill Diablo
  54. //--------------------//
  55. // Necromancer Config //
  56. //--------------------//
  57. var nec_Dia = false; //If true will help kill Diablo
  58. //----------------------------//
  59. // Helper Sorceress Config //
  60. //----------------------------//
  61. var sorc_viz = 5; //Number of pre casts for viz
  62. var sorc_inf = 10; //Number of pre casts for inf
  63. var sorc_des = 10; //Number of pre casts for seis
  64. var sorc_Dia = false; //If true will help kill Diablo
  65. //-------------------//
  66. // Main Barb Config //
  67. //-------------------//
  68. var tp_howl = false; //Howl after entering TP's
  69. var tp_bo = false; //BO after entering TP's
  70. var leap_inf = 7; //Ammount of pre-leaps for Infector
  71. var leap_des = 7; //Ammount of pre-leaps for DeSeis
  72. var barb_Dia = false; //If true will help kill Diablo
  73. //-------------------//
  74. // Main Barb Config //
  75. //-------------------//
  76. var leech_Dia = false; //If true will Leech Diablo
  77. //}
  78. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  79. // Global Variables (Dont Touch) //
  80. //{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  81. var _MyDT_PreMessage = "";
  82. var _sealpos = 0;
  83. var safex;
  84. var safey;
  85. var TPx;
  86. var TPy;
  87. var prevx;
  88. var prevy;
  89. var left_barb = false;
  90. var left_pally = false;
  91. var d_spawn = false;
  92. //}
  93. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  94. // Main Functions //
  95. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  96. function NTMain()
  97. {
  98. Include("libs/common/NTCommon.ntl");
  99. NTC_IncludeLibs();
  100. NTC_IncludeConfig("NTBot/char_configs");
  101. NT_LoadConfig();
  102. NTSI_LoadNIPFiles("NTBot/item_configs");
  103. NTA_Initialize();
  104.  
  105. if(!NTTM_CheckAct())
  106. {
  107. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
  108. return;
  109. }
  110.  
  111. NTC_Delay(1000);
  112.  
  113. if(!NTTM_CheckAct(4))
  114. {
  115. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
  116. return;
  117. }
  118.  
  119. RegisterEvent(EVENT_GAMEMSG, quitfunc);
  120.  
  121. //Empty txt file
  122. TD_File("NTBot/bots/TeamD.txt", 1);
  123.  
  124. //Leader Sorc
  125. if(me.name == leader)
  126. {
  127. if(!NTTM_CheckAct(4))
  128. {
  129. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
  130. return;
  131. }
  132. if(delay_start)
  133. NTC_Delay(delay_start);
  134. NTTMGR_TownManager();
  135. TD_Sorcfunc();
  136. }
  137.  
  138. //Helpers
  139. if(me.name == pally || me.name == pally2 || me.name == pally3 || me.name == barb || me.name == zon || me.name == nec || me.name == sorc || me.name == leecher)
  140. {
  141. NTTMGR_TownManager();
  142. NTTM_TownMove("portalspot");
  143.  
  144. while(1) {
  145. TD_TeamCommands();
  146. Delay(200);
  147. }
  148. }
  149. NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
  150. }
  151. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  152. // Main Sorceress //
  153. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  154. function TD_Sorcfunc()
  155. {
  156. NTC_Delay(500);
  157. if(!NTTM_TownMove("waypoint"))
  158. {
  159. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
  160. return;
  161. }
  162.  
  163. if(!NTM_TakeWaypoint(107))
  164. {
  165. NTC_SendMsgToScript("NTBotGame.ntj", "NTM_TakeWaypoint()");
  166. return;
  167. }
  168. NTC_Delay(500);
  169. NTM_MoveTo(me.areaid, me.x+5, me.y);
  170. TD_Do_Tp();
  171.  
  172. //Announce say commands
  173. if(announce_active)
  174. Say(announce_bo);
  175.  
  176. TD_File("NTBot/bots/TeamD.txt", 1, ".bo");
  177. NTC_Delay(1500);
  178. //if barb never shows
  179. var bo_timeout = 0;
  180. while(!me.GetState(32))
  181. {
  182. if(bo_timeout >= 40)
  183. {
  184. NTC_Delay(500);
  185. ExitGame();
  186. }
  187.  
  188. NTC_Delay(500);
  189. bo_timeout++;
  190. }
  191.  
  192. NTP_DoPrecast(true);
  193.  
  194. if(!TD_MoveTo(108, 7802, 5591)) {
  195. NTC_SendMsgToScript("NTBotGame.ntj", "TD_MoveTo()");
  196. return;
  197. }
  198.  
  199. //Detect layout and move to next position
  200. if(TD_DetectLayout(1) == 1)
  201. TD_Sorc_Next(7681, 5296);
  202. else
  203. TD_Sorc_Next(7682, 5316);
  204.  
  205.  
  206. //Announce say commands
  207. if(announce_active)
  208. Say(announce_viz);
  209.  
  210. //Write to file
  211. TD_File("NTBot/bots/TeamD.txt", 1, ".s1"); //vizier
  212.  
  213. if(!TD_VizierSeal())
  214. {
  215. NTC_SendMsgToScript("NTBotGame.ntj", "Seal opening");
  216. return;
  217. }
  218.  
  219. var _msg = TD_File("NTBot/bots/TeamD.txt", 0);
  220. var msg2 = _msg.substring(_msg.indexOf("/") + 1);
  221.  
  222. //Sorc attack rotation for seals.
  223. NTM_MoveTo(me.areaid, TPx, TPy);
  224.  
  225. var _viz = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2851), 120);
  226. if(_viz && _viz.GetStat(43) > 100) // ci viz
  227. {
  228. if (!CheckCollision(me, _viz, 1))
  229. {
  230. var _pos = me.GetOptimalAttackPos(_viz.areaid, _viz.x, _viz.y, 6, 1);
  231. Print("Can't attack Viz. Moving.");
  232. _pos ? NTM_MoveTo(_viz.areaid, _pos[0], _pos[1], 0) : NTM_MoveTo(_viz.areaid, _viz.x, _viz.y, 0);
  233. }
  234. while (_viz && _viz.hp > 0 && _viz.mode != 0 && _viz.mode != 12)
  235. {
  236. NTC_CastSkill(59, NTC_HAND_RIGHT, _viz);
  237. while (me.GetSkillStatus(59) == 8)
  238. NTC_CastSkill(55, NTC_HAND_RIGHT, _viz); // glacial
  239. //NTC_CastSkill(42, NTC_HAND_LEFT, _inf); // blast
  240. _viz = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2851), 120);
  241. }
  242. }
  243. else
  244. {
  245. Print("*Rawr* i are agressive sorc!");
  246. while (_viz && _viz.hp > 0 && _viz.mode != 0 && _viz.mode != 12)
  247. {
  248. if (me.GetSkillStatus(59) != 8)
  249. NTC_CastSkill(59, NTC_HAND_RIGHT, _viz);
  250. if (GetDistance(me, _viz) > 5)
  251. NTM_MoveTo(_viz.areaid, _viz.x, _viz.y);
  252. NTC_CastSkill(55, NTC_HAND_RIGHT, _viz);
  253. while (me.GetSkillStatus(59) == 8)
  254. NTC_CastSkill(45, NTC_HAND_RIGHT, _viz); // ib
  255. _viz = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2851), 120);
  256. }
  257. }
  258. NTSI_PickItems();
  259.  
  260. //Write to file
  261. NT_File("NTBot/bots/TeamD.txt", 1, ".s1d"); //Vizier Dead
  262.  
  263. //New Check safe
  264. if(NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe))
  265. {
  266. NTTMGR_VisitTown();
  267. }
  268.  
  269. NTP_DoPrecast(true);
  270.  
  271. //Detect layout and move to next position
  272. if(TD_DetectLayout(3) == 1)
  273. TD_Sorc_Next(7917, 5294);
  274. else
  275. TD_Sorc_Next(7909, 5276);
  276.  
  277. //Announce say commands
  278. if(announce_active)
  279. Say(announce_inf);
  280.  
  281. //Write command to file for other chars
  282. TD_File("NTBot/bots/TeamD.txt", 1, ".s3"); //infector
  283.  
  284. //Open infect seal
  285. if(!TD_InfectorSeal())
  286. {
  287. NTC_SendMsgToScript("NTBotGame.ntj", "Seal opening");
  288. return;
  289. }
  290.  
  291. //Sorc attack rotation infector seal.
  292. NTM_MoveTo(me.areaid, TPx, TPy);
  293. var _inf = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2853), 20);
  294. while (_inf && _inf.hp > 0 && _inf.mode != 0 && _inf.mode != 12)
  295. {
  296. NTC_CastSkill(59, NTC_HAND_RIGHT, _inf);
  297. while (me.GetSkillStatus(59) == 8)
  298. NTC_CastSkill(55, NTC_HAND_LEFT, _inf);
  299. NTC_CastSkill(42, NTC_HAND_LEFT, _inf);
  300. _inf = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2853), 50);
  301. }
  302. NTSI_PickItems();
  303.  
  304. NT_File("NTBot/bots/TeamD.txt", 1, ".s3d"); //Infector Dead
  305.  
  306. //Detect layout and move to next position
  307. if(TD_DetectLayout(2) == 1)
  308. TD_Sorc_Next(7776, 5230);
  309. else
  310. TD_Sorc_Next(7779, 5200);
  311.  
  312. //Announce say commands
  313. if(announce_active)
  314. Say(announce_seis);
  315.  
  316. //Write command to file for other chars
  317. TD_File("NTBot/bots/TeamD.txt", 1, ".s2"); //de seis
  318.  
  319. if(!TD_DeSeisSeal())
  320. {
  321. NTC_SendMsgToScript("NTBotGame.ntj", "Seal opening");
  322. return;
  323. }
  324.  
  325. //Sorc attack rotation DeSeis seals.
  326. NTM_MoveTo(me.areaid, TPx, TPy);
  327. var _Seis = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2852), 25);
  328. while(_Seis && _Seis.mode != 12)
  329. {
  330. NTA_ClearPosition(10);
  331. NTA_KillMonster(GetLocaleString(2852));
  332. NTSI_PickItems()
  333. }
  334.  
  335. NT_File("NTBot/bots/TeamD.txt", 1, ".s2d"); //De Seis Dead
  336.  
  337. //Sorc Leecher TP
  338. TD_MoveTo(me.areaid, 7763, 5267);
  339. TD_Deploy(7763, 5267, 0, 0, 10, 10);
  340. if(NTM_MakeTP())
  341. Say("Leech TP up")
  342. NTC_Delay(750);
  343.  
  344. NTP_DoPrecast(true);
  345.  
  346. if(!NTM_MoveTo(me.areaid, 7792, 5292))
  347. {
  348. NTC_SendMsgToScript("NTBotGame.ntj", "NTM_MoveTo()");
  349. return;
  350. }
  351.  
  352. NTM_MakeTP();
  353.  
  354. //Announce say commands
  355. if(announce_active)
  356. Say(announce_d);
  357.  
  358. d_spawn = true;
  359. TD_File("NTBot/bots/TeamD.txt", 1, ".d");
  360.  
  361. NTC_Delay(1500);
  362. NTC_FindUnit(NTC_UNIT_MONSTER, 243, 100);
  363. if(!NTA_KillMonster(243))
  364. {
  365. NTC_SendMsgToScript("NTBotGame.ntj", "NTA_KillMonster()");
  366. return;
  367. }
  368.  
  369. NTSI_PickItems();
  370. NTC_Delay(100);
  371. }
  372. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  373. // Main Team //
  374. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  375. function TD_TeamCommands()
  376. {
  377. var _msg = TD_File("NTBot/bots/TeamD.txt", 0);
  378.  
  379. if (_msg && _msg != _MyDT_PreMessage) {
  380. _MyDT_PreMessage = _msg;
  381.  
  382. switch (_msg.substring(_msg.indexOf("/") + 1)) {
  383. //{BO
  384. case ".bo":
  385. if(me.name == pally || me.name == pally2 || me.name == pally3 || me.name == zon || me.name == nec || me.name == sorc || me.name == leecher) { //Team's BO
  386. NTM_UsePortal("BluePortal", 107, leader);
  387. NTC_Delay(500);
  388. NTP_DoPrecast(true);
  389. NTC_Delay(3500);
  390. if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
  391. NTTM_CheckAct();
  392. }
  393. if(me.name == barb) { //Barbarian
  394. NTM_UsePortal("BluePortal", 107, leader);
  395. while(!me.GetState(32))
  396. NTP_DoPrecast(true);
  397. NTP_DoPrecast(true);
  398. if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
  399. NTTM_CheckAct();
  400. }
  401. break;
  402. //}
  403. //{vizier
  404. case ".s1":
  405. if(me.name == pally) { //Main Hammerdin
  406. NTM_UsePortal("BluePortal", 108, leader);
  407. TD_Preattack(GetLocaleString(2851), ham_viz);
  408. TD_KillViz();
  409. }
  410. if(me.name == pally2 || me.name == pally3) { //Helper Hammerdin
  411. NTM_UsePortal("BluePortal", 108, leader);
  412. TD_Preattack(GetLocaleString(2851), ham2_viz);
  413. TD_KillViz();
  414. }
  415. if(me.name == zon) { //Amazon
  416. NTM_UsePortal("BluePortal", 108, leader);
  417. //NTC_Delay(2000);
  418. TD_zonattack(GetLocaleString(2851), 1);
  419. TD_KillViz();
  420.  
  421. }
  422. if(me.name == nec) { //Necromancer
  423. NTM_UsePortal("BluePortal", 108, leader);
  424. TD_necattack(GetLocaleString(2851), 1);
  425. attackNec(2851);
  426. if(announce_active)
  427. Say(announce_vizd);
  428. if(pickit_seals)
  429. NTSI_PickItems();
  430. }
  431. if(me.name == sorc) { //Sorceress
  432. NTM_UsePortal("BluePortal", 108, leader);
  433. //NTC_Delay(2000);
  434. TD_sorcattack(GetLocaleString(2851), sorc_viz);
  435. TD_KillViz();
  436. }
  437. if(me.name == barb) { //Barbarian
  438. NTM_UsePortal("BluePortal", 108, leader);
  439. babaprecast();
  440. NTC_CastSkill(130, NTC_HAND_RIGHT);
  441. NTC_Delay(200);
  442. NTC_CastSkill(130, NTC_HAND_RIGHT);
  443. TD_Take_TP()
  444. }
  445. if(me.name == leecher) { //Passive Leecher
  446. NTM_UsePortal("BluePortal", 108, leader);
  447. }
  448. break;
  449. case ".s1d":
  450. if(me.name == pally || me.name == pally2 || me.name == pally3 || me.name == zon || me.name == nec || me.name == sorc || me.name == leecher)
  451. {
  452. if(announce_active)
  453. Say(announce_vizd);
  454. TD_Take_TP()
  455. }
  456. break;
  457. //{de seis
  458. case ".s2":
  459. if(me.name == pally) { //Main Hammerdin
  460. NTM_UsePortal("BluePortal", 108, leader);
  461. TD_Preattack(GetLocaleString(2852), ham_des);
  462. TD_KillSeis();
  463. }
  464. if(me.name == pally2 || me.name == pally3) { //Helper Hammerdin
  465. NTM_UsePortal("BluePortal", 108, leader);
  466. TD_Preattack(GetLocaleString(2852), ham2_des);
  467. TD_KillSeis();
  468. }
  469. if(me.name == zon) { //Amazon
  470. NTM_UsePortal("BluePortal", 108, leader);
  471. //NTC_Delay(2000);
  472. TD_zonattack(GetLocaleString(2852), 1);
  473. TD_KillSeis();
  474. }
  475. if(me.name == nec) { //Necromancer
  476. NTM_UsePortal("BluePortal", 108, leader);
  477. TD_necattack(GetLocaleString(2852), 1);
  478. attackNec(2852);
  479. if(announce_active)
  480. Say(announce_seisd);
  481. if(pickit_seals)
  482. NTSI_PickItems();
  483. }
  484. if(me.name == sorc) { //Sorceress
  485. NTM_UsePortal("BluePortal", 108, leader);
  486. //NTC_Delay(2000);
  487. TD_sorcattack(GetLocaleString(2852), sorc_des);
  488. TD_KillSeis();
  489. }
  490. if(me.name == barb){ //Barbarian
  491. NTM_UsePortal("BluePortal", 108, leader);
  492. babaprecast();
  493. preAttackBarbLeap(GetLocaleString(2852), leap_des);
  494. TD_KillSeis();
  495. }
  496. if(me.name == leecher) { //Passive Leecher
  497. NTM_UsePortal("BluePortal", 108, leader);
  498. }
  499. break;
  500. case ".s2d":
  501. if(me.name == pally || me.name == pally2 || me.name == pally3 || me.name == barb || me.name == zon || me.name == nec || me.name == sorc || me.name == leecher)
  502. {
  503. if(announce_active)
  504. Say(announce_seisd);
  505. TD_Take_TP()
  506. }
  507. break;
  508. //}
  509. //{infector
  510. case ".s3":
  511. if(me.name == pally) { //Main Hammerdin
  512. NTM_UsePortal("BluePortal", 108, leader);
  513. TD_Preattack(GetLocaleString(2853), ham_inf);
  514. TD_KillFect();
  515. }
  516. if(me.name == pally2 || me.name == pally3) { //Helper Hammerdin
  517. NTM_UsePortal("BluePortal", 108, leader);
  518. TD_Preattack(GetLocaleString(2853), ham2_inf);
  519. TD_KillFect();
  520. }
  521. if(me.name == zon) {//Amazon
  522. NTM_UsePortal("BluePortal", 108, leader);
  523. //NTC_Delay(2000);
  524. TD_zonattack(GetLocaleString(2853), 1);
  525. TD_KillFect();
  526. }
  527. if(me.name == nec) { //Necromancer
  528. NTM_UsePortal("BluePortal", 108, leader);
  529. TD_necattack(GetLocaleString(2853), 1);
  530. attackNec(2853);
  531. if(announce_active)
  532. Say(announce_infd);
  533. if(pickit_seals)
  534. NTSI_PickItems();
  535. }
  536. if(me.name == sorc) { //Sorceress
  537. NTM_UsePortal("BluePortal", 108, leader);
  538. //NTC_Delay(2000);
  539. TD_sorcattack(GetLocaleString(2853), sorc_inf);
  540. TD_KillFect();
  541. }
  542. if(me.name == barb){ //Barbarian
  543. NTM_UsePortal("BluePortal", 108, leader);
  544. babaprecast();
  545. preAttackBarbLeap(GetLocaleString(2853), leap_inf);
  546. TD_KillFect();
  547. }
  548. if(me.name == leecher) { //Passive Leecher
  549. NTM_UsePortal("BluePortal", 108, leader);
  550. }
  551. break;
  552. case ".s3d":
  553. if(me.name == pally || me.name == pally2 || me.name == pally3 || me.name == barb || me.name == zon || me.name == nec || me.name == sorc || me.name == leecher)
  554. {
  555. if(announce_active)
  556. Say(announce_infd);
  557. TD_Take_TP()
  558. }
  559. break;
  560. //}
  561. //{Diablo
  562. case ".d":
  563. if(me.name == pally) { //Main Hammerdin
  564. if(pally_Dia){
  565. NTM_UsePortal("BluePortal", 108, leader);
  566. NTC_FindUnit(NTC_UNIT_MONSTER, 243, 100);
  567. if(!TD_KillMonster(243)) {
  568. NTC_SendMsgToScript("NTBotGame.ntj", "TD_KillMonster()");
  569. return;
  570. }
  571. NTSI_PickItems();
  572. }
  573. }
  574. if(me.name == pally2 || me.name == pally3) { //Helper Hammerdin
  575. if(pally2_Dia){
  576. NTM_UsePortal("BluePortal", 108, leader);
  577. NTC_FindUnit(NTC_UNIT_MONSTER, 243, 100);
  578. if(!TD_KillMonster(243)) {
  579. NTC_SendMsgToScript("NTBotGame.ntj", "TD_KillMonster()");
  580. return;
  581. }
  582. NTSI_PickItems();
  583. }
  584. }
  585. if(me.name == zon) { //Amazon
  586. if(zon_Dia){
  587. NTM_UsePortal("BluePortal", 108, leader);
  588. NTC_FindUnit(NTC_UNIT_MONSTER, 243, 100);
  589. if(!TD_KillMonster(243)) {
  590. NTC_SendMsgToScript("NTBotGame.ntj", "TD_KillMonster()");
  591. return;
  592. }
  593. NTSI_PickItems();
  594. }
  595. }
  596. if(me.name == nec) { //Necromancer
  597. if(nec_Dia){
  598. NTM_UsePortal("BluePortal", 108, leader);
  599. NTC_FindUnit(NTC_UNIT_MONSTER, 243, 100);
  600. if(!TD_KillMonster(243)) {
  601. NTC_SendMsgToScript("NTBotGame.ntj", "TD_KillMonster()");
  602. return;
  603. }
  604. NTSI_PickItems();
  605. }
  606. }
  607. if(me.name == sorc) { //Sorceress
  608. if(sorc_Dia){
  609. NTM_UsePortal("BluePortal", 108, leader);
  610. NTC_FindUnit(NTC_UNIT_MONSTER, 243, 100);
  611. if(!TD_KillMonster(243)) {
  612. NTC_SendMsgToScript("NTBotGame.ntj", "TD_KillMonster()");
  613. return;
  614. }
  615. }
  616. }
  617. if(me.name == barb) { //Barbarian
  618. if(barb_Dia){
  619. NTM_UsePortal("BluePortal", 108, leader);
  620. if(tp_howl)
  621. NTC_CastSkill(130, NTC_HAND_RIGHT);
  622. if(tp_bo)
  623. NTP_DoPrecast(true);
  624. NTA_ClearPosition(20);
  625. var _diablo = NTC_FindUnit(NTC_UNIT_MONSTER, 243)
  626. while(_diablo && _diablo.hp > 0)
  627. {
  628. NTSI_PickItems();
  629. NTC_Delay(500);
  630. }
  631. }
  632. }
  633. if(me.name == leecher) { //Passive Leecher
  634. if(leech_Dia){
  635. NTM_UsePortal("BluePortal", 108, leader);
  636. }
  637. }
  638. break;
  639. //}
  640. }
  641. }
  642. }
  643. //----------------------------------------------//
  644. // SORC INTERNAL FUNCTIONS //
  645. //----------------------------------------------//
  646. //{
  647. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  648. // Move To Next //
  649. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  650. function TD_Sorc_Next(nextx, nexty)
  651. {
  652. TPx = nextx;
  653. TPy = nexty;
  654. TD_MoveTo(me.areaid, TPx, TPy);
  655. TD_Do_Tp();
  656. }
  657. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  658. // Create TP //
  659. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  660. function TD_Do_Tp()
  661. {
  662. for(var i = 0 ; i < 5 ; i++)
  663. {
  664. if(NTM_MakeTP())
  665. break;
  666. }
  667. }
  668. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  669. // Find Seal Layout //
  670. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  671. function TD_DetectLayout(seal)
  672. {
  673. switch(seal) {
  674. case 1:
  675. _sealpos = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);
  676. for(var i = 0 ; i < _sealpos.length ; i++) {
  677. if(_sealpos[i].id == 396) {
  678. if(_sealpos[i].roomy*5 + _sealpos[i].y == 5275)
  679. return 1;
  680. else
  681. return 2;
  682.  
  683. break;
  684. }
  685. }
  686. break;
  687. case 2:
  688. _sealpos = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);
  689. for(i = 0 ; i < _sealpos.length ; i++) {
  690. if(_sealpos[i].id == 394) {
  691. if(_sealpos[i].roomx*5 + _sealpos[i].x == 7773)
  692. return 1;
  693. else
  694. return 2;
  695.  
  696. break;
  697. }
  698. }
  699. break;
  700. case 3:
  701. _sealpos = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);
  702. for(i = 0 ; i < _sealpos.length ; i++) {
  703. if(_sealpos[i].id == 392) {
  704. if(_sealpos[i].roomx*5 + _sealpos[i].x == 7893)
  705. return 1;
  706. else
  707. return 2;
  708.  
  709. break;
  710. }
  711. }
  712. break;
  713. }
  714. }
  715. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  716. // Sorc Vizier Seal //
  717. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  718. function TD_VizierSeal()
  719. {
  720. for(var i = 0 ; i < 5 ; i++){
  721. NTM_MoveToPresetUnit(me.areaid, 2, 395);
  722. var _seal = NTC_FindUnit(NTC_UNIT_OBJECT, 395, 5);
  723. NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
  724.  
  725. NTC_Delay(350);
  726.  
  727. if(_seal.mode <= 0)
  728. NTM_MoveTo(me.areaid, safex, safey);
  729. else
  730. break;
  731.  
  732. NTC_Delay(250);
  733.  
  734. if(i == 4 && _seal.mode <= 0)
  735. return false;
  736. }
  737. for(i = 0 ; i < 5 ; i++){
  738. NTM_MoveToPresetUnit(me.areaid, 2, 396);
  739. _seal = NTC_FindUnit(NTC_UNIT_OBJECT, 396, 5);
  740. NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
  741.  
  742. NTC_Delay(350);
  743.  
  744. if(_seal.mode <= 0)
  745. NTM_MoveTo(me.areaid, safex, safey);
  746. else
  747. break;
  748.  
  749. NTC_Delay(250);
  750.  
  751. if(i == 4 && _seal.mode <= 0)
  752. return false;
  753. }
  754. return true;
  755. }
  756. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  757. // Sorc Seis Seal //
  758. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  759. function TD_DeSeisSeal()
  760. {
  761. for(var i = 0 ; i < 5 ; i++){
  762. NTM_MoveToPresetUnit(me.areaid, 2, 394);
  763. _seal = NTC_FindUnit(NTC_UNIT_OBJECT, 394, 5);
  764. NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
  765.  
  766. NTC_Delay(350);
  767.  
  768. if(_seal.mode <= 0)
  769. NTM_MoveTo(me.areaid, safex, safey);
  770. else
  771. break;
  772.  
  773. NTC_Delay(250);
  774.  
  775. if(i == 4 && _seal.mode <= 0)
  776. return false;
  777. }
  778. return true;
  779. }
  780. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  781. // Sorc Infector Seal //
  782. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  783. function TD_InfectorSeal()
  784. {
  785. for(var i = 0 ; i < 5 ; i++){
  786. NTM_MoveToPresetUnit(me.areaid, 2, 393);
  787. _seal = NTC_FindUnit(NTC_UNIT_OBJECT, 393, 5);
  788. NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
  789.  
  790. NTC_Delay(350);
  791.  
  792. if(_seal.mode <= 0)
  793. NTM_MoveTo(me.areaid, safex, safey);
  794. else
  795. break;
  796.  
  797. NTC_Delay(250);
  798.  
  799. if(i == 4 && _seal.mode <= 0)
  800. return false;
  801. }
  802. for(i = 0 ; i < 5 ; i++){
  803. NTM_MoveToPresetUnit(me.areaid, 2, 392);
  804. _seal = NTC_FindUnit(NTC_UNIT_OBJECT, 392, 5);
  805. NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
  806.  
  807. NTC_Delay(350);
  808.  
  809. if(_seal.mode <= 0)
  810. NTM_MoveTo(me.areaid, safex, safey);
  811. else
  812. break;
  813.  
  814. NTC_Delay(250);
  815.  
  816. if(i == 4 && _seal.mode <= 0)
  817. return false;
  818. }
  819. return true;
  820. }
  821. //}
  822. //----------------------------------------------//
  823. // TEAM INTERNAL FUNCTIONS //
  824. //----------------------------------------------//
  825. //{
  826. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  827. // Quit Functions //
  828. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  829. function quitfunc(msg, type)
  830. {
  831. if(msg.indexOf(leader) != -1 && (msg.indexOf("weaken") != -1 || msg.indexOf("timeout") != -1))
  832. {
  833. NTC_Delay(500);
  834. ExitGame();
  835. }
  836. /*Second Computer Setting
  837. if (msg.indexOf(leader) != -1 && msg.indexOf("Fect Up") != -1)
  838. TD_File("NTBot/bots/TeamD.txt", 1, ".s2", 50);
  839. if (msg.indexOf(leader) != -1 && msg.indexOf("Viz Up") != -1)
  840. TD_File("NTBot/bots/TeamD.txt", 1, ".s1", 50);
  841. if (msg.indexOf(leader) != -1 && msg.indexOf("Seis Up") != -1)
  842. TD_File("NTBot/bots/TeamD.txt", 1, ".s3", 50);
  843. if (msg.indexOf(leader) != -1 && msg.indexOf("Dia Out") != -1)
  844. TD_File("NTBot/bots/TeamD.txt", 1, ".d", 50);
  845. if (msg.indexOf(leader) != -1 && msg.indexOf("Leech Dia Up") != -1)
  846. TD_File("NTBot/bots/TeamD.txt", 1, ".filler", 50);
  847. if (msg.indexOf(leader) != -1 && msg.indexOf("BO") != -1)
  848. TD_File("NTBot/bots/TeamD.txt", 1, ".bo", 50);
  849. */
  850. else if(msg.indexOf(pally) != -1 && (msg.indexOf("weaken") != -1 || msg.indexOf("timeout") != -1))
  851. {
  852. left_pally = true;
  853. }
  854. else if(msg.indexOf(barb) != -1 && (msg.indexOf("weaken") != -1 || msg.indexOf("timeout") != -1))
  855. {
  856. left_barb = true;
  857. }
  858. //Chicken if both barb and pally have left
  859. if(left_barb == true && left_pally == true)
  860. {
  861. NTC_Delay(500);
  862. ExitGame();
  863. }
  864. }
  865. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  866. // Take TP //
  867. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  868. function TD_Take_TP()
  869. {
  870. if(own_tp)
  871. {
  872. NTTM_CheckAct();
  873. }
  874. else
  875. {
  876. if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
  877. NTTM_CheckAct();
  878. }
  879. }
  880. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  881. // Barb Pre-Cast //
  882. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  883. function babaprecast()
  884. {
  885. if(tp_howl)
  886. NTC_CastSkill(130, NTC_HAND_RIGHT);
  887. if(tp_bo)
  888. NTP_DoPrecast(true);
  889. }
  890. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  891. // Barb Pre-Leap //
  892. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  893. function preAttackBarbLeap(classid, extraLeap)
  894. {
  895. var preX = me.x;
  896. var preY = me.y;
  897.  
  898. var _boss;
  899. var _count = 0;
  900.  
  901. while (1)
  902. {
  903. if (NTC_CastSkill(132, NTC_HAND_RIGHT, me.x, me.y) && NTC_CastSkill(132, NTC_HAND_RIGHT, preX, preY))
  904. _count++;
  905.  
  906. _boss = NTC_FindUnit(NTC_UNIT_MONSTER, classid);
  907.  
  908. if (_boss || _count >= 10)
  909. break;
  910. }
  911. for(var i = 0 ; i < extraLeap ; i++)
  912. {
  913. _boss = NTC_FindUnit(NTC_UNIT_MONSTER, classid);
  914. if (_boss && _boss.hp > 0 && _boss.mode != 0 && _boss.mode != 12)
  915. NTC_CastSkill(154, NTC_HAND_RIGHT, preX, preY); // leap
  916. else
  917. break;
  918. }
  919.  
  920. return;
  921. }
  922. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  923. // Helpers Kill Viz //
  924. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  925. function TD_KillViz()
  926. {
  927. if(!boss_only)
  928. NTA_ClearPosition(10);
  929. if(TD_KillMonster(GetLocaleString(2851)))
  930. TD_File("NTBot/bots/TeamD.txt", 1, ".s1d"); //vizier dead
  931. if(pickit_seals)
  932. NTSI_PickItems();
  933. }
  934. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  935. // Helpers Kill Seis //
  936. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  937. function TD_KillSeis()
  938. {
  939. if(!boss_only)
  940. NTA_ClearPosition(10);
  941. if(TD_KillMonster(GetLocaleString(2852)))
  942. TD_File("NTBot/bots/TeamD.txt", 1, ".s2d"); //Seis dead
  943. if(pickit_seals)
  944. NTSI_PickItems();
  945. }
  946. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  947. // Helpers Kill Fect //
  948. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  949. function TD_KillFect()
  950. {
  951. if(!boss_only)
  952. NTA_ClearPosition(10);
  953. if(TD_KillMonster(GetLocaleString(2853)))
  954. TD_File("NTBot/bots/TeamD.txt", 1, ".s3d"); //Infector dead
  955. if(pickit_seals)
  956. NTSI_PickItems();
  957. }
  958. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  959. // Precast Hammers //
  960. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  961. function TD_Preattack(classid, extrahammers)
  962. {
  963. NTC_PutSkill(NTConfig_AttackSkill[4], NTC_HAND_RIGHT);
  964. while(!NTC_FindUnit(NTC_UNIT_MONSTER, classid))
  965. NTC_CastSkill(NTConfig_AttackSkill[3], 2);
  966. for(var i = 0 ; i < extrahammers ; i++) {
  967. NTC_CastSkill(NTConfig_AttackSkill[3], 2);
  968. }
  969. }
  970. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  971. // Precast Amazon //
  972. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  973. function TD_zonattack(classid, attacking)
  974. {
  975. while(!NTC_FindUnit(NTC_UNIT_MONSTER, classid))
  976. NTA_ClearPosition(10);
  977. for(var i = 0 ; i < attacking ; i++) {
  978. NTC_CastSkill(NTConfig_AttackSkill[0], 2);
  979. }
  980. }
  981. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  982. // Precast Sorc //
  983. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  984. function TD_sorcattack(classid, casting)
  985. {
  986. while(!NTC_FindUnit(NTC_UNIT_MONSTER, classid))
  987. NTC_CastSkill(NTConfig_AttackSkill[0], 2);
  988. for(var i = 0 ; i < casting ; i++) {
  989. NTC_CastSkill(NTConfig_AttackSkill[1], 2);
  990. }
  991. }
  992. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  993. // Nec Corpse Explosion //
  994. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  995. function attackNec(classid)
  996. {
  997. var _boss = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(classid), 120);
  998. Print("boss");
  999. while (_boss && _boss.hp > 0 && _boss.mode != 0 && _boss.mode != 12)
  1000. {
  1001. _count = MyUn_CountCorpse(_boss, 9);
  1002. (_count == 1) ? Say("!" + _count + " corpse.") : Say("!" + _count + " corpses.");
  1003. _count = MyUn_CountCorpse(_boss, 9);
  1004. if (_count == 0)
  1005. NTC_CastSkill(84, NTC_HAND_RIGHT, _boss);
  1006. else
  1007. NTC_CastSkill(74, NTC_HAND_RIGHT, _boss);
  1008. _boss = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(classid), 120);
  1009. }
  1010.  
  1011. return;
  1012. }
  1013. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1014. // Nec Count Corpses //
  1015. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1016. function MyUn_CountCorpse(target, range, count)
  1017. {
  1018. var _target;
  1019. var _nCorpse = 0;
  1020.  
  1021. if (arguments.length < 3)
  1022. count = -1;
  1023.  
  1024. _target = NTC_FindUnit(NTC_UNIT_MONSTER);
  1025. if (_target)
  1026. {
  1027. do
  1028. {
  1029. if (GetDistance(_target, target) <= range && MyUn_IsCorpse(_target, 0))
  1030. {
  1031. _nCorpse++;
  1032.  
  1033. if (count > -1 && _nCorpse >= count)
  1034. return _nCorpse;
  1035. }
  1036. } while (_target.GetNext());
  1037. }
  1038.  
  1039. return _nCorpse;
  1040. }
  1041. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1042. // Nec Find Corpses //
  1043. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1044. function MyUn_IsCorpse(unit, mode)
  1045. {
  1046. return ((unit.hp < 1 || unit.mode == 0 || unit.mode == 12) &&
  1047. !unit.GetState(1) &&
  1048. !unit.GetState(96) &&
  1049. !unit.GetState(99) &&
  1050. !unit.GetState(104) &&
  1051. !unit.GetState(107) &&
  1052. !unit.GetState(118) &&
  1053. GetBaseStat("monstats2.txt", unit.classid, (mode == 0) ? 95 : 97));
  1054. }
  1055. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1056. // Nec Precast //
  1057. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1058. function TD_necattack(classid, extraCurse)
  1059. {
  1060. var preX = me.x;
  1061. var preY = me.y;
  1062. var _boss;
  1063. var _count = 0;
  1064. while (1)
  1065. {
  1066. if (NTC_CastSkill(71, NTC_HAND_RIGHT, me.x, me.y)) //Dim Vis Precast
  1067. NTC_Delay(100);
  1068. _count++;
  1069. _boss = NTC_FindUnit(NTC_UNIT_MONSTER, classid);
  1070. if (_boss || _count >= 10)
  1071. break;
  1072. }
  1073. for(var i = 0 ; i < extraCurse ; i++)
  1074. {
  1075. _boss = NTC_FindUnit(NTC_UNIT_MONSTER, classid);
  1076. if (_boss && _boss.hp > 0 && _boss.mode != 0 && _boss.mode != 12)
  1077. NTC_CastSkill(66, NTC_HAND_RIGHT, preX, preY); // Amp Damage Seal Boss
  1078. else
  1079. break;
  1080. }
  1081.  
  1082. return;
  1083. }
  1084. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1085. // Find Our Pally //
  1086. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1087. function TD_PallyInParty()
  1088. {
  1089. var _player;
  1090.  
  1091. _player = GetPlayerUnit();
  1092.  
  1093. do {
  1094. if(_player.name == pally)
  1095. {
  1096. return true;
  1097. NTC_Delay(100);
  1098. }
  1099.  
  1100. } while(_player.GetNext());
  1101.  
  1102. return false;
  1103. }
  1104. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1105. // Players in Town? //
  1106. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1107. function TD_IsPlayerOut(area) { //
  1108. var _player;
  1109. var _myPartyId;
  1110.  
  1111. _player = GetPlayerUnit();
  1112. _myPartyId = _player.partyid;
  1113.  
  1114. if(arguments.length < 1)
  1115. _area = me.areaid;
  1116. else
  1117. _area = area;
  1118.  
  1119. do {
  1120. if(_player.name == pally || _player.name == barb)
  1121. {
  1122. if(_player.areaid == _area && _myPartyId == _player.partyid)
  1123. return false;
  1124.  
  1125. NTC_Delay(100);
  1126. }
  1127.  
  1128. } while(_player.GetNext());
  1129.  
  1130. return true;
  1131. }
  1132. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1133. // Find TD File //
  1134. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1135. function TD_File(path, mode, msg, delay) {
  1136. var _msg = "";
  1137. var _line = "";
  1138. var _fileHandle;
  1139. var _isFileCheck = false;
  1140.  
  1141. if (arguments.length < 3) msg = "";
  1142. if (arguments.length < 4) delay = (mode > 0) ? 5 : 2;
  1143.  
  1144. while (delay--) {
  1145. if (mode == 2 && !_isFileCheck) {
  1146. _fileHandle = FileOpen(path, 0);
  1147. if (!_fileHandle)
  1148. _fileHandle = FileOpen(path, 1);
  1149.  
  1150. if (_fileHandle)
  1151. _fileHandle.Close();
  1152.  
  1153. _isFileCheck = true;
  1154. }
  1155.  
  1156. _fileHandle = FileOpen(path, mode);
  1157. if (_fileHandle)
  1158. break;
  1159.  
  1160. if (delay)
  1161. Delay(200);
  1162. }
  1163.  
  1164. if (_fileHandle) {
  1165. if (mode == 0) {
  1166. while (!_fileHandle.eof) {
  1167. _line = _fileHandle.ReadLine();
  1168. if (_line || !_fileHandle.eof)
  1169. _msg += _line + msg;
  1170. }
  1171. }
  1172. else if (msg)
  1173. _fileHandle.WriteLine(msg);
  1174.  
  1175. _fileHandle.Close();
  1176. }
  1177.  
  1178. return _msg;
  1179. }
  1180. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1181. // Walk Functions //
  1182. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1183. function TD_MoveTo(areaid, x, y, retry, clearpath)
  1184. {
  1185. var i, n;
  1186. var _teleport;
  1187. var _path;
  1188. var _retry = 0;
  1189.  
  1190. if(x == me.x && y == me.y)
  1191. return true;
  1192.  
  1193. if(arguments.length < 4)
  1194. retry = 3;
  1195.  
  1196. if(arguments.length < 5)
  1197. clearpath = false;
  1198.  
  1199. if(NTC_InTown() || NTC_GetSkillLevel(54) < 1)
  1200. _teleport = false;
  1201. else
  1202. _teleport = true;
  1203.  
  1204. _path = GetPath(areaid, me.x, me.y, x, y, _teleport);
  1205.  
  1206. if(!_path)
  1207. return false;
  1208.  
  1209. for(i = 0 ; i < _path.length ; i++)
  1210. {
  1211. for(n = 0 ; n < 2 ; n++)
  1212. {
  1213. if(_teleport)
  1214. {
  1215. if(NTM_TeleportTo(_path[i][0], _path[i][1])){
  1216. break;
  1217. }
  1218. }
  1219. else
  1220. {
  1221. if(NTM_WalkTo(_path[i][0], _path[i][1]))
  1222. break;
  1223. }
  1224. }
  1225.  
  1226. if(n < 2)
  1227. {
  1228. if(clearpath)
  1229. {
  1230. if(!NTA_ClearPosition(20, true, 2))
  1231. return false;
  1232.  
  1233. NTP_DoPrecast(false);
  1234.  
  1235. NTM_MoveTo(me.areaid, _path[i][0], _path[i][1], 1);
  1236. }
  1237. }
  1238. else if(_retry < retry)
  1239. {
  1240. _path = GetPath(areaid, me.x, me.y, x, y, _teleport);
  1241.  
  1242. if(!_path)
  1243. return false;
  1244.  
  1245. i = -1;
  1246. _retry++;
  1247. }
  1248. else
  1249. return false;
  1250. }
  1251.  
  1252. return true;
  1253. }
  1254. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1255. // Kill Monster //
  1256. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  1257. function TD_KillMonster(classid)
  1258. {
  1259. //}
  1260. var _target;
  1261.  
  1262. if(NTConfig_AttackSkill[1] < 1)
  1263. return false;
  1264.  
  1265. _target = NTC_FindUnit(NTC_UNIT_MONSTER, classid, 5);
  1266.  
  1267. if(!_target)
  1268. return false;
  1269.  
  1270. if(_target.IsAttackable())
  1271. {
  1272. var _attackcount = 0;
  1273.  
  1274. while(_attackcount < 300 && NTA_IsValidMonster(_target))
  1275. {
  1276. if(NTA_Attack(_target, (_attackcount%30) == 0) < 2)
  1277. break;
  1278.  
  1279. if((_attackcount%10) == 5)
  1280. NTM_MoveTo(me.areaid, _target.x+5, _target.y);
  1281. else if((_attackcount%10) == 0)
  1282. NTM_MoveTo(me.areaid, _target.x, _target.y+5);
  1283.  
  1284. _attackcount++;
  1285. }
  1286. }
  1287.  
  1288. return (_target.hp <= 0 || _target.mode == 0 || _target.mode == 12);
  1289. }
Add Comment
Please, Sign In to add comment