Advertisement
Guest User

Untitled

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