Wir basteln einen Bodyguard mit D2NT. [Guide]

05/03/2010 20:32 Muddy Waters#46
Quote:
Originally Posted by hdin84 View Post
Ich bin grad an nem Dia-Leech-Script (ohne mitkämpfen - nur im Abstand folgen) und hab das Prob, dass ich den Leader nich finde..

Ich hab momentan folgendes:

Code:
_leader = NTC_FindUnit(NTC_UNIT_PLAYER, NTConfig_Leader,5);
Ergebnis is, dass der Fehler "_leader is null" kommt. Komisch is allerdings auch, dass wenn ich z.B.

Code:
_leader = "xyz"
eingebe und mir ne Zeile drunter per _leader.name den Namen ausgeben lassen will, ich nur die Ausgabe "Leader: undefined" bekomme :/

Theoretisch würd ich ja sagen, dass der Variablentyp an sich verkehrt is, aber 1. stehts hier im Script auch so und zum andern wird keiner Variable je ein Typ zugeordnet, sondern wird automatisch erledigt (also nix mit erst angeben obs char, int, bool oder was auch immer is). Weiss da wer Rat?
Du solltest eventuell auch mal vorher überprüfen, welche Parameter erwartet werden. Welchen Wert hat beispielsweise NTConfig_Leader?

Erwartet wird hier als zweiter Parameter eine konstante für die Charakterklasse, sprich ein Integer Wert, siehe:
Code:
// Character Class
const NTC_CHAR_CLASS_AMAZON = 0;
const NTC_CHAR_CLASS_SORCERESS = 1;
const NTC_CHAR_CLASS_NECROMANCER = 2;
const NTC_CHAR_CLASS_PALADIN = 3;
const NTC_CHAR_CLASS_BARBARIAN = 4;
const NTC_CHAR_CLASS_DRUID = 5;
const NTC_CHAR_CLASS_ASSASSIN = 6;
Der zweite Teil zeigt deutlich, dass du nicht wirklich weisst was du tust.
Zwischen dem Initialisieren einer Wald und Wiesen String Variable und der Instantiierung einer Objekt-Variablen bestehen durchaus erhebliche Unterschiede. ;)
(Auch wenn der Datentyp String für sich eine Klasse ist und somit durchaus Elementfunktionen besitzt, die man mit dem Punktoperator Aufrufen könnte)

Wir merken uns also für die Zukunft: Die Funktion NTC_FindUnit() gibt immer ein Objekt zurück, sofern dieses existiert. Mit diesem kannst du dann mithilfe des Punktoperators auf Elemente oder Elementfunktionen zugreifen.

Immer schön den Verstand einschalten wenn es ans Programmieren geht. ;)

Lg
Muddy
05/03/2010 23:07 hdin84#47
Habs selber hingebogen und werd gleich mal des Script in nem eigenen Thread posten :)
09/18/2010 11:15 QuQuu#48
Moin, ich hab da folgendes Problem, würde mich über jegliche Idee freuen.
Funktioniert alles eig. soweit er joind das TP, folgt dem Leader, aber sobald der Leader in die Stadt geht, bleibt der Leecher tatenlos stehen..
Sprich die if(!_leaderTEST) Abfrage scheint nie durchlaufen zuwerden, bzw. er scheint nicht aus der if(_leaderTEST herauszuspringen.
Ich habe Bei _leader = NTC_FindUnit nicht NTC_GetUnit, da der 3.1 Bluebird sagte GetUnit sei nich definiert.. Liegt es daran? Also, dass er _leader auf "true" hat sobald er ihn einmal gefunden hat?

Code:
if(me.areaid != 1 && me.areaid != 40 && me.areaid != 75 && me.areaid != 103 && me.areaid != 109)
	{
	
	_leaderTEST = NTC_FindUnit(NTC_UNIT_PLAYER, NTC_CHAR_CLASS_PALADIN);
	NTC_Delay(500);
	
	if(_leaderTEST)
	{
	if(GetDistance(me, _leaderTEST) > 5)
	{
	NTM_WalkTo(_leaderTEST.x+1, _leaderTEST.y+1)
	NTC_Delay(100);
	}
	if(GetDistance(me, _leaderTEST) < 5)
	{
	//NTC_DoCast(NTConfig_AttackSkill[2], 2);
	//NTC_WaitCastDone()
	NTC_Delay(1000);
	}
	}

	if(!_leaderTEST)
	{
	var _Portal;
	_Portal = NTC_FindUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));

	if(_Portal)
	{
	NTC_Delay(10);
	NTM_WalkTo(_Portal.x, _Portal.y)
	NTC_Delay(1000);
	NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _Portal);
	NTC_Delay(1000);
	Say("Führer verloren, brauche neues TP oder ich nehm das alte.")
	NTC_Delay(5000);
	}
	if(!_Portal)
	{
	Say("Kein Führer und kein TP! Komm mich abholen.")
	NTC_Delay(7000);
	}
	}
	}
	}
Vllt findet ja jmd ein bisschen zeit ? :)
10/10/2010 01:21 (-.(-.-).-)#49
sehr hilfreich danke.

jetzt kann ich endlich das geplante script basteln