suche followbot

09/27/2010 23:00 benni-#76
Quote:
Originally Posted by sissam View Post
wie mach ich das das ich einen bo barb mit nehmen kann und einen pala unr einen nec fuer die summons und fuer die aura?

kann mir bitte einer die scriptzs posten oder mir erklaeren wie ich es anstelle? :)

regards issam
Quote:
Originally Posted by nibbelr View Post
Stehen auf Seite 5 inkl Anleitung wo alles reinkommt =)
eben.. also bisschen lesen wäre schon nett man gibt sich hier ja genug mühe alles den anderen mitzuteilen :<
09/27/2010 23:03 sissam#77
ich finde auf seite 5 keine char config fuer barb pala oder nec?

sorry leute ich bin da bissel blind grade
09/27/2010 23:10 benni-#78
Quote:
Originally Posted by sissam View Post
wie mach ich das das ich einen bo barb mit nehmen kann und einen pala unr einen nec fuer die summons und fuer die aura?

kann mir bitte einer die scriptzs posten oder mir erklaeren wie ich es anstelle? :)

regards issam
Quote:
Originally Posted by sissam View Post
ich finde auf seite 5 keine char config fuer barb pala oder nec?

sorry leute ich bin da bissel blind grade
Code:
0 Attack
1 Kick
2 Throw
3 Unsummon
4 Left Hand Throw
5 Left Hand Swing
6 Magic Arrow
7 Fire Arrow
8 Inner Sight
9 Critical Strike
10 Jab
11 Cold Arrow
12 Multiple Shot
13 Dodge
14 Power Strike
15 Poison Javelin
16 Exploding Arrow
17 Slow Missiles
18 Avoid
19 Impale
20 Lightning Bolt
21 Ice Arrow
22 Guided Arrow
23 Penetrate
24 Charged Strike
25 Plague Javelin
26 Strafe
27 Immolation Arrow
28 Dopplezon
29 Evade
30 Fend
31 Freezing Arrow
32 Valkyrie
33 Pierce
34 Lightning Strike
35 Lightning Fury
36 Fire Bolt
37 Warmth
38 Charged Bolt
39 Ice Bolt
40 Frozen Armor
41 Inferno
42 Static Field
43 Telekinesis
44 Frost Nova
45 Ice Blast
46 Blaze
47 Fire Ball
48 Nova
49 Lightning
50 Shiver Armor
51 Fire Wall
52 Enchant
53 Chain Lightning
54 Teleport
55 Glacial Spike
56 Meteor
57 Thunder Storm
58 Energy Shield
59 Blizzard
60 Chilling Armor
61 Fire Mastery
62 Hydra
63 Lightning Mastery
64 Frozen Orb
65 Cold Mastery
66 Amplify Damage
67 Teeth
68 Bone Armor
69 Skeleton Mastery
70 Raise Skeleton
71 Dim Vision
72 Weaken
73 Poison Dagger
74 Corpse Explosion
75 Clay Golem
76 Iron Maiden
77 Terror
78 Bone Wall
79 Golem Mastery
80 Raise Skeletal Mage
81 Confuse
82 Life Tap
83 Poison Explosion
84 Bone Spear
85 BloodGolem
86 Attract
87 Decrepify
88 Bone Prison
89 Summon Resist
90 IronGolem
91 Lower Resist
92 Poison Nova
93 Bone Spirit
94 FireGolem
95 Revive
96 Sacrifice
97 Smite
98 Might
99 Prayer
100 Resist Fire
101 Holy Bolt
102 Holy Fire
103 Thorns
104 Defiance
105 Resist Cold
106 Zeal
107 Charge
108 Blessed Aim
109 Cleansing
110 Resist Lightning
111 Vengeance
112 Blessed Hammer
113 Concentration
114 Holy Freeze
115 Vigor
116 Conversion
117 Holy Shield
118 Holy Shock
119 Sanctuary
120 Meditation
121 Fist of the Heavens
122 Fanaticism
123 Conviction
124 Redemption
125 Salvation
126 Bash
127 Sword Mastery
128 Axe Mastery
129 Mace Mastery
130 Howl
131 Find Potion
132 Leap
133 Double Swing
134 Pole Arm Mastery
135 Throwing Mastery
136 Spear Mastery
137 Taunt
138 Shout
139 Stun
140 Double Throw
141 Increased Stamina
142 Find Item
143 Leap Attack
144 Concentrate
145 Iron Skin
146 Battle Cry
147 Frenzy
148 Increased Speed
149 Battle Orders
150 Grim Ward
151 Whirlwind
152 Berserk
153 Natural Resistance
154 War Cry
155 Battle Command
156 Fire Hit
157 UnHolyBolt
158 SkeletonRaise
159 MaggotEgg
160 ShamanFire
161 MagottUp
162 MagottDown
163 MagottLay
164 AndrialSpray
165 Jump
166 Swarm Move
167 Nest
168 Quick Strike
169 VampireFireball
170 VampireFirewall
171 VampireMeteor
172 GargoyleTrap
173 SpiderLay
174 VampireHeal
175 VampireRaise
176 Submerge
177 FetishAura
178 FetishInferno
179 ZakarumHeal
180 Emerge
181 Resurrect
182 Bestow
183 MissileSkill1
184 MonTeleport
185 PrimeLightning
186 PrimeBolt
187 PrimeBlaze
188 PrimeFirewall
189 PrimeSpike
190 PrimeIceNova
191 PrimePoisonball
192 PrimePoisonNova
193 DiabLight
194 DiabCold
195 DiabFire
196 FingerMageSpider
197 DiabWall
198 DiabRun
199 DiabPrison
200 PoisonBallTrap
201 AndyPoisonBolt
202 HireableMissile
203 DesertTurret
204 ArcaneTower
205 MonBlizzard
206 Mosquito
207 CursedBallTrapRight
208 CursedBallTrapLeft
209 MonFrozenArmor
210 MonBoneArmor
211 MonBoneSpirit
212 MonCurseCast
213 HellMeteor
214 RegurgitatorEat
215 MonFrenzy
216 QueenDeath
217 Scroll of Identify
218 Book of Identify
219 Scroll of Townportal
220 Book of Townportal
221 Raven
222 Plague Poppy
223 Wearwolf
224 Shape Shifting
225 Firestorm
226 Oak Sage
227 Summon Spirit Wolf
228 Wearbear
229 Molten Boulder
230 Arctic Blast
231 Cycle of Life
232 Feral Rage
233 Maul
234 Eruption
235 Cyclone Armor
236 Heart of Wolverine
237 Summon Fenris
238 Rabies
239 Fire Claws
240 Twister
241 Vines
242 Hunger
243 Shock Wave
244 Volcano
245 Tornado
246 Spirit of Barbs
247 Summon Grizzly
248 Fury
249 Armageddon
250 Hurricane
251 Fire Trauma
252 Claw Mastery
253 Psychic Hammer
254 Tiger Strike
255 Dragon Talon
256 Shock Field
257 Blade Sentinel
258 Quickness
259 Fists of Fire
260 Dragon Claw
261 Charged Bolt Sentry
262 Wake of Fire Sentry
263 Weapon Block
264 Cloak of Shadows
265 Cobra Strike
266 Blade Fury
267 Fade
268 Shadow Warrior
269 Claws of Thunder
270 Dragon Tail
271 Lightning Sentry
272 Inferno Sentry
273 Mind Blast
274 Blades of Ice
275 Dragon Flight
276 Death Sentry
277 Blade Shield
278 Venom
279 Shadow Master
280 Royal Strike
281 Wake Of Destruction Sentry
282 Imp Inferno
283 Imp Fireball
284 Baal Taunt
285 Baal Corpse Explode
286 Baal Monster Spawn
287 Catapult Charged Ball
288 Catapult Spike Ball
289 Suck Blood
290 Cry Help
291 Healing Vortex
292 Teleport 2
293 Self-resurrect
294 Vine Attack
295 Overseer Whip
296 Barbs Aura
297 Wolverine Aura
298 Oak Sage Aura
299 Imp Fire Missile
300 Impregnate
301 Siege Beast Stomp
302 MinionSpawner
303 CatapultBlizzard
304 CatapultPlague
305 CatapultMeteor
306 BoltSentry
307 CorpseCycler
308 DeathMaul
309 Defense Curse
310 Blood Mana
311 mon inferno sentry
312 mon death sentry
313 sentry lightning
314 fenris rage
315 Baal Tentacle
316 Baal Nova
317 Baal Inferno
318 Baal Cold Missiles
319 MegademonInferno
320 EvilHutSpawner
321 CountessFirewall
322 ImpBolt
323 Horror Arctic Blast
324 death sentry ltng
325 VineCycler
326 BearSmite
327 Resurrect2
328 BloodLordFrenzy
329 Baal Teleport
330 Imp Teleport
331 Baal Clone Teleport
332 ZakarumLightning
333 VampireMissile
334 MephistoMissile
335 DoomKnightMissile
336 RogueMissile
337 HydraMissile
338 NecromageMissile
339 MonBow
340 MonFireArrow
341 MonColdArrow
342 MonExplodingArrow
343 MonFreezingArrow
344 MonPowerStrike
345 SuccubusBolt
346 MephFrostNova
347 MonIceSpear
348 ShamanIce
349 Diablogeddon
350 Delerium Change
351 NihlathakCorpseExplosion
352 SerpentCharge
353 Trap Nova
354 UnHolyBoltEx
355 ShamanFireEx
356 Imp Fire Missile Ex
Skills in der Char Config einstellen


Bitteschön
09/27/2010 23:49 Nuru der Stadtmasseur#79
Zu meinem Problem mit dem Standardangriff:

auf eon gefunden:

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);

function NTA_Initialize()
{
	if(NTConfig_AttackSkill[1] == 0 || NTConfig_AttackSkill[3] == 0)
		NTA_DetectAttackPattern();

	for(var i = 0 ; i < 7 ; 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 0:  //melee
			   	_NTA_SkillRange[i] = 2;
				break;
			case 5:  //left hand melee
			   	_NTA_SkillRange[i] = 2;
				break;
			case 36: //Fire Bolt
				_NTA_SkillRange[i] = 26;
				break;
			case 44: //Frost Nova
			case 48: // Nova
				_NTA_SkillRange[i] = 10;
				break;
			case 55: //Glacial Spike
				_NTA_SkillRange[i] = 27;
				break;
			case 59: //Blizzard
				_NTA_SkillRange[i] = 27;
				break;
			case 64: // Frozen Orb
				_NTA_SkillRange[i] = 15;
				break;
			case 97: //Smite
			case 106: //Zeal
			case 112: //Blessed Hammer
				_NTA_SkillRange[i] = 3;
				break;
			case 151: //Whirlwind
				_NTA_SkillRange[i] = 8;
				break;
			case 152: //Berserk
				_NTA_SkillRange[i] = 3;
				break;
			default:
				_NTA_SkillRange[i] = 25;
				break;
			}
		}
	}
}

function NTA_KillMonster(classid)
{
	var _target;

	if(NTConfig_AttackSkill[1] < 0) //changed from 1
		return false;

	_target = NTC_FindUnit(NTC_UNIT_MONSTER, classid, 5);

	if(!_target)
		return false;

	if(_target.IsAttackable())
	{
		var _attackcount = 0;

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

			_attackcount++;
		}
	}

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

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

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

	switch(arguments.length)
	{
	case 0:
		range = 20;
	case 1:
		pickitem = false;
	case 2:
		safelevel = 0;
	default:
		if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
			safelevel = 0;
		break;
	}

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

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

		while(_attackcount < (i+1)*100)
		{
			_mindistance = 100000;

			_target = NTC_FindUnit(NTC_UNIT_MONSTER);

			if(_target)
			{
				do
				{
					if(_skiplist.indexOf(_target.gid) < 0)
					{
						if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
						{
							if(GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTA_IsValidMonster(_target))
							{
								_distance = GetDistance(me, _target);

								if(_distance < _mindistance)
								{
									_mingid = _target.gid;
									_mindistance = _distance;
								}
							}
						}
						else
							_skiplist.push(_target.gid);
					}
				} while(_target.GetNext());
			}

			if(_mindistance < 100000)
			{
				_target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);

				if(_target)
				{
					_result = NTA_Attack(_target, (_attackcount%30) == 0);

					switch(_result)
					{
					case 1:
						_skiplist.push(_mingid);
						break;
					case 2:
					case 3:
						_attackcount++;
						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_OpenChest)
	{
		_target = NTC_GetSpecialChest();

		if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTC_OpenChest(_target))
			_attackcount++;
	}

	if(pickitem && _attackcount > 0)
		NTSI_PickItems();

	switch(safelevel)
	{
	case 1:
		return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
	case 2:
		return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
	}

	return true;
}

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

	_room = GetRoom();

	if(!_room)
		return false;

	switch(arguments.length)
	{
	case 0:
		pickitem = true;
	case 1:
		safelevel = 2;
	default:
		if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
			safelevel = 0;
		break;
	}

	_rooms = new Array();

	do
	{
		_rooms.push([parseInt(_room.x*5 + _room.xsize*5/2), parseInt(_room.y*5 + _room.ysize*5/2)]);
	} while(_room.GetNext());

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

		for(i = 0 ; i < _rooms.length ; i++)
		{
			_distance = GetDistance(me.x, me.y, _rooms[i][0], _rooms[i][1]);

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

		if(NTM_MoveTo(me.areaid, _rooms[_minindex][0], _rooms[_minindex][1], 1))
		{
			if(!NTA_ClearRoom(pickitem, safelevel))
				return false;

			NTP_DoPrecast(false);
		}

		_rooms.splice(_minindex, 1);
	}

	return true;
}

function NTA_ClearRoom(pickitem, safelevel)
{
	var _room;
	var _spectype = [0x0A, 0x01, 0x01];
	var _skiplist;
	var _attackcount = 0;
	var _target;
	var _distance, _mingid, _mindistance;
	var _result;

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

	_room = me.GetRoom();

	if(!_room)
		return false;

	switch(arguments.length)
	{
	case 0:
		pickitem = false;
	case 1:
		safelevel = 0;
	default:
		if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
			safelevel = 0;
		break;
	}

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

		while(_attackcount < (i+1)*100)
		{
			_mindistance = 100000;

			_target = NTC_FindUnit(NTC_UNIT_MONSTER);

			if(_target)
			{
				do
				{
					if(_skiplist.indexOf(_target.gid) < 0)
					{
						if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
						{
							if(_room.UnitInRoom(_target) && NTA_IsValidMonster(_target))
							{
								_distance = GetDistance(me, _target);

								if(_distance < _mindistance)
								{
									_mingid = _target.gid;
									_mindistance = _distance;
								}
							}
						}
						else
							_skiplist.push(_target.gid);
					}
				} while(_target.GetNext());
			}

			if(_mindistance < 100000)
			{
				_target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);

				if(_target)
				{
					_result = NTA_Attack(_target, (_attackcount%30) == 0);

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

	if(me.classid == NTC_CHAR_CLASS_PALADIN)
	{
		if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
		{
			if(NTC_PutSkill(124, NTC_HAND_RIGHT))
				NTC_PingDelay(1000);
		}
	}

	if(NTConfig_OpenChest)
	{
		_target = NTC_GetSpecialChest();

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

	if(pickitem && _attackcount > 0)
		NTSI_PickItems();

	switch(safelevel)
	{
	case 1:
		return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
	case 2:
		return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
	}

	return true;
}

function NTA_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 WaterWatchers
		return false;

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

	if(monster.name == GetLocaleString(3162) && GetDistance(me.x,me.y,monster.x,monster.y) <= 25 ) 
	      if(!CheckCollision(me.areaid, monster.x, monster.y, 0) || !CheckCollision(me.areaid, monster.x, monster.y, 1) || !CheckCollision(me.areaid, monster.x, monster.y, 5)) 
        	 return false; 

	return true;
}

function NTA_GetDamageType(skillid)
{
	if(skillid == 74) // Corpse Explosion
		return NTA_DAMAGE_PHYSICAL;

	if(skillid == 101) // Blessed Hammer
		return NTA_DAMAGE_NONE;

	switch(GetBaseStat("skills.txt", skillid, 233))
	{
	case "cold":
		return NTA_DAMAGE_COLD;
	case "fire":
		return NTA_DAMAGE_FIRE;
	case "ltng":
		return NTA_DAMAGE_LIGHTNING;
	case "mag":
		return NTA_DAMAGE_MAGIC;
	case "pois":
		return NTA_DAMAGE_POISON;
	case "stun":
		return NTA_DAMAGE_NONE;
	default:
		if(GetBaseStat("skills.txt", skillid, 178) || GetBaseStat("skills.txt", skillid, 182)) // aura or passive
			return NTA_DAMAGE_NONE;
	}

	return NTA_DAMAGE_PHYSICAL;
}

function NTA_GetResistance(enemy, type)
{
	switch(type)
	{
	case NTA_DAMAGE_PHYSICAL:
		return enemy.GetStat(36);
	case NTA_DAMAGE_MAGIC:
		return enemy.GetStat(37);
	case NTA_DAMAGE_FIRE:
		return enemy.GetStat(39);
	case NTA_DAMAGE_LIGHTNING:
		return enemy.GetStat(41);
	case NTA_DAMAGE_COLD:
		return enemy.GetStat(43);
	case NTA_DAMAGE_POISON:
		return enemy.GetStat(45);
	}

	return 0;
}

function NTA_DetectAttackPattern()
{
	switch(me.classid)
	{
	case NTC_CHAR_CLASS_AMAZON:
		return NTA_AmazonAttackPatternInt();
	case NTC_CHAR_CLASS_SORCERESS:
		return NTA_SorceressAttackPatternInt();
	case NTC_CHAR_CLASS_NECROMANCER:
		return NTA_NecromancerAttackPatternInt();
	case NTC_CHAR_CLASS_PALADIN:
		return NTA_PaladinAttackPatternInt();
	case NTC_CHAR_CLASS_BARBARIAN:
		return NTA_BarbarianAttackPatternInt();
	case NTC_CHAR_CLASS_DRUID:
		return NTA_DruidAttackPatternInt();
	case NTC_CHAR_CLASS_ASSASSIN:
		return NTA_AssassinAttackPatternInt();
	}

	return false;
}

// Return value : 0 = Unrecoverable process, 1 = Unavailable attack, 2 = Onetime fail, 3 = Success
function NTA_Attack(target, firstorder)
{
	switch(me.classid)
	{
	case NTC_CHAR_CLASS_AMAZON:
		return NTA_AmazonAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_SORCERESS:
		return NTA_SorceressAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_NECROMANCER:
		return NTA_NecromancerAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_PALADIN:
		return NTA_PaladinAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_BARBARIAN:
		return NTA_BarbarianAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_DRUID:
		return NTA_DruidAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_ASSASSIN:
		return NTA_AssassinAttackInt(target, firstorder);
	}

	return 0;
}

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

function NTA_AmazonAttackInt(target, firstorder)
{
	return 1;
}

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

function NTA_SorceressAttackPatternInt()
{
	var _maxindex, _maxskill;
	var _avgskilllevel = new Array();

	_avgskilllevel[0] = parseInt((me.GetSkill(59, false)+me.GetSkill(39, false)+me.GetSkill(45, false)+me.GetSkill(55, false))/4);
	_avgskilllevel[1] = parseInt((me.GetSkill(53, false)+me.GetSkill(38, false)+me.GetSkill(48, false)+me.GetSkill(49, false))/4);
	_avgskilllevel[2] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false)+me.GetSkill(64, false))/4);
	_avgskilllevel[3] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false))/3);

	_maxindex = -1;
	_maxskill = 0;

	for(var i = 0 ; i < _avgskilllevel.length ; i++)
	{
		if(_avgskilllevel[i] > _maxskill)
		{
			_maxindex = i;
			_maxskill = _avgskilllevel[i];
		}
	}

	switch(_maxindex)
	{
	case 0: // Blizzard + Glacial Spike
		NTConfig_AttackSkill[1] = 59;
		NTConfig_AttackSkill[2] = 55;
		NTConfig_AttackSkill[3] = 59;
		NTConfig_AttackSkill[4] = 55;
		break;
	case 1: // Chain Lightning + Lightning
		NTConfig_AttackSkill[1] = 49;
		NTConfig_AttackSkill[3] = 53;
		break;
	case 2: // Fire Ball + Frozen Orb
		NTConfig_AttackSkill[0] = 64;
		NTConfig_AttackSkill[1] = 47;
		NTConfig_AttackSkill[3] = 47;
		NTConfig_AttackSkill[5] = 64;
		NTConfig_AttackSkill[6] = 55;
		break;
	case 3: // Fire Ball + Meteor
		NTConfig_AttackSkill[1] = 56;
		NTConfig_AttackSkill[2] = 47;
		NTConfig_AttackSkill[3] = 56;
		NTConfig_AttackSkill[4] = 47;
		break;
	}

	return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}

function NTA_SorceressAttackInt(target, firstorder)
{
	var _primaryindex;

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

	if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
	{
		if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
			return 2;

		return 3;
	}

	if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80)
	{
		var _staticlevel = NTC_GetSkillLevel(42);

		if(_staticlevel > 0)
		{
			var _staticrange;
			var _castx, _casty;

			_staticrange = Math.floor((5+_staticlevel-1)*2/3);

			if(GetDistance(me, target) > _staticrange || !CheckCollision(me, target, 6))
			{
				var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _staticrange, 6);

				if(_pos)
					NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
			}

			if(target.x < me.x)
				_castx = me.x - 1;
			else if(target.x > me.x)
				_castx = me.x + 1;
			else
				_castx = me.x;

			if(target.y < me.y)
				_casty = me.y - 1;
			else if(target.y > me.y)
				_casty = me.y + 1;
			else
				_casty = me.y;

			if(!CheckCollision(target.areaid, _castx, _casty, 1))
			{
				_castx = me.x;
				_casty = me.y;
			}

			if(!NTC_CastSkill(42, NTC_HAND_RIGHT, _castx, _casty))
				return 2;

			return 3;
		}
	}

	_primaryindex = (target.spectype&0x0A) ? 1 : 3;

	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] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
	}

	if(NTConfig_AttackSkill[index+1] > 0)
	{
		if(GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
	}

	for(var i = 0 ; i < 25 ; i++)
	{
		NTC_Delay(NTC_DELAY_FRAME);

		if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
			break;
	}

	return false;
}

function NTA_NecromancerAttackPatternInt()
{
	return false;
}

function NTA_NecromancerAttackInt(target, firstorder)
{
	return 1;
}

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

function NTA_PaladinAttackPatternInt()
{
	var _maxindex, _maxskill;
	var _avgskilllevel = new Array();

	_avgskilllevel[0] = parseInt((me.GetSkill(112, false)+me.GetSkill(108, false)+me.GetSkill(115, false))/3);
	_avgskilllevel[1] = parseInt((me.GetSkill(106, false)+me.GetSkill(96, false))/2);
	_avgskilllevel[2] = parseInt((me.GetSkill(121, false)+me.GetSkill(101, false)+me.GetSkill(118, false))/3);

	_maxindex = -1;
	_maxskill = 0;

	for(var i = 0 ; i < _avgskilllevel.length ; i++)
	{
		if(_avgskilllevel[i] > _maxskill)
		{
			_maxindex = i;
			_maxskill = _avgskilllevel[i];
		}
	}

	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]);
}

function NTA_PaladinAttackInt(target, firstorder)
{
	var _primaryindex;

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

	if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
	{
		if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
			return 2;

		return 3;
	}

	_primaryindex = (target.spectype&0x0A) ? 1 : 3;

	if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
	{
		if(_NTA_SkillRange[_primaryindex] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
			return 1;

		if(!NTA_PaladinCastSkillInt(_primaryindex, target))
			return 2;

		return 3;
	}

	if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
	{
		if(_NTA_SkillRange[5] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
			return 1;

		if(!NTA_PaladinCastSkillInt(5, target))
			return 2;

		return 3;
	}

	return 1;
}

function NTA_PaladinCastSkillInt(index, target)
{
	if(NTConfig_AttackSkill[index] == 112)
	{
		if(me.x-target.x < 1 || me.x-target.x > 2 || me.y-target.y < 1 || me.y-target.y > 2)
		{
			if(CheckCollision(target.areaid, target.x+2, target.y+2, 1))
				NTM_MoveTo(target.areaid, target.x+2, target.y+2, 0);
			else if(me.x-target.x < -4 || me.x-target.x > 2 || me.y-target.y < 0 || me.y-target.y > 2)
				NTM_MoveTo(target.areaid, target.x-4, target.y, 0);
		}
	}
	else if(NTConfig_AttackSkill[index] == 101) 
	{ 
	   if(me.x-target.x < 1 || me.x-target.x > 1 || me.y-target.y < 1 || me.y-target.y > 1) 
	   { 
	      if(CheckCollision(target.areaid, target.x-1, target.y-1, 1)) 
	         NTM_MoveTo(target.areaid, target.x-1, target.y-1, 0); 
	      else if(me.x-target.x < 0 || me.x-target.x > 0 || me.y-target.y < 0 || me.y-target.y > 0) 
	         NTM_MoveTo(target.areaid, target.x, target.y, 0); 
	   } 
	}
	else
	{
		if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}
	}

	if(NTConfig_AttackSkill[index+1] > 0)
		NTC_PutSkill(NTConfig_AttackSkill[index+1], NTC_HAND_RIGHT);

	return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}

function NTA_BarbarianAttackPatternInt()
{
	var _maxindex, _maxskill;
	var _avgskilllevel = new Array();

	_avgskilllevel[0] = me.GetSkill(151, false);

	_maxindex = -1;
	_maxskill = 0;

	for(var i = 0 ; i < _avgskilllevel.length ; i++)
	{
		if(_avgskilllevel[i] > _maxskill)
		{
			_maxindex = i;
			_maxskill = _avgskilllevel[i];
		}
	}

	switch(_maxindex)
	{
	case 0: // Whirlwind
		NTConfig_AttackSkill[1] = 151;
		NTConfig_AttackSkill[3] = 151;
		NTConfig_AttackSkill[5] = 152;
		break;
	}

	return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}

function NTA_BarbarianAttackInt(target, firstorder)
{
	var _primaryindex;

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

	if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
	{
		if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
			return 2;

		return 3;
	}

	_primaryindex = (target.spectype&0x0A) ? 1 : 3;

	if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
	{
		if((_NTA_SkillRange[_primaryindex] < 4 || NTConfig_AttackSkill[_primaryindex] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
			return 1;

		if(!NTA_BarbarianCastSkillInt(_primaryindex, target))
			return 2;

		return 3;
	}

	if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
	{
		if((_NTA_SkillRange[5] < 4 || NTConfig_AttackSkill[5] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
			return 1;

		if(!NTA_BarbarianCastSkillInt(5, target))
			return 2;

		return 3;
	}

	return 1;
}

function NTA_BarbarianCastSkillInt(index, target)
{
	if(NTConfig_AttackSkill[index] == 151)
	{
		var _castx, _casty;

		if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 5))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 5);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		_castx =  target.x > me.x ? target.x+3 : target.x-3;
		_casty =  target.y > me.y ? target.y+3 : target.y-3;

		return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], _castx, _casty);
	}

	if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
	{
		var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

		if(_pos)
			NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
	}

	return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}

function NTA_DruidAttackPatternInt()
{
	return false;
}

function NTA_DruidAttackInt(target, firstorder)
{
	return 1;
}

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

function NTA_AssassinAttackPatternInt()
{
	return false;
}

function NTA_AssassinAttackInt(target, firstorder)
{
	return 1;
}

function NTA_AssassinCastSkillInt(index, target)
{
	return false;
}
einfach den code in der NTAttack.ntl damit ersetzen --> Meele greift mit Standart an
09/27/2010 23:52 benni-#80
Quote:
Originally Posted by fertoker1 View Post
Zu meinem Problem mit dem Standardangriff:

auf eon gefunden:

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);

function NTA_Initialize()
{
	if(NTConfig_AttackSkill[1] == 0 || NTConfig_AttackSkill[3] == 0)
		NTA_DetectAttackPattern();

	for(var i = 0 ; i < 7 ; 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 0:  //melee
			   	_NTA_SkillRange[i] = 2;
				break;
			case 5:  //left hand melee
			   	_NTA_SkillRange[i] = 2;
				break;
			case 36: //Fire Bolt
				_NTA_SkillRange[i] = 26;
				break;
			case 44: //Frost Nova
			case 48: // Nova
				_NTA_SkillRange[i] = 10;
				break;
			case 55: //Glacial Spike
				_NTA_SkillRange[i] = 27;
				break;
			case 59: //Blizzard
				_NTA_SkillRange[i] = 27;
				break;
			case 64: // Frozen Orb
				_NTA_SkillRange[i] = 15;
				break;
			case 97: //Smite
			case 106: //Zeal
			case 112: //Blessed Hammer
				_NTA_SkillRange[i] = 3;
				break;
			case 151: //Whirlwind
				_NTA_SkillRange[i] = 8;
				break;
			case 152: //Berserk
				_NTA_SkillRange[i] = 3;
				break;
			default:
				_NTA_SkillRange[i] = 25;
				break;
			}
		}
	}
}

function NTA_KillMonster(classid)
{
	var _target;

	if(NTConfig_AttackSkill[1] < 0) //changed from 1
		return false;

	_target = NTC_FindUnit(NTC_UNIT_MONSTER, classid, 5);

	if(!_target)
		return false;

	if(_target.IsAttackable())
	{
		var _attackcount = 0;

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

			_attackcount++;
		}
	}

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

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

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

	switch(arguments.length)
	{
	case 0:
		range = 20;
	case 1:
		pickitem = false;
	case 2:
		safelevel = 0;
	default:
		if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
			safelevel = 0;
		break;
	}

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

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

		while(_attackcount < (i+1)*100)
		{
			_mindistance = 100000;

			_target = NTC_FindUnit(NTC_UNIT_MONSTER);

			if(_target)
			{
				do
				{
					if(_skiplist.indexOf(_target.gid) < 0)
					{
						if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
						{
							if(GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTA_IsValidMonster(_target))
							{
								_distance = GetDistance(me, _target);

								if(_distance < _mindistance)
								{
									_mingid = _target.gid;
									_mindistance = _distance;
								}
							}
						}
						else
							_skiplist.push(_target.gid);
					}
				} while(_target.GetNext());
			}

			if(_mindistance < 100000)
			{
				_target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);

				if(_target)
				{
					_result = NTA_Attack(_target, (_attackcount%30) == 0);

					switch(_result)
					{
					case 1:
						_skiplist.push(_mingid);
						break;
					case 2:
					case 3:
						_attackcount++;
						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_OpenChest)
	{
		_target = NTC_GetSpecialChest();

		if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTC_OpenChest(_target))
			_attackcount++;
	}

	if(pickitem && _attackcount > 0)
		NTSI_PickItems();

	switch(safelevel)
	{
	case 1:
		return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
	case 2:
		return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
	}

	return true;
}

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

	_room = GetRoom();

	if(!_room)
		return false;

	switch(arguments.length)
	{
	case 0:
		pickitem = true;
	case 1:
		safelevel = 2;
	default:
		if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
			safelevel = 0;
		break;
	}

	_rooms = new Array();

	do
	{
		_rooms.push([parseInt(_room.x*5 + _room.xsize*5/2), parseInt(_room.y*5 + _room.ysize*5/2)]);
	} while(_room.GetNext());

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

		for(i = 0 ; i < _rooms.length ; i++)
		{
			_distance = GetDistance(me.x, me.y, _rooms[i][0], _rooms[i][1]);

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

		if(NTM_MoveTo(me.areaid, _rooms[_minindex][0], _rooms[_minindex][1], 1))
		{
			if(!NTA_ClearRoom(pickitem, safelevel))
				return false;

			NTP_DoPrecast(false);
		}

		_rooms.splice(_minindex, 1);
	}

	return true;
}

function NTA_ClearRoom(pickitem, safelevel)
{
	var _room;
	var _spectype = [0x0A, 0x01, 0x01];
	var _skiplist;
	var _attackcount = 0;
	var _target;
	var _distance, _mingid, _mindistance;
	var _result;

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

	_room = me.GetRoom();

	if(!_room)
		return false;

	switch(arguments.length)
	{
	case 0:
		pickitem = false;
	case 1:
		safelevel = 0;
	default:
		if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
			safelevel = 0;
		break;
	}

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

		while(_attackcount < (i+1)*100)
		{
			_mindistance = 100000;

			_target = NTC_FindUnit(NTC_UNIT_MONSTER);

			if(_target)
			{
				do
				{
					if(_skiplist.indexOf(_target.gid) < 0)
					{
						if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
						{
							if(_room.UnitInRoom(_target) && NTA_IsValidMonster(_target))
							{
								_distance = GetDistance(me, _target);

								if(_distance < _mindistance)
								{
									_mingid = _target.gid;
									_mindistance = _distance;
								}
							}
						}
						else
							_skiplist.push(_target.gid);
					}
				} while(_target.GetNext());
			}

			if(_mindistance < 100000)
			{
				_target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);

				if(_target)
				{
					_result = NTA_Attack(_target, (_attackcount%30) == 0);

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

	if(me.classid == NTC_CHAR_CLASS_PALADIN)
	{
		if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
		{
			if(NTC_PutSkill(124, NTC_HAND_RIGHT))
				NTC_PingDelay(1000);
		}
	}

	if(NTConfig_OpenChest)
	{
		_target = NTC_GetSpecialChest();

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

	if(pickitem && _attackcount > 0)
		NTSI_PickItems();

	switch(safelevel)
	{
	case 1:
		return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
	case 2:
		return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
	}

	return true;
}

function NTA_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 WaterWatchers
		return false;

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

	if(monster.name == GetLocaleString(3162) && GetDistance(me.x,me.y,monster.x,monster.y) <= 25 ) 
	      if(!CheckCollision(me.areaid, monster.x, monster.y, 0) || !CheckCollision(me.areaid, monster.x, monster.y, 1) || !CheckCollision(me.areaid, monster.x, monster.y, 5)) 
        	 return false; 

	return true;
}

function NTA_GetDamageType(skillid)
{
	if(skillid == 74) // Corpse Explosion
		return NTA_DAMAGE_PHYSICAL;

	if(skillid == 101) // Blessed Hammer
		return NTA_DAMAGE_NONE;

	switch(GetBaseStat("skills.txt", skillid, 233))
	{
	case "cold":
		return NTA_DAMAGE_COLD;
	case "fire":
		return NTA_DAMAGE_FIRE;
	case "ltng":
		return NTA_DAMAGE_LIGHTNING;
	case "mag":
		return NTA_DAMAGE_MAGIC;
	case "pois":
		return NTA_DAMAGE_POISON;
	case "stun":
		return NTA_DAMAGE_NONE;
	default:
		if(GetBaseStat("skills.txt", skillid, 178) || GetBaseStat("skills.txt", skillid, 182)) // aura or passive
			return NTA_DAMAGE_NONE;
	}

	return NTA_DAMAGE_PHYSICAL;
}

function NTA_GetResistance(enemy, type)
{
	switch(type)
	{
	case NTA_DAMAGE_PHYSICAL:
		return enemy.GetStat(36);
	case NTA_DAMAGE_MAGIC:
		return enemy.GetStat(37);
	case NTA_DAMAGE_FIRE:
		return enemy.GetStat(39);
	case NTA_DAMAGE_LIGHTNING:
		return enemy.GetStat(41);
	case NTA_DAMAGE_COLD:
		return enemy.GetStat(43);
	case NTA_DAMAGE_POISON:
		return enemy.GetStat(45);
	}

	return 0;
}

function NTA_DetectAttackPattern()
{
	switch(me.classid)
	{
	case NTC_CHAR_CLASS_AMAZON:
		return NTA_AmazonAttackPatternInt();
	case NTC_CHAR_CLASS_SORCERESS:
		return NTA_SorceressAttackPatternInt();
	case NTC_CHAR_CLASS_NECROMANCER:
		return NTA_NecromancerAttackPatternInt();
	case NTC_CHAR_CLASS_PALADIN:
		return NTA_PaladinAttackPatternInt();
	case NTC_CHAR_CLASS_BARBARIAN:
		return NTA_BarbarianAttackPatternInt();
	case NTC_CHAR_CLASS_DRUID:
		return NTA_DruidAttackPatternInt();
	case NTC_CHAR_CLASS_ASSASSIN:
		return NTA_AssassinAttackPatternInt();
	}

	return false;
}

// Return value : 0 = Unrecoverable process, 1 = Unavailable attack, 2 = Onetime fail, 3 = Success
function NTA_Attack(target, firstorder)
{
	switch(me.classid)
	{
	case NTC_CHAR_CLASS_AMAZON:
		return NTA_AmazonAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_SORCERESS:
		return NTA_SorceressAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_NECROMANCER:
		return NTA_NecromancerAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_PALADIN:
		return NTA_PaladinAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_BARBARIAN:
		return NTA_BarbarianAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_DRUID:
		return NTA_DruidAttackInt(target, firstorder);
	case NTC_CHAR_CLASS_ASSASSIN:
		return NTA_AssassinAttackInt(target, firstorder);
	}

	return 0;
}

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

function NTA_AmazonAttackInt(target, firstorder)
{
	return 1;
}

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

function NTA_SorceressAttackPatternInt()
{
	var _maxindex, _maxskill;
	var _avgskilllevel = new Array();

	_avgskilllevel[0] = parseInt((me.GetSkill(59, false)+me.GetSkill(39, false)+me.GetSkill(45, false)+me.GetSkill(55, false))/4);
	_avgskilllevel[1] = parseInt((me.GetSkill(53, false)+me.GetSkill(38, false)+me.GetSkill(48, false)+me.GetSkill(49, false))/4);
	_avgskilllevel[2] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false)+me.GetSkill(64, false))/4);
	_avgskilllevel[3] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false))/3);

	_maxindex = -1;
	_maxskill = 0;

	for(var i = 0 ; i < _avgskilllevel.length ; i++)
	{
		if(_avgskilllevel[i] > _maxskill)
		{
			_maxindex = i;
			_maxskill = _avgskilllevel[i];
		}
	}

	switch(_maxindex)
	{
	case 0: // Blizzard + Glacial Spike
		NTConfig_AttackSkill[1] = 59;
		NTConfig_AttackSkill[2] = 55;
		NTConfig_AttackSkill[3] = 59;
		NTConfig_AttackSkill[4] = 55;
		break;
	case 1: // Chain Lightning + Lightning
		NTConfig_AttackSkill[1] = 49;
		NTConfig_AttackSkill[3] = 53;
		break;
	case 2: // Fire Ball + Frozen Orb
		NTConfig_AttackSkill[0] = 64;
		NTConfig_AttackSkill[1] = 47;
		NTConfig_AttackSkill[3] = 47;
		NTConfig_AttackSkill[5] = 64;
		NTConfig_AttackSkill[6] = 55;
		break;
	case 3: // Fire Ball + Meteor
		NTConfig_AttackSkill[1] = 56;
		NTConfig_AttackSkill[2] = 47;
		NTConfig_AttackSkill[3] = 56;
		NTConfig_AttackSkill[4] = 47;
		break;
	}

	return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}

function NTA_SorceressAttackInt(target, firstorder)
{
	var _primaryindex;

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

	if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
	{
		if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
			return 2;

		return 3;
	}

	if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80)
	{
		var _staticlevel = NTC_GetSkillLevel(42);

		if(_staticlevel > 0)
		{
			var _staticrange;
			var _castx, _casty;

			_staticrange = Math.floor((5+_staticlevel-1)*2/3);

			if(GetDistance(me, target) > _staticrange || !CheckCollision(me, target, 6))
			{
				var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _staticrange, 6);

				if(_pos)
					NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
			}

			if(target.x < me.x)
				_castx = me.x - 1;
			else if(target.x > me.x)
				_castx = me.x + 1;
			else
				_castx = me.x;

			if(target.y < me.y)
				_casty = me.y - 1;
			else if(target.y > me.y)
				_casty = me.y + 1;
			else
				_casty = me.y;

			if(!CheckCollision(target.areaid, _castx, _casty, 1))
			{
				_castx = me.x;
				_casty = me.y;
			}

			if(!NTC_CastSkill(42, NTC_HAND_RIGHT, _castx, _casty))
				return 2;

			return 3;
		}
	}

	_primaryindex = (target.spectype&0x0A) ? 1 : 3;

	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] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
	}

	if(NTConfig_AttackSkill[index+1] > 0)
	{
		if(GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
	}

	for(var i = 0 ; i < 25 ; i++)
	{
		NTC_Delay(NTC_DELAY_FRAME);

		if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
			break;
	}

	return false;
}

function NTA_NecromancerAttackPatternInt()
{
	return false;
}

function NTA_NecromancerAttackInt(target, firstorder)
{
	return 1;
}

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

function NTA_PaladinAttackPatternInt()
{
	var _maxindex, _maxskill;
	var _avgskilllevel = new Array();

	_avgskilllevel[0] = parseInt((me.GetSkill(112, false)+me.GetSkill(108, false)+me.GetSkill(115, false))/3);
	_avgskilllevel[1] = parseInt((me.GetSkill(106, false)+me.GetSkill(96, false))/2);
	_avgskilllevel[2] = parseInt((me.GetSkill(121, false)+me.GetSkill(101, false)+me.GetSkill(118, false))/3);

	_maxindex = -1;
	_maxskill = 0;

	for(var i = 0 ; i < _avgskilllevel.length ; i++)
	{
		if(_avgskilllevel[i] > _maxskill)
		{
			_maxindex = i;
			_maxskill = _avgskilllevel[i];
		}
	}

	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]);
}

function NTA_PaladinAttackInt(target, firstorder)
{
	var _primaryindex;

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

	if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
	{
		if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
			return 2;

		return 3;
	}

	_primaryindex = (target.spectype&0x0A) ? 1 : 3;

	if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
	{
		if(_NTA_SkillRange[_primaryindex] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
			return 1;

		if(!NTA_PaladinCastSkillInt(_primaryindex, target))
			return 2;

		return 3;
	}

	if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
	{
		if(_NTA_SkillRange[5] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
			return 1;

		if(!NTA_PaladinCastSkillInt(5, target))
			return 2;

		return 3;
	}

	return 1;
}

function NTA_PaladinCastSkillInt(index, target)
{
	if(NTConfig_AttackSkill[index] == 112)
	{
		if(me.x-target.x < 1 || me.x-target.x > 2 || me.y-target.y < 1 || me.y-target.y > 2)
		{
			if(CheckCollision(target.areaid, target.x+2, target.y+2, 1))
				NTM_MoveTo(target.areaid, target.x+2, target.y+2, 0);
			else if(me.x-target.x < -4 || me.x-target.x > 2 || me.y-target.y < 0 || me.y-target.y > 2)
				NTM_MoveTo(target.areaid, target.x-4, target.y, 0);
		}
	}
	else if(NTConfig_AttackSkill[index] == 101) 
	{ 
	   if(me.x-target.x < 1 || me.x-target.x > 1 || me.y-target.y < 1 || me.y-target.y > 1) 
	   { 
	      if(CheckCollision(target.areaid, target.x-1, target.y-1, 1)) 
	         NTM_MoveTo(target.areaid, target.x-1, target.y-1, 0); 
	      else if(me.x-target.x < 0 || me.x-target.x > 0 || me.y-target.y < 0 || me.y-target.y > 0) 
	         NTM_MoveTo(target.areaid, target.x, target.y, 0); 
	   } 
	}
	else
	{
		if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}
	}

	if(NTConfig_AttackSkill[index+1] > 0)
		NTC_PutSkill(NTConfig_AttackSkill[index+1], NTC_HAND_RIGHT);

	return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}

function NTA_BarbarianAttackPatternInt()
{
	var _maxindex, _maxskill;
	var _avgskilllevel = new Array();

	_avgskilllevel[0] = me.GetSkill(151, false);

	_maxindex = -1;
	_maxskill = 0;

	for(var i = 0 ; i < _avgskilllevel.length ; i++)
	{
		if(_avgskilllevel[i] > _maxskill)
		{
			_maxindex = i;
			_maxskill = _avgskilllevel[i];
		}
	}

	switch(_maxindex)
	{
	case 0: // Whirlwind
		NTConfig_AttackSkill[1] = 151;
		NTConfig_AttackSkill[3] = 151;
		NTConfig_AttackSkill[5] = 152;
		break;
	}

	return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}

function NTA_BarbarianAttackInt(target, firstorder)
{
	var _primaryindex;

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

	if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
	{
		if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
			return 2;

		return 3;
	}

	_primaryindex = (target.spectype&0x0A) ? 1 : 3;

	if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
	{
		if((_NTA_SkillRange[_primaryindex] < 4 || NTConfig_AttackSkill[_primaryindex] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
			return 1;

		if(!NTA_BarbarianCastSkillInt(_primaryindex, target))
			return 2;

		return 3;
	}

	if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
	{
		if((_NTA_SkillRange[5] < 4 || NTConfig_AttackSkill[5] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
			return 1;

		if(!NTA_BarbarianCastSkillInt(5, target))
			return 2;

		return 3;
	}

	return 1;
}

function NTA_BarbarianCastSkillInt(index, target)
{
	if(NTConfig_AttackSkill[index] == 151)
	{
		var _castx, _casty;

		if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 5))
		{
			var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 5);

			if(_pos)
				NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
		}

		_castx =  target.x > me.x ? target.x+3 : target.x-3;
		_casty =  target.y > me.y ? target.y+3 : target.y-3;

		return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], _castx, _casty);
	}

	if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
	{
		var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

		if(_pos)
			NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
	}

	return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}

function NTA_DruidAttackPatternInt()
{
	return false;
}

function NTA_DruidAttackInt(target, firstorder)
{
	return 1;
}

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

function NTA_AssassinAttackPatternInt()
{
	return false;
}

function NTA_AssassinAttackInt(target, firstorder)
{
	return 1;
}

function NTA_AssassinCastSkillInt(index, target)
{
	return false;
}
einfach den code in der NTAttack.ntl damit ersetzen --> Meele greift mit Standart an
naja das sollte vor paar seiten schon geklärt worden sein ^^
09/27/2010 23:53 Nuru der Stadtmasseur#81
Quote:
Originally Posted by rage5 View Post
naja das sollte vor paar seiten schon geklärt worden sein ^^
Mein Problem wurde dadurch nicht gelöst, erst das Ersetzen der kompletten NTAttack hat Abhilfe geschafft
09/28/2010 00:33 sissam#82
rage bei mir funzelt alles wunder bar soweit jedoch das einzigste problem was ich habe was du auch sicher loesen kannst :) ist das der barb und der pala denen ich zzt. den atack skill 0 zugewiesen habe nur von weiten hauen aber nicht treffen ^^ wie stell ich das um so das sie an den feind rann gehn und schlagen ?

danke schon mal und kriegst auch gleich ein thx von mir
09/28/2010 00:36 ldevil#83
Klappts denn auch mit der anderen NTAttack.ntj nicht die ne Seite vorher gepostet wurde?
09/28/2010 00:42 benni-#84
eben editier einfach deine NTAttack.ntl im Ordner /libs/common/ mit
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);

function NTA_Initialize()
{
    if(NTConfig_AttackSkill[1] == 0 || NTConfig_AttackSkill[3] == 0)
        NTA_DetectAttackPattern();

    for(var i = 0 ; i < 7 ; 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 0:  //melee
                   _NTA_SkillRange[i] = 2;
                break;
            case 5:  //left hand melee
                   _NTA_SkillRange[i] = 2;
                break;
            case 36: //Fire Bolt
                _NTA_SkillRange[i] = 26;
                break;
            case 44: //Frost Nova
            case 48: // Nova
                _NTA_SkillRange[i] = 10;
                break;
            case 55: //Glacial Spike
                _NTA_SkillRange[i] = 27;
                break;
            case 59: //Blizzard
                _NTA_SkillRange[i] = 27;
                break;
            case 64: // Frozen Orb
                _NTA_SkillRange[i] = 15;
                break;
            case 97: //Smite
            case 106: //Zeal
            case 112: //Blessed Hammer
                _NTA_SkillRange[i] = 3;
                break;
            case 151: //Whirlwind
                _NTA_SkillRange[i] = 8;
                break;
            case 152: //Berserk
                _NTA_SkillRange[i] = 3;
                break;
            default:
                _NTA_SkillRange[i] = 25;
                break;
            }
        }
    }
}

function NTA_KillMonster(classid)
{
    var _target;

    if(NTConfig_AttackSkill[1] < 0) //changed from 1
        return false;

    _target = NTC_FindUnit(NTC_UNIT_MONSTER, classid, 5);

    if(!_target)
        return false;

    if(_target.IsAttackable())
    {
        var _attackcount = 0;

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

            _attackcount++;
        }
    }

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

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

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

    switch(arguments.length)
    {
    case 0:
        range = 20;
    case 1:
        pickitem = false;
    case 2:
        safelevel = 0;
    default:
        if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
            safelevel = 0;
        break;
    }

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

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

        while(_attackcount < (i+1)*100)
        {
            _mindistance = 100000;

            _target = NTC_FindUnit(NTC_UNIT_MONSTER);

            if(_target)
            {
                do
                {
                    if(_skiplist.indexOf(_target.gid) < 0)
                    {
                        if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
                        {
                            if(GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTA_IsValidMonster(_target))
                            {
                                _distance = GetDistance(me, _target);

                                if(_distance < _mindistance)
                                {
                                    _mingid = _target.gid;
                                    _mindistance = _distance;
                                }
                            }
                        }
                        else
                            _skiplist.push(_target.gid);
                    }
                } while(_target.GetNext());
            }

            if(_mindistance < 100000)
            {
                _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);

                if(_target)
                {
                    _result = NTA_Attack(_target, (_attackcount%30) == 0);

                    switch(_result)
                    {
                    case 1:
                        _skiplist.push(_mingid);
                        break;
                    case 2:
                    case 3:
                        _attackcount++;
                        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_OpenChest)
    {
        _target = NTC_GetSpecialChest();

        if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTC_OpenChest(_target))
            _attackcount++;
    }

    if(pickitem && _attackcount > 0)
        NTSI_PickItems();

    switch(safelevel)
    {
    case 1:
        return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
    case 2:
        return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
    }

    return true;
}

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

    _room = GetRoom();

    if(!_room)
        return false;

    switch(arguments.length)
    {
    case 0:
        pickitem = true;
    case 1:
        safelevel = 2;
    default:
        if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
            safelevel = 0;
        break;
    }

    _rooms = new Array();

    do
    {
        _rooms.push([parseInt(_room.x*5 + _room.xsize*5/2), parseInt(_room.y*5 + _room.ysize*5/2)]);
    } while(_room.GetNext());

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

        for(i = 0 ; i < _rooms.length ; i++)
        {
            _distance = GetDistance(me.x, me.y, _rooms[i][0], _rooms[i][1]);

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

        if(NTM_MoveTo(me.areaid, _rooms[_minindex][0], _rooms[_minindex][1], 1))
        {
            if(!NTA_ClearRoom(pickitem, safelevel))
                return false;

            NTP_DoPrecast(false);
        }

        _rooms.splice(_minindex, 1);
    }

    return true;
}

function NTA_ClearRoom(pickitem, safelevel)
{
    var _room;
    var _spectype = [0x0A, 0x01, 0x01];
    var _skiplist;
    var _attackcount = 0;
    var _target;
    var _distance, _mingid, _mindistance;
    var _result;

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

    _room = me.GetRoom();

    if(!_room)
        return false;

    switch(arguments.length)
    {
    case 0:
        pickitem = false;
    case 1:
        safelevel = 0;
    default:
        if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
            safelevel = 0;
        break;
    }

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

        while(_attackcount < (i+1)*100)
        {
            _mindistance = 100000;

            _target = NTC_FindUnit(NTC_UNIT_MONSTER);

            if(_target)
            {
                do
                {
                    if(_skiplist.indexOf(_target.gid) < 0)
                    {
                        if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
                        {
                            if(_room.UnitInRoom(_target) && NTA_IsValidMonster(_target))
                            {
                                _distance = GetDistance(me, _target);

                                if(_distance < _mindistance)
                                {
                                    _mingid = _target.gid;
                                    _mindistance = _distance;
                                }
                            }
                        }
                        else
                            _skiplist.push(_target.gid);
                    }
                } while(_target.GetNext());
            }

            if(_mindistance < 100000)
            {
                _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);

                if(_target)
                {
                    _result = NTA_Attack(_target, (_attackcount%30) == 0);

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

    if(me.classid == NTC_CHAR_CLASS_PALADIN)
    {
        if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
        {
            if(NTC_PutSkill(124, NTC_HAND_RIGHT))
                NTC_PingDelay(1000);
        }
    }

    if(NTConfig_OpenChest)
    {
        _target = NTC_GetSpecialChest();

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

    if(pickitem && _attackcount > 0)
        NTSI_PickItems();

    switch(safelevel)
    {
    case 1:
        return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
    case 2:
        return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
    }

    return true;
}

function NTA_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 WaterWatchers
        return false;

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

    if(monster.name == GetLocaleString(3162) && GetDistance(me.x,me.y,monster.x,monster.y) <= 25 ) 
          if(!CheckCollision(me.areaid, monster.x, monster.y, 0) || !CheckCollision(me.areaid, monster.x, monster.y, 1) || !CheckCollision(me.areaid, monster.x, monster.y, 5)) 
             return false; 

    return true;
}

function NTA_GetDamageType(skillid)
{
    if(skillid == 74) // Corpse Explosion
        return NTA_DAMAGE_PHYSICAL;

    if(skillid == 101) // Blessed Hammer
        return NTA_DAMAGE_NONE;

    switch(GetBaseStat("skills.txt", skillid, 233))
    {
    case "cold":
        return NTA_DAMAGE_COLD;
    case "fire":
        return NTA_DAMAGE_FIRE;
    case "ltng":
        return NTA_DAMAGE_LIGHTNING;
    case "mag":
        return NTA_DAMAGE_MAGIC;
    case "pois":
        return NTA_DAMAGE_POISON;
    case "stun":
        return NTA_DAMAGE_NONE;
    default:
        if(GetBaseStat("skills.txt", skillid, 178) || GetBaseStat("skills.txt", skillid, 182)) // aura or passive
            return NTA_DAMAGE_NONE;
    }

    return NTA_DAMAGE_PHYSICAL;
}

function NTA_GetResistance(enemy, type)
{
    switch(type)
    {
    case NTA_DAMAGE_PHYSICAL:
        return enemy.GetStat(36);
    case NTA_DAMAGE_MAGIC:
        return enemy.GetStat(37);
    case NTA_DAMAGE_FIRE:
        return enemy.GetStat(39);
    case NTA_DAMAGE_LIGHTNING:
        return enemy.GetStat(41);
    case NTA_DAMAGE_COLD:
        return enemy.GetStat(43);
    case NTA_DAMAGE_POISON:
        return enemy.GetStat(45);
    }

    return 0;
}

function NTA_DetectAttackPattern()
{
    switch(me.classid)
    {
    case NTC_CHAR_CLASS_AMAZON:
        return NTA_AmazonAttackPatternInt();
    case NTC_CHAR_CLASS_SORCERESS:
        return NTA_SorceressAttackPatternInt();
    case NTC_CHAR_CLASS_NECROMANCER:
        return NTA_NecromancerAttackPatternInt();
    case NTC_CHAR_CLASS_PALADIN:
        return NTA_PaladinAttackPatternInt();
    case NTC_CHAR_CLASS_BARBARIAN:
        return NTA_BarbarianAttackPatternInt();
    case NTC_CHAR_CLASS_DRUID:
        return NTA_DruidAttackPatternInt();
    case NTC_CHAR_CLASS_ASSASSIN:
        return NTA_AssassinAttackPatternInt();
    }

    return false;
}

// Return value : 0 = Unrecoverable process, 1 = Unavailable attack, 2 = Onetime fail, 3 = Success
function NTA_Attack(target, firstorder)
{
    switch(me.classid)
    {
    case NTC_CHAR_CLASS_AMAZON:
        return NTA_AmazonAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_SORCERESS:
        return NTA_SorceressAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_NECROMANCER:
        return NTA_NecromancerAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_PALADIN:
        return NTA_PaladinAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_BARBARIAN:
        return NTA_BarbarianAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_DRUID:
        return NTA_DruidAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_ASSASSIN:
        return NTA_AssassinAttackInt(target, firstorder);
    }

    return 0;
}

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

function NTA_AmazonAttackInt(target, firstorder)
{
    return 1;
}

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

function NTA_SorceressAttackPatternInt()
{
    var _maxindex, _maxskill;
    var _avgskilllevel = new Array();

    _avgskilllevel[0] = parseInt((me.GetSkill(59, false)+me.GetSkill(39, false)+me.GetSkill(45, false)+me.GetSkill(55, false))/4);
    _avgskilllevel[1] = parseInt((me.GetSkill(53, false)+me.GetSkill(38, false)+me.GetSkill(48, false)+me.GetSkill(49, false))/4);
    _avgskilllevel[2] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false)+me.GetSkill(64, false))/4);
    _avgskilllevel[3] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false))/3);

    _maxindex = -1;
    _maxskill = 0;

    for(var i = 0 ; i < _avgskilllevel.length ; i++)
    {
        if(_avgskilllevel[i] > _maxskill)
        {
            _maxindex = i;
            _maxskill = _avgskilllevel[i];
        }
    }

    switch(_maxindex)
    {
    case 0: // Blizzard + Glacial Spike
        NTConfig_AttackSkill[1] = 59;
        NTConfig_AttackSkill[2] = 55;
        NTConfig_AttackSkill[3] = 59;
        NTConfig_AttackSkill[4] = 55;
        break;
    case 1: // Chain Lightning + Lightning
        NTConfig_AttackSkill[1] = 49;
        NTConfig_AttackSkill[3] = 53;
        break;
    case 2: // Fire Ball + Frozen Orb
        NTConfig_AttackSkill[0] = 64;
        NTConfig_AttackSkill[1] = 47;
        NTConfig_AttackSkill[3] = 47;
        NTConfig_AttackSkill[5] = 64;
        NTConfig_AttackSkill[6] = 55;
        break;
    case 3: // Fire Ball + Meteor
        NTConfig_AttackSkill[1] = 56;
        NTConfig_AttackSkill[2] = 47;
        NTConfig_AttackSkill[3] = 56;
        NTConfig_AttackSkill[4] = 47;
        break;
    }

    return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}

function NTA_SorceressAttackInt(target, firstorder)
{
    var _primaryindex;

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

    if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
    {
        if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
        {
            var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

            if(_pos)
                NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
        }

        if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
            return 2;

        return 3;
    }

    if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80)
    {
        var _staticlevel = NTC_GetSkillLevel(42);

        if(_staticlevel > 0)
        {
            var _staticrange;
            var _castx, _casty;

            _staticrange = Math.floor((5+_staticlevel-1)*2/3);

            if(GetDistance(me, target) > _staticrange || !CheckCollision(me, target, 6))
            {
                var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _staticrange, 6);

                if(_pos)
                    NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
            }

            if(target.x < me.x)
                _castx = me.x - 1;
            else if(target.x > me.x)
                _castx = me.x + 1;
            else
                _castx = me.x;

            if(target.y < me.y)
                _casty = me.y - 1;
            else if(target.y > me.y)
                _casty = me.y + 1;
            else
                _casty = me.y;

            if(!CheckCollision(target.areaid, _castx, _casty, 1))
            {
                _castx = me.x;
                _casty = me.y;
            }

            if(!NTC_CastSkill(42, NTC_HAND_RIGHT, _castx, _casty))
                return 2;

            return 3;
        }
    }

    _primaryindex = (target.spectype&0x0A) ? 1 : 3;

    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] || !CheckCollision(me, target, 4))
        {
            var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

            if(_pos)
                NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
        }

        return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
    }

    if(NTConfig_AttackSkill[index+1] > 0)
    {
        if(GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4))
        {
            var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);

            if(_pos)
                NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
        }

        return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
    }

    for(var i = 0 ; i < 25 ; i++)
    {
        NTC_Delay(NTC_DELAY_FRAME);

        if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
            break;
    }

    return false;
}

function NTA_NecromancerAttackPatternInt()
{
    return false;
}

function NTA_NecromancerAttackInt(target, firstorder)
{
    return 1;
}

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

function NTA_PaladinAttackPatternInt()
{
    var _maxindex, _maxskill;
    var _avgskilllevel = new Array();

    _avgskilllevel[0] = parseInt((me.GetSkill(112, false)+me.GetSkill(108, false)+me.GetSkill(115, false))/3);
    _avgskilllevel[1] = parseInt((me.GetSkill(106, false)+me.GetSkill(96, false))/2);
    _avgskilllevel[2] = parseInt((me.GetSkill(121, false)+me.GetSkill(101, false)+me.GetSkill(118, false))/3);

    _maxindex = -1;
    _maxskill = 0;

    for(var i = 0 ; i < _avgskilllevel.length ; i++)
    {
        if(_avgskilllevel[i] > _maxskill)
        {
            _maxindex = i;
            _maxskill = _avgskilllevel[i];
        }
    }

    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]);
}

function NTA_PaladinAttackInt(target, firstorder)
{
    var _primaryindex;

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

    if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
    {
        if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
        {
            var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

            if(_pos)
                NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
        }

        if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
            return 2;

        return 3;
    }

    _primaryindex = (target.spectype&0x0A) ? 1 : 3;

    if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
    {
        if(_NTA_SkillRange[_primaryindex] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
            return 1;

        if(!NTA_PaladinCastSkillInt(_primaryindex, target))
            return 2;

        return 3;
    }

    if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
    {
        if(_NTA_SkillRange[5] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
            return 1;

        if(!NTA_PaladinCastSkillInt(5, target))
            return 2;

        return 3;
    }

    return 1;
}

function NTA_PaladinCastSkillInt(index, target)
{
    if(NTConfig_AttackSkill[index] == 112)
    {
        if(me.x-target.x < 1 || me.x-target.x > 2 || me.y-target.y < 1 || me.y-target.y > 2)
        {
            if(CheckCollision(target.areaid, target.x+2, target.y+2, 1))
                NTM_MoveTo(target.areaid, target.x+2, target.y+2, 0);
            else if(me.x-target.x < -4 || me.x-target.x > 2 || me.y-target.y < 0 || me.y-target.y > 2)
                NTM_MoveTo(target.areaid, target.x-4, target.y, 0);
        }
    }
    else if(NTConfig_AttackSkill[index] == 101) 
    { 
       if(me.x-target.x < 1 || me.x-target.x > 1 || me.y-target.y < 1 || me.y-target.y > 1) 
       { 
          if(CheckCollision(target.areaid, target.x-1, target.y-1, 1)) 
             NTM_MoveTo(target.areaid, target.x-1, target.y-1, 0); 
          else if(me.x-target.x < 0 || me.x-target.x > 0 || me.y-target.y < 0 || me.y-target.y > 0) 
             NTM_MoveTo(target.areaid, target.x, target.y, 0); 
       } 
    }
    else
    {
        if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
        {
            var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

            if(_pos)
                NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
        }
    }

    if(NTConfig_AttackSkill[index+1] > 0)
        NTC_PutSkill(NTConfig_AttackSkill[index+1], NTC_HAND_RIGHT);

    return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}

function NTA_BarbarianAttackPatternInt()
{
    var _maxindex, _maxskill;
    var _avgskilllevel = new Array();

    _avgskilllevel[0] = me.GetSkill(151, false);

    _maxindex = -1;
    _maxskill = 0;

    for(var i = 0 ; i < _avgskilllevel.length ; i++)
    {
        if(_avgskilllevel[i] > _maxskill)
        {
            _maxindex = i;
            _maxskill = _avgskilllevel[i];
        }
    }

    switch(_maxindex)
    {
    case 0: // Whirlwind
        NTConfig_AttackSkill[1] = 151;
        NTConfig_AttackSkill[3] = 151;
        NTConfig_AttackSkill[5] = 152;
        break;
    }

    return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}

function NTA_BarbarianAttackInt(target, firstorder)
{
    var _primaryindex;

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

    if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
    {
        if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
        {
            var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

            if(_pos)
                NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
        }

        if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
            return 2;

        return 3;
    }

    _primaryindex = (target.spectype&0x0A) ? 1 : 3;

    if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
    {
        if((_NTA_SkillRange[_primaryindex] < 4 || NTConfig_AttackSkill[_primaryindex] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
            return 1;

        if(!NTA_BarbarianCastSkillInt(_primaryindex, target))
            return 2;

        return 3;
    }

    if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
    {
        if((_NTA_SkillRange[5] < 4 || NTConfig_AttackSkill[5] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
            return 1;

        if(!NTA_BarbarianCastSkillInt(5, target))
            return 2;

        return 3;
    }

    return 1;
}

function NTA_BarbarianCastSkillInt(index, target)
{
    if(NTConfig_AttackSkill[index] == 151)
    {
        var _castx, _casty;

        if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 5))
        {
            var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 5);

            if(_pos)
                NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
        }

        _castx =  target.x > me.x ? target.x+3 : target.x-3;
        _casty =  target.y > me.y ? target.y+3 : target.y-3;

        return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], _castx, _casty);
    }

    if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
    {
        var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

        if(_pos)
            NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
    }

    return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}

function NTA_DruidAttackPatternInt()
{
    return false;
}

function NTA_DruidAttackInt(target, firstorder)
{
    return 1;
}

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

function NTA_AssassinAttackPatternInt()
{
    return false;
}

function NTA_AssassinAttackInt(target, firstorder)
{
    return 1;
}

function NTA_AssassinCastSkillInt(index, target)
{
    return false;
}
09/28/2010 00:49 sissam#85
so habs jetz mit der NTAttack.ntj gemachst und siehe da es funzelt

nur der pala bleibt irgend wann stehn und hat eine fehlermeldung das NTConfig_useRedemtionHP nicht defined ist.

wo ran liegt das?
09/28/2010 00:52 benni-#86
das hast du noch net geskillt denk ich ma und er versucht es zu benutzen

einfach
Code:
//    NTConfig_UseRedemptionHP = 80;    // Unter XX Prozent Leben wird Rücknahme benutzt.
//    NTConfig_UseRedemptionMP = 60;    // Unter XX Prozent Mana wird Rücknahme benutzt.
also siehts dann ungefähr so aus

Code:
var NTConfig_UseRedemptionHP;
var NTConfig_UseRedemptionMP;
var NTConfig_Teleport;

	//#################################################################
	//############################### Shop Bot ########################
	//#############################Einstellungen#######################
	//#################################################################

// base shop d2x £¨if need shop d2c, set this true £©
var is_D2C = false;

// shop npc number£¬can shop multi npc, just need push npc number uself.
var shop_npcNumber = new Array();
//shop_npcNumber.push( 1 );
shop_npcNumber.push( 4 );
//shop_npcNumber.push( 5 );
//shop_npcNumber.push( 13 );
//shop_npcNumber.push( 12 );
// Act 1: Akara(1),    Charsi(2),  Gheed(3)
// Act 2: Drognan(4),  Fara(5),    Elzix(6)
// Act 3: Ormus(7),    Hratli(8),  Asheara(9)
// Act 4: Jamella(10), Halbu(11)
// Act 5: Anya(12),    Larzuk(13), Malah(14)

// auto kill anya red tp undead
var autoClear = true;
// shop anya go wp, if u want go wp, set it to true£¬base do not go wp
var anyaGoWp = false;

// get error then £º"quit game" or "come on"£¬base is "come on"
var errorGoQuitGame = false;

function NT_LoadConfig()
{
	//------------------------------------------------------------------------------
	// Bot - Einstellungen
	//------------------------------------------------------------------------------

	//###############################################################################
	//######################### Automatische Truhen sortierung ######################
	//############### muss immer aktiv sein sonst gibt es einen fehler ##############
	//###############################################################################

	MyConfig_StoreItem = [0, 0]; // WICHTIG andere werte als zwei gleiche zahlen führen zu einem fehler!!!!  // [0, 0] = von oben links sortieren// [1, 1] = von unten rechts // [2, 2] = von oben rechts

	//###############################################################################
	//########################### Itemlog in xml datei ##############################
	//################ entwickelt und veröffentlicht von muddy @ epvp ###############
	//###############################################################################

	NTConfig_UseXMLItemlog = false;

	//###############################################################################
	//############################### Hot Ip Finder #################################
	//###############################################################################

	NTConfig_Script.push("HotIpHunter.ntj");
	NTConfig_HotIp = [ "0", "0", "0", "0" ];  // Hier die Hot ip´s eintragen bei denen er warten soll // 0 = bei keiner ip
	NTConfig_IdleTime = 3600000;		 // Hier die wartezeit in ms eintragen wenn eine hot ip gefunden

	//############################################################################
	//################################# Shopping #################################
	//############################################################################

	//NTConfig_Script.push("NTShopbot.ntj");

	//###########################################################################################################################

	MyConfig_MiniShopBot  = true; // jedesmal wenn euer char zum händler geht checkt er ob items aus eurer pickit vorhanden sind zum kaufen // unabhängig vom shopbot

	//######################################################################
	//############################ Teleport swap ###########################
	//######################################################################

	NTConfig_Teleport = false;	//// true = waffenwechsel beim teleport//// false = kein waffenwechsel beim teleport

	//###############################################################################
	//################################## Pickit #####################################
	//############################### Überprüfung ###################################
	//###############################################################################

	NTConfig_Script.push("TLNipCheck.ntj"); NTConfig_CheckCodes = true;

	//###############################################################################
	//################################## AUTO MULE ##################################
	//########################## entwickelt und Öffentlich gemacht ##################
	//############################## von MEDIX @ EPVP ###############################
	//###############################################################################

	//NTConfig_AutoMule = true;

	//###################################################################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################__..::Akt 1::..__######################
	//############################~~~~~~~~~~~~~~~~~######################

//#####################################################################################################################################

//	NTConfig_Script.push("Akt1-Cow.ntj"); NTConfig_KillRakanishuCows = true; NTConfig_TristExtension = false;

//#####################################################################################################################################

//	NTConfig_Script.push("Akt1-BoneAsh.ntj");

//#####################################################################################################################################

//	NTConfig_Script.push("Akt1-Mausoleum.ntj"); NTConfig_Bishibosh = true; NTConfig_KillBloodRaven = true; NTConfig_ClearMaus = 2; // 0 = nut truhe öffnen // 1 = den weg zur truhe cleanen // 2 = Mauso Komplett // 3 = Mauso nur helden bosse und truhe

//#####################################################################################################################################

//	NTConfig_Script.push("Akt1-Crypta.ntj"); NTConfig_ClearCrypt = 4; // 0 = nur truhe öffnen // 1 = den weg zur truhe cleanen // 2 = crypta Komplett // 3 = nur das superuniq monster und truhe // 4 = Alle Helden in crypta töten und truhe öffnen

//#####################################################################################################################################

//	NTConfig_Script.push("Akt1-Graefin.ntj"); NTConfig_Waffenstaender = true; NTConfig_Cleaning = 0;  //1 = bedeutet das der gesamte tower von monstern befreit wird // 2 = gesamter tower wird nur von helden befreit // 0 = schnell runter gräfin töten weiter // Waffenstaender = true/false (selbsterklärend)

//#####################################################################################################################################

//	NTConfig_Script.push("Akt1-Treehead.ntj");

//#####################################################################################################################################

//	NTConfig_Script.push("Akt1-DieGrube.ntj"); NTConfig_ClearPitLevel1 = 1; 	// 0 : Nichts in Lvl 1 töten, 1 : Alles was auf dem Weg zu Lvl 2 liegt töten, 2 : Alles töten // 3 : alle helden in level 1 töten

//#####################################################################################################################################

//	NTConfig_Script.push("Akt1-DasLoch.ntj"); NTConfig_ClearHoleLevel1 = 3; 	// 0 : Nichts in Lvl 1 töten, 1 : Alles was auf dem Weg zu Lvl 2 liegt töten, 2 : Alles töten // 3 : Alle Helden in level 1 töten und truhe öffnen

//#####################################################################################################################################

//	NTConfig_Script.push("Akt1-Tristram.ntj"); NTConfig_KillRakanishu = true; NTConfig_BossTrist = 1; // 1 = alles killen // 2 = Nur bosse killen
	
//#####################################################################################################################################

	//###################################################################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################__..::Akt 1::..__######################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################____.:Boss:._____######################
	//############################~~~~~~~~~~~~~~~~~######################
	//###################################################################

//#####################################################################################################################################

//	NTConfig_Script.push("Akt1-Andariel.ntj");

//#####################################################################################################################################	

	//###################################################################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################__..::Akt 2::..__######################
	//############################~~~~~~~~~~~~~~~~~######################
	//###################################################################

//#####################################################################################################################################

//	NTConfig_Script.push("BloodWitch.ntj");

//#####################################################################################################################################

//	NTConfig_Script.push("Akt2-Creeping.ntj");

//#####################################################################################################################################

//	NTConfig_Script.push("Akt2-Radament.ntj");

//#####################################################################################################################################

//	NTConfig_Script.push("Akt2-AlteTunnels.ntj"); NTConfig_ClearTunnels = 3; NTConfig_DarkElder = false; NTConfig_Fangskin = false; //0 = nur truhe// 1 = weg zur truhe// 2 = alles im tunnel // 3 = Alle Helden töten und truhe öffnen

//#####################################################################################################################################

//	NTConfig_Script.push("Akt2-Kaltwurm.ntj"); NTConfig_Beetleburst = true;

//#####################################################################################################################################

//	NTConfig_Script.push("Akt2-Zauberer.ntj"); NTConfig_KillFireEye = true; NTConfig_OpenAllChests = true; NTConfig_ZauberClean = 1; // 1 = Alle monster killen // 2 = nur bosse killen // 0 = nur summoner machen ( truhen sind seperat)

//#####################################################################################################################################

	//###################################################################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################__..::Akt 2::..__######################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################____.:Boss:._____######################
	//############################~~~~~~~~~~~~~~~~~######################
	//###################################################################

//#####################################################################################################################################

//	NTConfig_Script.push("Akt2-Duriel.ntj");

//#####################################################################################################################################

	//###################################################################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################__..::Akt 3::..__######################
	//############################~~~~~~~~~~~~~~~~~######################
	//###################################################################

//#####################################################################################################################################

//	NTConfig_Script.push("Akt3-Superchests.ntj"); NTConfig_Stormtree = true;

//#####################################################################################################################################

//	NTConfig_Script.push("Akt3-Sszark.ntj");

//#####################################################################################################################################

//	NTConfig_Script.push("Akt3-Sarina.ntj");

//#####################################################################################################################################

//	NTConfig_Script.push("Akt3-Flayer_Dungeon.ntj");

//#####################################################################################################################################

//	NTConfig_Script.push("Akt3-KurastTempel.ntj"); NTConfig_BossTempel = 0; // 1 = nur bosse killen // 0 = alles in den tempeln killen

//#####################################################################################################################################

//	NTConfig_Script.push("Akt3-Kanalisation.ntj"); NTConfig_ClearA3SewersLevel1 = 4; 	// 0 : Nichts in Lvl 1 töten // 1 : Alles was auf dem Weg zu Lvl 2 liegt töten // 2 : Alles töten // 3 : Nur superuniqe töten und truhe öffnen // 4 : Alle Helden in level 1 töten und truhe öffnen

//#####################################################################################################################################

//	NTConfig_Script.push("Akt3-Travincal.ntj");

//#####################################################################################################################################

	//###################################################################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################__..::Akt 3::..__######################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################____.:Boss:._____######################
	//############################~~~~~~~~~~~~~~~~~######################
	//###################################################################

//#####################################################################################################################################

//	NTConfig_Script.push("Akt3-Mephisto.ntj"); NTConfig_KillCouncilMembers = true; // rat bei mephi killen

//#####################################################################################################################################

	//###################################################################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################__..::Akt 4::..__######################
	//############################~~~~~~~~~~~~~~~~~######################
	//###################################################################

//#####################################################################################################################################

//	NTConfig_Script.push("Akt4-Hephasto.ntj");

//#####################################################################################################################################

//	NTConfig_Script.push("Akt4-Izual.ntj");

//#####################################################################################################################################

//	NTConfig_Script.push("Akt4-Flammenfluss.ntj"); NTConfig_Flamme = 2; // 1 = Alles machen // 2 = Nur bosse

//#####################################################################################################################################

	//###################################################################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################__..::Akt 4::..__######################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################____.:Boss:._____######################
	//############################~~~~~~~~~~~~~~~~~######################
	//###################################################################

//#####################################################################################################################################

//	NTConfig_Script.push("Akt4-Diablo.ntj"); NTConfig_ClearEverythingFromEntrance = false; NTConfig_ClearEverythingFromStar = true; NTConfig_ClearSpecialsFromEntrance = false; NTConfig_ClearSpecialsFromStar = false;
//	NTConfig_Script.push("NTFastDiablo.ntj");
//#####################################################################################################################################

	//###################################################################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################__..::Akt 5::..__######################
	//############################~~~~~~~~~~~~~~~~~######################
	//###################################################################

//###################################################################################################################################

//	NTConfig_Script.push("Akt5-Pindleskin.ntj"); NTConfig_NihlathakExtension = false; 	//nach Pindleskin runter zu Nihlathak
//	NTConfig_Skipvipers = false; // soll nihl ausgelassen werden wenn vipern unten sind

//###################################################################################################################################

//	NTConfig_Script.push("Akt5-Nihlathak.ntj"); NTConfig_PindleskinExtension = false; NTConfig_Nihlsen = 0;	// NTConfig_PindleskinExtension = nach Nihlathak hoch zu Pindleskin true/false // 0 = schnell runter nihl killen // 1 = auf wp ebene alle monster killen // 2 = auf wp ebene nur bosse killen
//	NTConfig_Skipvipers = true; // soll nihl ausgelassen werden wenn vipern unten sind

//###################################################################################################################################

//	NTConfig_Script.push("Akt5-Eldritch.ntj"); NTConfig_ShenkExtension = true; NTConfig_DacFarren = true; NTConfig_EvramsEyeback = true; NTConfig_SharptoothSlayer = true;

//####################################################################################################################################

//	NTConfig_Script.push("Akt5-Flockenhöhle.ntj"); NTConfig_höhle = 2; // 1 = alle monster killen // 2 = nur helden killen

//####################################################################################################################################

//	NTConfig_Script.push("Akt5-ThreshSocket.ntj");

//####################################################################################################################################

//	NTConfig_Script.push("Akt5-Frostfluss.ntj"); NTConfig_ClearFrozenRiver = false;

//####################################################################################################################################

//	NTConfig_Script.push("Akt5-Gletscherweg.ntj"); NTConfig_ClearGlacialTrail = false;

//####################################################################################################################################

//	NTConfig_Script.push("Akt5-Eiskeller.ntj"); NTConfig_ClearIcyCellar = 1; // 1 = komplett clearen und truhe // 2 = nur bosse und truhe

//#####################################################################################################################################

	//####################################################################################
	//############################ ~~~~~~~~~~~~~~~~~~~~~~~~ ##############################
	//############################ __..::Baal Lechbot::..__ ##############################
	//############################ ~~~~~~~~~~~~~~~~~~~~~~~~ ##############################
	//####################################################################################


	NTConfig_Leech = true; // für leecher only! teleport und enibug wird ausgestellt dadurch!!!!!!!!

//	NTConfig_Script.push("Shrine_Eniless.ntj"); // NTConfig_Leader = "" dort bei co bitte euren leader namen eingeben und einschalten //script einschalten für leecher die in akt 1 auf´s tp warten von NTConfig_Script.push("shrine sercher.ntj")

//	NTConfig_Leader = "" // Name vom Leader-Char, Groß- und Kleinschreibung beachten!

//	NTConfig_Script.push("shrine sercher.ntj"); // wenn aktiv sucht dieser char akt 1 nach einem ep schrein ab und macht dann ein tp! ACHTUNG CatchExperienceShrine muss dann auf false gestellt werden

//	NTConfig_JoinOnly = false; //euer leech char wird nur noch der party joinen aber nicht mehr selbst eine aufmachen // fix für das problem zu vieler partys von medix @epvp
//	NTConfig_Script.push("Others-BaalLeech.ntj"); NTConfig_EniLeecher = false; //für teleportfähige chars auf true stellen damit der leecher only auch in baals kammer geht erstellt von muddy @ epvp

	//###########################################################################
	//####################### Schrein catcher ###################################
	//###########################################################################

	//NTConfig_Script.push("Shrine_Search.ntj"); // such fast den kompletten ersten akt nach einem ep schrein ab! nur cold plain wp benötigt! besonders geeignet auch für eni leecher!


	//###################################################################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################__..::Akt 5::..__######################
	//############################~~~~~~~~~~~~~~~~~######################
	//############################____.:Boss:._____######################
	//############################~~~~~~~~~~~~~~~~~######################
	//###################################################################

//#####################################################################################################################################

//	NTConfig_Script.push("Akt5-Baal.ntj"); NTConfig_KillBaal = true; NTConfig_Baalsen = 1; // 1 = schnell runter in den thron // 2 = Jedes monster auf jeder ebene // 3 = nur boss auf jeder ebene (und danach normal baalrun)

	NTConfig_UnsafeTP = false;		// Soll ein unsafe tp geöffnet werden beim baalrun?
	NTConfig_UNSAFETPSpoke = "TP UNSAFE!";	// welche nachricht soll geschrieben werden wenn das unsafe tp geöffnet wird! nichts zwischen "" eintragen fals nichts gesagt werden soll
	NTConfig_SafeTP = "TP Safe!";		// welche nachricht soll gesagt werden wenn das safe tp gemacht wird! nichts zwischen "" eintragen fals nichts gesagt werden soll
	NTConfig_KILL = "Kill Baal";		// welche anchricht soll ankündigen das baal gemacht werden soll! nichts zwischen "" eintragen fals nichts gesagt werden soll
	NTConfig_NxtGame = "Next Game";		// welche nachricht soll am ende des runs geschrieben werden! nextgame ansage! nichts zwischen "" eintragen fals nichts gesagt werden soll

//#####################################################################################################################################

	//###################################################################
	//##############~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#############
	//##############__..::Champions, Uniqes and Bosses::..__#############
	//##############~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#############
	//###################################################################

//#####################################################################################################################################

//	NTConfig_Script.push("Others-BossUniqueAkt1.ntj"); NTConfig_BloodRavenMausoleum = true; NTConfig_TristramClear = true; NTConfig_CountessTower = true; NTConfig_PitRunner = true;

//#####################################################################################################################################

//	NTConfig_Script.push("Others-BossUniqueAkt2.ntj"); NTConfig_HallsOfCube = true; NTConfig_Maggotty = true; NTConfig_AncientsTunnels = true; NTConfig_Viper2 = true; NTConfig_TombRaider = true;

//#####################################################################################################################################

	//####################################################################################
	//############# allgemeine einstellungen welche schreine er unterwegs nutzen soll ####
	//############# ebenfals beeinflust es welchen er zum leechen nutzt ##################
	//####################################################################################

	MyConfig_CatchExperienceShrine = false; // hits exp shrines 
	MyConfig_CatchGemShrine        = false; // hits gem shrines.
 	MyConfig_CatchSkillShrine = false; // hits skill shrines.
 	MyConfig_CatchArmorShrine = false; // hits armor shrines.
 	MyConfig_CatchResistShrine = false; // hits resist shrines. 


	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//__..::Co-Diablo & Co-Baal::..__
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//	NTConfig_Leader = "" // Name vom Leader-Char, Groß- und Kleinschreibung beachten!
//	NTConfig_Script.push("Others-DiabloLeechFight.ntj");
//	NTConfig_Script.push("Others-BaalLeechFight.ntj"); NTConfig_KillBaal = true;

//	NTConfig_Script.push("NTFollow.ntj");

	NTConfig_Script.push("NTTristramRuns.ntj"); NTConfig_TPOutside = true; NTConfig_FastPickit = false;
//	NTConfig_Script.push("NTTristramLeechFighter.ntj"); NTConfig_FastPickit = false; 


	//~~~~~~~~~~~~~~~~~~~
	//__..::Rushbot::..__
	//~~~~~~~~~~~~~~~~~~~~~~

//	NTConfig_Script.push("Others-Akt1Rush.ntj");
//	NTConfig_Script.push("Others-Akt2Rush.ntj"); NTConfig_Cube = true; NTConfig_Staff = true; NTConfig_Amu = true; NTConfig_Summoner = true;
//	NTConfig_Script.push("Others-Akt3Rush.ntj");
//	NTConfig_Script.push("Others-Akt4Rush.ntj"); NTConfig_ClearCS = false;
//	NTConfig_Script.push("Others-Akt5Rush.ntj"); NTConfig_Anya = false;  NTConfig_Ancients = true;   



	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//__..::X- & Y-Koordinaten::..__
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//	NTConfig_Script.push("Others-Koordinaten.ntj");


	//------------------------------------------------------------------------------
	//------------------------------------------------------------------------------
	me.maxgametime = 1200; 		// Maximale Spielzeit in Sekunden (0 = Unendlich)
	NTConfig_StartDelay = 0;	// Verzögerung beim Start in Millisekunden
	NTConfig_AreaDelay = 500;	// Verzögerung bei Gebietswechsel in Millisekunden
	NTConfig_SnagDelay = 200;	// Verzögerung beim Aufheben von Gegenständen in Millisekunden

	NTConfig_LogSoldItems = [4,5,6,7]; 	// Verkaufte items im log anzeigen 4= magic, 5 = set, 6 = rare, 7 = unique, 8 = craft, 0 = nicht anzeigen
	NTConfig_LogPickItems = [4,5,6,7];	// Aufgesammelte items im log anzeigen 4= magic, 5 = set, 6 = rare, 7 = unique, 8 = craft, 0 = nicht anzeigen


	//------------------------------------------------------------------------------
	//------------------------------------------------------------------------------
	NTConfig_SkipHealLife = 90;	// Habt ihr mehr als XX Prozent Leben, besucht der Bot keinen Arzt
	NTConfig_SkipHealMana = 70;	// Habt ihr mehr als XX Prozent Mana, besucht der Bot keinen Arzt
	NTConfig_UseMerc = true;	// Auf true stellen, um den Merc zu benutzen. Belebt ihn auch automatisch wieder.
	NTConfig_ResetWeapon = false;	// Die Waffe vom Merc resetten, wenn er gestorben ist (nicht mehr nötig seit Patch 1.13)


	NTConfig_TeleChicken = 0;	// wenn der bot nur noch den eingestellten wert in % telt er sich ein paar meter weg und wartet krz! danach telt er zurück zum weiter kämpfen!
	NTConfig_TownChicken = 0;	// wenn der bot nur noch den eingestellten wert in % hat geht er in die stadt und heilt sich! nötigenfals kauft er auch gleich tränke usw

	NTConfig_LifeThresh = 80;	// Bei weniger als XX Prozent Leben wird ein Heiltrank getrunken.
	NTConfig_LifeRejuvThresh = 51;	// Bei weniger als XX Prozent Leben wird ein Regenerationstrank getrunken.
	NTConfig_ManaThresh = 30;	// Bei weniger als XX Prozent Mana wird ein Manatrank getrunken.
	NTConfig_ManaRejuvThresh = 0;	// Bei weniger als XX Prozent Mana wird ein Regenerationstrank getrunken.
	NTConfig_LifeChicken = 50;	// Bei weniger als XX Prozent Leben verlässt der Bot das Spiel um nicht zu sterben.
	NTConfig_ManaChicken = 0;	// Bei weniger als XX Prozent Mana verlässt der Bot das Spiel.

	NTConfig_MercLifeThresh = 80;	// Hat der Merc weniger als XX Prozent Leben, bekommt er einen Heiltrank.
	NTConfig_MercRejuvThresh = 30;	// Hat der Merc weniger als XX Prozent Leben, bekommt er einen Regenerationstrank.
	NTConfig_MercChicken = 0;	// Hat der Merc weniger als XX Prozent Leben, verlässt der Bot das Spiel.

	//------------------------------------------------------------------------------
	//------------------------------------------------------------------------------
	NTConfig_FreeSpace = 7;		// Sind weniger als X Spalten frei, werden die Items gestasht.

	// Diese Zahlen Spiegeln euer Inventar wieder. 0 = Von euch belegter Platz, den der Bot nicht anrührt. 1 = Hiermit darf der Bot arbeiten.
	NTConfig_Columns[0] = [1,1,1,1,1,1,1,1,1,0];
	NTConfig_Columns[1] = [1,1,1,1,1,1,1,1,1,0];
	NTConfig_Columns[2] = [1,1,1,1,1,1,1,1,1,0];
	NTConfig_Columns[3] = [1,1,1,1,1,1,1,1,1,0];

	NTConfig_MinGoldToStash = 250000;	// Maximales Gold, was der Bot mit sich rumträgt, bevor er es in die Truhe zahlt.

	
	//----------------------------------------------------------------------------------------------
	// Hier stellt ihr ein, welche Tränke in den Gürtel sollen.
	// hp = Heiltrank
	// mp = Manatrank
	// rv = Regenerationstrank
	// Gleiche Arten von Tränken müssen immer direkt nebeneinander liegen. Sollen HP-, MP-, und Reg-
	// Tränke zusammen in den Gürtel, so MÜSSEN die Reg-Tränke immer an das Ende.
	// Natürlich könnt ihr auch überall RV eintragen.
	//----------------------------------------------------------------------------------------------
	NTConfig_BeltColType[0] = "hp";
	NTConfig_BeltColType[1] = "mp";
	NTConfig_BeltColType[2] = "rv";
	NTConfig_BeltColType[3] = "rv";


	//-----------------------------------------------------------------------------------
	// SnagIt - Einstellungen
	//-----------------------------------------------------------------------------------

	NTConfig_NIPFilePath.push("private/normal.nip");
	NTConfig_NIPFilePath.push("private/magic_rare.nip");
	NTConfig_NIPFilePath.push("private/set.nip");
	NTConfig_NIPFilePath.push("private/unique.nip");
	NTConfig_NIPFilePath.push("private/craft.nip");
	NTConfig_NIPFilePath.push("shoping/shoping.nip");

	NTConfig_SnagRange = 80;	// Radius in dem nach gedroppten Items gescannt wird. Ein Wert von 40-50 ist hier in Ordnung.


	//------------------------------------------------------------------------------
	// Cubing - Einstellungen
	//------------------------------------------------------------------------------
	NTConfig_Cubing = false;		// Cuben aktivieren (nicht zu viel aktivieren, da sonst eure Truhe zu schnell überfüllt ist.)

	//NTConfig_CubingItem.push([NTCU_GEM, 560]);	// Makelloser Amethyst
	//NTConfig_CubingItem.push([NTCU_GEM, 565]);	// Makelloser Topas
	//NTConfig_CubingItem.push([NTCU_GEM, 570]);	// Makelloser Saphir
	//NTConfig_CubingItem.push([NTCU_GEM, 575]);	// Makelloser Smaragd
	//NTConfig_CubingItem.push([NTCU_GEM, 580]);	// Makelloser Rubin
	//NTConfig_CubingItem.push([NTCU_GEM, 585]);	// Makelloser Diamant
	//NTConfig_CubingItem.push([NTCU_GEM, 600]);	// Makelloser Schädel

	//NTConfig_CubingItem.push([NTCU_MAGIC, 420]);	// Magisches Tiara
	//NTConfig_CubingItem.push([NTCU_MAGIC, 421]);	// Magisches Diadem

	//NTConfig_CubingItem.push([NTCU_MAGIC_CHARM, 603]);	// Magischer Kleiner Zauber
	//NTConfig_CubingItem.push([NTCU_MAGIC_CHARM, 605]);	// Magischer Riesen-Zauber
	NTConfig_CubingItem.push([NTCU_MAGIC_MONARCH, 447]);	// Magic Monarch
	//NTConfig_CubingItem.push([NTCU_MAGIC, 285]);  // maiden javelin - ilvl 71
	//NTConfig_CubingItem.push([NTCU_MAGIC, 295]);  // ceremonial javelin - ilvl 77
	//NTConfig_CubingItem.push([NTCU_MAGIC, 305]);  // matriarchal javelin - ilvl 80

	NTConfig_ilvl80 = false;		// wenn auf true werden nur items gecraftet ab einem ilvl von 80+ //beides auf false ilvl spielt keine rolle
	NTConfig_ilvl90 = false;		// wenn auf true gestellt werden nur items ab einem ilvl von 90+ gecraftet //beides auf false ilvl spielt keine rolle

	//NTConfig_CubingItem.push([NTCU_CRAFT_HITPOWER_GLOVES, 382]);	// Craft Schwere Armschienen
	//NTConfig_CubingItem.push([NTCU_CRAFT_HITPOWER_GLOVES, 452]);	// Craft Vampirschienen

	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_HELM, 354]);	// Craft Spitzhelm
	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_HELM, 424]);	// Craft Armet
	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BOOTS, 388]);	// Craft Kampfstiefel
	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BOOTS, 458]);	// Craft Verspiegelte Stiefel
	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_GLOVES, 381]);	// Craft Haileder-Handschuhe
	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_GLOVES, 451]);	// Craft Vampirknochen-Handschuhe
	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BELT, 392]);	// Craft Kettengürtel
	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BELT, 462]);	// Craft Mithril-Rolle
	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_AMULET, 520]);	// Craft Amulett
	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_RING, 522]);		// Craft Ring

	NTConfig_CubingItem.push([NTCU_CRAFT_CASTER_AMULET, 520]);	// Craft Amulett
	NTConfig_CubingItem.push([NTCU_CRAFT_CASTER_RING, 522]);	// Caster Ring
	//NTConfig_CubingItem.push([NTCU_CRAFT_CASTER_BOOTS, 455]);	// Wyrmhide Boots
	//NTConfig_CubingItem.push([NTCU_CRAFT_CASTER_BOOTS, 385]);	// Demonhide Boots
	//NTConfig_CubingItem.push([NTCU_CRAFT_CASTER_BELT, 461]);		//CASTER Vampirefang Belt
	//NTConfig_CubingItem.push([NTCU_CRAFT_CASTER_BELT, 391]);		//CASTER Sharkskin Belt

	//NTConfig_CubingItem.push([NTCU_CRAFT_SAFETY_SHIELD, 447]);	// Craft Monarch
	//NTConfig_CubingItem.push([NTCU_CRAFT_SAFETY_AMULET, 520]);	// Craft Amulett

	NTConfig_CubingItem.push([NTCU_ESSENSE, 0]);

	//NTConfig_CubingItem.push([NTCU_RUNE_EL]);
	//NTConfig_CubingItem.push([NTCU_RUNE_ELD]);
	//NTConfig_CubingItem.push([NTCU_RUNE_TIR]);
	//NTConfig_CubingItem.push([NTCU_RUNE_NEF]);
	//NTConfig_CubingItem.push([NTCU_RUNE_ETH]);
	//NTConfig_CubingItem.push([NTCU_RUNE_ITH]);
	//NTConfig_CubingItem.push([NTCU_RUNE_TAL]);
	//NTConfig_CubingItem.push([NTCU_RUNE_RAL]);
	//NTConfig_CubingItem.push([NTCU_RUNE_ORT]);
	//NTConfig_CubingItem.push([NTCU_RUNE_THUL, 562]);
	//NTConfig_CubingItem.push([NTCU_RUNE_AMN, 557]);
	//NTConfig_CubingItem.push([NTCU_RUNE_SOL, 567]);
	//NTConfig_CubingItem.push([NTCU_RUNE_SHAEL, 577]);
	//NTConfig_CubingItem.push([NTCU_RUNE_DOL, 572]);
	//NTConfig_CubingItem.push([NTCU_RUNE_HEL, 582]);
	//NTConfig_CubingItem.push([NTCU_RUNE_IO, 563]);
	//NTConfig_CubingItem.push([NTCU_RUNE_LUM, 558]);
	//NTConfig_CubingItem.push([NTCU_RUNE_KO, 568]);
	NTConfig_CubingItem.push([NTCU_RUNE_FAL, 578]);
	NTConfig_CubingItem.push([NTCU_RUNE_LEM, 573]);
	NTConfig_CubingItem.push([NTCU_RUNE_PUL, 583]);
	NTConfig_CubingItem.push([NTCU_RUNE_UM, 564]);
	NTConfig_CubingItem.push([NTCU_RUNE_MAL, 559]);
	//NTConfig_CubingItem.push([NTCU_RUNE_IST, 569]);
	NTConfig_CubingItem.push([NTCU_RUNE_GUL, 579]);
	//NTConfig_CubingItem.push([NTCU_RUNE_VEX, 574]);
	//NTConfig_CubingItem.push([NTCU_RUNE_OHM, 584]);
	//NTConfig_CubingItem.push([NTCU_RUNE_LO, 565]);
	//NTConfig_CubingItem.push([NTCU_RUNE_SUR, 560]);
	//NTConfig_CubingItem.push([NTCU_RUNE_BER, 570]);
	//NTConfig_CubingItem.push([NTCU_RUNE_JAH, 580]);
	//NTConfig_CubingItem.push([NTCU_RUNE_CHAM, 575]);

	//***** Wollt ihr die folgenden Gegenstände cuben, müssen die Hauptgegenstände in der Pickit aktiviert sein *****

	//NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 436]);	//Socket Great Hauberk
	//NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 435]);	//Socket Boneweave
	//NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 443]);	//Socket Archon Plate
	//NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 438]);	//Socket Hellforge Plate
	//NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 439]);	//Socket Kraken Shell
	//NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 442]);	//Socket Sacred Armor
	//NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 443]);	// Archon-Plattenrüstung sockeln

	//NTConfig_CubingItem.push([NTCU_SOCKET_SHIELD, 447]);		//Socket Monarch

	//NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 255]);	// Drescher sockeln
	//NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 256]);	// Rätselhafte Axt sockeln
	//NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 257]);	// Große Stangenaxt sockeln
	//NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 258]);	// Riesendrescher sockeln

	//NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_WEAPON, 295]);	// Titan's Rache : Exceptional -> Elite

	//NTConfig_CubingItem.push([NTCU_UPGRADE_N_UNIQUE_ARMOR, 337]);	// Magierfaust : Normal -> Exceptional
	//NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 360]);	// Haut des Vipernmagier : Exceptional -> Elite
	//NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 383]);	// Magierfaust oder Lava Stoss : Exceptional -> Elite
	//NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 389]);	// Blutreiter : Exceptional -> Elite
	//NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 477]);	// Arreats Antlitz : Exceptional -> Elite
	//NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 481]);	// Herold von Zakarum : Exceptional -> Elite

	//------------------------------------------------------------------------------
	// Glücksspiel - Einstellungen
	//------------------------------------------------------------------------------
	NTConfig_Gamble = true;			// true = Glücksspiel aktivieren
	NTConfig_GambleStartGold = 1500000;	// Bei der Goldanzahl beginnt der Bot zu gambeln.
	NTConfig_GambleStopGold = 180000;	// Bei der Goldanzahl hört der Bot auf zu gambeln.

	NTConfig_GambleItem.push(520);		// Amulette
	NTConfig_GambleItem.push(522);		// Ringe
	NTConfig_GambleItem.push(418);		// Reife
	NTConfig_GambleItem.push(419);		// Krönchen

	//NTConfig_GambleItem.push(334);	// Lederhandschuhe
	//NTConfig_GambleItem.push(335);	// Schwere Handschuhe
	//NTConfig_GambleItem.push(336);	// Kettenhandschuhe
	//NTConfig_GambleItem.push(337);	// Leichte Panzerhandschuhe
	//NTConfig_GambleItem.push(338);	// Panzerhandschuhe

        //NTConfig_GambleItem.push(331);	// Schild (jmod?)
        //NTConfig_GambleItem.push(377);	// Schild (jmod?)

	//NTConfig_GambleItem.push(175);	// Klauen
	//NTConfig_GambleItem.push(176);	// Klauen
	//NTConfig_GambleItem.push(178);	// Klauen
	//NTConfig_GambleItem.push(179);	// Klauen
	//NTConfig_GambleItem.push(180);	// Klauen
	//NTConfig_GambleItem.push(181);	// Klauen
	//NTConfig_GambleItem.push(182);	// Klauen
	//NTConfig_GambleItem.push(183);	// Klauen
	//NTConfig_GambleItem.push(184);	// Klauen
	//NTConfig_GambleItem.push(185);	// Klauen
	//NTConfig_GambleItem.push(186);	// Klauen
	//NTConfig_GambleItem.push(187);	// Klauen
	//NTConfig_GambleItem.push(188);	// Klauen
	//NTConfig_GambleItem.push(189);	// Klauen
	//NTConfig_GambleItem.push(190);	// Klauen
	//NTConfig_GambleItem.push(191);	// Klauen
	//NTConfig_GambleItem.push(192);	// Klauen
	//NTConfig_GambleItem.push(193);	// Klauen
	//NTConfig_GambleItem.push(194);	// Klauen
	//NTConfig_GambleItem.push(195);	// Klauen

	//####################################################################################
	//############################ allgemeine einstellungen ##############################
	//####################################################################################

	NTConfig_UseCainToID = true;		// auf true stellen damit er zu cain geht fürs identen
	NTConfig_FastPick = false;		// true = schnelleres item einsammeln // ihr müsst hier in der charconfig noch NTConfig_SnagDelay anpassen // achtung kann das spiel instabil machen
	NTConfig_PublicMode = true;		// true = public mode
	NTConfig_CheckCloneDiablo = true;	// true = Der Bot bleibt im Spiel wenn der Diablo-Clon auf Erden wandelt
	NTConfig_OpenChest = true;		// true = Superchests werden geöffnet
	NTConfig_OpenAllNearbyChests = true;	// sollen ALLE nicht spezial chest ebenfals geöffnet werden = true
	me.quitonhostile = false;		// true = Der Bot verlässt das Spiel falls er gehostilet wird
	NTConfig_CheckSojSales = true; NTConfig_CheckSojSalesItem = true; // Wenn auf true gestellt, stopt der bot sein derzeitiges script und wartet 5 minuten auf eine weitere "x Stones of Jordan sold to Merchants" nachricht. in dieser zeit wird die maxgametime auf 0 gestellt. sollte keine nachricht mehr kommen setzt der bot seinen run fort, solange deine me.maxgametime noch nicht erreicht ist.	// CheckSojSalesItem auf true wird die verkauf anzeige zusätzlich im itemlog angezeigt
	NTConfig_WorldEventAccount = "";	// schreibt dem acc alle 10 min eine nachricht bei soj verkäufen oder worldevent ("" leer lassen fals nicht benötigt)
	NTConfig_WorldEventWaitTime = 0;	// Wie lange soll der char bei einem worldevent warten in sekunden (0 = Unendlich)
	NTConfig_Eintritt = true; 		// soll eine nachricht geschrieben werden wenn ein spieler das spiel betritt
	NTConfig_Willkommen = "Please wait until I invite you to party! Otherwise it can happen that we are splitted up!"; 		// welche nachricht geschrieben werden soll fals NTConfig_Eintritt auf true steht

	//------------------------------------------------------------------------------
	// Angriffs - Einstellungen (Skill-ID's stehen im libs-Ordner in der Skills.txt)
	//------------------------------------------------------------------------------
	NTConfig_AttackSkill[0] = 0;	// Dieser Skill wird nur einmal zu Beginn gecastet. 0 = Keiner
	NTConfig_AttackSkill[1] = 0;	// Welcher Angriff soll gegen Bosse verwendet werden. 0 = Keiner
	NTConfig_AttackSkill[2] = 0;	// Welche Aura soll beim Angriff auf Bosse verwendet werden. 0 = Keiner
	NTConfig_AttackSkill[3] = 0;	// Welcher Angriff soll gegen die übrigen Monster verwendet werden. 0 = Keiner
	NTConfig_AttackSkill[4] = 0;	// Welche Aura soll beim Angriff gegen die übrigen Monster verwendet werden. 0 = Keiner
	NTConfig_AttackSkill[5] = 0;	// Zweit-Skill für den Fall, das ein Monster immun ist.
	NTConfig_AttackSkill[6] = 0;	// Zweit-Aura (unwichtig, auf 0 lassen)
	NTConfig_ClearPosition = false;	// true = Bot tötet auch Monster in der Umgebung eines Bosses
	
//	NTConfig_UseRedemptionHP = 80;	// Unter XX Prozent Leben wird Rücknahme benutzt.
//	NTConfig_UseRedemptionMP = 60;	// Unter XX Prozent Mana wird Rücknahme benutzt.
	
	//--------------------------------------------------------------------------------------------------------------
	// Hier stehen die Dinge, die der Bot prüft, während er kämpft. Trifft es zu, geht er in die Stadt zu einem Arzt
	// oder jemandem, der den Merc wiederbelebt. Gewünschtes durch ein "|" trennen (z.B. "0x02|0x08|0x20") am ende immer ein ; lassen

	// Bei sich selbst:
	//-----------------
	// 0x01 : Tränke
	// 0x02 : Gift
	// 0x04 : Verstärkter Schaden (Fluch)
	// 0x08 : Schwächen (Fluch)
	// 0x10 : Eiserne Jungfrau (Fluch)
	// 0x20 : Altern (Fluch)
	// 0x40 : Wiederstandsschwund (Fluch)
	NTConfig_CheckSelfSafe = 0;
	

	// Bei dem Merc
	//-------------
	// 0x01 : Tod
	// 0x02 : Gift
	// 0x04 : Verstärkter Schaden (Fluch)
	// 0x08 : Schwächen (Fluch)
	// 0x10 : Eiserne Jungfrau (Fluch)
	// 0x20 : Altern (Fluch)
	// 0x40 : Wiederstandsschwund (Fluch)
	NTConfig_CheckMercSafe = 0;

	//--------------------------------------------------------------------------------------------------------------
}
09/28/2010 00:59 sissam#87
ich finde die
Code:
//    NTConfig_UseRedemptionHP = 80;    // Unter XX Prozent Leben wird Rücknahme benutzt.
//    NTConfig_UseRedemptionMP = 60;    // Unter XX Prozent Mana wird Rücknahme benutzt.
in meiner config nicht

hier meine config
Code:
/**
*	This file was modified by [Only registered and activated users can see links. Click Here To Register...]			
*	Check the programming section for updates and further scripts
*	Last Update: 09/05/2010							
*
*	Hotkey Reference NTBot:
*
*	Pause/Break			- Pause the current script
*	Page up (PgUp)		- Skip to the next script
*	Page down (PgDn)	- Repeat the previous script
*	Home (Pos1)			- Show your current coordinates and area id
*	End					- Delete current XML Logfile
*	Insert (Ins)		- Log all items on your char to XML or TXT
*	Delete (Del)		- Exit Game
*
*	Backspace			- Shows the item level and some .nip specific information for items that match your current.nip files; The item(s) have to be located in your horadric cube when you press backspace!
*	NipCheckID Reference:	-1		- The item migh might be useful, but has to be identified first
*							 0		- The item does NOT match any .nip line and is therefore trashed
*							 1		- The item matches at least one .nip line and is stashed - Additional console output: corresponding .nip line, corresponding .nip line in JavaScript code, the name of the .nip file that contains the line and the line number
*							(true)	- The item is kept for cubing
*							(false)	- The item is NOT kept for cubing
*/

var NTConfig_CastStatic;

function NT_LoadConfig()
{

	//------------------------------------------------------------------------------
	// Various Configuration
	//------------------------------------------------------------------------------
	NTConfig_SkipHealLife = 90;		// If you have more than this percent of life, you won't go to a healer
	NTConfig_SkipHealMana = 70;		// If you have more than this percent of mana, you won't go to a healer
	NTConfig_UseMerc = true;		// Set to true if you use a mercenary, will revive merc at a reviver npc.
	NTConfig_ResetWeapon = false;	// Set to true to reset weapon when reviving merc
	MWConfig_ResetArmor = false;	// Reset Enigma if Teleport Skill is missing (Note: Activating this function may - though not likely will - lead to the loss of your enigma; Use at your own risk and make sure to include runewords in your .nip Files!)

	//------------------------------------------------------------------------------
	// Chicken Configuration
	//------------------------------------------------------------------------------
	NTConfig_LifeThresh = 80;		// Drink a normal potion if under this percent of life.
	NTConfig_LifeRejuvThresh = 55;	// Drink a rejuvenation potion if under this percent of life.
	NTConfig_ManaThresh = 30;		// Drink a normal potion if under this percent of mana.
	NTConfig_ManaRejuvThresh = 0;	// Drink a rejuvenation potion if under this percent of mana.
	NTConfig_LifeChicken = 40;		// This is your chicken life percent. If you go below this life total, exit game.
	NTConfig_ManaChicken = 0;		// This is your chicken mana percent. If you go below this mana total, exit game.

	NTConfig_MercLifeThresh = 60;	// This is the threshold to use a life potion on your merc in percent.
	NTConfig_MercRejuvThresh = 30;	// This is the threshold to use a rejuv potion on your merc in percent.
	NTConfig_MercChicken = 0;		// This is your mercs chicken life percent. If he goes below this, exit game.

	MWConfig_UseChickenLog = false;	// Creates a logfile in case of chicken including useful information such as nearby monsters, negative/positive effects, potions etc.
									// Note: This function may delay chickens and is likely to cause chicken counter errors, use at your own risk
		
	//------------------------------------------------------------------------------
	// Inventory Configuration
	//------------------------------------------------------------------------------
	NTConfig_FreeSpace = 2;		// Number of free columns. If less full columns are free stashing is set.

	// The numbers correspond to your inventory. Set 0 to keep whatever is there, 1 to stash it.
	NTConfig_Columns[0] = [1,1,1,1,1,1,1,1,1,0];
	NTConfig_Columns[1] = [1,1,1,1,1,1,1,1,1,0];
	NTConfig_Columns[2] = [1,1,1,1,1,1,1,1,1,0];
	NTConfig_Columns[3] = [1,1,1,1,1,1,1,1,1,0];

	NTConfig_MinGoldToStash = 200000;	// Maximum gold amount carried before going to stash

	//----------------------------------------------------------------------------------------------
	// Type of potion used in each belt column
	// Available types : "hp" = health | "mp" = mana | "rv" = rejuv. Can use other potion types too.
	// Keep equal types at adjacent columns. First HP then MP and then HP again is a bad choice.
	// Keep HP and MP at the beginning of the belt (in case you want to use rejuv and other types).
	// Rejuvenations MUST, I REPEAT MUST be at the end of the belt (last x columns).
	// To use rejuvenations only, put "rv" in all columns.
	//----------------------------------------------------------------------------------------------
	NTConfig_BeltColType[0] = "hp";
	NTConfig_BeltColType[1] = "hp";
	NTConfig_BeltColType[2] = "mp";
	NTConfig_BeltColType[3] = "mp";
	
	MWConfig_BuyPotionsOnLackOfMana = true;	// Visit Town if your char lacks mana while trying to loot a corpse or to teleport
	//-----------------------------------------------------------------------------------
	// NipFile Configuration
	//-----------------------------------------------------------------------------------

	/***********************************************************************/
	/*/////////////////////////////////////////////////////////////////////*/
	/*// Hier müssen NiP Files hin, wenn der Follower was aufheben soll! //*/
	/*/////////////////////////////////////////////////////////////////////*/
	/***********************************************************************/	

	//------------------------------------------------------------------------------
	// Pickit Configuration
	//------------------------------------------------------------------------------
	NTConfig_SnagRange = 60;					// Radius to check for dropped items. 40 is a good number here
	MWConfig_PickItemsInstantly = false;		// Pickup items instantly whenever a monster is killed
	
	//------------------------------------------------------------------------------
	// Chest Configuration
	//------------------------------------------------------------------------------
	NTConfig_OpenChest = false;					// Set to true to open chest (mostly super unique chests)
	MWConfig_OpenAllNearbyChests = false;		// Open any kind of chest or lootable object nearby
	MWConfig_PickChestLootsInstantly = false;	// Wether to pickup items each time a chest is opened; true: pickup items after every single chest; false: pickup items after opening all nearby chests first
	MWConfig_OpenChestsRange = 35;				// Default range to check for chests
	// If you don't wish to open chests in a certain area, add it's areaid to MWConfig_ChestExceptions - Check the file "areas.txt" in the sdk folder to view all areaids
	MWConfig_ChestExceptions.push(25); 			// Tower Cellar Lvl 5
	
	
	//------------------------------------------------------------------------------
	// Identification Configuration
	//------------------------------------------------------------------------------
	MWConfig_IdentAtCain = false;				// Identify items using cain (will only use cain, if you don't carry any items that are supposed to be kept unid)
	MWConfig_IdentAfterPickup = false;			// Identify items after pickup using a ID tome
	MWConfig_MinItemsToIdent = 2;				// Amount of unid items to carry before commencing ID progress
	
	//------------------------------------------------------------------------------
	// Itemlog Configuration
	//------------------------------------------------------------------------------
	MWConfig_UseXMLItemlog = true;				// Log kept and sold items additionally in a XML log file
	
	MWConfig_LogSoldItems = false;				// Adds sold items to the manager's itemlog
	MWConfig_ShowGoldPickupsPerScript = true;		// Shows how much gold was picked running the last script
	MWConfig_ShowGoldPickups = false;			// Show Pickup message whenever gold is picked
	MWConfig_ShowPotionPickups = false;			// Show Pickup message whenever a potion is picked
	MWConfig_LogStashToTxt = true;				// Use a textfile instead of a XML file for logging your char's carried items; false: log to .txt, true: log to .xml
	MWConfig_LowestRuneToLog = 19;				// Determine the lowest rune shown in both the Manager's and XML log at pickup (e.g. 0 to log every Rune >= EL or 19 to log every rune >= LEM)

	//------------------------------------------------------------------------------
	// General Configuration
	//------------------------------------------------------------------------------
	MWConfig_AutoParty = true;				// Always use AutoParty, even if not being in public mode
	NTConfig_PublicMode = false;
		
	MWConfig_ExitGameOnMissingPassword = false;	// Exit the game if it is public due to an error pasting the password at game creation (Note: This option is deactivated if NTConfig_PublicMode is activated)
	me.quitonhostile = false;					// Exit the game if another player expresses hostility towards you
	
	me.maxgametime = 0; 		// Time in seconds, maximum game length (0 is infinite)
	NTConfig_StartDelay = 151;	// Delay time in milliseconds to start;
	NTConfig_AreaDelay = 496;	// Delay time in milliseconds to change area;
	NTConfig_SnagDelay = 512;	// Delay time in milliseconds to wait before starting picking items
	
	//------------------------------------------------------------------------------
	// World Event Configuration
	//------------------------------------------------------------------------------
	MWConfig_CheckSojSales = true;			// If set to true, the bot will stop the current script and wait 5 minutes for every "x Stones of Jordan sold to Merchants" message. Your char will continue running in the same game, unless your me.maxgametime is not reached yet.
	NTConfig_CheckCloneDiablo = true;		// Set to true if you want to wait in game after notifying "Diablo Walks the Earth" message.
	MWConfig_WorldEventAccount = "";		// Wisp this account in case of a world event or a soj sale every 10 minutes (leave blank not to wisp any account)
	MWConfig_WorldEventWaitTime = 0;		// How long you want to wait in game in case of a world event in minutes (0 is infinite)
		
	//------------------------------------------------------------------------------
	// Shrine Configuration
	//------------------------------------------------------------------------------
	MWConfig_ActivateNearbyShrines = false;	// Set to true if you'd like to use shrines (Note: Shrines will only be activated if it is actually useful)
	// If you don't wish to activate shrines in a certain area, add it's areaid to MWConfig_ShrineExceptions - Check the file "areas.txt" in the sdk folder to view all areaids
	//MWConfig_ShrineExceptions.push(108); 		// Chaos Sanctuary
	
	//------------------------------------------------------------------------------
	// Attack Configuration
	//------------------------------------------------------------------------------
	NTConfig_AttackSkill[0] = 0;	// First skill. Set to 0 if you won't
	NTConfig_AttackSkill[1] = 0;	// Primary skill to boss.
	NTConfig_AttackSkill[2] = 0;	// Primary untimed skill to boss. Set to 0 if you won't
	NTConfig_AttackSkill[3] = 0;	// Primary skill to others.
	NTConfig_AttackSkill[4] = 0;	// Primary untimed skill to others. Set to 0 if you won't
	NTConfig_AttackSkill[5] = 0;	// Secondary skill in case monster is immune to primary skill. Set to 0 if you won't
	NTConfig_AttackSkill[6] = 0;	// Secondary untimed skill. Set to 0 if you won't
	NTConfig_AttackSkill[7] = 0;	// Alternative untimed skill which is used if the target is immune to your untimed skill - mostly useful for FB/FO/Meteor sorcs or other sorcs that are using the same untimed Skills
	NTConfig_ClearPosition = false;	// Set to true if you want to clear area after killing boss.

        LadderFollowFight = true;

	MWConfig_CheckImmunitySkills = [1];	// Define the condition for a monster being immune; Add skill numbers (0-6) here; Example: [1, 3] means that a monster is considered immune if it is immune to both NTConfig_AttackSkill[1] and NTConfig_AttackSkill[3]
	NTConfig_BehaviourOnImmuneMonster = 1;		// Determine what the char is supposed to do when attacking immune Monsters; 0: Don't do anything (D2NT standard), 1: Get close to the target, use static field in case the monster is not immune to lightning, 2: Skip the Monster
	MWConfig_KeepDistanceToMonsters = false;		// Always check if monsters are closing in and back off, in case they get too close (Note: Activating this option will lead to ignoring the spectype of monsters when clearing rooms or spots --> Champions and bosses won't be attacked first, but the monster which is closest, no matter if it's a boss or a normal monster)
	// If you don't wish to evade monsters in a certain area, add it's areaid to MWConfig_EvasionExceptions - Check the file "areas.txt" in the sdk folder to view all areaids
	MWConfig_EvasionExceptions.push(131);
	
	// Check self safe in field (NOT in town). Set to 0 if you won't
	// 0x01 : Potion, 0x02 : Poison, 0x04 : Amplify Damage, 0x08 : Weaken, 0x10 : Iron Maiden, 0x20 : Decrepify, 0x40 : Lower Resist
	NTConfig_CheckSelfSafe = 0x02;
	// Check merc's safe in field (NOT in town). Set to 0 if you won't
	// 0x01 : Death, 0x02 : Poison, 0x04 : Amplify Damage, 0x08 : Weaken, 0x10 : Iron Maiden, 0x20 : Decrepify, 0x40 : Lower Resist
	NTConfig_CheckMercSafe = 0x01|0x10;

	//NTConfig_CastStatic = 60;	// Cast Static Field until monster's HP lower less than this percent. Set to 100 if you won't
}
09/28/2010 01:07 ldevil#88
Liegt daran, dass das Muddies Version ist und die wohl die Variablen nicht braucht? ;) Da du an den Files rumgepfuscht hast (ja ok "wir" haben dir dazu geraten :p) musst du halt teilweise weiter Anpassungen vornehmen, wie beispielsweise die beiden Variablen einfügen.

Wo in der Config ist dir überlassen. Dazu dann einfach noch in die NTConfig.ntl das rein:

Code:
var NTConfig_UseRedemptionHP;
var NTConfig_UseRedemptionMP;
Wo ist auch hier egal ;)
09/28/2010 01:08 nibbelr#89
Liegt wohl daran das einige sternis benutzten und andre bb und wieder andre muddis ^^
Hast auch sicher ne Palacfg genommen ? wenns net oben ist kann es auch unten sein, einfach mit strg+f suchen
09/28/2010 01:10 benni-#90
das sieht mir stark nach ner sorc config aus?

muddy hatte doch solche pala configs vorgefertigt

Code:
/**
*    This file was modified by [Only registered and activated users can see links. Click Here To Register...]            
*    Check the programming section for updates and further scripts
*    Last Update: 09/05/2010                            
*
*    Hotkey Reference NTBot:
*
*    Pause/Break        - Pause the current script
*    Page up (PgUp)        - Skip to the next script
*    Page down (PgDn)    - Repeat the previous script
*    Home (Pos1)        - Show your current coordinates and area id
*    End            - Delete current XML Logfile
*    Insert (Ins)        - Log all items on your char to XML or TXT
*    Delete (Del)        - Exit Game
*
*    Backspace        - Shows the item level and some .nip specific information for items that match your current.nip files; The item(s) have to be located in your horadric cube when you press backspace!
*    NipCheckID Reference:    -1        - The item migh might be useful, but has to be identified first
*                0        - The item does NOT match any .nip line and is therefore trashed
*                1        - The item matches at least one .nip line and is stashed - Additional console output: corresponding .nip line, corresponding .nip line in JavaScript code, the name of the .nip file that contains the line and the line number
*                (true)    - The item is kept for cubing
*                (false)    - The item is NOT kept for cubing
*/

var NTConfig_UseRedemptionHP;
var NTConfig_UseRedemptionMP;

function NT_LoadConfig()
{
    //------------------------------------------------------------------------------
    //
    // Run Configuration
    //
    //------------------------------------------------------------------------------
    // Script Include Reference: MWConfig_Script.push([<ScriptName>, <Script Runtime in Minutes (0 is infinite)>]);
    // Current Selection
    MWConfig_Script.push(["NTTristramRuns.ntj", 10]); NTConfig_TPOutside = true; NTConfig_FastPickit = false;
    
    //------------------------------------------------------------------------------
    // Available Scripts
    //------------------------------------------------------------------------------
    /*
    //MWConfig_Script.push(["NTFollow.ntj", 10]);
    // Act1
    //MWConfig_Script.push(["NTMausoleum.ntj", 10]); NTConfig_KillBloodRaven = true;
    //MWConfig_Script.push(["NTTristram.ntj", 10]); NTConfig_KillRakanishu = true;
    //MWConfig_Script.push(["NTTristramRuns.ntj", 10]); NTConfig_TPOutside = true; NTConfig_FastPickit = false;
    //MWConfig_Script.push(["NTTristramLeechFighter.ntj", 10]); NTConfig_FastPickit = false;  
    //MWConfig_Script.push(["NTHole.ntj", 10]); NTConfig_ClearHoleLevel1 = 1; // 0 : don't clear, 1 : clear path only, 2 : clear all
    //MWConfig_Script.push(["NTTreehead.ntj", 10]);
    //MWConfig_Script.push(["NTCountess.ntj", 10]);
    //MWConfig_Script.push(["NTPit.ntj", 10]); MWConfig_ClearPathToPit = true; NTConfig_ClearPitLevel1 = 2; // 0 : don't clear, 1 : clear path only, 2 : clear all
    //MWConfig_Script.push(["NTAndariel.ntj", 10]);

    // Act 2
    //MWConfig_Script.push(["NTRadament.ntj", 10]);
    //MWConfig_Script.push(["NTColdworm.ntj", 10]);
    //MWConfig_Script.push(["NTAncientTunnels.ntj", 10]); MWConfig_ClearPathToTunnels = true;
    //MWConfig_Script.push(["NTSummoner.ntj", 10]); NTConfig_KillFireEye = true;
    //MWConfig_Script.push(["NTDuriel.ntj", 10]); MWConfig_ClearPathToDuriel = true;
    
    // Act 3
    //MWConfig_Script.push(["MWFlayerJungle.ntj", 10]);
    //MWConfig_Script.push(["NTAct3Sewers.ntj", 10]); NTConfig_ClearA3SewersLevel1 = 1; // 0 : don't clear, 1 : clear path only, 2 : clear all
    //MWConfig_Script.push(["NTKurastTravel.ntj", 10]);
    //MWConfig_Script.push(["NTTravincal.ntj", 10]);
    //MWConfig_Script.push(["NTMephisto.ntj", 10]); MWConfig_OpenMephistoChest = true; MWConfig_MephistoClearArea = true;
    
    // Act 4
    //MWConfig_Script.push(["NTIzual.ntj", 10]);
    //MWConfig_Script.push(["NTHephasto.ntj", 10]);
    //MWConfig_Script.push(["NTDiablo.ntj", 10]); MWConfig_StartAtStar = true; // false: start at entrance, true: start at star
    
    // Act 5
    //MWConfig_Script.push(["NTEldritch.ntj", 10]); NTConfig_ShenkExtension = true;
    //MWConfig_Script.push(["NTThreshSocket.ntj", 10]);
    //MWConfig_Script.push(["NTPindleskin.ntj", 10]); NTConfig_NihlathakExtension = false;
    //MWConfig_Script.push(["NTFrozenRiver.ntj", 10]); NTConfig_ClearFrozenRiver = false;
    //MWConfig_Script.push(["NTGlacialTrail.ntj", 10]); NTConfig_ClearGlacialTrail = false;
    //MWConfig_Script.push(["NTIcyCellar.ntj", 10]); NTConfig_ClearIcyCellar = false;
    //MWConfig_Script.push(["NTNihlathak.ntj", 10]); NTConfig_PindleskinExtension = false; MWConfig_SkipOnTombVipers = true;
    //MWConfig_Script.push(["MWWorldstoneKeep.ntj", 10]); MWConfig_SkipLevelOnWitches = true; MWConfig_SkipLevelOnSouls = false; MWConfig_SkipLevelOnDeathLords = true;
    //MWConfig_Script.push(["NTBaal.ntj", 10]); NTConfig_KillBaal = true; MWConfig_SkipBaalOnDolls = true; MWConfig_SkipBaalOnSouls = false;
    
    // Miscellaneous
    //MWConfig_Script.push(["MWWaypointCatcher.ntj", 0]); MWConfig_WaypointCatcherActs = [1, 2, 3, 4, 5]; MWConfig_TPWaypoints = true; MWConfig_SkipHallsOfPain = true; MWConfig_ClearWaypointPaths = false; 
    //MWConfig_Script.push(["MWIdleMode.ntj", 0]); MWConfig_IdleModeRuntime = 5; // Runtime in Minutes
    //MWConfig_Script.push(["NTCows.ntj", 10]);
    */
    //------------------------------------------------------------------------------
    // Various Configuration
    //------------------------------------------------------------------------------
    NTConfig_SkipHealLife = 90;        // If you have more than this percent of life, you won't go to a healer
    NTConfig_SkipHealMana = 70;        // If you have more than this percent of mana, you won't go to a healer
    NTConfig_UseMerc = true;        // Set to true if you use a mercenary, will revive merc at a reviver npc.
    NTConfig_ResetWeapon = false;        // Set to true to reset weapon when reviving merc
    MWConfig_ResetArmor = false;        // Reset Enigma if Teleport Skill is missing (Note: Activating this function may - though not likely will - lead to the loss of your enigma; Use at your own risk and make sure to include runewords in your .nip Files!)
    NTConfig_JoinOnly = false;

    //------------------------------------------------------------------------------
    // Chicken Configuration
    //------------------------------------------------------------------------------
    NTConfig_LifeThresh = 80;    // Drink a normal potion if under this percent of life.
    NTConfig_LifeRejuvThresh = 51;    // Drink a rejuvenation potion if under this percent of life.
    NTConfig_ManaThresh = 30;    // Drink a normal potion if under this percent of mana.
    NTConfig_ManaRejuvThresh = 0;    // Drink a rejuvenation potion if under this percent of mana.
    NTConfig_LifeChicken = 50;    // This is your chicken life percent. If you go below this life total, exit game.
    NTConfig_ManaChicken = 0;    // This is your chicken mana percent. If you go below this mana total, exit game.

    NTConfig_MercLifeThresh = 80;    // This is the threshold to use a life potion on your merc in percent.
    NTConfig_MercRejuvThresh = 30;    // This is the threshold to use a rejuv potion on your merc in percent.
    NTConfig_MercChicken = 0;    // This is your mercs chicken life percent. If he goes below this, exit game.
    
    MWConfig_UseChickenLog = false;    // Creates a logfile in case of chicken including useful information such as nearby monsters, negative/positive effects, potions etc.
                    // Note: This function may delay chickens and is likely to cause chicken counter errors, use at your own risk

    //------------------------------------------------------------------------------
    // Inventory Configuration
    //------------------------------------------------------------------------------
    NTConfig_FreeSpace = 2        // Number of free columns. If less full columns are free stashing is set.

    // The numbers correspond to your inventory. Set 0 to keep whatever is there, 1 to stash it.
    NTConfig_Columns[0] = [1,1,1,1,1,1,1,1,1,0];
    NTConfig_Columns[1] = [1,1,1,1,1,1,1,1,1,0];
    NTConfig_Columns[2] = [1,1,1,1,1,1,1,1,0,0];
    NTConfig_Columns[3] = [1,1,1,1,1,1,1,1,0,0];

    NTConfig_MinGoldToStash = 250000;    // Maximum gold amount carried before going to stash

    //----------------------------------------------------------------------------------------------
    // Type of potion used in each belt column
    // Available types : "hp" = health | "mp" = mana | "rv" = rejuv. Can use other potion types too.
    // Keep equal types at adjacent columns. First HP then MP and then HP again is a bad choice.
    // Keep HP and MP at the beginning of the belt (in case you want to use rejuv and other types).
    // Rejuvenations MUST, I REPEAT MUST be at the end of the belt (last x columns).
    // To use rejuvenations only, put "rv" in all columns.
    //----------------------------------------------------------------------------------------------
    NTConfig_BeltColType[0] = "hp";
    NTConfig_BeltColType[1] = "mp";
    NTConfig_BeltColType[2] = "rv";
    NTConfig_BeltColType[3] = "rv";
    
    MWConfig_BuyPotionsOnLackOfMana = true;    // Visit Town if your char lacks mana while trying to loot a corpse or to teleport
    //-----------------------------------------------------------------------------------
    // NipFile Configuration
    //-----------------------------------------------------------------------------------
    //NTConfig_NIPFilePath.push("normal/normal.nip");
    //NTConfig_NIPFilePath.push("normal/magic_rare.nip");
    //NTConfig_NIPFilePath.push("normal/set.nip");
    //NTConfig_NIPFilePath.push("normal/unique.nip");
    //NTConfig_NIPFilePath.push("normal/craft.nip");

    //NTConfig_NIPFilePath.push("advance/normal.nip");
    //NTConfig_NIPFilePath.push("advance/magic_rare.nip");
    //NTConfig_NIPFilePath.push("advance/set.nip");
    //NTConfig_NIPFilePath.push("advance/unique.nip");
    //NTConfig_NIPFilePath.push("advance/craft.nip");

    //NTConfig_NIPFilePath.push("extreme/normal.nip");
    //NTConfig_NIPFilePath.push("extreme/magic_rare.nip");
    //NTConfig_NIPFilePath.push("extreme/set.nip");
    //NTConfig_NIPFilePath.push("extreme/unique.nip");
    //NTConfig_NIPFilePath.push("extreme/craft.nip");
    
    NTConfig_NIPFilePath.push("private/normal.nip");
    NTConfig_NIPFilePath.push("private/magic_rare.nip");
    NTConfig_NIPFilePath.push("private/set.nip");
    NTConfig_NIPFilePath.push("private/unique.nip");
    NTConfig_NIPFilePath.push("private/craft.nip");
        
    //------------------------------------------------------------------------------
    // Pickit Configuration
    //------------------------------------------------------------------------------
    NTConfig_SnagRange = 60;                // Radius to check for dropped items. 40 is a good number here
    MWConfig_PickItemsInstantly = false;            // Pickup items instantly whenever a monster is killed
    
    //------------------------------------------------------------------------------
    // FindItem Configuration
    //------------------------------------------------------------------------------
    MWConfig_UseFindItem = true;                // Loot corpses of slain Monsters when clearing positions or areas
    MWConfig_FindItemRange = 40;                // Default range to check for corpses to loot when clearing positions or areas
    MWConfig_PickLootedItemsInstantly = false;        // Pick Items directly after using Find Item (slows down looting a lot, not recommended for private games)
    
    // If you don't want to loot corpses in a certain area, add it's areaid to MWConfig_FindItemExceptions
    //MWConfig_FindItemExceptions.push(131); // Throne Of Destruction
    
    //------------------------------------------------------------------------------
    // Chest Configuration
    //------------------------------------------------------------------------------
    NTConfig_OpenChest = true;                // Set to true to open chest (mostly super unique chests)
    MWConfig_OpenAllNearbyChests = true;            // Open any kind of chest or lootable object nearby
    MWConfig_PickChestLootsInstantly = false;        // Wether to pickup items each time a chest is opened; true: pickup items after every single chest; false: pickup items after opening all nearby chests first
    MWConfig_OpenChestsRange = 35;                // Default range to check for chests
    // If you don't wish to open chests in a certain area, add it's areaid to MWConfig_ChestExceptions - Check the file "areas.txt" in the sdk folder to view all areaids
    //MWConfig_ChestExceptions.push(25);             // Tower Cellar Lvl 5
    
    //------------------------------------------------------------------------------
    // Identification Configuration
    //------------------------------------------------------------------------------
    MWConfig_IdentAtCain = true;                // Identify items using cain (will only use cain, if you don't carry any items that are supposed to be kept unid)
    MWConfig_IdentAfterPickup = false;            // Identify items after pickup using a ID tome
    MWConfig_MinItemsToIdent = 2;                // Amount of unid items to carry before commencing ID progress
    
    //------------------------------------------------------------------------------
    // Itemlog Configuration
    //------------------------------------------------------------------------------
    MWConfig_UseXMLItemlog = true;                // Log kept and sold items additionally in a XML log file
    
    MWConfig_LogSoldItems = false;                // Adds sold items to the manager's itemlog
    MWConfig_ShowGoldPickupsPerScript = true;        // Shows how much gold was picked running the last script
    MWConfig_ShowGoldPickups = false;            // Show Pickup message whenever gold is picked
    MWConfig_ShowPotionPickups = false;            // Show Pickup message whenever a potion is picked
    MWConfig_LogStashToTxt = true;                // Use a textfile instead of a XML file for logging your char's carried items; false: log to .txt, true: log to .xml
    MWConfig_LowestRuneToLog = 19;                // Determine the lowest rune shown in both the Manager's and XML log at pickup (e.g. 0 to log every Rune >= EL or 19 to log every rune >= LEM)
    
    //------------------------------------------------------------------------------
    // Cubing Configuration
    //------------------------------------------------------------------------------
    NTConfig_Cubing = false;        // Enable cubing

    //NTConfig_CubingItem.push([NTCU_ESSENCE, 653]);
    
    NTConfig_CubingItem.push([NTCU_GEM, 560]);        // Flawless Amethyst
    //NTConfig_CubingItem.push([NTCU_GEM, 565]);    // Flawless Topaz
    //NTConfig_CubingItem.push([NTCU_GEM, 570]);    // Flawless Saphire
    //NTConfig_CubingItem.push([NTCU_GEM, 575]);    // Flawless Emerald
    //NTConfig_CubingItem.push([NTCU_GEM, 580]);    // Flawless Ruby
    //NTConfig_CubingItem.push([NTCU_GEM, 585]);    // Flawless Diamond
    //NTConfig_CubingItem.push([NTCU_GEM, 600]);    // Flawless Skull

    //NTConfig_CubingItem.push([NTCU_MAGIC, 420]);    // Magic Tiara
    //NTConfig_CubingItem.push([NTCU_MAGIC, 421]);    // Magic Diadem

    //NTConfig_CubingItem.push([NTCU_MAGIC_CHARM, 603]);    // Magic Small Charm
    //NTConfig_CubingItem.push([NTCU_MAGIC_CHARM, 605]);    // Magic Grand Charm

    //NTConfig_CubingItem.push([NTCU_CRAFT_HITPOWER_GLOVES, 382]);    // Craft Heavy Bracers
    //NTConfig_CubingItem.push([NTCU_CRAFT_HITPOWER_GLOVES, 452]);    // Craft Vambraces

    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_HELM, 354]);        // Craft Casque
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_HELM, 424]);        // Craft Armet
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BOOTS, 388]);        // Craft Battle Boots
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BOOTS, 458]);        // Craft Mirrored Boots
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_GLOVES, 381]);        // Craft Sharkskin Gloves
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_GLOVES, 451]);        // Craft Vampirebone Gloves
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BELT, 392]);        // Craft Mesh Belt
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BELT, 462]);        // Craft Mithril Coil
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_AMULET, 520]);        // Craft Amulet
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_RING, 522]);        // Craft Ring

    //NTConfig_CubingItem.push([NTCU_CRAFT_CASTER_BOOTS, 455]);        // Craft Wyrmhide Boots
    NTConfig_CubingItem.push([NTCU_CRAFT_CASTER_AMULET, 520]);        // Craft Amulet

    //NTConfig_CubingItem.push([NTCU_CRAFT_SAFETY_SHIELD, 447]);    // Craft Monarch
    //NTConfig_CubingItem.push([NTCU_CRAFT_SAFETY_AMULET, 520]);    // Craft Amulet

    //NTConfig_CubingItem.push([NTCU_RUNE_THUL, 562]);
    //NTConfig_CubingItem.push([NTCU_RUNE_AMN, 557]);
    //NTConfig_CubingItem.push([NTCU_RUNE_SOL, 567]);
    //NTConfig_CubingItem.push([NTCU_RUNE_SHAEL, 577]);
    //NTConfig_CubingItem.push([NTCU_RUNE_DOL, 572]);
    //NTConfig_CubingItem.push([NTCU_RUNE_HEL, 582]);
    //NTConfig_CubingItem.push([NTCU_RUNE_IO, 563]);
    //NTConfig_CubingItem.push([NTCU_RUNE_LUM, 558]);
    //NTConfig_CubingItem.push([NTCU_RUNE_KO, 568]);
    NTConfig_CubingItem.push([NTCU_RUNE_FAL, 578]);
    NTConfig_CubingItem.push([NTCU_RUNE_LEM, 573]);
    NTConfig_CubingItem.push([NTCU_RUNE_PUL, 583]);
    NTConfig_CubingItem.push([NTCU_RUNE_UM, 564]);
    //NTConfig_CubingItem.push([NTCU_RUNE_MAL, 559]);
    //NTConfig_CubingItem.push([NTCU_RUNE_IST, 569]);
    NTConfig_CubingItem.push([NTCU_RUNE_GUL, 579]);
    //NTConfig_CubingItem.push([NTCU_RUNE_VEX, 574]);
    //NTConfig_CubingItem.push([NTCU_RUNE_OHM, 584]);
    //NTConfig_CubingItem.push([NTCU_RUNE_LO, 565]);
    //NTConfig_CubingItem.push([NTCU_RUNE_SUR, 560]);
    //NTConfig_CubingItem.push([NTCU_RUNE_BER, 570]);
    //NTConfig_CubingItem.push([NTCU_RUNE_JAH, 580]);
    //NTConfig_CubingItem.push([NTCU_RUNE_CHAM, 575]);

    //***** Include the following, Primary item must be setted in item_configs folder *****
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 429]);    // Socket Dusk Shroud
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 430]);    // Socket Wyrmhide
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 431]);    // Socket Scarab Husk
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 432]);    // Socket Wire Fleece
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 433]);    // Socket Diamond Mail
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 434]);    // Socket Loricated Mail
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 435]);    // Socket Bone Weave
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 436]);    // Socket Great Hauberk
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 437]);    // Socket Balrog Skin
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 438]);    // Socket Hellforge Plate
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 439]);    // Socket Kraken Shell
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 440]);    // Socket Lacquered Plate
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 441]);    // Socket Shadow Plate
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 442]);    // Socket Sacred Armor
    NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 443]);    // Socket Archon Plate
    
    
    //NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 200]);    // Socket Berserker Axe
    
    NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 255]);    // Socket Thresher
    NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 256]);    // Socket Cryptic Axe
    //NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 257]);    // Socket Great Poleaxe
    //NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 258]);    // Socket Giant Thresher

    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_WEAPON, 295]);    // Titan's Revenge : Exceptional -> Elite

    //NTConfig_CubingItem.push([NTCU_UPGRADE_N_UNIQUE_ARMOR, 337]);    // Magefist : Normal -> Exceptional
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 360]);    // Skin of the Vipermagi : Exceptional -> Elite
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 383]);    // Magefist or Lava Gout : Exceptional -> Elite
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 389]);    // Gore Rider : Exceptional -> Elite
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 477]);    // Arreat's Face : Exceptional -> Elite
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 481]);    // Herald Of Zakarum : Exceptional -> Elite

    //------------------------------------------------------------------------------
    // Gamble Configuration
    // To specify what items to gamble, adjust the array with the desired item codes
    //------------------------------------------------------------------------------
    NTConfig_Gamble = true;        // Enable gambling
    NTConfig_GambleStartGold = 3000000;    // Gold amount to start the gambling
    NTConfig_GambleStopGold = 150000;    // Gold amount to stop the gambling

    NTConfig_GambleItem.push(520);    // Amulets
    NTConfig_GambleItem.push(522);    // Rings
    NTConfig_GambleItem.push(418);    // Circlets
    NTConfig_GambleItem.push(419);    // Coronets
    //NTConfig_GambleItem.push(334);    // Leather Gloves
    //NTConfig_GambleItem.push(335);    // Heavy Gloves
    //NTConfig_GambleItem.push(336);    // Chain Gloves
    //NTConfig_GambleItem.push(337);    // Light Gauntlets
    //NTConfig_GambleItem.push(338);    // Gauntlets

    //------------------------------------------------------------------------------
    // General Configuration
    //------------------------------------------------------------------------------
    MWConfig_AutoParty = true;            // Always use AutoParty, even if not being in public mode
    NTConfig_PublicMode = true;
        
    MWConfig_ExitGameOnMissingPassword = false;    // Exit the game if it is public due to an error pasting the password at game creation
    me.quitonhostile = false;            // Exit the game if another player expresses hostility towards you
    
    me.maxgametime = 1500;         // Time in seconds, maximum game length (0 is infinite)
    NTConfig_StartDelay = 0;    // Delay time in milliseconds to start;
    NTConfig_AreaDelay = 500;    // Delay time in milliseconds to change area;
    NTConfig_SnagDelay = 500;    // Delay time in milliseconds to wait before starting picking items
    
    //------------------------------------------------------------------------------
    // World Event Configuration
    //------------------------------------------------------------------------------
    MWConfig_CheckSojSales = true;            // If set to true, the bot will stop the current script and wait 5 minutes for every "x Stones of Jordan sold to Merchants" message. Your char will continue running in the same game, unless your me.maxgametime is not reached yet.
    NTConfig_CheckCloneDiablo = true;        // Set to true if you want to wait in game after notifying "Diablo Walks the Earth" message.
    MWConfig_WorldEventAccount = "";        // Wisp this account in case of a world event or a soj sale every 10 minutes (leave blank not to wisp any account)
    MWConfig_WorldEventWaitTime = 0;        // How long you want to wait in game in case of a world event in minutes (0 is infinite)
        
    //------------------------------------------------------------------------------
    // Shrine Configuration
    //------------------------------------------------------------------------------
    MWConfig_ActivateNearbyShrines = true;    // Set to true if you'd like to use shrines (Note: Shrines will only be activated if it is actually useful)
    // If you don't wish to activate shrines in a certain area, add it's areaid to MWConfig_ShrineExceptions - Check the file "areas.txt" in the sdk folder to view all areaids
    //MWConfig_ShrineExceptions(108);         // Chaos Sanctuary
    
    //------------------------------------------------------------------------------
    // Attack Configuration
    //------------------------------------------------------------------------------
    LadderFollowFight = true;
    NTConfig_AttackSkill[0] = 0;    // First skill. Set to 0 if you won't
    NTConfig_AttackSkill[1] = 0;    // Primary skill to boss.
    NTConfig_AttackSkill[2] = 0;    // Primary aura to boss. Set to 0 if you won't
    NTConfig_AttackSkill[3] = 0;    // Primary skill to others.
    NTConfig_AttackSkill[4] = 0;    // Primary aura to others. Set to 0 if you won't
    NTConfig_AttackSkill[5] = 0;    // Secondary skill in case monster is immune to primary skill. Set to 0 if you won't
    NTConfig_AttackSkill[6] = 0;    // Secondary aura. Set to 0 if you won't
    NTConfig_ClearPosition = true;    // Set to true if you want to clear area after killing boss.

    MWConfig_CheckImmunitySkills = [];        // Define the condition for a monster being immune; Add skill numbers (0-6) here; Example: [1, 3] means that a monster is considered as immune if it is immune to both NTConfig_AttackSkill[1] and NTConfig_AttackSkill[3]
    NTConfig_BehaviourOnImmuneMonster = 0;    // Determine what the char is supposed to do when attacking immune Monsters; 0: Don't do anything (D2NT standard), 2: Skip the Monster
    // Check self safe in field (NOT in town). Set to 0 if you won't
    // 0x01 : Potion, 0x02 : Poison, 0x04 : Amplify Damage, 0x08 : Weaken, 0x10 : Iron Maiden, 0x20 : Decrepify, 0x40 : Lower Resist
    NTConfig_CheckSelfSafe = 0;
    // Check merc's safe in field (NOT in town). Set to 0 if you won't
    // 0x01 : Death, 0x02 : Poison, 0x04 : Amplify Damage, 0x08 : Weaken, 0x10 : Iron Maiden, 0x20 : Decrepify, 0x40 : Lower Resist
    NTConfig_CheckMercSafe = 0x01;

    //NTConfig_UseRedemptionHP = 80;    // Use Redemption if under this percent of life. Set to 0 if you won't
    //NTConfig_UseRedemptionMP = 60;    // Use Redemption if under this percent of mana. Set to 0 if you won't
}
die hab ich für meinen pala in muddys d2nt