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
- Änderungen an der NTAttack.ntl
- Ä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;
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;
}
}
}
}
}
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);
}
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;
}
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.







