Register for your free account! | Forgot your password?

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

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

Advertisement



Wir basteln einen Bodyguard mit D2NT. [Guide]

Discussion on Wir basteln einen Bodyguard mit D2NT. [Guide] within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
njomnjomnjom's Avatar
 
elite*gold: 20
Join Date: Mar 2009
Posts: 1,356
Received Thanks: 736
Wir basteln einen Bodyguard mit D2NT. [Guide]

Wäre es manchmal nicht Klasse, einfach ein TP zu machen und ein Hammerdin erscheint der einen beschützt?
Besonders als Zauberin z.B. eigentlich ganz nett.

BASISWISSEN "||" = oder / "==" = gleich / "!=" = nichtgleich / "&&" = und

Wir gehen also in den Ordner D2NT\scripts\bots und schnappen uns ein Script.


Der Anfang braucht uns zunächst nicht zu interessieren. Wir lassen ihn einfach wie er ist.
Quote:
function NTMain()
{
Include("common/NTCommon.ntl");
Include("common/NTMove.ntl")
NTC_IncludeConfig();
NTC_IncludeLibs();
NT_LoadConfig();
NTSI_LoadNIPFiles();
NTA_Initialize();

if(!NTTM_CheckAct())
{
NTC_SendMsgToScript("default.ntj", "NTTM_CheckAct()");
return;
}
Alles untendran löschen wir.


Nun haben wir ein leeres script welches wir nach belieben gestalten können.


Als erstes kommt nun der wichtigste Schritt, wir schalten wir unser Gehrin ein und überlegen, was wir denn genau habenmöchten:

1. Wenn er in der Stadt ist soll er sich ein TP suchen
2. Wenn er bei uns ist soll er uns folgen.
3. Er soll uns mit seinen Hämmern beschützen.
4. Er soll das nicht nur einmal machen sondern immerwieder.



Wir müssen also eine Endlosschleife setzen.

while(1) //Endlosschleife
{
}

Alles was unser Bodyguard tun soll muss zwischen diese 2 Klammern damit er es immer wieder ud nicht nur einmal macht. (OK 4. gelöst)



Unterschied zwischen Town und Ebene:

me.areaid ist die AreaID auf der sich der Bot befindet.
Wir schauen uns die AreaID Listen an und sehen, dass 1, 40, 75, 103 und 109 die Diablo 2 Towns sind.
()
WENN me.areaid das selbe ist wie 1, 40, 75,103 oder 109 DANN ist der bot logischerweise in der Town.

Wir geben unserem Bot also die ersten 2 Regeln die er zu befolgen hat:

Quote:
if(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109)
{
//Wenn me.areaid 1 ist ODER 40 ODER 75 ODER 103 ODER 109, dann macht er das was hier steht
}
if(me.areaid != 1 && me.areaid != 40 && me.areaid != 75 && me.areaid != 103 && me.areaid != 109)
{
//Wenn me.areaid NICHT 1 UND nicht 40 UND nicht 75 UND nicht 103 UND nicht 109 ist, dann macht er das was hier steht.
}


Er soll ein TP suchen:

Wir geben ihm also eine Variabel mit der er Arbeiten kann.
Quote:
var _Portal;
Nun sagen wir ihm was ein "_portal" ist
Er soll sich eine Unit schnappen die ein OBJEKT ist. Wir definieren sie noch genauer durch den String vom TP.

(wie finde ich den richtigen String? ())

Quote:
_Portal = NTC_GetUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));
WENN dieses "_Portal" da ist DANN soll er hingehen und es benutzen.
WENN dieses "_Portal" NICHT da ist DANN soll er ein päuschen machen.

Quote:
if(_Portal)
{
NTM_WalkTo(_Portal.x, _Portal.y) //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
NTM_UsePortal("BluePortal"); //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
}
if(!_Portal)
{
NTC_Delay(1000) //Päuschen in milisekunden
}

Zwischenstopp:
Wie sollte es bis jetzt aussehen?
Quote:
while(1)
{
if(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109)
{
var _Portal;
_Portal = NTC_GetUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));

if(_Portal)
{
NTM_WalkTo(_Portal.x, _Portal.y) //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
NTM_UsePortal("BluePortal"); //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
}
if(!_Portal)
{
NTC_Delay(1000) //Päuschen in milisekunden
}

}
if(me.areaid != 1 && me.areaid != 40 && me.areaid != 75 && me.areaid != 103 && me.areaid != 109)
{
//Wenn me.areaid NICHT 1 UND nicht 40 UND nicht 75 UND nicht 103 UND nicht 109 ist, dann macht er das was hier steht.
}
}

Weiter im Text. Er soll uns folgen:

Wir gehen gleich vor wie mit den Portalen. Also geben wir ihm zunächst eine Variabel und definieren sie. (Wir sind kein OBJEKT wir sind ein PLAYER. Wir sind eine Zauberin.)

Quote:
var _Führer;
_Führer = NTC_GetUnit(NTC_UNIT_PLAYER, NTC_CHAR_CLASS_SORCERESS)
WENN dieser "_Führer" (wir) daist, DANN soll er zu uns kommen.
WENN dieser "_Führer" (wir) nich daist, DANN soll er ein päuschen machen.
Wir schauen uns in den Scripts um und finden den wunderbahren befehl "GetDistance(me, object)" (das object sind wir also "_Führer")


Quote:
if(_Führer)
{
if(GetDistance(me, _Führer) > 3) //WENN die Distanz zwischen dem Bot und uns größer ist als 3, DANN...
{
NTM_TeleportTo(_Führer.x+1, _Führer.y+1) //schaut in die NTmove um herausufinden woher dieser Befehl stammt.
NTC_WaitCastDone() //Das selbe wie ein Päuschen, setzt es jedesmal wenn ihr ihn einen Skill casten lasst.
}
if(GetDistance(me, _Führer) < 3)
{
//Was soll er tun wenn er neben uns steht?
}
}

if(!_Führer)
{
NTC_Delay(1000); //Päuschen wenn wir nicht da sind.
}

Wow, er teleportiert uns hinterher! wir werden ihn nichtmehr los es sei denn wir wechseln die Ebene.


Hämmer:
Alles schön und gut, aber eins fehlt noch.
Wenn er neben uns steht macht er bisher noch garnichts.

Wir schauen uns die NTAttack an und suchen nach einem passeneden Befehl.
Quote:
NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT); //Aura anmachen
NTC_Delay(10);
NTC_DoCast(NTConfig_AttackSkill[2], 2); //Hämmern
NTC_WaitCastDone()

So, nun nurnoch alles zusammenbasteln:

Quote:
while(1)
{
if(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109)
{
var _Portal;
_Portal = NTC_GetUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));

if(_Portal)
{
NTM_WalkTo(_Portal.x, _Portal.y) //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
NTM_UsePortal("BluePortal"); //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
}
if(!_Portal)
{
NTC_Delay(1000) //Päuschen in milisekunden
}

}
if(me.areaid != 1 && me.areaid != 40 && me.areaid != 75 && me.areaid != 103 && me.areaid != 109)
{
var _Führer;
_Führer = NTC_GetUnit(NTC_UNIT_PLAYER, NTC_CHAR_CLASS_SORCERESS)

if(_Führer)
{
if(GetDistance(me, _Führer) > 3) //WENN die Distanz zwischen dem Bot und uns größer ist als 3, DANN...
{
NTM_TeleportTo(_Führer.x+1, _Führer.y+1) //schaut in die NTmove um herausufinden woher dieser Befehl stammt.
NTC_WaitCastDone() //Das selbe wie ein Päuschen, setzt es jedesmal wenn ihr ihn einen Skill casten lasst.
}
if(GetDistance(me, _Führer) < 3)
{
NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT); //Aura anmachen
NTC_Delay(10);
NTC_DoCast(NTConfig_AttackSkill[2], 2); //Hämmern
NTC_WaitCastDone()
}
}
if(!_Führer)
{
NTC_Delay(1000); //Päuschen wenn wir nicht da sind.
}
}
}
[Edit:]
Danke für den Hinweis dass es ruckelt ^^ da fehlen ein paar Päuschen, damit die Befehle nicht zu schnell durchgerattert werden.

Wir basteln also Pausen rein:

Quote:
while(1)
{
if(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109)
{
var _Portal;
_Portal = NTC_GetUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));

if(_Portal)
{
NTC_Delay(500)
NTM_WalkTo(_Portal.x, _Portal.y) //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
NTC_Delay(500)
NTM_UsePortal("BluePortal"); //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
NTC_Delay(500)
}
if(!_Portal)
{
NTC_Delay(1000) //Päuschen in milisekunden
}

}
if(me.areaid != 1 && me.areaid != 40 && me.areaid != 75 && me.areaid != 103 && me.areaid != 109)
{
var _Führer;
_Führer = NTC_GetUnit(NTC_UNIT_PLAYER, NTC_CHAR_CLASS_SORCERESS)
NTC_Delay(10)

if(_Führer)
{
if(GetDistance(me, _Führer) > 3) //WENN die Distanz zwischen dem Bot und uns größer ist als 3, DANN...
{
NTM_TeleportTo(_Führer.x+1, _Führer.y+1) //schaut in die NTmove um herausufinden woher dieser Befehl stammt.
NTC_WaitCastDone() //Das selbe wie ein Päuschen, setzt es jedesmal wenn ihr ihn einen Skill casten lasst.
}
if(GetDistance(me, _Führer) < 3)
{
NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT); //Aura anmachen
NTC_Delay(10);
NTC_DoCast(NTConfig_AttackSkill[2], 2); //Hämmern
NTC_WaitCastDone()
}
}
if(!_Führer)
{
NTC_Delay(1000); //Päuschen wenn wir nicht da sind.
}
}
}

Wir sind am ende dieses Guides angekommen. Ich hoffe ihr konntet mir folgen. Fals Ihr es immernochnicht zum funktionieren gebracht habt, gebe ich euch einen geheimtipp: Die erste { die wir geöffnet haben wurde noch nicht geschlossen. Denkt nach ^^

Bitte kein sinnlosen Spam hier im Topic, es ist für die hoffentlich bald entstehende diablo2scripts section hier auf epvp.
njomnjomnjom is offline  
Thanks
10 Users
Old 01/26/2010, 16:08   #2
 
elite*gold: 0
Join Date: Apr 2009
Posts: 44
Received Thanks: 4
Ich hoffe mal ich vertu mich jetzt nicht aber soll das:
Quote:
Originally Posted by njomnjomnjom View Post
BASISWISSEN "||" = und / "==" = gleich / "!=" = nichtgleich / "&&" = und
nicht heißen: || = ODER

falls ich grad schmarrn rede, tut es mir leid - habe sowas grad zum ersten mal gelesen...
find ich aber geil, dass sich jemand so mühe gibt und es selbst für jemanden wie mich verständlich rüber bringen

cheers-
fullevent
fullevent is offline  
Thanks
1 User
Old 01/26/2010, 18:12   #3
 
njomnjomnjom's Avatar
 
elite*gold: 20
Join Date: Mar 2009
Posts: 1,356
Received Thanks: 736
ups thx
njomnjomnjom is offline  
Old 02/02/2010, 14:43   #4
 
elite*gold: 0
Join Date: Jan 2010
Posts: 15
Received Thanks: 0
So ich teste gerade im Netzwerk Modus ob der BOT das macht was ich will.

Aktuell sieht das Script so aus:
Der Bot soll nur folgen und mehr nicht.

Er joint das Spiel, bietet von sich aus PArty an, nimmt das TP und rennt mir 3-4 Sekunden hinterher. Danach kommt ein Fehler

UNHANDLED EXCEPTION ACCESS_VIOLATION ...so schnell kann ich aber nicht lesen und der Fehler ist wieder weg. Jemand eine Idee was das sein könnte?

Habe WalkTO anstatt Teleport....hoffe es liegt nicht daran


Quote:
////////////////////////////////////////////
//Botscripts modificated by njomnjomnjom //
//http://www.elitepvpers.com/forum/diablo-2//
////////////////////////////////////////////

function NTMain()
{
Include("common/NTCommon.ntl");
NTC_IncludeConfig();
NTC_IncludeLibs();

NT_LoadConfig();
NTSI_LoadNIPFiles();

NTA_Initialize();

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

while(1)
{
if(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109)
{
var _Portal;
_Portal = NTC_GetUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));

if(_Portal)
{
NTM_WalkTo(_Portal.x, _Portal.y) //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
NTM_UsePortal("BluePortal"); //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
}
if(!_Portal)
{
NTC_Delay(1000) //Päuschen in milisekunden
}

}
if(me.areaid != 1 && me.areaid != 40 && me.areaid != 75 && me.areaid != 103 && me.areaid != 109)
{
var _Führer;
_Führer = NTC_GetUnit(NTC_UNIT_PLAYER, NTC_CHAR_CLASS_SORCERESS)
if(_Führer)
{
if(GetDistance(me, _Führer) > 2) //WENN die Distanz zwischen dem Bot und uns größer ist als 2, DANN...
{
NTM_WalkTo(_Führer.x+1, _Führer.y+1) //schaut in die NTmove um herausufinden woher dieser Befehl stammt.
NTC_WaitCastDone() //Das selbe wie ein Päuschen, setzt es jedesmal wenn ihr ihn einen Skill casten lasst.
}
}
if(!_Führer)
{
NTC_Delay(1000); //Päuschen wenn wir nicht da sind.
}
}
}

}
gummi2k is offline  
Old 02/04/2010, 02:21   #5
 
kal_el's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,205
ich hab teleport... und krieg auch den 0000005 fehler.
und es lagt echt wie sau wenn er durchs tp geht.
keinen plan woran das liegt.
ein paar mal is er ja hinterhergetelt, dann wieder 00005 .
dachte mach den merc weg...hilft auch ned.
kal_el is offline  
Old 02/04/2010, 16:12   #6
 
njomnjomnjom's Avatar
 
elite*gold: 20
Join Date: Mar 2009
Posts: 1,356
Received Thanks: 736
Huch da fehlen ja auch sämtliche delays O_o xD

moment

[Edit:]
SO repariert. Jetzt sollte es weder groß ruckeln noch crashen.
njomnjomnjom is offline  
Thanks
2 Users
Old 02/05/2010, 14:28   #7
 
kal_el's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,205
Quote:
Originally Posted by njomnjomnjom View Post
Huch da fehlen ja auch sämtliche delays O_o xD

moment

[Edit:]
SO repariert. Jetzt sollte es weder groß ruckeln noch crashen.
ECHT !!?? sowas kann an den delays liegen..habsch ned gewusst.. muss ich dann nochma testen
kal_el is offline  
Old 02/07/2010, 17:54   #8
 
kal_el's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,205
gut... spielen wir weiter
er geht mit durchs tp..
er killt alles im umkreis von (20)
was ich nicht geschafft habe ..das er sich bo´t und auch wieder aufhört damit..er bo´t sich einfach immer wieder..weis ned an welche stelle es ich setzen sollte..habs dann wieder rausgenommen.
aber er geht einkaufen und er pickt.

und wenn die sorc wie der tp macht geht er auch wieder zurück mit ihr in town...ähm.. oder machte er das vorher auch schon..das hätt ich mir das einfügen sparen können, grins.
Code:
////////////////////////////////////////////
//Botscripts modificated by njomnjomnjom  //
//http://www.elitepvpers.com/forum/diablo-2//
////////////////////////////////////////////

function NTMain()
{
Include("common/NTCommon.ntl");
NTC_IncludeConfig();
NTC_IncludeLibs();

NT_LoadConfig();
NTSI_LoadNIPFiles();

NTA_Initialize();

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


NTTMGR_TownManager();



while(1)
{
if(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109)
{
var _Portal;
_Portal = NTC_GetUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));

if(_Portal)
{
NTC_Delay(500)
NTM_WalkTo(_Portal.x, _Portal.y) //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
NTC_Delay(500)
NTM_UsePortal("BluePortal"); //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
NTC_Delay(500)
}
if(!_Portal)
{
NTC_Delay(1000) //Päuschen in milisekunden
}


     


}
if(me.areaid != 1 && me.areaid != 40 && me.areaid != 75 && me.areaid != 103 && me.areaid != 109)
{
     
       //NTP_DoPrecast();
     
var _Führer;
_Führer = NTC_GetUnit(NTC_UNIT_PLAYER, NTC_CHAR_CLASS_SORCERESS) 
NTC_Delay(10)

if(_Führer)
{
if(GetDistance(me, _Führer) > 3) //WENN die Distanz zwischen dem Bot und uns größer ist als 3, DANN...
{
NTM_TeleportTo(_Führer.x+1, _Führer.y+1) //schaut in die NTmove um herausufinden woher dieser Befehl stammt.
NTC_WaitCastDone() //Das selbe wie ein Päuschen, setzt es jedesmal wenn ihr ihn einen Skill casten lasst.
}
if(GetDistance(me, _Führer) < 3)
{
NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT); //Aura anmachen
NTC_Delay(10); 
[COLOR="Red"]//NTC_DoCast(NTConfig_AttackSkill[2], 2); //Hämmern[/COLOR]
NTC_WaitCastDone()

	{
	NTA_ClearPosition(20);
		NTC_PingDelay(100);	
	NTSI_PickItems();
	}


}
}
if(!_Führer)
{
NTC_Delay(1000); //Päuschen wenn wir nicht da sind.

        {
	
		NTC_PingDelay(100);
	NTM_UsePortal("BluePortal");
		NTC_PingDelay(100);	
	}



}
}
} 
}
ich hatte das NTP_DoPrecast();
in klammer und ..siehe..auch ohne klammer..wo mus es hin das er es nicht immer so schnell abarbeitet?
bringt es was wenn man in die klammer ne zahl setzt NTP_DoPrecast(1); z.B

edit: ah ja und er sollte aufhören laufend zu hämmern wenn er bei der sorc steht...hm..ich dachte das würde er machen durch das einfügen der attacke...

edit 2: er muss ja gar ned hämmer wenn er bei der sorc ist, right? .. durch das einfügen der attacke..kann man das hämmer bei der sorc abstellen ... right?
hab jez keine zeit mehr..mache das später..ausser einer is schneller.

edit4: is geändert siehe //NTC_DoCast(NTConfig_AttackSkill[2], 2); //Hämmern
und es funzt super ^^
wenn die sorc jetzt steht und das gebiet clean is macht er keinen hammer mehr. sobald ein monster vorbei läuft wird es attackiert.
kal_el is offline  
Old 02/07/2010, 22:23   #9
 
elite*gold: 0
Join Date: Feb 2010
Posts: 82
Received Thanks: 17
Hey,

genau. In der Funktion "ClearPosition()" ist das Hämmern ja bereits integriert, nur dass er eben auch zielgerichtet und nicht random attackiert (es wird ja auf ValidTarget geprüft)...

Wegen dem BO (is nur ne Überlegung... ich hab das jetzt nicht gepüft). Versuchs mal so:

Code:
if(_Portal)
{
NTC_Delay(500)
NTM_WalkTo(_Portal.x, _Portal.y)
NTC_Delay(500)
NTM_UsePortal("BluePortal");
NTC_Delay(500)
NTP_DoPrecast();
NTC_WaitCastDone();
}
if(!_Portal)
{
NTC_Delay(1000) //Päuschen in milisekunden
}
Das Problem mit deinem BO war (glaube ich ), dass er, weil die ganze Sache ja ne Endlosschleife ist, jedesmal, wenn er nicht in der Stadt ist und die Schleife durchläuft, als Erstes den Befehl BO-Machen gekriegt hat... ergo macht er das endlos lang/oft...
Aber das ist jetzt, wie gesagt, nur alles ne theoretische Überlegung...

regards
BotFreakMan is offline  
Thanks
1 User
Old 02/07/2010, 23:42   #10
 
kal_el's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,205
geil, das wars ^^, so gehts! danke.

paar neue problemchen... ich bin schon etwas weiter...
in act 1 und 2 und 3...nutzt man den town manager ..dann ist er zuweit weg um zu erkennen das ein tp da ist in act 4 und 5 sieht er es noch und geht dann auch rein.
ok, ne möglichkeit wäre die schatzkiste zu definieren, damit er dort hingeht nachdem er den townmanager genutzt hat.(in act 1 steht er ja dann z.B bei malah und sieht tp nicht mehr) aber von der kiste aus sieht er es.
ist der (hm..wie nennt man das .. string? ) in jedem act für die kiste gleich? ich find irgendwie ned das richtige.

das nächste ist: er geht ned mit in ein anderes gebiet, also, wenn ich in der kalten ebene ins blutmoor maschiere bleibt er stehen... ich musste paar mal hin und her damit er mir folgte..das gleiche im flammenfluss ,eingang zum sanktorium.
mehrt fällt mir jez nimmer ein ^^.
btw: das letzte use portal ganz unten braucht er um mit dem führer zurück in die stadt zu gehn, ohne gehts natürlich ned.

hier die aktuelle:
Code:
////////////////////////////////////////////
//Botscripts modificated by njomnjomnjom  //
//http://www.elitepvpers.com/forum/diablo-2//
////////////////////////////////////////////

function NTMain()
{
Include("common/NTCommon.ntl");
NTC_IncludeConfig();
NTC_IncludeLibs();

NT_LoadConfig();
NTSI_LoadNIPFiles();

NTA_Initialize();

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

           
           NTTMGR_TownManager();


while(1)
{
if(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109)
{



var _Portal;
_Portal = NTC_GetUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));

if(_Portal)
{
NTC_Delay(500)
NTM_WalkTo(_Portal.x, _Portal.y) //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
NTC_Delay(500)
NTM_UsePortal("BluePortal"); //schaut in der NTmove um herauszufinden woher dieser Befehl stammt
NTP_DoPrecast();
NTC_Delay(500)
}
if(!_Portal)
{
NTC_Delay(1000) //Päuschen in milisekunden
}


}
if(me.areaid != 1 && me.areaid != 40 && me.areaid != 75 && me.areaid != 103 && me.areaid != 109)
{
            
     
var _Führer;
_Führer = NTC_GetUnit(NTC_UNIT_PLAYER, NTC_CHAR_CLASS_SORCERESS) 
NTC_Delay(10)

if(_Führer)
{
if(GetDistance(me, _Führer) > 3) //WENN die Distanz zwischen dem Bot und uns größer ist als 3, DANN...
{
NTM_TeleportTo(_Führer.x+1, _Führer.y+1) //schaut in die NTmove um herausufinden woher dieser Befehl stammt.
NTC_WaitCastDone() //Das selbe wie ein Päuschen, setzt es jedesmal wenn ihr ihn einen Skill casten lasst.
}
if(GetDistance(me, _Führer) < 3)
{
NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT); //Aura anmachen
NTC_Delay(10); 
//NTC_DoCast(NTConfig_AttackSkill[2], 2); //Hämmern
NTC_WaitCastDone()

	{
	NTA_ClearPosition(20);
		NTC_PingDelay(100);	
	NTSI_PickItems();
	}


}
}
if(!_Führer)
{
NTC_Delay(1000); //Päuschen wenn wir nicht da sind.

        {
	
		NTC_PingDelay(100);
	NTM_UsePortal("BluePortal");
		NTC_PingDelay(100);	
	}



}
}
} 
}
kal_el is offline  
Thanks
1 User
Old 02/08/2010, 00:16   #11
 
elite*gold: 0
Join Date: Feb 2010
Posts: 82
Received Thanks: 17
Thumbs up

Hehe,

das wird ja immer komplexer... is fraglich ob sich njom das so gedacht hatte

Zu dem Problem mit der Stadt würde mir so spontan einfallen, ihn (den bot) per if-Funktion zu den TP-Spot Koordinaten zu schicken... klar was ich meine?

Zu Beginn der Endlosschleife prüft er ja direkt: Bin ich in der Stadt? Wenn das so ist, macht er, was in der geschweiften Klammer darunter steht...

Code:
if(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109)
{
//Ich mach jetzt mal was hier steht...
}
Jetzt ändern wir das Ganze so ab:

Code:
if(me.areaid == 1 || me.areaid == 40 || me.areaid == 75 || me.areaid == 103 || me.areaid == 109)
{
if(me.areaid == 1) //Bin ich im Lager der Jägerinnen?
{
NTM_MoveTo(X-Koordinaten TP-Spot, Y-Koordinaten TP-Spot)
}
if(me.areaid == 40) //Bin ich in Lut Gholein?
{
NTM_MoveTo(X-Koordinaten TP-Spot, Y-Koordinaten TP-Spot)
}
if(me.areaid == 75) //Bin ich in Kurast?
{
NTM_MoveTo(X-Koordinaten TP-Spot, Y-Koordinaten TP-Spot)
}
if(me.areaid == 109) //Bin ich bei den Barbaren?
{
NTM_MoveTo(X-Koordinaten TP-Spot, Y-Koordinaten TP-Spot)
}
//Wo auch immer ich in der Stadt bin, ich mach mal was hier steht :D
}
Act 5 würde ich auch prüfen lassen, da er ja auch bei qual khek stehen könnte oder bei anya oder nilathak...

Achtung: da wo x-/y-Koordinaten TP-Spot steht, muss man natürlich die ingame-Koordinaten eintragen... die musste dir jetzt aber selber auslesen

Keine Ahnung ob das jetzt klappt oder auch einfacher geht, aber theoretisch...

Dein jetziges Problem beantwortet auch mir eine sehr wichtige allgemeine Frage (danke dafür, ich hab da schon ewig dran rumgerätselt...): Die Funktion GetUnit funktioniert offenbar NUR in Sichtweite des Bots. Er kann also anscheinend keine Unit erkennen, die weiter als 1 Screen entfernt ist...

regards

edit: malah is übrigens in act5
BotFreakMan is offline  
Old 02/08/2010, 04:10   #12
 
kal_el's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,205
moin, jo ich meinte charsi die schnecke.
das is ne gute idee....ich hatte in act 1 schon angefangen die koordinaten auszulesen..aber umständlicher geschrieben was er machen soll !!
werde das wenn ich von arbeit komm mal so testen wie du das gedacht hast.
thx
kal_el is offline  
Old 02/08/2010, 04:26   #13
 
elite*gold: 0
Join Date: Feb 2010
Posts: 82
Received Thanks: 17
Alles klar... bin ich mal gespannt.
BotFreakMan is offline  
Old 02/08/2010, 20:22   #14
 
kal_el's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,205
irgendwie will das ned so wie ich es will.. ich weis auch ned ob das der sinn ist das ich mit dem bodygard nen act wechsel mache...denn wenn ich den act wechsle macht er nix..gar nix..ausser das er ins tp geht wenn eins da is... und nah genug is.
irgendwie arbeitet er nur das ab was an erster stelle steht..also act1 z.B auch wenn er in act 5 is, dann latscht er natürlich ganz woanders hin.
die schleife passt irgendwie ned.. ich hatte ihn innerhalb der while..ausserhalb..alles extra..klammern da..klammern dort , schaff das ned so. (reiner erfahrungsmagel^^ )
btw. jo jo, die koordinaten hatte ich.
kal_el is offline  
Old 02/09/2010, 15:25   #15
 
njomnjomnjom's Avatar
 
elite*gold: 20
Join Date: Mar 2009
Posts: 1,356
Received Thanks: 736
Wenn ihr ihn nur in der Stadt umherlatschen lassen wollt müsst ihr nicht zwingend mit koordinaten arbeiten. ihr könnt auch die Funktion

NTTM_TownMove(spot)


für spot könnt ihr dann die sachen einsetzen die ganz oben in der NTTownMove.ntl im common ordner stehen.

(z.B. "portalspot" oder "akara" )



joah...
njomnjomnjom is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[Guide] Grundlagen der D2NT/JavaScript Programmierung
02/08/2012 - Diablo 2 Programming - 35 Replies
Hallo zusammen! Wie angedroht wird hier mein kleiner Guide entstehen, in dem es um die die Grundlagen der Programmierung von Scripten für D2NT entstehen. Da ich generell momentan wenig Zeit habe, werde ich nach und nach editieren, je nachdem wie ich Zeit und Lust habe. Die Struktur ist noch alles andere als Fest und wird eventuell noch drastisch geändert. Grundsätzliches Da ich immer wieder nach sehr grundlegenden Zusammenhängen gefragt werde, fand ich ich mal angebracht, diese...
suche D2NT soso guide
01/21/2011 - Diablo 2 - 11 Replies
Hey würde gerne mal wissen was ihr fuer ne soso fuer eure bot runs nimmt mit skillung, eq und merc und welche runs ihr denn macht wäre echt nett wenn mir einer son guide posten würdet:handsdown:
[GUIDE] Einen eigenen Metin2 Hamachi Pserver [EINFACHER GUIDE]
12/08/2010 - Metin2 Guides & Templates - 20 Replies
Mir war ein bisschen Langweilig da dacht ich, ich mach mal einen Metin2 Hamachi Pserver Guide. Ich hoffe er gefällt euch ;) Es ist zwar eine Menge zu Lesen aber der Spaß ist gigantisch. Folgendes Wird Gebraucht: 1. Hamachi 2. ServerFiles (Per Pn natürlich) 3. Einen Pc oder Laptop mit mindestens 2GB Ram 4. Eine Menge Geduld für den ersten Anlauf
Suche einen D2NT experten
04/13/2010 - Diablo 2 Programming - 0 Replies
Hallo Leute bin leider kein experte, und somit poste ich hier mein anliegen. Es geht um folgendes: Mein Hammerdin telet manchmal zum Boss / Gegner aber nicht genau er attackiert mit Hammer aber, diese treffen das Monster nicht. Bis mein Akt 3 Merc den killt dauert das ewig, und es kommt vor das der Gegner Cold immun ist, dann kann sogar merc nichts mehr machen, und er attackiert und attackiert, ohne Erfolg. Ich würde das gerne umändern in: Hammerdin soll zum Gegner telen und Hammer...
Wie ist ein Botscript aufgebaut D2NT [Guide]
01/25/2010 - Diablo 2 Programming - 0 Replies
Ein Script läuft immer von Oben nach unten ab. Beispiel NTSummoner.NTJ Wie man sehr gut sehen kann werden einfach Funktionen, welche über die files im Ordner "scripts\libs\common" definiert sind in der gewünschten reihenfolge abgespielt. Man muss also kein Coder sein, um ein Botscript an seine eigenen Wünsche anzupassen.



All times are GMT +2. The time now is 15:49.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.