Ntbot Assa config help

09/05/2009 15:19 Richii#1
suche d2nt bot assa config plz mit bo usw.
09/05/2009 18:12 kal_el#2
der gemoddete hat das.
es gibt auch dafür einen entsprechenden thread....

Code:
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".
}
hier is noch die Attack.ntl
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(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;
}
closed