d2nt poison necro

08/04/2010 15:06 fuuch#1
Zealer funzt und ich nehme mich jetzt dem Poison-Necro an.

Es gibt im Inet zwei halbwegs funktionierende Versionen von D2nt-Scripten.
[Only registered and activated users can see links. Click Here To Register...]

Link2 fehlt mir jetzt gerade.

Der erstere Link liefert ein relativ gutes Script mit der Möglichkeit auch Summons zu benutzen, um den Necro Mf-Bot-tauglich zu machen.

Im Grunde funktioniert es default ganz gut, doch ich habe einige kleinere Änderungen vorgenommen und einige Fehler ausgebessert.

Hier die Scripte:

1. Am Anfang der NTAttack.ntl folgendes einfügen

Code:
var _CurseState;
var _SpearCount = 0;
var _SumCount = 0;
var _SkeleCount = 0;
var _MageCount = 0;
var _SumBreak = 0;
var _Start = 0;
var _Count = 0;
direkt nach
Code:
var _NTA_SkillRange = new Array(8);

2.In der
Code:
NTA_Initialize()
folgendes:
Code:
			case 91: //Lower Resist
				_NTA_SkillRange[i] = 30;
				break;
			case 92: //Poison Nova
				_NTA_SkillRange[i] = 10;
				break;
3.Die folgenden zwei Funktionen einfach irgendwo außerhalb der anderen Funktionen einfügen:
Code:
function SkeleDead()
{
	var _breaker=0;

	_target = NTC_FindUnit(NTC_UNIT_MONSTER);

	do
	{
      
	_skiplist = new Array();


	if(_target.mode == 12 /* dead */  && !_target.GetState(107) /* shattered */ && !_target.GetState(96) /* revived */ && !_target.GetState(56) /* terror curse */ && (_target.spectype == 1 || _target.spectype == 17)  && _target.classid != 363 && _target.classid != 364 /* necro mage */ && _target.classid != 351 /* hydra */ && _target.classid != 352 /* hydra */ && _target.classid != 353 /* hydra */)
	{
		if(_skiplist.indexOf(_target.gid) < 0)
		{
			if((GetDistance(me, _target) < 15))
			{
				var _pos = me.GetOptimalAttackPos(_target.areaid, _target.x, _target.y, 3, 4);
				if(_pos)
				{
					NTM_MoveTo(_target.areaid, _pos[0], _pos[1], 0);
					if(!NTC_CastSkill(70, NTC_HAND_RIGHT,_target.x+2,_target.y+1))
					{
						_breaker++;
						_skiplist.push(_target.gid);
						                     
					}
					else
					{
						_breaker++;
						_SkeleCount++;
						_SumCount++;
					}
				}
			}   
            
			else
            
			_skiplist.push(_target.gid);    
               
            
		}
	}

	if (_breaker >= 1  || _target == null)
	{	
		break;
		_breaker = 0;	
	}
            
	}
	while(_target.GetNext());
            
                  
} 


function MageDead()
{
	var _breaker=0;

	_target = NTC_FindUnit(NTC_UNIT_MONSTER);

	do
	{
      
	_skiplist = new Array();

		//spectype 	1 = regular
		//spectype	9 = boss
		//spectype	11 = unique
		//spectype	13 = champion
		//spectype	17 = minions
		
	if(_target.mode == 12 /* dead */  && !_target.GetState(107) /* shattered */ && !_target.GetState(96) /* revived */ && !_target.GetState(56) /* terror curse */ && (_target.spectype == 1 /* regular monster */ || _target.spectype == 17 /* minion monster */)  && _target.classid != 363 /* necro skeleton */ && _target.classid != 364 /* necro mage */ && _target.classid != 351 /* hydra */ && _target.classid != 352 /* hydra */ && _target.classid != 353 /* hydra */)
	{
		if(_skiplist.indexOf(_target.gid) < 0)
		{
			if((GetDistance(me, _target) < 15))
			{
				var _pos = me.GetOptimalAttackPos(_target.areaid, _target.x, _target.y, 3, 4);
				if(_pos)
				{
					NTM_MoveTo(_target.areaid, _pos[0], _pos[1], 0);
					if(!NTC_CastSkill(80, NTC_HAND_RIGHT,_target.x+2,_target.y+1))
					{
						_breaker++;
						_skiplist.push(_target.gid);
						                     
					}
					else
					{
						_breaker++;
						_MageCount++;
						_SumCount++;
					}
				}
			}   
            
			else
            
			_skiplist.push(_target.gid);    
               
            
		}
	}

	if (_breaker >= 1  || _target == null)
	{
		break;
		_breaker = 0;	
	}
            
	}
	while(_target.GetNext());
            
                  
}
4.Diesen Teil
Code:
 if(me.classid == NTC_CHAR_CLASS_NECROMANCER)
    {
		_SumBreak = 0;
		//NTC_CastSkill(68, NTC_HAND_RIGHT);
		
		if(_attackcount > 2)
		{
		NTC_CastSkill(68, NTC_HAND_RIGHT); // Bone Armor
			//==============This is where summon script begins============== 

			if(_SkeleCount < NTConfig_Skele + 1 || _MageCount < NTConfig_Mage + 1)
			{
				if (_Count == _Count)
				{
					for(var i = 0 ; i < 2 ; i++)
					{
						_Start += 1
					}
				}
				if (_Start < 3)
				{
					if(_SkeleCount == _MageCount)
					{
						for(var i = 0 ; i < 10 ; i++)
						{
							SkeleDead();
						}
						
					}
					else if(_SkeleCount > _MageCount || _SkeleCount > NTConfig_Skele + 1)
					{
						for(var i = 0 ; i < 10 ; i++)
						{
							MageDead();
						}
					}
					else if(_MageCount > _SkeleCount || _SkeleMage > NTConfig_Mage + 1)
					{
						for(var i = 0 ; i < 10 ; i++)
						{
							SkeleDead();
						}
					}
				}
				else if (_Start > 2)
				{
					if(_SkeleCount == _MageCount)
					{
						for(var i = 0 ; i < 5 ; i++)
						{
							SkeleDead();
						}
							
					}
					else if(_SkeleCount > _MageCount || _SkeleCount > NTConfig_Skele + 1)
					{
						for(var i = 0 ; i < 5 ; i++)
						{
							MageDead();
						}
					}
					else if(_MageCount > _SkeleCount || _SkeleMage > NTConfig_Mage + 1)
					{
						for(var i = 0 ; i < 5 ; i++)
						{
							SkeleDead();
						}
					}
				}
			}
		}
	}
in der Funktion
Code:
 NTA_ClearPosition()
einfügen, direkt unter den Paladinteil mit
Code:
if(me.classid == NTC_CHAR_CLASS_PALADIN) ...

5.Die drei Necrofunktionen sehen so aus:
Code:
function NTA_NecromancerAttackPatternInt()
{
	/**
	*Amplify Damage   66
	*Teeth   67
	*Bone Armor   68
	*Skeleton Mastery   69
	*Raise Skeleton   70
	*Dim Vision   71
	*Weaken   72 
	*Poison Dagger   73
	*Corpse Explosion   74
	*Clay Golem   75
	*Iron Maiden   76
	*Terror   77
	*Bone Wall   78
	*Golem Mastery   79
	*Raise Skeletal Mage   80
	*Confuse   81
	*Life Tap   82
	*Poison Explosion   83
	*Bone Spear   84
	*BloodGolem   85
	*Attract   86
	*Decrepify   87
	*Bone Prison   88
	*Summon Resist   89
	*IronGolem   90
	*Lower Resist   91
	*Poison Nova   92
	*Bone Spirit   93
	*FireGolem   94
	*Revive   95 
	*/
	
	var _maxindex, _maxskill;
	var _avgskilllevel = new Array();

	_avgskilllevel[0]  = me.GetSkill(92, false) + me.GetSkill(83, false) + me.GetSkill(73, false); //poison nec

	_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: // Poison Nec
		
		NTConfig_AttackSkill[1] = 92;
		NTConfig_AttackSkill[2] = 0;
		NTConfig_AttackSkill[3] = 92;
		NTConfig_AttackSkill[4] = 0;
		
	}

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

}

function NTA_NecromancerAttackInt(target, firstorder)
{
	var _primaryindex;

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

	function NTA_LevelBoss(monster)
	{
	var _isLevelBoss = false;
		
		switch(monster.classid)
		{
			case 156: //Andariel
				_isLevelBoss = true;
				break;
			case 211: //Duriel
				_isLevelBoss = true;
				break;
			case 242: //Mephisto
				_isLevelBoss= true;
				break;
			case 243: //Diablo
				_isLevelBoss = true;
				break;
			case 544: //Baal
				_isLevelBoss = true;
				break;
		}

		return _isLevelBoss;
	}
	
	if(NTA_LevelBoss(target) && NTConfig_AmplifyBoss == true)
	{
		if(target.GetState(9))
		{
			
		}
		else
		{
			if(!NTC_CastSkill(66, NTC_HAND_RIGHT, target.x, target.y))
				return 2;

			return 3;
		}
	}
	
	if((!NTA_LevelBoss(target)) && NTA_GetResistance(target, NTA_DAMAGE_POISON) >= NTConfig_LowerResist)
	{
		if(target.GetState(61))
		{
			
		}
		else
		{
			if(!NTC_CastSkill(91, NTC_HAND_RIGHT, target.x, target.y))
				return 2;

			return 3;
		}
	}

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

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

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

	NTC_PingDelay(NTConfig_PsnNovaWait);
	return 3;

}

function NTA_NecromancerCastSkillInt(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);
	}
	
	if((NTA_GetResistance(target, NTA_DAMAGE_POISON) >= NTConfig_LowerResist) && (!target.GetState(61)))
	{
		do{
		return NTC_CastSkill(91, NTC_HAND_RIGHT, target);
		}
		while(target.GetState(61));
	}
	
	return false;

}
6.Im Folgenden müsst ihr schauen, ob es bei euch nicht schon enthalten ist, wenn ja dann überspringt den Teil 6.:
Code:
NTPrecast.ntl
öffnen, dort dann in der
Code:
function NTP_DoPrecast(refresh)
direkt nach
Code:
	NTP_DoPrecastCTA(refresh);
folgendes einfügen
Code:
	var _castBoTwice = false;
und am Ende der Funktion folgendes:
Code:
	if(_castBoTwice)
		NTP_DoPrecastCTA(refresh);

7.In der Funktion aus Teil 6. folgenden Fall einfügen:
Code:
	case NTC_CHAR_CLASS_NECROMANCER:
		if(refresh || !me.GetState(14))
			NTC_CastSkill(68, NTC_HAND_RIGHT); // Bone Armor

		if(refresh)
		{
			_castBoTwice = true;
			if(NTConfig_Golem == 2)
				
				NTC_CastSkill(85, NTC_HAND_RIGHT); // Blood Golem
			else if(NTConfig_Golem == 3)
				
				NTC_CastSkill(94, NTC_HAND_RIGHT); // Fire Golem
			else
				
				NTC_CastSkill(75, NTC_HAND_RIGHT); // Clay Golem
		}
		break;
Das Ganze speichern und schließen.

Ende des Scriptteils


Skillung ist:
  • "PnB Tree": alle Talente im Poisonteil komplett 20, je 1 Punkt in Knochenschild und seine Synnergien
  • "Cursetree": ihr braucht 1 Punkt im Lower Resist Fluch ganz unten, also runterskillen.
  • "Summontree": je 1 Punkt bis Feuergolem runter, 1 Punkt in Golembeherrschung und Summonresis, Skele Mastery 1 Punkt (falls ihr keine Necroboots tragt) und die beiden Skeletypen kriegen den rest eurer Punkte (dürft selber entscheiden, ob ihr eher Phys- oder Magieschaden austeilen wollt) wichtig: Keine Revives, die buggen nur.

Stats sind:

Str für Enigma und Spirit(falls ihr nen Spirit wollt) - Rest komplett in Vita

Equip ist:

Harle, Mara, Hoto (Deathweb fand ich nicht so gut auf dem Bot), Spirit, Eni, Arach, 2 Sojs, Trang Gloves, Marrowwalks (oder halt was anderes, aber Marrowwalks geben 20 Str(!) und 2 Punkte in Skellimastery) / Cta+Spirit im Switch

Merc: Optimal ist ein Auramerc, davon profitieren eure Skellis. Also möglich sind halt Pride,Faith,Lw,Bramble, Beast etc. oder halt etwas billigeres. Schaut nur das euer Merc Lifeleech un CnbF bekommt über den Helm oder die Rüstung.


Was meine Änderungen bringen:
  • Necro castet Amplify Damage auf Aktbosse.
  • Von Frost zerschmetterte Mobs werden ausgelassen.
  • Golem kriegt nun auch den Bo ab.

Ansonsten habe ich einige Syntaxänderungen vorgenommen und kleinere Fehler herausgenommen.

TODO-Liste
  • Range zu DeSeis und Corruptor of Souls im Chaos Sanktuarium stimmt noch nicht ganz.
  • Summons werden manchmal unnötigerweise vorgenommen, obwohl genug Summons vorhanden sind.
  • Eventuell noch Poison Explosion einbauen für schnelleren Killspeed.

Bei Vorschlägen, Verbesserungen und Kritik, einfach hier reinschreiben.

Mfg und hf
08/04/2010 22:53 elitär#2
hallo, kannst du das eventuell oben noch ein bissel kommentieren. weil ich nen reinen gifter ohne beschwörung hab und da nicht so ganz durchsteige. ich will auch dass der necro mehr abstand hält und der golem vom cta profitiert.
08/05/2010 01:33 fuuch#3
dafür lässt du folgendes einfach weg:
Punkt 1.
Punkt 3.
in Punkt 4. nimmst du folgendes:
Code:
if(me.classid == NTC_CHAR_CLASS_NECROMANCER)
    {
		if(_attackcount > 2)
		{
		NTC_CastSkill(68, NTC_HAND_RIGHT); // Bone Armor
		}
    }
in Punkt 5. nimmst du folgendes:
Code:
function NTA_NecromancerAttackPatternInt()
{
	/**
	*Amplify Damage   66
	*Teeth   67
	*Bone Armor   68
	*Skeleton Mastery   69
	*Raise Skeleton   70
	*Dim Vision   71
	*Weaken   72 
	*Poison Dagger   73
	*Corpse Explosion   74
	*Clay Golem   75
	*Iron Maiden   76
	*Terror   77
	*Bone Wall   78
	*Golem Mastery   79
	*Raise Skeletal Mage   80
	*Confuse   81
	*Life Tap   82
	*Poison Explosion   83
	*Bone Spear   84
	*BloodGolem   85
	*Attract   86
	*Decrepify   87
	*Bone Prison   88
	*Summon Resist   89
	*IronGolem   90
	*Lower Resist   91
	*Poison Nova   92
	*Bone Spirit   93
	*FireGolem   94
	*Revive   95 
	*/
	
	var _maxindex, _maxskill;
	var _avgskilllevel = new Array();

	_avgskilllevel[0]  = me.GetSkill(92, false) + me.GetSkill(83, false) + me.GetSkill(73, false); //poison nec

	_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: // Poison Nec
		
		NTConfig_AttackSkill[1] = 92;
		NTConfig_AttackSkill[2] = 0;
		NTConfig_AttackSkill[3] = 92;
		NTConfig_AttackSkill[4] = 0;
		
	}

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

}

function NTA_NecromancerAttackInt(target, firstorder)
{
	var _primaryindex;

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

		
	if((NTA_GetResistance(target, NTA_DAMAGE_POISON) >= NTConfig_LowerResist)
	{
		if(target.GetState(61))
		{
			
		}
		else
		{
			if(!NTC_CastSkill(91, NTC_HAND_RIGHT, target.x, target.y))
				return 2;

			return 3;
		}
	}

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

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

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

	NTC_PingDelay(NTConfig_PsnNovaWait);
	return 3;

}

function NTA_NecromancerCastSkillInt(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);
	}
	
	if((NTA_GetResistance(target, NTA_DAMAGE_POISON) >= NTConfig_LowerResist) && (!target.GetState(61)))
	{
		do{
		return NTC_CastSkill(91, NTC_HAND_RIGHT, target);
		}
		while(target.GetState(61));
	}
	
	return false;

}
Die restlichen Punkte übernimmst du so, wie oben.

Für mehr Abstand kannst du in Punkt 2 folgendes benutzen:
Code:
case 91: //Lower Resist
				_NTA_SkillRange[i] = 50;
				break;
			case 92: //Poison Nova
				_NTA_SkillRange[i] = 15;
				break;
08/05/2010 22:03 elitär#4
hm, klappt das bei dir mit dem golem und den kriegsschreien? ich glaub ich stell mich hier echt wie der erste mensch an. hab alles befolgt und es geht noch nicht...
08/05/2010 22:16 fuuch#5
meine precast.ntl

Code:
var _NTP_HaveCTA = -1;

function NTP_DoPrecastCTA(refresh)
{
	if(me.classid == NTC_CHAR_CLASS_BARBARIAN || NTC_InTown())
		return false;

	if(refresh || !me.GetState(32) || !me.GetState(51))
	{
		if(NTP_BOSwitch())
		{
			NTC_CastSkill(155, NTC_HAND_RIGHT); // Battle Command
			NTC_CastSkill(149, NTC_HAND_RIGHT); // Battle Orders


		if(refresh || !me.GetState(38))
			NTC_CastSkill(57, NTC_HAND_RIGHT); // Thunder Storm

		if(refresh || !me.GetState(30))
			NTC_CastSkill(58, NTC_HAND_RIGHT); // Energy Shield

		if(refresh || (!me.GetState(10) && !me.GetState(88) && !me.GetState(20)))
		{
			if(!NTC_CastSkill(50, NTC_HAND_RIGHT)) // Shiver Armor
				if(!NTC_CastSkill(60, NTC_HAND_RIGHT)) // Chilling Armor
					NTC_CastSkill(40, NTC_HAND_RIGHT); // Frozen Armor
		}
			
		
			NTC_SwapWeapons();

			return true;
		}
	}

	return false;
}

function NTP_DoPrecast(refresh)
{
	NTP_DoPrecastCTA(refresh);
	
	var _castBoTwice = false;
	
	switch(me.classid)
	{
	case NTC_CHAR_CLASS_AMAZON:
		if(refresh)
		{
			_castBoTwice = true;
			NTC_CastSkill(32, NTC_HAND_RIGHT); // Valkyrie
		}
		break;

	case NTC_CHAR_CLASS_SORCERESS:
		if(refresh || !me.GetState(38))
			NTC_CastSkill(57, NTC_HAND_RIGHT); // Thunder Storm

		if(refresh || !me.GetState(30))
			NTC_CastSkill(58, NTC_HAND_RIGHT); // Energy Shield

		if(refresh || (!me.GetState(10) && !me.GetState(88) && !me.GetState(20)))
		{
			if(!NTC_CastSkill(50, NTC_HAND_RIGHT)) // Shiver Armor
				if(!NTC_CastSkill(60, NTC_HAND_RIGHT)) // Chilling Armor
					NTC_CastSkill(40, NTC_HAND_RIGHT); // Frozen Armor
		}
		break;

	case NTC_CHAR_CLASS_NECROMANCER:
		if(refresh || !me.GetState(14))
			NTC_CastSkill(68, NTC_HAND_RIGHT); // Bone Armor

		if(refresh)
		{
			_castBoTwice = true;
			if(NTConfig_Golem == 2)
				
				NTC_CastSkill(85, NTC_HAND_RIGHT); // Blood Golem
			else if(NTConfig_Golem == 3)
				
				NTC_CastSkill(94, NTC_HAND_RIGHT); // Fire Golem
			else
				
				NTC_CastSkill(75, NTC_HAND_RIGHT); // Clay Golem
		}
		break;


	case NTC_CHAR_CLASS_PALADIN:
		if(refresh || !me.GetState(101))
			NTC_CastSkill(117, NTC_HAND_RIGHT); // Holy Shield
		break;

	case NTC_CHAR_CLASS_BARBARIAN:
		if(refresh || !me.GetState(51))
			NTC_CastSkill(155, NTC_HAND_RIGHT); // Battle Command

		if(refresh || !me.GetState(32))
			NTC_CastSkill(149, NTC_HAND_RIGHT); // Battle Orders

		if(refresh || !me.GetState(26))
			NTC_CastSkill(138, NTC_HAND_RIGHT); // Shout
		break;

	case NTC_CHAR_CLASS_DRUID:
		if(refresh || !me.GetState(151))
			NTC_CastSkill(235, NTC_HAND_RIGHT); // Cyclone Armor

		if(refresh || !me.GetState(149))
		{
			_castBoTwice = true;
			NTC_CastSkill(226, NTC_HAND_RIGHT); // Oak Sage
		}
		if(refresh)
		{
			_castBoTwice = true;
			NTC_CastSkill(247, NTC_HAND_RIGHT); // Summon Grizzly
		}
		if(refresh || !me.GetState(144))
			NTC_CastSkill(250, NTC_HAND_RIGHT); // Hurricane
		break;

	case NTC_CHAR_CLASS_ASSASSIN:
		// Can't use both Fade and BoS
		//if(refresh || !me.GetState(157))
		//	NTC_CastSkill(258, NTC_HAND_RIGHT); // Burst of Speed
		if(refresh || !me.GetState(159))
			NTC_CastSkill(267, NTC_HAND_RIGHT); // Fade

		if(refresh || !me.GetState(158))
			NTC_CastSkill(277, NTC_HAND_RIGHT); // Blade Shield

		if(refresh || !me.GetState(153))
			NTC_CastSkill(264, NTC_HAND_RIGHT); // Cloak of Shadows

		if(refresh)
		{
			_castBoTwice = true;
			if(!NTC_CastSkill(279, NTC_HAND_RIGHT)) // Shadow Master
				NTC_CastSkill(268, NTC_HAND_RIGHT); // Shadow Warrior
		}
		break;
	}
	
	if(_castBoTwice)
		NTP_DoPrecastCTA(refresh);
}

function NTP_BOSwitch()
{
	if(_NTP_HaveCTA < 0)
	{
		var _weapon;

		_NTP_HaveCTA = 0;

		_weapon = me.GetItems();

		if(_weapon)
		{
			for(var i = 0 ; i < _weapon.length ; i++)
			{
				if(_weapon[i].mode == 1 && (_weapon[i].itemflag&0x4000000) && _weapon[i].itemprefix == 0x5027)
				{
					if(_weapon[i].itemloc == 4 || _weapon[i].itemloc == 5)
						_NTP_HaveCTA = 1;
					else
						_NTP_HaveCTA = 2;

					break;
				}
			}
		}
	}

	if(_NTP_HaveCTA > 0)
		return NTC_SwapWeapons(_NTP_HaveCTA-1);

	return false;
}
08/05/2010 22:20 fuuch#6
der necro hat noch einige probleme mit dem beschwören von mobs, da er einige mobs ins ziel nimmt, aus denen keine beschwörungen kommen können.

folgende fälle wurden berücksichtigt:

Code:
 if(_target.mode == 12 /* dead */  && 
!_target.GetState(107) /* shattered */ && 
!_target.GetState(96) /* revived */ && 
!_target.GetState(56) /* terror curse */ && 
(_target.spectype == 1 || _target.spectype == 17)  && 
_target.classid != 363 && _target.classid != 364 /* necro mage */ &&
_target.classid != 351 /* hydra */ && 
_target.classid != 352 /* hydra */ && 
_target.classid != 353 /* hydra */)
"_target" steht für das revivetarget für skellis und so weiter.
was fehlt noch?
08/11/2010 10:59 elitär#7
okay, das funtioniert ganz gut, nur macht der necro jetzt kriegsschreie, dann beschwört er den golem und dann macht er nochmal die schreie ...
08/11/2010 13:26 fuuch#8
dann kopiere dir einfach die
Quote:
function NTP_DoPrecastCTA
benenne sie um, mach das jeweils benötigte aus dem hier raus
Quote:
NTC_CastSkill(155, NTC_HAND_RIGHT); // Battle Command
NTC_CastSkill(149, NTC_HAND_RIGHT); // Battle Orders
benenne de boolvariable
Quote:
_castBoTwice
um und mach in
Quote:
if(_castBoTwice)
NTP_DoPrecastCTA(refresh);
dasselbe nochmal