Beenden, wenn Immunsystem?

04/09/2010 20:28 Sub#1
Ok das ist also die prüfung für resistenzen.
Wie können wir ändern, damit er das skript beendet wird, wenn ein bestimmter boss ist immun gegen Ihre primäre fähigkeit?

Code:
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) <= 90) 
{
          NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END"); 
}
Was ist die syntax für das ziel ?
04/09/2010 20:36 Tablet#2
[Only registered and activated users can see links. Click Here To Register...]
vielleicht hilft dir das, wurde da auf Nihla verwendet
04/09/2010 22:47 DonPalme#3
also ich hab sowas geschrieben für meine hephasto und meine threshsocket bots.
und zwar hab ich einfach in die NTAttack eingefügt:

Code:
   if(target.name == GetLocaleString(22498) && NTA_GetResistance(target, NTA_DAMAGE_COLD) > 90 && NTA_GetResistance(target, NTA_DAMAGE_PHYSICAL) > 90)
      return 1;

   if(target.name == "Hephasto The Armorer" && NTA_GetResistance(target, NTA_DAMAGE_COLD) > 90 && NTA_GetResistance(target, NTA_DAMAGE_PHYSICAL) > 90)
      return 1;
Das ist für ne icq soso mit merc. das heisst er lässt den boss nur aus, wenn der boss icq und physical immun ist. wenn ihr kein merc habt, einfach
Code:
&& NTA_GetResistance(target, NTA_DAMAGE_PHYSICAL) > 90
rauslöschen.
das eine ist eben der LocaleString für Thresh Socket und das andere Hephasto. Müsst ihr dann anpassen an die bosse die ihr braucht, oder eben verallgemeinern also für jeden boss anwenden.

-> das is dann die ganze ntattack (Achtung, verändert in mehreren kleinen dingen, also lieber an der stelle bei euch das oben genannte einfügen):

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 44: //Frost Nova
			case 48: // Nova
				_NTA_SkillRange[i] = 10;
				break;
			case 64: // Frozen Orb
				_NTA_SkillRange[i] = 15;
				break;
			case 59:
				_NTA_SkillRange[i] = 10;
				break;		
			case 45:
				_NTA_SkillRange[i] = 50;
				break;	
			case 55:
				_NTA_SkillRange[i] = 50;
				break;					
			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] < 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, 0x04, 0x02, 0x08, 0x10];
	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;

	return true;
}

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

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

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

	return NTA_DAMAGE_PHYSICAL;
}

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

	return 0;
}

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

	return false;
}

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

	return 0;
}

// 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(target.name == GetLocaleString(22498) && NTA_GetResistance(target, NTA_DAMAGE_COLD) > 90 && NTA_GetResistance(target, NTA_DAMAGE_PHYSICAL) > 90)
      return 1;

   if(target.name == "Hephasto The Armorer" && NTA_GetResistance(target, NTA_DAMAGE_COLD) > 90 && NTA_GetResistance(target, NTA_DAMAGE_PHYSICAL) > 90)
      return 1;

	if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
	{


		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])
		{
			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(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;
}
04/10/2010 02:04 Sub#4
Wenn ich dies für Eldritch zu tun, es gibt mir eine fehlermeldung "NTA_KillMonster () failed" und das spiel abstürzt.

Code:
if(target.name == GetLocaleString(22500) && NTA_GetResistance(target, NTA_DAMAGE_COLD) > 90)
      return 1;
04/10/2010 23:23 SparkZ11#5
sry das ich das bump aber, wie finde ich den localstring von einen monster?

würd das gern bei nihla verwenden.