..::lanara's Blog::..
Diablo 2 - Necromancer Guide
Tags diablo 2, guide, guides, necro, necromancer
..::lanara's Blog::..
Heute möchte ich euch einen 'kleinen' Necromancer Guide vorstellen, mit dem Schwerpunkt auf PvE. Vielleicht kann ich ja damit den ein oder anderen überzeugen mal eine Klasse auszuprobieren die nicht ganz so beliebt ist, aber dennoch sehr stark ist. Die Rede ist vom Summoner.
Vielen ist dieser Char zu langweilig, weil sie ihn einfach falsch spielen. Wer denkt, dass der Summoner einfach herumsteht, während er wartet bis die Skelette alles getötet haben, der wird überrascht sein, was man aus dem Char noch herausholen kann. Dieser Spec ist vor allem für Anfänger geeignet, da er auch mit schlechtem Equipment sehr stark und extrem sicher zu spielen ist.
In Stärke stecken wir genau soviele Punkte, um unser gesamtes Equip tragen zu können. Mit einer Enigma die wenig Stärke benötigt kann in der Regel komplett darauf verzichtet werden hier Punkte zu setzen.
Da wir kaum Stärke brauchen, können wir es uns locker leisten auf Maxblock zu gehen, da Homunkulus sowieso mit 72% Blockchance wie dafür geschaffen ist. Also stecken wir hier genau soviele Punkte rein, um auf Maxblock zu kommen, je nach Level sind das so um die 200 Dex inklusive Items.
Den Rest der verbliebenen Statpunkte spenden wir komplett in Vitalität. Pro investiertem Punkt bekommt der Necromancer 2 Lebenspunkte hinzu.
Denkt nichtmal daran hier Punkte zu verschwenden, es lohnt sich einfach nicht. Man bekommt pro Punkt in Energy 2 Manapunkte, wer wirklich Manaprobleme hat der sollte das eher mit dem Equipment ausgleichen, z.B. mit SoJ und/oder Frostburn. Mehr dazu beim Equipment.
Einzig beim leveln nach einem Ladderreset könnte man darüber nachdenken hier ein paar Punkte reinzustecken, aber selbst da ist es sinnvoller dem Merc ein billiges Insight zu bauen.
Kommen wir nun zum wohl wichtigsten Teil, der Skillung. Das Grundgerüst dieses Builds benötigt nur 68 Punkte, daher bleibt noch genug Spielraum den Char nach seinen Wünschen anzupassen. Ich persönlich bevorzuge nacht intensivem testen aller möglichen Specs die Safety Variante, weil sie vor allem beim botten den Char noch sicherer macht, falls er doch mal auf irgendeine Monsterhorde ported.
Diese Fähigkeiten bilden das Grundgerüst des Summoners, sie sollten unbedingt wie angegeben geskillt werden, um die maximale Effektivität zu erreichen.
Summoning Spells:
Raise Skeleton / Skelett beleben
20 Punkte - Das ist unser Summoning Skill, also definitiv maxen. Mit Amplify Damage machen sie sogar im Endgame noch guten Schaden. Dazu sind sie ein prima Meatshield und mit BO quasi unsterblich, obwohl sie laut Anzeige garnicht so viel TP haben.
Skeleton Mastery / Skelett-Beherrschung
20 Punkte - Gibt unseren Summons mehr Leben und Schaden, also auch maxen.
Clay Golem / Ton Golem
1 Punkt - Zum einen Prereq für Monster-Widerstand, als auch ein zuverlässiger Summon, der zwar kaum Schaden macht, aber dafür selbst mit nur einem Punkt extrem viel TP auf Hölle hat und dazu noch Gegner stark verlangsamt.
Golem Mastery / Golem-Beherrschung
1 Punkt - Prereq für Monster-Widerstand und gibt unserem Golem noch einen kleinen Bonus.
Summon Resist / Monster-Widerstand
1-5 Punkte - Erhöht die Resistenzen unserer Summons, dazu sei angemerkt, dass Summons nicht von der Resipenalty in NM+Hell betroffen sind, sie haben also unabhängig vom Schwierigkeitsgrad immer die gleichen Resis. Ein Punkt reicht mit Endequip locker aus, beim leveln kann man aber darüber nachdenken ein paar Punkte zu investieren, wenn man noch nicht genug +Skill Items hat.
Poison and Bone Spells:Teeth / Zähne
1 Punkt - Prereq für Corpse Explosion.
Corpse Explosion / Kadaverexplosion
20 Punkte - Der wohl wichtigste Skill des gesamten Builds und einer der stärksten im Gesamten Spiel. Mit jedem Punkt steigt der Radius um 0.33 yards, der Schaden bleibt konstant bei 70-120% des Monsterlebens das für den Spell genutzt wurde. CE macht zu 50% Feuer und 50% Physischen Schaden. Da man dank Amplify Damage die Phyischen Resistenzen der Monster um 100% senken kann, ist es wohl klar, dass man vor der Nutzung immer fleißig cursed.
Curses:
Amplify Damage / Verstärkter Schaden
1-5 Punkte - Das ist unser Hauptfluch, den wir außer gegen Bosse immer einsetzen. Er senkt die Physischen Resistenzen der Monster um 100% und verstärkt dadurch den Schaden den wir mit Corpse Explosion machen enorm. Mit genug +Skill Items reicht ein Punkt hier locker aus, damit der Radius groß genug ist um den ganzen Screen auf einmal zu verfluchen. Wenn man gerade levelt oder noch nicht soviele +Skill Items hat, kann man aber auch ruhig ein paar Punkte investieren, um einen größeren Radius zu bekommen.
, Weaken, Terror / Schwächen, Terror
1 Skill - Prereq für Decrepify.
Decrepify / Altern
1 Punkt - Das ist unser Hauptfluch gegen Bosse, er senkt die Resistenzen um 50% und verlangsamt sie stark. Dank diesem Fluch sind Diablo und Baal ein Kinderspiel, da sie sich kaum noch wehren.
Bei dieser Variante werden die restlichen Punkte in Bone Armor und die dazugehörigen Synergien gesteckt. Dadurch kommt man in etwa auf 800 Punkte Absorb, die einen zusätzlichen Schutz gegen Meleeangriffe bieten, falls doch mal ein Monster durchkommt, oder man in eine Monstergruppe ported die einen selbst statt die Summons angreifen.
Meiner Meinung nach ist das der sinnvollste Verbleib für die restlichen Punkte, da man bereits genug Summons hat und CE auch vollkommen ausreicht was den Schaden anbelangt.
Poison and Bone Spells:
Bone Armor / Knochen-Rüstung
1 Punkt: Dieser Skill ist zwar der Kern dieses Unterbuilds, allerdings bringt ein Punkt darin nur 10 Absorb, während ein Punkt in die Synergien 15 Absorb gibt. Daher belassen wir es bei einem Punkt und investieren die restlichen Skillpunkte lieber in Bone Wall und Bone Prison.
, Bone Wall, Bone Prison / Knochenwand, Knochengefängnis
20 Punkte - Beide Skills geben gleichviel Absorb zu Bone Shield, daher ist es eigentlich egal in welcher Reihenfolge man sie skillt, allerdings benötigt man für Bone Prison noch Bone Spear als Prereq.
Bei diesem Subspec wird mehr Wert auf den Summoning Tree gelegt, dadurch hat man neben den Skeleton Mages auch noch Revives und wahlweise einen stärkeren Golem.
Summoning Spells:
Raise Skeletal Mage / Skelettmagier beleben
20 Punkte - Die Mages bringen uns etwas mehr magischen Schaden, allerdings ist er nicht gerade berauschend. Hinzu kommt, dass Cold Mages ab und an Leichen zum platzen bringen, die man dann nichtmehr für CE nutzen kann. Nützlich wenn ab und an mal ein Mob Fire+Phys immun ist.
Revive / Wiederbeleben
1 Punkt - Auf den ersten Blick wirkt dieser Spell sehr stark, allerdings sind die meissten Monster die man wiederbelebt sehr schwach. Dazu kommt, dass größere Monster die Kollisionskontrolle nach dem Teleportieren triggern und sich dann kein Summon/Revive/Merc mehr vom Fleck bewegt, bis der Necro einen Schritt zur Seite macht, was extrem nervig sein kann. Außerdem sind mehr Monster nicht unbedingt besser, zwar blocken sie andere Monster die so nicht zum Necro durchkommen, aber sie blocken auch viel zu oft den Merc, wodurch es länger dauert bis etwas stirbt. Wie auch immer, ein Punkt hier ist sicherlich nicht verschwendet, mehr aber auf keinen Fall, da +Skills völlig ausreichen um genug Monster wiederbeleben zu können.
Iron Golem / Eisen Golem
1 Punkt - Mit diesem Spec kann man auch gut den Iron Golem skillen und aus ihm eine weitere Aura generieren. Wenn man den Golem zum Beispiel aus einem Insight macht, das ja nicht gerade teuer ist, dann erhält der Golem die Meditationsaura davon. Die restlichen Punkte sollte man dann in Golem Mastery stecken, damit der Iron Golem mehr TP bekommt.
Golem Mastery / Golem-Beherrschung
20 Punkte - Das wichtigste daran ist, dass er das Leben des Iron Golems erhöht, dadurch sollte eben jener eigentlich nicht mehr sterben. Zusätzlich bekommt er noch mehr Attack Bonus und etwas mehr Run/Walkspeed.
Beim Boner werden die restlichen Skills in Bone Spear und Bone Wall/Prison gesteckt. Allerdings sollte man sich bewusst sein, dass der Schaden den man macht nicht vergleichbar mit einem richtigen Bone Necro ist. Bei Bots besteht außerdem noch die Gefahr, dass der Necro ewig versucht mit Bone Spear etwas zu töten, statt einfach Corpse Explosion zu nutzen. Man könnte auch Bone Spirit skillen, allerdings halte ich davon nichts, da er weniger Schaden als Bone Spear macht und dazu noch ein Single Target Angriff ist. Bone Wall/Prison gibt zudem noch etwas bonus auf Bone Shield.
Summoning Spells:
Bone Spear / Knochenspeer
20 Punkte - Bietet einen alternativen Angriff zu CE, und kann den Merc dabei unterstützen die erste Leiche zu bekommen. Außerdem nützlich gegen Bosse und immune Mobs, als zusätzliche Schadensquelle.
, Bone Wall, Bone Prison / Knochenwand, Knochengefängnis
20 Punkte - Sucht euch eien davon aus, als Synergie zu Bone Spear und Bone Shield.
Der Poison Necro setzt auf Poison Nova als zusätzlichen Schaden. Der Schaden der Nova ist allerdings nicht wirklich berauschend, daher dient sie auch eher als kleiner Damage Add und Angriff gegen immune Gegner.
Poison and Bone Spells:
Poison Nova / Gift-Nova
20 Punkte - Der Hauptskill, demzufolge maxen. Man sollte jedoch bedenken, dass Corpse Explosion der weitaus bessere Crowd Killer ist.
, Poison Dagger, Poison Explosion / Gift-Dolch, Gift-Explosion
20 Punkte - Hier kommen die restlichen Punkte rein, als Synergie zu Poison Nova. Die Skills selbst sind eigentlich nicht zu gebrauchen, Poison Explosion braucht wie Corpse Explosion eine Leiche und fällt daher aus, weil der Schaden einfach zu schwach ist. Poison Dagger macht ebenfalls nicht genug Schaden, um für irgendetwas gut zu sein.
Summoning Spells:
Blood Golem / Blut Golem
Kann ganz nützlich sein, weil er dem Necro ab und an Life leeched, vom Schaden her unterscheidet er sich allerdings nicht von den anderen, da die Golems generell kaum Schaden machen.
Fire Golem / Feuer Golem
Meiner Meinung nach der schlechteste von allen Golems, daher würde ich eher noch den Clay Golem nehmen, als diesen.
Curses:
Lower Resists / Widerstandsschwund
Dieser Fluch ist vor allem nützlich, wenn man viel mit Chars zusammenspielt die magischen Schaden machen, wie Sorcs oder Javas. Zum Solo spielen aber eher ungeeignet, zwar macht CE auch 50% Feuerschaden, aber Amplify Damage ist da effektiver, weil es mehr debuffed und dazu auch Merc+Skeletten etwas bringt.
Dim Vison / Schwache Sicht
Dieser Fluch schränkt die Sicht anderer Monster ein, wodurch sie erst angreifen wenn man direkt bei ihnen steht. Sehr nützlich ist das zum Beispiel gegen Souls, da man sie so recht einfach ausschalten kann.
Attract / Mittelpunkt
Ein weiterer nützlicher Skill der ein Monster verflucht, damit es von anderen Monstern angegriffen wird. Das kann vor allem nützlich sein, wenn man gegen eine Gruppe sehr starker Monster kämpft und man selbst noch kein so gutes Equipment hat.
Rüstung
Empfohlen: Enigma, da führt einfach kein Weg vorbei, Teleport ist unersetzlich. Auch die restlichen Stats sind perfekt. Am besten sockelt man es in eine Rüstung die wenig Stärke benötigt, z.B. Breastplate oder Mageplate.
Alternative: Zu Enigma gibt es eigentlich keine Alternative, aber wenn man sich noch keine Leisten kann, muss ja solang etwas anderes herhalten. Hier wären unter anderem denkbar:
- [Sol Um Um] - +2 Necro Skills, viel Mana, Resis und Bone Armor Proc
- - +1 Skill, Resis, Faster Cast Rate
- - +2 Summoning Skills, hohe Defense, Faster Run/Walk, ggf. andere Setboni
Helm
Empfohlen: Harlequin Crest aka Shako, das einzige was noch besser wäre, ist ein Rare Circlet mit sehr guten Stats. Vom Preis-/Leistungsverhältnis ist Harle unschlagbar.
Alternative:
- Rare Circlet - +2 Necro Skills, Str/Dex, Life/Mana, Resis
- - +1 Skill, Energie, Vitalität, FRW
- - +1 Necro Skills, Mana, Giftresi
- - Viel Mana, allerdings nur in Verbindungen mit anderen Set Items eine ernsthafte Alternative
Handschuhe
Empfohlen: Magefist gibt 20% FCR, 25%Manareg und +1 Fire Skill (gibt +1 auf Corpse Explosion, also sehr nett), ist außerdem recht leicht zu bekommen. Allerdings gibt es bei den Handschuhen auch gute Alternativen.
Alternative:
- - +2 Curses, 20%FCR, 30% Kälteresi und, vor allem für Poisoner sehr nett, +25% Giftschaden
- - Wer Manaprobleme hat, sollte sich diese Handschuhe für den ultimativen Manaboost holen.
- - Wer schon genug FCR hat und/oder FastMod nutzt, kann die Handschuhe auch für ein bisschen mehr MF+GF nutzen.
Schuhe
Empfohlen: Bei den Schuhen gibt es ebenfalls mehrere Kandidaten, ich habe mich bei meinem Necro für Waterwalk entschieden wegen gutem Dex- und Lifebonus, aber einen eindeutigen Gewinner gibt es hier nicht.
Alternative:
- - Stärke, Vitalität, hohe Giftresistenzen und kann Ätherisch sein dank Selfrepair
- - Stärke, Vitalität und bis zu 50% MF
- - +1-2 Skeleton Mastery, Stärke und Geschick
Gürtel
Empfohlen: Arachnid Mesh ist der einzige Gürtel mit +Skill, also ist er eigentlich optimal für uns, dazu kommen noch 20% FCR sowie 5% mehr Mana.
Alternative:
- - Sehr viel Vitalität, FHR, %Damage Reduce
- - Für die Leute die kein FCR mehr brauchen und stattdessen mehr MF/GF wollen
- - Viel Leben und Mana, Cannot be frozen und ggf. noch weitere Setboni
Amulett
Empfohlen: Mara's Kaleidoscope ist eigentlich das Standardamulett, einzig Rares oder Crafted Amulette stellen gute Alternativen dar.
Alternative:
- Rare, Crafted oder Unique Amulette mit +Skill und guten Adds wie Stärke, Resis, Life etc.
Ringe
Empfohlen: Entweder Stone of Jordan, oder Bul Kathos' Wedding Band, natürlich wegen den +1 Skill darauf. Da ich kein Mana mehr benötige, hab ich mich für 2x Bul Kathos' entschieden für mehr Leben.
Alternative:
- - +1 Skill, sehr viel Mana
- Rare Ringe - FCR, Str, Life, Resis oder andere gute Stats
- - Für die MF Freaks
Waffe
Empfohlen: Heart of the Oak ist eigentlich das beste was man bekommen kann, +3 Skills, viel FCR, 15% Mana, Dex und noch Resis obendrauf, was will man mehr?
Alternative:
- Magische, Rare oder Unique Necrostäbe mit möglichst vielen +Skills, an HotO kommt allerdings nichts ran
- [Ber Tir Um Mal Lum] - Level 9 Fanatismus Aura on Equip, dazu viel Stärke und etwas Crushing Blow, wenn man gegen Bosse selbst etwas nachhelfen will.
Schild
Empfohlen: Hier führt kein Weg an Homunculus vorbei, dieses Schild hat einfach alles was man braucht. Skills, Faster Blockrate, hohe Resis, viel Mana und dazu noch eine super Blockchance.
Alternative:
- - nur in Verbindung mit dem kompletten Set
2. Waffenslot
Empfohlen: + , logischerweise wegen BO.
Alternative: + für MF.
Inventar
Empfohlen:
- - +Skill, Stats/Resis, +%XP
- - +Skills, Stats, Resis
- Small Charms - Leben und fehlende Resistenzen
Alternative:
- - MF, GF und reduzierte Händlerpreise, schadet nicht
- Small Charms - Magic Find
- Grand Charms - Skiller werden für den Summoner eigentlich nicht benötigt
Der Merc ist für den Summoner extrem wichtig, da er nicht nur ein Auraspender ist, wie für andere Chars, sondern aktiv am Geschehen beteiligt ist. Mit dem richtigen Equip kommt ein guter Merc auf ~10.000 Schaden, dazu kommt noch, dass er nahezu immer auf Gegner schlägt die mit Amplify Damage verflucht sind, was den Schaden nochmal stark anhebt. Dadurch kann der Merc sehr einfach einzelne Gegner töten und uns somit die Leichen bringen, die wir für Corpse Explosion benötigen.
Stellt sich nun natürlich noch die Frage welchen Merc wir nehmen, wobei es da eigentlich keine zwei Meinungen gibt. Der Akt 2 Merc hat einfach die besten Vorraussetzungen, da er von Haus aus eine Aura mitbringt und auch die besten Waffen tragen kann, da können andere Mercs einfach nicht mithalten.
Nun müssen wir nurnoch wissen welche Aura es sein soll, am Anfang würde ich hier noch zu Prayer raten, weil die Aura dafür sorgt, dass die Skelette sich immer fleißig selbst heilen und nicht sterben. Wenn man aber erstmal genug +Skills hat gibt es nurnoch eine Wahl, den Might Merc, der sowohl seinen Schaden, als auch den unserer Skelette nochmal gut pushed.
Da wir jetzt also wissen, dass wir einen Akt2 Might Merc wollen, fehlt noch das passende Equipment für ihn:
Waffe
Empfohlen: Vom Preis-/Leistungsverhältnis gibt es hier nur eine Wahl, Obedience. Die Waffe hat eigentlich alles was unser Merc braucht, viel Crushing Blow gegen Bosse, sehr hoher Schaden, FHR, Enchant Proc, Stärke, Geschick etc. Dazu sind die Runen sehr einfach zu besorgen, Rohling sollte natürlich eine Ätherische Waffe sein, z.B. Thresher oder Cryptic Axe.
Alternative:
- [Ber Mal Ber Ist] - Die Conviction Aura macht die Monster gegen Corpse Explosion noch anfälliger und senkt zudem noch die Verteidigung. Dazu kommen wie bei Obedience 40% Crushing Blow, hoher Schaden und 35% Faster Run/Walk und Prevent Monsterheal
- [Ral Tir Tal Sol] - Eigentlich nur in frühen Charleveln eine Alternative, wenn man vor allem auf die Meditation Aura angewiesen ist. Der Schaden ist zwar ganz passabel, aber das Crushing Blow fehlt leider.
Rüstung
Empfohlen: Natürlich kommt hier nur Fortitude infrage, allein wegen den 300% Extraschaden, aber auch wegen den sonstigen Boni. Rohling ist eine Eth Bugged Armor mit 1000+ Defense
Alternative:
- - Stärke, Resis, Life, Cannot be frozen, am besten Eth+Upped
- [Shael Um Pul Lum] - Extrem hohe Verteidigung, daher am besten in eine Eth Bugged Armor bauen. Dazu noch viel FHR und ein paar Resis.
Helm
Empfohlen: Als Helm ist Andariel's Visage die beste Wahl, am besten gesockelt mit einem IAS+Fireresi Juwel und Ätherisch. Der Helm hat alles was man braucht, Lifeleech, Stärke, IAS, +Skills und eine gute Defense.
Alternative:
- - Viel Leech, Geschick, Leben, Fireresi und Extragold
- - Leech und %Damage Reduce
- - Sehr viel Crushing Blow, daher ist dieser Helm vor allem wenn man viele Bosse farmt eine ernsthafte Überlegung wert.
Am Anfang sollte man erstmal seine Skelette summonen, wenn der Char und Merc noch nicht so stark sind, macht man das am besten in Akt1, da die Mobs dort nicht so stark sind. Wenn man gutes Equip hat, kann man aber auch Pindle oder Eldritch/Shenk dafür nutzen und hat dabei direkt noch die Chance auf ein paar Items. Bei Pindle kann man zudem die Untoten die vor dem Tempel herumliegen summonen, bevor diese auferstehen. +Skills von Items oder Schreinen wirken nur zum Zeitpunkt des Summonens, dadurch kann man z.B. zum Beschwören der Skelette eine Waffe+Schild mit möglichst vielen +Skills anziehen und dannach auf MF Equip switchen, die Skelette bleiben trotzdem gleich stark.
Der Kampf gegen normale Monster läuft so ab, dass man in die Nähe einer Monstergruppe ported, Amplify Damage casted und zusieht, wie die Skelette und der Merc den ersten Mob töten. Sobald das geschafft ist, wird 1-2x Corpse Explosion gecastet, bis nichts mehr steht. Gegen Aktbosse oder besonders hartnäckige Unique Monster nehmen wir Decrepify statt Amplify Damage, damit werden sie zum Kinderspiel, da sie teilweise sogar in ihrer Hitrecovery gelocked werden und nichts mehr machen.
Dieser Char ist auch für Hardcore besonders geeignet, da er dank den vielen Skeletten gut geschützt ist und sich dadurch auch mit schlechtem Equip sicher spielen lässt. Ebenso ist es natürlich am Ladderanfang, der einzige Char der da noch besser ist, ist die Sorc dank Teleport. Aber kein anderer Char kann so viel MF Equip anziehen wie der Necro und dabei kaum an Killspeed verlieren.
Hier noch ein paar Wissenswerte Informationen bezüglich der Breakpoints für den Necro:
Faster Cast Rate
Faster Hit Recorvery
Frames 15 14 13 12 11 10 9 %FCR 0 9 18 30 48 75 125
Faster Block Rate
Frames 13 12 11 10 9 8 7 6 5 4 %FHR 0 5 10 16 26 39 56 86 152 377
Frames 11 10 9 8 7 6 5 4 3 %FBR 0 6 13 20 32 52 86 174 600
Wenn ihr Muddy's D2NT oder den Etalbot nutzt könnt ihr diesen Teil überspringen, denn mit den aktuellen Versionen sollte der Summoner auch ohne Änderungen funktionieren.
Wer den Sternenlooper D2NT nutzt, sollte sich meine NTAttack.ntj nehmen, bei der ich einige Änderungen für den Necro vorgenommen habe:
PHP 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);
var _holyCount = 0;
var _castCount = 0;
var _CurseState;
var _RevCount =0;
var _SpearCount =0;
function NTA_Initialize()
{
if(NTConfig_AttackSkill[1] == 0 || NTConfig_AttackSkill[3] == 0)
NTA_DetectAttackPattern();
for(var i = 0 ; i < 9 ; 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]);
if(me.areaid == 132)
_NTA_SkillRange[i] = 3;
else
switch(NTConfig_AttackSkill[i])
{
case 6: //Magic Arrow
case 7: //Fire Arrow
_NTA_SkillRange[i] = 15;
break;
case 10: //Jab
_NTA_SkillRange[i] = 3;
break;
case 11: //Cold Arrow
case 12: //Multiple Shot
case 16: //Exploding Arrow
case 21: //Ice arrow
case 22: //Guided arrow
_NTA_SkillRange[i] = 20;
break;
case 24: //Charged Strike
_NTA_SkillRange[i] = 3;
break;
case 25: //Plague jav
_NTA_SkillRange[i] = 10;
break;
case 26://Strafe
case 27://Immolation Arrow
_NTA_SkillRange[i] = 15;
break;
case 30: //Fend
_NTA_SkillRange[i] = 3;
break;
case 31: //Freezing arrow
_NTA_SkillRange[i] = 15;
break;
case 35: //Lightning Fury
_NTA_SkillRange[i] = 12;
break;
case 44: //Frost Nova
case 48: // Nova
_NTA_SkillRange[i] = 10;
break;
case 64: // Frozen Orb
_NTA_SkillRange[i] = 15;
break;
case 74: // Corpse Explosion
_NTA_SkillRange[i] = 10;
break;
case 97: //Smite
_NTA_SkillRange[i] = 3;
break;
case 101: //holy bolt
_NTA_SkillRange[i] = 3;
break;
case 106: //Zeal
case 112: //Blessed Hammer
_NTA_SkillRange[i] = 3;
break;
case 147:
_NTA_SkillRange[i] = 3;
break;
case 151: //Whirlwind
_NTA_SkillRange[i] = 8;
break;
case 225: //Fire Storm
case 229: //Molten Boulder
case 230: //Arctic Blast
case 232: //Feral Rage
case 233: //Maul
case 238: //Rabies
case 239: //Fire Claws
case 240: //Twister
case 242: //Hunger
case 243: //Shockwave
case 244: //Volcano
_NTA_SkillRange[i] = 3;
break;
case 245: //Tornado
_NTA_SkillRange[i] = 6;
break;
case 248: //Fury
_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 < 150 && NTA_IsValidMonster(_target))
{
if(NTA_Attack(_target, (_attackcount%30) == 0) < 2)
break;
_attackcount++;
}
}
return (_target.hp <= 0 || _target.mode == 0 || _target.mode == 12);
}
function ReviveDead()
{
var _breaker=0;
var _skiplist;
_target = NTC_FindUnit(NTC_UNIT_MONSTER);
_RevCount = _RevCount - 2;
do
{
_skiplist = new Array();
if(_target.mode == 12 && !_target.GetState(96))
{
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,_target.y))
{
_RevCount++;
_breaker++;
_skiplist.push(_target.gid);
}
else
{
_RevCount++;
_breaker++;
}
}
}
else
_skiplist.push(_target.gid);
}
}
if (_breaker >= 7 || _target == null || _RevCount >= 15)
{
break;
_breaker = 0;
}
}while(_target.GetNext());
}
function NTTMGR_TownManager2()
{
_NTTMGR_BuyTP = (NTTMGR_CheckScrolls(1) < 4);
_NTTMGR_DoHeal = NTT_CheckHeal();
_NTTMGR_DoRepair = NTT_CheckRepair(1);
_NTTMGR_RemoveCurse = NTTMGR_CheckCurse(NTConfig_CheckSelfSafe > 0x01 ? 0x7E : 0, NTConfig_CheckMercSafe > 0x01 ? 0x7E : 0);
NTC_PutSkill(115, NTC_HAND_RIGHT);
switch(me.act)
{
case 1:
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_BuyTP )
NTTMGR_VisitAkara();
if(_NTTMGR_DoRepair)
NTTMGR_VisitCharsi();
break;
case 2:
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_DoRepair)
NTTMGR_VisitFara();
if( _NTTMGR_BuyTP)
NTTMGR_VisitDrognan();
break;
case 3:
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_BuyTP)
NTTMGR_VisitOrmus();
if(_NTTMGR_DoRepair || _NTTMGR_BuyKey)
NTTMGR_VisitHratli();
break;
case 4:
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_BuyTP)
NTTMGR_VisitJamella(false);
if(_NTTMGR_DoRepair)
NTTMGR_VisitHalbu();
break;
case 5:
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_BuyTP)
NTTMGR_VisitMalah();
if(_NTTMGR_DoRepair)
NTTMGR_VisitLarzuk();
break;
}
}
function IsBroken()
{
var _weapon;
_weapon = me.GetItems();
if(_weapon)
{
for(var i = 0 ; i < _weapon.length ; i++)
{
if(_weapon[i].itemflag&0x100)
{
if(_weapon[i].itemloc == 4 || _weapon[i].itemloc == 5)
{
NTTMGR_VisitTown();
NTTMGR_TownManager2();
}
else
{
NTTMGR_VisitTown();
NTTMGR_TownManager2();
}
break;
}
}
}
}
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)*30)
{
_mindistance = 100000;
_target = NTC_FindUnit(NTC_UNIT_MONSTER);
if(NTConfig_FastPick)
{
var _fastpickx = me.x;
var _fastpicky = me.y;
NTSI_PickItems();
NTM_MoveTo(me.areaid, _fastpickx, _fastpicky);
}
NTTMGR_TeleChick()
NTTMGR_TownChick()
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_UseFindItem && me.classid == NTC_CHAR_CLASS_BARBARIAN && _attackcount > 2)
{
if(!NTA_CheckForCloseMonsters(5))
{
//Print("ÿc<No Monsters close - looting");
NTA_FindItem(NTConfig_FindItemRange);
}
}
if(me.classid == NTC_CHAR_CLASS_NECROMANCER && _RevCount <= 15)
{
if(_attackcount > 2)
ReviveDead();
}
if(NTConfig_UseFindItem && me.classid == NTC_CHAR_CLASS_BARBARIAN && _attackcount > 2)
{
if(!NTA_CheckForCloseMonsters(5))
{
//Print("ÿc<No Monsters close - looting");
NTA_FindItem(NTConfig_FindItemRange);
}
}
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();
if(NTConfig_OpenAllNearbyChests)
NTL_OpenNearbyChests();
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)
{
if(NTConfig_uniq)
{
var _room;
var _spectype = [0x0A];
var _skiplist;
var _attackcount = 0;
var _target;
var _distance, _mingid, _mindistance;
var _result;
}
else
{
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]))
{
NTTMGR_TeleChick()
NTTMGR_TownChick()
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(me.classid == NTC_CHAR_CLASS_NECROMANCER && _RevCount <= 15)
{
if(_attackcount > 2)
ReviveDead();
}
if(NTConfig_OpenChest)
{
_target = NTC_GetSpecialChest();
if(_target && _room.UnitInRoom(_target) && NTC_OpenChest(_target))
_attackcount++;
}
if(pickitem && _attackcount > 0)
NTSI_PickItems();
if(NTConfig_OpenAllNearbyChests)
NTL_OpenNearbyChests();
switch(safelevel)
{
case 1:
return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
case 2:
return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
}
return true;
}
function IsBroken()
{
var _weapon;
_weapon = me.GetItems();
if(_weapon)
{
for(var i = 0 ; i < _weapon.length ; i++)
{
if(_weapon[i].itemflag&0x100)
{
if(_weapon[i].itemloc == 4 || _weapon[i].itemloc == 5)
{
Print("ÿc8My weapon broke, going to town to repair it.")
NTTMGR_VisitTown();
NTTMGR_TownManager();
}
break;
}
}
}
}
function HaveArrows()
{
var _weapon;
var _haveAmmo = false;
_weapon = me.GetItems();
if(_weapon)
{
for(var i = 0 ; i < _weapon.length ; i++)
{
if((_weapon[i].classid == 526 || _weapon[i].classid == 528) && _weapon[i].itemloc == 5)
{
if(_weapon[i].GetStat(70) < 15)
{
Print("ÿc8I'm low on "+ _weapon[i].name + ", going to town to buy more.")
NTTMGR_VisitTown();
NTTMGR_TownManager();
}
_haveAmmo = true;
break;
}
}
}
if(!_haveAmmo)
{
Print("ÿc8I have no ammo, going to town to buy some.")
NTC_PutSkill(NTConfig_AttackSkill[1], NTC_HAND_LEFT);
NTTMGR_VisitTown();
NTTMGR_TownManager();
}
}
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(_classid == 543 || _classid == 545)
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;
if(monster.GetState(53) || monster.GetState(96)) // Conversion, Revive
return false;
if(me.classid == NTC_CHAR_CLASS_AMAZON)
{
if(me.areaid == 131)
NTC_PingDelay(25);
if(me.GetSkill(12, true) > 1)
HaveArrows();
else
IsBroken();
}
if(me.classid == NTC_CHAR_CLASS_DRUID)
{
if(!me.GetState(144))
NTC_CastSkill(250, NTC_HAND_RIGHT);
if(!me.GetState(151))
NTC_CastSkill(235, NTC_HAND_RIGHT);
if(!me.GetState(149))
NTC_CastSkill(226, NTC_HAND_RIGHT);
}
if(me.classid == NTC_CHAR_CLASS_NECROMANCER)
{
if(!me.GetState(14))
NTC_CastSkill(68, NTC_HAND_RIGHT)
}
return true;
}
function NTA_GetDamageType(skillid)
{
if(skillid == 74) // Corpse Explosion
return NTA_DAMAGE_PHYSICAL;
if(skillid == 112) // Blessed Hammer
return NTA_DAMAGE_MAGIC;
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()
{
var _maxindex, _maxskill;
var _avgskilllevel = new Array();
_avgskilllevel[0] = me.GetSkill(35, false);
_avgskilllevel[1] = parseInt((me.GetSkill(31, false) + me.GetSkill(11, false) + me.GetSkill(21, false)) /3 );
_avgskilllevel[2] = me.GetSkill(26, 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 Javazon
NTConfig_AttackSkill[1] = 35;
NTConfig_AttackSkill[2] = 35;
NTConfig_AttackSkill[3] = 35;
NTConfig_AttackSkill[4] = 35;
NTConfig_AttackSkill[5] = 35;
NTConfig_AttackSkill[6] = 35;
NTConfig_AttackSkill[7] = 24;
NTConfig_AttackSkill[8] = 35;
NTConfig_AttackSkill[9] = 35;
break;
case 1: // Freezing Arrow for Bowzon
NTConfig_AttackSkill[1] = 31;
NTConfig_AttackSkill[2] = 31;
NTConfig_AttackSkill[3] = 31;
NTConfig_AttackSkill[4] = 31;
NTConfig_AttackSkill[5] = 31;
NTConfig_AttackSkill[6] = 31;
NTConfig_AttackSkill[7] = 31;
NTConfig_AttackSkill[8] = 31;
NTConfig_AttackSkill[9] = 31;
break;
case 2: // Cold Arrow + Strafe for Bowzon
NTConfig_AttackSkill[0] = 11;
NTConfig_AttackSkill[1] = 26;
NTConfig_AttackSkill[2] = 26;
NTConfig_AttackSkill[3] = 26;
NTConfig_AttackSkill[4] = 26;
NTConfig_AttackSkill[5] = 26;
NTConfig_AttackSkill[6] = 26;
NTConfig_AttackSkill[7] = 22;
NTConfig_AttackSkill[8] = 26;
NTConfig_AttackSkill[9] = 26;
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;
}
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(me.GetSkill(12, true) < 1 && target.spectype == 9)
{
if(!NTA_AmazonCastSkillInt(7, target))
return 2;
return 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(NTConfig_AttackSkill[8] > 0)
{
if(!NTA_AmazonCastSkillInt(8, 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);
}
return NTC_CastSkill(NTConfig_AttackSkill[index], NTC_HAND_LEFT, 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;
//}
}
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] = 64;
NTConfig_AttackSkill[2] = 47;
NTConfig_AttackSkill[3] = 64;
NTConfig_AttackSkill[4] = 47;
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 && (target.name == "Mephisto" || target.name == "Andariel" || target.name == "Baal" || target.name == "Diablo" || target.name == "Duriel" || target.name == "The Countess"))
{
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(_castCount >= 3)
{
NTC_CastSkill(NTConfig_AttackSkill[3], _NTA_SkillHand[0], target)
_castCount = 0;
}
else
_castCount++;
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()
{
var _maxindex, _maxskill;
var _avgskilllevel = new Array();
_avgskilllevel[0] = me.GetSkill(84, 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:
NTConfig_AttackSkill[0] = 84;
NTConfig_AttackSkill[1] = 84;
NTConfig_AttackSkill[2] = 84;
NTConfig_AttackSkill[6] = 74;
break;
case 1:
NTConfig_AttackSkill[1] = 92;
NTConfig_AttackSkill[2] = 92;
NTConfig_AttackSkill[3] = 84;
NTConfig_AttackSkill[4] = 74;
NTConfig_AttackSkill[6] = 74;
break;
}
return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}
function GetCurseState(skillid)
{
if(NTConfig_Curse == 66)
return 9;
if(NTConfig_Curse == 71)
return 23;
if(NTConfig_Curse == 76)
return 55;
if(NTConfig_Curse == 77)
return 56;
if(NTConfig_Curse == 81)
return 59;
if(NTConfig_Curse == 82)
return 58;
if(NTConfig_Curse == 86)
return 57;
if(NTConfig_Curse == 87)
return 60;
if(NTConfig_Curse == 91)
return 61;
}
function NTA_NecromancerAttackInt(target, firstorder)
{
var _primaryindex;
if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
{
if(!NTTMGR_VisitTown())
return 0;
}
if(me.GetSkill(87, true) > 1 && !target.GetState(GetCurseState()) && (target.name == "Baal" && target.name == "Diablo" && target.name == "Mephisto" && target.name == "Duriel"))
NTC_CastSkill(87, NTC_HAND_RIGHT, target)
else if(!target.GetState(GetCurseState()))
NTC_CastSkill(NTConfig_Curse, NTC_HAND_RIGHT, target)
if(target.name == "Lord De Seis")
_RevCount = _RevCount - 1;
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);
}
}
_primaryindex = (target.spectype&0x0A) ? 1 : 3;
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) <= 90)
{
if(!NTA_NecromancerCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) <= 80)
{
if(_SpearCount < 6 && target.name == "Achmel the Cursed" )
{
if(_SpearCount < 1)
NTM_WalkTo(me.x+3, me.y);
NTC_CastSkill(67, NTC_HAND_RIGHT, target);
_SpearCount++;
//Print(_SpearCount);
}
else if(target.name == "Horadrim Ancient")
{
NTM_MoveTo(target.areaid, target.x, target.y, 0);
NTC_PingDelay(1000);
}
else
{
NTA_NecromancerCastSkillInt(5, target)
return 2;
}
return 3;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100 || (_primaryindex == 1 && NTC_GetMerc()))
{
if(!NTA_NecromancerCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
return 1;
}
function NTA_NecromancerCastSkillInt(index, target)
{
if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
{
if(_castCount >= 3)
{
NTC_CastSkill(NTConfig_AttackSkill[6], _NTA_SkillHand[0], target)
_castCount = 0;
}
else
_castCount++;
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_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;
NTConfig_AttackSkill[5] = 101;
NTConfig_AttackSkill[6] = 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_DAMAGE_MAGIC) < 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_DAMAGE_MAGIC) < 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)
{
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)
{
var _castx, _casty;
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);
if(NTConfig_AttackSkill[index] == 101)
{
if(GetDistance(me, target) > 20 || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, 10, 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(_holyCount < 1)
{
NTM_WalkTo(me.x-3,me.y);
_holyCount++;
}
else
{
NTM_WalkTo(me.x+3,me.y);
_holyCount--;
}
for(var i = 0; i < 5; i++)
NTC_CastSkill(101, NTC_HAND_LEFT, target);
return;
}
else if(target.name == "Stygian Doll")
{
_castx = target.x > me.x ? target.x+3 : target.x-3;
_casty = target.y > me.y ? target.y+3 : target.y-3;
NTM_MoveTo(target.areaid, _castx, _casty,0);
return NTC_CastSkill(101, NTC_HAND_LEFT, target);
}
else
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(target.name == "Baal" || target.name == "Diablo" || target.name == "Mephisto")
{
if(GetDistance(me, target) > 3 || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, 3, 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(152, NTC_HAND_LEFT, target);
}
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);
}
return NTC_CastSkill(NTConfig_AttackSkill[index], NTC_HAND_LEFT, target);
}
}
function NTA_DruidAttackPatternInt()
{
var _maxindex, _maxskill;
var _avgskilllevel = new Array();
_avgskilllevel[0] = me.GetSkill(245, 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: //
NTConfig_AttackSkill[1] = 245;
NTConfig_AttackSkill[2] = 245;
NTConfig_AttackSkill[3] = 245;
NTConfig_AttackSkill[4] = 245;
NTConfig_AttackSkill[5] = 245;
NTConfig_AttackSkill[6] = 245;
break;
}
return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}
function NTA_DruidAttackInt(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) > NTConfig_AttackSkill[0] || !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(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
return 2;
return 3;
}
_primaryindex = (target.spectype&0x0A) ? 1 : 3;
if(me.GetSkill(245, true) > 1)
if(target.name == "Andariel" || target.name == "Baal" || target.name == "Mephisto" || target.name == "Diablo")
{
if(!NTA_DruidCastSkillIntNear(_primaryindex, target))
return 2;
return 3;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) <= 90)
{
if(!NTA_DruidCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) <= 80)
{
if(!NTA_DruidCastSkillInt(5, target))
return 2;
return 3;
}
if(NTA_GetResistance(target, _NTA_SkillDamage[index]) < 100 || (_primaryindex == 1 && NTC_GetMerc()))
{
if(!NTA_DruidCastSkillInt(_primaryindex, target))
return 2;
return 3;
}
return 1;
}
function NTA_DruidCastSkillIntNear(index, target)
{
if(GetDistance(me, target) > 3 || !CheckCollision(me, target, 4))
NTM_MoveTo(target.areaid, target.x, target.y, 0);
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
if(NTConfig_AttackSkill[index+1] > 0)
{
if(GetDistance(me, target) > 3 || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, 3, 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_DruidCastSkillInt(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(!me.GetState(139))
NTC_CastSkill(223, NTC_HAND_RIGHT) // Werewolf
else if(!me.GetState(140))
NTC_CastSkill(228, NTC_HAND_RIGHT) // Werebear
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);
}
}
function NTA_AssassinAttackPatternInt()
{
var _maxindex, _maxskill;
var _avgskilllevel = new Array();
_avgskilllevel[0] = me.GetSkill(271, 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 Sentry + Fire Blast + Physical Hammer
NTConfig_AttackSkill[1] = 271;
NTConfig_AttackSkill[3] = 251;
NTConfig_AttackSkill[5] = 253;
break;
}
return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}
function NTA_AssassinAttackInt(target, firstorder)
{
var _primaryindex;
if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x04, NTConfig_CheckMercSafe&0x04))
{
if(!NTTMGR_VisitTown())
return 0;
}
if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
{
if(GetDistance(me, target) > _NTA_SkillRange[15] || !CheckCollision(me, target, 10))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[10], 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] == 271) && !CheckCollision(target.areaid, target.x, target.y, 1))
return 1;
if(!NTA_AssassinCastSkillInt(_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] == 271) && !CheckCollision(target.areaid, target.x, target.y, 1))
return 1;
if(!NTA_AssassinCastSkillInt(5, target))
return 2;
return 3;
}
return 1;
}
function NTA_AssassinCastSkillInt(index, target)
{
if(NTConfig_AttackSkill[index] == 271)
{
var _castx, _casty;
if(GetDistance(me, target) > _NTA_SkillRange[300] || !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[1], _pos[5], 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[1], _pos[5], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}
function NTA_CheckForCloseMonsters(range)
{
if(range < 1 || arguments.length < 1)
return false;
var _monstersClose = false;
var _checkMonster = NTC_FindUnit(NTC_UNIT_MONSTER);
if(_checkMonster)
{
do
{
if(_checkMonster.IsAttackable() && GetDistance(me.x, me.y, _checkMonster.x, _checkMonster.y) < range && NTA_IsValidMonster(_checkMonster))
{
_monstersClose = true;
break;
}
} while(_checkMonster.GetNext());
}
return _monstersClose;
}
function NTA_FindItem(range)
{
var _corpse;
var _orgx;
var _orgy;
var _startTick;
var _reposition = false;
if(me.classid != NTC_CHAR_CLASS_BARBARIAN || NTC_GetSkillLevel(142) < 1)
return false;
if(arguments.length < 1 || !range)
range = 25;
_corpse = NTC_FindUnit(NTC_UNIT_MONSTER);
_orgx = me.x;
_orgy = me.y;
NTC_PingDelay(100);
NTC_SwapWeapons(2);
if(_corpse)
{
do
{
if(GetDistance(_orgx, _orgy, _corpse.x, _corpse.y) <= range && NTA_CheckLootStatus(_corpse) && NTA_IsLootable(_corpse.classid))
{
if(GetDistance(me.x, me.y, _corpse.x, _corpse.y) >= 8)
{
if(!NTM_MoveTo(me.areaid, _corpse.x, _corpse.y))
continue;
}
_startTick = GetTickCount();
_reposition = false;
while(NTA_CheckLootStatus(_corpse) && !_corpse.IsAttackable())
{
NTC_CastSkill(142, NTC_HAND_RIGHT, _corpse);
NTC_PingDelay(50);
if(GetTickCount() >= _startTick + 1000 && !_reposition) // repositioning after 1sec
{
_reposition = true;
if(!NTM_MoveTo(me.areaid, _corpse.x, _corpse.y))
break;
}
if(GetTickCount() >= _startTick + 2500) // skipping monster after 2.5sec
{
if(me.mp < 10)
{
Print("Lack of ÿc3Manaÿc0!");
if(NTConfig_BuyPotsIfLackOfMana)
{
if(NTTMGR_VisitTown())
NTC_SwapWeapons(2);
}
break;
}
var _filehandle = FileOpen("FailedtoLoot.txt", 2);
var _dateString = new Date().toLocaleFormat("%a %m/%d/%y %H:%M:%S");
if(_filehandle)
{
var _states = "States:: ";
for(var i = 0; i < 144; i++)
{
if(_corpse.GetState(i))
_states += "State(" + i + "): " + _corpse.GetState(i) + "<--> ";
}
_filehandle.WriteLine("[" + _dateString + "] Could not loot: " + _corpse.name +" [" + _corpse.classid + "] (Location: " + me.areaid + ") " + _states);
_filehandle.Close();
}
Print("ÿc;Could not loot: " + _corpse.name +" [" + _corpse.classid + "] <Mode: " + _corpse.mode + "> (Location: " + me.areaid + ")");
break;
}
}
/*if(GetTickCount() < _startTick + 2000)
NTC_SendMsgToScript("NTBotGame.ntj", "SET_LOOTED_NULL");*/
}
} while(_corpse.GetNext());
NTC_SwapWeapons(0);
NTC_PingDelay(100);
NTSI_PickItems();
return true;
}
return false;
}
function NTA_CheckForCloseMonsters(range)
{
if(range < 1 || arguments.length < 1)
return false;
var _monstersClose = false;
var _checkMonster = NTC_FindUnit(NTC_UNIT_MONSTER);
if(_checkMonster)
{
do
{
if(_checkMonster.IsAttackable() && GetDistance(me.x, me.y, _checkMonster.x, _checkMonster.y) < range && NTA_IsValidMonster(_checkMonster))
{
_monstersClose = true;
break;
}
} while(_checkMonster.GetNext());
}
return _monstersClose;
}
function NTA_CheckLootStatus(monsterunit)
{
if(!monsterunit.GetState(107) // Shattered
&& !monsterunit.GetState(104) // Corpse Explosion
&& !monsterunit.GetState(118) // Already Looted/Unlootable
&& (monsterunit.hp <= 0 || monsterunit.mode == 0 || monsterunit.mode == 12)) // Dead
return true;
else
return false;
}
function NTA_IsLootable(classid)
{
switch(classid)
{
case 151: // An evil force
case 156: // Andariel
case 180: // Sand Maggot Young
case 181: // Rock Worm Young
case 182: // Devourer Young
case 183: // Giant Lamprey Young
case 184: // World Killer Young
case 190: // Sand Maggot Egg
case 191: // Rock Worm Egg
case 192: // Devourer Egg
case 193: // Giant Lamprey Egg
case 194: // World Killer Egg
case 206: // Fould Crow Nest
case 207: // Blood Hawk Nest
case 208: // Black Vulture Nest
case 209: // Cloud Stalker Nest
case 221: // Duriel
case 227: // Maggot
case 228: // Mummy Generator
case 234: // Flying Scimitar
case 242: // Mephisto
case 243: // Diablo
case 250: // Summoner
case 258: // Water Watcher Limb
case 259: // River Stalker Limb
case 260: // Sygain Watcher Limb
case 261: // Water Watcher Head
case 262: // River Stalker Head
case 263: // Sygain Watcher Head
case 267: // Blood Raven
case 269: // An evil force
case 270: // Rogue Scout (== Merc)
case 273: // Gargoyle Trap
case 289: // Clay Golem
case 290: // Blood Golem
case 291: // Iron Golem
case 292: // Fire Golem
case 301: // Flesh Beast
case 302: // Stygian Dog
case 303: // Grotesque Wyrm
case 318: // An Evil Force
case 326: // A Trap
case 327: // A Trap
case 328: // A Trap
case 329: // A Trap
case 330: // A Trap
case 334: // Sucker Nest
case 335: // Fleeder Nest
case 336: // Blood Hook Nest
case 337: // Blood Wing Nest
case 338: // Act 2 guard (== Merc)
case 348: // Turret
case 349: // Turret
case 350: // Turret
case 351: // Hydra
case 352: // Hydra
case 353: // Hydra
case 354: // A Trap
case 356: // Dopplezon
case 357: // Valkyrie
case 359: // Iron Wolf (== Merc)
case 366: // Compelling Orb
case 369: // A Trap
case 371: // Lightning Spire
case 372: // Fire Tower
case 403: // Traped Soul
case 404: // Traped Soul
case 406: // Izual
case 410: // Wake Of Destruction
case 411: // Charged Bolt Sentry
case 412: // Lightning Sentry
case 413: // Blade Creeper
case 414: // Invisible Pet
case 415: // Inferno Sentry
case 416: // Death Sentry
case 417: // Shadow Warrior
case 418: // Shadow Master
case 419: // Druid Hawk
case 420: // Druid Spirit Wolf
case 421: // Druid Fenris
case 422: // Spirit of Barbs
case 423: // Heart Of Wolverine
case 424: // Oak Sage
case 425: // Druid Plague Poppy
case 426: // Druid Cycle of Life
case 427: // Vine Creature
case 428: // Druid Bear
case 429: // Eagle
case 430: // Wolf
case 431: // Bear
case 432: // Barricaded Door
case 433: // Barricaded Door
case 434: // Prison Door
case 435: // Barricaded Door
case 461: // Fanatic Minion
case 462: // Beserk Slayer
case 463: // Consumed Fire Boar
case 464: // Consumed Ice Boar
case 465: // Frenzied Hell Spawn
case 466: // Frenzied Hell Spawn
case 467: // Insane Hell Spawn
case 468: // Insane Ice Spawn
case 497: // Catapult
case 498: // Catapult
case 499: // Catapult
case 500: // Catapult
case 501: // Frozen Horror 1
case 502: // Frozen Horror 2
case 503: // Frozen Horror 3
case 504: // Frozen Horror 4
case 505: // Frozen Horror 5
case 516: // Catapult
case 517: // Catapult
case 518: // Catapult
case 519: // Catapult
case 522: // Barbarian Fighter
case 523: // Barbarian Fighter
case 524: // Barricade Wall Right
case 525: // Barricade Wall Left
case 526: // Nihlatak
case 528: // Evil Hut
case 535: // Barbarian Fighter
case 536: // Barbarian Fighter
case 537: // Ancient Statue 1
case 538: // Ancient Statue 2
case 539: // Ancient Statue 3
case 540: // Ancient Barbarian 1
case 541: // Ancient Barbarian 2
case 542: // Ancient Barbarian 3
case 543: // Baal Throne
case 544: // Baal Crab
case 545: // Baal Taunt
case 551: // Pain Worm
case 552: // Pain Worm
case 553: // Pain Worm
case 554: // Pain Worm
case 555: // Pain Worm
case 556: // Bunny
case 559: // Baal Crab to Stairs
case 560: // Hireling
case 561: // Hireling
case 562: // Baal Tentacle
case 563: // Baal Tentacle
case 564: // Baal Tentacle
case 565: // Baal Tentacle
case 566: // Baal Tentacle
case 567: // Injured Barbarian
case 568: // Injured Barbarian
case 569: // Injured Barbarian
case 570: // Baal Crab Clone
case 571: // Baals Minions
case 572: // Baals Minionse
case 573: // Baals Minions
case 574: // Worldstone Effect
case 662: // Flayer Shaman
return false;
break;
default:
return true;
break;
}
}
function NTTMGR_TownChick(simple)
{
var _LifeMax, _ManaMax;
_LifeMax = me.hpmax;
_ManaMax = me.mpmax;
if(NTConfig_TownChicken > 0)
{
if(parseInt(me.hp*100/_LifeMax) < NTConfig_TownChicken)
{
NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿE00000TownChicken")
NTTMGR_VisitTown()
}
}
}
function NTTMGR_TeleChick(simple)
{
var _LifeMax, _ManaMax;
_LifeMax = me.hpmax;
_ManaMax = me.mpmax;
if(NTConfig_TeleChicken > 0)
{
if(parseInt(me.hp*100/_LifeMax) < NTConfig_TeleChicken)
{
NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿE00000TeleChicken")
NTM_MoveTo(me.areaid, me.x+30, me.y+30);
NTC_Delay(4500);
NTM_MoveTo(me.areaid, me.x-30, me.y-30);
}
}
}
Positiv:
- Auch mit schlechtem Equip sehr sicher und daher ein sehr guter Char für Ladderanfang und/oder Hardcore.
- Es gibt fast keine Mobs die Fire+Phys immun sind und deren Immunity nicht durch Amplify Damage gebrochen wird.
- Viele Necrospezifische Items sind oft sehr billig zu bekommen.
- Hoher Schaden mit Corpse Explosion und Amplify Damage.
- Ist eine gute Ergänzung als CoFighter, dank Curses und Blocksummons.
- Lässt sich zur Not auch betrunken spielen, da Skelette immer nüchtern sind!
Negativ:
- Benötigt Enigma um teleportieren zu können.
- In vollen Games mit 8 Spielern ist er nicht so stark wie ein Hammerdin, bekommt aber trotzdem noch genug getötet, dauert halt nur etwas länger.
- Ungeeignet als Leader für Dia/Baalruns in Public Games, da er erst Skelette holen muss.
- Wenn man nur Bosse farmen will, gibt es bessere Chars. Der Necro entwickelt seine volle Kraft erst gegen mehrere Gegner.
So, das wars auch erstmal, vielleicht werde ich später noch das ein oder andere hinzueditieren, aber da ich den ganzen Guide an einem Stück geschrieben habe, bin ich nu auch erstmal kaputt. Über Verbesserungsvorschläge, Kritik oder Kommentare würde ich mich freuen, also immer her damit.
Total Comments 29
Comments
-
Sehr schöner guide <3 nec > all
Aber würde evt. noch etwas bei den waffen hinzufügen. Ich persönlich spiele gerne mit dem Setup:
waffe nec: Beast in low axt oder Ba (fanas)
Söldnerwaffe: Pride (Konz)
Und villeicht ein kleiner teil über den UT SummonerPosted 03/12/2011 at 00:04 by Shrimps in Bierteig
Updated 03/12/2011 at 00:13 by Shrimps in Bierteig -
Ah danke für den Hinweis mit Beast, das wollte ich noch einfügen, hab ich aber dann vergessen.
Von Pride halte ich allerdings überhaupt nichts, das lohnt sich einfach nicht nur für die Konzentrationsaura meiner Meinung nach. Die Waffe selbst macht keinen Schaden, dazu kommt noch das fehlende Crushing Blow und das Freezes Target, was für einen Summoner der mit Corpse Explosion arbeitet einfach totaler Mist ist. Wenn dann würde ich mir eher einen Pride Iron Golem bauen.Posted 03/12/2011 at 00:18 by lanara -
Sehr schöner Blog, wieder einmal. Finde besonders den Bereich Items gut gemacht mit den Links zum entsprechenden Item. Fände es besser wenn du bei den Skills noch die dt. Bezeichnung dabei schreibst. Ist wenig Arbeit, aber nicht jeder hat gerade alle Necro Skills auf Englisch im Kopf (klar ist es schnell übersetzt, aber halt so^^).
Für was würdest du den Necro eher empfehlen? Gebiete oder Bosse? Macht der Bot vor Beginn der Scripte ein Skeletterun? Wie lange dauert das in etwa? Skelette werden auch ständig nachgecastet? Oder gibt es nach CE keine Leichen mehr?^^Posted 03/12/2011 at 00:25 by XxArenaxX -
Extrem gelungener Guide, bei dem ich eigentlich nicht einen Punkt finde, bei dem ich nicht zustimme.
Davon abgesehen sorgt das in Punkto Aufbau und Formatierung mal wieder für einen gewissen Neid meinerseits, wirklich sehr elegant gemacht.
Das mit dem Pride sehe ich übrigens genauso. Ist eher Kontraproduktiv, meine persönliche Vorliebe liegt hier bei einem Infinity Merc gepaart mit einem Insight Golem.
Lg
Muddy
Edit:
Das mit den Bezeichnungen sehe ich eigentlich nicht so, zumal es was das betrifft, bei mir gerade umgekehrt ist - mir sind die englischen Bezeichnungen sehr viel geläufiger als die deutschen.
Im übrigen gibt es sogar Bildchen zu jedem Skill, darum sollte das eigentlich auch so kein Problem sein.Posted 03/12/2011 at 00:34 by Muddy Waters
Updated 03/12/2011 at 00:37 by Muddy Waters -
Naja der vorteil bei der Konz aura is halt das deine Summons zusätzlich Ar kriegen, was schon einiges ausmacht (von meiner erfahrung her). Ausserdem wen man Beast trägt und der Söldner noch Pride in ner guten eth Waffe hat, macht der genügend dmg und mobs down zu kriegen. Aussertdem is eh Amplify dmg aufm Mob drauf.
Jedoch was Bossfights anbelangt wär mehr Cb von vorteil. Aber bei den Bossen hat man auch wieder genügend Summons, das es eigentlich egal ist, ob der Merc jetzt grossen dmg macht oder nicht.
Der grösste nachteil ist leider halt das Freezes Target. Aber damit lässt sich leben^^
Was mir noch einfiel für lowcost, wär der Arm von König Leoric oder wie der heisst. Hab den geliebt bis ich mir dan Beast angeschafft habePosted 03/12/2011 at 00:39 by Shrimps in Bierteig -
Mir ist beim schreiben auch schon aufgefallen, dass es teilweise ein Englisch/Deutscher Kauderwelsch ist, aber hatte heute auch nicht mehr die Motivation nochmal alles zu überarbeiten, hat lange genug gedauert das ganze zu schreiben.
Ich werde mir morgen nochmal alles durchlesen und noch etwas anpassen, da schreib ich dann auch die Deutschen Skillnamen noch mit hinzu.
Quote:
Skelette werden immer mal zwischendurch welche nachgecasted, für den Fall dass eins gestorben ist. Leider gibt es keine Möglichkeit die Anzahl der aktiven Skelette auszulesen, sonst könnte man es noch besser machen.
Quote:Naja der vorteil bei der Konz aura is halt das deine Summons zusätzlich Ar kriegen, was schon einiges ausmacht (von meiner erfahrung her). Ausserdem wen man Beast trägt und der Söldner noch Pride in ner guten eth Waffe hat, macht der genügend dmg und mobs down zu kriegen. Aussertdem is eh Amplify dmg aufm Mob drauf.
Jedoch was Bossfights anbelangt wär mehr Cb von vorteil. Aber bei den Bossen hat man auch wieder genügend Summons, das es eigentlich egal ist, ob der Merc jetzt grossen dmg macht oder nicht.
Der grösste nachteil ist leider halt das Freezes Target. Aber damit lässt sich leben^^
Was mir noch einfiel für lowcost, wär der Arm von König Leoric oder wie der heisst. Hab den geliebt bis ich mir dan Beast angeschafft habe
Bei den Stäben gibt es mehrere Uniques, die ganz brauchbar sind, habe da keins gesehen dass es Wert gewesen wäre extra zu erwähnen, vor allem weil es auch Magic/Rare Stäbe mit guten Stats gibt. Daher hab ich da alle Necrostäbe zusammengefasst.Posted 03/12/2011 at 00:43 by lanara
Updated 03/12/2011 at 00:55 by lanara -
Sorry ist kein ar^^ hab das falsch in errinerung gehabt, zitat von india, pala skills konz: Zudem beinhaltet diese Aura noch 20% Chance, dass ein Angriff auch ausgeführt wird, wenn der Char von einem Gegner getroffen wird.
Posted 03/12/2011 at 00:58 by Shrimps in Bierteig -
Jop, allerdings wird wohl keiner die Konz Aura wegen der 20% Uninterruptable Chance nehmen, sondern wegen dem Schaden. Das Problem daran ist vor allem, dass das Runenwort auch noch sauteuer ist mit 3 HR's drin, bevor ich mir das hole bau ich mir doch lieber Infinity und bin weit besser dran.
Posted 03/12/2011 at 01:09 by lanara -
Quote:
Es gibt zwar keine direkte Eigenschaft, über die sich direkt die Anzahl auslesen lässt, grundsätzlich lässt sich die Anzahl vorhandener Skelette aber recht einfach bestimmen.
Lg
MuddyPosted 03/12/2011 at 09:58 by Muddy Waters -
Quote:
Werd wohl doch mal wieder anfangen müssen zu botten und mir deine neue Version genauer anschaun. :P
Edit: Ok, hab mir gerade mal deine neue Version gesaugt und nach dem ersten überfliegen sah ich in etwa so aus:
Da haste dich ja mal wieder selbst übertroffen, muss mir jetzt erstmal etwas Zeit nehmen und das auf mich wirken lassen. :PPosted 03/12/2011 at 10:40 by lanara
Updated 03/12/2011 at 10:49 by lanara -
tolle arbeit und layout
kleiner tipp vllt noch:
skellis kann man sich bei pindel holen, so hat man schnell ~10 zusammen und kann eigentlich schon loslegen. natürlich nur wenn das rote protal noch offen istPosted 03/12/2011 at 11:07 by casper36 -
Posted 03/12/2011 at 11:12 by lanara -
ja klar, ich glaub ich hab mich unverständlich ausgedrückt...sry
ich meine die "schlafenden" skellis im vorhof von pindel kann man einfach so beschwören ohne dass der merc
die erste leiche beschaffen muss.Posted 03/14/2011 at 09:32 by casper36 -
Achso, das wusste ich noch garnicht, danke für den Hinweis. Habe es mal im Guide mit eingefügt.
Posted 03/14/2011 at 19:54 by lanara -
jep guter guide, das einzige was ich ändern würde ist die reihenfolge der zu bevorzugenden waffen. ich denke da rockt beast doch erheblich mehr wie hoto 1. merc killt schneller (ias und dam) ganze armee killt schneller wenn man mal selber spielt. und auch slot 2 könnte man noch erwähnen das leo + nen schrumpel mit +3 all(zb boneflame) sinn macht, zum ancasten der skells, wenn ich mal normal spiel um den gaylords mal zu zeigen wo der der richtige hammer hängt brauch ich eigentlich kein bo^^
Posted 03/16/2011 at 09:11 by moh69 -
Man sollte aber bedenken, dass nicht der Merc oder die Skelette zum töten der Mobs da sind, sondern der Necro selbst mit CE. Und da macht die größere Range meiner Meinung nach mehr aus, als IAS und Damage von Merc und Skeletten. Wenn dann würde ich Beast nur nehmen, wenn man vor allem einzelne starke Monster farmt.
Posted 03/16/2011 at 12:02 by lanara -
Den Merc mit Pride, dem Nec ein Beast in die Hand, den Iron Golem mit einer Insight und ab geht die Lutzi
Hatte jede Ladder so einen mit lvl 97 eigenhändig gespielt und der nec war der Hammer. Skeletons bei Pindle geholt und ab zu den Cows oder Dia gegangenPosted 03/24/2011 at 10:42 by King_killerko -
Was mir gerade eingefallen ist, was villeicht noch erwähnenswert währe. Hab den guide nochmals durchgeflogen, aber hab das jetzt ned gesehn. Wen du es aber doch schon erwähnt hast tut es mir leid. Jedenfalls, für UT und pvp hol ich mir gerne als revives, die stunmobs vom flammenfluss. Weiss nimma genau wie die Heissen, Undar oder sowas, so dicke fleischige moppels die dich mit ner keule stunnen.
Halt irgendwie eine kleine auflistung von praktischen mobs mit ihren fähigkeiten die sich lohnen als revives zu holen Wär denk ich mal noch was nettesPosted 03/27/2011 at 15:05 by Shrimps in Bierteig -
also wenn dir cb beim merc wichtig ist würde ich ja fast eher sagen mit ias /ed amn und verrat und gullis greifen! oder halt infi wenn man sein ce stärken möchte
auf jeden fall fehlt mir persönlich einfach verrat als merc amor ziehe ich oft sogar ner forti vor wegen dem dr/ias etc
hier is richtigPosted 03/27/2011 at 22:41 by toya_ger -
Obedience und Infinity haben auch beide 40% Crushing Blow, die Hone Sundan müsste wenn dann schon Eth sein, um mit den beiden mithalten zu können. Und ich glaube bevor man eine Eth Hone Sundan findet, hat man auch einen passenden Rohling für Obedience. Gulli habe ich im Guide schon mit aufgelistet. Treachery ist für den Anfang eine gute Rüstung, da hast du Recht, allerdings würde ich sie beim Normalen spielen nie einer Forti vorziehen. Wenn überhaupt, dann in UT, da der Merc da vor allem den Crushing Blow braucht und dabei dann stark von IAS und den Resis vor allem profitiert. Damit kommen wir auch schon zu Shrims.
Die Urdars sind zwar für UT gut, allerdings sind sie beim normalen spielen kaum zu gebrauchen, da sie beim Teleportieren die Collision Control triggern und man sich immer erst bewegen muss, bevor alle Minions loslaufen können. Nicht nur extrem nervig, sondern kann auch tödlich sein, wenn man botted und auf einmal alles auf den Necro einprügelt weil nichts mehr blockt. Für UT ist das etwas anderes, aber ich habe bewusst keinen UT Guide mit reingenommen, da das ganze schon etwas komplexer ist und gerade für Einsteiger die sich nicht so gut auskennen eher frustrierend enden kann. Dafür würde ich dann eher einen eigenen UT Summoner Guide empfehlen, in dem auch alles ausführlich erklärt wird, z.B. hier:Posted 03/27/2011 at 23:19 by lanara