|
You last visited: Today at 18:22
Advertisement
[D2NT] Public Botten for Dummies
Discussion on [D2NT] Public Botten for Dummies within the Diablo 2 forum part of the Other Online Games category.
04/18/2011, 23:58
|
#1531
|
elite*gold: 139
Join Date: Oct 2006
Posts: 12,058
Received Thanks: 24,258
|
Die Diablo Leader und Leechfight Scripte sind aufeinander abgestimmt, wenn du einen Leader hast der einen anderen Bot nutzt und vom CS Eingang aus startet, wird das so also nicht funktionieren. Zu dem Problem mit den Siegeln habe ich vor ein paar Seiten eine überarbeitetes DiabloLeechFight Script gepostet, kannst ja mal schaun ob du es findest.
Was Baal betrifft schau mal in die FAQ.
|
|
|
04/19/2011, 00:10
|
#1532
|
elite*gold: 0
Join Date: Nov 2008
Posts: 455
Received Thanks: 85
|
Quote:
Originally Posted by lanara
Die Diablo Leader und Leechfight Scripte sind aufeinander abgestimmt, wenn du einen Leader hast der einen anderen Bot nutzt und vom CS Eingang aus startet, wird das so also nicht funktionieren. Zu dem Problem mit den Siegeln habe ich vor ein paar Seiten eine überarbeitetes DiabloLeechFight Script gepostet, kannst ja mal schaun ob du es findest.
Was Baal betrifft schau mal in die FAQ.
|
was du dir immer wieder für ne mühe gibst - unglaublich!
es fühlt sich fast an als würdest du dafür bezahlt werden ^^
danke vielmals für deine hilfe.
|
|
|
04/19/2011, 00:52
|
#1533
|
elite*gold: 139
Join Date: Oct 2006
Posts: 12,058
Received Thanks: 24,258
|
Der Dank der User ist mir Lohn genug.
|
|
|
04/19/2011, 14:19
|
#1534
|
elite*gold: 0
Join Date: Nov 2008
Posts: 455
Received Thanks: 85
|
hiho. ich hab wieder ne dumme frage. ich hoffe mir wird dafür verziehen ^^
und zwar ist jetzt alles fast so wie ichs mir vorstelle. es gibt nur noch 2 probleme:
der leaderbot ist so eingestellt, dass er vor jedem siegelweg ein tp macht und 5 sekunden lang stehen bleibt. das, was mich hierbei stört, ist, dass er jedes mal, wenn er items hat, in die stadt zurueck geht (sei es nur ein small charm).
das letztere (komische problem): der bot scheint nicht mehr runs zu machen, wenn ich den bildschirm ausmache (völlig merkwürdig). ich hab naemlich noch nen bluebird bot laufen und der läuft, obwohl der bildschirm aus ist. gibts dafür ne erklärung?
edit: manchmal laeuft der pala auch einfach in die stadt um den stash anzuklicken. items muss er nich mal dabei haben
|
|
|
04/19/2011, 16:17
|
#1535
|
elite*gold: 13
Join Date: Jul 2010
Posts: 308
Received Thanks: 25
|
et läuft jetzt wenn ich zugucken relativ gut...
nur der shouter hat quasi jeden run "NTA_KillMonster() failed (The Worldstone Chamber)" bei Baal und leaved ca 4 sekunden bevor baal den löffel abgibt
auf dauer eher ungut  ich hab schon versucht es zu beheben aber bin gefailed.. - evtl hast du ja ne lösung parat
Code:
NTConfig_AttackSkill[0] = 0; // Dieser Skill wird nur einmal zu Beginn gecastet. 0 = Keiner
NTConfig_AttackSkill[1] = 154; // Primärer Angriff gegen Bosse
NTConfig_AttackSkill[2] = 154; // Sekundärer Angriff gegen Bosse
NTConfig_AttackSkill[3] = 154; // Primärer Angriff gegen normale Monster
NTConfig_AttackSkill[4] = 154; // Sekundärer Angriff gegen normale Monster
NTConfig_AttackSkill[5] = 0; // Primärer Angriff gegen immune Monster
NTConfig_AttackSkill[6] = 0; // Sekundärer Angriff gegen immune Monster
NTConfig_AttackSkill[7] = 154; // Angriff gegen Bosse
|
|
|
04/19/2011, 17:39
|
#1536
|
elite*gold: 0
Join Date: May 2010
Posts: 93
Received Thanks: 5
|
hey, es wäre doch geil, wenn man als leecher (bzw. leech-fighter so wie ich) im d2nt manager ablesen könnte, warum man in bestimmte games nicht reingekommen ist
also beispielsweise eine meldung wie "game is full" oder "spiel wurde nicht gefunden" angeben...
wenn möglich noch ne statistik dazu 
dann könnt man gut die betreffenden werte so einstellen, dass man die fehlermeldungen minimieren kann
|
|
|
04/19/2011, 18:34
|
#1537
|
elite*gold: 0
Join Date: Apr 2011
Posts: 163
Received Thanks: 46
|
Hallo liebe ePvPers,
ich bin ganz neu hier und wage gerade meine ersten Schritte auf diesem Gebiet. Ich habe mich bemüht den richtigen Thread zu erwischen, weiss jedoch nicht, ob ich hier 100% richtig bin.
Ich habe ein paar allgemeine Fragen und ein, zwei spezielle Fragen zum Bot...
Zunächst jedoch zu meiner Ausgangsposition:
Ich bin classic-Spieler und möchte 2 Dinge "gebacken" bekommen.
(1) einen Diablo-NM-FK-MF-Bot.
(2) einen FollowBot Marke RedVex + Automation + Condom
Ich habe eine Testversion von Sandboxie, kann also nur einmal "boxed" starten und einmal ohne. Frage: wie komme ich an eine Linzenz für Sandboxie ran, ohne mir das Dingens teuer kaufen zu müssen ?
[ >>Zu (1)<< ]
Ich habe mir die Anleitung zum D2NT TheBlueBird durchgelesen. Alles schön und gut aber: Ich brauche einen BO-Barb, der meiner Bot-Sorc BO gibt bevor sie den MF-Run startet. Frage2: Wie kann ich einen Support-Char (hier BO-Barb) einstellen, der nicht mitlaufen soll, sondern a) das Spiel öffnet (weil Sorc das Dia-Q nicht abschliessen soll) und b) nur am WP BO gibt ?
Geht das überhaupt, weil der Leader (sorc) ja normalerweise die Spiele erstellen muss ?
Frage3: Wie kann ich einstellen, dass die Sorc ihre Zitterrüstung nachcastet ? Wo man es einstallt, dass sie es zu Beginn des Runs ancastet weiss ich...
[>>Zu (2)<<]
Ich würde ganz gerne einen FollowBot zum laufen bekommen - ganz so wie Lanara es in hervorragender Form beschrieben hat. Dazu habe ich - bis jetzt - nur zwei kleine Fragen: a) RedVex ist der Proxie, also die Schnittstelle zwischen B.Net und Client ? D.h. ich brauche mir keinen dubiosen, externen Proxie-Server suchen, um das Programm laufen zu lassen ?
Und b) Funktioniert das ausschließlich über Sandboxie, wenn ich 1 Leader und 3 Follow-Chars leveln will ? Bisher hatte ich SUperior als Switchprogramm um zwischen verschiedenen Benutzer-Accs hin- und herzuschalten um mehrmals zu starten...
Vielen Dank schonmal für die kommenden Antworten und die Geduld mit einem Nuup  Würde mich auch freuen, wenn ich jemanden per PN mit evtl. Folge-Fragen bombadieren darf, damit ich nicht das Forum zuspammen muss mit meinen "intelligenten" Fragen - sozusagen ein Mentor/eine Mentorin, der/die mir hilft meine Programme fein zu justieren...
|
|
|
04/19/2011, 20:08
|
#1538
|
elite*gold: 139
Join Date: Oct 2006
Posts: 12,058
Received Thanks: 24,258
|
Quote:
Originally Posted by schmuselord1
und zwar ist jetzt alles fast so wie ichs mir vorstelle. es gibt nur noch 2 probleme:
der leaderbot ist so eingestellt, dass er vor jedem siegelweg ein tp macht und 5 sekunden lang stehen bleibt. das, was mich hierbei stört, ist, dass er jedes mal, wenn er items hat, in die stadt zurueck geht (sei es nur ein small charm).
das letztere (komische problem): der bot scheint nicht mehr runs zu machen, wenn ich den bildschirm ausmache (völlig merkwürdig). ich hab naemlich noch nen bluebird bot laufen und der läuft, obwohl der bildschirm aus ist. gibts dafür ne erklärung? 
|
#1 Sollte er eigentlich nicht machen, außer der Merc ist gestorben oder du hast irgendwas an den SafeChecks geändert.
#2 Wtf?

Dem Bot ist es egal, ob der Bildschirm an ist oder nicht, er würde sogar weiterlaufen wenn garkein Bildschirm angeschlossen ist. Denke mal dein Problem liegt irgendwo anders, bringt er denn eine Fehlermeldung oder so?
Quote:
Originally Posted by L4V3y
et läuft jetzt wenn ich zugucken relativ gut...
nur der shouter hat quasi jeden run "NTA_KillMonster() failed (The Worldstone Chamber)" bei Baal und leaved ca 4 sekunden bevor baal den löffel abgibt
auf dauer eher ungut  ich hab schon versucht es zu beheben aber bin gefailed.. - evtl hast du ja ne lösung parat
Code:
NTConfig_AttackSkill[0] = 0; // Dieser Skill wird nur einmal zu Beginn gecastet. 0 = Keiner
NTConfig_AttackSkill[1] = 154; // Primärer Angriff gegen Bosse
NTConfig_AttackSkill[2] = 154; // Sekundärer Angriff gegen Bosse
NTConfig_AttackSkill[3] = 154; // Primärer Angriff gegen normale Monster
NTConfig_AttackSkill[4] = 154; // Sekundärer Angriff gegen normale Monster
NTConfig_AttackSkill[5] = 0; // Primärer Angriff gegen immune Monster
NTConfig_AttackSkill[6] = 0; // Sekundärer Angriff gegen immune Monster
NTConfig_AttackSkill[7] = 154; // Angriff gegen Bosse
|
Also den AttackSkill[7] kannste rausnehmen, der wird beim Barb sowieso nicht genutzt. Die Sekundären Angriffe kannst du auch auf 0 stellen, da sie 1. die gleichen sind wie die Primären und 2. der Primäre keinen Cooldown hat und der Sekundäre dadurch eh nicht genutzt wird. Warum er bei Baal leaved kann ich mir auch nicht wirklich erklären, ported er sich denn überhaupt hin und versucht anzugreifen?
Quote:
Originally Posted by lappen_reihern
hey, es wäre doch geil, wenn man als leecher (bzw. leech-fighter so wie ich) im d2nt manager ablesen könnte, warum man in bestimmte games nicht reingekommen ist
also beispielsweise eine meldung wie "game is full" oder "spiel wurde nicht gefunden" angeben...
wenn möglich noch ne statistik dazu 
dann könnt man gut die betreffenden werte so einstellen, dass man die fehlermeldungen minimieren kann
|
Naja, meiner Meinung nach ist das die Arbeit nicht wirklich wert. Schneller als direkt nach der Grünen Meldung zu joinen geht sowieso nicht, also ist die Information, dass das Game voll war auch nur eine Randnotiz, wenn das Spiel nicht gefunden wurde hatte der Leader wohl FtJ, woran man als Leecher auch nichts ändern kann.
Quote:
Originally Posted by Faultierchen
Hallo liebe ePvPers,
ich bin ganz neu hier und wage gerade meine ersten Schritte auf diesem Gebiet. Ich habe mich bemüht den richtigen Thread zu erwischen, weiss jedoch nicht, ob ich hier 100% richtig bin.
Ich habe ein paar allgemeine Fragen und ein, zwei spezielle Fragen zum Bot...
Zunächst jedoch zu meiner Ausgangsposition:
Ich bin classic-Spieler und möchte 2 Dinge "gebacken" bekommen.
(1) einen Diablo-NM-FK-MF-Bot.
(2) einen FollowBot Marke RedVex + Automation + Condom
Ich habe eine Testversion von Sandboxie, kann also nur einmal "boxed" starten und einmal ohne. Frage: wie komme ich an eine Linzenz für Sandboxie ran, ohne mir das Dingens teuer kaufen zu müssen ?
[ >>Zu (1)<< ]
Ich habe mir die Anleitung zum D2NT TheBlueBird durchgelesen. Alles schön und gut aber: Ich brauche einen BO-Barb, der meiner Bot-Sorc BO gibt bevor sie den MF-Run startet. Frage2: Wie kann ich einen Support-Char (hier BO-Barb) einstellen, der nicht mitlaufen soll, sondern a) das Spiel öffnet (weil Sorc das Dia-Q nicht abschliessen soll) und b) nur am WP BO gibt ?
Geht das überhaupt, weil der Leader (sorc) ja normalerweise die Spiele erstellen muss ?
Frage3: Wie kann ich einstellen, dass die Sorc ihre Zitterrüstung nachcastet ? Wo man es einstallt, dass sie es zu Beginn des Runs ancastet weiss ich...
[>>Zu (2)<<]
Ich würde ganz gerne einen FollowBot zum laufen bekommen - ganz so wie Lanara es in hervorragender Form beschrieben hat. Dazu habe ich - bis jetzt - nur zwei kleine Fragen: a) RedVex ist der Proxie, also die Schnittstelle zwischen B.Net und Client ? D.h. ich brauche mir keinen dubiosen, externen Proxie-Server suchen, um das Programm laufen zu lassen ?
Und b) Funktioniert das ausschließlich über Sandboxie, wenn ich 1 Leader und 3 Follow-Chars leveln will ? Bisher hatte ich SUperior als Switchprogramm um zwischen verschiedenen Benutzer-Accs hin- und herzuschalten um mehrmals zu starten...
Vielen Dank schonmal für die kommenden Antworten und die Geduld mit einem Nuup  Würde mich auch freuen, wenn ich jemanden per PN mit evtl. Folge-Fragen bombadieren darf, damit ich nicht das Forum zuspammen muss mit meinen "intelligenten" Fragen - sozusagen ein Mentor/eine Mentorin, der/die mir hilft meine Programme fein zu justieren... 
|
#1
1. Glaube du suchst sowas hier: 
2. Die Spiele erstellt der, dem du den NTBot Entry Point im Profil zuweist, das kann genausogut der Leecher sein, dann muss halt der Leader den NTBotLeech als Entry Point nutzen.
3. Das macht sie normal automatisch beim refreshen.
#2
1. Ja, RedVex ist der Proxy, du brauchst also nicht extra einen suchen.
2. Leg einfach im D2NT Manager einfach ein neues Profil an, du kannst mit dem D2NT soviele D2 Games starten, wie dein Rechner verkraftet.
PS: Ich würde ja gerne sagen es gibt keine dummen Fragen, aber leider habe ich schon Posts von DavLad gesehen. Aber eure Fragen waren definitiv nicht dumm.
|
|
|
04/19/2011, 20:16
|
#1539
|
elite*gold: 13
Join Date: Jul 2010
Posts: 308
Received Thanks: 25
|
Quote:
|
Warum er bei Baal leaved kann ich mir auch nicht wirklich erklären, ported er sich denn überhaupt hin und versucht anzugreifen?
|
er portet zu baal, geht nen paar schritte nach oben und kriegt den error - ich edite die charconfig gleich mal und guck ihm zu
kann man die barbconfig eigentlich so einstellen dass er wie der pala attacked und nich wie ne sorc? kommt nämlich nich so gut wenn er irgendwo steht und versucht nen monster am screenrand anschreien wil was er garnicht erreicht ;p
edit2: ok - er geht nur zu baal und kriegt den error und leaved ^^ - dieses mal 11 sekunden vor den anderen ;p
|
|
|
04/19/2011, 20:44
|
#1540
|
elite*gold: 0
Join Date: Nov 2008
Posts: 455
Received Thanks: 85
|
Quote:
Originally Posted by lanara
#1 Sollte er eigentlich nicht machen, außer der Merc ist gestorben oder du hast irgendwas an den SafeChecks geändert.
#2 Wtf?

Dem Bot ist es egal, ob der Bildschirm an ist oder nicht, er würde sogar weiterlaufen wenn garkein Bildschirm angeschlossen ist. Denke mal dein Problem liegt irgendwo anders, bringt er denn eine Fehlermeldung oder so?
|
joah. mich hats auch gewundert. ich bin ca 6 uhr früh schlafen gegangen, dann bin ich gegen 11 aufgewacht, hab den bot kurz überprüft und bin wieder schlafen gegangen. 14 uhr hab ich dann wieder den bildschirm angemacht und war stutzig, dass meine ama keine exp zwischen 6-11 uhr und 11-14 uhr bzw runs gemacht mit dem pala gemacht hat, obwohl der bot beim einschalten des pc's am laufen war. die logs haben mir gezeigt, dass keine runs stattgefunden hatten, während ich schlief.
aber beim sorc-script von bluebird schon. der lief durchgängig.
|
|
|
04/19/2011, 20:58
|
#1541
|
elite*gold: 0
Join Date: Nov 2009
Posts: 46
Received Thanks: 1
|
Habe jetzt einen Leader und einen Leecher laufen. Der Leecher hat in einem Baalrun mindestens 2 mal drop. Weiß einer wobei hier der Fehler ist?
|
|
|
04/19/2011, 21:07
|
#1542
|
elite*gold: 139
Join Date: Oct 2006
Posts: 12,058
Received Thanks: 24,258
|
Quote:
Originally Posted by L4V3y
er portet zu baal, geht nen paar schritte nach oben und kriegt den error - ich edite die charconfig gleich mal und guck ihm zu
kann man die barbconfig eigentlich so einstellen dass er wie der pala attacked und nich wie ne sorc? kommt nämlich nich so gut wenn er irgendwo steht und versucht nen monster am screenrand anschreien wil was er garnicht erreicht ;p
edit2: ok - er geht nur zu baal und kriegt den error und leaved ^^ - dieses mal 11 sekunden vor den anderen ;p
|
Versuch mal diese NTAttack zu nehmen:
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 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 154: //WarCry
_NTA_SkillRange[i] = 3;
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] = 45;
NTConfig_AttackSkill[3] = 59;
NTConfig_AttackSkill[4] = 45;
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(!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(154, NTC_HAND_RIGHT, 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);
}
}
}
Quote:
Originally Posted by schmuselord1
joah. mich hats auch gewundert. ich bin ca 6 uhr früh schlafen gegangen, dann bin ich gegen 11 aufgewacht, hab den bot kurz überprüft und bin wieder schlafen gegangen. 14 uhr hab ich dann wieder den bildschirm angemacht und war stutzig, dass meine ama keine exp zwischen 6-11 uhr und 11-14 uhr bzw runs gemacht mit dem pala gemacht hat, obwohl der bot beim einschalten des pc's am laufen war. die logs haben mir gezeigt, dass keine runs stattgefunden hatten, während ich schlief.
aber beim sorc-script von bluebird schon. der lief durchgängig.
|
Hast du den Bluebird bzw. meinen mit einer Sandbox gestartet? 2 D2NT Manager können nicht ohne weiteres nebeneinander laufen, da sonst nur einer von beiden etwas macht.
|
|
|
04/19/2011, 21:32
|
#1543
|
elite*gold: 0
Join Date: Nov 2008
Posts: 455
Received Thanks: 85
|
Quote:
Originally Posted by lanara
Hast du den Bluebird bzw. meinen mit einer Sandbox gestartet? 2 D2NT Manager können nicht ohne weiteres nebeneinander laufen, da sonst nur einer von beiden etwas macht.
|
jo. ich probiers heute nacht nochmal. kann sein, dass ich zwei game.exe in eine box geschlossen habe. das erklärt zwar nicht, wieso es beim zugucken geklappt hatte, aber vielleicht ist das problem dann behoben.
|
|
|
04/20/2011, 15:07
|
#1544
|
elite*gold: 0
Join Date: Nov 2008
Posts: 455
Received Thanks: 85
|
hiho. hab nochma ne frage ^^
ich habs jetzt aufgegeben mit dem diascript (krieg das mit den waypoints nicht hin; es ist sehr schwer mit scripts von anderen leuten zu arbeiten, weil man die funktionen nicht im kopf hat und von funktion zu funktion springen muss, damit man den genauen ablauf versteht). und deswegen wollte ich fragen, ob ich mit dem co-leecherscript auch andariel / mephisto machen könnte, während der leaderbot dia macht. habs probiert /bots/NTAndariel.NTJ einzufügen und dann NTConfig_Script.push("NTEldritch.ntj") in /char_configs/ char.NTL reinzuschreiben. allerdings findet er dann den weg nicht von akt5 bis zum wp bzw weiß nicht, was er machen soll. das liegt wahrscheinlich daran, dass der entry point bei ntbotleech.ntj liegt. hab also versucht den standart entry point mit dem ntbotleech.ntj zu vergleichen, aber das ist so unheimlich kompliziert, weil ich wieder von funktion zu funktion springen muss und es extrem schwierig ist, weil ich mich wenig mit dem script auskenne. falls es irgendeine zeile gibt, die ich einfach nur einfügen muss - könntest du mir die bitte nennen?
|
|
|
04/20/2011, 16:11
|
#1545
|
elite*gold: 139
Join Date: Oct 2006
Posts: 12,058
Received Thanks: 24,258
|
Mit dem Entry Point hat das ganze garnichts zu tun, der bestimmt nur auf welchem Weg der Char ins Spiel kommt, mit dem Ablauf im Spiel hat der dann so gesehen nichts mehr am Hut. Du musst das Andariel Script in das Verzeichnis scripts\NTBot\bots kopieren und dann in deiner Charconfig mit
Code:
NTConfig_Script.push("NTAndariel.ntj");
laden. Am besten nimmst du dafür die im Sternenlooper enthaltenen Scripte, die sind mit dieser Version ohne weitere Änderungen kompatibel. Du musst nur darauf achten, dass die Datei die du in der Config lädst auch genauso heißt wie die, die sich im bots Ordner befindet.
|
|
|
 |
|
Similar Threads
|
[D2NT] How to do Public
07/04/2011 - Diablo 2 - 51 Replies
Also da ich gefragt wurde ob ich das nicht machen könnte, habe ich mir gedacht da ich grade nichts zu tuen habe, wieso den eigentlich nicht.
Falls jemand Maphack im Fullwindow spielen will:
http://img824.imageshack.us/img824/1725/66387846. png
Hacken Raus nehmen.
CREADITS TO:
Sternlooper
TheBluebird
Muddy_Waters
|
D2Nt Public Pickit
10/18/2010 - Diablo 2 - 4 Replies
Der Bot ist super aber er pickt einfach sachen viel zu langsame zb small charms. Da sind normale Spieler schneller. Kann man das einstellen das er sachen sofort beim droppen pickt??
|
Classic botten mit D2nt
07/09/2010 - Diablo 2 Programming - 2 Replies
Huhu :) ich möchte classic anfangen und wollte mal fragen ob es tolle d2nt classic scripts gibt, bzw. was ich ändern muss oder ob es auch non enigma scripts gibt für paladin oder so^^
Gibt aufjeden ein THX :)
Und eine Pickit für Classic wäre auch nice^^
Oder gibs andere Classic bots ?
|
Public Baal mit D2NT
04/13/2009 - Diablo 2 - 3 Replies
könnt ihr mir vll sagen was ich machen muss um mit den bot public baals runs zu machen wäre echt cool in dern config auf true stellen ist mir klar aber wie stell ich game name und sowas alles ein und brauch ich dafür nicht wieder eine config datei wäre echt cool wenn ihr mir helfen könntet ;)
|
All times are GMT +1. The time now is 18:23.
|
|