suche d2nt bot assa config plz mit bo usw.
Include("config/NTConfig.ntl");
var NTConfig_CastShadowMaster;
var NTConfig_CastShadowWarrior;
var NTConfig_CastBrustOfSpeed;
var NTConfig_CastFade;
var NTConfig_CastBladeShield;
var NTConfig_CastCloakOfShadows;
function NT_LoadConfig()
{
//------------------------------------------------------\\
// Modified by CyberVirus \\
// >>> www.forums.d2trade.pl <<< \\
//------------------------------------------------------\\
//---------------------------------------------------------------------------------------------------------------------------\\
// "Script & Boss Configuration": \\
//---------------------------------------------------------------------------------------------------------------------------\\
//------------------------\\
// "Public Baal Settings" \\
//------------------------\\
Baal_WelcomeMessage = "Welcome to my baal runs!" //What to say at beginning of game.
Baal_TpUpMessage = "TP up. Might be hot!" //What to say when bot opens TP.
Baal_KillBaalMessage = "Let's kill baal! Sorcs, please static." //What to say after last wave, before entering chamber.
Baal_NextGameMessage = "NG!" //What to say after killing Baal.
NTConfig_BRWisperToFriendList = true; //Set to true to whisper GN+PW to your friend list.
//--------------------------\\
// "Public Diablo Settings: \\
//--------------------------\\
Diablo_WelcomeMessage = "Welcome to my chaos runs!" //What to say at beginning of game.
Diablo_TpUpMessage = "TP up. Might be hot!" //What to say when bot opens TP.
Diablo_KillDiabloMessage = "Diablo time! Stay out of star!" //What to say before engaging Diablo.
Diablo_NextGameMessage = "NG!" //What to say after killing Diablo.
NTConfig_DRWisperToFriendList = true; //Set to true to whisper GN+PW to your friend list.
//-------------------------------------\\
// "Public Tal-Rasha's Tombs Settings" \\
//-------------------------------------\\
TalRasha_TpUpMessage = "TP up. Might be hot!" //What to say when bot opens TP.
TalRasha_AfterOpeningTpMessage = "Stay Close!" //What to say after bot opens TP.
TalRasha_AfterCleaningTombMessage = "Tomb clear! Take my TP to town and wait for next tomb!" //What to say when bot has cleared a tomb.
TalRasha_NextGameMessage = "NG!" //What to say after all tombs are cleared.
NTConfig_TombWisperToFriendList = true; //Set to true to whisper GN+PW to your friend list.
//----------------\\
// "Public Boss": \\
//----------------\\
//NTConfig_Script.push("NTPublicDiablo.ntj"); // Uncomment (remove "//" at beginning of line) to do public Diablo runs.
NTConfig_MakeTpOnStartChaosSanctuary = false; // Set to true to make TP when entering Chaos Sanctuary.
NTConfig_MakeTpOnPentagramCenter = true; // Set to true to make tp on Diablo's pentagram.
//NTConfig_Script.push("NTPublicBaal.ntj"); // Uncomment to do public Baal runs.
NTConfig_PublicKillBaal = true; // Set to true to kill Baal, false to only kill minions.
//NTConfig_Script.push("NTPublicTalRashasTomb.ntj"); // Uncomment to do public Tomb runs.
//---------------\\
// "Act I Boss": \\
//---------------\\
//NTConfig_Script.push("NTBishibosh_ENG.ntj");
//NTConfig_Script.push("NTRakanishu_ENG.ntj");
NTConfig_ClearTristram = false; // Set to true to clear Tristram
NTConfig_MooMooFarm = false; // Set to true to pick up Wirt's leg and make portal to Cow Level. (COW LEVEL SCRIPT NOT YET IMPLEMENTED!!)
//NTConfig_Script.push("NTBloodRaven.ntj");
NTConfig_Bishibosh_ENG_Extension = false; // Set to true to go to Bishibosh after killing Blood Raven.
NTConfig_ClearMausoleum = false; // Clear Mausoleum after killing Blood Raven.
NTConfig_ClearCrypt = false; // Clear Crypt after killing Blood Raven.
//NTConfig_Script.push("NTPit.ntj");
NTConfig_ClearTamoeHighLand = false; // Set to true to clear Tamoe Highland. o_O
NTConfig_ClearPitLevel1 = 0; // 0 = Straight to level 2 // 1 = Clear path to level 2 // 2 = Clear everything
//NTConfig_Script.push("NTCountess.ntj");
//NTConfig_Script.push("NTTheSmith.ntj");
//NTConfig_Script.push("NTAndariel.ntj");
NTConfig_ClearAndarielThron = false; // Set to true to clear Andariel's room after killing her.
//----------------\\
// "Act II Boss": \\
//----------------\\
//NTConfig_Script.push("NTRadament.ntj");
//NTConfig_Script.push("NTAncientTunnels.ntj");
//NTConfig_Script.push("NTSummoner.ntj");
NTConfig_FireEyeExtension = true; // Set to true to kill Fireeye after killing Summoner.
//NTConfig_Script.push("NTFastTalRashasTomb.ntj"); //Should not be used in public runs.
//NTConfig_Script.push("NTDuriel.ntj");
//-----------------\\
// "Act III Boss": \\
//-----------------\\
//NTConfig_Script.push("NTTravincal.ntj");
//NTConfig_Script.push("NTMephisto.ntj");
NTConfig_KillCouncilMembers = true; // Set to true to kill council members.
//----------------\\
// "Act IV Boss": \\
//----------------\\
//NTConfig_Script.push("NTHephasto.ntj");
//NTConfig_Script.push("NTFastDiablo.ntj"); //Should not be used in public runs.
//---------------\\
// "Act V Boss": \\
//---------------\\
//NTConfig_Script.push("NTThreshSocket.ntj");
//NTConfig_Script.push("NTEldritch.ntj");
NTConfig_ShenkExtension = true; // Set to true to kill Shenk after killing Eldritch.
NTConfig_DacFarrenExtension = true; // Set to true to kill Dac Farren after Shenk, or Eldritch if Shenk = false
//NTConfig_Script.push("NTPindleskinByWP.ntj"); // Kill Pindleskin by using Halls of Pain WP.
//NTConfig_Script.push("NTPindleskin.ntj"); // Kill Pindleskin by using Anya's portal.
NTConfig_NihlathakExtension = false; // Set to true to to Nihlathak after killing Pindleskin through portal.
//NTConfig_Script.push("NTNihlathak.ntj");
NTConfig_PindleskinExtension = false; // Set to true to go to Pindleskin after killing Nihlathak.
//NTConfig_Script.push("NTFrozenstein.ntj");
NTConfig_ClearFrozenRiver = false; // Set to true to clear Frozen River before killing Frozenstein.
//NTConfig_Script.push("NTGlacialTrail.ntj");
NTConfig_ClearGlacialTrail = false; // Set to true to clear Glacial Trail.
//NTConfig_Script.push("NTIcyCellar.ntj");
NTConfig_ClearIcyCellar = false; // Set to true to clear Icy Cellar.
//NTConfig_Script.push("NTFastBaal.ntj"); // Should not be used in public runs.
NTConfig_KillBaal = true; // Set to true to kill Baal, false to only kill minions.
//---------------------------------------------------\\
// "Chicken, Merc & Others Parametrs Configuration": \\
//---------------------------------------------------\\
me.maxgametime = 0; // Maximum game time (in seconds) before Save & Exit. 600 seconds = 10 minutes.
NTConfig_PrintCoord = false; // Set to true to print coordinates.
NTConfig_StartDelay = 0; // Time (in milliseconds) to wait after game has started.
NTConfig_AreaDelay = 500; // Time to wait (in milliseconds) after entering a new area.
NTConfig_SnagDelay = 500; // Time to wait (in milliseconds) after killing (a boss) to pick items.
NTConfig_SkipHealLife = 90; // If over this amount of Health (%) after entering town, don't go to heal.
NTConfig_SkipHealMana = 70; // If over this amount of Mana (%) after entering town, don't go to heal.
NTConfig_SkipHealCurses = false; // Set to true to NOT go to healer when cursed.
NTConfig_UseMerc = true; // Set to true to use a merc, set to false to not.
NTConfig_ResetWeapon = true; // Set to true to re-equip your merc's weapon after ressurecting him.
NTConfig_LifeThresh = 60; // The amount of health (%) remaining before drinking a Healing Potion.
NTConfig_LifeRejuvThresh = 40; // The amount of health (%) remaining before drinking a Rejuv Potion.
NTConfig_ManaThresh = 30; // The amount of mana (%) remaining before drinking a Mana Potion.
NTConfig_ManaRejuvThresh = 10; // The amount of mana (%) remaining before drinking a Rejuv Potion.
NTConfig_LifeChicken = 30; // The amount of health (%) remaining before chickening (Save & Exit).
NTConfig_ManaChicken = 0; // The amount of mana (%) remaining before chickening (Save & Exit).
NTConfig_ViperSkipNihlathak = false; // Set to true to skip Nihlathak if Tomb Vipers are nearby.
NTConfig_QuitOnHostile = true; // Set to true to chicken if someone hostiles you.
NTConfig_MercLifeThresh = 60; // The amount of health (%) remaining on your Merc before giving him a Healing Potion.
NTConfig_MercRejuvThresh = 40; // The amount of health (%) remaining on your Merc before giving him a Rejuv Potion.
NTConfig_MercChicken = 0; // The amount of health (%) remaining on your Merc before chickeining. 0 = Don't chicken.
//--------------------------------------------------------------------------------------------------------------------------\\
// "Inventory Configuration": \\
//--------------------------------------------------------------------------------------------------------------------------\\
NTConfig_FreeSpace = 8; // Number of rows of free space in your inventory.
NTConfig_Columns[0] = [1,1,1,1,1,1,1,1,0,0];
NTConfig_Columns[1] = [1,1,1,1,1,1,1,1,0,0];
NTConfig_Columns[2] = [1,1,1,1,1,1,1,1,0,0];
NTConfig_Columns[3] = [1,1,1,1,1,1,1,1,0,0];
NTConfig_MinGoldToStash = 100000; // Minimum amount of gold in inventory before stashing.
//---------------------------------------------------------------------------------------------------------------------------\\
// "Belt Configuration": \\
// -Define which potions should go in which belt slot, from left to right. \\
// -Healing Potion = "hp" Mana Potion = "mp" Rejuv Potion = "rv" \\
//---------------------------------------------------------------------------------------------------------------------------\\
NTConfig_BeltColType[0] = "hp";
NTConfig_BeltColType[1] = "mp";
NTConfig_BeltColType[2] = "rv";
NTConfig_BeltColType[3] = "rv";
//-----------------------------------------------------------------------------------------------\\
// Minimum amount of potions in each belt slot before re-stocking. \\ \\
//-----------------------------------------------------------------------------------------------\\
NTConfig_BeltColMin[0] = 4;
NTConfig_BeltColMin[1] = 4;
NTConfig_BeltColMin[2] = 0;
NTConfig_BeltColMin[3] = 0;
//-----------------------------------------------------------------------------------------\\
// "SnagIt Configuration": \\
//-----------------------------------------------------------------------------------------\\
// Uncomment the SnagIt file(S) you wish to use. \\
//-----------------------------------------------------------------------------------------\\
//NTConfig_NIPFilePath.push("normal.nip");
NTConfig_NIPFilePath.push("elite.nip");
NTConfig_SnagRange = 50; // The range to pick up items. 40-50 is a good number here.
NTConfig_OpenChest = true; // Set to true to open chests and weapon/armor racks. This will make the bot buy a key.
//---------------------------------------------------------\\
// "Cubing Configuration": \\
//---------------------------------------------------------\\
NTConfig_Cubing = false; // Set to true to enable cubing script.
//NTConfig_CubingItem.push(["gcw",0,3]); // Chipped Diamond gcw
//NTConfig_CubingItem.push(["gcv",0,3]); // Chipped Amethyst gcv
//NTConfig_CubingItem.push(["gcb",0,3]); // Chipped Saphire gcb
//NTConfig_CubingItem.push(["gcy",0,3]); // Chipped Topaz gcy
//NTConfig_CubingItem.push(["gcr",0,3]); // Chipped Ruby gcr
//NTConfig_CubingItem.push(["gcg",0,3]); // Chipped Emerald gcg
//NTConfig_CubingItem.push(["skc",0,3]); // Chipped Skull skc
//NTConfig_CubingItem.push(["gfw",0,3]); // Flawed Diamond gfw
//NTConfig_CubingItem.push(["gfv",0,3]); // Flawed Amethyst gfv
//NTConfig_CubingItem.push(["gfb",0,3]); // Flawed Saphire gfb
//NTConfig_CubingItem.push(["gfy",0,3]); // Flawed Topaz gfy
//NTConfig_CubingItem.push(["gfr",0,3]); // Flawed Ruby gfr
//NTConfig_CubingItem.push(["gfg",0,3]); // Flawed Emerald gfg
//NTConfig_CubingItem.push(["skf",0,3]); // Flawed Skull skf
//NTConfig_CubingItem.push(["gsw",0,3]); // Normal Diamond gsw
//NTConfig_CubingItem.push(["gsv",0,3]); // Normal Amethyst gsv
//NTConfig_CubingItem.push(["gsb",0,3]); // Normal Saphire gsb
//NTConfig_CubingItem.push(["gsy",0,3]); // Normal Topaz gsy
//NTConfig_CubingItem.push(["gsr",0,3]); // Normal Ruby gsr
//NTConfig_CubingItem.push(["gsg",0,3]); // Normal Emerald gsg
//NTConfig_CubingItem.push(["sku",0,3]); // Normal Skull sku
//NTConfig_CubingItem.push(["glw",0,3]); // Flawless Diamond glw
//NTConfig_CubingItem.push(["gzv",0,3]); // Flawless Amethyst gzv
//NTConfig_CubingItem.push(["glb",0,3]); // Flawless Saphire glb
//NTConfig_CubingItem.push(["gly",0,3]); // Flawless Topaz gly
//NTConfig_CubingItem.push(["glr",0,3]); // Flawless Ruby glr
//NTConfig_CubingItem.push(["glg",0,3]); // Flawless Emerald glg
//NTConfig_CubingItem.push(["skl",0,3]); // Flawless Skull skl
//NTConfig_CubingItem.push(["r01",0,3]); // El Rune r01
//NTConfig_CubingItem.push(["r02",0,3]); // Eld Rune r02
//NTConfig_CubingItem.push(["r03",0,3]); // Tir Rune r03
//NTConfig_CubingItem.push(["r04",0,3]); // Nef Rune r04
//NTConfig_CubingItem.push(["r05",0,3]); // Eth Rune r05
//NTConfig_CubingItem.push(["r06",0,3]); // Ith Rune r06
//NTConfig_CubingItem.push(["r07",0,3]); // Tal Rune r07
//NTConfig_CubingItem.push(["r08",0,3]); // Ral Rune r08
//NTConfig_CubingItem.push(["r09",0,3]); // Ort Rune r09
//NTConfig_CubingItem.push(["r10",0,3,"gcy",0,1]); // Thul Rune + chipped Topaz r10 + gcy
//NTConfig_CubingItem.push(["r11",0,3,"gcv",0,1]); // Amn Rune + chipped Amethyst r11 + gcv
//NTConfig_CubingItem.push(["r12",0,3,"gcb",0,1]); // Sol Rune + chipped Saphire r12 + gcb
//NTConfig_CubingItem.push(["r13",0,3,"gcr",0,1]); // Shael Rune + chipped Ruby r13 + gcr
//NTConfig_CubingItem.push(["r14",0,3,"gcg",0,1]); // Dol Rune + chipped Emerald r14 + gcg
//NTConfig_CubingItem.push(["r15",0,3,"gcw",0,1]); // Hel Rune + chipped Diamond r15 + gcw
//NTConfig_CubingItem.push(["r16",0,3,"gfy",0,1]); // Io Rune + flawed Topaz r16 + gfy
//NTConfig_CubingItem.push(["r17",0,3,"gfv",0,1]); // Lum Rune + flawed Amethyst r17 + gfv
//NTConfig_CubingItem.push(["r18",0,3,"gfb",0,1]); // Ko Rune + flawed Saphire r18 + gfb
//NTConfig_CubingItem.push(["r19",0,3,"gfr",0,1]); // Fal Rune + flawed Ruby r19 + gfr
//NTConfig_CubingItem.push(["r20",0,3,"gfg",0,1]); // Lem Rune + flawed Emerald r20 + gfg
//NTConfig_CubingItem.push(["r21",0,2,"gfw",0,1]); // Pul Rune + flawed Diamond r21 + gfw
//NTConfig_CubingItem.push(["r22",0,2,"gsy",0,1]); // Um Rune + Topaz r22 + gsy
//NTConfig_CubingItem.push(["r23",0,2,"gsv",0,1]); // Mal Rune + Amethyst r23 + gsv
//NTConfig_CubingItem.push(["r24",0,2,"gsb",0,1]); // Ist Rune + Saphire r24 + gsb
//NTConfig_CubingItem.push(["r25",0,2,"gsr",0,1]); // Gul Rune + Ruby r25 + gsr
//NTConfig_CubingItem.push(["r26",0,2,"gsg",0,1]); // Vex Rune + Emerald r26 + gsg
//NTConfig_CubingItem.push(["r27",0,2,"gsw",0,1]); // Ohm Rune + Diamond r27 + gsw
//NTConfig_CubingItem.push(["r28",0,2,"gly",0,1]); // Lo Rune + flawless Topaz r28 + gly
//NTConfig_CubingItem.push(["r29",0,2,"gzv",0,1]); // Sur Rune + flawless Amethyst r29 + gzv
//NTConfig_CubingItem.push(["r30",0,2,"glb",0,1]); // Ber Rune + flawless Saphire r30 + glb
//NTConfig_CubingItem.push(["r31",0,2,"glr",0,1]); // Jah Rune + flawless Ruby r31 + gll
//NTConfig_CubingItem.push(["r32",0,2,"glg",0,1]); // Cham Rune + flawless Emerald r32 + glg
NTConfig_CubingItem.push(["leg",0,1,"tbk",0,1]); // Wirt's Leg + Tome of Town Portal leg + tbk
//--------------------------------------------------------------------------------------------------------\\
// "Gamble Configuration": \\
//--------------------------------------------------------------------------------------------------------\\
NTConfig_Gamble = true; // Set to true to enable gambling.
NTConfig_GambleStopGold = 300000; // Set the amount of gold remaining before stopping the gambling script.
NTConfig_GambleItem.push("rin"); // Rings
NTConfig_GambleItem.push("amu"); // Amulets
NTConfig_GambleItem.push("ci0"); // Circlets
NTConfig_GambleItem.push("ci1"); // Coronets
//NTConfig_GambleItem.push("lgl"); // Leather Gloves
//NTConfig_GambleItem.push("vgl"); // Heavy Gloves
//NTConfig_GambleItem.push("mgl"); // Chain Gloves
//NTConfig_GambleItem.push("tgl"); // Light Gauntlets
//NTConfig_GambleItem.push("hgl"); // Gauntlets
//----------------------------------------------------------------------------------------------------------\\
// "Assassin Attack Configuration" \\
//----------------------------------------------------------------------------------------------------------\\
// A list of spell ID's can be found in Scripts\libs\config\Skill_IDs.txt \\
//----------------------------------------------------------------------------------------------------------\\
// |Traps|: 271:Lightning Sentry, 276:Death Sentry, 256:Shock Field, 258:Quickness \\
//--------------------------------------------------------------------------------------------------------- \\
// |Shadows Disciplines|: 273:Mind Blast, 253:Psychic Hammer, 278:Venom \\
//--------------------------------------------------------------------------------------------------------- \\
// |Martial Arts|: 275:Dragon Flight, 270:Dragon Tail, 274:Blades of Ice \\
//----------------------------------------------------------------------------------------------------------\\
NTConfig_AttackSkill[0] = 0; // Cast your first spell once. Set to 0 if you won't.
NTConfig_AttackSkill[1] = 0; // Cast your primary spell to bosses.
NTConfig_AttackSkill[2] = 0; // Cast your primary spell to others.
NTConfig_AttackSkill[3] = 0; // Cast your primary untimed spell if primary spell is timed spell. Set to 0 if you won't.
NTConfig_AttackSkill[4] = 0; // Cast your secondary spell if monster is immune to your primary spell. Set to 0 if you won't.
NTConfig_AttackSkill[5] = 0; // Cast your secondary untimed spell if secondary spell is timed spell. Set to 0 if you won't.
NTConfig_ClearPosition = true; // Set to true if you want to clear area after killing boss.
NTConfig_CheckSafe = true; // Set to true to check for curses, merc and potion (go to town if needed)
NTConfig_CastShadowMaster = false; // Set to true to cast "Shadow Master".
NTConfig_CastShadowWarrior = true; // Set to true to cast "Shadow Warrior".
NTConfig_CastBrustOfSpeed = false; // Set to true to cast "Brust Of Speed".
NTConfig_CastFade = true; // Set to true to cast "Fade".
NTConfig_CastBladeShield = true; // Set to true to cast "Blade Shield".
NTConfig_CastCloakOfShadows = true; // Set to true to cast "Cloak Of Shadows".
}
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(6);
var _NTA_SkillDamage = new Array(6);
var _NTA_SkillDelay = new Array(6);
function NTA_Initialize()
{
for(var i = 0 ; i < 6 ; 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]);
_NTA_SkillDelay[i] = NTC_GetCastDelay(NTConfig_AttackSkill[i]);
}
}
}
function NTA_KillBoss(classid)
{
var _target;
if(NTConfig_AttackSkill[1] < 1)
return false;
_target = NTC_FindMonster(classid);
if(_target)
{
if(NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(_target, _NTA_SkillDamage[0]) < 100)
NTC_DoCast(NTConfig_AttackSkill[0], _NTA_SkillHand[0], _target);
return NTA_Attack(_target, true, 100);
}
return false;
}
function NTA_ClearPosition(range, spectype)
{
var _orgx, _orgy;
var _target;
var _killnum = 0;
if(NTConfig_AttackSkill[2] < 1)
return false;
if(arguments.length < 1)
range = 20;
if(arguments.length < 2)
spectype = 0;
_orgx = me.x;
_orgy = me.y;
for(var i = 0 ; i < 2 ; i++)
{
_target = NTC_GetUnit(NTC_UNIT_MONSTER);
if(_target)
{
do
{
if(NTA_IsValidTarget(_target) && (spectype == 0 || (_target.spectype & spectype)) && GetDistance(_orgx, _orgy, _target.x, _target.y) < range)
{
if(_killnum == 0)
{
if(NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(_target, _NTA_SkillDamage[0]) < 100 && CheckCollision(me, _target, 3))
NTC_DoCast(NTConfig_AttackSkill[0], _NTA_SkillHand[0], _target);
}
if(NTA_Attack(_target, false, 20))
_killnum++;
}
} while(_target.GetNext());
}
}
if(me.classid == NTC_CHAR_CLASS_PALADIN)
{
if(NTConfig_CastRedemption && _killnum > 1 && NTC_PutSkill(124, NTC_HAND_RIGHT))
NTC_PingDelay(1000);
}
return (_killnum > 0);
}
function NTA_ClearRooms()
{
var _room;
var _rooms;
_room = GetRoom();
if(!_room)
return false;
_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)
{
_rooms.sort(NTA_SortRoomInt);
_room = _rooms.shift();
NTM_MoveTo(me.areaid, _room[0], _room[1], 0, true);
NTP_DoPrecastCTA(true);
}
return true;
}
function NTA_IsValidTarget(monster, simple)
{
if(!monster || monster.type != NTC_UNIT_MONSTER)
return false;
if(monster.hp <= 0 || monster.mode == 0 || monster.mode == 12)
return false;
if(((monster.classid >= 110 && monster.classid <= 113) || monster.classid == 608) && monster.mode == 8) // ignore flying scavengers
return false;
if(monster.classid == 68 && monster.mode == 14) // ignore burrowing maggots
return false;
if((monster.classid == 258 || monster.classid == 261) && monster.mode == 14) // ignore submerged WaterWatchers
return false;
if(monster.GetState(53) || monster.GetState(96)) // Conversion, Revive
return false;
if(arguments.length < 2)
simple = false;
if(!simple)
{
var _name;
var _parent;
// dummy
_name = GetBaseStat("monstats.txt", monster.classid, 5);
if(!_name || _name.toLowerCase() == "dummy")
return false;
// killable
if(!GetBaseStat("monstats.txt", monster.classid, 89))
return false;
// neverCount
if(GetBaseStat("monstats.txt", monster.classid, 93))
return false;
_parent = monster.GetParent();
if(_parent && _parent.type == NTC_UNIT_PLAYER && !GetPlayerFlag(_parent.gid, me.gid, 8))
return false;
}
return true;
}
function NTA_GetDamageType(skillid)
{
var _etype;
if(skillid == 74) // Corpse Explosion
return NTA_DAMAGE_PHYSICAL;
if(skillid == 112) // Blessed Hammer
return NTA_DAMAGE_NONE;
_etype = GetBaseStat("skills.txt", skillid, 233);
switch(_etype)
{
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)
{
if(!enemy)
return false;
if(arguments.length == 2)
{
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_Attack(target, boss, maxattacks)
{
switch(me.classid)
{
case NTC_CHAR_CLASS_AMAZON:
return NTA_AmazonAttackInt(target, boss, maxattacks);
case NTC_CHAR_CLASS_SORCERESS:
return NTA_SorceressAttackInt(target, boss, maxattacks);
case NTC_CHAR_CLASS_NECROMANCER:
return NTA_NecromancerAttackInt(target, boss, maxattacks);
case NTC_CHAR_CLASS_PALADIN:
return NTA_PaladinAttackInt(target, boss, maxattacks);
case NTC_CHAR_CLASS_BARBARIAN:
return NTA_BarbarianAttackInt(target, boss, maxattacks);
case NTC_CHAR_CLASS_DRUID:
return NTA_DruidAttackInt(target, boss, maxattacks);
case NTC_CHAR_CLASS_ASSASSIN:
return NTA_AssassinAttackInt(target, boss, maxattacks);
}
return false;
}
// Internal function
function NTA_AmazonAttackInt(target, boss, maxattacks)
{
return false;
}
function NTA_SorceressAttackInt(target, boss, maxattacks)
{
var _primaryindex;
var _maxattacks = 0;
var _range1, _range2;
var _prehp;
_primaryindex = boss ? 1 : 2;
switch(NTConfig_AttackSkill[_primaryindex])
{
case 48: // Nova
_range1 = 10;
break;
default:
_range1 = 20;
break;
}
switch(NTConfig_AttackSkill[4])
{
case 48: // Nova
_range2 = 10;
break;
default:
_range2 = 20;
break;
}
if(NTConfig_CastStatic < 100)
{
var _staticlevel = NTC_CheckSkill(42);
if(_staticlevel > 0 && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) < 100)
{
var _cast = 0;
var _staticrange = Math.floor((5+_staticlevel-1)*2/3);
while(_cast++ < 10 && NTA_IsValidTarget(target, true) && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && (boss || CheckCollision(me, target, 2)))
{
NTA_MoveCloseInt(target, _staticrange);
if(!NTC_DoCast(42, NTC_HAND_RIGHT, target))
{
if(!boss)
break;
}
}
}
}
_prehp = target.hp;
while(_maxattacks++ < maxattacks && NTA_IsValidTarget(target, true))
{
if(!CheckCollision(me, target, 3))
{
if(boss)
NTA_MoveCloseInt(target, Math.round(GetDistance(me, target)/2));
else if(me.areaid != 131)
return false;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
{
if((_maxattacks % 2) == 1)
{
if(!NTA_MoveCloseInt(target, _range1) && !boss)
return false;
}
NTA_DoCastInt(_primaryindex, target);
}
else if(NTConfig_AttackSkill[4] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[4]) < 100)
{
if((_maxattacks % 2) == 1)
{
if(!NTA_MoveCloseInt(target, _range2) && !boss)
return false;
}
NTA_DoCastInt(4, target);
}
else
{
if(boss)
{
if((_maxattacks % 2) == 1)
NTA_MoveCloseInt(target, _range1);
NTA_DoCastInt(_primaryindex, target);
}
else
return false;
}
if(boss)
{
if((_maxattacks % 4) == 0 && target.hp >= _prehp)
{
if(target.classid == 526)
return false;
}
if((_maxattacks % 8) == 0)
{
if(target.hp < _prehp)
_prehp = target.hp;
else
return false;
}
}
else
{
if((_maxattacks % 4) == 0)
{
if(target.hp < _prehp)
_prehp = target.hp;
else
return false;
}
}
if(NTConfig_CheckSafe)
{
if(!NTTMGR_CheckSafe(1))
return false;
}
}
return true;
}
function NTA_NecromancerAttackInt(target, boss, maxattacks)
{
var _primaryindex;
var _maxattacks = 0;
var _range1, _range2;
var _prehp;
_primaryindex = boss ? 1 : 2;
switch(NTConfig_AttackSkill[_primaryindex])
{
case 67: // Teeth
case 84: // Bone Spear
case 93: // Bone Spirit
_range1 = 10;
break;
default:
_range1 = 20;
break;
}
switch(NTConfig_AttackSkill[4])
{
case 67: // Teeth
case 84: // Bone Spear
case 93: // Bone Spirit
_range2 = 10;
break;
default:
_range2 = 20;
break;
}
_prehp = target.hp;
while(_maxattacks++ < maxattacks && NTA_IsValidTarget(target, true))
{
if(!CheckCollision(me, target, 3))
{
if(boss)
NTA_MoveCloseInt(target, Math.round(GetDistance(me, target)/2));
else if(me.areaid != 131)
return false;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
{
if((_maxattacks % 2) == 1)
{
if(!NTA_MoveCloseInt(target, _range1) && !boss)
return false;
}
NTA_DoCastInt(_primaryindex, target);
}
else if(NTConfig_AttackSkill[4] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[4]) < 100)
{
if((_maxattacks % 2) == 1)
{
if(!NTA_MoveCloseInt(target, _range2) && !boss)
return false;
}
NTA_DoCastInt(4, target);
}
else
{
if(boss)
{
if((_maxattacks % 2) == 1)
NTA_MoveCloseInt(target, _range1);
NTA_DoCastInt(_primaryindex, target);
}
else
return false;
}
if(boss)
{
if((_maxattacks % 4) == 0 && target.hp >= _prehp)
{
if(target.classid == 526)
return false;
}
if((_maxattacks % 8) == 0)
{
if(target.hp < _prehp)
_prehp = target.hp;
else
return false;
}
}
else
{
if((_maxattacks % 4) == 0)
{
if(target.hp < _prehp)
_prehp = target.hp;
else
return false;
}
}
if(NTConfig_CheckSafe)
{
if(!NTTMGR_CheckSafe(1))
return false;
}
}
return true;
}
function NTA_PaladinAttackInt(target, boss, maxattacks)
{
var _primaryindex;
var _maxattacks = 0;
var _range1, _range2;
var _prehp1, _prehp2;
var _nohit = true;
_primaryindex = boss ? 1 : 2;
switch(NTConfig_AttackSkill[_primaryindex])
{
case 101: // Holy Bolt
case 121: // Fist of the Heavens
_range1 = 20;
break;
default:
_range1 = 2;
break;
}
switch(NTConfig_AttackSkill[4])
{
case 101: // Holy Bolt
case 121: // Fist of the Heavens
_range2 = 20;
break;
default:
_range2 = 2;
break;
}
_prehp1 = target.hp;
while(_maxattacks++ < maxattacks && NTA_IsValidTarget(target, true))
{
if(!CheckCollision(me, target, 3))
{
if(boss)
{
if(NTConfig_AttackSkill[_primaryindex] == 101 || NTConfig_AttackSkill[_primaryindex] == 121)
NTA_MoveCloseInt(target, Math.round(GetDistance(me, target)/2));
}
else if(me.areaid != 131)
return false;
}
_prehp2 = target.hp;
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
{
if((_maxattacks % 2) == 1 && _nohit)
{
if(NTConfig_AttackSkill[_primaryindex] == 112)
{
if(!NTM_MoveTo(target.areaid, target.x+1, target.y, 0) && !boss)
return false;
}
else
{
if(!NTA_MoveCloseInt(target, _range1) && !boss)
return false;
}
if(NTConfig_PutAura > 0)
NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT);
}
NTA_DoCastInt(_primaryindex, target);
}
else if(NTConfig_AttackSkill[4] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[4]) < 100)
{
if((_maxattacks % 2) == 1 && _nohit)
{
if(NTConfig_AttackSkill[4] == 112)
{
if(!NTM_MoveTo(target.areaid, target.x+1, target.y, 0) && !boss)
return false;
}
else
{
if(!NTA_MoveCloseInt(target, _range2) && !boss)
return false;
}
if(NTConfig_PutAura > 0)
NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT);
}
NTA_DoCastInt(4, target);
}
else
{
if(boss)
{
if((_maxattacks % 2) == 1 && _nohit)
{
if(NTConfig_AttackSkill[_primaryindex] == 112)
NTM_MoveTo(target.areaid, target.x+1, target.y, 0);
else
NTA_MoveCloseInt(target, _range1);
if(NTConfig_PutAura > 0)
NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT);
}
NTA_DoCastInt(_primaryindex, target);
}
else
return false;
}
if(boss)
{
if((_maxattacks % 8) == 0)
{
if(target.hp < _prehp1)
_prehp1 = target.hp;
else
return false;
}
}
else
{
if((_maxattacks % 4) == 0)
{
if(target.hp < _prehp1)
_prehp1 = target.hp;
else
return false;
}
}
_nohit = (target.hp >= _prehp2);
if(NTConfig_CheckSafe)
{
if(!NTTMGR_CheckSafe(1))
return false;
}
}
return true;
}
function NTA_BarbarianAttackInt(target, boss, maxattacks)
{
return false;
}
function NTA_DruidAttackInt(target, boss, maxattacks)
{
var _primaryindex;
var _maxattacks = 0;
var _range1, _range2;
var _prehp1, _prehp2;
var _nohit = true;
_primaryindex = boss ? 1 : 2;
switch(NTConfig_AttackSkill[_primaryindex])
{
case 240: // Twister
case 245: // Tornado
_range1 = 20;
break;
default:
_range1 = 2;
break;
}
switch(NTConfig_AttackSkill[4])
{
case 240: // Twister
case 245: // Tornado
_range2 = 20;
break;
default:
_range2 = 2;
break;
}
_prehp1 = target.hp;
while(_maxattacks++ < maxattacks && NTA_IsValidTarget(target, true))
{
if(!CheckCollision(me, target, 3))
{
if(boss)
{
if(NTConfig_AttackSkill[_primaryindex] == 240 || NTConfig_AttackSkill[_primaryindex] == 245)
NTA_MoveCloseInt(target, Math.round(GetDistance(me, target)/2));
}
else if(me.areaid != 131)
return false;
}
_prehp2 = target.hp;
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
{
if((_maxattacks % 2) == 1 && _nohit)
{
if(NTConfig_AttackSkill[_primaryindex] == 245)
{
if(!NTM_MoveTo(target.areaid, target.x+1, target.y, 0) && !boss)
return false;
}
else
{
if(!NTA_MoveCloseInt(target, _range1) && !boss)
return false;
}
}
NTA_DoCastInt(_primaryindex, target);
}
else if(NTConfig_AttackSkill[4] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[4]) < 100)
{
if((_maxattacks % 2) == 1 && _nohit)
{
if(NTConfig_AttackSkill[4] == 240)
{
if(!NTM_MoveTo(target.areaid, target.x+1, target.y, 0) && !boss)
return false;
}
else
{
if(!NTA_MoveCloseInt(target, _range2) && !boss)
return false;
}
}
NTA_DoCastInt(4, target);
}
else
{
if(boss)
{
if((_maxattacks % 2) == 1 && _nohit)
{
if(NTConfig_AttackSkill[_primaryindex] == 245)
NTM_MoveTo(target.areaid, target.x+1, target.y, 0);
else
NTA_MoveCloseInt(target, _range1);
}
NTA_DoCastInt(_primaryindex, target);
}
else
return false;
}
if(boss)
{
if((_maxattacks % 8) == 0)
{
if(target.hp < _prehp1)
_prehp1 = target.hp;
else
return false;
}
}
else
{
if((_maxattacks % 4) == 0)
{
if(target.hp < _prehp1)
_prehp1 = target.hp;
else
return false;
}
}
_nohit = (target.hp >= _prehp2);
if(NTConfig_CheckSafe)
{
if(!NTTMGR_CheckSafe(1))
return false;
}
}
return true;
}
function NTA_AssassinAttackInt(target, boss, maxattacks)
{
var _primaryindex;
var _maxattacks = 0;
var _range1, _range2;
var _prehp;
_primaryindex = boss ? 1 : 2;
switch(NTConfig_AttackSkill[_primaryindex])
{
case 256: // Shock Field
case 271: // Lightning Sentry
_range1 = 10;
break;
default:
_range1 = 20;
break;
}
switch(NTConfig_AttackSkill[4])
{
case 256: // Shock Field
case 271: // Lightning Sentry
_range2 = 10;
break;
default:
_range2 = 20;
break;
}
_prehp = target.hp;
while(_maxattacks++ < maxattacks && NTA_IsValidTarget(target, true))
{
if(!CheckCollision(me, target, 3))
{
if(boss)
NTA_MoveCloseInt(target, Math.round(GetDistance(me, target)/2));
else if(me.areaid != 131)
return false;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
{
if((_maxattacks % 2) == 1)
{
if(!NTA_MoveCloseInt(target, _range1) && !boss)
return false;
}
NTA_DoCastInt(_primaryindex, target);
}
else if(NTConfig_AttackSkill[4] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[4]) < 100)
{
if((_maxattacks % 2) == 1)
{
if(!NTA_MoveCloseInt(target, _range2) && !boss)
return false;
}
NTA_DoCastInt(4, target);
}
else
{
if(boss)
{
if((_maxattacks % 2) == 1)
NTA_MoveCloseInt(target, _range1);
NTA_DoCastInt(_primaryindex, target);
}
else
return false;
}
if(boss)
{
if((_maxattacks % 4) == 0 && target.hp >= _prehp)
{
if(target.classid == 526)
return false;
}
if((_maxattacks % 8) == 0)
{
if(target.hp < _prehp)
_prehp = target.hp;
else
return false;
}
}
else
{
if((_maxattacks % 4) == 0)
{
if(target.hp < _prehp)
_prehp = target.hp;
else
return false;
}
}
if(NTConfig_CheckSafe)
{
if(!NTTMGR_CheckSafe(1))
return false;
}
}
return true;
}
function NTA_DoCastInt(index, target)
{
var _untimedindex = index < 4 ? 3 : 5;
if(!NTC_DoCast(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target))
return false;
if(_NTA_SkillDelay[index] > 0)
{
if(NTConfig_AttackSkill[_untimedindex] > 0)
{
var _starttick = GetTickCount();
while(NTA_IsValidTarget(target, true))
{
NTC_DoCast(NTConfig_AttackSkill[_untimedindex], _NTA_SkillHand[_untimedindex], target);
if(GetTickCount()-_starttick >= _NTA_SkillDelay[index])
break;
}
}
else
NTC_Delay(_NTA_SkillDelay[index]);
}
return true;
}
function NTA_MoveCloseInt(target, maxrange)
{
var _dist = GetDistance(me, target);
if(_dist > maxrange)
{
var _destx, _desty;
_destx = me.x + Math.round((_dist-maxrange)*(target.x-me.x) / _dist);
_desty = me.y + Math.round((_dist-maxrange)*(target.y-me.y) / _dist);
return NTM_MoveTo(me.areaid, _destx, _desty, 0);
}
return true;
}
function NTA_SortRoomInt(a, b)
{
if(GetDistance(me.x, me.y, a[0], a[1]) < GetDistance(me.x, me.y, b[0], b[1]))
return -1;
return 1;
}