Advertisement
Guest User

Untitled

a guest
May 28th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.76 KB | None | 0 0
  1. const NTA_DAMAGE_NONE = 0;
  2. const NTA_DAMAGE_PHYSICAL = 1;
  3. const NTA_DAMAGE_MAGIC = 2;
  4. const NTA_DAMAGE_FIRE = 3;
  5. const NTA_DAMAGE_LIGHTNING = 4;
  6. const NTA_DAMAGE_COLD = 5;
  7. const NTA_DAMAGE_POISON = 6;
  8.  
  9. var _NTA_SkillHand = new Array(7);
  10. var _NTA_SkillDamage = new Array(7);
  11. var _NTA_SkillRange = new Array(7);
  12.  
  13. function NTA_Initialize()
  14. {
  15. if(NTConfig_AttackSkill[1] == 0 || NTConfig_AttackSkill[3] == 0)
  16. NTA_DetectAttackPattern();
  17.  
  18. for(var i = 0 ; i < 7 ; i++)
  19. {
  20. if(NTConfig_AttackSkill[i] > 0)
  21. {
  22. _NTA_SkillHand[i] = GetBaseStat("skills.txt", NTConfig_AttackSkill[i], 166) ? 2 : NTC_HAND_RIGHT;
  23. _NTA_SkillDamage[i] = NTA_GetDamageType(NTConfig_AttackSkill[i]);
  24.  
  25. switch(NTConfig_AttackSkill[i])
  26. {
  27. case 44: //Frost Nova
  28. case 48: // Nova
  29. _NTA_SkillRange[i] = 10;
  30. break;
  31. case 64: // Frozen Orb
  32. _NTA_SkillRange[i] = 15;
  33. break;
  34. case 97: //Smite
  35. case 106: //Zeal
  36. case 112: //Blessed Hammer
  37. _NTA_SkillRange[i] = 3;
  38. break;
  39. case 151: //Whirlwind
  40. _NTA_SkillRange[i] = 8;
  41. break;
  42. case 152: //Berserk
  43. _NTA_SkillRange[i] = 3;
  44. break;
  45. case 230://Arctic Blast
  46. _NTA_SkillRange[i] = 6;
  47. case 245://Tornado
  48. _NTA_SkillRange[i] = 3;
  49. break;
  50.  
  51. default:
  52. _NTA_SkillRange[i] = 25;
  53. break;
  54. }
  55. }
  56. }
  57. }
  58.  
  59. function NTA_KillMonster(classid)
  60. {
  61. var _target;
  62.  
  63. if(NTConfig_AttackSkill[1] < 1)
  64. return false;
  65.  
  66. _target = NTC_FindUnit(NTC_UNIT_MONSTER, classid, 5);
  67.  
  68. if(!_target)
  69. return false;
  70.  
  71. if(_target.IsAttackable())
  72. {
  73. var _attackcount = 0;
  74.  
  75. while(_attackcount < 300 && NTA_IsValidMonster(_target))
  76. {
  77. if(NTA_Attack(_target, (_attackcount%30) == 0) < 2)
  78. break;
  79.  
  80. _attackcount++;
  81. }
  82. }
  83.  
  84. return (_target.hp <= 0 || _target.mode == 0 || _target.mode == 12);
  85. }
  86.  
  87. function NTA_ClearPosition(range, pickitem, safelevel)
  88. {
  89. var _orgx, _orgy;
  90. var _spectype = [0x0A, 0x01, 0x01];
  91. var _skiplist;
  92. var _attackcount = 0;
  93. var _target;
  94. var _distance, _mingid, _mindistance;
  95. var _result;
  96.  
  97. if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
  98. return false;
  99.  
  100. switch(arguments.length)
  101. {
  102. case 0:
  103. range = 20;
  104. case 1:
  105. pickitem = false;
  106. case 2:
  107. safelevel = 0;
  108. default:
  109. if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
  110. safelevel = 0;
  111. break;
  112. }
  113.  
  114. _orgx = me.x;
  115. _orgy = me.y;
  116.  
  117. for(var i = 0 ; i < _spectype.length ; i++)
  118. {
  119. _skiplist = new Array();
  120.  
  121. while(_attackcount < (i+1)*100)
  122. {
  123. _mindistance = 100000;
  124.  
  125. _target = NTC_FindUnit(NTC_UNIT_MONSTER);
  126.  
  127. if(_target)
  128. {
  129. do
  130. {
  131. if(_skiplist.indexOf(_target.gid) < 0)
  132. {
  133. if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
  134. {
  135. if(GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTA_IsValidMonster(_target))
  136. {
  137. _distance = GetDistance(me, _target);
  138.  
  139. if(_distance < _mindistance)
  140. {
  141. _mingid = _target.gid;
  142. _mindistance = _distance;
  143. }
  144. }
  145. }
  146. else
  147. _skiplist.push(_target.gid);
  148. }
  149. } while(_target.GetNext());
  150. }
  151.  
  152. if(_mindistance < 100000)
  153. {
  154. _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);
  155.  
  156. if(_target)
  157. {
  158. _result = NTA_Attack(_target, (_attackcount%30) == 0);
  159.  
  160. switch(_result)
  161. {
  162. case 1:
  163. _skiplist.push(_mingid);
  164. break;
  165. case 2:
  166. case 3:
  167. _attackcount++;
  168. break;
  169. default:
  170. return false;
  171. }
  172. }
  173. }
  174. else
  175. break;
  176. }
  177. }
  178.  
  179. if(me.classid == NTC_CHAR_CLASS_PALADIN)
  180. {
  181. if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
  182. {
  183. if(NTC_PutSkill(124, NTC_HAND_RIGHT))
  184. NTC_PingDelay(1000);
  185. }
  186. }
  187.  
  188. if(NTConfig_OpenChest)
  189. {
  190. _target = NTC_GetSpecialChest();
  191.  
  192. if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTC_OpenChest(_target))
  193. _attackcount++;
  194. }
  195.  
  196. if(pickitem && _attackcount > 0)
  197. NTSI_PickItems();
  198.  
  199. switch(safelevel)
  200. {
  201. case 1:
  202. return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
  203. case 2:
  204. return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
  205. }
  206.  
  207. return true;
  208. }
  209.  
  210. function NTA_ClearLevel(pickitem, safelevel)
  211. {
  212. var i;
  213. var _room, _rooms;
  214. var _distance, _minindex, _mindistance;
  215.  
  216. _room = GetRoom();
  217.  
  218. if(!_room)
  219. return false;
  220.  
  221. switch(arguments.length)
  222. {
  223. case 0:
  224. pickitem = true;
  225. case 1:
  226. safelevel = 2;
  227. default:
  228. if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
  229. safelevel = 0;
  230. break;
  231. }
  232.  
  233. _rooms = new Array();
  234.  
  235. do
  236. {
  237. _rooms.push([parseInt(_room.x*5 + _room.xsize*5/2), parseInt(_room.y*5 + _room.ysize*5/2)]);
  238. } while(_room.GetNext());
  239.  
  240. while(_rooms.length > 0)
  241. {
  242. _mindistance = 100000;
  243.  
  244. for(i = 0 ; i < _rooms.length ; i++)
  245. {
  246. _distance = GetDistance(me.x, me.y, _rooms[i][0], _rooms[i][1]);
  247.  
  248. if(_distance < _mindistance)
  249. {
  250. _minindex = i;
  251. _mindistance = _distance;
  252. }
  253. }
  254.  
  255. if(NTM_MoveTo(me.areaid, _rooms[_minindex][0], _rooms[_minindex][1], 1))
  256. {
  257. if(!NTA_ClearRoom(pickitem, safelevel))
  258. return false;
  259.  
  260. NTP_DoPrecast(false);
  261. }
  262.  
  263. _rooms.splice(_minindex, 1);
  264. }
  265.  
  266. return true;
  267. }
  268.  
  269. function NTA_ClearRoom(pickitem, safelevel)
  270. {
  271. var _room;
  272. var _spectype = [0x0A, 0x01, 0x01];
  273. var _skiplist;
  274. var _attackcount = 0;
  275. var _target;
  276. var _distance, _mingid, _mindistance;
  277. var _result;
  278.  
  279. if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
  280. return false;
  281.  
  282. _room = me.GetRoom();
  283.  
  284. if(!_room)
  285. return false;
  286.  
  287. switch(arguments.length)
  288. {
  289. case 0:
  290. pickitem = false;
  291. case 1:
  292. safelevel = 0;
  293. default:
  294. if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
  295. safelevel = 0;
  296. break;
  297. }
  298.  
  299. for(var i = 0 ; i < _spectype.length ; i++)
  300. {
  301. _skiplist = new Array();
  302.  
  303. while(_attackcount < (i+1)*100)
  304. {
  305. _mindistance = 100000;
  306.  
  307. _target = NTC_FindUnit(NTC_UNIT_MONSTER);
  308.  
  309. if(_target)
  310. {
  311. do
  312. {
  313. if(_skiplist.indexOf(_target.gid) < 0)
  314. {
  315. if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
  316. {
  317. if(_room.UnitInRoom(_target) && NTA_IsValidMonster(_target))
  318. {
  319. _distance = GetDistance(me, _target);
  320.  
  321. if(_distance < _mindistance)
  322. {
  323. _mingid = _target.gid;
  324. _mindistance = _distance;
  325. }
  326. }
  327. }
  328. else
  329. _skiplist.push(_target.gid);
  330. }
  331. } while(_target.GetNext());
  332. }
  333.  
  334. if(_mindistance < 100000)
  335. {
  336. _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);
  337.  
  338. if(_target)
  339. {
  340. _result = NTA_Attack(_target, (_attackcount%30) == 0);
  341.  
  342. switch(_result)
  343. {
  344. case 1:
  345. _skiplist.push(_mingid);
  346. break;
  347. case 2:
  348. case 3:
  349. _attackcount++;
  350. break;
  351. default:
  352. return false;
  353. }
  354. }
  355. }
  356. else
  357. break;
  358. }
  359. }
  360.  
  361. if(me.classid == NTC_CHAR_CLASS_PALADIN)
  362. {
  363. if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
  364. {
  365. if(NTC_PutSkill(124, NTC_HAND_RIGHT))
  366. NTC_PingDelay(1000);
  367. }
  368. }
  369.  
  370. if(NTConfig_OpenChest)
  371. {
  372. _target = NTC_GetSpecialChest();
  373.  
  374. if(_target && _room.UnitInRoom(_target) && NTC_OpenChest(_target))
  375. _attackcount++;
  376. }
  377.  
  378. if(pickitem && _attackcount > 0)
  379. NTSI_PickItems();
  380.  
  381. switch(safelevel)
  382. {
  383. case 1:
  384. return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
  385. case 2:
  386. return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
  387. }
  388.  
  389. return true;
  390. }
  391.  
  392. function NTA_IsValidMonster(monster)
  393. {
  394. var _classid;
  395.  
  396. if(monster.hp <= 0 || monster.mode == 0 || monster.mode == 12)
  397. return false;
  398.  
  399. _classid = monster.classid;
  400.  
  401. if(((_classid >= 110 && _classid <= 113) || _classid == 608) && monster.mode == 8) // ignore flying scavengers
  402. return false;
  403.  
  404. if(_classid == 68 && monster.mode == 14) // ignore burrowing maggots
  405. return false;
  406.  
  407. if(_classid >= 258 && _classid <= 263 && monster.mode == 14) // ignore submerged WaterWatchers
  408. return false;
  409.  
  410. if(monster.GetState(53) || monster.GetState(96)) // Conversion, Revive
  411. return false;
  412.  
  413. return true;
  414. }
  415.  
  416. function NTA_GetDamageType(skillid)
  417. {
  418. if(skillid == 74) // Corpse Explosion
  419. return NTA_DAMAGE_PHYSICAL;
  420.  
  421. if(skillid == 112) // Blessed Hammer
  422. return NTA_DAMAGE_NONE;
  423.  
  424. switch(GetBaseStat("skills.txt", skillid, 233))
  425. {
  426. case "cold":
  427. return NTA_DAMAGE_COLD;
  428. case "fire":
  429. return NTA_DAMAGE_FIRE;
  430. case "ltng":
  431. return NTA_DAMAGE_LIGHTNING;
  432. case "mag":
  433. return NTA_DAMAGE_MAGIC;
  434. case "pois":
  435. return NTA_DAMAGE_POISON;
  436. case "stun":
  437. return NTA_DAMAGE_NONE;
  438. default:
  439. if(GetBaseStat("skills.txt", skillid, 178) || GetBaseStat("skills.txt", skillid, 182)) // aura or passive
  440. return NTA_DAMAGE_NONE;
  441. }
  442.  
  443. return NTA_DAMAGE_PHYSICAL;
  444. }
  445.  
  446. function NTA_GetResistance(enemy, type)
  447. {
  448. switch(type)
  449. {
  450. case NTA_DAMAGE_PHYSICAL:
  451. return enemy.GetStat(36);
  452. case NTA_DAMAGE_MAGIC:
  453. return enemy.GetStat(37);
  454. case NTA_DAMAGE_FIRE:
  455. return enemy.GetStat(39);
  456. case NTA_DAMAGE_LIGHTNING:
  457. return enemy.GetStat(41);
  458. case NTA_DAMAGE_COLD:
  459. return enemy.GetStat(43);
  460. case NTA_DAMAGE_POISON:
  461. return enemy.GetStat(45);
  462. }
  463.  
  464. return 0;
  465. }
  466.  
  467. function NTA_DetectAttackPattern()
  468. {
  469. switch(me.classid)
  470. {
  471. case NTC_CHAR_CLASS_AMAZON:
  472. return NTA_AmazonAttackPatternInt();
  473. case NTC_CHAR_CLASS_SORCERESS:
  474. return NTA_SorceressAttackPatternInt();
  475. case NTC_CHAR_CLASS_NECROMANCER:
  476. return NTA_NecromancerAttackPatternInt();
  477. case NTC_CHAR_CLASS_PALADIN:
  478. return NTA_PaladinAttackPatternInt();
  479. case NTC_CHAR_CLASS_BARBARIAN:
  480. return NTA_BarbarianAttackPatternInt();
  481. case NTC_CHAR_CLASS_DRUID:
  482. return NTA_DruidAttackPatternInt();
  483. case NTC_CHAR_CLASS_ASSASSIN:
  484. return NTA_AssassinAttackPatternInt();
  485. }
  486.  
  487. return false;
  488. }
  489.  
  490. // Return value : 0 = Unrecoverable process, 1 = Unavailable attack, 2 = Onetime fail, 3 = Success
  491. function NTA_Attack(target, firstorder)
  492. {
  493. switch(me.classid)
  494. {
  495. case NTC_CHAR_CLASS_AMAZON:
  496. return NTA_AmazonAttackInt(target, firstorder);
  497. case NTC_CHAR_CLASS_SORCERESS:
  498. return NTA_SorceressAttackInt(target, firstorder);
  499. case NTC_CHAR_CLASS_NECROMANCER:
  500. return NTA_NecromancerAttackInt(target, firstorder);
  501. case NTC_CHAR_CLASS_PALADIN:
  502. return NTA_PaladinAttackInt(target, firstorder);
  503. case NTC_CHAR_CLASS_BARBARIAN:
  504. return NTA_BarbarianAttackInt(target, firstorder);
  505. case NTC_CHAR_CLASS_DRUID:
  506. return NTA_DruidAttackInt(target, firstorder);
  507. case NTC_CHAR_CLASS_ASSASSIN:
  508. return NTA_AssassinAttackInt(target, firstorder);
  509. }
  510.  
  511. return 0;
  512. }
  513.  
  514. // Internal function
  515. function NTA_AmazonAttackPatternInt()
  516. {
  517. return false;
  518. }
  519.  
  520. function NTA_AmazonAttackInt(target, firstorder)
  521. {
  522. return 1;
  523. }
  524.  
  525. function NTA_AmazonCastSkillInt(index, target)
  526. {
  527. return false;
  528. }
  529.  
  530. function NTA_SorceressAttackPatternInt()
  531. {
  532. var _maxindex, _maxskill;
  533. var _avgskilllevel = new Array();
  534.  
  535. _avgskilllevel[0] = parseInt((me.GetSkill(59, false)+me.GetSkill(39, false)+me.GetSkill(45, false)+me.GetSkill(55, false))/4);
  536. _avgskilllevel[1] = parseInt((me.GetSkill(53, false)+me.GetSkill(38, false)+me.GetSkill(48, false)+me.GetSkill(49, false))/4);
  537. _avgskilllevel[2] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false)+me.GetSkill(64, false))/4);
  538. _avgskilllevel[3] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false))/3);
  539.  
  540. _maxindex = -1;
  541. _maxskill = 0;
  542.  
  543. for(var i = 0 ; i < _avgskilllevel.length ; i++)
  544. {
  545. if(_avgskilllevel[i] > _maxskill)
  546. {
  547. _maxindex = i;
  548. _maxskill = _avgskilllevel[i];
  549. }
  550. }
  551.  
  552. switch(_maxindex)
  553. {
  554. case 0: // Blizzard + Glacial Spike
  555. NTConfig_AttackSkill[1] = 59;
  556. NTConfig_AttackSkill[2] = 55;
  557. NTConfig_AttackSkill[3] = 59;
  558. NTConfig_AttackSkill[4] = 55;
  559. break;
  560. case 1: // Chain Lightning + Lightning
  561. NTConfig_AttackSkill[1] = 49;
  562. NTConfig_AttackSkill[3] = 53;
  563. break;
  564. case 2: // Fire Ball + Frozen Orb
  565. NTConfig_AttackSkill[0] = 64;
  566. NTConfig_AttackSkill[1] = 47;
  567. NTConfig_AttackSkill[3] = 47;
  568. NTConfig_AttackSkill[5] = 64;
  569. NTConfig_AttackSkill[6] = 55;
  570. break;
  571. case 3: // Fire Ball + Meteor
  572. NTConfig_AttackSkill[1] = 56;
  573. NTConfig_AttackSkill[2] = 47;
  574. NTConfig_AttackSkill[3] = 56;
  575. NTConfig_AttackSkill[4] = 47;
  576. break;
  577. }
  578.  
  579. return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
  580. }
  581.  
  582. function NTA_SorceressAttackInt(target, firstorder)
  583. {
  584. var _primaryindex;
  585.  
  586. if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
  587. {
  588. if(!NTTMGR_VisitTown())
  589. return 0;
  590. }
  591.  
  592. if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
  593. {
  594. if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
  595. {
  596. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
  597.  
  598. if(_pos)
  599. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  600. }
  601.  
  602. if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
  603. return 2;
  604.  
  605. return 3;
  606. }
  607.  
  608. if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80)
  609. {
  610. var _staticlevel = NTC_GetSkillLevel(42);
  611.  
  612. if(_staticlevel > 0)
  613. {
  614. var _staticrange;
  615. var _castx, _casty;
  616.  
  617. _staticrange = Math.floor((5+_staticlevel-1)*2/3);
  618.  
  619. if(GetDistance(me, target) > _staticrange || !CheckCollision(me, target, 6))
  620. {
  621. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _staticrange, 6);
  622.  
  623. if(_pos)
  624. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  625. }
  626.  
  627. if(target.x < me.x)
  628. _castx = me.x - 1;
  629. else if(target.x > me.x)
  630. _castx = me.x + 1;
  631. else
  632. _castx = me.x;
  633.  
  634. if(target.y < me.y)
  635. _casty = me.y - 1;
  636. else if(target.y > me.y)
  637. _casty = me.y + 1;
  638. else
  639. _casty = me.y;
  640.  
  641. if(!CheckCollision(target.areaid, _castx, _casty, 1))
  642. {
  643. _castx = me.x;
  644. _casty = me.y;
  645. }
  646.  
  647. if(!NTC_CastSkill(42, NTC_HAND_RIGHT, _castx, _casty))
  648. return 2;
  649.  
  650. return 3;
  651. }
  652. }
  653.  
  654. _primaryindex = (target.spectype&0x0A) ? 1 : 3;
  655.  
  656. if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) <= 90)
  657. {
  658. if(!NTA_SorceressCastSkillInt(_primaryindex, target))
  659. return 2;
  660.  
  661. return 3;
  662. }
  663.  
  664. if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) <= 80)
  665. {
  666. if(!NTA_SorceressCastSkillInt(5, target))
  667. return 2;
  668.  
  669. return 3;
  670. }
  671.  
  672. if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100 || (_primaryindex == 1 && NTC_GetMerc()))
  673. {
  674. if(!NTA_SorceressCastSkillInt(_primaryindex, target))
  675. return 2;
  676.  
  677. return 3;
  678. }
  679.  
  680. return 1;
  681. }
  682.  
  683. function NTA_SorceressCastSkillInt(index, target)
  684. {
  685. if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
  686. {
  687. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
  688. {
  689. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  690.  
  691. if(_pos)
  692. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  693. }
  694.  
  695. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
  696. }
  697.  
  698. if(NTConfig_AttackSkill[index+1] > 0)
  699. {
  700. if(GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4))
  701. {
  702. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);
  703.  
  704. if(_pos)
  705. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  706. }
  707.  
  708. return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
  709. }
  710.  
  711. for(var i = 0 ; i < 25 ; i++)
  712. {
  713. NTC_Delay(NTC_DELAY_FRAME);
  714.  
  715. if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
  716. break;
  717. }
  718.  
  719. return false;
  720. }
  721.  
  722. function NTA_NecromancerAttackPatternInt()
  723. {
  724. return false;
  725. }
  726.  
  727. function NTA_NecromancerAttackInt(target, firstorder)
  728. {
  729. return 1;
  730. }
  731.  
  732. function NTA_NecromancerCastSkillInt(index, target)
  733. {
  734. return false;
  735. }
  736.  
  737. function NTA_PaladinAttackPatternInt()
  738. {
  739. var _maxindex, _maxskill;
  740. var _avgskilllevel = new Array();
  741.  
  742. _avgskilllevel[0] = parseInt((me.GetSkill(112, false)+me.GetSkill(108, false)+me.GetSkill(115, false))/3);
  743. _avgskilllevel[1] = parseInt((me.GetSkill(106, false)+me.GetSkill(96, false))/2);
  744. _avgskilllevel[2] = parseInt((me.GetSkill(121, false)+me.GetSkill(101, false)+me.GetSkill(118, false))/3);
  745.  
  746. _maxindex = -1;
  747. _maxskill = 0;
  748.  
  749. for(var i = 0 ; i < _avgskilllevel.length ; i++)
  750. {
  751. if(_avgskilllevel[i] > _maxskill)
  752. {
  753. _maxindex = i;
  754. _maxskill = _avgskilllevel[i];
  755. }
  756. }
  757.  
  758. switch(_maxindex)
  759. {
  760. case 0: // Blessed Hammer
  761. NTConfig_AttackSkill[1] = 112;
  762. NTConfig_AttackSkill[2] = 113;
  763. NTConfig_AttackSkill[3] = 112;
  764. NTConfig_AttackSkill[4] = 113;
  765. break;
  766. case 1: // Zeal
  767. NTConfig_AttackSkill[1] = 106;
  768. NTConfig_AttackSkill[2] = 122;
  769. NTConfig_AttackSkill[3] = 106;
  770. NTConfig_AttackSkill[4] = 122;
  771. break;
  772. case 2: // Fist of the Heavens
  773. NTConfig_AttackSkill[1] = 121;
  774. NTConfig_AttackSkill[2] = 123;
  775. NTConfig_AttackSkill[3] = 121;
  776. NTConfig_AttackSkill[4] = 123;
  777. break;
  778. }
  779.  
  780. return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
  781. }
  782.  
  783. function NTA_PaladinAttackInt(target, firstorder)
  784. {
  785. var _primaryindex;
  786.  
  787. if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
  788. {
  789. if(!NTTMGR_VisitTown())
  790. return 0;
  791. }
  792.  
  793. if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
  794. {
  795. if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
  796. {
  797. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
  798.  
  799. if(_pos)
  800. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  801. }
  802.  
  803. if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
  804. return 2;
  805.  
  806. return 3;
  807. }
  808.  
  809. _primaryindex = (target.spectype&0x0A) ? 1 : 3;
  810.  
  811. if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
  812. {
  813. if(_NTA_SkillRange[_primaryindex] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
  814. return 1;
  815.  
  816. if(!NTA_PaladinCastSkillInt(_primaryindex, target))
  817. return 2;
  818.  
  819. return 3;
  820. }
  821.  
  822. if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
  823. {
  824. if(_NTA_SkillRange[5] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
  825. return 1;
  826.  
  827. if(!NTA_PaladinCastSkillInt(5, target))
  828. return 2;
  829.  
  830. return 3;
  831. }
  832.  
  833. return 1;
  834. }
  835.  
  836. function NTA_PaladinCastSkillInt(index, target)
  837. {
  838. if(NTConfig_AttackSkill[index] == 112)
  839. {
  840. if(me.x-target.x < 1 || me.x-target.x > 2 || me.y-target.y < 1 || me.y-target.y > 2)
  841. {
  842. if(CheckCollision(target.areaid, target.x+2, target.y+2, 1))
  843. NTM_MoveTo(target.areaid, target.x+2, target.y+2, 0);
  844. else if(me.x-target.x < -4 || me.x-target.x > 2 || me.y-target.y < 0 || me.y-target.y > 2)
  845. NTM_MoveTo(target.areaid, target.x-4, target.y, 0);
  846. }
  847. }
  848. else
  849. {
  850. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
  851. {
  852. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  853.  
  854. if(_pos)
  855. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  856. }
  857. }
  858.  
  859. if(NTConfig_AttackSkill[index+1] > 0)
  860. NTC_PutSkill(NTConfig_AttackSkill[index+1], NTC_HAND_RIGHT);
  861.  
  862. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
  863. }
  864.  
  865. function NTA_BarbarianAttackPatternInt()
  866. {
  867. var _maxindex, _maxskill;
  868. var _avgskilllevel = new Array();
  869.  
  870. _avgskilllevel[0] = me.GetSkill(151, false);
  871.  
  872. _maxindex = -1;
  873. _maxskill = 0;
  874.  
  875. for(var i = 0 ; i < _avgskilllevel.length ; i++)
  876. {
  877. if(_avgskilllevel[i] > _maxskill)
  878. {
  879. _maxindex = i;
  880. _maxskill = _avgskilllevel[i];
  881. }
  882. }
  883.  
  884. switch(_maxindex)
  885. {
  886. case 0: // Whirlwind
  887. NTConfig_AttackSkill[1] = 151;
  888. NTConfig_AttackSkill[3] = 151;
  889. NTConfig_AttackSkill[5] = 152;
  890. break;
  891. }
  892.  
  893. return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
  894. }
  895.  
  896. function NTA_BarbarianAttackInt(target, firstorder)
  897. {
  898. var _primaryindex;
  899.  
  900. if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
  901. {
  902. if(!NTTMGR_VisitTown())
  903. return 0;
  904. }
  905.  
  906. if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
  907. {
  908. if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
  909. {
  910. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
  911.  
  912. if(_pos)
  913. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  914. }
  915.  
  916. if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
  917. return 2;
  918.  
  919. return 3;
  920. }
  921.  
  922. _primaryindex = (target.spectype&0x0A) ? 1 : 3;
  923.  
  924. if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
  925. {
  926. if((_NTA_SkillRange[_primaryindex] < 4 || NTConfig_AttackSkill[_primaryindex] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
  927. return 1;
  928.  
  929. if(!NTA_BarbarianCastSkillInt(_primaryindex, target))
  930. return 2;
  931.  
  932. return 3;
  933. }
  934.  
  935. if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
  936. {
  937. if((_NTA_SkillRange[5] < 4 || NTConfig_AttackSkill[5] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
  938. return 1;
  939.  
  940. if(!NTA_BarbarianCastSkillInt(5, target))
  941. return 2;
  942.  
  943. return 3;
  944. }
  945.  
  946. return 1;
  947. }
  948.  
  949. function NTA_BarbarianCastSkillInt(index, target)
  950. {
  951. if(NTConfig_AttackSkill[index] == 151)
  952. {
  953. var _castx, _casty;
  954.  
  955. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 5))
  956. {
  957. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 5);
  958.  
  959. if(_pos)
  960. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  961. }
  962.  
  963. _castx = target.x > me.x ? target.x+3 : target.x-3;
  964. _casty = target.y > me.y ? target.y+3 : target.y-3;
  965.  
  966. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], _castx, _casty);
  967. }
  968.  
  969. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
  970. {
  971. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  972.  
  973. if(_pos)
  974. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  975. }
  976.  
  977. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
  978. }
  979.  
  980. function NTA_DruidAttackPatternInt()
  981. {
  982. var _maxindex, _maxskill;
  983. var _avgskilllevel = new Array();
  984.  
  985. _avgskilllevel[0] = me.GetSkill(245, false);
  986. _maxindex = -1;
  987. _maxskill = 0;
  988.  
  989. for(var i = 0 ; i < _avgskilllevel.length ; i++)
  990. {
  991. if(_avgskilllevel[i] > _maxskill)
  992. {
  993. _maxindex = i;
  994. _maxskill = _avgskilllevel[i];
  995. }
  996. }
  997.  
  998. switch(_maxindex)
  999. {
  1000. case 0: //
  1001. NTConfig_AttackSkill[0] = 245;
  1002. NTConfig_AttackSkill[1] = 245;
  1003. NTConfig_AttackSkill[2] = 230;
  1004. break;
  1005. case 1:
  1006. NTConfig_AttackSkill[1] = 245;
  1007. NTConfig_AttackSkill[2] = 230;
  1008. NTConfig_AttackSkill[3] = 245;
  1009. break;
  1010. }
  1011.  
  1012. return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
  1013. }
  1014.  
  1015. function NTA_DruidAttackInt(target, firstorder)
  1016. {
  1017. var _primaryindex;
  1018. if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
  1019. {
  1020. if(!NTTMGR_VisitTown())
  1021. return 0;
  1022. }
  1023.  
  1024. if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
  1025. {
  1026.  
  1027.  
  1028. if(GetDistance(me, target) > NTConfig_AttackSkill[0] || !CheckCollision(me, target, 4))
  1029. {
  1030.  
  1031.  
  1032. if(target.name != "Andariel")
  1033. {
  1034. if (target.name == "Lister the Tormentor")
  1035. _NTA_SkillRange[index] = 15;
  1036. if (target.name == "Baal")
  1037. _NTA_SkillRange[index] = 3;
  1038.  
  1039.  
  1040. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  1041.  
  1042. if(_pos)
  1043. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  1044. }
  1045.  
  1046. else
  1047. {
  1048. Print("Moving closer to Andariel for a better chance to hit...");
  1049. NTM_MoveTo(target.areaid, target.x, target.y,0);
  1050. }
  1051. }
  1052.  
  1053. if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
  1054. return 2;
  1055.  
  1056. return 3;
  1057. }
  1058.  
  1059.  
  1060. _primaryindex = (target.spectype&0x0A) ? 1 : 3;
  1061.  
  1062. if(NTA_GetResistance(target, _NTA_SkillDamage[index]) <= 90)
  1063. {
  1064. if(!NTA_DruidCastSkillInt(_primaryindex, target))
  1065. return 2;
  1066.  
  1067. return 3;
  1068. }
  1069.  
  1070. if(NTConfig_AttackSkill[3] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[3]) <= 80)
  1071. {
  1072. if(!NTA_DruidCastSkillInt(3, target))
  1073. return 2;
  1074.  
  1075. return 3;
  1076. }
  1077.  
  1078. if(NTA_GetResistance(target, _NTA_SkillDamage[index]) < 100 || (_primaryindex == 1 && NTC_GetMerc()))
  1079. {
  1080. if(!NTA_DruidCastSkillInt(_primaryindex, target))
  1081. return 2;
  1082.  
  1083. return 3;
  1084. }
  1085.  
  1086. return 1;
  1087. }
  1088.  
  1089. function NTA_DruidCastSkillInt(index, target)
  1090. {
  1091. if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
  1092. {
  1093.  
  1094.  
  1095. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
  1096. {
  1097. if(target.name != "Andariel")
  1098. {
  1099. if (target.name == "Lister the Tormentor")
  1100. _NTA_SkillRange[index] = 15;
  1101. if (target.name == "Baal")
  1102. _NTA_SkillRange[index] = 3;
  1103.  
  1104. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  1105.  
  1106. if(_pos)
  1107. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  1108. }
  1109.  
  1110. else
  1111. {
  1112. Print("Moving closer to Andariel for a better chance to hit...");
  1113. NTM_MoveTo(target.areaid, target.x, target.y,0);
  1114. }
  1115. }
  1116.  
  1117. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
  1118. }
  1119.  
  1120. if(NTConfig_AttackSkill[index+1] > 0)
  1121. {
  1122.  
  1123. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
  1124. {
  1125. if(target.name != "Andariel")
  1126. {
  1127. if (target.name == "Lister the Tormentor")
  1128. _NTA_SkillRange[index] = 15;
  1129. if (target.name == "Baal")
  1130. _NTA_SkillRange[index] = 3;
  1131.  
  1132. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  1133.  
  1134. if(_pos)
  1135. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  1136. }
  1137.  
  1138. else
  1139. {
  1140. Print("Moving closer to Andariel for a better chance to hit...");
  1141. NTM_MoveTo(target.areaid, target.x, target.y,0);
  1142. }
  1143. }
  1144.  
  1145. return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
  1146. }
  1147.  
  1148. for(var i = 0 ; i < 25 ; i++)
  1149. {
  1150. NTC_Delay(NTC_DELAY_FRAME);
  1151.  
  1152. if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
  1153. break;
  1154. }
  1155.  
  1156. return false;
  1157. }
  1158.  
  1159.  
  1160. function NTA_AssassinAttackPatternInt()
  1161. {
  1162. var _maxindex, _maxskill;
  1163. var _avgskilllevel = new Array();
  1164.  
  1165. _avgskilllevel[0] = me.GetSkill(271, false);
  1166.  
  1167. _maxindex = -1;
  1168. _maxskill = 0;
  1169.  
  1170. for(var i = 0 ; i < _avgskilllevel.length ; i++)
  1171. {
  1172. if(_avgskilllevel[i] > _maxskill)
  1173. {
  1174. _maxindex = i;
  1175. _maxskill = _avgskilllevel[i];
  1176. }
  1177. }
  1178.  
  1179. switch(_maxindex)
  1180. {
  1181. case 0: // Lightning Sentry + Fire Blast + Physical Hammer
  1182. NTConfig_AttackSkill[1] = 271;
  1183. NTConfig_AttackSkill[3] = 251;
  1184. NTConfig_AttackSkill[5] = 253;
  1185. break;
  1186. }
  1187.  
  1188. return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
  1189. }
  1190.  
  1191. function NTA_AssassinAttackInt(target, firstorder)
  1192. {
  1193. var _primaryindex;
  1194.  
  1195. if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x04, NTConfig_CheckMercSafe&0x04))
  1196. {
  1197. if(!NTTMGR_VisitTown())
  1198. return 0;
  1199. }
  1200.  
  1201. if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
  1202. {
  1203. if(GetDistance(me, target) > _NTA_SkillRange[15] || !CheckCollision(me, target, 10))
  1204. {
  1205. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
  1206.  
  1207. if(_pos)
  1208. NTM_MoveTo(target.areaid, _pos[0], _pos[10], 0);
  1209. }
  1210.  
  1211. if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
  1212. return 2;
  1213.  
  1214. return 3;
  1215. }
  1216.  
  1217. _primaryindex = (target.spectype&0x0A) ? 1 : 3;
  1218.  
  1219. if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
  1220. {
  1221. if((_NTA_SkillRange[_primaryindex] < 4 || NTConfig_AttackSkill[_primaryindex] == 271) && !CheckCollision(target.areaid, target.x, target.y, 1))
  1222. return 1;
  1223.  
  1224. if(!NTA_AssassinCastSkillInt(_primaryindex, target))
  1225. return 2;
  1226.  
  1227. return 3;
  1228. }
  1229.  
  1230. if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
  1231. {
  1232. if((_NTA_SkillRange[5] < 4 || NTConfig_AttackSkill[5] == 271) && !CheckCollision(target.areaid, target.x, target.y, 1))
  1233. return 1;
  1234.  
  1235. if(!NTA_AssassinCastSkillInt(5, target))
  1236. return 2;
  1237.  
  1238. return 3;
  1239. }
  1240.  
  1241. return 1;
  1242. }
  1243.  
  1244. function NTA_AssassinCastSkillInt(index, target)
  1245. {
  1246. if(NTConfig_AttackSkill[index] == 271)
  1247. {
  1248. var _castx, _casty;
  1249.  
  1250. if(GetDistance(me, target) > _NTA_SkillRange[300] || !CheckCollision(me, target, 5))
  1251. {
  1252. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 5);
  1253.  
  1254. if(_pos)
  1255. NTM_MoveTo(target.areaid, _pos[1], _pos[5], 0);
  1256. }
  1257.  
  1258. _castx = target.x > me.x ? target.x+3 : target.x-3;
  1259. _casty = target.y > me.y ? target.y+3 : target.y-3;
  1260.  
  1261. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], _castx, _casty);
  1262. }
  1263.  
  1264. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
  1265. {
  1266. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  1267.  
  1268. if(_pos)
  1269. NTM_MoveTo(target.areaid, _pos[1], _pos[5], 0);
  1270. }
  1271.  
  1272. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
  1273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement