[D2NT] Followscript

07/14/2010 15:22 flusen#1
moin,
vor einiger Zeit kam ich mal auf den Trichter nen kleines Followscript für den D2NT zu schreiben.
Das Ergebnis ist zwar noch lange nicht Perfekt/Ausgereift, aber nachdem es meinen Wünschen genügt, habe ich leider noch nicht wieder daran weitergearbeitet.
Daher dachte ich mir, bevor es in der Versenkung verschwindet kann der ein oder andere von euch evtl. noch nutzen daraus ziehen oder mir neuen Ansporn durch Verbesserungsvorschläge usw geben!

Was kann/macht es überhaupt:
- Folgt dem Leader in den entsprechenden Akt
- führt die üblichen Stadtätigkeiten aus (kaufen, verkaufen, etc)
- wartet dort auf TP (und nimmt es auch nur wenn Portal- & Leaderarea übereinstimmen)
- rennt dem Leader hinterher
- kämpft Unterwegs mit (über Variable steuerbar)
- sammelt ein (über Variable steuerbar)
- folgt durch Portale/Stairs
- geht wieder in die Stad und wartet wenn es den Leader "aus den Augen" verliert

Installation:
- Script im Anhang runterladen und in ...\scripts\NTBot\bots\ speichern
- in die Charconfig NTConfig_Script.push("NTFollow.ntj"); einfügen

Konfiguration:
- in der Charconfig public auf true setzen
- in der NTFollow.ntj folgende Werte anpassen:
Code:
 var _fight = true; // true=mitkämpfen - false=nur hinterher rennen
   var _pick = true; // true=items & co aufsammeln - false=nichts aufsammeln 
   NTConfig_Leader = ""; // Name des Leader-Chars
Zu Beachten:
- Will man z.B. einen neuen Char folgen lassen (level1) sollte man in der Charconfig den Merc auf false setzen und dem Char am besten ne Hand voll Gold hinwerfen sowie nen TpFolianten kaufen - sonst rennt der nur wie blöd durch die Gegend inner Stadt
- Bei Chars ohne Eni/Teleport muss man entweder den "Orginal" D2nt3.0 nutzen oder die Enibugprüfung an-/abschaltbar haben (siehe weiter unten)

Probleme:
- Areawechsel die nicht über Portal/Stair gehen (also zB Flammenfluss->CS) schafft er nicht.
- Wenn der Leader z.B. durch´s rote Portal nach Tristram geht und sich ganz schnell verkrümelt, so das der Bot einen verliert, geht er ständig durch´s Portal in der Hoffnung man würde auf der andern Seite warten...
- Er folgt bis zum Umfallen bzw Chicken (soll heissen er geht Unterwegs nicht in die Stadt um ggf. Tränke nachzukaufen).

Enibugprüfung bzw. Teleport an-/abschaltbar machen:
Credits hierfür gehen an hdin84!

Dies ist nur dann Notwendig, wenn ihr z.B. den Bluebird oder eine andere Modifikation
des D2NT nutzt, in der die Enibugmeldung im Manager kommt bei Chars die keine Eni tragen
bzw. nicht Telen können.
Wer den Orginal D2NT nutzt braucht dies nicht für das Script zu machen, ich würde es allerdings empfehlen - hierdurch hat man die Prüfung auf den Enibug nämlich auch gleich dabei!

- Öffnet eure ...\scripts\libs\common\NTMove.ntl
und ersetzt die Funktion NTM_MoveTo hiermit:
Code:
function NTM_MoveTo(areaid, x, y, retry, clearpath)
{
var i, n;
var _teleport;
var _path;
var _retry = 0;

if(x == me.x && y == me.y)
return true;

if(arguments.length < 4)
retry = 3;

if(arguments.length < 5)
clearpath = false;

if(NTC_InTown() || NTConfig_Leech)
_teleport = false;
else
_teleport = true;

if(NTC_GetSkillLevel(54) < 1 && !NTConfig_Leech)
{
ExitGame();
SendCopyData("D2NT Manager", null, 7<<16, "ÿE00000Enigmabug- quit game");
}
_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

if(!_path)
return false;

for(i = 0 ; i < _path.length ; i++)
{
for(n = 0 ; n < 2 ; n++)
{
if(_teleport)
{
if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
break;
}
else
{
if(NTC_InTown() || NTConfig_Leech) {
if(NTM_WalkTo(_path[i][0], _path[i][1]))
break;
}

}
}

if(n < 2)
{
if(clearpath)
{
if(!NTA_ClearPosition(20, true, 2))
return false;

NTP_DoPrecast(false);

NTM_MoveTo(me.areaid, _path[i][0], _path[i][1], 1);
}
}
else if(_retry < retry)
{
_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

if(!_path)
return false;

i = -1;
_retry++;
}
else
return false;
}

return true;
}
- jetzt geht ihr in die ...\scripts\NTBot\char_configs\NTConfig.ntl
und fügt das hinzu:
Code:
var NTConfig_Leech;
- zuletzt müsst ihr jetzt noch in eure Charconfiguration folgendes einfügen
(für unseren Fall hier am besten über das NTConfig_Script.push("NTFollow.ntj")):
Code:
NTConfig_Leech = false; // Teleport und Enibugprüfung an(true)/aus(false)
So... hoffe ich hab nix vergessen & is einigermaßen Verständlich das ganze!
Ansonsten warte ich auf eure Kritik, Fehlermeldungen, etc. & werde dann sehen was ich machen kann :)

gruss, flusen
07/14/2010 15:50 sternenlooper#2
Quote:
Originally Posted by flusen View Post
moin,
vor einiger Zeit kam ich mal auf den Trichter nen kleines Followscript für den D2NT zu schreiben.
Das Ergebnis ist zwar noch lange nicht Perfekt/Ausgereift, aber nachdem es meinen Wünschen genügt, habe ich leider noch nicht wieder daran weitergearbeitet.
Daher dachte ich mir, bevor es in der Versenkung verschwindet kann der ein oder andere von euch evtl. noch nutzen daraus ziehen oder mir neuen Ansporn durch Verbesserungsvorschläge usw geben!

Was kann/macht es überhaupt:
- Folgt dem Leader in den entsprechenden Akt
- führt die üblichen Stadtätigkeiten aus (kaufen, verkaufen, etc)
- wartet dort auf TP (und nimmt es auch nur wenn Portal- & Leaderarea übereinstimmen)
- rennt dem Leader hinterher
- kämpft Unterwegs mit (über Variable steuerbar)
- sammelt ein (über Variable steuerbar)
- folgt durch Portale/Stairs
- geht wieder in die Stad und wartet wenn es den Leader "aus den Augen" verliert

Installation:
- Script im Anhang runterladen und in ...\scripts\NTBot\bots\ speichern
- in die Charconfig NTConfig_Script.push("NTFollow.ntj"); einfügen

Konfiguration:
- in der NTFollow.ntj folgende Werte anpassen:
Code:
 var _fight = true; // true=mitkämpfen - false=nur hinterher rennen
   var _pick = true; // true=items & co aufsammeln - false=nichts aufsammeln 
   NTConfig_Leader = ""; // Name des Leader-Chars
Zu Beachten:
- Will man z.B. einen neuen Char folgen lassen (level1) sollte man in der Charconfig den Merc auf false setzen und dem Char am besten ne Hand voll Gold hinwerfen sowie nen TpFolianten kaufen - sonst rennt der nur wie blöd durch die Gegend inner Stadt
- Bei Chars ohne Eni/Teleport muss man entweder den "Orginal" D2nt3.0 nutzen oder die Enibugprüfung an-/abschaltbar haben

Probleme:
- Areawechsel die nicht über Portal/Stair gehen (also zB Flammenfluss->CS) schafft er nicht.
- Wenn der Leader z.B. durch´s rote Portal nach Tristram geht und sich ganz schnell verkrümelt, so das der Bot einen verliert, geht er ständig durch´s Portal in der Hoffnung man würde auf der andern Seite warten...
- Er folgt bis zum Umfallen bzw Chicken (soll heissen er geht Unterwegs nicht in die Stadt um ggf. Tränke nachzukaufen).

So... hoffe ich hab nix vergessen & is einigermaßen Verständlich das ganze!
Ansonsten warte ich auf eure Kritik, Fehlermeldungen, etc. & werde dann sehen was ich machen kann :)

gruss, flusen
thx gibt es imemr für nette ideen ^^
hier eine frage die mir spontan durch den kopf geht! habe dich zwar auch in "meinem" threat gefragt aber hier gehört es besser hin :P

Quote:
habe mir gerade mal durchgelesen was dein kleines script so kann ^^
wenn du dich mal umschaust es gibt auch script von hdin! ein cs leecher ohne kampf und eni script!

wie hast du es ind einem script eigentlich geregelt bei zb blue seinem bot! dort kann man enilos garnicht einstellen (über char config)! wie verhidnerst du es bei ihm den enibug auszulösen!
ok die frage würde wohl besser in deinen threat passen ^^
edit:
habe mal in deins cript geschaut und eines fällt mir halbwegs negativ auf!
Quote:
// warten auf Party
while(!NTC_InMyParty(NTConfig_Leader)) {
Delay(500);
}
das würde bedeuten das der leecher wartet bis die party erstellt ist egal ob der leader überhaupt noch im spiel ist doer nicht! o.O
wäre da ein counter nicht besser als eine endlosschleife?

ausserdem warum lässt du alles in dem script einstellen?
bedenke das einige nutzer hier nicht gerade das verständniss für sowas besitzen!

den ntconfig_leader befehl gibt es schon bei fast jedem bot dazu! also einfach ausnutzen und einbinden!
und die anderen beiden variablen alssen sich auch einfach in die charconfig mit einbauen!

eine lösung für das enibug problem ist ebenfals nicht enthalten wie ich sehen konnte!
dazu msüstest du den move befehl einfach neu einfügen und als neue funktion benennen! ......

trotzdem schöne arbeit
07/14/2010 16:02 Muddy Waters#3
Quote:
Originally Posted by flusen View Post
moin,
vor einiger Zeit kam ich mal auf den Trichter nen kleines Followscript für den D2NT zu schreiben.
Das Ergebnis ist zwar noch lange nicht Perfekt/Ausgereift, aber nachdem es meinen Wünschen genügt, habe ich leider noch nicht wieder daran weitergearbeitet.
Daher dachte ich mir, bevor es in der Versenkung verschwindet kann der ein oder andere von euch evtl. noch nutzen daraus ziehen oder mir neuen Ansporn durch Verbesserungsvorschläge usw geben!

Was kann/macht es überhaupt:
- Folgt dem Leader in den entsprechenden Akt
- führt die üblichen Stadtätigkeiten aus (kaufen, verkaufen, etc)
- wartet dort auf TP (und nimmt es auch nur wenn Portal- & Leaderarea übereinstimmen)
- rennt dem Leader hinterher
- kämpft Unterwegs mit (über Variable steuerbar)
- sammelt ein (über Variable steuerbar)
- folgt durch Portale/Stairs
- geht wieder in die Stad und wartet wenn es den Leader "aus den Augen" verliert

Installation:
- Script im Anhang runterladen und in ...\scripts\NTBot\bots\ speichern
- in die Charconfig NTConfig_Script.push("NTFollow.ntj"); einfügen

Konfiguration:
- in der NTFollow.ntj folgende Werte anpassen:
Code:
 var _fight = true; // true=mitkämpfen - false=nur hinterher rennen
   var _pick = true; // true=items & co aufsammeln - false=nichts aufsammeln 
   NTConfig_Leader = ""; // Name des Leader-Chars
Zu Beachten:
- Will man z.B. einen neuen Char folgen lassen (level1) sollte man in der Charconfig den Merc auf false setzen und dem Char am besten ne Hand voll Gold hinwerfen sowie nen TpFolianten kaufen - sonst rennt der nur wie blöd durch die Gegend inner Stadt
- Bei Chars ohne Eni/Teleport muss man entweder den "Orginal" D2nt3.0 nutzen oder die Enibugprüfung an-/abschaltbar haben

Probleme:
- Areawechsel die nicht über Portal/Stair gehen (also zB Flammenfluss->CS) schafft er nicht.
- Wenn der Leader z.B. durch´s rote Portal nach Tristram geht und sich ganz schnell verkrümelt, so das der Bot einen verliert, geht er ständig durch´s Portal in der Hoffnung man würde auf der andern Seite warten...
- Er folgt bis zum Umfallen bzw Chicken (soll heissen er geht Unterwegs nicht in die Stadt um ggf. Tränke nachzukaufen).

So... hoffe ich hab nix vergessen & is einigermaßen Verständlich das ganze!
Ansonsten warte ich auf eure Kritik, Fehlermeldungen, etc. & werde dann sehen was ich machen kann :)

gruss, flusen
Meinen Segen hast du, auch wenn mir stilistisch ein paar Sachen missfallen und das ganze auf den ersten Blick nach Erweiterungen schreit. :)

Ich finds in jedem Fall toll, wenn sich Leute mal hinsetzen und versuchen etwas eigenhändig Umzusetzen, weiter so. :handsdown:

Ich hatte sowas auch mal angefangen. Hab das Projekt aber irgendwie auf Eis gelegt, nachdem ich festgestellt habe, dass es unheimlich viel Arbeit ist, die Ebenenverläufe jedes Akts in einem 3-4 Dimensionalen Array abzubilden. :D Obwohl das für Akt 1 tatsächlich hervorragend funktioniert hat.
Die Idee dabei war, dass der Bot selbstständig den Weg zu seinem Herrchen findet und zwar vom nächstbesten vorhandenen Wp aus.

Mal schauen ob ich das Projekt nochmal wieder ausgrabe, es ist definitiv verdammt viel Arbeit das ganze so umzusetzen, dass es uneingesckränkt läuft. :(

Lg
Muddy

P.S.: Sogar kommentiert isses! *sabber* :D

@Sterni
Ich verstehe die Frage nicht, auch wenn ich bestimmt die Antwort wüsste. :D
07/14/2010 16:14 sternenlooper#4
Quote:
Originally Posted by Muddy_Waters View Post
Meinen Segen hast du, auch wenn mir stilistisch ein paar Sachen missfallen und das ganze auf den ersten Blick nach Erweiterungen schreit. :)

Ich finds in jedem Fall toll, wenn sich Leute mal hinsetzen und versuchen etwas eigenhändig Umzusetzen, weiter so. :handsdown:

Ich hatte sowas auch mal angefangen. Hab das Projekt aber irgendwie auf Eis gelegt, nachdem ich festgestellt habe, dass es unheimlich viel Arbeit ist, die Ebenenverläufe jedes Akts in einem 3-4 Dimensionalen Array abzubilden. :D Obwohl das für Akt 1 tatsächlich hervorragend funktioniert hat.
Die Idee dabei war, dass der Bot selbstständig den Weg zu seinem Herrchen findet und zwar vom nächstbesten vorhandenen Wp aus.

Mal schauen ob ich das Projekt nochmal wieder ausgrabe, es ist definitiv verdammt viel Arbeit das ganze so umzusetzen, dass es uneingesckränkt läuft. :(

Lg
Muddy

P.S.: Sogar kommentiert isses! *sabber* :D

@Sterni
Ich verstehe die Frage nicht, auch wenn ich bestimmt die Antwort wüsste. :D
die antwort weiß ich selbst :P
sollte ja nur ein gedankenanstoß sein *g*

er hat hier einsc ript rein gestellt welches in jeden d2nt bot einfach eingefügt werden kann!
das problem ist das er das alles über den moveto befehl erledigt! dieses wirkt zb beim blue sofort zu einem enibug sobald ausserhalb der stadt ist und einen schritt macht!^^

oder soll dieses script nur für eni träger gedacht sein?

ps:
bist ja nur neidisch weil du es nicht vor ihm veröffentlichen konntest xD
07/14/2010 16:45 Muddy Waters#5
Quote:
Originally Posted by sternenlooper View Post
die antwort weiß ich selbst :P
sollte ja nur ein gedankenanstoß sein *g*

er hat hier einsc ript rein gestellt welches in jeden d2nt bot einfach eingefügt werden kann!
das problem ist das er das alles über den moveto befehl erledigt! dieses wirkt zb beim blue sofort zu einem enibug sobald ausserhalb der stadt ist und einen schritt macht!^^

oder soll dieses script nur für eni träger gedacht sein?

ps:
bist ja nur neidisch weil du es nicht vor ihm veröffentlichen konntest xD
Ich würde mal annehmen, dass es nur für Eniträger gedacht ist, ansonsten hätte der persönliche Wachhund wohl ziemliche Probleme beim hinterherkommen. :D

Lg
Muddy

P.S.: Nicht wirklich, mein Ansatz ist auch völlig anders, dafür aber eben auch für meinen Geschmack stark unausgereift. :p
07/14/2010 17:04 flusen#6
danke erstma für eure Rückmeldungen!

Quote:
Originally Posted by sternenlooper View Post
habe mir gerade mal durchgelesen was dein kleines script so kann ^^
wenn du dich mal umschaust es gibt auch script von hdin! ein cs leecher ohne kampf und eni script!

wie hast du es ind einem script eigentlich geregelt bei zb blue seinem bot! dort kann man enilos garnicht einstellen (über char config)! wie verhidnerst du es bei ihm den enibug auszulösen!
ok die frage würde wohl besser in deinen threat passen ^^
das Script von hdin kenn ich - aber irgendwie hatte mir da der Bot zu oft am falschen TP gestanden. Und mit dem Script hier könnte ich wenn ich will das komplette CS mitleechen.
Aber an sich soll das ganze hier ja auch kein Konkurrenzscript dazu sein.
Ich habe das Script z.B. nur ganz selten zum Leechen verwendet - brauchte es Anfangs eher für "Bodyguardzwecke" bei der Hellfirequest.

Und die beste Lösung bei Bluebird wegen dem Enibug is entweder zu deinem wechseln :D
...oder halt nachträglich einbauen (hab jetz hier nu noch nicht geschrieben wie, weil´s doch schon ne weile her is das ich es bei mir gemacht hatte und erst wieder nachschauen muss wie XD )

Quote:
Originally Posted by sternenlooper View Post
habe mal in deins cript geschaut und eines fällt mir halbwegs negativ auf!

das würde bedeuten das der leecher wartet bis die party erstellt ist egal ob der leader überhaupt noch im spiel ist doer nicht! o.O
wäre da ein counter nicht besser als eine endlosschleife?

ausserdem warum lässt du alles in dem script einstellen?
bedenke das einige nutzer hier nicht gerade das verständniss für sowas besitzen!

den ntconfig_leader befehl gibt es schon bei fast jedem bot dazu! also einfach ausnutzen und einbinden!
und die anderen beiden variablen alssen sich auch einfach in die charconfig mit einbauen!

eine lösung für das enibug problem ist ebenfals nicht enthalten wie ich sehen konnte!
dazu msüstest du den move befehl einfach neu einfügen und als neue funktion benennen! ......

trotzdem schöne arbeit
yup - das mit dem Delay is nich wirklich glücklich so... counter hatte ich mal drin aber war auch Zeitweise mist (wegen JBs usw)! Kam auch immer drauf an ob ich über die NTBot oder die NTBotLeech gegangen bin)!
Schätze das beste wär evtl. ne Kombination von beidem!?

Mit den Variablen im Script muss ich gestehen - für mich war es mir egal & für hier hatt ich einfach nich dran gedacht :rolleyes:
werd das aba noch ändern!

Tja und mit dem Enibug wie schon gesagt - würde eher empfehlen das über die Charconfig steuerbar zu machen als ne kopierte/geänderte Movefunktion!
Denn kann man auch schön einfach Leaderscripte erstellen bei Bedarf in denen der Leader z.B. bis Tristram Teleportet, Portal für den Follower aufmacht und ab dann auch nur noch läuft


Quote:
Originally Posted by Muddy_Waters View Post
Meinen Segen hast du, auch wenn mir stilistisch ein paar Sachen missfallen und das ganze auf den ersten Blick nach Erweiterungen schreit. :)

Ich finds in jedem Fall toll, wenn sich Leute mal hinsetzen und versuchen etwas eigenhändig Umzusetzen, weiter so. :handsdown:

Ich hatte sowas auch mal angefangen. Hab das Projekt aber irgendwie auf Eis gelegt, nachdem ich festgestellt habe, dass es unheimlich viel Arbeit ist, die Ebenenverläufe jedes Akts in einem 3-4 Dimensionalen Array abzubilden. :D Obwohl das für Akt 1 tatsächlich hervorragend funktioniert hat.
Die Idee dabei war, dass der Bot selbstständig den Weg zu seinem Herrchen findet und zwar vom nächstbesten vorhandenen Wp aus.

Mal schauen ob ich das Projekt nochmal wieder ausgrabe, es ist definitiv verdammt viel Arbeit das ganze so umzusetzen, dass es uneingesckränkt läuft. :(

Lg
Muddy

P.S.: Sogar kommentiert isses! *sabber* :D

@Sterni
Ich verstehe die Frage nicht, auch wenn ich bestimmt die Antwort wüsste. :D
Glaub ich gerne mit dem stilistischem (wobei... hättest mal die Urform sehen sollen :facepalm: ) falls du mir da für die Zukunft sagen kannst wie ich´s lieber besser machen soll/kann nur raus damit :D
Und zum Erweitern gib´s echt viel mögliches... nur keine Ahnung ob überhaupt nen Bedarf an sowas is!
Und wie du schon sagtest - wenn man das ganze richtig machen will is da echt viel Arbeit reinzustecken!
Wobei mich deine Umsetzung des ganzen sehr interessieren würde!

gruss, flusen

P.S.: Ohne Kommentare seh ich meist in meinen eigenen Sachen nich durch^^

**edit**
argh - ich schreib einfach zu langsam^^ ihr habt hier ja scho wieder was geschrieben
werd jetz aba erstma Heimfahren und heut abend nochma gucken was es hier so neues gibt...

**edit2**
Quote:
Originally Posted by sternenlooper View Post
das problem ist das er das alles über den moveto befehl erledigt! dieses wirkt zb beim blue sofort zu einem enibug sobald ausserhalb der stadt ist und einen schritt macht!^^
...deswegen hatt ich´s ja wenigstens oben dazugeschrieben, dass es mit dem Bluebird z.B. dies Problem hat :P
Und der vorhandene Moveto-Befehl is denke ich die beste Lösung. ihn zu kopieren, umzubenennen und den Teleportteil rauszunehmen oder so würde ja bedeuten zweimal mehr o weniger die gleiche Funktion drin zu haben obwohl man ja auch in die vorhandene "nur" eine weitere Abfrage einbauen müsste um das gleiche zu bewerkstelligen.
Quote:
Originally Posted by Muddy_Waters View Post
Ich würde mal annehmen, dass es nur für Eniträger gedacht ist, ansonsten hätte der persönliche Wachhund wohl ziemliche Probleme beim hinterherkommen.

Lg
Muddy

P.S.: Nicht wirklich, mein Ansatz ist auch völlig anders, dafür aber eben auch für meinen Geschmack stark unausgereift.
Primär war es für Eniträger. Ansonsten gäb es wieder soviel was es zu beachten gibt (auch wieder in Hinsicht auf die verschiedenenD2NTModversionen) das wir wieder beim Thema unausgereift sind...

Aber wie gesagt - für meine Ansprüche als ich den geschrieben hab hat´s genügt. Und hoffe ja mit genug Feedback geht das ganze evtl. mal in ne ausgereiftere Richtung (man wächst ja mit der Aufgabe). Nur die Arbeit ohne das es evtl. überhaupt einer brauch/will würd ich mir auch ungern machen
04/26/2011 21:47 KingHigh#7
Ich bin mal so frei und grabe diesen doch nun etwas älteren Thread wieder aus.
Ich nutze als Ausgangsbasis den Bluebird und spiele Classic, deswegen muss ich dieses Problem lösen und kann es nicht umgehen :)
Leider habe ich noch nicht so viel Ahnung von der ganzen Materie, deswegen könnte es sein, dass meine Fragen/Probleme recht stupide klingen.

Ich habe mal versucht das Enigmaproblen durch die geänderte moveto zu umgehen. Leider beendet der leecher das Spiel sobald er ausserhalb der Town einen Schritt macht.
Ich habe das doch richtig verstanden, dass die dazugefügte Anleitung von flusen das Enigmaproblem auch beim Bluebird umgeht oder nicht?

Meine Vermutung ist, dass ich beim ersetzen der Funktion NTM_MoveTo was falsch gemacht habe. Der Teil, der aus der ursprünglichen Funktion NTM_MoveTo ersetzt, also erstmal gelöscht, endet doch genau an der markierten Stelle oder? Und der Rest muss meines Verständnisses nach so stehen bleiben....

Code:
function NTM_MoveTo(areaid, x, y, retry, clearpath)
{
var i, n;
var _teleport;
var _path;
var _retry = 0;

if(x == me.x && y == me.y)
return true;

if(arguments.length < 4)
retry = 3;

if(arguments.length < 5)
clearpath = false;

if(NTC_InTown() || NTC_GetSkillLevel(54) < 1)
_teleport = false;
else
_teleport = true;

_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

if(!_path)
return false;

for(i = 0 ; i < _path.length ; i++)
{
for(n = 0 ; n < 2 ; n++)
{
if(_teleport)
{
if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
break;
}
else
{
if(NTC_InTown()) {
if(NTM_WalkTo(_path[i][0], _path[i][1]))
break;
}
else {
NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿc8" + "Enigmabug - quit game");
ExitGame();
}
}
}

if(n < 2)
{
if(clearpath)
{
if(!NTA_ClearPosition(20, true, 2))
return false;

NTP_DoPrecast(false);

NTM_MoveTo(me.areaid, _path[i][0], _path[i][1], 1);
}
}
else if(_retry < retry)
{
_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

if(!_path)
return false;

i = -1;
_retry++;
}
else
return false;
}

return true;
} 
 [COLOR="SeaGreen"]// Hier endet die Funktion denke ich.[/COLOR]
function NTM_MoveToPresetUnit(areaid, unittype, classid, offsetx, offsety, clearpath)
{
	var i, n;
	var _unit;

	if(arguments.length < 4)
	{
		offsetx = 0;
		offsety = 0;
	}
04/27/2011 21:53 Muddy Waters#8
Eigentlich wollte ich dir die Frage gestern schon beantworten, bin aber nicht mehr dazu gekommen. :(

Ich mache es mal kurz und schmerzlos:
Eine derart formatierte Funktion kann vielleicht die Laufzeitumgebung lesen, aber alles was zwei Beine hat und atmet wird kläglich daran scheitern. Und zwar völlig unabhängig davon, ob man in der Materie drin ist oder nicht. :mad:

Schritt 1 ist also erstmal das Herstellen eines ansprechenden Formates; eingerückt und mit grobem BBCode Syntax Highlighting versehen, sieht das dann so aus:
Code:
[B][I][Color=Navy]function[/Color][/I][/B] NTM_MoveTo(areaid, x, y, retry, clearpath)
{
	[B][I][Color=Navy]var[/Color][/I][/B] i, n;
	[B][I][Color=Navy]var[/Color][/I][/B] _teleport;
	[B][I][Color=Navy]var[/Color][/I][/B] _path;
	[B][I][Color=Navy]var[/Color][/I][/B] _retry = [Color=Red]0[/Color];

	[B][I][Color=Navy]if[/Color][/I][/B](x == me.x && y == me.y)
		[B][I][Color=Navy]return true[/Color][/I][/B];

	[B][I][Color=Navy]if[/Color][/I][/B](arguments.length < [Color=Red]4[/Color])
		retry = [Color=Red]3[/Color];

	[B][I][Color=Navy]if[/Color][/I][/B](arguments.length < [Color=Red]5[/Color])
		clearpath = [B][I][Color=Navy]false[/Color][/I][/B];

	[B][I][Color=Navy]if[/Color][/I][/B](NTC_InTown() || NTConfig_Leech)
		_teleport = [B][I][Color=Navy]false[/Color][/I][/B];
	[B][I][Color=Navy]else[/Color][/I][/B]
		_teleport = [B][I][Color=Navy]true[/Color][/I][/B];

	[B][I][Color=Navy]if[/Color][/I][/B](NTC_GetSkillLevel([Color=Red]54[/Color]) < [Color=Red]1[/Color] && !NTConfig_Leech)
	{
		ExitGame();
		SendCopyData([Color=Gray]"D2NT Manager"[/Color], null, 7<<16, [Color=Gray]"ÿE00000Enigmabug- quit game"[/Color]);
	}
	
	_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

	[B][I][Color=Navy]if[/Color][/I][/B](!_path)
		[B][I][Color=Navy]return false[/Color][/I][/B];

	[B][I][Color=Navy]for[/Color][/I][/B](i = [Color=Red]0[/Color] ; i < _path.length ; i++)
	{
		[B][I][Color=Navy]for[/Color][/I][/B](n = [Color=Red]0[/Color] ; n < [Color=Red]2[/Color] ; n++)
		{
			[B][I][Color=Navy]if[/Color][/I][/B](_teleport)
			{
				[B][I][Color=Navy]if[/Color][/I][/B](NTM_TeleportTo(_path[i][[Color=Red]0[/Color]]+Ran[B][I][Color=Navy]do[/Color][/I][/B]m(-n, n), _path[i][[Color=Red]1[/Color]]+Ran[B][I][Color=Navy]do[/Color][/I][/B]m(-n, n)))
					[B][I][Color=Navy]break[/Color][/I][/B];
			}
			[B][I][Color=Navy]else if[/Color][/I][/B](NTC_InTown() || NTConfig_Leech)
			{
				[B][I][Color=Navy]if[/Color][/I][/B](NTM_WalkTo(_path[i][[Color=Red]0[/Color]], _path[i][[Color=Red]1[/Color]]))
					[B][I][Color=Navy]break[/Color][/I][/B];
			}
		}
	}

	[B][I][Color=Navy]if[/Color][/I][/B](n < [Color=Red]2[/Color])
	{
		[B][I][Color=Navy]if[/Color][/I][/B](clearpath)
		{
			[B][I][Color=Navy]if[/Color][/I][/B](!NTA_ClearPosition([Color=Red]20[/Color], [B][I][Color=Navy]true[/Color][/I][/B], [Color=Red]2[/Color]))
				[B][I][Color=Navy]return false[/Color][/I][/B];

			NTP_DoPrecast([B][I][Color=Navy]false[/Color][/I][/B]);

			NTM_MoveTo(me.areaid, _path[i][[Color=Red]0[/Color]], _path[i][[Color=Red]1[/Color]], [Color=Red]1[/Color]);
		}
	}
	[B][I][Color=Navy]else if[/Color][/I][/B](_retry < retry)
	{
		_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

		[B][I][Color=Navy]if[/Color][/I][/B](!_path)
			[B][I][Color=Navy]return false[/Color][/I][/B];

		i = -[Color=Red]1[/Color];
		_retry++;
	}
	[B][I][Color=Navy]else[/Color][/I][/B]
		[B][I][Color=Navy]return false[/Color][/I][/B];

	[B][I][Color=Navy]return true[/Color][/I][/B];
}
Jetzt fällt eigentlich direkt auf, dass einige Dinge obsolet sind, zumal du ja in CL sowieso kein Teleport per Eni hat.

Die Funktion lässt sich damit wie folgt vereinfachen:
Code:
[B][I][Color=Navy]function[/Color][/I][/B] NTM_MoveTo(areaid, x, y, retry, clearpath)
{
	[B][I][Color=Navy]var[/Color][/I][/B] i, n;
	[B][I][Color=Navy]var[/Color][/I][/B] _teleport;
	[B][I][Color=Navy]var[/Color][/I][/B] _path;
	[B][I][Color=Navy]var[/Color][/I][/B] _retry = [Color=Red]0[/Color];

	[B][I][Color=Navy]if[/Color][/I][/B](x == me.x && y == me.y)
		[B][I][Color=Navy]return true[/Color][/I][/B];

	[B][I][Color=Navy]if[/Color][/I][/B](arguments.length < [Color=Red]4[/Color])
		retry = [Color=Red]3[/Color];

	[B][I][Color=Navy]if[/Color][/I][/B](arguments.length < [Color=Red]5[/Color])
		clearpath = [B][I][Color=Navy]false[/Color][/I][/B];

	[B][I][Color=Navy]if[/Color][/I][/B](NTC_InTown() || NTC_GetSkillLevel([Color=Red]54[/Color]) < [Color=Red]1[/Color])
		_teleport = [B][I][Color=Navy]false[/Color][/I][/B];
	[B][I][Color=Navy]else[/Color][/I][/B]
		_teleport = [B][I][Color=Navy]true[/Color][/I][/B];
	
	_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

	[B][I][Color=Navy]if[/Color][/I][/B](!_path)
		[B][I][Color=Navy]return false[/Color][/I][/B];

	[B][I][Color=Navy]for[/Color][/I][/B](i = [Color=Red]0[/Color] ; i < _path.length ; i++)
	{
		[B][I][Color=Navy]for[/Color][/I][/B](n = [Color=Red]0[/Color] ; n < [Color=Red]2[/Color] ; n++)
		{
			[B][I][Color=Navy]if[/Color][/I][/B](_teleport)
			{
				[B][I][Color=Navy]if[/Color][/I][/B](NTM_TeleportTo(_path[i][[Color=Red]0[/Color]]+Ran[B][I][Color=Navy]do[/Color][/I][/B]m(-n, n), _path[i][[Color=Red]1[/Color]]+Ran[B][I][Color=Navy]do[/Color][/I][/B]m(-n, n)))
					[B][I][Color=Navy]break[/Color][/I][/B];
			}
			[B][I][Color=Navy]else[/Color][/I][/B]
			{
				[B][I][Color=Navy]if[/Color][/I][/B](NTM_WalkTo(_path[i][[Color=Red]0[/Color]], _path[i][[Color=Red]1[/Color]]))
					[B][I][Color=Navy]break[/Color][/I][/B];
			}
		}
	}

	[B][I][Color=Navy]if[/Color][/I][/B](n < [Color=Red]2[/Color])
	{
		[B][I][Color=Navy]if[/Color][/I][/B](clearpath)
		{
			[B][I][Color=Navy]if[/Color][/I][/B](!NTA_ClearPosition([Color=Red]20[/Color], [B][I][Color=Navy]true[/Color][/I][/B], [Color=Red]2[/Color]))
				[B][I][Color=Navy]return false[/Color][/I][/B];

			NTP_DoPrecast([B][I][Color=Navy]false[/Color][/I][/B]);

			NTM_MoveTo(me.areaid, _path[i][[Color=Red]0[/Color]], _path[i][[Color=Red]1[/Color]], [Color=Red]1[/Color]);
		}
	}
	[B][I][Color=Navy]else if[/Color][/I][/B](_retry < retry)
	{
		_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

		[B][I][Color=Navy]if[/Color][/I][/B](!_path)
			[B][I][Color=Navy]return false[/Color][/I][/B];

		i = -[Color=Red]1[/Color];
		_retry++;
	}
	[B][I][Color=Navy]else[/Color][/I][/B]
		[B][I][Color=Navy]return false[/Color][/I][/B];

	[B][I][Color=Navy]return true[/Color][/I][/B];
}
Womit man eigentlich wieder Fast bei der Variante gelandet ist, wie sie auch im Vanilla D2NT zum Einsatz kommt. Aber das aus irgendwelchen modifizierten Varianten herleiten macht schließlich viel mehr Spaß, als es einfach nur stupide aus der Vanilla Version zu kopieren. :)

LG
Muddy
04/30/2011 01:30 KingHigh#9
.
05/04/2011 13:53 atze1990#10
hab den bot mal eben getestet. er rennt wie ein idiot immer zur kiste und zurück zum tp spot.
2. sollte es auch die funktion geben, dass er automatisch, wie der leechbot, ins next game folgt. wäre praktisch.
04/18/2012 23:15 prrovoss#11
mit dem muddys d2nt läuft das skript nicht oder? bei mri steht der follower die ganze zeit nur rum und macht nix. leader name stimmt auf jeden fall und alles andere sollte auch richtig eingestellt sein.

er lädt den leader auch zur party ein, er erkennt ihn also korrekt odeR?
04/19/2012 00:48 Aramox#12
also ich hatte auch einige followbots ausm netz getestet und alle für mist befunden. hab nun einen eigenen geschrieben der super funzt. er folgt sogar über areagrenzen hinweg ohne in town gehen zu müssen (außer direkt aus der town heraus, hier buggen teleport chars natürlich öfters).

es gibt sogar noch eine stelle im skript wo man attacks adden kann (bei range <= 8 macht er delay oder eben attack, bei range > 8 geht er zum leader).

war allerdings einiges an arbeit und testen, deswegen will ich das script nicht kostenlos herausgeben bzw. public machen. bei interesse einfach melden.
04/20/2012 17:10 Mecco-Pekko#13
Quote:
Originally Posted by prrovoss View Post
mit dem muddys d2nt läuft das skript nicht oder? bei mri steht der follower die ganze zeit nur rum und macht nix. leader name stimmt auf jeden fall und alles andere sollte auch richtig eingestellt sein.

er lädt den leader auch zur party ein, er erkennt ihn also korrekt odeR?
habs bei mir jetzt so hingekriegt das er mit in tps kommt und auch mir folgt (jedenfalls bei baal im thron) bzw mitfightet (hdin) allerdings musste ichselber ins tp gehen

kann man da noch eine zeile adden sodass die bots von selber ins tp gehen bzw auf befehl wie z.b. "s" (im hardcore bereich wird das als safe benutzt um ein tp als safe zu kennzeichenn) ?
05/09/2013 20:50 KingPinShadow#14
bei mir wird der leader im game eingeladen in eine party und dann passiert nix mehr, wenn ich mit dem leader ein portal mache passiert auch nix.

und wie kann man mehrer follower nutzen? etwa auch das die das gleiche game joinen wie der leader?
05/15/2013 00:14 NerDxx™#15
Quote:
Originally Posted by KingPinShadow View Post
bei mir wird der leader im game eingeladen in eine party und dann passiert nix mehr, wenn ich mit dem leader ein portal mache passiert auch nix.

und wie kann man mehrer follower nutzen? etwa auch das die das gleiche game joinen wie der leader?
NTConfig_Leader = ""; // Name des Leader-Chars
- in der Charconfig public auf true setzen

was meinst du damit ??
Code:
und wie kann man mehrer follower nutzen? etwa auch das die das gleiche game joinen wie der leader?
Um jemandem zu folgen muss man ihm joinen ..