Advertisement
Guest User

Untitled

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