is still for the potion finder im working on , as current setup the barb will use the potion find only when one or more monsters are around
he still wont attack the corpse when none are around , any ideas?
thanks
and heres the ntattack ive modded up sofar with NO errors
he still wont attack the corpse when none are around , any ideas?
thanks
and heres the ntattack ive modded up sofar with NO errors
Code:
const NTA_DAMAGE_NONE = 0;
const NTA_DAMAGE_PHYSICAL = 1;
const NTA_DAMAGE_MAGIC = 2;
const NTA_DAMAGE_FIRE = 3;
const NTA_DAMAGE_LIGHTNING = 4;
const NTA_DAMAGE_COLD = 5;
const NTA_DAMAGE_POISON = 6;
var _NTA_SkillHand = new Array(7);
var _NTA_SkillDamage = new Array(7);
var _NTA_SkillRange = new Array(7);
var _CurseState;
var _SpearCount = 0;
var _SumCount = 0;
var _SkeleCount = 0;
var _MageCount = 0;
var _SumBreak = 0;
var _sorcattack = 0;
function NTA_Initialize()
{
if(NTConfig_AttackSkill[1] == 0 || NTConfig_AttackSkill[3] == 0)
NTA_DetectAttackPattern();
for(var i = 0 ; i < 8 ; i++)
{
if(NTConfig_AttackSkill[i] > 0)
{
_NTA_SkillHand[i] = GetBaseStat("skills.txt", NTConfig_AttackSkill[i], 166) ? 2 : NTC_HAND_RIGHT;
_NTA_SkillDamage[i] = NTA_GetDamageType(NTConfig_AttackSkill[i]);
switch(NTConfig_AttackSkill[i])
{
case 280: // Normal Attack
_NTA_SkillRange[i] = 2;
break;
case 131: //potion find
_NTA_SkillRange[i] = 2;
break;
}
}
}
if(me.classid == NTC_CHAR_CLASS_ASSASSIN)
{
NTA_InitializeAssassinAttacks();
}
}
function NTA_InitializeAssassinAttacks()
{
// Find maximum range value for traps.
// No attacks should be set a high range value.
NTConfig_MinTrapRange = 999;
NTConfig_MinBossTrapRange = 999;
NTConfig_NumTraps = 0;
NTConfig_NumBossTrap = 0;
for(var i=0; i < 5; i++) {
if(NTConfig_TrapSet[i] > 0) {
// Find the lowest trap range
switch(NTConfig_TrapSet[i]) {
case 271: // Lightning Sentry
case 276: // Death Sentry
NTConfig_NumTraps++;
if(25 < NTConfig_MinTrapRange) // Trap range 25
NTConfig_MinTrapRange = 25;
break;
case 261: // Charged Bolt Sentry
NTConfig_NumTraps++;
if(10 < NTConfig_MinTrapRange) // Trap range 10
NTConfig_MinTrapRange = 10;
break;
case 262: // Wake of Fire
NTConfig_NumTraps++;
if(25 < NTConfig_MinTrapRange) // Trap range 25
NTConfig_MinTrapRange = 25;
break;
case 272: // Wake of Inferno
NTConfig_NumTraps++;
if(15 < NTConfig_MinTrapRange) // Trap range 15
NTConfig_MinTrapRange = 15;
break;
default: // User using invalid trap
// Do Nothing
break;
}
}
if(NTConfig_ActBossTrapSet[i] > 0) {
// Find the lowest trap range
switch(NTConfig_ActBossTrapSet[i]) {
case 271: // Lightning Sentry
case 276: // Death Sentry
NTConfig_NumBossTrap++;
if(25 < NTConfig_MinBossTrapRange) // Trap range 25
NTConfig_MinBossTrapRange = 25;
break;
case 261: // Charged Bolt Sentry
NTConfig_NumBossTrap++;
if(10 < NTConfig_MinBossTrapRange) // Trap range 10
NTConfig_MinBossTrapRange = 10;
break;
case 262: // Wake of Fire
NTConfig_NumBossTrap++;
if(25 < NTConfig_MinBossTrapRange) // Trap range 25
NTConfig_MinBossTrapRange = 25;
break;
case 272: // Wake of Inferno
NTConfig_NumBossTrap++;
if(15 < NTConfig_MinBossTrapRange) // Trap range 15
NTConfig_MinBossTrapRange = 15;
break;
default: // User using invalid trap
// Do Nothing
break;
}
}
}
}
function NTA_KillMonster(classid)
{
var _target;
if(NTConfig_AttackSkill[1] < 1)
return false;
_target = NTC_FindUnit(NTC_UNIT_MONSTER, classid, 5);
if(!_target)
return false;
if(_target.IsAttackable())
{
var _attackcount = 0;
while(_attackcount < 300 && NTA_IsValidMonster(_target))
{
if(NTA_Attack(_target, (_attackcount%30) == 0) < 2)
break;
_attackcount++;
_sorcattack++;
}
}
return (_target.hp <= 0 || _target.mode == 0 || _target.mode == 12);
}
function ReviveDead()
{
var _breaker=0;
_target = NTC_FindUnit(NTC_UNIT_MONSTER);
do
{
_skiplist = new Array();
if(_target.mode == 12 && !_target.GetState(96) && !_target.GetState(56) && (_target.spectype == 1 || _target.spectype == 17) && !_target.GetState(172) && !_target.GetState(173) && !_target.GetState(154) && _target.classid != 363 && _target.classid != 364 && _target.classid != 351 && _target.classid != 352 && _target.classid != 353)
{
if(_skiplist.indexOf(_target.gid) < 0)
{
if((GetDistance(me, _target) < 15))
{
var _pos = me.GetOptimalAttackPos(_target.areaid, _target.x, _target.y, 3, 4);
if(_pos)
{
NTM_MoveTo(_target.areaid, _pos[0], _pos[1], 0);
if(!NTC_CastSkill(95, NTC_HAND_RIGHT,_target.x+2,_target.y+1))
{
_breaker++;
_skiplist.push(_target.gid);
}
else
{
_breaker++;
}
}
}
else
_skiplist.push(_target.gid);
}
}
if (_breaker >= 1 || _target == null)
{
break;
_breaker = 0;
}
}
while(_target.GetNext());
}
function SkeleDead()
{
var _breaker=0;
_target = NTC_FindUnit(NTC_UNIT_MONSTER);
do
{
_skiplist = new Array();
if(_target.mode == 12 && !_target.GetState(96) && !_target.GetState(56) && (_target.spectype == 1 || _target.spectype == 17) && !_target.GetState(172) && !_target.GetState(173) && !_target.GetState(154) && _target.classid != 363 && _target.classid != 364 && _target.classid != 351 && _target.classid != 352 && _target.classid != 353)
{
if(_skiplist.indexOf(_target.gid) < 0)
{
if((GetDistance(me, _target) < 15))
{
var _pos = me.GetOptimalAttackPos(_target.areaid, _target.x, _target.y, 3, 4);
if(_pos)
{
NTM_MoveTo(_target.areaid, _pos[0], _pos[1], 0);
if(!NTC_CastSkill(70, NTC_HAND_RIGHT,_target.x+2,_target.y+1))
{
_breaker++;
_skiplist.push(_target.gid);
}
else
{
_breaker++;
_SkeleCount++;
_SumCount++;
}
}
}
else
_skiplist.push(_target.gid);
}
}
if (_breaker >= 1 || _target == null)
{
break;
_breaker = 0;
}
}
while(_target.GetNext());
}
function MageDead()
{
var _breaker=0;
_target = NTC_FindUnit(NTC_UNIT_MONSTER);
do
{
_skiplist = new Array();
if(_target.mode == 12 && !_target.GetState(96) && !_target.GetState(56) && (_target.spectype == 1 || _target.spectype == 17) && !_target.GetState(172) && !_target.GetState(173) && !_target.GetState(154) && _target.classid != 363 && _target.classid != 364 && _target.classid != 351 && _target.classid != 352 && _target.classid != 353)
{
if(_skiplist.indexOf(_target.gid) < 0)
{
if((GetDistance(me, _target) < 15))
{
var _pos = me.GetOptimalAttackPos(_target.areaid, _target.x, _target.y, 3, 4);
if(_pos)
{
NTM_MoveTo(_target.areaid, _pos[0], _pos[1], 0);
if(!NTC_CastSkill(80, NTC_HAND_RIGHT,_target.x+2,_target.y+1))
{
_breaker++;
_skiplist.push(_target.gid);
}
else
{
_breaker++;
_MageCount++;
_SumCount++;
}
}
}
else
_skiplist.push(_target.gid);
}
}
if (_breaker >= 1 || _target == null)
{
break;
_breaker = 0;
}
}
while(_target.GetNext());
}
function NTA_ClearPosition(range, pickitem, safelevel)
{
var _orgx, _orgy;
var _spectype = [0x0A, 0x01, 0x01];
var _skiplist;
var _attackcount = 0;
var _target;
var _distance, _mingid, _mindistance;
var _result;
var _sum = 0;
if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
return false;
switch(arguments.length)
{
case 0:
range = 20;
case 1:
pickitem = false;
case 2:
safelevel = 0;
default:
if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
safelevel = 0;
break;
}
_orgx = me.x;
_orgy = me.y;
for(var i = 0 ; i < _spectype.length ; i++)
{
_skiplist = new Array();
while(_attackcount < (i+1)*100)
{
_mindistance = 100000;
_target = NTC_FindUnit(NTC_UNIT_MONSTER);
if(_target)
{
do
{
if(_skiplist.indexOf(_target.gid) < 0)
{
if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
{
if(GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTA_IsValidMonster(_target))
{
_distance = GetDistance(me, _target);
if(_distance < _mindistance)
{
_mingid = _target.gid;
_mindistance = _distance;
}
}
}
else
_skiplist.push(_target.gid);
}
} while(_target.GetNext());
}
if(_mindistance < 100000)
{
_target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);
if(_target)
{
_result = NTA_Attack(_target, (_attackcount%30) == 0);
switch(_result)
{
case 1:
_skiplist.push(_mingid);
break;
case 2:
case 3:
_attackcount++;
_sorcattack++;
break;
default:
return false;
}
}
}
else
break;
}
}
if(me.classid == NTC_CHAR_CLASS_PALADIN)
{
if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
{
if(NTC_PutSkill(124, NTC_HAND_RIGHT))
NTC_PingDelay(1000);
}
}
if(NTConfig_UseFindItem && me.classid == NTC_CHAR_CLASS_BARBARIAN && _attackcount > 2)
{
if(!NTA_CheckForCloseMonsters(10))
{
//Print("ÿc<No Monsters close - looting");
NTA_FindItem(NTConfig_FindItemRange);
}
else
{
//Print("ÿc1Close Monster detected - clearing area");
if(recursion)
{
NTA_ClearPosition(15, false, 0, false);
NTA_FindItem(NTConfig_FindItemRange);
}
}
}
if(me.classid == NTC_CHAR_CLASS_NECROMANCER)
{
_SumBreak = 0;
if(_attackcount > 2)
{
NTC_CastSkill(68, NTC_HAND_RIGHT); // Bone Armor
if(_SkeleCount < NTConfig_Skele + 1 || _MageCount < NTConfig_Mage + 1)
{
if(_SkeleCount == _MageCount)
{
for(var i = 0 ; i < 5 ; i++)
{
SkeleDead();
}
}
else if(_SkeleCount > _MageCount || _SkeleCount > NTConfig_Skele + 1)
{
for(var i = 0 ; i < 5 ; i++)
{
MageDead();
}
}
else if(_MageCount > _SkeleCount || _SkeleMage > NTConfig_Mage + 1)
{
for(var i = 0 ; i < 5 ; i++)
{
SkeleDead();
}
}
}
else
{
if(_SumCount >= 200)
{
_SumCount = 30;
_SkeleCount = _SkeleCount - 3;
_MageCount = _MageCount - 3;
}
for(var i = 0 ; i < 10 ; i++)
{
ReviveDead();
}
}
}
}
if(NTConfig_OpenChest)
{
_target = NTC_GetSpecialChest();
if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTC_OpenChest(_target))
_attackcount++;
}
if(pickitem && _attackcount > 0)
NTSI_PickItems();
switch(safelevel)
{
case 1:
return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
case 2:
return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
}
return true;
}
function NTA_ClearLevel(pickitem, safelevel)
{
var i;
var _room, _rooms;
var _distance, _minindex, _mindistance;
_room = GetRoom();
if(!_room)
return false;
switch(arguments.length)
{
case 0:
pickitem = true;
case 1:
safelevel = 2;
default:
if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
safelevel = 0;
break;
}
_rooms = new Array();
do
{
_rooms.push([parseInt(_room.x*5 + _room.xsize*5/2), parseInt(_room.y*5 + _room.ysize*5/2)]);
} while(_room.GetNext());
while(_rooms.length > 0)
{
_mindistance = 100000;
for(i = 0 ; i < _rooms.length ; i++)
{
_distance = GetDistance(me.x, me.y, _rooms[i][0], _rooms[i][1]);
if(_distance < _mindistance)
{
_minindex = i;
_mindistance = _distance;
}
}
if(NTM_MoveTo(me.areaid, _rooms[_minindex][0], _rooms[_minindex][1], 1))
{
if(!NTA_ClearRoom(pickitem, safelevel))
return false;
NTP_DoPrecast(false);
}
_rooms.splice(_minindex, 1);
}
return true;
}
function NTA_ClearRoom(pickitem, safelevel)
{
var _room;
var _spectype = [0x0A, 0x01, 0x01];
var _skiplist;
var _attackcount = 0;
var _target;
var _distance, _mingid, _mindistance;
var _result;
if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
return false;
_room = me.GetRoom();
if(!_room)
return false;
switch(arguments.length)
{
case 0:
pickitem = false;
case 1:
safelevel = 0;
default:
if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
safelevel = 0;
break;
}
for(var i = 0 ; i < _spectype.length ; i++)
{
_skiplist = new Array();
while(_attackcount < (i+1)*100)
{
_mindistance = 100000;
_target = NTC_FindUnit(NTC_UNIT_MONSTER);
if(_target)
{
do
{
if(_skiplist.indexOf(_target.gid) < 0)
{
if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
{
if(_room.UnitInRoom(_target) && NTA_IsValidMonster(_target))
{
_distance = GetDistance(me, _target);
if(_distance < _mindistance)
{
_mingid = _target.gid;
_mindistance = _distance;
}
}
}
else
_skiplist.push(_target.gid);
}
} while(_target.GetNext());
}
if(_mindistance < 100000)
{
_target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);
if(_target)
{
_result = NTA_Attack(_target, (_attackcount%30) == 0);
switch(_result)
{
case 1:
_skiplist.push(_mingid);
break;
case 2:
case 3:
_attackcount++;
break;
default:
return false;
}
}
}
else
break;
}
}
if(me.classid == NTC_CHAR_CLASS_PALADIN)
{
if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
{
if(NTC_PutSkill(124, NTC_HAND_RIGHT))
NTC_PingDelay(1000);
}
}
if(NTConfig_UseFindItem && me.classid == NTC_CHAR_CLASS_BARBARIAN && _attackcount > 2)
{
if(!NTA_CheckForCloseMonsters(5))
{
//Print("ÿc<No Monsters close - looting");
NTA_FindItem(NTConfig_FindItemRange);
}
}
if(me.classid == NTC_CHAR_CLASS_NECROMANCER && _RevCount <= 25)
{
if(_attackcount > 2)
ReviveDead();
}
if(me.classid == NTC_CHAR_CLASS_NECROMANCER)
{
_SumBreak = 0;
if(_attackcount > 2)
{
NTC_CastSkill(68, NTC_HAND_RIGHT); // Bone Armor
if(_SkeleCount < NTConfig_Skele + 1 || _MageCount < NTConfig_Mage + 1)
{
if(_SkeleCount == _MageCount)
{
for(var i = 0 ; i < 5 ; i++)
{
SkeleDead();
}
}
else if(_SkeleCount > _MageCount || _SkeleCount > NTConfig_Skele + 1)
{
for(var i = 0 ; i < 5 ; i++)
{
MageDead();
}
}
else if(_MageCount > _SkeleCount || _SkeleMage > NTConfig_Mage + 1)
{
for(var i = 0 ; i < 5 ; i++)
{
SkeleDead();
}
}
}
else
{
if(_SumCount >= 200)
{
_SumCount = 30;
_SkeleCount = _SkeleCount - 3;
_MageCount = _MageCount - 3;
}
for(var i = 0 ; i < 10 ; i++)
{
ReviveDead();
}
}
}
}
if(pickitem && _attackcount > 0)
NTSI_PickItems();
switch(safelevel)
{
case 1:
return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
case 2:
return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
}
return true;
}
function NTA_IsValidMonster(monster)
{
var _classid;
if(monster.hp <= 0 || monster.mode == 0 || monster.mode == 12)
return false;
_classid = monster.classid;
if((me.areaid == 108) && ((7759 <= me.x <= 7761) && (me.y == 5267)) && GetDistance(me.x,me.y,monster.x,monster.y) <= 10 )
return false;
if (_classid >= 419 && _classid <= 427)
return false;
if(monster.name == GetLocaleString(3162) && GetDistance(me.x,me.y,monster.x,monster.y) <= 25 )
if(!CheckCollision(me.areaid, monster.x, monster.y, 0) || !CheckCollision(me.areaid, monster.x, monster.y, 1) || !CheckCollision(me.areaid, monster.x, monster.y, 5))
return false;
if(monster.hp <= 0 || monster.mode == 0 || monster.mode == 12)
return false;
if(((_classid >= 110 && _classid <= 113) || _classid == 608) && monster.mode == 8) // ignore flying scavengers
return false;
if(_classid == 68 && monster.mode == 14) // ignore burrowing maggots
return false;
if(_classid >= 258 && _classid <= 263 && monster.mode == 14) // ignore submerged WaterWatchers
return false;
if(monster.GetState(53) || monster.GetState(96)) // Conversion, Revive
return false;
if(me.classid == NTC_CHAR_CLASS_DRUID)
{
if(!me.GetState(144))
NTC_CastSkill(250, NTC_HAND_RIGHT);
if(!me.GetState(151))
NTC_CastSkill(235, NTC_HAND_RIGHT);
if(!me.GetState(149))
NTC_CastSkill(226, NTC_HAND_RIGHT);
}
if(me.classid == NTC_CHAR_CLASS_NECROMANCER)
{
if(!me.GetState(14))
NTC_CastSkill(68, NTC_HAND_RIGHT)
}
return true;
}
function NTA_GetDamageType(skillid)
{
if(skillid == 74) // Corpse Explosion
return NTA_DAMAGE_PHYSICAL;
if(skillid == 112) // Blessed Hammer
return NTA_DAMAGE_NONE;
switch(GetBaseStat("skills.txt", skillid, 233))
{
case "cold":
return NTA_DAMAGE_COLD;
case "fire":
return NTA_DAMAGE_FIRE;
case "ltng":
return NTA_DAMAGE_LIGHTNING;
case "mag":
return NTA_DAMAGE_MAGIC;
case "pois":
return NTA_DAMAGE_POISON;
case "stun":
return NTA_DAMAGE_NONE;
default:
if(GetBaseStat("skills.txt", skillid, 178) || GetBaseStat("skills.txt", skillid, 182)) // aura or passive
return NTA_DAMAGE_NONE;
}
return NTA_DAMAGE_PHYSICAL;
}
function NTA_GetResistance(enemy, type)
{
switch(type)
{
case NTA_DAMAGE_PHYSICAL:
return enemy.GetStat(36);
case NTA_DAMAGE_MAGIC:
return enemy.GetStat(37);
case NTA_DAMAGE_FIRE:
return enemy.GetStat(39);
case NTA_DAMAGE_LIGHTNING:
return enemy.GetStat(41);
case NTA_DAMAGE_COLD:
return enemy.GetStat(43);
case NTA_DAMAGE_POISON:
return enemy.GetStat(45);
}
return 0;
}
function NTA_DetectAttackPattern()
{
switch(me.classid)
{
case NTC_CHAR_CLASS_AMAZON:
return NTA_AmazonAttackPatternInt();
case NTC_CHAR_CLASS_SORCERESS:
return NTA_SorceressAttackPatternInt();
case NTC_CHAR_CLASS_NECROMANCER:
return NTA_NecromancerAttackPatternInt();
case NTC_CHAR_CLASS_PALADIN:
return NTA_PaladinAttackPatternInt();
case NTC_CHAR_CLASS_BARBARIAN:
return NTA_BarbarianAttackPatternInt();
case NTC_CHAR_CLASS_DRUID:
return NTA_DruidAttackPatternInt();
case NTC_CHAR_CLASS_ASSASSIN:
return NTA_AssassinAttackPatternInt();
}
return false;
}
// Return value : 0 = Unrecoverable process, 1 = Unavailable attack, 2 = Onetime fail, 3 = Success
function NTA_Attack(target, firstorder)
{
switch(me.classid)
{
case NTC_CHAR_CLASS_AMAZON:
return NTA_AmazonAttackInt(target, firstorder);
case NTC_CHAR_CLASS_SORCERESS:
return NTA_SorceressAttackInt(target, firstorder);
case NTC_CHAR_CLASS_NECROMANCER:
return NTA_NecromancerAttackInt(target, firstorder);
case NTC_CHAR_CLASS_PALADIN:
return NTA_PaladinAttackInt(target, firstorder);
case NTC_CHAR_CLASS_BARBARIAN:
return NTA_BarbarianAttackInt(target, firstorder);
case NTC_CHAR_CLASS_DRUID:
return NTA_DruidAttackInt(target, firstorder);
case NTC_CHAR_CLASS_ASSASSIN:
return NTA_AssassinAttackInt(target, firstorder);
}
return 0;
}
function NTA_IsWeaponBroken()
{
var _weapon;
_weapon = me.GetItems();
if(_weapon)
{
for(var i = 0 ; i < _weapon.length ; i++)
{
if(_weapon[i].itemflag&0x100)
{
if(_weapon[i].mode == 1 && _weapon[i].itemloc == 4 || _weapon[i].itemloc == 5)
{
Print("ÿc8My weapon broke, I am going to town to repair it.")
NTTMGR_VisitTown();
NTTMGR_TownManager();
break;
}
}
}
}
}
function NTA_HaveArrows()
{
var _weapon;
var _haveAmmo = false;
_weapon = me.GetItems();
if(_weapon)
{
for(var i = 0 ; i < _weapon.length ; i++)
{
if((_weapon[i].classid == 526 || _weapon[i].classid == 528) && _weapon[i].itemloc == 5)
{
if(_weapon[i].GetStat(70) < 10)
{
Print("ÿc8I'm low on "+ _weapon[i].name + ", I am going to town to buy more.")
NTTMGR_VisitTown();
NTTMGR_TownManager();
}
_haveAmmo = true;
break;
}
}
}
if(!_haveAmmo)
{
Print("ÿc8I have no ammo, I am going to town to buy some.")
NTTMGR_VisitTown();
NTTMGR_TownManager();
}
}
// Internal function
function NTA_AmazonAttackPatternInt()
{
var _maxindex, _maxskill;
var _avgskilllevel = new Array();
_avgskilllevel[0] = me.GetSkill(35, false);
_avgskilllevel[1] = parseInt((me.GetSkill(31, false) + me.GetSkill(11, false) + me.GetSkill(21, false)) /3 );
_avgskilllevel[2] = me.GetSkill(26, false);
_maxindex = -1;
_maxskill = 0;
for(var i = 0 ; i < _avgskilllevel.length ; i++)
{
if(_avgskilllevel[i] > _maxskill)
{
_maxindex = i;
_maxskill = _avgskilllevel[i];
}
}
switch(_maxindex)
{
case 0: // Lightning Fury for Javazon
NTConfig_AttackSkill[1] = 35;
NTConfig_AttackSkill[2] = 35;
NTConfig_AttackSkill[3] = 35;
NTConfig_AttackSkill[4] = 35;
NTConfig_AttackSkill[5] = 35;
NTConfig_AttackSkill[6] = 35;
NTConfig_AttackSkill[7] = 24;
break;
case 1: // Freezing Arrow for Bowzon
NTConfig_AttackSkill[1] = 31;
NTConfig_AttackSkill[2] = 31;
NTConfig_AttackSkill[3] = 31;
NTConfig_AttackSkill[4] = 31;
NTConfig_AttackSkill[5] = 31;
NTConfig_AttackSkill[6] = 31;
NTConfig_AttackSkill[7] = 31;
break;
case 2: // Cold Arrow + Strafe for Bowzon
NTConfig_AttackSkill[0] = 11;
NTConfig_AttackSkill[1] = 26;
NTConfig_AttackSkill[2] = 26;
NTConfig_AttackSkill[3] = 26;
NTConfig_AttackSkill[4] = 26;
NTConfig_AttackSkill[5] = 26;
NTConfig_AttackSkill[6] = 26;
NTConfig_AttackSkill[7] = 22;
break;
}
return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}
function NTA_AmazonAttackInt(target, firstorder)
{
var _primaryindex;
if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
{
if(!NTTMGR_VisitTown())
return 0;
}
if(me.GetSkill(12, false) >= 1)
NTA_HaveArrows();
else
NTA_IsWeaponBroken();
if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
{
if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
return 2;
return 3;
}
_primaryindex = (target.spectype&0x0A) ? 1 : 3;
switch(target.classid)
{
case 243://Diablo
case 544://Baal
case 242:
if(!NTA_AmazonCastSkillInt(7, target))
return 2;
return 3;
default:
break;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) <= 90)
{
if(!NTA_AmazonCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) > 80)
{
if(!NTA_AmazonCastSkillInt(5, target))
return 2;
return 3;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100 || (_primaryindex == 1 && NTC_GetMerc()))
{
if(!NTA_AmazonCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
return 1;
}
function NTA_AmazonCastSkillInt(index, target)
{
if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index], NTC_HAND_LEFT, target);
if(NTConfig_AttackSkill[index+1] > 0)
{
if(GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
}
}
function NTA_SorceressAttackPatternInt()
{
var _maxindex, _maxskill;
var _avgskilllevel = new Array();
_avgskilllevel[0] = parseInt((me.GetSkill(59, false)+me.GetSkill(39, false)+me.GetSkill(45, false)+me.GetSkill(55, false))/4);
_avgskilllevel[1] = parseInt((me.GetSkill(53, false)+me.GetSkill(38, false)+me.GetSkill(48, false)+me.GetSkill(49, false))/4);
_avgskilllevel[2] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false)+me.GetSkill(64, false))/4);
_avgskilllevel[3] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false))/3);
_maxindex = -1;
_maxskill = 0;
for(var i = 0 ; i < _avgskilllevel.length ; i++)
{
if(_avgskilllevel[i] > _maxskill)
{
_maxindex = i;
_maxskill = _avgskilllevel[i];
}
}
switch(_maxindex)
{
case 0: // Blizzard + Glacial Spike
NTConfig_AttackSkill[1] = 59;
NTConfig_AttackSkill[2] = 55;
NTConfig_AttackSkill[3] = 59;
NTConfig_AttackSkill[4] = 55;
break;
case 1: // Chain Lightning + Lightning
NTConfig_AttackSkill[1] = 49;
NTConfig_AttackSkill[3] = 53;
break;
case 2: // Fire Ball + Frozen Orb
NTConfig_AttackSkill[0] = 64;
NTConfig_AttackSkill[1] = 47;
NTConfig_AttackSkill[3] = 47;
NTConfig_AttackSkill[5] = 64;
NTConfig_AttackSkill[6] = 55;
break;
case 3: // Fire Ball + Meteor
NTConfig_AttackSkill[1] = 56;
NTConfig_AttackSkill[2] = 47;
NTConfig_AttackSkill[3] = 56;
NTConfig_AttackSkill[4] = 47;
break;
}
return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}
function NTA_SorceressAttackInt(target, firstorder)
{
var _primaryindex;
var _attackSkill;
if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
{
if(!NTTMGR_VisitTown())
return 0;
}
if(firstorder && NTConfig_AttackSkill[0] > -1 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
{
if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
return 2;
return 3;
}
if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80 && (target.name == "Mephisto" || target.name == "Andariel" || target.name == "Duriel" ||target.name == "Diablo" || target.name == "Baal"))
{
var _staticlevel = NTC_GetSkillLevel(42);
if(_staticlevel > 0)
{
var _staticrange;
var _castx, _casty;
_staticrange = Math.floor((5+_staticlevel-1)*2/3);
if(GetDistance(me, target) > _staticrange || !CheckCollision(me, target, 6))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _staticrange, 6);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(target.x < me.x)
_castx = me.x - 1;
else if(target.x > me.x)
_castx = me.x + 1;
else
_castx = me.x;
if(target.y < me.y)
_casty = me.y - 1;
else if(target.y > me.y)
_casty = me.y + 1;
else
_casty = me.y;
if(!CheckCollision(target.areaid, _castx, _casty, 1))
{
_castx = me.x;
_casty = me.y;
}
if(!NTC_CastSkill(42, NTC_HAND_RIGHT, _castx, _casty))
return 2;
return 3;
}
}
_primaryindex = (target.spectype&0x0A) ? 1 : 3;
_attackSkill = NTA_GetAttackType(target, _primaryindex, 91, 81, 81); // delete
if(NTConfig_AttackSkill[_attackSkill] > -1)
{
if(!NTA_SorceressCastSkillInt(_attackSkill, target, _primaryindex))
return 2;
return 3;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100 || (_primaryindex == 1 && NTC_GetMerc()))
{
if(!NTA_SorceressCastSkillInt(_primaryindex, target, _primaryindex))
return 2;
return 3;
}
return 1;
}
function NTA_SorceressCastSkillInt(index, target, primaryIndex)
{
var secondarySkill = 0;
_haveCL = NTC_GetSkillLevel(53); // check to see if we even have CL
_havetele = NTC_GetSkillLevel(54);
if(_sorcattack >= 20)
_sorcattack = 0;
if(_havetele && NTConfig_DancingSorc)
{
NTTMGR_CheckSafe(false, 0x01); // revive merc
if((NTA_CheckMyHp() || ((target.GetState(28) <= 0) && NTA_CheckMercInfinity())) || (_sorcattack%NTConfig_AttackJump) == 0)
{
if(target.GetState(28) <= 0){Print("ÿc;target not convicted");Print("ÿc;let's dance");}
NTA_Bounce(target);
}
}
if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
{
if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(target.name == "Baal" && NTConfig_AttackSkill[10] > -1 )
return NTC_CastSkill(NTConfig_AttackSkill[10], _NTA_SkillHand[10], target);
if((target.name == "Mephisto" || target.name == "Andariel" || target.name == "Duriel" || target.name == "Diablo") && NTConfig_AttackSkill[9] > -1 && target.name != "Baal")
return NTC_CastSkill(NTConfig_AttackSkill[9], _NTA_SkillHand[9], target);
if(target.name == "Duriel" && NTConfig_UseColdOnDury)
{
if(NTConfig_UseOrb)
{
return (NTC_CastSkill(64, NTC_HAND_LEFT, target))
}
if(NTConfig_UseBlizz)
{
return (NTC_CastSkill(59, NTC_HAND_LEFT, target))
}
}
if(NTConfig_ChainLightOnLightImmunes && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) >= 90 && _haveCL > 0)
{
return(NTC_CastSkill(53, NTC_HAND_LEFT, target))
}
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}
secondarySkill = NTA_GetAttackType (target, primaryIndex+1, 81, 81, 81); // delete
if(NTConfig_AttackSkill[secondarySkill] > -1)
{
if(GetDistance(me, target) > _NTA_SkillRange[secondarySkill] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[secondarySkill], _NTA_SkillHand[secondarySkill], target);
}
for(var i = 0 ; i < 25 ; i++)
{
NTC_Delay(NTC_DELAY_FRAME);
if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
break;
}
return false;
}
function NTA_NecromancerAttackPatternInt()
{
var _maxindex, _maxskill;
var _avgskilllevel = new Array();
_avgskilllevel[0] = me.GetSkill(84, fasle);
_maxindex = -1;
_maxskill = 0;
for(var i = 0 ; i < _avgskilllevel.length ; i++)
{
if(_avgskilllevel[i] > _maxskill)
{
_maxindex = i;
_maxskill = _avgskilllevel[i];
}
}
switch(_maxindex)
{
case 0:
NTConfig_AttackSkill[0] = 84;
NTConfig_AttackSkill[1] = 84;
NTConfig_AttackSkill[3] = 84;
break;
}
return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}
function GetCurseState(skillid)
{
if(NTConfig_Curse == 66)
return 9;
if(NTConfig_Curse == 71)
return 23;
if(NTConfig_Curse == 76)
return 55;
if(NTConfig_Curse == 77)
return 56;
if(NTConfig_Curse == 81)
return 59;
if(NTConfig_Curse == 82)
return 58;
if(NTConfig_Curse == 86)
return 57;
if(NTConfig_Curse == 87)
return 60;
if(NTConfig_Curse == 91)
return 61;
}
function NTA_NecromancerAttackInt(target, firstorder)
{
var _primaryindex;
if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
{
if(!NTTMGR_VisitTown())
return 0;
}
if(!target.GetState(GetCurseState()))
NTC_CastSkill(NTConfig_Curse, NTC_HAND_RIGHT, target)
if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
{
if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
}
_primaryindex = (target.spectype&0x0A) ? 1 : 3;
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) <= 90)
{
if(!NTA_NecromancerCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) <= 80)
{
if(_SpearCount < 6 && target.name == "Achmel the Cursed" )
{
if(_SpearCount < 1)
NTM_WalkTo(me.x+3, me.y);
NTC_CastSkill(67, NTC_HAND_RIGHT, target);
_SpearCount++;
//Print(_SpearCount);
}
else if(target.name == "Horadrim Ancient")
{
NTM_MoveTo(target.areaid, target.x, target.y, 0);
NTC_PingDelay(1000);
}
else
{
NTA_NecromancerCastSkillInt(5, target)
return 2;
}
return 3;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100 || (_primaryindex == 1 && NTC_GetMerc()))
{
if(!NTA_NecromancerCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
return 1;
}
function NTA_NecromancerCastSkillInt(index, target)
{
if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
{
if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}
if(NTConfig_AttackSkill[index+1] > 0)
{
if(GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
}
for(var i = 0 ; i < 25 ; i++)
{
NTC_Delay(NTC_DELAY_FRAME);
if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
break;
}
return false;
}
function NTA_PaladinAttackPatternInt()
{
var _maxindex, _maxskill;
var _avgskilllevel = new Array();
_avgskilllevel[0] = parseInt((me.GetSkill(112, false)+me.GetSkill(108, false)+me.GetSkill(115, false))/3);
_avgskilllevel[1] = parseInt((me.GetSkill(106, false)+me.GetSkill(96, false))/2);
_avgskilllevel[2] = parseInt((me.GetSkill(121, false)+me.GetSkill(101, false)+me.GetSkill(118, false))/3);
_maxindex = -1;
_maxskill = 0;
for(var i = 0 ; i < _avgskilllevel.length ; i++)
{
if(_avgskilllevel[i] > _maxskill)
{
_maxindex = i;
_maxskill = _avgskilllevel[i];
}
}
_maxindex = 0;
switch(_maxindex)
{
case 0: // Blessed Hammer
NTConfig_AttackSkill[1] = 112;
NTConfig_AttackSkill[2] = 113;
NTConfig_AttackSkill[3] = 112;
NTConfig_AttackSkill[4] = 113;
NTConfig_AttackSkill[5] = 101;
NTConfig_AttackSkill[6] = 113;
break;
case 1: // Zeal
NTConfig_AttackSkill[1] = 106;
NTConfig_AttackSkill[2] = 122;
NTConfig_AttackSkill[3] = 106;
NTConfig_AttackSkill[4] = 122;
break;
case 2: // Fist of the Heavens
NTConfig_AttackSkill[1] = 121;
NTConfig_AttackSkill[2] = 123;
NTConfig_AttackSkill[3] = 121;
NTConfig_AttackSkill[4] = 123;
break;
}
return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}
function NTA_PaladinAttackInt(target, firstorder)
{
var _primaryindex;
if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
{
if(!NTTMGR_VisitTown())
return 0;
}
if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, NTA_DAMAGE_MAGIC) < 100)
{
if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
return 2;
return 3;
}
_primaryindex = (target.spectype&0x0A) ? 1 : 3;
if(NTA_GetResistance(target, NTA_DAMAGE_MAGIC) < 100)
{
if(_NTA_SkillRange[_primaryindex] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
return 1;
if(!NTA_PaladinCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, NTA_DAMAGE_MAGIC) >= 100)
{
if(_NTA_SkillRange[5] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
return 1;
if(!NTA_PaladinCastSkillInt(5, target))
return 2;
return 3;
}
return 1;
}
function NTA_PaladinCastSkillInt(index, target)
{
if(NTConfig_AttackSkill[index] == 112)
{
if(me.x-target.x < 1 || me.x-target.x > 2 || me.y-target.y < 1 || me.y-target.y > 2)
{
if(CheckCollision(target.areaid, target.x+2, target.y+2, 1))
NTM_MoveTo(target.areaid, target.x+2, target.y+2, 0);
else if(me.x-target.x < -4 || me.x-target.x > 2 || me.y-target.y < 0 || me.y-target.y > 2)
NTM_MoveTo(target.areaid, target.x-4, target.y, 0);
}
}
else
{
if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
}
if(NTConfig_AttackSkill[index+1] > 0)
NTC_PutSkill(NTConfig_AttackSkill[index+1], NTC_HAND_RIGHT);
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}
function NTA_BarbarianAttackPatternInt()
{
var _maxindex, _maxskill;
var _avgskilllevel = new Array();
_avgskilllevel[0] = me.GetSkill(151, false);
_maxindex = -1;
_maxskill = 0;
for(var i = 0 ; i < _avgskilllevel.length ; i++)
{
if(_avgskilllevel[i] > _maxskill)
{
_maxindex = i;
_maxskill = _avgskilllevel[i];
}
}
switch(_maxindex)
{
case 0: // Whirlwind
NTConfig_AttackSkill[1] = 151;
NTConfig_AttackSkill[3] = 151;
NTConfig_AttackSkill[5] = 152;
break;
}
return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}
function NTA_BarbarianAttackInt(target, firstorder)
{
var _primaryindex;
if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
{
if(!NTTMGR_VisitTown())
return 0;
}
if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
{
if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
return 2;
return 3;
}
_primaryindex = (target.spectype&0x0A) ? 1 : 3;
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
{
if((_NTA_SkillRange[_primaryindex] < 4 || NTConfig_AttackSkill[_primaryindex] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
return 1;
if(!NTA_BarbarianCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
{
if((_NTA_SkillRange[5] < 4 || NTConfig_AttackSkill[5] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
return 1;
if(!NTA_BarbarianCastSkillInt(5, target))
return 2;
return 3;
}
return 1;
}
function NTA_BarbarianCastSkillInt(index, target)
{
if(NTConfig_AttackSkill[index] == 151)
{
var _castx, _casty;
if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 5))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 5);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
_castx = target.x > me.x ? target.x+3 : target.x-3;
_casty = target.y > me.y ? target.y+3 : target.y-3;
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], _castx, _casty);
}
if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}
function NTA_DruidAttackInt(target, firstorder)
{
var _primaryindex;
if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
{
if(!NTTMGR_VisitTown())
return 0;
}
if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
{
if(GetDistance(me, target) > NTConfig_AttackSkill[0] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
return 2;
return 3;
}
_primaryindex = (target.spectype&0x0A) ? 1 : 3;
if(me.GetSkill(245, true) > 1)
if(target.name == "Andariel" || target.name == "Baal" || target.name == "Mephisto" || target.name == "Diablo")
{
if(!NTA_DruidCastSkillIntNear(_primaryindex, target))
return 2;
return 3;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) <= 90)
{
if(!NTA_DruidCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) <= 80)
{
if(!NTA_DruidCastSkillInt(5, target))
return 2;
return 3;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[index]) < 100 || (_primaryindex == 1 && NTC_GetMerc()))
{
if(!NTA_DruidCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
return 1;
}
function NTA_DruidCastSkillIntNear(index, target)
{
if(GetDistance(me, target) > 3 || !CheckCollision(me, target, 4))
NTM_MoveTo(target.areaid, target.x, target.y, 0);
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
if(NTConfig_AttackSkill[index+1] > 0)
{
if(GetDistance(me, target) > 3 || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, 3, 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
}
}
function NTA_DruidCastSkillInt(index, target)
{
if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(!me.GetState(139))
NTC_CastSkill(223, NTC_HAND_RIGHT) // Werewolf
else if(!me.GetState(140))
NTC_CastSkill(228, NTC_HAND_RIGHT) // Werebear
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
if(NTConfig_AttackSkill[index+1] > 0)
{
if(GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
}
}
function NTA_AssassinAttackPatternInt()
{
return false;
}
function NTA_AssassinAttackInt(target, firstorder)
{
var _primaryindex;
var _attackIndex;
var _skillCasted = 0;
if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
{
if(!NTTMGR_VisitTown())
return 0;
}
if(firstorder && NTConfig_AttackSkill[0] > -1 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
{
if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
return 2;
return 3;
}
if(NTConfig_UseTraps)
NTA_CheckTraps(target);
_primaryindex = (target.spectype&0x0A) ? 1 : 3;
_attackIndex = NTA_GetAttackType(target, _primaryindex, 91, 81, 81);
if(NTConfig_AttackSkill[_attackIndex] > -1 )
{
_skillCasted = _attackIndex;
if(_NTA_SkillRange[_attackIndex] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
return 1;
if(!NTA_AssassinCastSkillInt(_attackIndex, target, _primaryindex))
return 2;
return 3;
}
if(NTConfig_UseTraps) {
if(_skillCasted == 0)
NTC_Delay(NTConfig_AttackSkill);
return 3;
}
return 1;
}
function NTA_AssassinCastSkillInt(index, target, primaryIndex)
{
var secondarySkill = 0;
if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
{
if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}
secondarySkill = NTA_GetAttackType (target, primaryIndex+1, 81, 81, 81);
if(NTConfig_AttackSkill[secondarySkill] > -1)
{
if(GetDistance(me, target) > _NTA_SkillRange[secondarySkill] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[secondarySkill], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[secondarySkill], _NTA_SkillHand[secondarySkill], target);
}
for(var i = 0 ; i < 25 ; i++)
{
NTC_Delay(NTC_DELAY_FRAME);
if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
break;
}
return false;
}
function NTA_CheckTraps(target)
{
var traps=NTC_FindUnit(NTC_UNIT_MONSTER);
var trapcount =0;
//var warr=0;
var x,y;
var parent;
var _isActBoss = false;
var _trapOffset;
// || target.name == GetLocaleString(3021) - Andariel
if(target.name == GetLocaleString(3062) || target.name == GetLocaleString(3054)
|| target.name == GetLocaleString(3060) || target.name == GetLocaleString(3061))
_isActBoss = true;
if (traps){
do{
if (traps.classid == 412 || traps.classid == 413 || traps.classid == 416 || traps.classid == 417){
parent = traps.GetParent();
if(parent != null && parent.name == me.name) {
if(GetDistance(target.x,target.y,traps.x,traps.y)< (_isActBoss?NTConfig_MinBossTrapRange:NTConfig_MinTrapRange) && traps.hp > 100 ) {
trapcount=trapcount+1;
}
}
}
/*if ((traps.classid == 418 || traps.classid == 419) && traps.mode == 12){ // apparently 417/418 are warrior/master. commented out for now
warr=1;
}*/
}while(traps.GetNext())
if (trapcount < (_isActBoss?NTConfig_NumBossTrap:NTConfig_NumTraps) && target.hp>0){
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, 13, 10);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
_trapOffset = NTA_GetTrapAttackPattern(_isActBoss);
for(var i=0; i < 5; i++) {
if(NTConfig_TrapSet[i] > 0) {
if(i == 0 || i == 2 || i == 3) // Added delays to prevent trap miscast
NTC_Delay(25);
NTC_CastSkill((_isActBoss?NTConfig_TrapSet[0]:NTConfig_TrapSet[i]), NTC_HAND_RIGHT, target.x + _trapOffset[i][0], target.y + _trapOffset[i][1]);
}
}
}
/*if (warr!=0)
NTP_DoPrecast(false);*/
}
}
function NTA_GetTrapAttackPattern(isActBoss) {
var _attackPattern = new Array(5);
var _bossOffset = 1;
if(NTConfig_TrapAttackPattern == 1) { // Pentagram
_attackPattern[0] = [-2 - (isActBoss?_bossOffset:0), -2 - (isActBoss?_bossOffset:0)];
_attackPattern[1] = [0, 2 + (isActBoss?_bossOffset:0)];
_attackPattern[2] = [2 + (isActBoss?_bossOffset:0), -2 - (isActBoss?_bossOffset:0)];
_attackPattern[3] = [-3 - (isActBoss?_bossOffset:0), 1 + (isActBoss?_bossOffset:0)];
_attackPattern[4] = [3 + (isActBoss?_bossOffset:0), 1 + (isActBoss?_bossOffset:0)];
}
else if(NTConfig_TrapAttackPattern == 2) { // X - axis
_attackPattern[0] = [0, 0];
_attackPattern[1] = [1 + (isActBoss?_bossOffset:0), 0];
_attackPattern[2] = [-1 - (isActBoss?_bossOffset:0), 0];
_attackPattern[3] = [2 + (isActBoss?_bossOffset:0), 0];
_attackPattern[4] = [-2 - (isActBoss?_bossOffset:0), 0];
}
else if(NTConfig_TrapAttackPattern == 3) { // Y - axis
_attackPattern[0] = [0, 0];
_attackPattern[1] = [0, 1 + (isActBoss?_bossOffset:0)];
_attackPattern[2] = [0, -1 - (isActBoss?_bossOffset:0)];
_attackPattern[3] = [0, 2 + (isActBoss?_bossOffset:0)];
_attackPattern[4] = [0, -2 - (isActBoss?_bossOffset:0)];
}
else { // quincunx
_attackPattern[0] = [2 + (isActBoss?_bossOffset:0), 2 + (isActBoss?_bossOffset:0)];
_attackPattern[1] = [-2 - (isActBoss?_bossOffset:0), -2 - (isActBoss?_bossOffset:0)];
_attackPattern[2] = [-2 - (isActBoss?_bossOffset:0), 2 + (isActBoss?_bossOffset:0)];
_attackPattern[3] = [2 + (isActBoss?_bossOffset:0), -2 - (isActBoss?_bossOffset:0)];
_attackPattern[4] = [0, 0];
}
return _attackPattern;
}
function NTA_CheckMercInfinity()
{
var _weapon, _merc;
var Merc_HaveInfinty = false;
_merc = NTC_GetMerc();
if(!_merc)
{
{
//Print("ÿc8merc is dead or not hired");
}
return false;
}
if(_merc && _merc.hp > 0 && _merc.mode != 0 && _merc.mode != 12)
{
_weapon = _merc.GetItems();
if(_weapon){
for(var i = 0 ; i < _weapon.length && !Merc_HaveInfinty ; i++){
if((_weapon[i].itemflag&0x4000000) && _weapon[i].itemprefix == 20566){
Merc_HaveInfinty = true;
{
//Print("ÿc8merc has infinity");
}
return true;
}
}
}
}
if(!Merc_HaveInfinty)
{
// Print("ÿc8merc has no infinity");
return false;
}
}
function NTA_CheckMyHp()
{
_LifeMax = me.hpmax;
_ManaMax = me.mpmax;
if(NTConfig_DanceStartHp > 0 || NTConfig_DanceStartMp > 0)
{
if(parseInt(me.hp*100/_LifeMax) < NTConfig_DanceStartHp || parseInt(me.mp*100/_ManaMax) < NTConfig_DanceStartMp)
{
return true;
}
}
else
return false;
}
function NTA_Bounce(target)
{
if (me.x - target.x >= 0 && me.y - target.y >= 0)
NTC_CastSkill(54, NTC_HAND_RIGHT, target.x - 9, target.y - 9);
else if (me.x - target.x >= 0 && me.y - target.y < 0)
NTC_CastSkill(54, NTC_HAND_RIGHT, target.x - 9, target.y + 9);
else if (me.x - target.x < 0 && me.y - target.y >= 0)
NTC_CastSkill(54, NTC_HAND_RIGHT, target.x + 9, target.y + 9);
else
NTC_CastSkill(54, NTC_HAND_RIGHT, target.x + 9, target.y - 9);
_sorcattack = 0;
}
function NTA_IsActBoss(classid)
{
switch(classid)
{
case 156: //Andariel
case 211: //Duriel
case 242: //Mephisto
case 243: //Diablo
case 544: //Baal
return true;
}
return false;
}
function NTA_FindItem(range)
{
var _corpse;
var _orgx;
var _orgy;
var _startTick;
var _reposition = false;
if(NTC_GetSkillLevel(131) < 1)
return false;
if(arguments.length < 1 || !range)
range = 25;
_corpse = NTC_FindUnit(NTC_UNIT_MONSTER);
_orgx = me.x;
_orgy = me.y;
NTC_PingDelay(100);
NTC_SwapWeapons(2);
if(_corpse)
{
do
{
if(GetDistance(_orgx, _orgy, _corpse.x, _corpse.y) <= range && (_corpse.hp <= 0 || _corpse.mode == 0 || _corpse.mode == 12) && _corpse.GetState(118) == 0 && NTA_IsLootable(_corpse.classid))
{
if(GetDistance(me.x, me.y, _corpse.x, _corpse.y) >= 8)
{
if(!NTM_MoveTo(me.areaid, _corpse.x, _corpse.y))
continue;
}
_startTick = GetTickCount();
while(_corpse.GetState(118) != 0x400000 && (_corpse.hp <= 0 || _corpse.mode == 0 || _corpse.mode == 12) && !_corpse.IsAttackable())
{
NTC_CastSkill(131, NTC_HAND_RIGHT, _corpse);
NTC_PingDelay(50);
if(GetTickCount() >= _startTick + 1000 && !_reposition) // repositioning after 1sec
{
_reposition = true;
if(!NTM_MoveTo(me.areaid, _corpse.x+1, _corpse.y+1))
break;
}
if(GetTickCount() >= _startTick + 2500) // skipping monster after 2.5sec
{
var filehandle = FileOpen("FailedtoLoot.txt", 2);
var dateString = new Date().toLocaleFormat("%a %m/%d/%y %H:%M:%S");
if(filehandle)
{
filehandle.WriteLine("[" + dateString + "] Could not loot: " + _corpse.name +" [" + _corpse.classid + "](Location: " + me.areaid + ")");
filehandle.Close();
}
Print("ÿc;Could not loot: " + _corpse.name +" [" + _corpse.classid + "](Location: " + me.areaid + ")");
break;
}
}
}
} while(_corpse.GetNext());
NTC_PingDelay(100);
NTC_SwapWeapons(0);
NTC_PingDelay(100);
NTSI_PickItems();
return true;
}
return false;
}
function NTA_IsLootable(classid)
{
switch(classid)
{
case 179: // Cow
return false;
break;
default:
return true;
break;
}
}