Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Diablo 2 > Diablo 2 Programming
You last visited: Today at 16:14

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



bestimmten abstand halten

Discussion on bestimmten abstand halten within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jul 2010
Posts: 48
Received Thanks: 8
bestimmten abstand halten

hi also ich hatte mich gefragt ob es möglich ist einen bestimmten abstand
so um ca eine bildschirmdiagonale zu halten. ich wollte mir ein cs script basteln, bei dem der hammerdin (mainchar) das cs cleart vom eingang aus und der leecher mit einem gewissen abstand hinterherläuft. ich denke mal, dass das eine ganz gute methode wäre um den leecher vor angriffen schützen und gleichzeitig dafür zu sorgen dass er noch xp bekommt.
der leecher soll also seine position mit der position des mainchars(kann ich die bekommen?) vergleichen, diagonale ausrechen (wenn die größer als 80 oder so ist läuft er in richtung mainchar) , das überprüft er alle sekunde oder alle halbe sekunde oder so (zusammen mit "mainchar da?", "mainchar gleiche area?")

so ich würde mich freuen wenn mir jemand weiterhelfen könnte also vor allem mit den funktionen die ich dafür brauch (kenn mich noch net so gut im quellcode aus )


E: ich wüsste gerne obs schon eine "bekomme abstand funktion" gibt oder ob ich den pytagoras selbst noch schreiben muss -> dafür brauch ich dann sowas wie quadrat und wurzelfunktionen
theEye321123 is offline  
Old 08/16/2010, 15:33   #2
 
elite*gold: 0
Join Date: Jul 2008
Posts: 169
Received Thanks: 14
GetDistance(me, target)
fuuch is offline  
Old 08/16/2010, 15:56   #3
 
elite*gold: 0
Join Date: Jul 2010
Posts: 48
Received Thanks: 8
Quote:
GetDistance(me, target)
jo danke die hatte ich dann auch irgendwann gefunden^^
theEye321123 is offline  
Old 08/16/2010, 16:06   #4
 
elite*gold: 0
Join Date: Jul 2010
Posts: 48
Received Thanks: 8
Code:
function NTMain()
{
   
   Include("libs/common/NTCommon.ntl");
   NTC_IncludeLibs();
   NTC_IncludeConfig("NTBot/char_configs");

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

   NTA_Initialize(); // 10

   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);
   }   

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

   NTP_DoPrecast(true);
   
   while(NTC_InMyParty(NTConfig_Leader))
	{
	Delay(1000);
		
		if(me.areaid == NTConfig_Leader.areaid)
		{
		Say("Checkpoint");
		Delay(200);
		if(GetDistance(me, NTConfig_Leader)>=80)
			{
			NTM_WalkTo(NTConfig_Leader.x, NTConfig_Leader.y)
			}
		else
			{
			Say("Still Leeching");
			}
		
		}
	}
	if(!NTC_InMyParty(NTConfig_Leader))
		{
		NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
		}
	

}
also so in etwa hab ich mir das überlegt. das problem ist mein char geht durch das tp aber dann macht er nixmehr. woran könnte das liegen?

den groben überbau hab ich aus dem dialeechfight script
theEye321123 is offline  
Old 08/16/2010, 19:15   #5
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,652
Generell könnte das sogar funktionieren, wenn du dich auf eine (praktisch) statische Ebene wie das CS konzentrierst.

Du solltest aber Abstand davon nehmen, deinen Leecher wirklich irgendwelchen Variablen Positionen folgen zu lassen.

Vielmehr müsstest du ein Netz aus Koordinaten definieren, über die sich der Char bewegt und bei denen sichergestellt ist, dass der Char nicht hängen bleiben kann, alles andere wird aus meiner Sicht nichts halbes und nichts ganzes werden.

Die tatsächliche Abstandsberechnung würde ich dabei nicht direkt durchführen, sprich über die Länge des Vektors zwischen Char und Leecher. Stattdessen würde ich immer nur Abstände in den Richtungen berechnen, die das Koordinatensystem vorgibt und anhand dessen dann abwägen, wann der Leecher zum nächsten Checkpoint zu gehen hat.

Aber das sind nur ein paar winzige Ideen, das richtig umzusetzen wird eine Menge Arbeit.

Mal etwas konkretere Kritik zu deinem Codeschnipsel:
Die globale Funkton GetDistance() erwartet als Parameter vier Koordinaten oder zwei Objekte, die über x- und y-Koordinaten verfügen.
Was du dort übergibst ist aber eine Zeichenkette!
Hier nochmal die Funktion GetDistance() und ihre formalen Parameter:
Code:
[B][COLOR=Navy][I]double[/I][/COLOR][/B] GetDistance([B][I][COLOR=Navy]int[/COLOR][/I][/B] x1, [COLOR=Navy][B][I]int[/I][/B][/COLOR] y1, [COLOR=Navy][B][I]int[/I][/B][/COLOR] x2, [COLOR=Navy][B][I]int[/I][/B][/COLOR] y2);
[COLOR=Navy][I][B]double[/B][/I][/COLOR] GetDistance(Unit a, Unit b);
Das sind die beiden Überladungen, die am häufigsten verwendet werden.

Auch an anderer Stelle behandelt du die Zeichenkette NTConfig_Leader als sei sie ein Objekt, was sie zwar grundsätzlich auch ist, sie hat aber mit dem Typ von Objekt, der dort gefragt ist, herzlich wenig zu tun.
Das solltest du dir definitiv nochmal anschauen, der Unterschied muss klar sein.

Wenn sonst noch was ist, bitte möglichst konkret fragen, man kann hier nämlich in der Regel schlecht mit einem Einzeiler antworten.
(Auch wenn fuuch das Gegenteil bewiesen hat )

Lg
Muddy
Muddy Waters is offline  
Old 08/16/2010, 19:43   #6
 
elite*gold: 0
Join Date: Jul 2010
Posts: 48
Received Thanks: 8
Quote:
Die tatsächliche Abstandsberechnung würde ich dabei nicht direkt durchführen, sprich über die Länge des Vektors zwischen Char und Leecher. Stattdessen würde ich immer nur Abstände in den Richtungen berechnen, die das Koordinatensystem vorgibt und anhand dessen dann abwägen, wann der Leecher zum nächsten Checkpoint zu gehen hat.
naja also das mit den checkpoints hatte ich mir auch überlegt aber ich fands unpraktisch weil ich die ganzen punkte erstmal raussuchen müsste
naja ich weiß jetzt wenigstens warum mein char sich net bewegt -> keine berechnung = kein ergebnis ^^

wenn das mit dem hinterherlaufen so wie ich mir das vorstell net klappt dann werd ich das wohl über checkpoints machen -> a la wenn mainchar im bereich x1-x2 und y1-y2 dann laufe zu position 1 usw
ich finde es halt eleganter das ganze checkpoint system zu umgehen indem man eine maximalentfernung angibt ist im endeffekt auch weniger code^^ (jaja die faulheit)


ich habe halt zuerste einmal bessere cleanpoints für meinen hammerdin gesetzt, sodass der leecher ausserhalb der gefahrenzone steht und trotzdem xp bekommt-> xp bekommt man solange man nicht mehr als ich glaube 2 bildschirme vom char der das monster tötet entfernt steht

also ich werde mal ein wenig rumbasteln und das ergebnis wird dann demnächst hier drinnestehn (und/oder etwaige weitere fragen und problemstellungen) ^^

E: also ich hab mal im bodyguardscript geguggt und folgended gefunden:
Quote:
var _Führer;
_Führer = NTC_GetUnit(NTC_UNIT_PLAYER, NTC_CHAR_CLASS_SORCERESS)
ich hab mir gedacht das kann ich ja benutzen um aus dem objekt NTC_Leader einen _Leader zu machen aber als ich das ausprobiert habe gings nicht weil "NTC_GetUnit" nicht gefunden wurde.
daraufhin hab ich in der Common file geguggt und nix gefunden und frage mich jetzt wie ich denn aus meinem quasiobjekt ein für das script greifbares objekt mache
theEye321123 is offline  
Old 08/16/2010, 20:19   #7
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,652
Quote:
Originally Posted by theEye321123 View Post
naja also das mit den checkpoints hatte ich mir auch überlegt aber ich fands unpraktisch weil ich die ganzen punkte erstmal raussuchen müsste
naja ich weiß jetzt wenigstens warum mein char sich net bewegt -> keine berechnung = kein ergebnis ^^

wenn das mit dem hinterherlaufen so wie ich mir das vorstell net klappt dann werd ich das wohl über checkpoints machen -> a la wenn mainchar im bereich x1-x2 und y1-y2 dann laufe zu position 1 usw
ich finde es halt eleganter das ganze checkpoint system zu umgehen indem man eine maximalentfernung angibt ist im endeffekt auch weniger code^^ (jaja die faulheit)


ich habe halt zuerste einmal bessere cleanpoints für meinen hammerdin gesetzt, sodass der leecher ausserhalb der gefahrenzone steht und trotzdem xp bekommt-> xp bekommt man solange man nicht mehr als ich glaube 2 bildschirme vom char der das monster tötet entfernt steht

also ich werde mal ein wenig rumbasteln und das ergebnis wird dann demnächst hier drinnestehn (und/oder etwaige weitere fragen und problemstellungen) ^^
Unpraktisch ist das ganze mit Sicherheit, Fakt ist aber, dass es anders einfach nicht geht, weil du nur Pfade zu Fuß zurücklegen kannst, wenn ausgeschlossen ist, dass sich irgendwo dazwischen irgendwelche Hindernisse befinden.
Du wirst wohl oder übel Koordinaten raussuchen müssen.

Wie ich schon angedeutet hatte, eine ordentliche Lösung des Problems ist alles anderes als ein Zweizeiler, auch wenn es durchaus machbar ist, wenn man sich ein bisschen reinkniet.

Lg
Muddy
Muddy Waters is offline  
Old 08/16/2010, 20:31   #8
 
elite*gold: 0
Join Date: Jul 2010
Posts: 48
Received Thanks: 8
Quote:
Unpraktisch ist das ganze mit Sicherheit, Fakt ist aber, dass es anders einfach nicht geht, weil du nur Pfade zu Fuß zurücklegen kannst, wenn ausgeschlossen ist, dass sich irgendwo dazwischen irgendwelche Hindernisse befinden.
Du wirst wohl oder übel Koordinaten raussuchen müssen.
naja ^^ das geht ja mit dem bot und pos1 naja so schlimm wird nicht werden da setzt ich mich mal dran und dann wird das auch
aber heute nichtmehr ^^ eher so gegen morgen mittag

allerdings müsste ich noch wissen wie ich den mainchar zu einem greifbaren objekt machen kann um dessen koordinaten auslesen zu können
theEye321123 is offline  
Old 08/16/2010, 21:10   #9
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,652
Quote:
Originally Posted by theEye321123 View Post
naja ^^ das geht ja mit dem bot und pos1 naja so schlimm wird nicht werden da setzt ich mich mal dran und dann wird das auch
aber heute nichtmehr ^^ eher so gegen morgen mittag

allerdings müsste ich noch wissen wie ich den mainchar zu einem greifbaren objekt machen kann um dessen koordinaten auslesen zu können
Prinzipiell gibt es zwei verschiedene Objekte die hier möglich wären:

Zum einen könntest du ein ganz normales Monster/Npc Objekt instantiieren.
Dessen Vorteil ist, dass die x- und y- Koordinaten ziemlich exakt sind, allerdings kannst du dieses Objekt nur instantiieren, wenn du dich in einem gewissen Abstand zum Npc befindest. (Variante 1)

Zum anderen könntest du ein party/player (Namen praktisch frei erfunden)
Objekt instantiieren.
Hierbei kann es aber ab und an mal vorkommen, dass sie Attribute hinterherhinken und so nicht zeitnah aktualisiert werden, wenn der Char aber weit weg ist oder sich immer deutlicher von seiner letzten bekannten Position entfernt, sollte das auch ohne weiteres gehen. (Variante 2)

Grundsätzlich könnte man zwar das erste Objekt direkt über den Charnamen instantiieren, hat aber den Nachteil, dass dieser dann exakt passen muss, was hinterher zu einem für den Nutzer schwer handlebaren Ergebnis führt und so natürlich keine wünschenswerte Variante darstellt.

Stattdessen arbeitest du besser mit Schleifen und kannst die Namen somit case unabhängig Vergleichen.
Hier mal Codeschnipsel zu beiden Varianten, ich habe es mal in Funktionen verpackt, so kannst du es im Prinzip genau so verwenden:
Code:
[COLOR=DarkGreen]// Variante 1   [/COLOR]
function MW_GetPlayerUnit1(leaderName)
{
    var _player;

    if(arguments.length < 1 || !leaderName)
        return null;
        
    _player = NTC_FindUnit(NTC_UNIT_PLAYER);

    if(_player)
    {   
        do
        {
            if(_player.name.toLowerCase() == leaderName.toLowerCase())
                return _player;
        }while(_player.GetNext())
    }
   
    return null;
}
[COLOR=DarkGreen]// Variante 2[/COLOR]
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;
}
Ein Implementierungsbeispiel:
Code:
var _myPlayerUnit = MW_GetPlayerUnit1(NTConfig_Leader);

if(_myPlayerUnit)
{
    Print("Mein Leader Objekt befindet sich derzeit bei (" + _myPlayerUnit.x + "|" + _myPlayerUnit + ")");
    
    [COLOR=DarkGreen]// TODO[/COLOR]
}
Vielleicht bringt dich das ja schon weiter.

Lg
Muddy
Muddy Waters is offline  
Old 08/17/2010, 13:07   #10
 
elite*gold: 0
Join Date: Jul 2010
Posts: 48
Received Thanks: 8
so also ich hab mittlerweile die checkpoints rausgesucht, die auch per moveto befehl ins script eingefügt aber! der leecherchar läuft immernochnet
ich hab auch dafür gesorgt, dass der Leader erst anfängt das CS zu clearen wenn der Leecher durchs portal gegangen ist -> der leecher kann also keinen checkpoint verpassen

hier der code den ich jetzt habe und danke für die getplayer funktion ^^ die hab ich gleich so verwendet und sie funktioniert wunderbar

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);
   }   

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

	   
	NTP_DoPrecast(true);
	var Leaderx = 0;
	var Leadery = 0;
	
   while(NTC_InMyParty(NTConfig_Leader))
		{
		Delay(1000);	
		_myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
		Leaderx = _myPlayerUnit.x;
		Leadery = _myPlayerunit.y;
		
		if(me.areaid == _myPlayerUnit.areaid == 108)
			{
		
			Delay(200);
		
			if(Leadery <= 5510 && Leadery > 5477)
				{
				NTM_MoveTo(me.areaid, 7793, 5920);
				}
			else if(Leadery <=5477 && Leadery >5412)
				{
				NTM_MoveTo(me.areaid, 7793, 5489);
				Delay(500);
				NTM_MoveTo(me.areaid, 7768, 5419);
				Delay(500);
				NTM_MoveTo(me.areaid, 7770, 5425);
				}
			else if(Leadery <=5412 && Leadery >5335)
				{
				NTM_MoveTo(me.areaid, 7778, 5419);
				Delay(500);
				NTM_MoveTo(me.areaid, 7768, 5408);
				}			
			else if(Leadery <=5335 && Leadery >5267 && Leaderx <=7770 && Leaderx >7698)
				{
				NTM_MoveTo(me.areaid, 7769, 5333);
				Delay(500);
				NTM_MoveTo(me.areaid, 7774, 5309);
				}			
			else if(Leadery <=5335 && Leadery >5267 && Leaderx <=7698)
				{
				NTM_MoveTo(me.areaid, 7713, 5304);
				}			
			else if(Leadery <=5267 && Leadery >5212)
				{	
				NTM_MoveTo(me.areaid, 7771, 5375);
				Delay(500);
				NTM_MoveTo(me.areaid, 7789, 5258);
				}			
			else if(Leadery <=5212)
				{
				NTM_MoveTo(me.areaid, 7796, 5222);
				}				
			else if(Leadery <=5335 && Leadery >5267 && Leaderx <=7878 && Leaderx >7818)
				{
				NTM_MoveTo(me.areaid, 7812, 5263);
				}					
			else if(Leadery <=5335 && Leadery >5267 && Leaderx >7878)
				{
				NTM_MoveTo(me.areaid, 7830, 5285);
				Delay(500);
				NTM_MoveTo(me.areaid, 7881, 5267);
				}				
			else if(Leadery <=5335 && Leadery >5267 && Leaderx <=7810 && Leaderx >7790)
				{
				NTM_MoveTo(me.areaid, 7812, 5263);
				}			
			
			}
		}
	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;
}
da du aus dem stehgreif mit den positionen nix anfangen können wirst hab ich das mal "schön" in paint verdeutlicht
das Position des Leaders gilt für die ganze Area! (ist ein wenig ungenau beschrieben )


E: script ein wenig angepasst -> Leadery // Leaderx

E2: so langsam funktionierts der leecher läuft immerhin schonma zum ersten checkpoint^^

E3: kann ich irgendwie dafür sorgen, dass die NTM_WalkTo(x, y) vollständig abgearbeitet werden bevor der zum nächsten springt? weil irgendwie läuft der leecher net weit genug - oder kann das an etwas anderem liegen?

E4: hat sich erledigt ^^ muss nurnoch genug zwischenpunkte einfügen
theEye321123 is offline  
Old 08/17/2010, 21:03   #11
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,652
So rein stilistisch:
Achte mal mehr auf sauberes Einrücken, dein Quelltext ist schlecht lesbar.

Davon abgesehen finde ich das teilweise etwas umständlich und ungeschickt, ich lasse dich aber erstmal selber weiterbrüten. Besser eine komplizierte Lösung mit viel Eigeninitiative, als irgendetwas vorgekautes, was man am Ende doch nicht völlig versteht.

Zu den Pfaden:
Wenn du sicherstellst, dass zwischen den einzelnen Punkten keine Hindernisse liegen, kannst du dir die einzelnen Wegpunkte auch berechnen lassen und so die Anzahl der Punkte, die du tatsächlich ermitteln musst, drastisch reduzieren.

Dies geschieht mit der globalen Funktion GetPath(), deren formale Parameter wie folgt aussehen:
Code:
[COLOR=Navy][B][I]int[/I][/B][/COLOR][][] GetPath([COLOR=Navy][B][I]int[/I][/B][/COLOR] areaid, [COLOR=Navy][B][I]int[/I][/B][/COLOR] x1, [COLOR=Navy][B][I]int[/I][/B][/COLOR] y1, [COLOR=Navy][B][I]int[/I][/B][/COLOR] x2, [COLOR=Navy][B][I]int[/I][/B][/COLOR] y2, [COLOR=Navy][B][I]bool[/I][/B][/COLOR] teleport);
[COLOR=DarkGreen]/*    
    areaid        -    areaid des Zielpunktes
    x1, y1        -    Koordinaten des Startpunktes
    x2, y2        -    Koordinaten des Zielpuktes
    teleport      -    Berechnung des Pfades mit
                    [/COLOR][COLOR=DarkGreen]Teleport (Kreuzungen mit Wänden) oder ohne Teleport
*/[/COLOR]
Wie oben zu sehen, gibt die Funktion ein zweidimensionales Integer Array zurück, welches danach einfach nurnoch in einer for Schleife durchlaufen werden muss.
Implementierungsbeispiel:
Code:
[COLOR=DarkGreen]/*
Punkt A sei (5500|8000) == aktuelle Charposition
Punkt B sei (5500|7950)
*/[/COLOR]
var _path = GetPath(me.areaid, me.x, me.y, 5500, 7950, false);

if(_path)
{
    for(var i = 0; i < _path.length; i++)
        NTM_WalkTo(_path[i][0], _path[i][1]);
}
Lg
Muddy
Muddy Waters is offline  
Thanks
1 User
Old 08/17/2010, 21:26   #12
 
elite*gold: 0
Join Date: Jul 2010
Posts: 48
Received Thanks: 8
Quote:
Zu den Pfaden:
Wenn du sicherstellst, dass zwischen den einzelnen Punkten keine Hindernisse liegen, kannst du dir die einzelnen Wegpunkte auch berechnen lassen und so die Anzahl der Punkte, die du tatsächlich ermitteln musst, drastisch reduzieren.

Dies geschieht mit der globalen Funktion GetPath(), deren formale Parameter wie folgt aussehen:
Code:

int[][] GetPath(int areaid, int x1, int y1, int x2, int y2, bool teleport);
/*
areaid - areaid des Zielpunktes
x1, y1 - Koordinaten des Startpunktes
x2, y2 - Koordinaten des Zielpuktes
teleport - Berechnung des Pfades mit
Teleport (Kreuzungen mit Wänden) oder ohne Teleport
*/

Wie oben zu sehen, gibt die Funktion ein zweidimensionales Integer Array zurück, welches danach einfach nurnoch in einer for Schleife durchlaufen werden muss.
Implementierungsbeispiel:
Code:

/*
Punkt A sei (5500|8000) == aktuelle Charposition
Punkt B sei (5500|7950)
*/
var _path = GetPath(me.areaid, me.x, me.y, 5500, 7950, false);

if(_path)
{
for(var i = 0; i < _path.length; i++)
NTM_WalkTo(_path[i][0], _path[i][1]);
}

Lg
Muddy
:/ das machts natürlich viel einfacher xD
ich hab jetzt schon die ganzen punkte rausgesucht
das script läuft soweit auchschon ganz gut ( das im post ist nicht aktuell )
ich muss allerdings noch die punkte, die der leader zum clearen abtelt anpassen (bin doch ein paar mal gestorben -> hatte es jetzt gute 2h am laufen)
joa dann muss ich noch das ende der schleife vernünftig definieren der gammelt noch die ganze zeit im cs rum wenn mein leader schon längst bei baal ist
aber um nochmal auf die funktion zurückzukommen
kann ich dann nicht einfach meine ursprungsidee (bleibe im leechradius) und das GetPath() verwenden um den leecher ohne gegen hindernisse zu laufen zum leader zu bringen?

also quasi
check distance -> wenn distance > x -> getpath() -> laufe path bis distance < x-10


und noch eine frage: das int [] [] -> was bedeutet das? also was muss ich der funktion geben dass sie arbeiten kann?

und was einrücken angeht -> hab ich bei mir mittlerweile gemacht
theEye321123 is offline  
Old 08/17/2010, 22:07   #13
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,652
Quote:
Originally Posted by theEye321123 View Post
:/ das machts natürlich viel einfacher xD
ich hab jetzt schon die ganzen punkte rausgesucht
das script läuft soweit auchschon ganz gut ( das im post ist nicht aktuell )
ich muss allerdings noch die punkte, die der leader zum clearen abtelt anpassen (bin doch ein paar mal gestorben -> hatte es jetzt gute 2h am laufen)
joa dann muss ich noch das ende der schleife vernünftig definieren der gammelt noch die ganze zeit im cs rum wenn mein leader schon längst bei baal ist
aber um nochmal auf die funktion zurückzukommen
kann ich dann nicht einfach meine ursprungsidee (bleibe im leechradius) und das GetPath() verwenden um den leecher ohne gegen hindernisse zu laufen zum leader zu bringen?

also quasi
check distance -> wenn distance > x -> getpath() -> laufe path bis distance < x-10


und noch eine frage: das int [] [] -> was bedeutet das? also was muss ich der funktion geben dass sie arbeiten kann?

und was einrücken angeht -> hab ich bei mir mittlerweile gemacht
Sofern du am Ende in der Nähe von Diablo stehst, könntest du einfach überprüfen, ob letzterer hinüber ist.

Das mit dem direkten laufen wird wohl nichts, da GetPath() keine sauberen Pfade zurückliefert, die effektiv um hindernisse herumführen würden.

Ich hatte oben die formalen Parameter der Funktion aufgeführt. Eigentlich gibt es sowas in JavaScript nicht explizit, es hilft aber enorm, nicht einsehbare Funktionen besser zu verstehen.
Die formalen Parameter sind quasi die Parameter, mit denen die Funktion deklariert wird, wobei die Datentypen der Übergabeparameter sowie der Rückgabedatentyp mit angegeben sind (für JavaScript unüblich).

Das int[][] bedeutet hier nichts anderes, als dass die Funktion ein zweidimensionales Integer Array zurückliefert, welches die verschiedenen Wegpunkte enthält.
Geben musst du der Funktion aber nur die Parameter in der Parameterliste, nicht den Rückgabewert.

Lg
Muddy
Muddy Waters is offline  
Old 08/18/2010, 19:46   #14
 
elite*gold: 0
Join Date: Jul 2010
Posts: 48
Received Thanks: 8
prüft der bot beim laufen eigentlich wieviel life er noch hat?
also ist was in der richtung in der NTM_WalkTo enthalten?
theEye321123 is offline  
Old 08/18/2010, 20:49   #15
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,652
Quote:
Originally Posted by theEye321123 View Post
prüft der bot beim laufen eigentlich wieviel life er noch hat?
also ist was in der richtung in der NTM_WalkTo enthalten?
Glaube wenn du sagst, was du vorhast, könnte ich da mehr zu sagen.

Das globale Objekt me hat ein entsprechendes Attribut, was natürlich auch in dieser Funktion bekannt ist, falls das deine Frage beantwortet.
Code:
me.hp // aktuelle hp laut Anzeige
me.maxhp // maximale hp bezogen auf die aktuelle Anzeige
Überprüft wird das aber in der Funktion nicht, falls du dabei jetzt in Richtung chicken gedacht hast. Das läuft in einem anderen Thread ab bzw. intern im Manager.

Lg
Muddy
Muddy Waters is offline  
Reply


Similar Threads Similar Threads
SRO im vordergrund halten
07/11/2023 - Silkroad Online - 11 Replies
wie kann man sro zb im minimierten zustand oben inner ecke stehn lassen und dabei noch im i net surfen also ich brauche einfach ne anleitung wie ich sro im vordergrund halten kann wenn man ja explorer und so aufmacht kann man ja net sehn was im hintergrund ingame passiert wäre wirklich dankbar für jede usefull antwort
D2NT 3.0 Abstand zum Boss ändern? Wie?
03/29/2010 - Diablo 2 - 10 Replies
Wie ändere ich den Abstand zu den Bossmonstern? Kann mir da vielleicht jemand helfen? D2NT 3.0 ofc ;)
Maus gedrückt halten
05/27/2009 - GW Bots - 9 Replies
sry wenn ich frage aber wie ist der befhel für maustaste links gedrückt halten ?? Schonmal danke im vorraus Mfg Masternightmare
Selbst halten!
07/09/2005 - General Gaming Discussion - 2 Replies
Das ist ein Trick ... ka ob von KK gewollt ... das sich eine PA oder ein IMP selbst hält Beispiel: Apu hat 96 Psi ... die 2er Apu Pa brauch 100 Psi ... gibt aber gleichzeitig auch +4 Psi ... man nehme eine Droge die den Apu auf 100 Psi bringt ... zieht die Pa an und sie hällt sich selbst! wenn ihr dann ein Genrep uset ... ist sie nicht mehr aktiv ... nun lasst ihr einfach die Synaptic ablaufen und relogt ... und schwups habt ihr eure Pa wieder an :D Hoffentlich hilfts jmd ... ich...



All times are GMT +1. The time now is 16:14.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.