Zealer funzt und ich nehme mich jetzt dem Poison-Necro an.
Es gibt im Inet zwei halbwegs funktionierende Versionen von D2nt-Scripten.
[Only registered and activated users can see links. Click Here To Register...]
Link2 fehlt mir jetzt gerade.
Der erstere Link liefert ein relativ gutes Script mit der Möglichkeit auch Summons zu benutzen, um den Necro Mf-Bot-tauglich zu machen.
Im Grunde funktioniert es default ganz gut, doch ich habe einige kleinere Änderungen vorgenommen und einige Fehler ausgebessert.
Hier die Scripte:
1. Am Anfang der NTAttack.ntl folgendes einfügen
direkt nach
2.In der
folgendes:
3.Die folgenden zwei Funktionen einfach irgendwo außerhalb der anderen Funktionen einfügen:
4.Diesen Teil
in der Funktion
einfügen, direkt unter den Paladinteil mit
5.Die drei Necrofunktionen sehen so aus:
6.Im Folgenden müsst ihr schauen, ob es bei euch nicht schon enthalten ist, wenn ja dann überspringt den Teil 6.:
öffnen, dort dann in der
direkt nach
folgendes einfügen
und am Ende der Funktion folgendes:
7.In der Funktion aus Teil 6. folgenden Fall einfügen:
Das Ganze speichern und schließen.
Ende des Scriptteils
Skillung ist:
Stats sind:
Str für Enigma und Spirit(falls ihr nen Spirit wollt) - Rest komplett in Vita
Equip ist:
Harle, Mara, Hoto (Deathweb fand ich nicht so gut auf dem Bot), Spirit, Eni, Arach, 2 Sojs, Trang Gloves, Marrowwalks (oder halt was anderes, aber Marrowwalks geben 20 Str(!) und 2 Punkte in Skellimastery) / Cta+Spirit im Switch
Merc: Optimal ist ein Auramerc, davon profitieren eure Skellis. Also möglich sind halt Pride,Faith,Lw,Bramble, Beast etc. oder halt etwas billigeres. Schaut nur das euer Merc Lifeleech un CnbF bekommt über den Helm oder die Rüstung.
Was meine Änderungen bringen:
Ansonsten habe ich einige Syntaxänderungen vorgenommen und kleinere Fehler herausgenommen.
TODO-Liste
Bei Vorschlägen, Verbesserungen und Kritik, einfach hier reinschreiben.
Mfg und hf
Es gibt im Inet zwei halbwegs funktionierende Versionen von D2nt-Scripten.
[Only registered and activated users can see links. Click Here To Register...]
Link2 fehlt mir jetzt gerade.
Der erstere Link liefert ein relativ gutes Script mit der Möglichkeit auch Summons zu benutzen, um den Necro Mf-Bot-tauglich zu machen.
Im Grunde funktioniert es default ganz gut, doch ich habe einige kleinere Änderungen vorgenommen und einige Fehler ausgebessert.
Hier die Scripte:
1. Am Anfang der NTAttack.ntl folgendes einfügen
Code:
var _CurseState; var _SpearCount = 0; var _SumCount = 0; var _SkeleCount = 0; var _MageCount = 0; var _SumBreak = 0; var _Start = 0; var _Count = 0;
Code:
var _NTA_SkillRange = new Array(8);
2.In der
Code:
NTA_Initialize()
Code:
case 91: //Lower Resist _NTA_SkillRange[i] = 30; break; case 92: //Poison Nova _NTA_SkillRange[i] = 10; break;
Code:
function SkeleDead()
{
var _breaker=0;
_target = NTC_FindUnit(NTC_UNIT_MONSTER);
do
{
_skiplist = new Array();
if(_target.mode == 12 /* dead */ && !_target.GetState(107) /* shattered */ && !_target.GetState(96) /* revived */ && !_target.GetState(56) /* terror curse */ && (_target.spectype == 1 || _target.spectype == 17) && _target.classid != 363 && _target.classid != 364 /* necro mage */ && _target.classid != 351 /* hydra */ && _target.classid != 352 /* hydra */ && _target.classid != 353 /* hydra */)
{
if(_skiplist.indexOf(_target.gid) < 0)
{
if((GetDistance(me, _target) < 15))
{
var _pos = me.GetOptimalAttackPos(_target.areaid, _target.x, _target.y, 3, 4);
if(_pos)
{
NTM_MoveTo(_target.areaid, _pos[0], _pos[1], 0);
if(!NTC_CastSkill(70, NTC_HAND_RIGHT,_target.x+2,_target.y+1))
{
_breaker++;
_skiplist.push(_target.gid);
}
else
{
_breaker++;
_SkeleCount++;
_SumCount++;
}
}
}
else
_skiplist.push(_target.gid);
}
}
if (_breaker >= 1 || _target == null)
{
break;
_breaker = 0;
}
}
while(_target.GetNext());
}
function MageDead()
{
var _breaker=0;
_target = NTC_FindUnit(NTC_UNIT_MONSTER);
do
{
_skiplist = new Array();
//spectype 1 = regular
//spectype 9 = boss
//spectype 11 = unique
//spectype 13 = champion
//spectype 17 = minions
if(_target.mode == 12 /* dead */ && !_target.GetState(107) /* shattered */ && !_target.GetState(96) /* revived */ && !_target.GetState(56) /* terror curse */ && (_target.spectype == 1 /* regular monster */ || _target.spectype == 17 /* minion monster */) && _target.classid != 363 /* necro skeleton */ && _target.classid != 364 /* necro mage */ && _target.classid != 351 /* hydra */ && _target.classid != 352 /* hydra */ && _target.classid != 353 /* hydra */)
{
if(_skiplist.indexOf(_target.gid) < 0)
{
if((GetDistance(me, _target) < 15))
{
var _pos = me.GetOptimalAttackPos(_target.areaid, _target.x, _target.y, 3, 4);
if(_pos)
{
NTM_MoveTo(_target.areaid, _pos[0], _pos[1], 0);
if(!NTC_CastSkill(80, NTC_HAND_RIGHT,_target.x+2,_target.y+1))
{
_breaker++;
_skiplist.push(_target.gid);
}
else
{
_breaker++;
_MageCount++;
_SumCount++;
}
}
}
else
_skiplist.push(_target.gid);
}
}
if (_breaker >= 1 || _target == null)
{
break;
_breaker = 0;
}
}
while(_target.GetNext());
}
Code:
if(me.classid == NTC_CHAR_CLASS_NECROMANCER)
{
_SumBreak = 0;
//NTC_CastSkill(68, NTC_HAND_RIGHT);
if(_attackcount > 2)
{
NTC_CastSkill(68, NTC_HAND_RIGHT); // Bone Armor
//==============This is where summon script begins==============
if(_SkeleCount < NTConfig_Skele + 1 || _MageCount < NTConfig_Mage + 1)
{
if (_Count == _Count)
{
for(var i = 0 ; i < 2 ; i++)
{
_Start += 1
}
}
if (_Start < 3)
{
if(_SkeleCount == _MageCount)
{
for(var i = 0 ; i < 10 ; i++)
{
SkeleDead();
}
}
else if(_SkeleCount > _MageCount || _SkeleCount > NTConfig_Skele + 1)
{
for(var i = 0 ; i < 10 ; i++)
{
MageDead();
}
}
else if(_MageCount > _SkeleCount || _SkeleMage > NTConfig_Mage + 1)
{
for(var i = 0 ; i < 10 ; i++)
{
SkeleDead();
}
}
}
else if (_Start > 2)
{
if(_SkeleCount == _MageCount)
{
for(var i = 0 ; i < 5 ; i++)
{
SkeleDead();
}
}
else if(_SkeleCount > _MageCount || _SkeleCount > NTConfig_Skele + 1)
{
for(var i = 0 ; i < 5 ; i++)
{
MageDead();
}
}
else if(_MageCount > _SkeleCount || _SkeleMage > NTConfig_Mage + 1)
{
for(var i = 0 ; i < 5 ; i++)
{
SkeleDead();
}
}
}
}
}
}
Code:
NTA_ClearPosition()
Code:
if(me.classid == NTC_CHAR_CLASS_PALADIN) ...
5.Die drei Necrofunktionen sehen so aus:
Code:
function NTA_NecromancerAttackPatternInt()
{
/**
*Amplify Damage 66
*Teeth 67
*Bone Armor 68
*Skeleton Mastery 69
*Raise Skeleton 70
*Dim Vision 71
*Weaken 72
*Poison Dagger 73
*Corpse Explosion 74
*Clay Golem 75
*Iron Maiden 76
*Terror 77
*Bone Wall 78
*Golem Mastery 79
*Raise Skeletal Mage 80
*Confuse 81
*Life Tap 82
*Poison Explosion 83
*Bone Spear 84
*BloodGolem 85
*Attract 86
*Decrepify 87
*Bone Prison 88
*Summon Resist 89
*IronGolem 90
*Lower Resist 91
*Poison Nova 92
*Bone Spirit 93
*FireGolem 94
*Revive 95
*/
var _maxindex, _maxskill;
var _avgskilllevel = new Array();
_avgskilllevel[0] = me.GetSkill(92, false) + me.GetSkill(83, false) + me.GetSkill(73, false); //poison nec
_maxindex = -1;
_maxskill = 0;
for(var i = 0 ; i < _avgskilllevel.length ; i++)
{
if(_avgskilllevel[i] > _maxskill)
{
_maxindex = i;
_maxskill = _avgskilllevel[i];
}
}
switch(_maxindex)
{
case 0: // Poison Nec
NTConfig_AttackSkill[1] = 92;
NTConfig_AttackSkill[2] = 0;
NTConfig_AttackSkill[3] = 92;
NTConfig_AttackSkill[4] = 0;
}
return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
}
function NTA_NecromancerAttackInt(target, firstorder)
{
var _primaryindex;
if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
{
if(!NTTMGR_VisitTown())
return 0;
}
function NTA_LevelBoss(monster)
{
var _isLevelBoss = false;
switch(monster.classid)
{
case 156: //Andariel
_isLevelBoss = true;
break;
case 211: //Duriel
_isLevelBoss = true;
break;
case 242: //Mephisto
_isLevelBoss= true;
break;
case 243: //Diablo
_isLevelBoss = true;
break;
case 544: //Baal
_isLevelBoss = true;
break;
}
return _isLevelBoss;
}
if(NTA_LevelBoss(target) && NTConfig_AmplifyBoss == true)
{
if(target.GetState(9))
{
}
else
{
if(!NTC_CastSkill(66, NTC_HAND_RIGHT, target.x, target.y))
return 2;
return 3;
}
}
if((!NTA_LevelBoss(target)) && NTA_GetResistance(target, NTA_DAMAGE_POISON) >= NTConfig_LowerResist)
{
if(target.GetState(61))
{
}
else
{
if(!NTC_CastSkill(91, NTC_HAND_RIGHT, target.x, target.y))
return 2;
return 3;
}
}
if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
{
if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
return 2;
return 3;
}
_primaryindex = (target.spectype&0x0A) ? 1 : 3;
if(!NTA_NecromancerCastSkillInt(_primaryindex, target))
return 2;
NTC_PingDelay(NTConfig_PsnNovaWait);
return 3;
}
function NTA_NecromancerCastSkillInt(index, target)
{
if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
{
if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
}
if(NTConfig_AttackSkill[index+1] > 0)
{
if(GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4))
{
var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);
if(_pos)
NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
}
return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
}
if((NTA_GetResistance(target, NTA_DAMAGE_POISON) >= NTConfig_LowerResist) && (!target.GetState(61)))
{
do{
return NTC_CastSkill(91, NTC_HAND_RIGHT, target);
}
while(target.GetState(61));
}
return false;
}
Code:
NTPrecast.ntl
Code:
function NTP_DoPrecast(refresh)
Code:
NTP_DoPrecastCTA(refresh);
Code:
var _castBoTwice = false;
Code:
if(_castBoTwice) NTP_DoPrecastCTA(refresh);
7.In der Funktion aus Teil 6. folgenden Fall einfügen:
Code:
case NTC_CHAR_CLASS_NECROMANCER:
if(refresh || !me.GetState(14))
NTC_CastSkill(68, NTC_HAND_RIGHT); // Bone Armor
if(refresh)
{
_castBoTwice = true;
if(NTConfig_Golem == 2)
NTC_CastSkill(85, NTC_HAND_RIGHT); // Blood Golem
else if(NTConfig_Golem == 3)
NTC_CastSkill(94, NTC_HAND_RIGHT); // Fire Golem
else
NTC_CastSkill(75, NTC_HAND_RIGHT); // Clay Golem
}
break;
Ende des Scriptteils
Skillung ist:
- "PnB Tree": alle Talente im Poisonteil komplett 20, je 1 Punkt in Knochenschild und seine Synnergien
- "Cursetree": ihr braucht 1 Punkt im Lower Resist Fluch ganz unten, also runterskillen.
- "Summontree": je 1 Punkt bis Feuergolem runter, 1 Punkt in Golembeherrschung und Summonresis, Skele Mastery 1 Punkt (falls ihr keine Necroboots tragt) und die beiden Skeletypen kriegen den rest eurer Punkte (dürft selber entscheiden, ob ihr eher Phys- oder Magieschaden austeilen wollt) wichtig: Keine Revives, die buggen nur.
Stats sind:
Str für Enigma und Spirit(falls ihr nen Spirit wollt) - Rest komplett in Vita
Equip ist:
Harle, Mara, Hoto (Deathweb fand ich nicht so gut auf dem Bot), Spirit, Eni, Arach, 2 Sojs, Trang Gloves, Marrowwalks (oder halt was anderes, aber Marrowwalks geben 20 Str(!) und 2 Punkte in Skellimastery) / Cta+Spirit im Switch
Merc: Optimal ist ein Auramerc, davon profitieren eure Skellis. Also möglich sind halt Pride,Faith,Lw,Bramble, Beast etc. oder halt etwas billigeres. Schaut nur das euer Merc Lifeleech un CnbF bekommt über den Helm oder die Rüstung.
Was meine Änderungen bringen:
- Necro castet Amplify Damage auf Aktbosse.
- Von Frost zerschmetterte Mobs werden ausgelassen.
- Golem kriegt nun auch den Bo ab.
Ansonsten habe ich einige Syntaxänderungen vorgenommen und kleinere Fehler herausgenommen.
TODO-Liste
- Range zu DeSeis und Corruptor of Souls im Chaos Sanktuarium stimmt noch nicht ganz.
- Summons werden manchmal unnötigerweise vorgenommen, obwohl genug Summons vorhanden sind.
- Eventuell noch Poison Explosion einbauen für schnelleren Killspeed.
Bei Vorschlägen, Verbesserungen und Kritik, einfach hier reinschreiben.
Mfg und hf