Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Diablo 2 > Diablo 2 Programming
You last visited: Today at 18:02

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



new idea on item find barb script

Discussion on new idea on item find barb script within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Dec 2013
Posts: 39
Received Thanks: 0
new idea on item find barb script

heres the link to the thread I found regarding item finder script


im wondering whats the chance of turning it into a potion finder
a lil change of the attack code ? and the case # for a cow/bovine
since I play classic only I potion find NM cows for full rejuvs
gtoilet is offline  
Old 01/07/2014, 12:31   #2
 
elite*gold: 0
Join Date: Dec 2013
Posts: 39
Received Thanks: 0
bmp
gtoilet is offline  
Old 01/09/2014, 01:53   #3
 
elite*gold: 0
Join Date: Dec 2013
Posts: 39
Received Thanks: 0
@muddy

cow id is like 179 , what else you think I have to change to get it to potion VS item find
just the attack code ?

gtoilet is offline  
Old 01/16/2014, 02:27   #4
 
elite*gold: 0
Join Date: Dec 2013
Posts: 39
Received Thanks: 0
any person that has any ideas , I would appreciate it
gtoilet is offline  
Old 01/23/2014, 09:56   #5
 
elite*gold: 0
Join Date: Dec 2013
Posts: 39
Received Thanks: 0
what do I need to modify so the barb will loot corpse in this script?
Code:
/*///////////////////////////////////////////////////////////////
Author:  DysfunctionaI @ BlizzHackers, DysfunctionaI @ D2JSP
/////////////////////////////////////////////////////////////////

This file MUST be named NTHelperBotv2.ntj

If you're having a problem, then read the release thread first,
to see if your problem has already been discussed. If it hasn't,
then post your problem there; don't PM me. All command edits go
in NTHCommands.ntj

//////////////////////////////////////////////////////////////////
DON'T EDIT THIS FILE UNLESS YOU KNOW WHAT YOU'RE DOING!
////////////////////////////////////////////////////////////////*/


//Variable Declaration
Include("libs/common/NTCommon.ntl"); 
NTC_IncludeConfig("NTBot/char_configs");
var _leader = null;
var _leaderhandle = null;
var _leadername = NTH_Leader;
var _verbal = NTH_Verbal;
var _attack = NTH_Attack;
var _trigger = NTH_Trigger;
var _autoskill = NTH_AutoSkill;
var _useteleport = NTH_Teleport;
var _updatedleader = null;
var _target;
var _wp;
var _level = me.GetStat(12);
var _stay = false;
var _stuckx;
var _stucky;
var _stuckcount = 0;
var _autoskillcount = 0;
var _levelcount = 0;
var _getleadercount = 10;

function NTMain() 
{
	//Initialization
	Include("NTBot/tools/NTHCommands.ntj");
	NTC_IncludeLibs(); 
	NT_LoadConfig();
	NTSI_LoadNIPFiles("NTBot/item_configs"); 
	NTA_Initialize();
	RegisterEvent(EVENT_GAMEMSG, NTH_Talk);
	NTConfig_PublicMode = false;
	me.maxgametime = 0;
	
	//Start Game
	if(_autoskill)
	{
		switch(me.classid)
		{
			case NTC_CHAR_CLASS_AMAZON:
			case NTC_CHAR_CLASS_BARBARIAN:
			case NTC_CHAR_CLASS_DRUID:
			case NTC_CHAR_CLASS_ASSASSIN:
				NTH_Say("AutoSkill is not currently availible for my class. Disabling.");
				_autoskill = false;
				break;
			default:
				NTH_AttackSetup();
				break;
		}
	}
	
	while(!NTC_InMyParty(_leadername))
	{
		NTH_PartyLeader();
		
		Delay(1000);
	}
	
	NTH_GetLeaderHandle();
	
	//Bot
	while(NTH_InGame(_leadername))
	{
		if(me.hp < 1 && (me.mode == 17 || me.mode == 0))
			NTH_Revive();
		
		if(!_stay && NTC_InMyParty(_leadername))
		{
			if(_getleadercount++ > 9)
			{
				_getleadercount = 0;
				
				_updatedleader = NTH_GetLeader();
			}
			
			if(_updatedleader != null)
				NTH_Follow();
			else
			{
				if(me.areaid != _leaderhandle.areaid)
					NTH_ChangeArea();
				else
					_updatedleader = NTH_GetLeader();
			}
		}
		else
		{
			NTH_PartyLeader();
			
			if(_attack && !NTC_InTown())
				NTH_ClearPosition();
			
			Delay(500);
		}
		
		Delay(100)
	}
	
	NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
	
	return;
}

//GetLeader
function NTH_GetLeader()
{	
	_target = NTC_FindUnit(NTC_UNIT_PLAYER);

	if(_target)
	{
		do
		{
			if(_target.name == _leadername)
				return _target;
					
		} while(_target.GetNext());
	}
	
	return null;
}

//Follow
function NTH_Follow()
{
	if(GetDistance(me.x, me.y, _leader.x, _leader.y) > 4)
	{
		if(_stuckcount > 11)
		{
			_stuckcount = 0;
			
			NTH_MoveTo(_leaderhandle.areaid, _leader.x, _leader.y, 15);
			
			if(GetDistance(me.x, me.y, _leader.x, _leader.y) > 8)
				NTH_ClearPosition(true);
		}
		
		_stuckx = me.x;
		_stucky = me.y;
		
		ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _leader.x, _leader.y);
		ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
		
		Delay(100);
		
		if(me.x == _stuckx && me.y == _stucky)
			_stuckcount++;
	}
	else if(!NTC_InTown() && _attack)
	{
		_stuckcount = 0;
		
		NTH_ClearPosition();
	}
	else
	{
		_stuckcount = 0;
		
		Delay(200);
	}
}

//ChangeArea
function NTH_ChangeArea()
{
	var i;
	var _orgcoords;
	
	while(me.areaid == 0 || _leaderhandle.areaid == 0)
		Delay(200);
	
	// Walking Into New Area
	if(GetDistance(me.x, me.y, _leader.x, _leader.y) < 50)
	{
		for(i = 0; i < 8; i++)
		{
			_orgcoords = _leader.x + _leader.y;
			
			Delay(100);
			
			if(_leader.x+_leader.y != _orgcoords)
			{
				ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _leader.x, _leader.y);
				ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
				
				Delay(500);
				
				return;
			}
		}
	}
	
	if(!NTH_TakeWaypoint(_leaderhandle.areaid))
	{
		if(!NTH_TakeStair(_leaderhandle.areaid))
		{
			if(!NTH_UsePortal("none"))
			{
				Say("I'm stuck");
				Delay(50);
				
				while(!NTH_GetLeader())
				{
					if(!NTC_InTown() && _attack)
						NTH_ClearPosition(true);
						
					Delay(500);
				}
			}
		}
	}
	
	if(!NTC_InTown())
		NTP_DoPrecast(true);
}

//Talk
function NTH_Talk(msg, type) 
{
	if(msg.indexOf(_leadername) != -1 && msg.charAt(_leadername.length+8) == _trigger)
	{
		var _command;
		var _variable;
		
		msg = msg.toLowerCase();
		msg = msg.substring(_leadername.length+9)
		msg = msg.split(" ");
		_command = msg[0];
		_variable = msg[1];
		
		if(_variable == "")
			_variable = undefined;
		
		NTH_Commands(_command, _variable);
			
		return;
	}
}

//GetLeaderHandle
function NTH_GetLeaderHandle()
{
	while(!_leaderhandle)
	{
		_target = GetPlayerUnit();
		
		if(_target)
		{
			while(_target.GetNext())
			{
				if(_target.name == _leadername)
				{
					_leaderhandle = _target;
					break;
				}
			}
		}
		
		Delay(500);
	}
	
	while(!_leader)
	{
		_leader = NTH_GetLeader();
		
		Delay(100);
	}
}

//Revive
function NTH_Revive()
{
	var _message = new Array(4);
	
	while(!NTC_InTown())
	{
		me.Cancel(0);
		Delay(1000);
	}
		
	NTTM_TownMove("portalspot");
		
	_message[1] = "Lmk when it's safe";
	_message[2] = "TP and tell me if it's safe";
	_message[3] = "Call me when it's safe";
	_message[4] = "Just waiting for a safe TP";
	_message[0] = _message[Random(1, 4)];
	
	
	Say(_message[0]);
	Delay(50);
	
	while(!NTH_GetLeader())
		Delay(500);
	
	return;
}

//InGame
function NTH_InGame(playerName)
{
	_target = GetPlayerUnit();

	if(_target)
	{
		do
		{
			if(_target.name == playerName)
				return true;
		} while(_target.GetNext());
	}
	return false;
}

//Say
function NTH_Say(response)
{
	if(_verbal)
	{
		Say(response);
		
		Delay(50);
	}
	else
		Print(response);
}

//TakeStair
function NTH_TakeStair(areaid)
{
	var _unit;
	var i;

	_unit = NTM_GetStairInt(areaid);

	if(!_unit)
		return false;
	
	for(i = 0; i < 6; i++)
	{
		NTM_MoveTo(me.areaid, _unit.x+1, _unit.y, 10);
			
		NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _unit);
			
		Delay(500);
		
		if(me.areaid == areaid)
			return true;
	}

   	return false;
}

//UsePortal
function NTH_UsePortal(leader, areaid)
{
	var _portal;
	var _preareaid = me.areaid;
	
	if(arguments.length < 2)
		areaid = 0;
	
	if(me.areaid == 102) // Portal to A4
	{
		_portal = NTC_FindUnit(NTC_UNIT_OBJECT, 342);
		
		for(var i = 0; i < 10; i++)
		{
			NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _portal);
				
			Delay(500);
			
			if(me.areaid != _preareaid)
				return true;
		}
		
		return false;
	}
	
	_portal = NTC_FindUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));

	if(_portal)
	{
		if(leader != "none")
		{
			do
			{
				if(_portal.mode == 2 && NTC_CheckOwner(_portal, leader) && GetDistance(me, _portal) <= 30)
				{
					if(areaid != 0)
						if(_portal.subareaid != areaid)
							return false;
					
					while(me.areaid == _preareaid && _portal)
					{
						NTM_MoveTo(me.areaid, _portal.x+1, _portal.y, 10);
							
						NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _portal);
							
						Delay(500);
						
						if(me.areaid != _preareaid)
							return true;
					}
				}
			} while(_portal.GetNext());
		}
		else
		{
			do
			{
				if(_portal.mode == 2 && GetDistance(me, _portal) <= 30)
				{
					while(me.areaid == _preareaid && _portal)
					{
						NTM_MoveTo(me.areaid, _portal.x+1, _portal.y, 10);
							
						NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _portal);
							
						Delay(500);
						
						if(me.areaid != _preareaid)
							return true;
					}
				}
			} while(_portal.GetNext());
		}
	}
	
	return false;
}

//TakeWaypoint
function NTH_TakeWaypoint(areaid)
{
	if(me.areaid == areaid)
		return true;
	
	switch(areaid)
	{
		case 1:
		case 3:
		case 4:
		case 5:
		case 6:
		case 27:
		case 29:
		case 32:
		case 35:
		case 40:
		case 42:
		case 43:
		case 44:
		case 46:
		case 48:
		case 52:
		case 57:
		case 74:
		case 75:
		case 76:
		case 77:
		case 78:
		case 79:
		case 80:
		case 81:
		case 83:
		case 101:
		case 103:
		case 106:
		case 107:
		case 109:
		case 111:
		case 112:
		case 113:
		case 115:
		case 117:
		case 118:
		case 129:
			break;
		default:
			return false;
	}
	
	var _unit = NTM_GetWaypointInt();

	if(!_unit)
		return false;

	if(NTC_InTown())
		me.Cancel(1);

	for(var i = 0 ; i < 20 ; i++)
	{
		if(me.areaid == _leaderhandle.areaid)
			return true;
		
		if((i % 10) == 0)
		{
			NTH_MoveTo(_unit.areaid, _unit.x, _unit.y, 10);
			
			NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _unit);
		}

		Delay(200);

		if(GetUIState(0x14))
		{
			if(me.TakeWaypoint(areaid))
			{
				Delay(200);
				
				return true;
			}
			else
			{
				NTH_Say("I don't have that waypoint!");
				
				while(!NTH_GetLeader())
				{
					if(!NTC_InTown() && _attack)
						NTH_ClearPosition(true);
					
					Delay(500);
				}
				
				return true;
			}

			break;
		}
	}
	
	return false;
}

//PartyLeader
function NTH_PartyLeader()
{
	var _player = GetPlayerUnit();

	if(_player)
	{
		var _mypartyid = _player.partyid;

		while(_player.GetNext())
		{
			if(_player.name == _leadername)
			{
				if(_player.partyid == 65535 || _player.partyid != _mypartyid)
				{
					if(_player.partyflag == 2)
					{
						me.ClickParty(_player, 2);
						return;
					}

					if(_player.partyid == 65535)
					{
						if(_player.partyflag == 4)
							return;

						me.ClickParty(_player, 2);
						NTC_Delay(NTC_DELAY_FRAME);

						if(_player.partyflag == 4 || (_player.partyid != 65535 && _player.partyid == _mypartyid))
							return;
					}
				}
			}
		}
	}
}

//Attack Setup
function NTH_AttackSetup()
{
	var i;
	var n = 0;
	var _skillset = new Array;
	var _build = new Array;
	
	_skillset[0] = 0;
	
	switch(me.classid)
	{
		case NTC_CHAR_CLASS_AMAZON:
			return;
			
		case NTC_CHAR_CLASS_SORCERESS:
		
			_skillset[1] = NTC_GetSkillLevel(36); // Fire Bolt
			_skillset[2] = NTC_GetSkillLevel(39); // Ice Bolt
			_skillset[3] = NTC_GetSkillLevel(38); // Charged Bolt
			
			for(i = 1; i <= 3; i++)
				if(_skillset[i] > _skillset[n])
				{
					_skillset[0] = i;
					n = i;
				}
			
			if(_skillset[0] == 1)
				_build = [47, 36];
			else if(_skillset[0] == 2)
				_build = [59, 55, 45, 39];
			else if(_skillset[0] == 3)
				_build = [49, 38];
			
			if(_skillset[0])
			{
				for(i = 0; i < _build.length; i++)
				{
					if(NTC_GetSkillLevel(_build[i]))
					{
						NTConfig_AttackSkill[1] = _build[i];
						NTConfig_AttackSkill[3] = _build[i];
						break;
					}
				}
			}
			else
			{
				NTConfig_AttackSkill[1] = 0;
				NTConfig_AttackSkill[3] = 0;
			}
			return;
			
		case NTC_CHAR_CLASS_NECROMANCER:
			return;
			
		case NTC_CHAR_CLASS_PALADIN:
		
			_skillset[1] = NTC_GetSkillLevel(96); // Sacrifice
			_skillset[2] = NTC_GetSkillLevel(112); // Blessed Hammer
			
			for(i = 1; i <= 3; i++)
				if(_skillset[i] > _skillset[n])
				{
					_skillset[0] = i;
					n = i;
				}
			
			if(_skillset[0] == 1)
				_build = [106, 96];
			else if(_skillset[0] == 2)
				_build = [112];
			
			if(_skillset[0])
			{
				for(i = 0; i < _build.length; i++)
				{
					if(NTC_GetSkillLevel(_build[i]))
					{
						NTConfig_AttackSkill[1] = _build[i];
						NTConfig_AttackSkill[3] = _build[i];
						break;
					}
				}
			}
			else
			{
				NTConfig_AttackSkill[1] = 0;
				NTConfig_AttackSkill[3] = 0;
			}
			return;
			
		case NTC_CHAR_CLASS_BARBARIAN:
			return;
			
		case NTC_CHAR_CLASS_DRUID:
			return;
			
		case NTC_CHAR_CLASS_ASSASSIN:
			return;
	}
}

//ClearPosition
function NTH_ClearPosition(stuck)
{
	NTP_DoPrecast(false);
	if(_autoskill)
	{
		if(_autoskillcount++ > 30)
		{
			_autoskillcount = 0;
			NTH_AttackSetup();
		}
	}
	
	var _orgx, _orgy;
	var _spectype = [0x01,0x01,0x0A];
	var _skiplist;
	var _attackcount = 0;
	var _target;
	var _distance, _mingid, _mindistance;
	var _result;
	var range = 20;
	
	if(arguments.length == 1)
		range = 3;
	else
		stuck = false;
	
	if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
		return false;

	_orgx = me.x;
	_orgy = me.y;

	for(var i = 0 ; i < _spectype.length ; i++)
	{
		_skiplist = new Array();

		while(_attackcount < (i+1)*100)
		{
			if(_attackcount > 49)
				break;

			_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);
					
					if((!stuck && GetDistance(me.x, me.y, _leader.x, _leader.y) > 20 && !_stay) || !_attack || me.mode == 17 || me.hp < 1)
						return;

					switch(_result)
					{
					case 1:
						_skiplist.push(_mingid);
						break;
					case 2:
					case 3:
						_attackcount++;
						break;
					default:
						return false;
					}
				}
			}
			else
				break;
		}
	}

	if(_attackcount > 0)
		NTH_PickItems();
	
	if(_levelcount++ > 10)
	{
		_levelcount = 0;
		
		if(me.GetStat(12) > _level)
		{
			
			Say("!I feel much stronger now");
			
			Delay(50);
			
			_level = me.GetStat(12);
		}
	}

	return true;
}

//MoveTo
function NTH_MoveTo(areaid, x, y, force)
{
	var i, n;
	var _teleport;
	var _path;

	if(x == me.x && y == me.y)
		return true;
	
	if(arguments.length < 4)
		force = 0;

	if(NTC_InTown() || NTC_GetSkillLevel(54) < 1 || !_useteleport)
		_teleport = false;
	else
		_teleport = true;

	_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

	if(_path)
	{
		for(i = 0 ; i < _path.length ; i++)
		{
			for(n = 0 ; n < 2 ; n++)
			{
				if(_teleport)
				{
					if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
						break;
				}
				else
				{
					if(!NTH_WalkTo(_path[i][0], _path[i][1], force))
						return;
					
					break;
				}
			}
		}
	}

	return true;
}

//WalkTo
function NTH_WalkTo(x, y, force)
{
	// force of 10 is just force
	// force of 15 is to return to leader
	var i;
	var _prex1, _prey1;
	var _prex2, _prey2;
	
	if(arguments.length < 3)
		force = 0;

	if(me.runwalk == 0)
		me.runwalk = 1;

	for(i = 0 ; i < 90 ; i++)
	{
		if((i % 10) == 0)
		{
			if((i % 60) == 0)
			{
				_prex1 = me.x;
				_prey1 = me.y;

				if((i % 120) == 0)
				{
					_prex2 = me.x;
					_prey2 = me.y;
				}
			}
			
			if((!_stay && force == 0 && GetDistance(me.x, me.y, _leader.x, _leader.y) > 20) || !_attack || me.mode == 17 || me.hp < 1)
				return false;
			
			if(force == 15 && GetDistance(me.x, me.y, _leader.x, _leader.y) < 10)
				return false;

			ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, x, y);
		}

		NTC_Delay(NTC_DELAY_FRAME);

		if(Math.abs(me.x-x) < 2 && Math.abs(me.y-y) < 2)
			break;

		if((i % 10) == 9)
		{
			ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
			NTC_Delay(NTC_DELAY_FRAME);

			if((i % 60) == 59)
			{
				if(me.x == _prex1 && me.y == _prey1 && !NTC_InTown())
				{
					NTH_ClearPosition(2);

					NTP_DoPrecast(false);
				}

				if((i % 120) == 119 && me.x == _prex2 && me.y == _prey2)
					return true;
			}
		}
	}

	ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
	NTC_Delay(NTC_DELAY_FRAME);

	return true;
}

//PickItems
function NTH_PickItems()
{
	var i, _mode;

	for(i = 0 ; i < 25 ; i++)
	{
		_mode = me.mode;

		if((_mode >= 1 && _mode <= 3) || _mode == 5 || _mode == 6)
			break;

		NTC_Delay(NTC_DELAY_FRAME);
	}

	if(i < parseInt(100/NTC_DELAY_FRAME))
		NTC_PingDelay(NTConfig_SnagDelay-(i*NTC_DELAY_FRAME));
	
	var i;
	var _item;
	var _checkeditem, _checkeditems;
	var _value;
	var _minindex, _mindistance;

	_item = NTC_FindUnit(NTC_UNIT_ITEM);

	if(!_item)
		return;

	_checkeditems = new Array();

	do
	{
		if(_item.mode == 3 || _item.mode == 5)
		{
			if(NTSI_IsIgnoredItemInt(_item.classid))
				continue;

			if(GetDistance(me, _item) <= NTConfig_SnagRange)
			{
				_value = NTSI_CheckItem(_item);

				if(_value)
					_checkeditems.push(new NTSI_ItemInt(_item, _value));
			}
		}
	} while(_item.GetNext());

	while(_checkeditems.length > 0)
	{
		_mindistance = 100000;

		for(i = 0 ; i < _checkeditems.length ; i++)
		{
			_value = GetDistance(me.x, me.y, _checkeditems[i].x, _checkeditems[i].y);

			if(_value < _mindistance)
			{
				_minindex = i;
				_mindistance = _value;
			}
		}

		_checkeditem = _checkeditems.splice(_minindex, 1)[0];

		_item = NTC_FindUnit(NTC_UNIT_ITEM, _checkeditem.GID);

		if(_item)
		{
			if(!NTSI_IsLimitedItemInt(_item))
			{
				if(NTT_CheckSpace(_item.xsize, _item.ysize))
				{
					if(NTH_SnagItem(_item))
					{
						switch(_checkeditem.ClassID)
						{
						case 515: // Rejuvenation Potion
						case 516: // Full Rejuvenation Potion
							Print("Picked up " + GetLocaleString(2209+_checkeditem.ClassID-515));
							break;
						case 587: // Minor Healing Potion
						case 588: // Light Healing Potion
						case 589: // Healing Potion
						case 590: // Greater Healing Potion
						case 591: // Super Healing Potion
						case 592: // Minor Mana Potion
						case 593: // Light Mana Potion
						case 594: // Mana Potion
						case 595: // Greater Mana Potion
						case 596: // Super Mana Potion
							Print("Picked up " + GetLocaleString(2266+_checkeditem.ClassID-587));
							break;
						default:
							Print("Picked up " + NTC_ItemQualityToD2Color[_item.quality] + _item.name.split("\n")[0]);
							if(_item.quality < 4 && _checkeditem.Status < 2 && _item.itemtype != 4 && (_item.itemtype < 76 || _item.itemtype > 81))
								NTC_SendLogToOOG(NTC_LOG_ITEM, "Kept " + NTC_ItemQualityToMGRColor[_item.quality] + _item.name.split("\n")[0] + ";" + _item.itemdesc);
							break;
						}
					}
				}
				else
				{
					NTH_Say("My inventory is full!");
					return;
				}
			}
		}
	}
}

//SnagItem
function NTH_SnagItem(snagitem)
{
	var i;
	var _classid;

	_classid = snagitem.classid;

	for(i = 0 ; i < 40 ; i++)
	{
		if((i % 10) == 0 && (snagitem.mode == 3 || snagitem.mode == 5))
		{
			if(GetDistance(me, snagitem) > 3)
				NTH_MoveTo(snagitem.areaid, snagitem.x, snagitem.y, 10);

			if(NTC_ClearCursor())
				NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, snagitem);
		}

		NTC_Delay(NTC_DELAY_FRAME);

		if(_classid == 523)
		{
			Print("Picked up " + GetLocaleString(2215));

			return false;
		}
		else if(snagitem.mode != 3 && snagitem.mode != 5)
		{
			var _parent;

			NTC_PingDelay(100);

			_parent = snagitem.GetParent();

			return (_parent && _parent.gid == me.gid);
		}
	}

	return false;
}
gtoilet is offline  
Old 01/28/2014, 04:21   #6
 
elite*gold: 0
Join Date: Dec 2013
Posts: 39
Received Thanks: 0
I was offered this at another site tried to modify the commands for the NTcommands that tie into the NThelperbot script that the barb runs

[code]<<<@!1!@>>>
gives me (251)error
Code:
/*///////////////////////////////////////////////////////////////
Author:  DysfunctionaI @ BlizzHackers, DysfunctionaI @ D2JSP
/////////////////////////////////////////////////////////////////

This is the command file, where you may edit or make new commands.
Potential commands are limitless, but I have written up most of
the more useful ones here. Adding commands became really popular
in my last release, so I decided to make it easier for people to
write their own commands.


The layout is simple. You get two variables to work with:

'command' is the command that the leader typed
'variable' is the payload (if any), which comes after a command


Example:

The leader types "-dropgold 500"
The 'command' would be 'dropgold'
The 'variable' would be '500'

Example 2:

The leader types "-walk"
The 'command' would be 'walk'
The 'variable' would be 'undefined'


You may also use the functions available in the NTHelperBot.ntj
script. Not all of them will work with your custom commands
perfectly, so check them out before using them. If they don't fit
your needs, I advise against editing the function, and instead,
just writing a new one here, because your edits could easily break
the bot.

Don't forget to put return; at the end of your commands.


//////////////////////////////////////////////////////////////////
Have fun! Command section below!
////////////////////////////////////////////////////////////////*/


function NTH_Commands(command, variable) 
{
	/////////////////
	// town
	/////////////////
	
	if(command == "town")
	{
		if(NTC_InTown())
		{
			NTH_Say("Doing town stuff");
			
			NTTMGR_TownManager();
			
			NTTM_TownMove("portalspot");
		}
		else
			NTH_Say("I'm not in town!");
			
		return;
	}
	
	/////////////////
	// tp
	/////////////////
	
	if(command == "1")
	{
		NTH_Say("Taking your TP");
		if(NTC_InTown()) 
		{
			NTTM_TownMove("portalspot");
			
			NTH_UsePortal(_leadername);
			
			while(!NTH_GetLeader())
			{
				if(_attack)
					NTH_ClearPosition(true);
					
				Delay(500);
			}
		}
		else 
		{
			NTH_UsePortal(_leadername); 
			while(!NTH_GetLeader())
				Delay(500);
		}
		
		return;
	}
	
	/////////////////
	// safe
	/////////////////
	
	if(command == "safe")
	{
		if(NTC_InTown())
		{
			NTTM_TownMove("portalspot");
			
			if(NTH_UsePortal(_leadername))
				NTT_GetCorpses();
			
			while(!NTH_GetLeader())
			{
				if(_attack)
					NTH_ClearPosition(true);
				
				Delay(500);
			}
		}
		
		return;
	}
	
	/////////////////
	// precast
	/////////////////
	
	if(command == "precast")
	{
		NTP_DoPrecast(true);
		
		return;
	}
	
	/////////////////
	// come
	/////////////////
	
	if(command == "2")
	{
		_stay = false;
		NTH_Say("Ill go");
			
		ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _leader.x, _leader.y);
		ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
		
		return;
	}
	
	/////////////////
	// stay
	/////////////////
	
	if(command == "3")
	{
		NTH_Say("Istay");
		_stay = true;
		
		return;
	}
	
	/////////////////
	// pick
	/////////////////
	
	if(command == "pick")
	{
		NTH_Say("Picking up items");
		
		NTH_PickItems();
		
		return;
	}
Code:
	/////////////////
	// body
	/////////////////
	
	if(command == "body")
	{
		
	NTH_Say("Checking For Bodies!");

	Delay(200);
	
    var _corpse ; 
    var _orgx ; 
    var _orgy ; 
    var _startTick ; 
    var _reposition =  false ;
     
    if (arguments . length <  1  | |  ! range) 
        range =  25 ;
    
    _corpse = NTC_FindUnit (NTC_UNIT_MONSTER); 
    _orgx = me . x ; 
    _orgy = me . y ;
    
    NTC_PingDelay (100); 
    
    if (_corpse)
     {
         do
         {
            if ( GetDistance ( _orgx , _orgy , _corpse . x , _corpse . y )  <= range && NTA_CheckLootStatus ( _corpse )  && 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 (); 
                _reposition =  false ; 
                while ( NTA_CheckLootStatus ( _corpse )  &&  ! _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 , _corpse . y ))
                             break;
                     }
                    if ( GetTickCount ()  > = _startTick +  2500 )  / / skipping monster after 2.5sec
                     {
                        if ( me . mp <  10 )
                         {
                            Print ( "Lack of ?c3Mana?c0!" ); 
                            if ( NTConfig_BuyPotsIfLackOfMana )
                             {
                                if ( NTTMGR_VisitTown ()) 
                                    Delay(100);
                             }
                             break;
                         }
                        var _filehandle =  FileOpen ( "FailedtoLoot.txt" ,  2 ); 
                        var _dateString =  new  Date . () toLocaleFormat ( "% a% m /% d /% y% H:% M:% S" ); 
                        if ( _filehandle )
                         {
                            var _states =  "States ::" ; 
                            for ( var i =  0 ; i <  144 ; i + +)
                             {
                                if ( _corpse . GetState ( i )) 
                                    _states + =  "state ("  + i +  "):"  + _corpse . GetState ( i )  +  "<->" ;
                             }
                            _filehandle . WriteLine ( "["  + _dateString +  "] Could not loot:"  + _corpse . name + "["  + _corpse . classid +  "] (Location:"  + me . areaid +  ")"  + _states ); 
                            _filehandle . Close ();
                         } 
                        Print ( "YC; Could not loot:"  + _corpse . name + "["  + _corpse . classid +  "] <Mode:"  + _corpse . fashion +  "> (Location:"  + me . areaid +  ")" );
                         break;
                     }
                    
                 }
                / * If (GetTickCount () <_startTick + 2000)
                    NTC_SendMsgToScript ("NTBotGame.ntj", "SET_LOOTED_NULL") * /
             }
        }  while ( _corpse . GetNext ());
        
        NTC_PingDelay ( 100 );
        
         NTSI_PickItems ();
                        
         return true;
     }
    return  false ;
 }
Code:
	/////////////////
	// help
	/////////////////
	
	if(command == "help")
	{
		NTH_Say("stay | come | attack on/off | tp | maketp | safe | aura (name) | wp | talk | shrine | town | precast | pick | body | verbal");
		return;
	}
	
	/////////////////
	// maketp
	/////////////////
	
	if(command == "maketp")
	{
		if(!NTC_InTown())
		{
			if(NTM_MakeTP())
				NTH_Say("TP up");
			else
				NTH_Say("I don't have any TPs!");
		}
		else
			NTH_Say("I can't TP here!");
		
		return;
	}
	
	/////////////////
	// verbal
	/////////////////
	
	if(command == "verbal")
	{
		if(variable == undefined || (variable != "on" && variable != "off"))
		{
			if(_verbal)
				Say("Verbal messages ON");
			else
				Say("/w "+_leadername+" Verbal messages are OFF");
			
			Delay(50);
		}
		else
		{
			if(variable == "on")
			{
				_verbal = true;
				
				NTH_Say("Verbal messages ON");
			}
			else
			{
				_verbal = false;
				
				Say("/w "+_leadername+" Verbal messages OFF");
			}
		}
		
		return;
	}
	
	/////////////////
	// attack
	/////////////////
	
	if(command == "attack")
	{
		if(variable == undefined || (variable != "on" && variable != "off"))
		{
			if(_attack)
				NTH_Say("Attack is ON");
			else
				NTH_Say("Attack is OFF");
		}
		else
		{
			if(variable == "on")
			{
				_attack = true;
				
				NTH_Say("I'll attack at will");
			}
			else
			{
				_attack = false;
				
				NTH_Say("I won't attack anymore");
			}
		}
		
		return;
	}
	
	/////////////////
	// shrine
	/////////////////
	
	if(command == "shrine")
	{
		_target = NTC_FindUnit(NTC_UNIT_OBJECT, "shrine");

		if(!_target)
			_target = NTC_FindUnit(NTC_UNIT_OBJECT, "well");
		
		if(_target)
		{
			do
			{
				if(GetDistance(_leader.x, _leader.y, _target.x, _target.y) < 15)
					break;
			} while(_target.GetNext());
			
			if(GetDistance(_leader.x, _leader.y, _target.x, _target.y) < 15)
			{
				NTH_Say("Grabbing shrine");
				
				if(GetDistance(me.x, me.y, _target.x, _target.y) > 3)
					NTH_MoveTo(_target.areaid, _target.x+5, _target.y+5, 10);
					
				NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _target);
					
				Delay(500);
			}
			else
				NTH_Say("Which shrine?");
		}
		else
			NTH_Say("I don't see a shrine!");
		
		return;
	}
	
	/////////////////
	// talk
	/////////////////
	
	if(command == "talk")
	{
		if(!NTC_InTown())
		{
			NTH_Say("No one to talk to out here!");
			return;
		}
		
		var _npc = false;
		var _target = NTC_FindUnit(NTC_UNIT_NPC);
		
		if(_target)
		{
			do
			{
				if(_target.classid > 6 && _target.name != "an evil force" && GetDistance(_leader.x, _leader.y, _target.x, _target.y) < 10)
				{
					var _npc = true;
					
					NTH_Say("I'll talk to "+_target.name);
					
					if(NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _target))
					{
						Delay(1000);
						
						if(_target.classid == 155) // Warriv A1
							me.SelectNPCMenu(0x0D36);
						else if(_target.classid == 155) // Warriv A2
							me.SelectNPCMenu(0x0D37);
						else if(_target.classid == 210) // Meshif A2
							me.SelectNPCMenu(0x0D38);
						else if(_target.classid == 264) // Meshif A3
							me.SelectNPCMenu(0x0D39);
						else if(_target.classid == 367) // Tyrael A4
							me.SelectNPCMenu(0x58D2);
						else
						{
							me.SelectNPCMenu(0x0000);
							me.Cancel(0);
							me.Cancel(1);
						}
						
						while(!NTH_GetLeader())
							Delay(500);
					}
					else
					{
						Delay(1000);
						NTH_Say("I had a problem talking to that NPC...");
					}
					
					break;
				}
			} while(_target.GetNext());
			
			if(!_npc)
				NTH_Say("Show me what NPC to talk to!");

			return;
		}
		
		return;
	}
	
	/////////////////
	// aura
	/////////////////
	
	if(command == "ara")
	{
		if(me.classid != NTC_CHAR_CLASS_PALADIN)
			return;
		
		var _aura = 0;
		
		if(variable == "pray" || variable == "pray")
			_aura = 99;
		else if(variable == "clean" || variable == "clean")
			_aura = 109;
		else if(variable == "med" || variable == "meditation")
			_aura = 120;
		else if(variable == "vig" || variable == "vig")
			_aura = 115;
		else if(variable == "salv" || variable == "salvation")
			_aura = 125;
		else if(variable == "might")
			_aura = 98;
		else if(variable == "conc" || variable == "concentration")
			_aura = 113;
		else if(variable == "fana" || variable == "fanaticism")
			_aura = 122;
		else if(variable == "convic" || variable == "conviction")
			_aura = 123;
		
		if(_aura)
		{
			if(NTC_GetSkillLevel(_aura))
			{
				NTH_Say("OK, I'll use that aura");
				NTC_PutSkill(_aura, NTC_HAND_RIGHT);
				NTConfig_AttackSkill[2] = _aura;
				NTConfig_AttackSkill[4] = _aura;
			}
			else
				NTH_Say("I don't have that aura!");
		}
		else
			NTH_Say("I don't recognize that aura!");
		
		return;
	}
	
	/////////////////
	// wp
	/////////////////
	
	if(command == "wp")
	{
		_target;
		var _wp = null;

		switch(me.areaid)
		{
			case 3:
				_wp = 119;
					break;
			case 4:
				_wp = 119;
					break;
			case 5:
				_wp = 119;
					break;
			case 6:
				_wp = 119;
					break;
			case 27:
				_wp = 119;
					break;
			case 29:
				_wp = 157;
					break;
			case 32:
				_wp = 119;
					break;
			case 35:
				_wp = 157;
					break;
			case 42:
				_wp = 156;
					break;
			case 43:
				_wp = 156;
					break;
			case 44:
				_wp = 156;
					break;
			case 46:
				_wp = 402;
					break;
			case 48:
				_wp = 323;
					break;
			case 52:
				_wp = 288;
					break;
			case 57:
				_wp = 156;
					break;
			case 74:
				_wp = 402;
					break;
			case 76:
				_wp = 237;
					break;
			case 77:
				_wp = 237;
					break;
			case 78:
				_wp = 237;
					break;
			case 79:
				_wp = 237;
					break;
			case 80:
				_wp = 237;
					break;
			case 81:
				_wp = 237;
					break;
			case 83:
				_wp = 237;
					break;
			case 101:
				_wp = 324;
					break;
			case 106:
				_wp = 238;
					break;
			case 107:
				_wp = 238;
					break;
			case 111:
				_wp = 496;
					break;
			case 112:
				_wp = 496;
					break;
			case 113:
				_wp = 511;
					break;
			case 115:
				_wp = 511;
					break;
			case 117:
				_wp = 496;
					break;
			case 118:
				_wp = 511;
					break;
			case 129:
				_wp = 494;
					break;	
		}
		
		if(_wp != null)
		{
			NTH_Say("Grabbing waypoint");
			
			NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, _wp, 1, 1);

			_target = NTC_FindUnit(NTC_UNIT_OBJECT, _wp);

			if(_target)
			{
				if(GetDistance(me, _target) > 2)
					NTM_MoveTo(_target.areaid, _target.x+1, _target.y);

				Delay(500);
				
				NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _target);
				
				Delay(1000);
				
				me.Cancel(1);
			}
		}
		else
			NTH_Say("There's no waypoint here!");
		
		return;
	}
}
gtoilet is offline  
Old 04/15/2014, 21:54   #7
 
elite*gold: 0
Join Date: Dec 2013
Posts: 39
Received Thanks: 0
im going to start back up and try modding and getting this to work

has anyone have more ideas for me to try?
gtoilet is offline  
Old 04/17/2014, 11:31   #8
 
elite*gold: 0
Join Date: Dec 2013
Posts: 39
Received Thanks: 0
helperbot.ntj (47) : ref error : NTA_initialize not defined

nt_attack below

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 6:  //Magic Arrow
			case 7:  //Fire Arrow
				_NTA_SkillRange[i] = 20;
				break;
			case 8: //Inner Sight
				_NTA_SkillRange[i] = 13;
				break;
			case 10: //Jab
				_NTA_SkillRange[i] = 3;
				break;
			case 11: //Cold Arrow
			case 12: //Multiple Shot
				_NTA_SkillRange[i] = 20;
				break;
			case 14: //Power Strike
				_NTA_SkillRange[i] = 20;
				break;
			case 15: //Poison Javelin
				_NTA_SkillRange[i] = 10;
				break;
			case 16: //Exploding Arrow
				_NTA_SkillRange[i] = 10;
				break;
			case 17: //Slow Missiles
				_NTA_SkillRange[i] = 13;
				break;
			case 19: //Impale
				_NTA_SkillRange[i] = 3;
				break;
			case 20: //Lightning Bolt
			case 21: //Ice arrow
			case 22: //Guided arrow
				_NTA_SkillRange[i] = 20;
				break;
			case 24: //Charged Strike
				_NTA_SkillRange[i] = 3;
				break;
			case 25: //Plague jav
				_NTA_SkillRange[i] = 10;
				break;
			case 26://Strafe
			case 27://Immolation Arrow
				_NTA_SkillRange[i] = 20;
				break;
			case 30: //Fend
				_NTA_SkillRange[i] = 3;
				break;
			case 31: //Freezing arrow
				_NTA_SkillRange[i] = 15;
				break;
			case 35: //Lightning Fury
				_NTA_SkillRange[i] = 12;
				break;
			case 38: //Charged Bolt
				_NTA_SkillRange[i] = 20;
				break;
			case 44: //Frost Nova
			case 48: //Nova
				_NTA_SkillRange[i] = 10;
				break;
			case 64: //Frozen Orb
				_NTA_SkillRange[i] = 15;
				break;
			case 74: //Corpse Explosion
			case 84: //Bone Spear
				_NTA_SkillRange[i] = 15;
				break;
			case 92://Poison Nova
				_NTA_SkillRange[i] = 7;
				break;
			case 93://Bone Spirit
				_NTA_SkillRange[i] = 25;
				break;
			case 95: //Revive
				_NTA_SkillRange[i] = 20;
			case 97: //Smite
				_NTA_SkillRange[i] = 3;
				break;
			case 101: //Holy Bolt
				_NTA_SkillRange[i] = 15;
				break;
			case 106: //Zeal
			case 112: //Blessed Hammer
				_NTA_SkillRange[i] = 3;
				break;
			case 144: //Concentrate
				_NTA_SkillRange[i] = 8;
				break;
			case 147: //Frenzy
				_NTA_SkillRange[i] = 2;
				break;
			case 151: //Whirlwind
				_NTA_SkillRange[i] = 8;
				break;
			case 152: //Berserk
				_NTA_SkillRange[i] = 3;
				break;
			case 225:  //Fire Storm
			case 229:  //Molten Boulder
			case 230:  //Arctic Blast
			case 232:  //Feral Rage
			case 233:  //Maul
			case 238:  //Rabies
			case 239:  //Fire Claws
			case 240:  //Twister
			case 242:  //Hunger
			case 243:  //Shockwave
			case 244:  //Volcano
				_NTA_SkillRange[i] = 3;
				break;
			case 245:  //Tornado
				_NTA_SkillRange[i] = 3;
				break;
			case 248:  //Fury      
				_NTA_SkillRange[i] = 3;
				break;
			case 271: // Lightning Sentry
			case 276: // Death Sentry			
			case 261: // Charged Bolt Sentry
				_NTA_SkillRange[i] = 20;
				break;		
			case 251: // Fire Blast	
			case 256: // Shockweb Sentry
				_NTA_SkillRange[i] = 15;
				break;
			default:
				_NTA_SkillRange[i] = 25;
				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 ())
     {
         _attackcount var = 0;

         while (_attackcount <300 && NTA_IsValidMonster (_target))
         {
             if (NTA_Attack (_target, (_attackcount% 30) == 0) <2)
                 break;

             _attackcount + +;
         }
     }

     return (_target.hp <= 0 | | _target.mode == 0 | | _target.mode == 12);
 }

 function NTA_ClearPosition (range, pickitem, safe level, recursion)
 {
     var _orgx, _orgy;
     var _spectype = [0x0A, 0x01, 0x01];
     var _skiplist;
     _attackcount var = 0;
     var _target;
     var _distance, _mingid, _mindistance;
     var _result;

     if (NTConfig_AttackSkill [1] <1 | | NTConfig_AttackSkill [3] <1)
         return false;

     switch (arguments.length)
     {
     case 0:
         range = 20;
     case 1:
         pickitem = false;
     case 2:
         safe level = 0;
     case 3:
         recursion = true;
     default:
         if (NTConfig_CheckSelfSafe <0x01 && NTConfig_CheckMercSafe <0x01)
             safe level = 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 + +;
                         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 ("YC <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 (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 ();
     / *
     if (! NTA_CheckForCloseMonsters (15))
         NTA_OpenChests ();
     * /
     switch (safe level)
     {
     case 1:
         return NTTMGR_CheckSafe (0x00, 0x01 & NTConfig_CheckMercSafe);
     case 2:
         return NTTMGR_CheckSafe (NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
     }

     return true;
 }

 function NTA_ClearLevel (pickitem, safe level)
 {
     var i;
     var _room, _rooms;
     var _distance, _minindex, _mindistance;

     _room = getRoom ();

     if (! _room)
         return false;

     switch (arguments.length)
     {
     case 0:
         pickitem = true;
     case 1:
         safe level = 2;
     default:
         if (NTConfig_CheckSelfSafe <0x01 && NTConfig_CheckMercSafe <0x01)
             safe level = 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, safe level))
                 return false;

             NTP_DoPrecast (false);
         }

         _rooms.splice (_minindex, 1);
     }

     return true;
 }

 function NTA_ClearRoom (pickitem, safe level)
 {
     var _room;
     var _spectype = [0x0A, 0x01, 0x01];
     var _skiplist;
     _attackcount var = 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:
         safe level = 0;
     default:
         if (NTConfig_CheckSelfSafe <0x01 && NTConfig_CheckMercSafe <0x01)
             safe level = 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 ("YC <No Monsters close - looting");
             NTA_FindItem (NTConfig_FindItemRange);
         }
     }
        
     if (NTConfig_OpenChest)
     {
         _target = NTC_GetSpecialChest ();

         if (_target && _room.UnitInRoom (_target) && NTC_OpenChest (_target))
             _attackcount + +;
     }

     if (pickitem && _attackcount> 0)
         NTSI_PickItems ();
     / *
     if (! NTA_CheckForCloseMonsters (15))
         NTA_OpenChests ();
     * /
     switch (safe level)
     {
     case 1:
         return NTTMGR_CheckSafe (0x00, 0x01 & NTConfig_CheckMercSafe);
     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 (((_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 Water Watchers
         return false;

     if (monster.GetState (53) | | monster.GetState (96)) / / Conversion, Revive
         return false;

     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 "like":
         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:
         enemy.GetStat return (36);
     case NTA_DAMAGE_MAGIC:
         enemy.GetStat return (37);
     case NTA_DAMAGE_FIRE:
         enemy.GetStat return (39);
     case NTA_DAMAGE_LIGHTNING:
         enemy.GetStat return (41);
     case NTA_DAMAGE_COLD:
         enemy.GetStat return (43);
     case NTA_DAMAGE_POISON:
         enemy.GetStat return (45);
     }

     return 0;
 }

 NTA_DetectAttackPattern function ()
 {
     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
 NTA_Attack function (target, first order)
 {
     switch (me.classid)
     {
     case NTC_CHAR_CLASS_AMAZON:
         NTA_AmazonAttackInt return (target, first order);
     case NTC_CHAR_CLASS_SORCERESS:
         NTA_SorceressAttackInt return (target, first order);
     case NTC_CHAR_CLASS_NECROMANCER:
         NTA_NecromancerAttackInt return (target, first order);
     case NTC_CHAR_CLASS_PALADIN:
         NTA_PaladinAttackInt return (target, first order);
     case NTC_CHAR_CLASS_BARBARIAN:
         NTA_BarbarianAttackInt return (target, first order);
     case NTC_CHAR_CLASS_DRUID:
         NTA_DruidAttackInt return (target, first order);
     case NTC_CHAR_CLASS_ASSASSIN:
         NTA_AssassinAttackInt return (target, first order);
     }

     return 0;
 }

 / / Internal function
 NTA_AmazonAttackPatternInt function ()
 {
     return false;
 }

 NTA_AmazonAttackInt function (target, first order)
 {
     return 1;
 }

 function NTA_AmazonCastSkillInt (index, target)
 {
     return false;
 }

 NTA_SorceressAttackPatternInt function ()
 {
     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: / / Fireball + 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: / / Fireball 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]);
 }

 NTA_SorceressAttackInt function (target, first order)
 {
     var _primaryindex;

     if (NTTMGR_CheckCurse (NTConfig_CheckSelfSafe & 0x10, NTConfig_CheckMercSafe & 0x10))
     {
         if (! NTTMGR_VisitTown ())
             return 0;
     }

     if (first order && NTConfig_AttackSkill [0]> 0 && NTA_GetResistance (target, _NTA_SkillDamage [0]) <100 && me.GetSkillStatus (NTConfig_AttackSkill [0])! = 8)
     {
         if (GetDistance (me, target)> _NTA_SkillRange [0] | |! Check Collision (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 (NTA_IsActBoss (target.classid) && NTConfig_CastStatic <100 && parseInt (target.hp * 100/target.hpmax)> NTConfig_CastStatic NTA_GetResistance && (target, NTA_DAMAGE_LIGHTNING) <= 80)
     {
         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 | |! Check Collision (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 (! Check Collision (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;

     if (NTA_GetResistance (target, _NTA_SkillDamage [_primaryindex]) <= 90)
     {
         if (! NTA_SorceressCastSkillInt (_primaryindex, target))
             return 2;

         return 3;
     }

     if (NTConfig_AttackSkill [5]> 0 && NTA_GetResistance (target, _NTA_SkillDamage [5]) <= 80)
     {
         if (! NTA_SorceressCastSkillInt (5, target))
             return 2;

         return 3;
     }

     if (NTA_GetResistance (target, _NTA_SkillDamage [_primaryindex]) <100 | | (_primaryindex == 1 && NTC_GetMerc ()))
     {
         if (! NTA_SorceressCastSkillInt (_primaryindex, target))
             return 2;

         return 3;
     }

     return 1;
 }

 function NTA_SorceressCastSkillInt (index, target)
 {
     if (me.GetSkillStatus (NTConfig_AttackSkill [index])! = 8)
     {
         if (GetDistance (me, target)> _NTA_SkillRange [index] | |! Check Collision (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 (NTConfig_AttackSkill [7]> 0 && (NTA_GetResistance (target, _NTA_SkillDamage [index +1]) <= 90 | | NTA_GetResistance (target, _NTA_SkillDamage [7]) <= 90))
         {
             if (NTA_GetResistance (target, _NTA_SkillDamage [index +1]) <= 90)
             {
                 if (GetDistance (me, target)> _NTA_SkillRange [index +1] | |! Check Collision (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);
             }
             else
             {
                 if (GetDistance (me, target)> _NTA_SkillRange [7] | |! Check Collision (me, target, 4))
                 {
                     var = _pos me.GetOptimalAttackPos (target.areaid, target.x, target.y, _NTA_SkillRange [7], 4);

                     if (_pos)
                         NTM_MoveTo (target.areaid, _pos [0], _pos [1], 0);
                 }
                 return NTC_CastSkill (NTConfig_AttackSkill [7], _NTA_SkillHand [7], target);
             }
         }
         else
         {
             if (GetDistance (me, target)> _NTA_SkillRange [index +1] | |! Check Collision (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;
 }

 NTA_NecromancerAttackPatternInt function ()
 {
     return false;
 }

 NTA_NecromancerAttackInt function (target, first order)
 {
     return 1;
 }

 function NTA_NecromancerCastSkillInt (index, target)
 {
     return false;
 }

 NTA_PaladinAttackPatternInt function ()
 {
     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];
         }
     }

     switch (_maxindex)
     {
     case 0: / / Blessed Hammer
         NTConfig_AttackSkill [1] = 112;
         NTConfig_AttackSkill [2] = 113;
         NTConfig_AttackSkill [3] = 112;
         NTConfig_AttackSkill [4] = 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]);
 }

 NTA_PaladinAttackInt function (target, first order)
 {
     var _primaryindex;

     if (NTTMGR_CheckCurse (NTConfig_CheckSelfSafe & 0x10, NTConfig_CheckMercSafe & 0x10))
     {
         if (! NTTMGR_VisitTown ())
             return 0;
     }

     if (first order && NTConfig_AttackSkill [0]> 0 && NTA_GetResistance (target, _NTA_SkillDamage [0]) <100)
     {
         if (GetDistance (me, target)> _NTA_SkillRange [0] | |! Check Collision (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 &&! Check Collision (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_SkillDamage [5]) <100)
     {
         if (_NTA_SkillRange [5] <4 &&! Check Collision (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 (check Collision (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] | |! Check Collision (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);
 }

 NTA_BarbarianAttackPatternInt function ()
 {
     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]);
 }

 NTA_BarbarianAttackInt function (target, first order)
 {
     var _primaryindex;

     if (NTTMGR_CheckCurse (NTConfig_CheckSelfSafe & 0x10, NTConfig_CheckMercSafe & 0x10))
     {
         if (! NTTMGR_VisitTown ())
             return 0;
     }

     if (first order && NTConfig_AttackSkill [0]> 0 && NTA_GetResistance (target, _NTA_SkillDamage [0]) <100)
     {
         if (GetDistance (me, target)> _NTA_SkillRange [0] | |! Check Collision (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) && Check Collision (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) && Check Collision (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] | |! Check Collision (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] | |! Check Collision (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);
 }

 NTA_DruidAttackPatternInt function ()
 {
     return false;
 }

 NTA_DruidAttackInt function (target, first order)
 {
     return 1;
 }

 function NTA_DruidCastSkillInt (index, target)
 {
     return false;
 }

 NTA_AssassinAttackPatternInt function ()
 {
     return false;
 }

 NTA_AssassinAttackInt function (target, first order)
 {
     return 1;
 }

 function NTA_AssassinCastSkillInt (index, target)
 {
     return false;
 }

 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 (50);
     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 file handle = FileOpen ("FailedtoLoot.txt", 2);
                         var date string = new Date () toLocaleFormat ("% a% m /% d /% y% H:% M:% S").;
                         if (filehandle)
                         {
                             filehandle.WriteLine ("[" + date string + "] Could not loot:" + _corpse.name + "[" + _corpse.classid + "] (Location:" + me.areaid + ")");
                             filehandle.Close ();
                         } 
                         Print ("YC; Could not loot:" + _corpse.name + "[" + _corpse.classid + "] (Location:" + me.areaid + ")");
                         break;
                     }
                    
                 }
             }
         } While (_corpse.GetNext ());
        
         NTC_PingDelay (50);
         NTC_SwapWeapons (0);
         NTC_PingDelay (50);
        
         NTSI_PickItems ();
                        
         return true;
     }
     return false;
 }

 function NTA_IsLootable (classid)
 {
     switch (classid)
     {
         case 179: / / Cow
         case 156: / / Andariel
         case 180: / / Sand Maggot Young
         case 181: / / Rock Worm Young
         case 182: / / Devourer Young
         case 183: / / Giant Lamprey Young
         case 184: / / World Killer Young
         case 190: / / Sand Maggot Egg
         case 191: / / Rock Worm Egg
         case 192: / / Devourer Egg
         case 193: / / Giant Lamprey Egg
         case 194: / / World Killer Egg
         case 206: / / Fould Crow's Nest
         case 207: / / Blood Hawk Nest
         case 208: / / Black Vulture nest
         case 209: / / Cloud Stalker Nest
         case 221: / / Duriel
         case 227: / / Maggot
         case 228: / / Mummy generator
         case 234: / / Flying Scimitar
         case 242: / / Mephisto
         case 243: / / Diablo
         case 250: / / Summoner
         case 258: / / Water Watcher Limb
         case 259: / / River Stalker Limb
         case 260: / / Sygain Watcher Limb        
         case 261: / / Water Watcher Head 
         case 262: / / River Stalker Head
         case 263: / / Sygain Watcher Head
         case 267: / / Blood Raven
         case 269: / / An evil force
         case 270: / / Rogue Scout (== Merc)
         case 273: / / Gargoyle Trap
         case 289: / / Clay Golem
         case 290: / / Blood Golem
         case 291: / / Iron Golem
         case 292: / / Fire Golem
         case 301: / / Flesh Beast
         case 302: / / Stygian Dog
         case 303: / / Grotesque Wyrm
         case 326: / / A Trap
         case 327: / / A Trap
         case 328: / / A Trap
         case 329: / / A Trap
         case 330: / / A Trap
         case 334: / / Sucker Nest
         case 335: / / Fleeder Nest
         case 336: / / Blood Hook Nest
         case 337: / / Blood Wing Nest
         case 338: / / Act 2 guard (== Merc)
         case 348: / / Turret
         case 349: / / Turret
         case 350: / / Turret
         case 351: / / Hydra
         case 352: / / Hydra
         case 353: / / Hydra
         case 354: / / A Trap
         case 356: / / Dopplezon
         case 357: / / Valkyrie
         case 359: / / Iron Wolf (== Merc)
         case 366: / / Compelling Orb
         case 369: / / A Trap
         case 371: / / Lightning Spire
         case 372: / / Fire Tower
         case 403: / / Traped Soul
         case 404: / / Traped Soul
         case 406: / / Izual
         / / ----------------
         case 410: / / Wake Of Destruction
         case 411: / / Charged Bolt Sentry
         case 412: / / Lightning Sentry
         case 413: / / Blade Creeper
         case 414: / / Invisible Pet
         case 415: / / Inferno Sentry
         case 416: / / Death Sentry
         case 417: / / Shadow Warrior
         case 418: / / Shadow Master
         case 419: / / Druid Hawk
         case 420: / / Druid Spirit Wolf
         case 421: / / Druid Fenris
         case 422: / / Spirit of Barbs
         case 423: / / Heart Of Wolverine
         case 424: / / Oak Sage
         case 425: / / Druid Plague Poppy
         case 426: / / Druid Cycle of Life
         case 427: / / Vine Creature
         case 428: / / Druid Bear
         case 429: / / Eagle
         case 430: / / Wolf
         case 431: / / Bear
         case 432: / / Barricaded Door
         case 433: / / Barricaded Door
         case 434: / / Prison Door
         case 435: / / Barricaded Door
         case 461: / / Fanatic Minion
         case 462: / / Berserk Slayer
         case 463: / / Consumed Fire Boar
         case 464: / / Consumed Ice Boar
         case 465: / / Frenzied Hell Spawn
         case 466: / / Frenzied Hell Spawn
         case 467: / / Insane Hell Spawn
         case 468: / / Insane Ice Spawn
         case 497: / / Catapult
         case 498: / / Catapult
         case 499: / / Catapult
         case 500: / / Catapult
         case 501: / / Frozen Horror 1
         case 502: / / Frozen Horror 2
         case 503: / / Frozen Horror 3
         case 504: / / Frozen Horror 4
         case 505: / / Frozen Horror 5
         case 516: / / Catapult
         case 517: / / Catapult
         case 518: / / Catapult
         case 519: / / Catapult
         case 522: / / Barbarian Fighter
         case 523: / / Barbarian Fighter
         case 524: / / Barricade Wall Right
         case 525: / / Left Wall Barricade
         case 526: / / Nihlatak
         case 528: / / Evil Hat
         case 535: / / Barbarian Fighter
         case 536: / / Barbarian Fighter
         case 537: / / Ancient Statue 1
         case 538: / / Ancient Statue 2
         case 539: / / Ancient Statue 3
         case 540: / / Ancient Barbarian 1
         case 541: / / Ancient Barbarian 2
         case 542: / / Ancient Barbarian 3
         case 543: / / Baal Throne
         case 544: / / Baal Crab
         case 545: / / Baal Taunt
         case 551: / / Pain Worm
         case 552: / / Pain Worm
         case 553: / / Pain Worm
         case 554: / / Pain Worm
         case 555: / / Pain Worm
         case 556: / / Bunny
         case 559: / / Baal Crab to Stairs
         case 560: / / Hireling
         case 561: / / Hireling
         case 562: / / Baal Tentacle
         case 563: / / Baal Tentacle
         case 564: / / Baal Tentacle
         case 565: / / Baal Tentacle
         case 566: / / Baal Tentacle
         case 567: / / Injured Barbarian
         case 568: / / Injured Barbarian
         case 569: / / Injured Barbarian
         case 570: / / Baal Crab Clone
         case 571: / / Baal's Minions
         case 572: / / Baal Minionse        
         case 573: / / Baal's Minions
         case 574: / / World Stone Effect
             return false;
             break;
         default:
             return true;
             break;
     }
 }
 / *
 NTA_OpenChests function ()
 {    
     var _orgx;
     var _orgy;
     var _chest;
    
     if (! NTA_AreaCheckChests (me.areaid))
         return false;
        
     _orgx = me.x;
     _orgy = me.y;
     _chest = NTC_FindUnit (NTC_UNIT_OBJECT);
    
     if (_chest)
     {
         do
         {
             if (_chest.mode == 0 && GetDistance (_orgx, _orgy, _chest.x, _chest.y) <20 && NTA_IsLootableChest (_chest.classid) &&! (_chest.classid == 371 && _chest.areaid == 25) && _chest.name.toLowerCase ()! = "an evil force")
             {
                     NTC_PingDelay (100);
                     / / Print ("ÿc2Opening:" + _chest.name + "[" + _chest.classid + "]");
                     if (! NTC_OpenChest (_chest))
                     {
                         Print ("ÿc1Could not open: Object (" + _chest.x + "|" + _chest.y + "):" + + _chest.name "[ClassID:" + _chest.classid + "mode:" + _chest. mode + "]");
                         var file handle = FileOpen ("FailedToOpenChest.txt", 2);
                         var date string = new Date () toLocaleFormat ("% a% m /% d /% y% H:% M:% S").;
                         if (filehandle)
                         {
                             filehandle.WriteLine ("[" + date string + "] Failed to open" + _chest.name + "[" + _chest.classid + "] ... Fashion | Area:" + _chest.mode + "|" + me. areaid);
                             filehandle.Close ();
                         } 
                     }
             }
         } While (_chest.GetNext ());
         NTSI_PickItems ();
         return true;
     }
     return false;
 }

 function NTA_IsLootableChest (classid)
 {
     switch (classid)
     {
         case 1: / / Casket
         case 3: / / Casket
         case 4: / / Large Urn
         case 5: / / Chest
         case 6: / / Chest
         case 7: / / barrel
         case 8:
         case 9: / / Urn
         case 28: / / Undefiled Grave
         case 46:
         case 50:
         case 51: / / Casket
         case 52: / / Urn
         case 53: / / Casket
         case 54: / / Rogue Dead
         case 55: / / Rogue Dead
         case 56: / / Rogue Dead
         case 57: / / Rogue Dead
         case 58: / / Rogue Dead
         case 79: / / Casket
         case 84:
         case 85:
         case 87: / / Chest
         case 88: / / Chest
         case 89:
         case 94: / / Large Urn
         case 95: / / Large Urn
         case 96:
         case 104:
         case 105: / / Armor Stand
         case 106: / / Weapon Rack
         case 107: / / Weapon Rack
         case 109:
         case 111:
         case 113:
         case 115:
         case 118:
         case 120:
         case 139: / / Chest
         case 140: / / Chest
         case 141: / / Chest
         case 141:
         case 142: / / Jug
         case 143: / / Jug
         case 144: / / Chest
         case 146: / / Chest
         case 147: / / Chest
         case 148: / / Chest
         case 154: / / Corpse
         case 155: / / Hidden Stash
         case 158:
         case 164:
         case 166:
         case 167:
         case 168:
         case 170:
         case 171: / / Skeleton
         case 173:
         case 174: / / Loose rock
         case 175: / / Loose Boulder
         case 176:
         case 177:
         case 178: / / Guard Corpse
         case 181: / / Chest
         case 182:
         case 183: / / Chest
         case 185: / / stash
         case 186: / / stash
         case 198:
         case 203: / / stash
         case 204: / / stash
         case 205: / / stash
         case 208: / / Basket
         case 209: / / Basket
         case 223:
         case 224:
         case 225: / / Skullpile
         case 239: / / Body
         case 240: / / Chest
         case 241: / / Chest
         case 242: / / Chest
         case 243:
         case 244: / / Rat's Nest
         case 247: / / Bed
         case 266: / / Goo Pile
         case 270: / / Corpse
         case 271: / / Corpse
         case 329: / / Chest
         case 330: / / Chest
         case 331:
         case 332: / / Chest
         case 333:
         case 334:
         case 335: 
         case 336:
         case 360:
         case 362:
         case 363:
         case 365:
         case 371:
         case 372:
         case 389:
         case 390:
         case 391:
         case 397: / / (Super) Chest
         case 405: / / (Super) Chest
         case 413:
         case 416:
         case 418: / / barrel
         case 419: / / barrel
         case 420: / / Wooden Chest
         case 424: / / Burial Chest
         case 425:
         case 430: / / Chest
         case 431:
         case 432:
         case 433:
         case 443: / / Jar
         case 444: / / Jar
         case 445: / / Jar
         case 455:
         case 463:
         / / Case 466: / / Evil Urn
         case 467:
         case 468:
         case 469:
         case 470:
         case 471:
         case 477: / / Dead Barbarian
         case 501:
         case 502:
         case 504:
         case 505:
         case 548:
         case 549:
         case 550:
         case 551:
             return true;
             break;
         default:
             return false;
             break;
     }

 }
 * /
 function NTA_CheckForCloseMonsters (range)
 {
     if (range <1 | | arguments.length <1)
         return false;
        
     var _monstersClose = false;
     var = _checkMonster NTC_FindUnit (NTC_UNIT_MONSTER);
    
     if (_checkMonster)
     {    
         do
         {
             if (_checkMonster.IsAttackable () && GetDistance (me.x, me.y, _checkMonster.x, _checkMonster.y) <range && NTA_IsValidMonster (_checkMonster))
             {    
                 / / Print ("ÿc1Close Monster detected:" + _checkMonster.name);
                 _monstersClose = true;
                 break;
             }
         } While (_checkMonster.GetNext ());
     }
     return _monstersClose;
 }

 / *
 function NTA_AreaCheckChests (areaid)
 {
     var exeptionsArray = new Array ();
    
     exeptionsArray.push (25);  / / Tower Cellar Level 5
    
     for (var i = 0; i <exeptionsArray.length; i + +)
     {
         if (areaid == exeptionsArray [i])
             return false;
     }
     return true;
 }
helperbot.ntj below
Code:
/*///////////////////////////////////////////////////////////////
Author:  DysfunctionaI @ BlizzHackers, DysfunctionaI @ D2JSP
/////////////////////////////////////////////////////////////////

This file MUST be named NTHelperBotv2.ntj

If you're having a problem, then read the release thread first,
to see if your problem has already been discussed. If it hasn't,
then post your problem there; don't PM me. All command edits go
in NTHCommands.ntj

//////////////////////////////////////////////////////////////////
DON'T EDIT THIS FILE UNLESS YOU KNOW WHAT YOU'RE DOING!
////////////////////////////////////////////////////////////////*/


//Variable Declaration
Include("libs/common/NTCommon.ntl"); 
NTC_IncludeConfig("NTBot/char_configs");
var _leader = null;
var _leaderhandle = null;
var _leadername = NTH_Leader;
var _verbal = NTH_Verbal;
var _attack = NTH_Attack;
var _trigger = NTH_Trigger;
var _autoskill = NTH_AutoSkill;
var _useteleport = NTH_Teleport;
var _updatedleader = null;
var _target;
var _wp;
var _level = me.GetStat(12);
var _stay = false;
var _stuckx;
var _stucky;
var _stuckcount = 0;
var _autoskillcount = 0;
var _levelcount = 0;
var _getleadercount = 10;

function NTMain() 
{
   //Initialization
   Include("NTBot/tools/NTHCommands.ntj");
   NTC_IncludeLibs(); 
   NT_LoadConfig();
   NTSI_LoadNIPFiles("NTBot/item_configs"); 
   NTA_Initialize();
   RegisterEvent(EVENT_GAMEMSG, NTH_Talk);
   NTConfig_PublicMode = false;
   me.maxgametime = 0;
   
   //Start Game
   if(_autoskill)
   {
      switch(me.classid)
      {
         case NTC_CHAR_CLASS_AMAZON:
         case NTC_CHAR_CLASS_BARBARIAN:
         case NTC_CHAR_CLASS_DRUID:
         case NTC_CHAR_CLASS_ASSASSIN:
            NTH_Say("AutoSkill is not currently availible for my class. Disabling.");
            _autoskill = false;
            break;
         default:
            NTH_AttackSetup();
            break;
      }
   }
   
   while(!NTC_InMyParty(_leadername))
   {
      NTH_PartyLeader();
      
      Delay(1000);
   }
   
   NTH_GetLeaderHandle();
   
   //Bot
   while(NTH_InGame(_leadername))
   {
      if(me.hp < 1 && (me.mode == 17 || me.mode == 0))
         NTH_Revive();
      
      if(!_stay && NTC_InMyParty(_leadername))
      {
         if(_getleadercount++ > 9)
         {
            _getleadercount = 0;
            
            _updatedleader = NTH_GetLeader();
         }
         
         if(_updatedleader != null)
            NTH_Follow();
         else
         {
            if(me.areaid != _leaderhandle.areaid)
               NTH_ChangeArea();
            else
               _updatedleader = NTH_GetLeader();
         }
      }
      else
      {
         NTH_PartyLeader();
         
         if(_attack && !NTC_InTown())
            NTH_ClearPosition();
         
         Delay(500);
      }
      
      Delay(100)
   }
   
   NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
   
   return;
}

//GetLeader
function NTH_GetLeader()
{   
   _target = NTC_FindUnit(NTC_UNIT_PLAYER);

   if(_target)
   {
      do
      {
         if(_target.name == _leadername)
            return _target;
               
      } while(_target.GetNext());
   }
   
   return null;
}

//Follow
function NTH_Follow()
{
   if(GetDistance(me.x, me.y, _leader.x, _leader.y) > 4)
   {
      if(_stuckcount > 11)
      {
         _stuckcount = 0;
         
         NTH_MoveTo(_leaderhandle.areaid, _leader.x, _leader.y, 15);
         
         if(GetDistance(me.x, me.y, _leader.x, _leader.y) > 8)
            NTH_ClearPosition(true);
      }
      
      _stuckx = me.x;
      _stucky = me.y;
      
      ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _leader.x, _leader.y);
      ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
      
      Delay(100);
      
      if(me.x == _stuckx && me.y == _stucky)
         _stuckcount++;
   }
   else if(!NTC_InTown() && _attack)
   {
      _stuckcount = 0;
      
      NTH_ClearPosition();
   }
   else
   {
      _stuckcount = 0;
      
      Delay(200);
   }
}

//ChangeArea
function NTH_ChangeArea()
{
   var i;
   var _orgcoords;
   
   while(me.areaid == 0 || _leaderhandle.areaid == 0)
      Delay(200);
   
   // Walking Into New Area
   if(GetDistance(me.x, me.y, _leader.x, _leader.y) < 50)
   {
      for(i = 0; i < 8; i++)
      {
         _orgcoords = _leader.x + _leader.y;
         
         Delay(100);
         
         if(_leader.x+_leader.y != _orgcoords)
         {
            ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _leader.x, _leader.y);
            ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
            
            Delay(500);
            
            return;
         }
      }
   }
   
   if(!NTH_TakeWaypoint(_leaderhandle.areaid))
   {
      if(!NTH_TakeStair(_leaderhandle.areaid))
      {
         if(!NTH_UsePortal("none"))
         {
            Say("I'm stuck");
            Delay(50);
            
            while(!NTH_GetLeader())
            {
               if(!NTC_InTown() && _attack)
                  NTH_ClearPosition(true);
                  
               Delay(500);
            }
         }
      }
   }
   
   if(!NTC_InTown())
      NTP_DoPrecast(true);
}

//Talk
function NTH_Talk(msg, type) 
{
   if(msg.indexOf(_leadername) != -1 && msg.charAt(_leadername.length+8) == _trigger)
   {
      var _command;
      var _variable;
      
      msg = msg.toLowerCase();
      msg = msg.substring(_leadername.length+9)
      msg = msg.split(" ");
      _command = msg[0];
      _variable = msg[1];
      
      if(_variable == "")
         _variable = undefined;
      
      NTH_Commands(_command, _variable);
         
      return;
   }
}

//GetLeaderHandle
function NTH_GetLeaderHandle()
{
   while(!_leaderhandle)
   {
      _target = GetPlayerUnit();
      
      if(_target)
      {
         while(_target.GetNext())
         {
            if(_target.name == _leadername)
            {
               _leaderhandle = _target;
               break;
            }
         }
      }
      
      Delay(500);
   }
   
   while(!_leader)
   {
      _leader = NTH_GetLeader();
      
      Delay(100);
   }
}

//Revive
function NTH_Revive()
{
   var _message = new Array(4);
   
   while(!NTC_InTown())
   {
      me.Cancel(0);
      Delay(1000);
   }
      
   NTTM_TownMove("portalspot");
      
   _message[1] = "Lmk when it's safe";
   _message[2] = "TP and tell me if it's safe";
   _message[3] = "Call me when it's safe";
   _message[4] = "Just waiting for a safe TP";
   _message[0] = _message[Random(1, 4)];
   
   
   Say(_message[0]);
   Delay(50);
   
   while(!NTH_GetLeader())
      Delay(500);
   
   return;
}

//InGame
function NTH_InGame(playerName)
{
   _target = GetPlayerUnit();

   if(_target)
   {
      do
      {
         if(_target.name == playerName)
            return true;
      } while(_target.GetNext());
   }
   return false;
}

//Say
function NTH_Say(response)
{
   if(_verbal)
   {
      Say(response);
      
      Delay(50);
   }
   else
      Print(response);
}

//TakeStair
function NTH_TakeStair(areaid)
{
   var _unit;
   var i;

   _unit = NTM_GetStairInt(areaid);

   if(!_unit)
      return false;
   
   for(i = 0; i < 6; i++)
   {
      NTM_MoveTo(me.areaid, _unit.x+1, _unit.y, 10);
         
      NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _unit);
         
      Delay(500);
      
      if(me.areaid == areaid)
         return true;
   }

      return false;
}

//UsePortal
function NTH_UsePortal(leader, areaid)
{
   var _portal;
   var _preareaid = me.areaid;
   
   if(arguments.length < 2)
      areaid = 0;
   
   if(me.areaid == 102) // Portal to A4
   {
      _portal = NTC_FindUnit(NTC_UNIT_OBJECT, 342);
      
      for(var i = 0; i < 10; i++)
      {
         NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _portal);
            
         Delay(500);
         
         if(me.areaid != _preareaid)
            return true;
      }
      
      return false;
   }
   
   _portal = NTC_FindUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));

   if(_portal)
   {
      if(leader != "none")
      {
         do
         {
            if(_portal.mode == 2 && NTC_CheckOwner(_portal, leader) && GetDistance(me, _portal) <= 30)
            {
               if(areaid != 0)
                  if(_portal.subareaid != areaid)
                     return false;
               
               while(me.areaid == _preareaid && _portal)
               {
                  NTM_MoveTo(me.areaid, _portal.x+1, _portal.y, 10);
                     
                  NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _portal);
                     
                  Delay(500);
                  
                  if(me.areaid != _preareaid)
                     return true;
               }
            }
         } while(_portal.GetNext());
      }
      else
      {
         do
         {
            if(_portal.mode == 2 && GetDistance(me, _portal) <= 30)
            {
               while(me.areaid == _preareaid && _portal)
               {
                  NTM_MoveTo(me.areaid, _portal.x+1, _portal.y, 10);
                     
                  NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _portal);
                     
                  Delay(500);
                  
                  if(me.areaid != _preareaid)
                     return true;
               }
            }
         } while(_portal.GetNext());
      }
   }
   
   return false;
}

//TakeWaypoint
function NTH_TakeWaypoint(areaid)
{
   if(me.areaid == areaid)
      return true;
   
   switch(areaid)
   {
      case 1:
      case 3:
      case 4:
      case 5:
      case 6:
      case 27:
      case 29:
      case 32:
      case 35:
      case 40:
      case 42:
      case 43:
      case 44:
      case 46:
      case 48:
      case 52:
      case 57:
      case 74:
      case 75:
      case 76:
      case 77:
      case 78:
      case 79:
      case 80:
      case 81:
      case 83:
      case 101:
      case 103:
      case 106:
      case 107:
      case 109:
      case 111:
      case 112:
      case 113:
      case 115:
      case 117:
      case 118:
      case 129:
         break;
      default:
         return false;
   }
   
   var _unit = NTM_GetWaypointInt();

   if(!_unit)
      return false;

   if(NTC_InTown())
      me.Cancel(1);

   for(var i = 0 ; i < 20 ; i++)
   {
      if(me.areaid == _leaderhandle.areaid)
         return true;
      
      if((i % 10) == 0)
      {
         NTH_MoveTo(_unit.areaid, _unit.x, _unit.y, 10);
         
         NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _unit);
      }

      Delay(200);

      if(GetUIState(0x14))
      {
         if(me.TakeWaypoint(areaid))
         {
            Delay(200);
            
            return true;
         }
         else
         {
            NTH_Say("I don't have that waypoint!");
            
            while(!NTH_GetLeader())
            {
               if(!NTC_InTown() && _attack)
                  NTH_ClearPosition(true);
               
               Delay(500);
            }
            
            return true;
         }

         break;
      }
   }
   
   return false;
}

//PartyLeader
function NTH_PartyLeader()
{
   var _player = GetPlayerUnit();

   if(_player)
   {
      var _mypartyid = _player.partyid;

      while(_player.GetNext())
      {
         if(_player.name == _leadername)
         {
            if(_player.partyid == 65535 || _player.partyid != _mypartyid)
            {
               if(_player.partyflag == 2)
               {
                  me.ClickParty(_player, 2);
                  return;
               }

               if(_player.partyid == 65535)
               {
                  if(_player.partyflag == 4)
                     return;

                  me.ClickParty(_player, 2);
                  NTC_Delay(NTC_DELAY_FRAME);

                  if(_player.partyflag == 4 || (_player.partyid != 65535 && _player.partyid == _mypartyid))
                     return;
               }
            }
         }
      }
   }
}

//Attack Setup
function NTH_AttackSetup()
{
   var i;
   var n = 0;
   var _skillset = new Array;
   var _build = new Array;
   
   _skillset[0] = 0;
   
   switch(me.classid)
   {
      case NTC_CHAR_CLASS_AMAZON:
         return;
         
      case NTC_CHAR_CLASS_SORCERESS:
      
         _skillset[1] = NTC_GetSkillLevel(36); // Fire Bolt
         _skillset[2] = NTC_GetSkillLevel(39); // Ice Bolt
         _skillset[3] = NTC_GetSkillLevel(38); // Charged Bolt
         
         for(i = 1; i <= 3; i++)
            if(_skillset[i] > _skillset[n])
            {
               _skillset[0] = i;
               n = i;
            }
         
         if(_skillset[0] == 1)
            _build = [47, 36];
         else if(_skillset[0] == 2)
            _build = [59, 55, 45, 39];
         else if(_skillset[0] == 3)
            _build = [49, 38];
         
         if(_skillset[0])
         {
            for(i = 0; i < _build.length; i++)
            {
               if(NTC_GetSkillLevel(_build[i]))
               {
                  NTConfig_AttackSkill[1] = _build[i];
                  NTConfig_AttackSkill[3] = _build[i];
                  break;
               }
            }
         }
         else
         {
            NTConfig_AttackSkill[1] = 0;
            NTConfig_AttackSkill[3] = 0;
         }
         return;
         
      case NTC_CHAR_CLASS_NECROMANCER:
         return;
         
      case NTC_CHAR_CLASS_PALADIN:
      
         _skillset[1] = NTC_GetSkillLevel(96); // Sacrifice
         _skillset[2] = NTC_GetSkillLevel(112); // Blessed Hammer
         
         for(i = 1; i <= 3; i++)
            if(_skillset[i] > _skillset[n])
            {
               _skillset[0] = i;
               n = i;
            }
         
         if(_skillset[0] == 1)
            _build = [106, 96];
         else if(_skillset[0] == 2)
            _build = [112];
         
         if(_skillset[0])
         {
            for(i = 0; i < _build.length; i++)
            {
               if(NTC_GetSkillLevel(_build[i]))
               {
                  NTConfig_AttackSkill[1] = _build[i];
                  NTConfig_AttackSkill[3] = _build[i];
                  break;
               }
            }
         }
         else
         {
            NTConfig_AttackSkill[1] = 0;
            NTConfig_AttackSkill[3] = 0;
         }
         return;
         
      case NTC_CHAR_CLASS_BARBARIAN:
         return;
         
      case NTC_CHAR_CLASS_DRUID:
         return;
         
      case NTC_CHAR_CLASS_ASSASSIN:
         return;
   }
}

//ClearPosition
function NTH_ClearPosition(stuck)
{
   NTP_DoPrecast(false);
   if(_autoskill)
   {
      if(_autoskillcount++ > 30)
      {
         _autoskillcount = 0;
         NTH_AttackSetup();
      }
   }
   
   var _orgx, _orgy;
   var _spectype = [0x01,0x01,0x0A];
   var _skiplist;
   var _attackcount = 0;
   var _target;
   var _distance, _mingid, _mindistance;
   var _result;
   var range = 20;
   
   if(arguments.length == 1)
      range = 3;
   else
      stuck = false;
   
   if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
      return false;

   _orgx = me.x;
   _orgy = me.y;

   for(var i = 0 ; i < _spectype.length ; i++)
   {
      _skiplist = new Array();

      while(_attackcount < (i+1)*100)
      {
         if(_attackcount > 49)
            break;

         _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);
               
               if((!stuck && GetDistance(me.x, me.y, _leader.x, _leader.y) > 20 && !_stay) || !_attack || me.mode == 17 || me.hp < 1)
                  return;

               switch(_result)
               {
               case 1:
                  _skiplist.push(_mingid);
                  break;
               case 2:
               case 3:
                  _attackcount++;
                  break;
               default:
                  return false;
               }
            }
         }
         else
            break;
      }
   }

   if(_attackcount > 0)
      NTH_PickItems();
   
   if(_levelcount++ > 10)
   {
      _levelcount = 0;
      
      if(me.GetStat(12) > _level)
      {
         
         Say("!I feel much stronger now");
         
         Delay(50);
         
         _level = me.GetStat(12);
      }
   }

   return true;
}

//MoveTo
function NTH_MoveTo(areaid, x, y, force)
{
   var i, n;
   var _teleport;
   var _path;

   if(x == me.x && y == me.y)
      return true;
   
   if(arguments.length < 4)
      force = 0;

   if(NTC_InTown() || NTC_GetSkillLevel(54) < 1 || !_useteleport)
      _teleport = false;
   else
      _teleport = true;

   _path = GetPath(areaid, me.x, me.y, x, y, _teleport);

   if(_path)
   {
      for(i = 0 ; i < _path.length ; i++)
      {
         for(n = 0 ; n < 2 ; n++)
         {
            if(_teleport)
            {
               if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
            if(NTConfig_UsePotionFInd && me.classid == NTC_CHAR_CLASS_BARBARIAN && _attackcount > 2)
{
if(!NTA_CheckForCloseMonsters(10))
{
//Print("ÿc<No Monsters close - looting");
NTA_FindItem(NTConfig_FindItemRange);
}
}
                  break;
            }
            else
            {
               if(!NTH_WalkTo(_path[i][0], _path[i][1], force))
            if(NTConfig_UsePotionFInd && me.classid == NTC_CHAR_CLASS_BARBARIAN && _attackcount > 2)
{
if(!NTA_CheckForCloseMonsters(10))
{
//Print("ÿc<No Monsters close - looting");
NTA_FindItem(NTConfig_FindItemRange);
}
}
                  return;
               
               break;
            }
         }
      }
   }

   return true;
}

//WalkTo
function NTH_WalkTo(x, y, force)
{
   // force of 10 is just force
   // force of 15 is to return to leader
   var i;
   var _prex1, _prey1;
   var _prex2, _prey2;
   
   if(arguments.length < 3)
      force = 0;

   if(me.runwalk == 0)
      me.runwalk = 1;

   for(i = 0 ; i < 90 ; i++)
   {
      if((i % 10) == 0)
      {
         if((i % 60) == 0)
         {
            _prex1 = me.x;
            _prey1 = me.y;

            if((i % 120) == 0)
            {
               _prex2 = me.x;
               _prey2 = me.y;
            }
         }
         
         if((!_stay && force == 0 && GetDistance(me.x, me.y, _leader.x, _leader.y) > 20) || !_attack || me.mode == 17 || me.hp < 1)
            return false;
         
         if(force == 15 && GetDistance(me.x, me.y, _leader.x, _leader.y) < 10)
            return false;

         ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, x, y);
      }

      NTC_Delay(NTC_DELAY_FRAME);

      if(Math.abs(me.x-x) < 2 && Math.abs(me.y-y) < 2)
         break;

      if((i % 10) == 9)
      {
         ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
         NTC_Delay(NTC_DELAY_FRAME);

         if((i % 60) == 59)
         {
            if(me.x == _prex1 && me.y == _prey1 && !NTC_InTown())
            {
               NTH_ClearPosition(2);

               NTP_DoPrecast(false);
            }

            if((i % 120) == 119 && me.x == _prex2 && me.y == _prey2)
               return true;
         }
      }
   }

   ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
   NTC_Delay(NTC_DELAY_FRAME);
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);
}
}
   return true;
}

//PickItems
function NTH_PickItems()
{
   var i, _mode;

   for(i = 0 ; i < 25 ; i++)
   {
      _mode = me.mode;

      if((_mode >= 1 && _mode <= 3) || _mode == 5 || _mode == 6)
         break;

      NTC_Delay(NTC_DELAY_FRAME);
   }

   if(i < parseInt(100/NTC_DELAY_FRAME))
      NTC_PingDelay(NTConfig_SnagDelay-(i*NTC_DELAY_FRAME));
   
   var i;
   var _item;
   var _checkeditem, _checkeditems;
   var _value;
   var _minindex, _mindistance;

   _item = NTC_FindUnit(NTC_UNIT_ITEM);

   if(!_item)
      return;

   _checkeditems = new Array();

   do
   {
      if(_item.mode == 3 || _item.mode == 5)
      {
         if(NTSI_IsIgnoredItemInt(_item.classid))
            continue;

         if(GetDistance(me, _item) <= NTConfig_SnagRange)
         {
            _value = NTSI_CheckItem(_item);

            if(_value)
               _checkeditems.push(new NTSI_ItemInt(_item, _value));
         }
      }
   } while(_item.GetNext());

   while(_checkeditems.length > 0)
   {
      _mindistance = 100000;

      for(i = 0 ; i < _checkeditems.length ; i++)
      {
         _value = GetDistance(me.x, me.y, _checkeditems[i].x, _checkeditems[i].y);

         if(_value < _mindistance)
         {
            _minindex = i;
            _mindistance = _value;
         }
      }

      _checkeditem = _checkeditems.splice(_minindex, 1)[0];

      _item = NTC_FindUnit(NTC_UNIT_ITEM, _checkeditem.GID);

      if(_item)
      {
         if(!NTSI_IsLimitedItemInt(_item))
         {
            if(NTT_CheckSpace(_item.xsize, _item.ysize))
            {
               if(NTH_SnagItem(_item))
               {
                  switch(_checkeditem.ClassID)
                  {
                  case 515: // Rejuvenation Potion
                  case 516: // Full Rejuvenation Potion
                     Print("Picked up " + GetLocaleString(2209+_checkeditem.ClassID-515));
                     break;
                  case 587: // Minor Healing Potion
                  case 588: // Light Healing Potion
                  case 589: // Healing Potion
                  case 590: // Greater Healing Potion
                  case 591: // Super Healing Potion
                  case 592: // Minor Mana Potion
                  case 593: // Light Mana Potion
                  case 594: // Mana Potion
                  case 595: // Greater Mana Potion
                  case 596: // Super Mana Potion
                     Print("Picked up " + GetLocaleString(2266+_checkeditem.ClassID-587));
                     break;
                  default:
                     Print("Picked up " + NTC_ItemQualityToD2Color[_item.quality] + _item.name.split("\n")[0]);
                     if(_item.quality < 4 && _checkeditem.Status < 2 && _item.itemtype != 4 && (_item.itemtype < 76 || _item.itemtype > 81))
                        NTC_SendLogToOOG(NTC_LOG_ITEM, "Kept " + NTC_ItemQualityToMGRColor[_item.quality] + _item.name.split("\n")[0] + ";" + _item.itemdesc);
                     break;
                  }
               }
            }
            else
            {
               NTH_Say("My inventory is full!");
               return;
            }
         }
      }
   }
}

//SnagItem
function NTH_SnagItem(snagitem)
{
   var i;
   var _classid;

   _classid = snagitem.classid;

   for(i = 0 ; i < 40 ; i++)
   {
      if((i % 10) == 0 && (snagitem.mode == 3 || snagitem.mode == 5))
      {
         if(GetDistance(me, snagitem) > 3)
            NTH_MoveTo(snagitem.areaid, snagitem.x, snagitem.y, 10);

         if(NTC_ClearCursor())
            NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, snagitem);
      }

      NTC_Delay(NTC_DELAY_FRAME);

      if(_classid == 523)
      {
         Print("Picked up " + GetLocaleString(2215));

         return false;
      }
      else if(snagitem.mode != 3 && snagitem.mode != 5)
      {
         var _parent;

         NTC_PingDelay(100);

         _parent = snagitem.GetParent();

         return (_parent && _parent.gid == me.gid);
      }
   }

   return false;
}
gtoilet is offline  
Reply


Similar Threads Similar Threads
[Idea] i hope find one can help me in it
09/08/2012 - SRO Private Server - 10 Replies
hello, after regards,I have an idea and would like it and I want to do it but I can't plan this idea by myself only so i came here to ask for help, my idea is i want when char reach next degree get full set sun +5 ex: when he reach level 52 when he teleport get full set / accessory / weapon sun +10 degree 6 and same thing when reach level 64 etc and max degree will be d9 i hope you understand what i mean, so any one know from where i can do this ? if you won't release this idea for free i can...
Bo Barb script für D2NT 3.1
12/11/2010 - Diablo 2 Programming - 9 Replies
Hallo, könnte einer von den fähigen Jungs hier mir ne barb bo script schreiben? leider weiss ich vom scripten NUR, das ich da nicht reinbeissen soll xD Das script sollte für D2NT 3.1 sein und sollte das können: 1. Party nur vom Leader annehmen 2. wenn Leader ein Tp macht(das script soll auslesen wo ich gerade bin) soll der barb kommen und bo geben danach zur stadt zurück und auf neues tp warten
D2NT Barb Script
05/12/2010 - Diablo 2 - 19 Replies
Hat einer zufällig ein ww barb oder barb script für d2nt ?? Wäre cool
Barb Goldfind script?!
05/04/2010 - Diablo 2 - 1 Replies
Wollte mal fragen ob es ein script gibt ohne oder mit eni gibt das Travi nach gold farmed? EDIT: Damit meinte ich auch dass das script bei den leichen "schrei" macht um mehr gold zu holen.
Anyone have idea how to find range atack ?
11/04/2009 - 12Sky2 Hacks, Bots, Cheats & Exploits - 6 Replies
i don't ask for address but how to do it, because that's as i see completely different story from the speed atack etc ...



All times are GMT +1. The time now is 18:03.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.