bestimmten abstand halten

08/18/2010 22:00 theEye321123#16
also überchicken muss ich mir keine gedanken machen wenn ich meinenleecher rumlaufen lass und chicken definiert hab ( also in der charconfig )

aber eine bitte hätte ich noch :)
könntest du mir vllt die NTM_WalkTo erläutern?
also im detail möglichst
Code:
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);
}
ich versuche grad die ecke oberhalb vom star zu umlaufen und ich glaub das wäre gut machbar wenn ich eine eigene ( abgeänderte) walto funktion benutz, die prüft ob der char grade in die ecke laufen will ^^
08/18/2010 22:33 lanara#17
Ein solches Script gibt es btw. schon, zwar noch nicht ganze ausgereift und nur ab Stern, aber naja. :P

[Only registered and activated users can see links. Click Here To Register...]

Oder direkt eins, wo der Bot 3 TPs an den Siegeln macht, was um einiges Schneller und sicherer ist.

[Only registered and activated users can see links. Click Here To Register...]
08/18/2010 23:23 theEye321123#18
ich weiß danke :) die beiden scripts sind mir bekannt, aber nicht das was ich suche ;)
08/19/2010 13:44 theEye321123#19
so ich hab das ganze script das ich hatte ein "wenig" umgemodelt und in den paar runs die ich bisher gemacht hab hats auchschon wunderbar geklappt :)
ich konnte ein paar ecken in denen man hängenbleibt schon ausbügeln und dass der leecher anhält wenn er nah genug ist hab ich auch geschafft :)

das einzige was soweit noch probleme macht ist der leader ( der cleart nicht ganz sauber sodass chicken hin und wieder auftreten) -> da setzt ich noch ein paar punkte die er zum clearen abtelt


Code:
function NTMain()
{
   
   Include("libs/common/NTCommon.ntl");
   Include("common/NTMove.ntl")
   NTC_IncludeLibs();
   NTC_IncludeConfig("NTBot/char_configs");

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

   NTA_Initialize(); // 10

   var _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);

   
   if(!NTTM_CheckAct())
   {
      NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
      return;
   }

   if(me.areaid != 103)
   {
   if(!NTTM_TownMove("waypoint"))
   {
      NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
      return;
   }

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

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

      Delay(200);
   }   

   _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
   
	if(!_myPlayerUnit)
	{
		Say("no player found");
		ExitGame();
	}
	
	for(var i=0;i<=10;i++)
	{
		if(_myPlayerUnit.areaid>=129)
			{
			NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
			break;
			}
		Delay(750);
	}
	
   while(me.areaid == 103 && NTC_InMyParty(NTConfig_Leader))
   {
      NTM_UsePortal("BluePortal", 108, NTConfig_Leader); // 50
      Delay(1000);
   }

   var _distance=0;
   var _path;
   var _leaderx=0;
   var _leadery=0;
   
    while(NTC_InMyParty(NTConfig_Leader))
	{	
		NTP_DoPrecast(false);
		Delay(800);	
		_myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
		if(me.areaid == 108 && me.areaid == _myPlayerUnit.areaid)
		{
			_leaderx=_myPlayerUnit.x;
			_leadery=_myPlayerUnit.y;
			_distance=GetDistance(me.x, me.y, _leaderx, _leadery);
			
			if(_distance>=70)
			{
				_path = GetPath(me.areaid, me.x, me.y, _leaderx, _leadery, false);
				if(_path)
				{
					
					for(var i = 0; i < _path.length; i++)
					{
						_distance=GetDistance(me.x, me.y, _leaderx, _leadery);
						if(_distance>=50)
						{
							if(_path[i][0]<7700||_path[i][0]>7880||_path[i][1]<5220)
								{
								ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
								NTC_Delay(NTC_DELAY_FRAME);
								ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
								break;
								}
							else if(Math.abs(_path[i][0]-7817)<=2 && Math.abs(_path[i][1]-5436)<=2)
								{
								NTM_WalkTo(7820, 5428);
								}
							else if(Math.abs(_path[i][0]-7817)<=2 && Math.abs(_path[i][1]-5371)<=2)
								{
								NTM_WalkTo(7819, 5368);
								}
							else if(Math.abs(_path[i][0]-7763)<=3 && Math.abs(_path[i][1]-5267)<=3)
								{
								NTM_WalkTo(_path[i][0], 5278);
								}
							else if(Math.abs(_path[i][0]-7792)<=3 && Math.abs(_path[i][1]-5412)<=3)
								{
								NTM_WalkTo(7792, 5400);
								}
							else
								{
								NTM_WalkTo(_path[i][0], _path[i][1]);
								}
						}
						else
						{
							ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
							NTC_Delay(NTC_DELAY_FRAME);
							ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
							break;
						}
					}
				}
			}
			_diablo = NTC_FindUnit(NTC_UNIT_MONSTER, 243);
			Delay(300);

			if(_diablo)    //diablo is too close
				{
				Delay(10000);
				break;
					//Say("Diablo found - leaving game");
					//ExitGame(); //leave game and wait for leader to open a new one
				}
			
		}
		if(_myPlayerUnit.areaid>=129)
			NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
    
	}
	NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");

}
 
 

function MW_GetPlayerUnit2(leaderName)
{
    var _player;
    
    if(arguments.length < 1 || !leaderName)
        return null;
    
    _player = GetPlayerUnit();

    if(_player)
    {
        while(_player.GetNext())
        {
            if(_player.name.toLowerCase() == leaderName.toLowerCase())
                return _player;
        }
    }
   
    return null;
}
ps: kann man doch besser lesen als vorher :D
08/19/2010 17:31 Muddy Waters#20
Quote:
Originally Posted by theEye321123 View Post
so ich hab das ganze script das ich hatte ein "wenig" umgemodelt und in den paar runs die ich bisher gemacht hab hats auchschon wunderbar geklappt :)
ich konnte ein paar ecken in denen man hängenbleibt schon ausbügeln und dass der leecher anhält wenn er nah genug ist hab ich auch geschafft :)

das einzige was soweit noch probleme macht ist der leader ( der cleart nicht ganz sauber sodass chicken hin und wieder auftreten) -> da setzt ich noch ein paar punkte die er zum clearen abtelt


Code:
function NTMain()
{
   
   Include("libs/common/NTCommon.ntl");
   Include("common/NTMove.ntl")
   NTC_IncludeLibs();
   NTC_IncludeConfig("NTBot/char_configs");

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

   NTA_Initialize(); // 10

   var _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);

   
   if(!NTTM_CheckAct())
   {
      NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
      return;
   }

   if(me.areaid != 103)
   {
   if(!NTTM_TownMove("waypoint"))
   {
      NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
      return;
   }

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

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

      Delay(200);
   }   

   _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
   
    if(!_myPlayerUnit)
    {
        Say("no player found");
        ExitGame();
    }
    
    for(var i=0;i<=10;i++)
    {
        if(_myPlayerUnit.areaid>=129)
            {
            NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
            break;
            }
        Delay(750);
    }
    
   while(me.areaid == 103 && NTC_InMyParty(NTConfig_Leader))
   {
      NTM_UsePortal("BluePortal", 108, NTConfig_Leader); // 50
      Delay(1000);
   }

   var _distance=0;
   var _path;
   var _leaderx=0;
   var _leadery=0;
   
    while(NTC_InMyParty(NTConfig_Leader))
    {    
        NTP_DoPrecast(false);
        Delay(800);    
        _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
        if(me.areaid == 108 && me.areaid == _myPlayerUnit.areaid)
        {
            _leaderx=_myPlayerUnit.x;
            _leadery=_myPlayerUnit.y;
            _distance=GetDistance(me.x, me.y, _leaderx, _leadery);
            
            if(_distance>=70)
            {
                _path = GetPath(me.areaid, me.x, me.y, _leaderx, _leadery, false);
                if(_path)
                {
                    
                    for(var i = 0; i < _path.length; i++)
                    {
                        _distance=GetDistance(me.x, me.y, _leaderx, _leadery);
                        if(_distance>=50)
                        {
                            if(_path[i][0]<7700||_path[i][0]>7880||_path[i][1]<5220)
                                {
                                ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
                                NTC_Delay(NTC_DELAY_FRAME);
                                ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
                                break;
                                }
                            else if(Math.abs(_path[i][0]-7817)<=2 && Math.abs(_path[i][1]-5436)<=2)
                                {
                                NTM_WalkTo(7820, 5428);
                                }
                            else if(Math.abs(_path[i][0]-7817)<=2 && Math.abs(_path[i][1]-5371)<=2)
                                {
                                NTM_WalkTo(7819, 5368);
                                }
                            else if(Math.abs(_path[i][0]-7763)<=3 && Math.abs(_path[i][1]-5267)<=3)
                                {
                                NTM_WalkTo(_path[i][0], 5278);
                                }
                            else if(Math.abs(_path[i][0]-7792)<=3 && Math.abs(_path[i][1]-5412)<=3)
                                {
                                NTM_WalkTo(7792, 5400);
                                }
                            else
                                {
                                NTM_WalkTo(_path[i][0], _path[i][1]);
                                }
                        }
                        else
                        {
                            ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
                            NTC_Delay(NTC_DELAY_FRAME);
                            ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
                            break;
                        }
                    }
                }
            }
            _diablo = NTC_FindUnit(NTC_UNIT_MONSTER, 243);
            Delay(300);

            if(_diablo)    //diablo is too close
                {
                Delay(10000);
                break;
                    //Say("Diablo found - leaving game");
                    //ExitGame(); //leave game and wait for leader to open a new one
                }
            
        }
        if(_myPlayerUnit.areaid>=129)
            NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
    
    }
    NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");

}
 
 

function MW_GetPlayerUnit2(leaderName)
{
    var _player;
    
    if(arguments.length < 1 || !leaderName)
        return null;
    
    _player = GetPlayerUnit();

    if(_player)
    {
        while(_player.GetNext())
        {
            if(_player.name.toLowerCase() == leaderName.toLowerCase())
                return _player;
        }
    }
   
    return null;
}
ps: kann man doch besser lesen als vorher :D
Hier mal die angeforderte Erklärung, ich hoffe das reicht so, ansonsten musst du fragen, was du genauer wissen willst. ;)
Code:
function NTM_WalkTo(x, y)
{
    var i;
    var _prex1, _prey1;
    var _prex2, _prey2;

    if(me.runwalk == 0)
        me.runwalk = 1; // Always run aktivieren

    for(i = 0 ; i < 480 ; i++)
    {
        if((i % 10) == 0) // Alle 10 i bzw. immer wenn i ohne Rest durch 10 teilbar ist
        { // Alle hier eingeschlossenen if-Anweisungen werden im ersten Durchlauf ausgeführt
            if((i % 60) == 0) // Alle 60 i bzw. immer wenn i ohne Rest durch 60 teilbar ist
            {
                _prex1 = me.x;
                _prey1 = me.y;

                if((i % 120) == 0) // Alle 60 i bzw. immer wenn i ohne Rest durch 120 teilbar ist
                {
                    _prex2 = me.x;
                    _prey2 = me.y;
                }
            }

            ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, x, y); // Linker Klick down ohne gedrückte Shift Taste auf die Koordinaten x, y
        }

        NTC_Delay(NTC_DELAY_FRAME); // Delay um NTC_DELAY_FRAME == 40ms

        if(Math.abs(me.x-x) < 2 && Math.abs(me.y-y) < 2) // Wenn die Differenz der aktuellen Koordinaten zu den Zielkoordinaten kleiner als 2
            break;

        if((i % 10) == 9) // Wenn i geteilt durch 10 einen Rest von 9 ergibt
        {
            ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null); // Loslassen der zuvor gedrückten Maustaste
            NTC_Delay(NTC_DELAY_FRAME); // Delay um NTC_DELAY_FRAME == 40ms

            if((i % 60) == 59) // Wenn i geteilt durch 60 einen Rest von 59 ergibt
            {
                if(me.x == _prex1 && me.y == _prey1 && !NTC_InTown()) // Wenn sich der Char an der Ausgangsposition befindet, welche zuerst aktualisiert wird und sich nicht in der Stadt befindet --> eventuell belockiert durch Monster
                {
                    NTA_ClearPosition(2); // Töten aller Monster im Umkreis von 2

                    NTP_DoPrecast(false); // Precast, wenn bedarf besteht
                }

                if((i % 120) == 119 && me.x == _prex2 && me.y == _prey2) // Wenn i geteilt durch 60 einen Rest von 59 ergibt und sich der Char immernoch an der gespeicherten Ausgangsposition befindet, welche zuletzt aktualisiert wird
                    return false; // Funktionsabbruch mit Rückgabewert false
            }
        }
    }

    ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null); // Loslassen der zuvor gedrückten Maustaste
    NTC_Delay(NTC_DELAY_FRAME); // Delay um NTC_DELAY_FRAME == 40ms

    return (i < 480); // Funktionsabbruch mit Rückgabewert (i < 480) (Wahr, wenn Zielkoordinaten erreicht bzw. for Schleife per break beendet)
}
Das andere habe ich mir auch mal durchgelesen und direkt mal (in erster Linie stilistisch) optimiert. ;)
Code:
function NTMain()
{
  
    Include("libs/common/NTCommon.ntl");
    Include("common/NTMove.ntl")
    NTC_IncludeLibs();
    NTC_IncludeConfig("NTBot/char_configs");

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

    NTA_Initialize();

    var _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);


    if(!NTTM_CheckAct(4))
    {
        NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
        return;
    }
  
    NTTMGR_TownManager();

    NTTM_TownMove("portalspot");

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

        Delay(200);
    }  

    _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);

    if(!_myPlayerUnit)
    {
        Say("no player found");
        ExitGame();
    }

    for(var i=0; i <= 10; i++)
    {
        if(_myPlayerUnit.areaid >= 129)
        {
            NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
            break;
        }
        Delay(750);
    }

    while(me.areaid == 103 && NTC_InMyParty(NTConfig_Leader))
    {
        NTM_UsePortal("BluePortal", 108, NTConfig_Leader); // 50
        Delay(1000);
    }

    var _distance = 0;
    var _path;
    var _leaderx = 0;
    var _leadery = 0;

    while(NTC_InMyParty(NTConfig_Leader))
    {    
        NTP_DoPrecast(false);
        Delay(800);    
        _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
        
        if(me.areaid == 108 && me.areaid == _myPlayerUnit.areaid)
        {
            _leaderx = _myPlayerUnit.x;
            _leadery = _myPlayerUnit.y;
            _distance = GetDistance(me.x, me.y, _leaderx, _leadery);
            
            if(_distance >= 70)
            {
                _path = GetPath(me.areaid, me.x, me.y, _leaderx, _leadery, false);
                
                if(_path)
                {
                    for(var i = 0; i < _path.length; i++)
                    {
                        _distance = GetDistance(me.x, me.y, _leaderx, _leadery);
                        
                        if(_distance >= 50)
                        {
                            if(_path[i][0] < 7700 || _path[i][0] > 7880 || _path[i][1] < 5220)
                            {
                                ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
                                NTC_Delay(NTC_DELAY_FRAME);
                                ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
                                break;
                            }
                            else if(Math.abs(_path[i][0] - 7817) <= 2 && Math.abs(_path[i][1] - 5436) <= 2)
                            {
                                NTM_WalkTo(7820, 5428);
                            }
                            else if(Math.abs(_path[i][0] - 7817) <= 2 && Math.abs(_path[i][1] - 5371) <= 2)
                            {
                                NTM_WalkTo(7819, 5368);
                            }
                            else if(Math.abs(_path[i][0] - 7763) <= 3 && Math.abs(_path[i][1] - 5267) <= 3)
                            {
                                NTM_WalkTo(_path[i][0], 5278);
                            }
                            else if(Math.abs(_path[i][0] - 7792) <= 3 && Math.abs(_path[i][1] - 5412) <= 3)
                            {
                                NTM_WalkTo(7792, 5400);
                            }
                            else
                                NTM_WalkTo(_path[i][0], _path[i][1]);
                        }
                        else
                        {
                            ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
                            NTC_Delay(NTC_DELAY_FRAME);
                            ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
                            break;
                        }
                    }
                }
            }
            _diablo = NTC_FindUnit(NTC_UNIT_MONSTER, 243);
            Delay(300);

            if(_diablo)    //diablo is too close
            {
                Delay(10000);
                break;
                //Say("Diablo found - leaving game");
                //ExitGame(); //leave game and wait for leader to open a new one
            }
            
        }
        
        if(_myPlayerUnit.areaid >= 129)
            break;
    }
    
    NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
}
So ganz nachvollziehen kann ich es nicht, weil ich die Koordinaten im CS nicht im Kopf habe und diese folglich nicht ganz mit deinen Bedinungen in Verbindung bringen kann.

Zwei Sachen finde ich auf den ersten Blick etwas komisch:
Zum einen der Teil bei Diablo --> Looks a bit holprig ;)
Zum anderen Frage ich mich, inwieweit es Sinnvoll ist, auf die Position zu Klicken, auf der der Char gerade steht. Aufgrund von Rundungsfehlern würde ich vermuten, dass das zu einem Schritt in undefinierte Richtung führt, aber vielleicht hast du dir dabei ja etwas gedacht.

Lg
Muddy
08/19/2010 17:50 theEye321123#21
Quote:
Zum anderen Frage ich mich, inwieweit es Sinnvoll ist, auf die Position zu Klicken, auf der der Char gerade steht. Aufgrund von Rundungsfehlern würde ich vermuten, dass das zu einem Schritt in undefinierte Richtung führt, aber vielleicht hast du dir dabei ja etwas gedacht.
nope das klappt perfekt ^^ ein klick in etwa wo du stehst und ein unterbrechen des langlaufen am weg :) genau wies sein soll

das zu dia naja bin ja nochnet 100% fertig aber schon gute 90 :D
das läuft schon echt gut :)

mit nem lvl 1er char würd ichs zwar net empfehlen, dafür cleart der leader manchmal zu unsauber, aber ab lvl 30 / 40 bei entsprechenden chickeneinstellungen kein problem

das mit den koordinaten hab ich bei mir im script schon mit comments versehen die versuchen zu erklären welche ecken das sind ^^

btw auf diese art und weise klappt das deutlich besser als mit checkpoints :D

thx btw für die erläuterung :) hatte es dann auch irgendwann mit grübeln raus wie ich das mit dem stehenbleiben mach

und ich hab ein neues problem ^^

und zwar wollt ich meinen leecher bei baal dazu bringen durchs tp zu gehen aber der WILL NET :( der steht davor und es klappt einfach net

ich vergleich mal deine optimierungen mit meinem code und poste dann die aktuelle version

mir ist übrigends aufgefallen, dass mein leader alle paar spiele (unregelmäßig) einfach kein passwort verwendet und sein cta benutzt er auchnet :/ (dabei hab ich dem extra eins gebaut) dafür dauert der precast ziemlich lange

Code:
--------

so hier noch das aktuelle script teilweise mit comments :)
Code:
function NTMain()
{
   
   Include("libs/common/NTCommon.ntl");
   Include("common/NTMove.ntl")
   NTC_IncludeLibs();
   NTC_IncludeConfig("NTBot/char_configs");

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

   NTA_Initialize(); 
   
   var _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);

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

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

      Delay(200);
   }   

   _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
   
	if(_myPlayerUnit==null)
	{
		Say("no player found");
		ExitGame();
	}
	
	for(var i=0;i<=10;i++)
	{
		if(_myPlayerUnit.areaid>=129)
		{
			NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
			break;
		}
		if(_myPlayerUnit.areaid==108||_myPlayerUnit.areaid==107)
			break;
		Delay(750);
	}
	
   while(me.areaid == 103 && NTC_InMyParty(NTConfig_Leader))
   {
      NTM_UsePortal("BluePortal", 108, NTConfig_Leader); // 50
      Delay(750);
   }

   var _distance=0;
   var _path;
   var _leaderx=0;
   var _leadery=0;
   
    while(NTC_InMyParty(NTConfig_Leader))
	{	
		NTP_DoPrecast(false);
		_myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
		if(_myPlayerUnit==null)
			NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
		if(me.areaid == 108 && me.areaid == _myPlayerUnit.areaid)
		{
			_leaderx=_myPlayerUnit.x;
			_leadery=_myPlayerUnit.y;
			_distance=GetDistance(me.x, me.y, _leaderx, _leadery);
			
			if(_distance>=70)
			{
				_path = GetPath(me.areaid, me.x, me.y, _leaderx, _leadery, false);
				if(_path)
				{
					
					for(var i = 0; i < _path.length; i++)
					{
						_distance=GetDistance(me.x, me.y, _leaderx, _leadery);
						if(_distance>=50)
						{
							if(_path[i][0]<7708||_path[i][0]>7880||_path[i][1]<5223) // verhindert zu weites laufen richtung siegel!!!
							{
								ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
								NTC_Delay(NTC_DELAY_FRAME);
								ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
								break;
							}
							else if(Math.abs(_path[i][0]-7817)<=2 && Math.abs(_path[i][1]-5436)<=2) // zweite ecke am rechter weg vom eingang aus -> ecke zum mittelteil hin
							{
								NTM_WalkTo(7820, 5428);
							}
							else if(Math.abs(_path[i][0]-7817)<=2 && Math.abs(_path[i][1]-5371)<=2) // ecke am rechten weg nach dem mittelteil vom eingang aus
							{
								NTM_WalkTo(7819, 5368);
							}
							else if(Math.abs(_path[i][0]-7763)<=3 && Math.abs(_path[i][1]-5267)<=3) // ecke links über pentagramm
							{
								NTM_WalkTo(_path[i][0], 5278);
							}
							else if(Math.abs(_path[i][0]-7792)<=3 && Math.abs(_path[i][1]-5412)<=3) // linke untere ecke im mittelteil nach dem eingang 
							{
								NTM_WalkTo(7792, 5400);
							}
							else
							{
								NTM_WalkTo(_path[i][0], _path[i][1]);
							}
						}
						else
						{
							ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
							NTC_Delay(NTC_DELAY_FRAME);
							ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
							break;
						}
					}
				}
			}
			_diablo = NTC_FindUnit(NTC_UNIT_MONSTER, 243);
			Delay(300);

			if(_diablo)    
				{
				Delay(10000);	// wenn dia da ist -> 10 sec warten
				break;			// dia sollte dann tot sein :D und auf zum nächsten script
				}
			
		}
		if(_myPlayerUnit.areaid>=129)
			NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
    
		Delay(800);	
	}
	
	NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");

}
 
 

function MW_GetPlayerUnit2(leaderName)
{
    var _player;
    
    if(arguments.length < 1 || !leaderName)
        return null;
    
    _player = GetPlayerUnit();

    if(_player)
    {
        while(_player.GetNext())
        {
            if(_player.name.toLowerCase() == leaderName.toLowerCase())
                return _player;
        }
    }
   
    return null;
}

wenn du willst poste ich noch die restlichen scripts und du kannsts ausprobieren ^^
also das diascript halt und ich hab noch eine zusätzliche variable damit der leader auch auf den leecher wartet, wenn der schon im game ist :)


E: das problem mim in den weltstein kommen hab ich gelöst :D
joa damit isses eigentlich alles fertig
vllt noch die ein oder andere feinheit aber im großen und ganze klappts :)
08/20/2010 19:34 theEye321123#22
so das script ist fast fertig :)
bin grad am testen :D

Code:
function NTMain()
{
   
   Include("libs/common/NTCommon.ntl");
   Include("common/NTMove.ntl")
   NTC_IncludeLibs();
   NTC_IncludeConfig("NTBot/char_configs");

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

   NTA_Initialize(); 
   
	var _myPlayerUnit 
   
    if(!NTTM_CheckAct(4))
    {
        NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
        return;
    }
       
   NTTMGR_TownManager();
   
   NTTM_TownMove("portalspot");

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

      Delay(200);
   }   
	_myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
	if(_myPlayerUnit==null)
	{
		ExitGame();
	}	
   
	while(_myPlayerUnit.areaid<=109)
	{
	   if(me.areaid == 103 && NTC_InMyParty(NTConfig_Leader))
	   {
			NTM_UsePortal("BluePortal", 108, NTConfig_Leader); // 50
			Delay(750);
			if(me.areaid==108)
				break;
	   }
	   	_myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
		if(_myPlayerUnit==null)
		{
			ExitGame();
		}	
		Delay(750);
	}

   var _distance=0;
   var _path;
   var _leaderx=0;
   var _leadery=0;
   var _leadercheckseals=0;
   var _noedges=false;
   
   while(NTC_InMyParty(NTConfig_Leader))
	{	
		NTP_DoPrecast(false);
		_myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
		if(_myPlayerUnit==null)
		{
			NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
		}	
		_leaderx=_myPlayerUnit.x;
		_leadery=_myPlayerUnit.y;
		if(me.areaid == 108 && me.areaid == _myPlayerUnit.areaid)
		{
			_distance=GetDistance(me.x, me.y, _leaderx, _leadery);
			
			if(_distance>=65)
			{
				
				_leadercheckseals = MW_LeaderCheckSeals(_leaderx, _leadery, me.x, me.y)
				if(_leadercheckseals == 1)
				{
					
					_path = GetPath(me.areaid, me.x, me.y, _leaderx, _leadery, false);
					if(_path)
					{
											
						for(var i = 0; i < _path.length; i++)
						{
							_distance=GetDistance(me.x, me.y, _leaderx, _leadery);
							if(_distance>=45)
							{
								_noedges = CheckforEdges(_path[i][0] ,_path[i][1]);
								if(_noedges == true)
								{
									Delay(100)
								}
								else
								{
									break;
								}
								
							}
							else
							{
								ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
								NTC_Delay(NTC_DELAY_FRAME);
								ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
								break;
							}
						}
					}
				}
			}
			
		}
		if(_myPlayerUnit.areaid>=129)
			{
			Delay(2000);
			NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
			break;
			}
		Delay(800);	
	}
	if(!NTC_InMyParty(NTConfig_Leader))
		NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
}
 
 

function MW_GetPlayerUnit2(leaderName)
{
    var _player;
    
    if(arguments.length < 1 || !leaderName)
        return null;
    
    _player = GetPlayerUnit();

    if(_player)
    {
        while(_player.GetNext())
        {
            if(_player.name.toLowerCase() == leaderName.toLowerCase())
                return _player;
        }
    }
   
    return null;
}



function MW_LeaderCheckSeals(leaderx, leadery, mex, mey)
{
	var _distance=0;
	var _noedges = false;
	
	if(leaderx <= 7705 && mex >= 7706)
	{
		_distance=GetDistance(mex, mey, 7707, 5289)
		if(_distance>2)
			{
				_path = GetPath(me.areaid, mex, mey, 7707, 5289, false);
				if(_path)
				{
					for(var i = 0; i < _path.length; i++)
					{
						_noedges = CheckforEdges(_path[i][0] ,_path[i][1]);
						if(_noedges == true)
						{
							Delay(100)
						}
						else
						{
							break;
						}				
					}
				} 
			}
		return 0;
	}
	
	else if(leaderx >= 7882 && mex <= 7881)
	{
		_distance=GetDistance(mex, mey, 7881, 5300)
		if(_distance>2)
			{
				_path = GetPath(me.areaid, mex, mey, 7881, 5300, false);
				if(_path)
				{
					for(var i = 0; i < _path.length; i++)
					{
						_noedges = CheckforEdges(_path[i][0] ,_path[i][1]);
						if(_noedges == true)
						{
							Delay(100)
						}
						else
						{
							break;
						}				
					}
				} 
			}
		return 0;
	}	

	else if(leadery <= 5221 && mey >= 5222)
	{
		_distance=GetDistance(mex, mey, 7805, 5223)
		if(_distance>2)
			{
				_path = GetPath(me.areaid, mex, mey, 7805, 5223, false);
				if(_path)
				{
					for(var i = 0; i < _path.length; i++)
					{
						_noedges = CheckforEdges(_path[i][0] ,_path[i][1]);
						if(_noedges == true)
						{
							Delay(100)
						}
						else
						{
							break;
						}					
					}
				} 
			}
		return 0; 
	}		
	else
	{
		return 1;
	}
}




function CheckforEdges(x ,y)
{								
	if(Math.abs(me.x-7767)<=3 && Math.abs(me.y-5321)<=3) // ecke links unterm pentagramm falls man drinnesteht
	{
		NTM_WalkTo(7775, 5318);
		return true;
	}
	// das was hier drunter steht ist durch die MW_LeaderCheckSeals funktion überflüssig geworden
	// if(x < 7708 && me.x >=7708) // verhindert zu weites laufen richtung siegel!!! 
	// {
		// ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
		// NTC_Delay(NTC_DELAY_FRAME);
		// ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
		// return false;
	// }
	// else if(x > 7880 && me.x <= 7880) // verhindert zu weites laufen richtung siegel!!!
	// {
		// ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
		// NTC_Delay(NTC_DELAY_FRAME);
		// ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
		// return false;
	// }
	// else if(y < 5223 && me.y >= 5223) // verhindert zu weites laufen richtung siegel!!!
	// {
		// ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
		// NTC_Delay(NTC_DELAY_FRAME);
		// ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
		// return false;
	// }		
	if(Math.abs(me.x-7808)<=2 && Math.abs(me.y-5290)<=2) // verhindert steckenbleiben auf der rechten seite vom pentagramm
	{
		NTM_WalkTo(7818, 5281);
		return true;
	}
	else if(Math.abs(x-7795)<=16 && Math.abs(y-5395)<=16) // einbuchtungen am ende vom mittelteil 
	{
		if(me.x<7795)
		{
			NTM_WalkTo(7769, 5400);	
		}
		else
		{
			NTM_WalkTo(7820, 5400);
		}
		
		Delay(200);
		
		return false;
	}
	else if(Math.abs(x-7817)<=2 && Math.abs(y-5436)<=2) // zweite ecke am rechter weg vom eingang aus -> ecke zum mittelteil hin
	{
		NTM_WalkTo(7820, 5428);
		return true;
	}
	else if(Math.abs(x-7817)<=2 && Math.abs(y-5371)<=2) // ecke am rechten weg nach dem mittelteil vom eingang aus
	{
		NTM_WalkTo(7819, 5368);
		return true;
	}
	else if(Math.abs(x-7763)<=3 && Math.abs(y-5267)<=3) // ecke links über pentagramm
	{
		NTM_WalkTo(x, 5278);
		return true;
	}
	else if(Math.abs(x-7792)<=3 && Math.abs(y-5412)<=3) // linke untere ecke im mittelteil nach dem eingang 
	{
		NTM_WalkTo(7792, 5400);
		return true;
	}
	else if(Math.abs(x-7767)<=3 && Math.abs(y-5321)<=3) // ecke links unterm pentagramm
	{
		NTM_WalkTo(7775, 5318);
		return true;
	}
	else
	{
		NTM_WalkTo(x, y);
		return true;
	}
	
}

E: kritik ist erwünscht :D
E2: so :) thats it ^^ das ist die finale version (ausser irgendjemand findet noch irgendwas gravierendes) und es läuft echt gut :D besser als ich dachte

das fertige script ist hier zu finden: [Only registered and activated users can see links. Click Here To Register...]