Autor Thema: [D2NT] Follow the Leader  (Gelesen 3733 mal)

flusen

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 18
  • Beiträge: 38
    • Profil anzeigen

[D2NT] Follow the Leader
« am: Mai 28, 2010, 04:53:58 »
Moin,
nachdem ich (dank euch) jetzt auch seit einiger Zeit den D2NT erfolgreich laufen hab und ich heute mal ein wenig mit Scripten rumprobiert habe möchte ich euch mein bisheriges Ergebnis einmal vorstellen...

Was kann das Script bisher:
- Joint dem Leader hinterher (durch Nutzung der NTBotLeech.ntj vom BallLeechscript)
- Folgt dem Leader in den richtigen Akt
- wartet dort auf TP
- rennt dem Leader hinterher
- sammelt Zeug (entsprechend der PickIT)
- geht wieder in die Stad und wartet wenn es den Leader verliert

Probleme/Verbesserungswürdig:
- Kämpft nicht mit
- wenn der Leader z.B. zu weit vom TP weg ist öffnet der Bot TP zurück in die Stad, nimmt wieder das TP des Leaders -> sieht Leader nicht -> wieder TP inne Stad usw...
- wenn der Leader nur Tele nutzt kommt er nich hinterher
- Delay-Zeiten noch nicht Optimal
- Code generell noch Verbesserungswürdig

Es würde mich freuen wenn der ein oder andere das Script einfach mal testet, evtl. Verbesserungsvorschläge/Denkansätze gibt oder es gleich mit Überarbeitet XD

Installation:
Im Ordner bots ein neues script erstellen (z.B. NTFollow.ntj)
& folgenden Code einfügen:
function NTMain()
{
   Include("libs/common/NTCommon.ntl");
   NTC_IncludeLibs();
   NTC_IncludeConfig("NTBot/char_configs");

   NT_LoadConfig();
   NTSI_LoadNIPFiles("NTBot/item_configs");

   NTA_Initialize(); // 10

   var _leader = ""; // Der genaue Name des Leader-Chars - nicht der Name vom Account!!!
   
   if(!NTTM_CheckAct())
   {
      NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
      return;
   }

 
 while(!NTC_InMyParty(_leader))
   {
   Delay(500);
   }
 
var questeract;   
 
  var _Fuhrer;
var _woisser;
_Fuhrer = GetPlayerUnit();
 
while(_Fuhrer.name != _leader)
{
_Fuhrer.GetNext();
Delay(5000);
_woisser = _Fuhrer.areaid;
}
 
while(NTC_InMyParty(_leader))
   {
 if(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109 && me.areaid != _woisser)
   {
   _Fuhrer = GetPlayerUnit();
 
while(_Fuhrer.name != _leader)
{
_Fuhrer.GetNext();
Delay(5000);
_woisser = _Fuhrer.areaid;
}

    if(_woisser <= 39)
questeract = 1;
else if(_woisser >= 40 && _woisser <= 74)
questeract = 40;
else if(_woisser >= 75 && _woisser <= 102)
questeract = 75;
else if(_woisser >=103 && _woisser <= 108)
questeract = 103;
else
questeract = 109;
   
   if(me.areaid != questeract)
   {
   if(!NTTM_TownMove("waypoint"))
   {
      NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
      return;
   }

   if(!NTM_TakeWaypoint(questeract))
   {
      NTC_SendMsgToScript("NTBotGame.ntj", "NTM_TakeWaypoint()");
      return;
   }
   }
     
   NTTMGR_TownManager();
   
   NTTM_TownMove("portalspot");

   for(i = 0; i <= 100; i++)
   {
      if(NTC_InMyParty(_leader))
         break;

      Delay(200);
   }   

 if(me.areaid != _woisser)
 {
   while(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109)
   {
 
      NTM_UsePortal("BluePortal", "", _leader); // 50
      Delay(200);
     
   }
 } 
   NTP_DoPrecast(true);
   
   }

  else
   {
   
    while(me.areaid == _woisser)
   {
   _Fuhrer = GetPlayerUnit();
 
while(_Fuhrer.name != _leader)
{
_Fuhrer.GetNext();
Delay(50);
_woisser = _Fuhrer.areaid;
}
   
_Führer = NTC_FindUnit(NTC_UNIT_PLAYER, _leader)
NTC_Delay(10)

if(_Führer)
{



if(NTM_MoveTo(_Führer.areaid, _Führer.x+1, _Führer.y+1))
NTSI_PickItems();


}
     
   }
   NTM_MakeTP();
NTM_UsePortal("BluePortal");
   }

}

   NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");

}


bei var _leader zwischen die "" den Namen eures Leaderchars eintragen!

in der D2NT\scripts\NTBotLeech.ntj (sollte man durch das BallLeech-Script schon haben)
Account & PW eintragen und diese als Einstiegspunkt im D2NTManager für den Followchar eintragen.

In die Config eures Followchars mit dem Eintrag
NTConfig_Script.push("NTFollow.ntj");das Script aktivieren (die restlichen deaktivieren)

Das war´s dann auch schon - sobald ihr im Game mit dem Leader nun ein TP öffnet sollte euch der Bot dadurch folgen und hinterherrennen.

Sobald er nicht mehr hinterherkommt geht er in die Stadt und mit einem neuen TP habt ihr ihn dann wieder bei euch!

Hoffe da sind nicht mehr zu arge Fehler drin & ihr könnt damit was Anfangen!
Ansonsten hier meckern und ich seh zu was ich machen kann XD

gruss, flusen
Folgende Mitglieder haben sich bei ihnen bedankt für diesen Beitrag:

Bot_for_Fun

  • Sr. Member
  • ****
  • Danke
  • -vergeben: 9
  • -erhalten: 37
  • Beiträge: 484
    • ICQ Messenger - 426234793
    • Profil anzeigen
    • Bot-Area.net
    • E-Mail
Re: [D2NT] Follow the Leader
« Antwort #1 am: Mai 28, 2010, 06:30:19 »
wo soll der denn zB mitkämpfen, was noch verbessert werden soll ?
über all ?



1. Bot downloaden & einstellen
2. Bot starten
3. Mf-runs
4. ???
5. Profit

flusen

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 18
  • Beiträge: 38
    • Profil anzeigen
Re: [D2NT] Follow the Leader
« Antwort #2 am: Mai 28, 2010, 08:08:38 »
am schönsten wär natürlich überall...
aber ich denke würde reichen wenn er z.B. "nur" die üblichen Bosse für Mf-Runs oder
Gebiete zum Hochleveln von kleinen Chars (1-24) wie Tristram & Tombs einigermassen
mitmacht.
Dann könnte man das ganze gut mit nem zweiten Bot kombinieren.

Am meisten stört mich zur Zeit aber noch diese "TP-Schleife" in die das ganze gehen kann und wo mir einfach grad nix einfällt um es besser zu lösen  :wallbash:

ratsyknuf

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 0
  • Beiträge: 19
    • Profil anzeigen
Re: [D2NT] Follow the Leader
« Antwort #3 am: Mai 30, 2010, 02:15:20 »
naja wenn man die tp schleife rauskriegt und der leecher sich hinter dem leader her teleportieren würd, anstatt zu laufen wärs echt imba...1 mf bot laufen lassen und 7 andere die hinterher porten und alles aufsammeln:
1. immer full exp
2. immer full drop bei 8/8 partymember in range...

Sans

  • Newbie
  • *
  • Danke
  • -vergeben: 0
  • -erhalten: 0
  • Beiträge: 1
    • Profil anzeigen
    • E-Mail
Re: [D2NT] Follow the Leader
« Antwort #4 am: Mai 30, 2010, 02:07:08 »
hab dir ne nachricht geschrieben :) evtl kannst ma weiterhelfen

flusen

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 18
  • Beiträge: 38
    • Profil anzeigen
Re: [D2NT] Follow the Leader
« Antwort #5 am: Mai 30, 2010, 04:07:59 »
naja wenn man die tp schleife rauskriegt und der leecher sich hinter dem leader her teleportieren würd, anstatt zu laufen wärs echt imba..


das mit dem hinterherteleportieren sollte vermutlich sogar funktionieren (habe mich da oben glaub ich blöd ausgedrückt) ich kann es nur nicht wirklich testen da ich keine zwei Chars hab die telen könn  :cry3:

Aber da der Bot die NTM_MoveTo Funktion nutzt um dem Leader zu folgen & dadrin ja die Entscheidung fällt ob er tele nutzen kann/soll/darf, denke ich es geht wenn er teleport kann...

Bot_for_Fun

  • Sr. Member
  • ****
  • Danke
  • -vergeben: 9
  • -erhalten: 37
  • Beiträge: 484
    • ICQ Messenger - 426234793
    • Profil anzeigen
    • Bot-Area.net
    • E-Mail
Re: [D2NT] Follow the Leader
« Antwort #6 am: Mai 30, 2010, 04:25:38 »

das mit dem hinterherteleportieren sollte vermutlich sogar funktionieren (habe mich da oben glaub ich blöd ausgedrückt) ich kann es nur nicht wirklich testen da ich keine zwei Chars hab die telen könn  :cry3:

Aber da der Bot die NTM_MoveTo Funktion nutzt um dem Leader zu folgen & dadrin ja die Entscheidung fällt ob er tele nutzen kann/soll/darf, denke ich es geht wenn er teleport kann...


also falls du jemanden zum testen brauchst ich kann dir helfen ^^



1. Bot downloaden & einstellen
2. Bot starten
3. Mf-runs
4. ???
5. Profit

ratsyknuf

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 0
  • Beiträge: 19
    • Profil anzeigen
Re: [D2NT] Follow the Leader
« Antwort #7 am: Mai 30, 2010, 06:31:31 »
ich hatte heute mal zeit und wollte den bot ausprobieren...problem bei mir war nur...

2x lvl1 chars der leecher in a1 stadt der 2te char im blutmoor

der leecher ist immer vom portalplatz zu akara -> kashya -> portalplatz hat immer diese runde gemacht so lange bis einmal tp dann auf war an portal platz, dann hat er das benutzt. direkt nachdem er durchgegangen war hat er das game geleavt und im log vom D2NT Manager steht Enigmabug - quit game...

hmm was läuft falsch? enigmabug als quit hinweis sagt mir nichts =(

Bot_for_Fun

  • Sr. Member
  • ****
  • Danke
  • -vergeben: 9
  • -erhalten: 37
  • Beiträge: 484
    • ICQ Messenger - 426234793
    • Profil anzeigen
    • Bot-Area.net
    • E-Mail
Re: [D2NT] Follow the Leader
« Antwort #8 am: Mai 30, 2010, 06:35:46 »
ich hatte heute mal zeit und wollte den bot ausprobieren...problem bei mir war nur...

2x lvl1 chars der leecher in a1 stadt der 2te char im blutmoor

der leecher ist immer vom portalplatz zu akara -> kashya -> portalplatz hat immer diese runde gemacht so lange bis einmal tp dann auf war an portal platz, dann hat er das benutzt. direkt nachdem er durchgegangen war hat er das game geleavt und im log vom D2NT Manager steht Enigmabug - quit game...

hmm was läuft falsch? enigmabug als quit hinweis sagt mir nichts =(


enigma bug = kein enigma = nicht das runenwort rätsel equiped = kein telen



1. Bot downloaden & einstellen
2. Bot starten
3. Mf-runs
4. ???
5. Profit

flusen

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 18
  • Beiträge: 38
    • Profil anzeigen

Re: [D2NT] Follow the Leader
« Antwort #9 am: Mai 30, 2010, 06:58:42 »
...und das er ständig zu kashya gerannt ist könnte daran liegen das in deiner Charconfig
NTConfig_UseMerc = true steht... setz das mal auf false.
Sonst will dein Char ständig den Merc wiederbeleben den er ja noch garnich hat^^

@Bot_for_Fun danke für dein Angebot zum testen - hab jetzt aber glücklicherweise ne Eni und kann das somit selbst testen! Werd denn hier bescheid geben wie´s aussieht. falls ich dann in anderer hinsicht jemanden zum Testen brauche komm ich aber gerne drauf zurück :D
« Letzte Änderung: Mai 30, 2010, 07:02:20 von flusen »

ratsyknuf

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 0
  • Beiträge: 19
    • Profil anzeigen
Re: [D2NT] Follow the Leader
« Antwort #10 am: Mai 30, 2010, 07:11:12 »
achso...ich dachte, da er schrieb das er keinen zweiten char mit tele hat, um das auszuprieren, dass das bedeuten würde, das er hinterherläuft...

flusen

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 18
  • Beiträge: 38
    • Profil anzeigen
Re: [D2NT] Follow the Leader
« Antwort #11 am: Mai 30, 2010, 07:55:39 »
achso...ich dachte, da er schrieb das er keinen zweiten char mit tele hat, um das auszuprieren, dass das bedeuten würde, das er hinterherläuft...


ist eigentlich auch so! Welche D2NT Version nutzt du denn glaube das dürfte dir "nur" mit der 3.1 bzw Bluebird Version passieren... mit der 3.0 müsste es gehn!

ratsyknuf

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 0
  • Beiträge: 19
    • Profil anzeigen
Re: [D2NT] Follow the Leader
« Antwort #12 am: Mai 30, 2010, 09:59:40 »
achso...ich dachte, da er schrieb das er keinen zweiten char mit tele hat, um das auszuprieren, dass das bedeuten würde, das er hinterherläuft...


ist eigentlich auch so! Welche D2NT Version nutzt du denn glaube das dürfte dir "nur" mit der 3.1 bzw Bluebird Version passieren... mit der 3.0 müsste es gehn!


ah siehste ;)  hab die 3.1 bluebird

flusen

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 18
  • Beiträge: 38
    • Profil anzeigen
Re: [D2NT] Follow the Leader
« Antwort #13 am: Mai 31, 2010, 09:58:24 »
denn haben wir ja das Problem  :)

zur lösung hätt ich da zwei Vorschläge für dich...
1. entweder einfach Orginal 3.0 nehmen  :wink:
2. oder Bluebird etwas anpassen (und bei der Gelegenheit leicht optimieren/verbessern)

Variante zwei müsstest du folgendes machen:

die Datei D2NT\scripts\libs\common\NTMove.ntl öffnen und den Inhalt
hiermit ersetzen (natürlich nur wenn du selbst noch nix in der Datei geändert hast - sonst sind deine Änderungen ja für´n A***h)

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_NotUseTeleport)
_teleport = false;
else
_teleport = true;

if(NTC_GetSkillLevel(54) < 1 && !NTConfig_NotUseTeleport)
{
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_NotUseTeleport) {
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;
}

function NTM_MoveToPresetUnit(areaid, unittype, classid, offsetx, offsety, clearpath)
{
var i, n;
var _unit;

if(arguments.length < 4)
{
offsetx = 0;
offsety = 0;
}

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

for(i = 0 ; i <= 2 ; i++)
{
_unit = GetPresetUnits(areaid, unittype);

if(_unit)
{
for(n = 0 ; n < _unit.length ; n++)
{
if(_unit[n].id == classid)
return NTM_MoveTo(areaid, _unit[n].roomx*5+_unit[n].x+offsetx, _unit[n].roomy*5+_unit[n].y+offsety, 3, clearpath);
}
}

if(i < 2)
NTC_Delay(500);
}

return false;
}

function NTM_MoveToStair(areaid, subareaid, offsetx, offsety, clearpath)
{
var i, n;
var _unit;

if(arguments.length < 3)
{
offsetx = 0;
offsety = 0;
}

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

for(i = 0 ; i <= 2 ; i++)
{
_unit = GetPresetUnits(areaid, NTC_UNIT_TILE);

if(_unit)
{
for(n = 0 ; n < _unit.length ; n++)
{
if(_unit[n].subareaid == subareaid)
return NTM_MoveTo(areaid, _unit[n].roomx*5+_unit[n].x+offsetx, _unit[n].roomy*5+_unit[n].y+offsety, 3, clearpath);
}
}

if(i < 2)
NTC_Delay(500);
}

return false;
}

function NTM_TeleportTo(x, y)
{
NTC_CastSkill(54, NTC_HAND_RIGHT, x, y);

for(var i = 0 ; i < 15 ; i++)
{
if(Math.abs(me.x-x) < 4 && Math.abs(me.y-y) < 4)
return true;

NTC_Delay(NTC_DELAY_FRAME);
}

return false;
}

function NTM_WalkTo(x, y)
{
var i;
var _prex1, _prey1;
var _prex2, _prey2;

if(me.runwalk == 0)
me.runwalk = 1;

for(i = 0 ; i < 480 ; i++)
{
if((i % 10) == 0)
{
if((i % 60) == 0)
{
_prex1 = me.x;
_prey1 = me.y;

if((i % 120) == 0)
{
_prex2 = me.x;
_prey2 = me.y;
}
}

ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, x, y);
}

NTC_Delay(NTC_DELAY_FRAME);

if(Math.abs(me.x-x) < 2 && Math.abs(me.y-y) < 2)
break;

if((i % 10) == 9)
{
ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
NTC_Delay(NTC_DELAY_FRAME);

if((i % 60) == 59)
{
if(me.x == _prex1 && me.y == _prey1 && !NTC_InTown())
{
NTA_ClearPosition(2);

NTP_DoPrecast(false);
}

if((i % 120) == 119 && me.x == _prex2 && me.y == _prey2)
return false;
}
}
}

ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
NTC_Delay(NTC_DELAY_FRAME);

return (i < 480);
}

function NTM_TakeUnit(unittype, classid)
{
var _unit;
var _prearea;

_unit = NTC_FindUnit(unittype, classid, 5);

if(!_unit)
return false;

_prearea = me.areaid;

for(var i = 0 ; i < 20 ; i++)
{
if((i % 5) == 0)
{
if(i == 10)
NTM_MoveTo(_prearea, me.x+6, me.y+6);

if(NTM_GetCloserInt(_unit))
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _unit);
}

NTC_Delay(200);

if(me.areaid != _prearea)
break;
}

while(me.areaid == 0)
NTC_Delay(200);

if(me.areaid == _prearea)
return false;

NTC_PingDelay(NTConfig_AreaDelay);

    return true;
}

function NTM_TakeStair(areaid)
{
var _unit;
var _prearea;

_unit = NTM_GetStairInt(areaid);

if(!_unit)
return false;

_prearea = me.areaid;

for(var i = 0 ; i < 20 ; i++)
{
if((i % 5) == 0)
{
if(i == 10)
NTM_MoveTo(_prearea, me.x+6, me.y+6);

if(NTM_GetCloserInt(_unit))
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _unit);
}

NTC_Delay(200);

if(me.areaid != _prearea)
break;
}

while(me.areaid == 0)
NTC_Delay(200);

if(me.areaid == _prearea)
return false;

NTC_PingDelay(NTConfig_AreaDelay);

    return true;
}

function NTM_TakeWaypoint(areaid)
{
var _unit;

if(me.areaid == areaid)
return true;

_unit = NTM_GetWaypointInt();

if(!_unit)
return false;

if(NTC_InTown())
me.Cancel(1);

for(var i = 0 ; i < 20 ; i++)
{
if((i % 10) == 0)
{
if(NTM_GetCloserInt(_unit))
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _unit);
}

NTC_Delay(200);

if(GetUIState(0x14))
{
if(me.TakeWaypoint(areaid))
{
NTC_PingDelay(NTConfig_AreaDelay);
return true;
}

break;
}
}

return false;
}

function NTM_UsePortal(how, dest, ownername, portal)
{
if(me.areaid == dest)
return true;

if(NTC_InTown())
me.Cancel(1);

if(NTM_ChangeAreaInt(how, dest, ownername, portal))
{
NTC_PingDelay(NTConfig_AreaDelay);
return true;
}

return false;
}

function NTM_MakeTP(dest)
{
var _usetp = true;
var _portal;
var _portalname;

if(NTC_InTown())
return true;

if(arguments.length < 1)
_usetp = false;

if(!NTC_CastSkill(220, NTC_HAND_RIGHT))
return false;

NTC_PingDelay(500);

_portalname = GetLocaleString(3226);

for(var i = 0 ; i <= 2 ; i++)
{
_portal = NTC_FindUnit(NTC_UNIT_OBJECT, _portalname);

if(_portal)
{
do
{
if(_portal.mode == 2 && NTC_CheckOwner(_portal))
{
if(_usetp)
return NTM_UsePortal("BluePortal", dest, me.name, _portal);

return true;
}
} while(_portal.GetNext());
}

if(i < 2)
NTC_Delay(500);
}

return false;
}

// Internal function
function NTM_GetStairInt(areaid)
{
var _tile;

for(var i = 0 ; i <= 2 ; i++)
{
_tile = NTC_FindUnit(NTC_UNIT_TILE);

if(_tile)
{
do
{
if(!areaid || _tile.subareaid == areaid)
return _tile;
} while(_tile.GetNext());
}

if(i < 2)
NTC_Delay(500);
}

return null;
}

function NTM_GetWaypointInt()
{
var _waypoint;
var _classid;

for(var i = 0 ; i <= 2 ; i++)
{
_waypoint = NTC_FindUnit(NTC_UNIT_OBJECT);

if(_waypoint)
{
do
{
_classid = _waypoint.classid;

if(_classid == 119 || _classid == 145 || _classid == 156 || _classid == 157
|| _classid == 237 || _classid == 238 || _classid == 288 || _classid == 323
|| _classid == 324 || _classid == 398 || _classid == 402 || _classid == 429
|| _classid == 494 || _classid == 496 || _classid == 511 || _classid == 539)
return _waypoint;
} while(_waypoint.GetNext());
}

if(i < 2)
NTC_Delay(500);
}

return null;
}

function NTM_ChangeAreaInt(how, dest, ownername, myportal)
{
var _portal;
var _playerportal = false;
var _prearea;

if(how == "BluePortal")
{
if(!ownername)
ownername = me.name;

_playerportal = true;
}

if(arguments.length > 3 && myportal)
_portal = myportal;
else
{
_portal = NTM_FindCorrectPortalInt(_playerportal, ownername);

if(_portal < 0)
_portal = NTM_FindPortalAreaInt(dest);

if(_portal == -1)
return false;
}

if(!_portal)
return false;

_prearea = me.areaid;

for(var i = 0 ; i < 20 ; i++)
{
if((i % 5) == 0)
{
if(i == 10)
NTM_MoveTo(_prearea, me.x+6, me.y+6);

if(NTM_GetCloserInt(_portal))
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _portal);
}

NTC_Delay(200);

if(me.areaid != _prearea)
break;
}

while(me.areaid == 0)
NTC_Delay(200);

return (me.areaid == dest);
}

function NTM_FindCorrectPortalInt(blueportal, ownername)
{
var _portal;
var _portalname;

_portalname = GetLocaleString(3226);

if(blueportal)
{
for(var i = 0 ; i <= 2 ; i++)
{
_portal = NTC_FindUnit(NTC_UNIT_OBJECT, _portalname);

if(_portal)
{
do
{
if(_portal.mode == 2 && NTC_CheckOwner(_portal, ownername) && GetDistance(me, _portal) <= 30)
return _portal;
} while(_portal.GetNext());
}

if(i < 2)
NTC_Delay(500);
}

return -2;
}
else
{
for(var i = 0 ; i <= 2 ; i++)
{
_portal = NTC_FindUnit(NTC_UNIT_OBJECT, _portalname);

if(_portal)
{
do
{
if(_portal.mode == 2 && !_portal.GetParent())
return _portal;
} while(_portal.GetNext());
}

if(i < 2)
NTC_Delay(500);
}
}

return -3;
}

function NTM_FindPortalAreaInt(dest)
{
var _portal;
var _portalname;

_portalname = GetLocaleString(3226);

for(var i = 0 ; i <= 2 ; i++)
{
_portal = NTC_FindUnit(NTC_UNIT_OBJECT, _portalname);

if(_portal)
{
do
{
if(_portal.mode == 2 && _portal.subareaid == dest)
{
if(_portal.GetParent())
{
if(NTC_CheckOwner(_portal) || NTC_InMyParty(_portal.GetParent()))
return _portal;
}
else
return _portal;
}
} while(_portal.GetNext());
}

if(i < 2)
NTC_Delay(500);
}

return -1;
}

function NTM_GetCloserInt(unit)
{
if(GetDistance(me, unit) > 2)
return NTM_MoveTo(unit.areaid, unit.x, unit.y);

return true;
}

// vector class
function vector()
{
if(arguments.length == 2)
{
this.x = arguments[0];
this.y = arguments[1];
}
else if(arguments.length == 1)
{
this.x = arguments[0].x;
this.y = arguments[0].y;
}
else
{
this.x = 0;
this.y = 0;
}

this.rotate = vector_rotate;
this.normalize = vector_normalize;
this.length = vector_length;
this.setlength = vector_setlength;
this.toString = vector_toString;
this.set = vector_set;
this.angle = vector_angle;
}

function vector_rotate(degree)
{
if(!degree)
return true;

l = this.length();
if(!l)
return false;

this.normalize();

rad = degree * (Math.PI/180);

nx = this.x * Math.cos(rad) - this.y * Math.sin(rad);
ny = this.x * Math.sin(rad) + this.y * Math.cos(rad);

this.x = nx;
this.y = ny;

this.normalize();
if(l != 1)
this.setlength(l);

return true;
}

function vector_angle(v)
{
rad_degree = 180 / Math.PI;

return Math.acos((this.x*v.x) + (this.y*v.y)) * rad_degree;
}

function vector_length()
{
return Math.sqrt((this.x*this.x) + (this.y*this.y));
}

function vector_setlength(length)
{
this.normalize();
this.x *= length;
this.y *= length;
}

function vector_normalize()
{
l = this.length();
if(!l)
return false;

this.x /= l;
this.y /= l;

return true;
}

function vector_toString()
{
str = "(";
str += Math.round(this.x*1000)/1000;
str += " , ";
str += Math.round(this.y*1000)/1000;
str += ") : ";
str += Math.round(this.length()*1000)/1000;

return str;
}

function vector_set(tx, ty)
{
if(arguments.length == 1)
{
this.x = tx.x;
this.y = tx.y;
}
else if(arguments.length == 2)
{
this.x = tx;
this.y = ty;
}
}

// coord class
function coord()
{
this.data = null;

if(arguments.length == 3)
{
this.x = arguments[0];
this.y = arguments[1];
this.data = arguments[2];
}
else if(arguments.length == 2)
{
this.x = arguments[0];
this.y = arguments[1];
}
else if(arguments.length == 1)
{
this.x = arguments[0].x;
this.y = arguments[0].y;
}
else
{
this.x = 0;
this.y = 0;
}

this.dist = coord_dist;
this.dist2 = coord_dist2;
this.dir = coord_dir;
this.move = coord_move;
this.set = coord_set;
this.toString = coord_toString;
}

function coord_set(tx, ty, d)
{
if(arguments.length == 1)
{
this.x = tx.x;
this.y = tx.y;

if(tx.data)
this.data = tx.data;
else
this.data = null;
}
else if(arguments.length == 2)
{
this.x = tx;
this.y = ty;
this.data = null;
}
else if(arguments.length == 3)
{
this.x = tx;
this.y = ty;
this.data = d;
}
}

function coord_dist(tx, ty)
{
if(arguments.length == 1)
{
vx = this.x - tx.x;
vy = this.y - tx.y;

return Math.round(Math.sqrt((vx*vx) + (vy*vy)));
}
else if(arguments.length == 2)
{
vx = this.x - tx;
vy = this.y - ty;

return Math.round(Math.sqrt((vx*vx) + (vy*vy)));
}
}

function coord_dist2(tx, ty)
{
if(arguments.length == 1)
{
vx = this.x - tx.x;
vy = this.y - tx.y;

return Math.floor((vx*vx) + (vy*vy));
}
else if(arguments.length == 2)
{
vx = this.x - tx;
vy = this.y - ty;

return Math.floor((vx*vx) + (vy*vy));
}
}

function coord_dir(tx, ty)
{
if(arguments.length == 1)
{
v = new vector(tx.x-this.x, tx.y-this.y);
v.normalize();

return v;
}
else if(arguments.length == 2)
{
v = new vector(tx-this.x, ty-this.y);
v.normalize();

return v;
}
}

function coord_move(vec, d)
{
if(d)
{
this.x += Math.round(vec.x*d);
this.y += Math.round(vec.y*d);

return true;
}
else if(vec.length())
{
this.x += Math.round(vec.x);
this.y += Math.round(vec.y);

return true;
}

return false;
}

function coord_toString()
{
return "( " + this.x + " , " + this.y + " ) " + this.data;
}

Hier ist der (meines Wissens) letzte Stand der Enigmabugabfrage drin wodurch z.B. keine mehrfachen Logeinträge beim Enigmabug entstehen. Ausserdem habe ich hier noch eine weitere Variable drin die für die Teleportnutzung mit Abgefragt wird.

Als nächstes musst du noch in der
D2NT\scripts\NTBot\char_configs\NTConfig.ntl
diesen Eintrag hinzufügen:
var NTConfig_NotUseTeleport;
und in die Config des Followchars (oder jedes anderen Chars der nich Teleporten soll/kann):
NTConfig_NotUseTeleport = true;
« Letzte Änderung: Juni 02, 2010, 04:33:49 von flusen »

ratsyknuf

  • Newbie
  • *
  • Danke
  • -vergeben: 2
  • -erhalten: 0
  • Beiträge: 19
    • Profil anzeigen
Re: [D2NT] Follow the Leader
« Antwort #14 am: Juni 01, 2010, 01:43:38 »
super danke, werd ich nahher direkt mal ausprobieren...
 :thumbsup:

-----------------------------------------

hmm geht net...in den einzelnen acts macht er weiterhin seine runde zum händler und wieder zurück zum portalplatz...in act5 rennt er mir sogar hinter her...so wie es eigentlich auch sein sollte, nur wenn ich mit ihm rausrenne aus act5 dann bleibt der followbot an der stadtgrenze stehen... :uglystupid1:
wenn ich in den anderen acts nen portal mache, folgt er durch das portal, läuft mir dann aber nicht hinterher....kein enigmabug quit mehr <-- schonmal nen fortschritt ;)  naja ich kann durch die ganze ebene laufen er kommt net hinterher und er wenn ich mich inne stadt tele, dann macht er auch nen tp auf und kommt zurück...
ach und nochwas...hatte fehlermeldung...pic ist dabei..danach hat er nichts mehr gemacht...den weg vom portal nach da unten habe ich ihn bewegt...

naja warscheinlich muss ich halt auf 3.0 umsteigen =)
« Letzte Änderung: Juni 01, 2010, 07:45:55 von ratsyknuf »