d2nt javazon

09/07/2010 11:17 fuuch#1
Kleines Video von meiner Java beim Botten. (irgendwann ge-alt-tabbed, aber keine Lust gehabt das neu zu machen)

Ich hatte relativ früh, zu Anfang der Ladder - nachdem mein Hammer 99 wurde und meine Trapse konfiguriert war - eine Javazone zum Laufen gebracht, die jedoch aufgrund von einigen Macken erstmal eingestaubt wurde.

Gestern habe ich den Code nochmal rausgeholt und einige kleinere Änderungen vorgenommen, am Equip rumgeschraubt und auch an der Skillung.

Das Ganze läuft nach einem Feldversuch über Nacht ziemlich stabil und ich wollte es hier mal reinpasten.

Inhalt
  1. Änderungen an der NTAttack.ntl
  2. Änderungen an der NTPrecast.ntl

Die folgenden Änderungen beziehen sich ausschließlich nur auf die Javazone

Punkt 1.
In der NTAttack.ntl

In der folgenden Funktion: function NTA_Initialize()
Folgende Skillranges einfügen:
Code:
			case 10: //Jab 
				_NTA_SkillRange[i] = 3; 
				break; 
			case 24: //Charged Strike 
				_NTA_SkillRange[i] = 3; 
				break; 
			case 35: //Lightning Fury 
				_NTA_SkillRange[i] = 12; 
				break;
Folgende globale Funktion einfügen (außerhalb anderer Funktionen einfügen):
Code:
function NTA_IsWeaponBroken()
{
	var _weapon;
	_weapon = me.GetItems();

		if(_weapon)
		{
			for(var i = 0 ; i < _weapon.length ; i++)
			{
				if(_weapon[i].itemflag&0x100)
				{	
					if(_weapon[i].mode == 1 && _weapon[i].itemloc == 4 || _weapon[i].itemloc == 5)
					{
						Print("ÿc8My weapon broke, I am going to town to repair it.")
						NTTMGR_VisitTown();
						NTTMGR_TownManager();	
						break;

					}	
				}
			}
		}
}
Jetzt kommen die Attackpatterns der Javazone, einfach über die vorhandenen Funktionen(function NTA_AmazonAttackPatternInt(), NTA_AmazonAttackInt(target, firstorder), NTA_AmazonCastSkillInt(index, target)) kopieren:

Code:
function NTA_AmazonAttackPatternInt()
{
	/*
	*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 
	*/
	
	var _maxindex, _maxskill;
	var _avgskilllevel = new Array();

	_avgskilllevel[0]  = me.GetSkill(35, 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: // Lightning Fury for Lightning Javazon
		
		NTConfig_AttackSkill[1] = 35;
		NTConfig_AttackSkill[3] = 35;

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


function NTA_AmazonAttackInt(target, firstorder)
{
	var _primaryindex;
	
	if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
	{
		if(!NTTMGR_VisitTown())
			return 0;
	}
	
	NTA_IsWeaponBroken();

	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]) <= 90)
	{
		if(!NTA_AmazonCastSkillInt(_primaryindex, target))
			return 2;

		return 3;
	}
	
	
	if(NTConfig_AttackSkill[5] > 0  && NTA_GetResistance(target, _NTA_SkillDamage[5]) > 80)
	{
		if(!NTA_AmazonCastSkillInt(5, target))
			return 2;

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

		return 3;
	}

	return 1;
}

function NTA_AmazonCastSkillInt(index, target)
{

	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)
	{
		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);
        }  
	
	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))
	{
		return NTC_CastSkill(24, NTC_HAND_LEFT, target);
		
	}
   
	return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}
Punkt 2.
In der NTPrecast.ntl

Ich verwende eine modifizierte NTPrecast.ntl von Muddy.
Hier der Code:

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;
}
Ende der Codesection

Ich hoffe ich habe nichts vergessen (eventuell habe ich etwas in der NTTownManager.ntl vergessen, falls das so ist lasst es mich wissen).

Stats:

Str: Nur soviel wie ihr benötigt, um euer Zeug anzuziehen, nachdem ihr gestorben seid.
Dex: Nur soviel wie ihr benötigt, um die Non-Eth Titans (109 Dex) anzuziehen.
Vita: Der ganze Rest
Energie: 0

Talente:

Alle Synnergien für Lightning Fury auf 20, bis auf Lightning Bolt (dort nur 1 Punkt).
Alle passiven Skills bekommen 1 Punkt, Pierce kriegt soviele Punkte wie es braucht, um auf 80% Pierce zu kommen (bei meinem Equip waren es 5), Walkyre kriegt den ganzen Rest.

Equip:

Beim Equip müsst ihr darauf achten den 68% FC-Breakpoint (13 Frames) zu schaffen (der nächste liegt bei 99% (12 Frames)), darunter ist es unannehmbar langsam.
Ich trage deshalb eine Griffons, Spirit und einen 10 FC Ring oder ein 10 FC Amu.
CnbF ist auch wichtig, am besten einen Raven anziehen.
Störend ist die mangenlde Resi auf Hell, dafür habe ich ungefähr 10x 5 Prisma-scs im Inventory und gute Resiboots (35+ Resis reichen im Grunde für Sologames).
Ob ihr FHR braucht, entscheidet selbst, ich benutze es nicht.

Merc trägt Eth Andy(Cham), Eth Forti Sacred Bugged und Eth Infy Cv.

Was meine Änderungen so bringen:
  • Diablo und Baal togglen jetzt keinen Error mehr (Failed to Find Unit bla)
  • Diablo und Baal werden mit Charged Strike gekillt, statt mit Lightning Fury

Credits gehen an die EPVP und EON Community.
10/09/2010 20:30 Hekipateng#2
wo soll denn die funktion sein ?ich finde die im ganzenm ntattack script nicht, steht das bei den ama einstellungen ?
(function NTA_AmazonAttackPatternInt(), NTA_AmazonAttackInt(target, firstorder), NTA_AmazonCastSkillInt(index, target)
bei mir steht nur das:

function NTA_AmazonAttackInt(target, boss, maxattacks)
{

pls help,
10/30/2010 14:54 Xtcscrub#3
Quote:
Originally Posted by fuuch View Post
Ob ihr FHR braucht, entscheidet selbst, ich benutze es nicht.
Ohne FHR macht ne Java wenig Sinn mit Eni- aber das problem hast du ja mit deinem Spirit (unwissend?!?) schon selbst gelöst. Spirit bringt +55% schnellere Erholung nach Treffer womit du schon den 2t höchsten erreichbaren Breakpoint erreicht hast.
12/01/2010 16:12 jason_ger#4
ich will eine java auf baal laufen lassen hab alles wie in der anleitung von hier gemacht
[Only registered and activated users can see links. Click Here To Register...]
es funktioniert aber nicht da jedesmal ein error kommt gleich am angfang vom run
intinitiali...........is not defined
jetz würd ich gern wissen ob irgendeiner eine fertige attack.ntl hat mit der das geht oder vieleicht geibt es eine von den d2nt versionen(bluebird,muddys etc) die die java attack von haus aus drin hat

und nein mit einfach die attack nummern im charconfig eingeben ist es nicht getan

Danke schön
ich poste nur weil ich in 3 tagen nichts gefunden habe wies geht