Advertisement
Guest User

NTChaosSanctuary.ntj

a guest
Jul 13th, 2013
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Chaos Sanctuary Script Modified by SavSin @ Clan ChX v1.0.1
  2. //
  3. // Modifications:
  4. // Full support with modified *Passive Leech Script*
  5. // Added Custom Leech Commands.
  6. // Fixed Final Seal pop.
  7. // Added New Vars
  8. // Allows reverse Chaos (Infect, Desis, Vizor)
  9. // Added Giving waypoint at begining of round.
  10. //
  11. //
  12. // New Vars
  13. // NTConfig_CS_LeechSupTP - Text to bring leecher into the portal.
  14. // NTConfig_CS_LeechTown - Text to send leecher back to town.
  15. // NTConfig_CS_DiabloTP - Text to tell the leecher diablo's ready (hides leecher).
  16. // NTConfig_CS_DiabloDead - Tells leecher diablo is dead and will go to star to loot.
  17. // NTConfig_CS_DiabloText - Text Displayed to all for announcing Diablo is ready. (Must be different than NTConfig_CS_DiabloTP)
  18. // NTConfig_CS_GiveWaypoint - Gives the WP at the start of the run then Precasts and starts run.
  19.  
  20. // How to use Passive Leech Support
  21. // NTConfig_LeechSupport must be set to TRUE
  22. // Configure the above new vars to your liking.
  23. // The bot will automatically make the TP's and send the commands as you have configed.
  24.  
  25.  
  26. function NTMain() {
  27. Include("libs/common/NTCommon.ntl");
  28. NTC_IncludeLibs();
  29. NTC_IncludeConfig("NTBot/char_configs");
  30. NT_LoadConfig();
  31. NTSI_LoadNIPFiles("NTBot/item_configs");
  32. NTA_Initialize();
  33.  
  34. if(!NTTM_CheckAct()){
  35. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
  36. return;
  37. }
  38. NTTMGR_TownManager();
  39. if(!NTTM_TownMove("waypoint")){
  40. NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
  41. return;
  42. }
  43. if(!NTM_TakeWaypoint(107)){
  44. NTC_SendMsgToScript("NTBotGame.ntj", "NTM_TakeWaypoint()");
  45. return;
  46. }
  47.  
  48. if(NTConfig_CS_GiveWaypoint)
  49. {
  50. PubTP();
  51. PubSay("Waypoint Up");
  52. }
  53.  
  54. NTP_DoPrecast(true);
  55.  
  56. if (!NTM_MoveTo(108, 7790, 5544)) {
  57. NTC_SendMsgToScript("NTBotGame.ntj", "NTM_MoveTo()");
  58. return;
  59. }
  60.  
  61. if(NTConfig_EvenFasterChaos){ // makes the addition of EvenFasterChaos a little bit easier.
  62. NTConfig_FastChaos = true;
  63. }
  64.  
  65. if (!NTConfig_FastChaos) {
  66. if (NTConfig_Entrance) {
  67. NTCS_ClearPosition(30, EntranceSort);
  68. NTM_MoveTo(108, 7790, 5544);
  69. PubTP();
  70. PubSay(NTConfig_CS_EntranceTP);
  71. BO_Party();
  72. NTCS_ClearPosition(30, EntranceSort);
  73. var FrontToStarX = [7792,7794,7791,7777,7813,7769,7782,7802,7819,7768,7770,7791,7819, 7804];
  74. var FrontToStarY = [5564,5529,5495,5486,5486,5445,5421,5421,5446,5390,5355,5355,5376, 5340];
  75. for (var i = 0; i < FrontToStarX.length; i += 1) {
  76. NTM_MoveTo(108, FrontToStarX[i], FrontToStarY[i]);
  77. NTCS_ClearPosition(35, EntranceSort);
  78. }
  79. }
  80. for (i = 0; i < 2; i += 1) {
  81. NTM_MoveTo(108, 7784, 5310);
  82. NTCS_ClearPosition(30, SealSort);
  83. NTC_PingDelay(i < 1 ? 1000 : 10);
  84. }
  85. PubTP();
  86. PubSay(NTConfig_CS_StarTP);
  87. BO_Party();
  88. NTCS_ClearPosition(30, SealSort);
  89. } else {
  90. NTM_MoveTo(108, 7784, 5310);
  91. NTCS_ClearPosition(20, DistanceSort);
  92. PubTP();
  93. }
  94.  
  95. if(NTConfig_CS_ReverseCS)
  96. {
  97. if(!NT_OpenSealsIntReverse())
  98. {
  99. NTC_SendMsgToScript("NTBotGame.ntj", "NT_OpenSealsIntReverse()");
  100. return;
  101. }
  102. }
  103. else
  104. {
  105. if (!NT_OpenSealsInt())
  106. {
  107. NTC_SendMsgToScript("NTBotGame.ntj", "NT_OpenSealsInt()");
  108. return;
  109. }
  110. }
  111.  
  112. PubSay(NTConfig_CS_DiabloText);
  113.  
  114. if (NTConfig_LeechSupport)
  115. {
  116. NTM_MoveTo(108, 7760, 5267);
  117. PubTP();
  118. PubSay(NTConfig_CS_DiabloTP);
  119. }
  120.  
  121. NTM_MoveTo(108, 7792, 5291);
  122. for (i = 0; i < 200; i += 1) {
  123. if (GetUnit(NTC_UNIT_MONSTER, 243)) {
  124. break;
  125. }
  126. NTC_Delay(500);
  127. }
  128. if (!NTA_KillMonster(243)) {
  129. NTC_SendMsgToScript("NTBotGame.ntj", "NTA_KillMonster()");
  130. return;
  131. }
  132.  
  133. NTSI_PickItems();
  134.  
  135. if (NTConfig_LeechSupport)
  136. {
  137. PubSay(NTConfig_CS_DiabloDead);
  138. }
  139.  
  140. if (NTConfig_CS_NextGame != "") PubSay(NTConfig_CS_NextGame + NTC_GetNextGame());
  141. NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
  142. }
  143.  
  144. function NT_OpenSealsInt() {
  145. var _unit;
  146. var _result;
  147.  
  148. _unit = GetPresetUnits(108, NTC_UNIT_OBJECT, 396);
  149.  
  150. if (!_unit) {
  151. return false;
  152. }
  153. if (_unit[0].roomy * 5 + _unit[0].y == 5275) {
  154. _result = NT_OpenVizierSealInt(1);
  155. } else {
  156. _result = NT_OpenVizierSealInt(2);
  157. }
  158. if (!NTConfig_FastChaos) {
  159. NTP_DoPrecast(true);
  160. }
  161. _unit = GetPresetUnits(108, NTC_UNIT_OBJECT, 394);
  162. if (_unit[0].roomx * 5 + _unit[0].x == 7773) {
  163. _result = NT_OpenDeSeisSealInt(1);
  164. } else {
  165. _result = NT_OpenDeSeisSealInt(2);
  166. }
  167. if (!_result) {
  168. return false;
  169. }
  170. if (!NTConfig_FastChaos) {
  171. PubTP();
  172. BO_Party();
  173. NTCS_ClearPosition(40, SealSortB);
  174. }
  175. _unit = GetPresetUnits(108, NTC_UNIT_OBJECT, 392);
  176. if (!_unit) {
  177. return false;
  178. }
  179. if (_unit[0].roomx * 5 + _unit[0].x == 7893) {
  180. _result = NT_OpenVenomSealInt(1);
  181. } else {
  182. _result = NT_OpenVenomSealInt(2);
  183. }
  184. NTP_DoPrecast(true);
  185. return _result;
  186. }
  187.  
  188. function NT_OpenSealsIntReverse() {
  189. var _unit;
  190. var _result;
  191.  
  192. _unit = GetPresetUnits(108, NTC_UNIT_OBJECT, 392);
  193. if (!_unit) {
  194. return false;
  195. }
  196. if (_unit[0].roomx * 5 + _unit[0].x == 7893) {
  197. _result = NT_OpenVenomSealInt(1);
  198. } else {
  199. _result = NT_OpenVenomSealInt(2);
  200. }
  201. NTP_DoPrecast(true);
  202.  
  203. _unit = GetPresetUnits(108, NTC_UNIT_OBJECT, 394);
  204. if (_unit[0].roomx * 5 + _unit[0].x == 7773) {
  205. _result = NT_OpenDeSeisSealInt(1);
  206. } else {
  207. _result = NT_OpenDeSeisSealInt(2);
  208. }
  209. if (!_result) {
  210. return false;
  211. }
  212.  
  213. _unit = GetPresetUnits(108, NTC_UNIT_OBJECT, 396);
  214. if (!_unit) {
  215. return false;
  216. }
  217. if (_unit[0].roomy * 5 + _unit[0].y == 5275) {
  218. _result = NT_OpenVizierSealInt(1);
  219. } else {
  220. _result = NT_OpenVizierSealInt(2);
  221. }
  222. if (!NTConfig_FastChaos) {
  223. NTP_DoPrecast(true);
  224. }
  225.  
  226. return _result;
  227. }
  228.  
  229. function NT_OpenVizierSealInt(type) {
  230. var i;
  231.  
  232. if (!NTConfig_FastChaos) {
  233. if (type === 1) {
  234. var vx = [7767,7756,7744,7747,7750,7741,7729,7720,7720,7721,7719,7712,7700,7687,7676, 7666];
  235. var vy = [5292,5284,5275,5290,5303,5310,5314,5312,5301,5288,5273,5292,5294,5294,5292, 5307];
  236. }
  237. else
  238. {
  239. var vx = [7768,7755,7741,7733,7723,7714,7707,7680,7666, 7655];
  240. var vy = [5289,5295,5282,5291,5300,5282,5315,5310,5311, 5282];
  241. }
  242. for (i = 0; i < vx.length; i += 1) {
  243. NTM_MoveTo(108, vx[i], vy[i]);
  244. NTCS_ClearPosition(30, SealSort);
  245. }
  246. }
  247. if (NTConfig_LeechSupport)
  248. {
  249. if (type === 1)
  250. {
  251. NTM_MoveTo(108, 7672, 5283);
  252. NTCS_ClearPosition(25, DistanceSort);
  253. NTM_MoveTo(108, 7649, 5269);
  254. NTCS_ClearPosition(25, DistanceSort);
  255. }
  256. else
  257. {
  258. NTM_MoveTo(108, 7654, 5295);
  259. NTCS_ClearPosition(25, DistanceSort);
  260. NTM_MoveTo(108, 7647, 5274);
  261. NTCS_ClearPosition(25, DistanceSort);
  262. }
  263. PubTP();
  264. PubSay(NTConfig_CS_LeechSupTP);
  265. }
  266. if (!NT_OpenSealInt(396))
  267. {
  268. return false;
  269. }
  270. if (type == 1) {
  271. NTM_MoveTo(108, 7691, 5292);
  272. } else {
  273. NTM_MoveTo(108, 7695, 5316);
  274. }
  275.  
  276. NTCS_Preattack(GetLocaleString(2851));
  277.  
  278. if(!NTConfig_EvenFasterChaos)
  279. {
  280. NTCS_ClearPosition(40, DistanceSort, NTConfig_FastChaos && !NTConfig_LeechSupport ? 0x10 : null, NTConfig_FastChaos && !NTConfig_LeechSupport ? 306 : null);
  281. }
  282.  
  283. NTA_KillMonster(GetLocaleString(2851)); // Grand Vizier of Chaos
  284.  
  285. if(!NTConfig_EvenFasterChaos)
  286. {
  287. NTCS_ClearPosition(40, DistanceSort, NTConfig_FastChaos && !NTConfig_LeechSupport ? 0x10 : null, NTConfig_FastChaos && !NTConfig_LeechSupport ? 306 : null);
  288. }
  289.  
  290. if(!NT_OpenSealInt(395))
  291. return false;
  292.  
  293. if(NTConfig_LeechSupport)
  294. {
  295. PubSay(NTConfig_CS_LeechTown);
  296. }
  297. else
  298. {
  299. PubSay("Vizier dead.");
  300. }
  301.  
  302. if(NTConfig_IdInField){
  303. NT_FieldID();
  304. } return true;
  305. }
  306.  
  307. function NT_OpenDeSeisSealInt(type) {
  308. var i, n;
  309.  
  310. if (!NTConfig_FastChaos) {
  311. if (type === 1) {
  312. var sx = [7791,7783,7800,7809,7785,7773,7773,7776,7794,7811,7817,7815,7798]; // Shape of "2"
  313. var sy = [5265,5256,5247,5232,5230,5222,5212,5194,5194,5193,5177,5157,5155];
  314. } else {
  315. var sx = [7786,7801,7786,7787,7810,7811,7810,7790,7774,7773,7794]; // shape of an "S" or "5"
  316. var sy = [5263,5249,5245,5227,5233,5215,5198,5194,5181,5156,5154];
  317. }
  318. for (var i = 0; i < sx.length; i += 1) {
  319. NTM_MoveTo(108, sx[i], sy[i]);
  320. NTCS_ClearPosition(30, type === 1 ? SealSort : SealSortB);
  321. }
  322. }
  323. if (NTConfig_LeechSupport) {
  324. if (type === 1) {
  325. NTM_MoveTo(108, 7794, 5155);
  326. NTCS_ClearPosition(25, DistanceSort);
  327. NTM_MoveTo(108, 7777, 5155);
  328. NTCS_ClearPosition(25, DistanceSort);
  329. } else {
  330. NTM_MoveTo(108, 7785, 5154);
  331. NTCS_ClearPosition(25, DistanceSort);
  332. NTM_MoveTo(108, 7811, 5155);
  333. NTCS_ClearPosition(25, DistanceSort);
  334. }
  335. PubTP();
  336. PubSay(NTConfig_CS_LeechSupTP);
  337. }
  338. if (!NT_OpenSealInt(394)) {
  339. return false;
  340. }
  341. if (type == 1) {
  342. NTM_MoveTo(108, 7797, 5201);
  343. for (i = 0; i < 3; i += 1) {
  344. NTM_TeleportTo(7794, 5227);
  345. }
  346. } else {
  347. NTM_MoveTo(108, 7798, 5186);
  348. }
  349.  
  350. NTCS_Preattack(GetLocaleString(2852));
  351. if(!NTConfig_EvenFasterChaos){
  352. NTCS_ClearPosition(40, DistanceSort, NTConfig_FastChaos && !NTConfig_LeechSupport ? 0x10 : null, NTConfig_FastChaos && !NTConfig_LeechSupport ? 310 : null);
  353. }
  354. NTA_KillMonster(GetLocaleString(2852)); // Lord De Seis
  355. if(!NTConfig_EvenFasterChaos){
  356. NTCS_ClearPosition(40, DistanceSort, NTConfig_FastChaos && !NTConfig_LeechSupport ? 0x10 : null, NTConfig_FastChaos && !NTConfig_LeechSupport ? 310 : null);
  357. }
  358.  
  359. if(NTConfig_LeechSupport)
  360. {
  361. PubSay(NTConfig_CS_LeechTown);
  362. }
  363. else
  364. {
  365. PubSay("De Seis dead.");
  366. }
  367.  
  368. if(NTConfig_IdInField){
  369. NT_FieldID();
  370. } return NTM_MoveTo(108, 7800, 5255);
  371. }
  372.  
  373. function NT_OpenVenomSealInt(type) {
  374. if (!NTConfig_FastChaos) {
  375. if (type === 1) {
  376. var IX = [7825,7827,7834,7845,7855,7852,7875,7896,7917]; // shape of a "t"
  377. var IY = [5293,5276,5291,5315,5301,5278,5293,5295,5291];
  378. } else {
  379. var IX = [7822,7826,7832,7850,7868,7877,7891,7907,7927,7932]; // looks like a hook
  380. var IY = [5297,5278,5307,5278,5297,5276,5276,5276,5279,5298];
  381. }
  382. for (var i = 0; i < IX.length; i += 1) {
  383. NTM_MoveTo(108, IX[i], IY[i]);
  384. NTCS_ClearPosition(30, type === 1 ? SealSort : SealSortB);
  385. }
  386. }
  387. if(NTConfig_LeechSupport) {
  388. if (type === 1) {
  389. NTM_MoveTo(108, 7898, 5296);
  390. NTCS_ClearPosition(25, DistanceSort);
  391. NTM_MoveTo(108, 7892, 5321);
  392. NTCS_ClearPosition(25, DistanceSort);
  393. } else {
  394. NTM_MoveTo(108, 7933, 5302);
  395. NTCS_ClearPosition(25, DistanceSort);
  396. NTM_MoveTo(108, 7909, 5313);
  397. NTCS_ClearPosition(25, DistanceSort);
  398. }
  399. PubTP();
  400. PubSay(NTConfig_CS_LeechSupTP);
  401. }
  402. if (!NT_OpenSealInt(392))
  403. {
  404. return false;
  405. }
  406. if (type === 1)
  407. {
  408. type = 1; // temp
  409. } else
  410. {
  411. NTM_MoveTo(108, 7933, 5299);
  412. }
  413.  
  414. NTCS_Preattack(GetLocaleString(2853));
  415. if(!NTConfig_EvenFasterChaos){
  416. NTCS_ClearPosition(40, DistanceSort, NTConfig_FastChaos && !NTConfig_LeechSupport ? 0x10 : null, NTConfig_FastChaos && !NTConfig_LeechSupport ? 362 : null);
  417. }
  418. NTA_KillMonster(GetLocaleString(2853)); // Infector of Souls
  419. if(!NTConfig_EvenFasterChaos){
  420. NTCS_ClearPosition(40, DistanceSort, NTConfig_FastChaos && !NTConfig_LeechSupport ? 0x10 : null, NTConfig_FastChaos && !NTConfig_LeechSupport ? 362 : null);
  421. }
  422.  
  423. if(NTConfig_LeechSupport)
  424. {
  425. PubSay(NTConfig_CS_LeechTown);
  426. }
  427. else
  428. {
  429. PubSay("Infector Dead!");
  430. }
  431.  
  432. if(!NT_OpenSealInt(393))
  433. return false;
  434.  
  435. if(NTConfig_IdInField){
  436. NT_FieldID();
  437. }
  438. if (NTC_PutSkill(124, NTC_HAND_RIGHT)) {
  439. NTC_PingDelay(1000);
  440. } return true;
  441. }
  442.  
  443. function NT_OpenSealInt(classid) {
  444. var warn;
  445. switch (classid) {
  446. case 396:
  447. case 394:
  448. case 392:
  449. warn = true;
  450. break;
  451. default:
  452. warn = false;
  453. break;
  454. }
  455. var i, seal;
  456. for (i = 0; i < 5; i += 1) {
  457. NTM_MoveToPresetUnit(108, 2, classid, classid === 394 ? 5 : 2, classid === 394 ? 5 : 0);
  458. seal = NTC_FindUnit(NTC_UNIT_OBJECT, classid);
  459. if (!seal) {
  460. return false;
  461. }
  462. if (seal.mode) { // for pubbies
  463. if (warn) {
  464. PubSay(NTConfig_CS_SealBasher);
  465. }
  466. return true;
  467. }
  468. warn = false;
  469. NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, seal);
  470. NTC_Delay(classid === 394 ? 1000 : 500);
  471.  
  472. if (!seal.mode) {
  473. if (classid === 394 && CheckCollision(seal.x + 15, seal.y)) { // de seis optimization
  474. NTM_MoveTo(108, seal.x + 15, seal.y);
  475. } else {
  476. NTM_MoveTo(108, seal.x - 5, seal.y - 5);
  477. }
  478. NTC_Delay(500);
  479. } else {
  480. return true;
  481. }
  482. } return false;
  483. }
  484.  
  485. function BO_Party() {
  486. if (NTConfig_PublicMode) {
  487. NTC_Delay(1000);
  488. }
  489. NTP_DoPrecast(true);
  490. }
  491.  
  492. function NTC_GetNextGame() { // move this to ntc
  493. function Pad(num) {
  494. if (num < 10) {
  495. num = 0 + "" + num;
  496. }
  497. return num;
  498. }
  499. var i, result, number,
  500. game = me.gamename;
  501. for (i = game.length - 1; i > -1; i -= 1) {
  502. if (isNaN(game[i])) {
  503. break;
  504. }
  505. }
  506. result = game.substring(0, i + 1);
  507. number = parseInt(game.substring(i + 1), 10) === 99 ? 0 : (parseInt(game.substring(i + 1), 10) + 1); // 99 correction
  508. result += Pad(number);
  509. return result;
  510. }
  511.  
  512. function NTA_MonsterStats(unit) {
  513. this.name = unit.name;
  514. this.x = unit.x;
  515. this.y = unit.y;
  516. this.gid = unit.gid;
  517. this.classid = unit.classid;
  518. this.spectype = unit.spectype;
  519. }
  520.  
  521. function DistanceSort(unitA, unitB) {
  522. if (GetDistance(me.x, me.y, unitA.x, unitA.y) < GetDistance(me.x, me.y, unitB.x, unitB.y)) {
  523. return -1;
  524. }
  525. return 1;
  526. }
  527.  
  528. function EntranceSort(unitA, unitB) {
  529. if (GetDistance(unitA.x, unitA.y, 7790, 5544) < GetDistance(unitB.x, unitB.y, 7790, 5544)) {
  530. return -1;
  531. }
  532. return 1;
  533. }
  534.  
  535. function SealSort(unitA, unitB) {
  536. if (GetDistance(unitA.x, unitA.y, 7784, 5310) < GetDistance(unitB.x, unitB.y, 7784, 5310)) {
  537. return -1;
  538. }
  539. return 1;
  540. }
  541.  
  542. function SealSortB(unitA, unitB) {
  543. if (GetDistance(unitA.x, unitA.y, 7800, 5255) < GetDistance(unitB.x, unitB.y, 7800, 5255)) {
  544. return -1;
  545. }
  546. return 1;
  547. }
  548.  
  549. function NTCS_Preattack(name) {
  550. var i, n, target, pos, positions;
  551.  
  552. target = NTC_FindUnit(1, name, 10);
  553.  
  554. switch (me.classid) {
  555. case 0:
  556. break;
  557. case 1:
  558. break;
  559. case 2:
  560. break;
  561. case 3:
  562. if (!target) {
  563. return;
  564. }
  565. positions = [[6, 11], [0, 8], [8, -1], [-9, 2], [0, -11], [8, -8]];
  566. for (i = 0; i < positions.length; i += 1) {
  567. if (CheckCollision(me.areaid, target.x + positions[i][0], target.y + positions[i][1], 1)) { // check if we can move there
  568. NTM_MoveTo(108, target.x + positions[i][0], target.y + positions[i][1]);
  569. NTC_PutSkill(NTConfig_AttackSkill[2], NTC_HAND_RIGHT);
  570. for (n = 0; n < 8; n += 1) {
  571. NTC_CastSkill(NTConfig_AttackSkill[1], 2);
  572. }
  573. break;
  574. }
  575. }
  576. break;
  577. case 4:
  578. if (!target || NTConfig_AttackSkill[0] < 0) {
  579. return;
  580. }
  581. pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, 20, 4);
  582. if (pos) {
  583. NTM_MoveTo(108, pos[0], pos[1]);
  584. }
  585. for (i = 0; i < 2; i += 1) {
  586. NTC_CastSkill(130, NTC_HAND_RIGHT);
  587. NTC_Delay(150);
  588. }
  589. break;
  590. case 5:
  591. break;
  592. case 6:
  593. break;
  594. }
  595. }
  596.  
  597. function PubTP() {
  598. if (NTConfig_PublicMode) {
  599. NTM_MakeTP();
  600. }
  601. }
  602.  
  603. function PubSay(string) {
  604. if (NTConfig_PublicMode) {
  605. Say(string);
  606. }
  607. }
  608.  
  609. function OpenStashes(range) {
  610. var i, unit,
  611. objects = [GetLocaleString(3274)],
  612. orgx = me.x,
  613. orgy = me.y;
  614.  
  615. for (i = 0; i < objects.length; i += 1) {
  616. unit = NTC_FindUnit(NTC_UNIT_OBJECT, objects[i]);
  617. if (unit) {
  618. do {
  619. if (GetDistance(orgx, orgy, unit.x, unit.y) <= range) {
  620. if (NTC_OpenChest(unit)) {
  621. NTSI_PickItems();
  622. }
  623. }
  624. } while (unit.GetNext());
  625. }
  626. }
  627. }
  628.  
  629. function NTT_CheckPotionSafe() {
  630. var i, items, hpCheck, mpCheck;
  631. items = me.GetItems();
  632. if (NTConfig_BeltColType.indexOf("hp") > -1) {
  633. for (i = 0; i < items.length; i += 1) {
  634. if (!hpCheck && items[i].mode === 2 && items[i].code.indexOf("hp") > -1) {
  635. hpCheck = true;
  636. }
  637. }
  638. } else {
  639. hpCheck = true;
  640. }
  641. if (NTConfig_BeltColType.indexOf("mp") > -1) {
  642. for (i = 0; i < items.length; i += 1) {
  643. if (!mpCheck && items[i].mode === 2 && items[i].code.indexOf("mp") > -1) {
  644. mpCheck = true;
  645. }
  646. }
  647. } else {
  648. mpCheck = true;
  649. }
  650. return !(hpCheck && mpCheck);
  651. }
  652.  
  653. function NTA_Dodge(target, distance) {
  654. var i, j, coordx, coordy, monster, count,
  655. maxcount = 999,
  656. coords = [],
  657. goodCoords = [],
  658. monList = [],
  659. angles = [45, 90, 135, 180, 225, 270, 305, 360];
  660. for (i = 0; i < angles.length; i += 1) {
  661. coordx = Math.round((Math.cos(angles[i] * Math.PI / 180)) * distance + target.x);
  662. coordy = Math.round((Math.sin(angles[i] * Math.PI / 180)) * distance + target.y);
  663. if (CheckCollision(me.areaid, coordx, coordy, 1)) {
  664. coords.push([coordx, coordy]);
  665. }
  666. }
  667. if (coords.length === 0) { // no valid positions - don't move
  668. return true;
  669. }
  670. coords.sort(NTA_SortRooms);
  671. monster = GetUnit(1);
  672. if (monster) {
  673. do {
  674. if (monster.hp > 0) {
  675. monList.push(new NTA_MonsterStats(target));
  676. }
  677. } while (monster.GetNext());
  678. }
  679. for (i = 0; i < coords.length; i += 1) {
  680. count = 0;
  681. for (j = 0; j < monList.length; j += 1) {
  682. if (monList[j].hp > 0 && GetDistance(monList[j].x, monList[j].y, coords[i][0], coords[i][1]) < 10) {
  683. count += 1;
  684. }
  685. }
  686. if (count < maxcount) {
  687. goodCoords = [coords[i][0], coords[i][1]];
  688. maxcount = count;
  689. if (count === 0) {
  690. break;
  691. }
  692. }
  693. }
  694. if (goodCoords.length > 0) { // just in case goodCoords is empty (shouldn't happen)
  695. if (Math.abs(me.x - goodCoords[0]) < 3 && Math.abs(me.y - goodCoords[1]) < 3) { // close enough
  696. return true;
  697. }
  698. Say("!Dodge " + target.name);
  699. NTM_MoveTo(me.areaid, goodCoords[0], goodCoords[1]);
  700. }
  701. return true;
  702. }
  703.  
  704. function NTCS_ClearPosition(range, sortFunc, spectype, classid) {
  705. var i, orgx, orgy, monList, ignoreList, target, result,
  706. gidAttack = [],
  707. dodgeIDs = [310, 362],
  708. attackcount = 0;
  709. if (NTConfig_AttackSkill[1] < 0 || NTConfig_AttackSkill[3] < 0) {
  710. return false;
  711. }
  712. switch (arguments.length) {
  713. case 0:
  714. range = 20;
  715. case 1:
  716. sortFunc = DistanceSort;
  717. case 2:
  718. spectype = false;
  719. case 3:
  720. classid = false;
  721. break;
  722. }
  723. orgx = me.x;
  724. orgy = me.y;
  725. ignoreList = [];
  726. MainLoop : while (attackcount < 300) {
  727. monList = [];
  728. target = NTC_FindUnit(NTC_UNIT_MONSTER);
  729. if (target) {
  730. do {
  731. if (target.IsAttackable()) {
  732. if ((me.classid === 1 || me.classid === 2 || me.classid === 6) && NTConfig_Dodge && GetDistance(me, target) < 7 && dodgeIDs.indexOf(target.classid) > -1) {
  733. NTA_Dodge(target, 15);
  734. continue MainLoop;
  735. }
  736. if (ignoreList.indexOf(target.gid) < 0 && GetDistance(orgx, orgy, target.x, target.y) <= range) {
  737. if (NTA_IsValidMonster(target)) {
  738. monList.push(new NTA_MonsterStats(target));
  739. } else {
  740. ignoreList.push(target.gid);
  741. }
  742. }
  743. }
  744. } while (target.GetNext());
  745. }
  746. if (monList.length === 0) {
  747. break;
  748. }
  749. monList.sort(sortFunc);
  750. target = NTC_FindUnit(NTC_UNIT_MONSTER, monList[0].gid);
  751. if (target && target.IsAttackable()) {
  752. result = NTA_Attack(target, attackcount % 30 === 0);
  753. switch (result) {
  754. case 1:
  755. monList.shift();
  756. ignoreList.push(target.gid);
  757. break;
  758. case 2:
  759. case 3:
  760. if(!gidAttack[target.gid]) {
  761. gidAttack[target.gid] = 0;
  762. }
  763. gidAttack[target.gid] += 1;
  764. if (gidAttack[target.gid] > NTConfig_LowMaxAttacks) {
  765. monList.shift();
  766. ignoreList.push(target.gid);
  767. }
  768. attackcount += 1;
  769. if (target.mode === 0 || target.mode === 12) {
  770. NTSI_FastPick();
  771. }
  772. break;
  773. default:
  774. return false;
  775. }
  776. } else {
  777. monList.shift();
  778. ignoreList.push(target.gid);
  779. }
  780. }
  781. switch (me.classid) {
  782. case NTC_CHAR_CLASS_PALADIN:
  783. if (attackcount > 2 && (parseInt(me.hp * 100/ me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp * 100 / me.mpmax) < NTConfig_UseRedemptionMP)) {
  784. if (NTC_PutSkill(124, NTC_HAND_RIGHT)) {
  785. NTC_PingDelay(1000);
  786. }
  787. }
  788. break;
  789. case NTC_CHAR_CLASS_NECROMANCER:
  790. if (typeof(NTA_SkeletonArmy) === 'function') { // old summon code
  791. NTA_SkeletonArmy(NTConfig_SkeletonArmy);
  792. NTA_MageArmy(NTConfig_MageArmy);
  793. NTA_ReviveArmy(NTConfig_ReviveArmy);
  794. } else {
  795. NTA_RaiseArmy(); // new summon code
  796. }
  797. break;
  798. case NTC_CHAR_CLASS_SORCERESS:
  799. if (me.GetState(30) === 0) {
  800. NTC_CastSkill(58, NTC_HAND_RIGHT);
  801. }
  802. break;
  803. case NTC_CHAR_CLASS_BARBARIAN:
  804. if (attackcount > 0) {
  805. if (typeof(MWL_FindItem) === 'function') { // in case of using muddy's item find (like myself)
  806. MWL_FindItem(20);
  807. } else if (NTConfig_UseFindItem && !NTA_CheckForCloseMonsters(10)) {
  808. NTA_FindItem(NTConfig_FindItemRange);
  809. }
  810. }
  811. break;
  812. }
  813. if (attackcount > 0) {
  814. NTSI_PickItems();
  815. }
  816. if (NTConfig_OpenChest) {
  817. OpenStashes(range);
  818. }
  819. if (NTT_CheckMerc()) {
  820. NTTMGR_VisitTown();
  821. }
  822. if (NTT_CheckPotionSafe()) {
  823. NTTMGR_VisitTown();
  824. }
  825. if (NTConfig_IdInField) {
  826. if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
  827. NT_FieldID();
  828. }
  829. } return true;
  830. }
  831.  
  832. function NTA_SortRooms(a, b) {
  833. if (GetDistance(me.x, me.y, a[0], a[1]) < GetDistance(me.x, me.y, b[0], b[1])) {
  834. return -1;
  835. }
  836. return 1;
  837. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement