Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. default:
  46. _NTA_SkillRange[i] = 25;
  47. break;
  48. }
  49. }
  50. }
  51. }
  52.  
  53. function NTA_KillMonster(classid)
  54. {
  55. var _target;
  56.  
  57. if(NTConfig_AttackSkill[1] < 1)
  58. return false;
  59.  
  60. _target = NTC_FindUnit(NTC_UNIT_MONSTER, classid, 5);
  61.  
  62. if(!_target)
  63. return false;
  64.  
  65. if(_target.IsAttackable())
  66. {
  67. var _attackcount = 0;
  68.  
  69. while(_attackcount < 300 && NTA_IsValidMonster(_target))
  70. {
  71. if(NTA_Attack(_target, (_attackcount%30) == 0) < 2)
  72. break;
  73.  
  74. _attackcount++;
  75. }
  76. }
  77.  
  78. return (_target.hp <= 0 || _target.mode == 0 || _target.mode == 12);
  79. }
  80.  
  81. function NTA_ClearPosition(range, pickitem, safelevel)
  82. {
  83. var _orgx, _orgy;
  84. var _spectype = [0x0A, 0x01, 0x01];
  85. var _skiplist;
  86. var _attackcount = 0;
  87. var _target;
  88. var _distance, _mingid, _mindistance;
  89. var _result;
  90.  
  91. if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
  92. return false;
  93.  
  94. switch(arguments.length)
  95. {
  96. case 0:
  97. range = 20;
  98. case 1:
  99. pickitem = false;
  100. case 2:
  101. safelevel = 0;
  102. default:
  103. if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
  104. safelevel = 0;
  105. break;
  106. }
  107.  
  108. _orgx = me.x;
  109. _orgy = me.y;
  110.  
  111. for(var i = 0 ; i < _spectype.length ; i++)
  112. {
  113. _skiplist = new Array();
  114.  
  115. while(_attackcount < (i+1)*100)
  116. {
  117. _mindistance = 100000;
  118.  
  119. _target = NTC_FindUnit(NTC_UNIT_MONSTER);
  120.  
  121. NTSI_PickItems();
  122.  
  123. if(_target)
  124. {
  125. do
  126. {
  127. if(_skiplist.indexOf(_target.gid) < 0)
  128. {
  129. if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
  130. {
  131. if(GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTA_IsValidMonster(_target))
  132. {
  133. _distance = GetDistance(me, _target);
  134.  
  135. if(_distance < _mindistance)
  136. {
  137. _mingid = _target.gid;
  138. _mindistance = _distance;
  139. }
  140. }
  141. }
  142. else
  143. _skiplist.push(_target.gid);
  144. }
  145. } while(_target.GetNext());
  146. }
  147.  
  148. if(_mindistance < 100000)
  149. {
  150. _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);
  151.  
  152. if(_target)
  153. {
  154. _result = NTA_Attack(_target, (_attackcount%30) == 0);
  155.  
  156. switch(_result)
  157. {
  158. case 1:
  159. _skiplist.push(_mingid);
  160. break;
  161. case 2:
  162. case 3:
  163. _attackcount++;
  164. break;
  165. default:
  166. return false;
  167. }
  168. }
  169. }
  170. else
  171. break;
  172. }
  173. }
  174.  
  175. if(me.classid == NTC_CHAR_CLASS_PALADIN)
  176. {
  177. if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
  178. {
  179. if(NTC_PutSkill(124, NTC_HAND_RIGHT))
  180. NTC_PingDelay(1000);
  181. }
  182. }
  183.  
  184. if(NTConfig_OpenChest)
  185. {
  186. _target = NTC_GetSpecialChest();
  187.  
  188. if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTC_OpenChest(_target))
  189. _attackcount++;
  190. }
  191.  
  192. if(pickitem && _attackcount > 0)
  193. NTSI_PickItems();
  194.  
  195. switch(safelevel)
  196. {
  197. case 1:
  198. return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
  199. case 2:
  200. return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
  201. }
  202.  
  203. return true;
  204. }
  205.  
  206. function NTA_ClearLevel(pickitem, safelevel)
  207. {
  208. var i;
  209. var _room, _rooms;
  210. var _distance, _minindex, _mindistance;
  211.  
  212. _room = GetRoom();
  213.  
  214. if(!_room)
  215. return false;
  216.  
  217. switch(arguments.length)
  218. {
  219. case 0:
  220. pickitem = true;
  221. case 1:
  222. safelevel = 2;
  223. default:
  224. if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
  225. safelevel = 0;
  226. break;
  227. }
  228.  
  229. _rooms = new Array();
  230.  
  231. do
  232. {
  233. _rooms.push([parseInt(_room.x*5 + _room.xsize*5/2), parseInt(_room.y*5 + _room.ysize*5/2)]);
  234. } while(_room.GetNext());
  235.  
  236. while(_rooms.length > 0)
  237. {
  238. _mindistance = 100000;
  239.  
  240. for(i = 0 ; i < _rooms.length ; i++)
  241. {
  242. _distance = GetDistance(me.x, me.y, _rooms[i][0], _rooms[i][1]);
  243.  
  244. if(_distance < _mindistance)
  245. {
  246. _minindex = i;
  247. _mindistance = _distance;
  248. }
  249. }
  250.  
  251. if(NTM_MoveTo(me.areaid, _rooms[_minindex][0], _rooms[_minindex][1], 1))
  252. {
  253. if(!NTA_ClearRoom(pickitem, safelevel))
  254. return false;
  255.  
  256. NTP_DoPrecast(false);
  257. }
  258.  
  259. _rooms.splice(_minindex, 1);
  260. }
  261.  
  262. return true;
  263. }
  264.  
  265. function NTA_ClearRoom(pickitem, safelevel)
  266. {
  267. var _room;
  268. var _spectype = [0x0A, 0x01, 0x01];
  269. var _skiplist;
  270. var _attackcount = 0;
  271. var _target;
  272. var _distance, _mingid, _mindistance;
  273. var _result;
  274.  
  275. if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
  276. return false;
  277.  
  278. _room = me.GetRoom();
  279.  
  280. if(!_room)
  281. return false;
  282.  
  283. switch(arguments.length)
  284. {
  285. case 0:
  286. pickitem = false;
  287. case 1:
  288. safelevel = 0;
  289. default:
  290. if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
  291. safelevel = 0;
  292. break;
  293. }
  294.  
  295. for(var i = 0 ; i < _spectype.length ; i++)
  296. {
  297. _skiplist = new Array();
  298.  
  299. while(_attackcount < (i+1)*100)
  300. {
  301. _mindistance = 100000;
  302.  
  303. _target = NTC_FindUnit(NTC_UNIT_MONSTER);
  304.  
  305. if(_target)
  306. {
  307. do
  308. {
  309. if(_skiplist.indexOf(_target.gid) < 0)
  310. {
  311. if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
  312. {
  313. if(_room.UnitInRoom(_target) && NTA_IsValidMonster(_target))
  314. {
  315. _distance = GetDistance(me, _target);
  316.  
  317. if(_distance < _mindistance)
  318. {
  319. _mingid = _target.gid;
  320. _mindistance = _distance;
  321. }
  322. }
  323. }
  324. else
  325. _skiplist.push(_target.gid);
  326. }
  327. } while(_target.GetNext());
  328. }
  329.  
  330. if(_mindistance < 100000)
  331. {
  332. _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);
  333.  
  334. if(_target)
  335. {
  336. _result = NTA_Attack(_target, (_attackcount%30) == 0);
  337.  
  338. switch(_result)
  339. {
  340. case 1:
  341. _skiplist.push(_mingid);
  342. break;
  343. case 2:
  344. case 3:
  345. _attackcount++;
  346. break;
  347. default:
  348. return false;
  349. }
  350. }
  351. }
  352. else
  353. break;
  354. }
  355. }
  356.  
  357. if(me.classid == NTC_CHAR_CLASS_PALADIN)
  358. {
  359. if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
  360. {
  361. if(NTC_PutSkill(124, NTC_HAND_RIGHT))
  362. NTC_PingDelay(1000);
  363. }
  364. }
  365.  
  366. if(NTConfig_OpenChest)
  367. {
  368. _target = NTC_GetSpecialChest();
  369.  
  370. if(_target && _room.UnitInRoom(_target) && NTC_OpenChest(_target))
  371. _attackcount++;
  372. }
  373.  
  374. if(pickitem && _attackcount > 0)
  375. NTSI_PickItems();
  376.  
  377. switch(safelevel)
  378. {
  379. case 1:
  380. return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
  381. case 2:
  382. return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
  383. }
  384.  
  385. return true;
  386. }
  387.  
  388. function NTA_IsValidMonster(monster)
  389. {
  390. var _classid;
  391.  
  392. if(monster.hp <= 0 || monster.mode == 0 || monster.mode == 12)
  393. return false;
  394.  
  395. _classid = monster.classid;
  396.  
  397. if(((_classid >= 110 && _classid <= 113) || _classid == 608) && monster.mode == 8) // ignore flying scavengers
  398. return false;
  399.  
  400. if(_classid == 68 && monster.mode == 14) // ignore burrowing maggots
  401. return false;
  402.  
  403. if(_classid >= 258 && _classid <= 263 && monster.mode == 14) // ignore submerged WaterWatchers
  404. return false;
  405.  
  406. if(monster.GetState(53) || monster.GetState(96)) // Conversion, Revive
  407. return false;
  408.  
  409. return true;
  410. }
  411.  
  412. function NTA_GetDamageType(skillid)
  413. {
  414. if(skillid == 74) // Corpse Explosion
  415. return NTA_DAMAGE_PHYSICAL;
  416.  
  417. if(skillid == 112) // Blessed Hammer
  418. return NTA_DAMAGE_NONE;
  419.  
  420. switch(GetBaseStat("skills.txt", skillid, 233))
  421. {
  422. case "cold":
  423. return NTA_DAMAGE_COLD;
  424. case "fire":
  425. return NTA_DAMAGE_FIRE;
  426. case "ltng":
  427. return NTA_DAMAGE_LIGHTNING;
  428. case "mag":
  429. return NTA_DAMAGE_MAGIC;
  430. case "pois":
  431. return NTA_DAMAGE_POISON;
  432. case "stun":
  433. return NTA_DAMAGE_NONE;
  434. default:
  435. if(GetBaseStat("skills.txt", skillid, 178) || GetBaseStat("skills.txt", skillid, 182)) // aura or passive
  436. return NTA_DAMAGE_NONE;
  437. }
  438.  
  439. return NTA_DAMAGE_PHYSICAL;
  440. }
  441.  
  442. function NTA_GetResistance(enemy, type)
  443. {
  444. switch(type)
  445. {
  446. case NTA_DAMAGE_PHYSICAL:
  447. return enemy.GetStat(36);
  448. case NTA_DAMAGE_MAGIC:
  449. return enemy.GetStat(37);
  450. case NTA_DAMAGE_FIRE:
  451. return enemy.GetStat(39);
  452. case NTA_DAMAGE_LIGHTNING:
  453. return enemy.GetStat(41);
  454. case NTA_DAMAGE_COLD:
  455. return enemy.GetStat(43);
  456. case NTA_DAMAGE_POISON:
  457. return enemy.GetStat(45);
  458. }
  459.  
  460. return 0;
  461. }
  462.  
  463. function NTA_DetectAttackPattern()
  464. {
  465. switch(me.classid)
  466. {
  467. case NTC_CHAR_CLASS_AMAZON:
  468. return NTA_AmazonAttackPatternInt();
  469. case NTC_CHAR_CLASS_SORCERESS:
  470. return NTA_SorceressAttackPatternInt();
  471. case NTC_CHAR_CLASS_NECROMANCER:
  472. return NTA_NecromancerAttackPatternInt();
  473. case NTC_CHAR_CLASS_PALADIN:
  474. return NTA_PaladinAttackPatternInt();
  475. case NTC_CHAR_CLASS_BARBARIAN:
  476. return NTA_BarbarianAttackPatternInt();
  477. case NTC_CHAR_CLASS_DRUID:
  478. return NTA_DruidAttackPatternInt();
  479. case NTC_CHAR_CLASS_ASSASSIN:
  480. return NTA_AssassinAttackPatternInt();
  481. }
  482.  
  483. return false;
  484. }
  485.  
  486. // Return value : 0 = Unrecoverable process, 1 = Unavailable attack, 2 = Onetime fail, 3 = Success
  487. function NTA_Attack(target, firstorder)
  488. {
  489. switch(me.classid)
  490. {
  491. case NTC_CHAR_CLASS_AMAZON:
  492. return NTA_AmazonAttackInt(target, firstorder);
  493. case NTC_CHAR_CLASS_SORCERESS:
  494. return NTA_SorceressAttackInt(target, firstorder);
  495. case NTC_CHAR_CLASS_NECROMANCER:
  496. return NTA_NecromancerAttackInt(target, firstorder);
  497. case NTC_CHAR_CLASS_PALADIN:
  498. return NTA_PaladinAttackInt(target, firstorder);
  499. case NTC_CHAR_CLASS_BARBARIAN:
  500. return NTA_BarbarianAttackInt(target, firstorder);
  501. case NTC_CHAR_CLASS_DRUID:
  502. return NTA_DruidAttackInt(target, firstorder);
  503. case NTC_CHAR_CLASS_ASSASSIN:
  504. return NTA_AssassinAttackInt(target, firstorder);
  505. }
  506.  
  507. return 0;
  508. }
  509.  
  510. // Internal function
  511. function NTA_AmazonAttackPatternInt()
  512. {
  513. return false;
  514. }
  515.  
  516. function NTA_AmazonAttackInt(target, firstorder)
  517. {
  518. return 1;
  519. }
  520.  
  521. function NTA_AmazonCastSkillInt(index, target)
  522. {
  523. return false;
  524. }
  525.  
  526. function NTA_SorceressAttackPatternInt()
  527. {
  528. var _maxindex, _maxskill;
  529. var _avgskilllevel = new Array();
  530.  
  531. _avgskilllevel[0] = parseInt((me.GetSkill(59, false)+me.GetSkill(39, false)+me.GetSkill(45, false)+me.GetSkill(55, false))/4);
  532. _avgskilllevel[1] = parseInt((me.GetSkill(53, false)+me.GetSkill(38, false)+me.GetSkill(48, false)+me.GetSkill(49, false))/4);
  533. _avgskilllevel[2] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false)+me.GetSkill(64, false))/4);
  534. _avgskilllevel[3] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false))/3);
  535.  
  536. _maxindex = -1;
  537. _maxskill = 0;
  538.  
  539. for(var i = 0 ; i < _avgskilllevel.length ; i++)
  540. {
  541. if(_avgskilllevel[i] > _maxskill)
  542. {
  543. _maxindex = i;
  544. _maxskill = _avgskilllevel[i];
  545. }
  546. }
  547.  
  548. switch(_maxindex)
  549. {
  550. case 0: // Blizzard + Glacial Spike
  551. NTConfig_AttackSkill[1] = 59;
  552. NTConfig_AttackSkill[2] = 55;
  553. NTConfig_AttackSkill[3] = 59;
  554. NTConfig_AttackSkill[4] = 55;
  555. break;
  556. case 1: // Chain Lightning + Lightning
  557. NTConfig_AttackSkill[1] = 49;
  558. NTConfig_AttackSkill[3] = 53;
  559. break;
  560. case 2: // Fire Ball + Frozen Orb
  561. NTConfig_AttackSkill[0] = 64;
  562. NTConfig_AttackSkill[1] = 47;
  563. NTConfig_AttackSkill[3] = 47;
  564. NTConfig_AttackSkill[5] = 64;
  565. NTConfig_AttackSkill[6] = 55;
  566. break;
  567. case 3: // Fire Ball + Meteor
  568. NTConfig_AttackSkill[1] = 56;
  569. NTConfig_AttackSkill[2] = 47;
  570. NTConfig_AttackSkill[3] = 56;
  571. NTConfig_AttackSkill[4] = 47;
  572. break;
  573. }
  574.  
  575. return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
  576. }
  577.  
  578. function NTA_SorceressAttackInt(target, firstorder)
  579. {
  580. var _primaryindex;
  581.  
  582. if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
  583. {
  584. if(!NTTMGR_VisitTown())
  585. return 0;
  586. }
  587.  
  588. if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
  589. {
  590. if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
  591. {
  592. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
  593.  
  594. if(_pos)
  595. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  596. }
  597.  
  598. if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
  599. return 2;
  600.  
  601. return 3;
  602. }
  603.  
  604. if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80)
  605. {
  606. var _staticlevel = NTC_GetSkillLevel(42);
  607.  
  608. if(_staticlevel > 0)
  609. {
  610. var _staticrange;
  611. var _castx, _casty;
  612.  
  613. _staticrange = Math.floor((5+_staticlevel-1)*2/3);
  614.  
  615. if(GetDistance(me, target) > _staticrange || !CheckCollision(me, target, 6))
  616. {
  617. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _staticrange, 6);
  618.  
  619. if(_pos)
  620. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  621. }
  622.  
  623. if(target.x < me.x)
  624. _castx = me.x - 1;
  625. else if(target.x > me.x)
  626. _castx = me.x + 1;
  627. else
  628. _castx = me.x;
  629.  
  630. if(target.y < me.y)
  631. _casty = me.y - 1;
  632. else if(target.y > me.y)
  633. _casty = me.y + 1;
  634. else
  635. _casty = me.y;
  636.  
  637. if(!CheckCollision(target.areaid, _castx, _casty, 1))
  638. {
  639. _castx = me.x;
  640. _casty = me.y;
  641. }
  642.  
  643. if(!NTC_CastSkill(42, NTC_HAND_RIGHT, _castx, _casty))
  644. return 2;
  645.  
  646. return 3;
  647. }
  648. }
  649.  
  650. _primaryindex = (target.spectype&0x0A) ? 1 : 3;
  651.  
  652. if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) <= 90)
  653. {
  654. if(!NTA_SorceressCastSkillInt(_primaryindex, target))
  655. return 2;
  656.  
  657. return 3;
  658. }
  659.  
  660. if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) <= 80)
  661. {
  662. if(!NTA_SorceressCastSkillInt(5, target))
  663. return 2;
  664.  
  665. return 3;
  666. }
  667.  
  668. if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100 || (_primaryindex == 1 && NTC_GetMerc()))
  669. {
  670. if(!NTA_SorceressCastSkillInt(_primaryindex, target))
  671. return 2;
  672.  
  673. return 3;
  674. }
  675.  
  676. return 1;
  677. }
  678.  
  679. function NTA_SorceressCastSkillInt(index, target)
  680. {
  681. if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
  682. {
  683. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
  684. {
  685. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  686.  
  687. if(_pos)
  688. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  689. }
  690.  
  691. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
  692. }
  693.  
  694. if(NTConfig_AttackSkill[index+1] > 0)
  695. {
  696. if(GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4))
  697. {
  698. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);
  699.  
  700. if(_pos)
  701. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  702. }
  703.  
  704. return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
  705. }
  706.  
  707. for(var i = 0 ; i < 25 ; i++)
  708. {
  709. NTC_Delay(NTC_DELAY_FRAME);
  710.  
  711. if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
  712. break;
  713. }
  714.  
  715. return false;
  716. }
  717.  
  718. function NTA_NecromancerAttackPatternInt()
  719. {
  720. return false;
  721. }
  722.  
  723. function NTA_NecromancerAttackInt(target, firstorder)
  724. {
  725. return 1;
  726. }
  727.  
  728. function NTA_NecromancerCastSkillInt(index, target)
  729. {
  730. return false;
  731. }
  732.  
  733. function NTA_PaladinAttackPatternInt()
  734. {
  735. var _maxindex, _maxskill;
  736. var _avgskilllevel = new Array();
  737.  
  738. _avgskilllevel[0] = parseInt((me.GetSkill(112, false)+me.GetSkill(108, false)+me.GetSkill(115, false))/3);
  739. _avgskilllevel[1] = parseInt((me.GetSkill(106, false)+me.GetSkill(96, false))/2);
  740. _avgskilllevel[2] = parseInt((me.GetSkill(121, false)+me.GetSkill(101, false)+me.GetSkill(118, false))/3);
  741.  
  742. _maxindex = -1;
  743. _maxskill = 0;
  744.  
  745. for(var i = 0 ; i < _avgskilllevel.length ; i++)
  746. {
  747. if(_avgskilllevel[i] > _maxskill)
  748. {
  749. _maxindex = i;
  750. _maxskill = _avgskilllevel[i];
  751. }
  752. }
  753.  
  754. switch(_maxindex)
  755. {
  756. case 0: // Blessed Hammer
  757. NTConfig_AttackSkill[1] = 112;
  758. NTConfig_AttackSkill[2] = 113;
  759. NTConfig_AttackSkill[3] = 112;
  760. NTConfig_AttackSkill[4] = 113;
  761. NTConfig_AttackSkill[5] = 101;
  762. NTConfig_AttackSkill[6] = 113;
  763. break;
  764. case 1: // Zeal
  765. NTConfig_AttackSkill[1] = 106;
  766. NTConfig_AttackSkill[2] = 122;
  767. NTConfig_AttackSkill[3] = 106;
  768. NTConfig_AttackSkill[4] = 122;
  769. break;
  770. case 2: // Fist of the Heavens
  771. NTConfig_AttackSkill[1] = 121;
  772. NTConfig_AttackSkill[2] = 123;
  773. NTConfig_AttackSkill[3] = 121;
  774. NTConfig_AttackSkill[4] = 123;
  775. break;
  776. }
  777.  
  778. return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
  779. }
  780.  
  781. function NTA_PaladinAttackInt(target, firstorder)
  782. {
  783. var _primaryindex;
  784.  
  785. if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
  786. {
  787. if(!NTTMGR_VisitTown())
  788. return 0;
  789. }
  790.  
  791. if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
  792. {
  793. if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
  794. {
  795. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
  796.  
  797. if(_pos)
  798. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  799. }
  800.  
  801. if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
  802. return 2;
  803.  
  804. return 3;
  805. }
  806.  
  807. _primaryindex = (target.spectype&0x0A) ? 1 : 3;
  808.  
  809. if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
  810. {
  811. if(_NTA_SkillRange[_primaryindex] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
  812. return 1;
  813.  
  814. if(!NTA_PaladinCastSkillInt(_primaryindex, target))
  815. return 2;
  816.  
  817. return 3;
  818. }
  819.  
  820. if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
  821. {
  822. if(_NTA_SkillRange[5] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
  823. return 1;
  824.  
  825. if(!NTA_PaladinCastSkillInt(5, target))
  826. return 2;
  827.  
  828. return 3;
  829. }
  830.  
  831. return 1;
  832. }
  833.  
  834. function NTA_PaladinCastSkillInt(index, target)
  835. {
  836. if(NTConfig_AttackSkill[index] == 112)
  837. {
  838. if(me.x-target.x < 1 || me.x-target.x > 2 || me.y-target.y < 1 || me.y-target.y > 2)
  839. {
  840. if(CheckCollision(target.areaid, target.x+2, target.y+2, 1))
  841. NTM_MoveTo(target.areaid, target.x+2, target.y+2, 0);
  842. else if(me.x-target.x < -4 || me.x-target.x > 2 || me.y-target.y < 0 || me.y-target.y > 2)
  843. NTM_MoveTo(target.areaid, target.x-4, target.y, 0);
  844. }
  845. }
  846. else
  847. {
  848. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
  849. {
  850. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  851.  
  852. if(_pos)
  853. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  854. }
  855. }
  856.  
  857. if(NTConfig_AttackSkill[index+1] > 0)
  858. NTC_PutSkill(NTConfig_AttackSkill[index+1], NTC_HAND_RIGHT);
  859.  
  860. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
  861. }
  862.  
  863. function NTA_BarbarianAttackPatternInt()
  864. {
  865. var _maxindex, _maxskill;
  866. var _avgskilllevel = new Array();
  867.  
  868. _avgskilllevel[0] = me.GetSkill(151, false);
  869.  
  870. _maxindex = -1;
  871. _maxskill = 0;
  872.  
  873. for(var i = 0 ; i < _avgskilllevel.length ; i++)
  874. {
  875. if(_avgskilllevel[i] > _maxskill)
  876. {
  877. _maxindex = i;
  878. _maxskill = _avgskilllevel[i];
  879. }
  880. }
  881.  
  882. switch(_maxindex)
  883. {
  884. case 0: // Whirlwind
  885. NTConfig_AttackSkill[1] = 151;
  886. NTConfig_AttackSkill[3] = 151;
  887. NTConfig_AttackSkill[5] = 152;
  888. break;
  889. }
  890.  
  891. return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
  892. }
  893.  
  894. function NTA_BarbarianAttackInt(target, firstorder)
  895. {
  896. var _primaryindex;
  897.  
  898. if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
  899. {
  900. if(!NTTMGR_VisitTown())
  901. return 0;
  902. }
  903.  
  904. if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
  905. {
  906. if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
  907. {
  908. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
  909.  
  910. if(_pos)
  911. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  912. }
  913.  
  914. if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
  915. return 2;
  916.  
  917. return 3;
  918. }
  919.  
  920. _primaryindex = (target.spectype&0x0A) ? 1 : 3;
  921.  
  922. if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
  923. {
  924. if((_NTA_SkillRange[_primaryindex] < 4 || NTConfig_AttackSkill[_primaryindex] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
  925. return 1;
  926.  
  927. if(!NTA_BarbarianCastSkillInt(_primaryindex, target))
  928. return 2;
  929.  
  930. return 3;
  931. }
  932.  
  933. if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
  934. {
  935. if((_NTA_SkillRange[5] < 4 || NTConfig_AttackSkill[5] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
  936. return 1;
  937.  
  938. if(!NTA_BarbarianCastSkillInt(5, target))
  939. return 2;
  940.  
  941. return 3;
  942. }
  943.  
  944. return 1;
  945. }
  946.  
  947. function NTA_BarbarianCastSkillInt(index, target)
  948. {
  949. if(NTConfig_AttackSkill[index] == 151)
  950. {
  951. var _castx, _casty;
  952.  
  953. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 5))
  954. {
  955. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 5);
  956.  
  957. if(_pos)
  958. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  959. }
  960.  
  961. _castx = target.x > me.x ? target.x+3 : target.x-3;
  962. _casty = target.y > me.y ? target.y+3 : target.y-3;
  963.  
  964. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], _castx, _casty);
  965. }
  966.  
  967. if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
  968. {
  969. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  970.  
  971. if(_pos)
  972. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  973. }
  974.  
  975. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
  976. }
  977.  
  978. function NTA_DruidAttackPatternInt()
  979. {
  980. return false;
  981. }
  982.  
  983. function NTA_DruidAttackInt(target, firstorder)
  984. {
  985. return 1;
  986. }
  987.  
  988. function NTA_DruidCastSkillInt(index, target)
  989. {
  990. return false;
  991. }
  992.  
  993. function NTA_AssassinAttackPatternInt()
  994. {
  995. return false;
  996. }
  997.  
  998. function NTA_AssassinAttackInt(target, firstorder)
  999. {
  1000. return 1;
  1001. }
  1002.  
  1003. function NTA_AssassinCastSkillInt(index, target)
  1004. {
  1005. return false;
  1006. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement