Register for your free account! | Forgot your password?

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

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

Advertisement



NTC_FindUnit(NTC_UNIT_MONSTER, xxx)

Discussion on NTC_FindUnit(NTC_UNIT_MONSTER, xxx) within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: May 2009
Posts: 305
Received Thanks: 19
NTC_FindUnit(NTC_UNIT_MONSTER, ***)

Moin,

ich suche die UNIT MONSTER id's von Vizier, Seis und Inflector..
habe in der monsterclassid aber nichts dazu gefunden, sondern nur diablo..

kann mir jemand fix weiterhelfen?

regards

okay habe jetzt das:

Code:
                         var _infector; 
				_infector = NTC_FindUnit(NTC_UNIT_SPECTYPE,classid,0x04);
					while(_infector && _infector.hp > 0);
allerdings, wie man vielleicht als jemand sieht der sich damit beschäftigt, funktioniert es nicht
wo ist mein fehler?
muss ich "findunit" definieren oder sowas ?
wenn ja, wie denn?
Copy&Past is offline  
Old 01/11/2011, 23:26   #2
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41624
Join Date: Jan 2010
Posts: 22,728
Received Thanks: 12,654
Quote:
Originally Posted by Copy&Past View Post
Moin,

ich suche die UNIT MONSTER id's von Vizier, Seis und Inflector..
habe in der monsterclassid aber nichts dazu gefunden, sondern nur diablo..

kann mir jemand fix weiterhelfen?

regards

okay habe jetzt das:

Code:
                         var _infector; 
                _infector = NTC_FindUnit(NTC_UNIT_SPECTYPE,classid,0x04);
                    while(_infector && _infector.hp > 0);
allerdings, wie man vielleicht als jemand sieht der sich damit beschäftigt, funktioniert es nicht
wo ist mein fehler?
muss ich "findunit" definieren oder sowas ?
wenn ja, wie denn?
"findunit" definieren?

Also erstmal entspricht der erste Parameter, den NTC_FindUnit() bekommt, dem Typ des gesuchten Objekts, welcher einer Integer Konstante entspricht.

Wie diese Konstanten aussehen, zeigt ein kurzer Blick in die common library:
Code:
const NTC_UNIT_PLAYER = 0;
const NTC_UNIT_NPC = 1;
const NTC_UNIT_MERC = NTC_UNIT_NPC;
const NTC_UNIT_MONSTER = NTC_UNIT_NPC;
const NTC_UNIT_OBJECT = 2;
const NTC_UNIT_MISSILE = 3;
const NTC_UNIT_ITEM = 4;
const NTC_UNIT_TILE = 5;
Der zweite Parameter ist ein generisches Suchkriterium. Dies kann die classid eines Monsters sein, aber durchaus auch ein string, oder eine gid.

Der dritte Parameter beschreibt die Anzahl der Versuche, welche unternommen werden, wenn das Objekt nicht direkt instantiiert werden konnte.
(Wobei es genaugenommen eine Liste von Objekten ist)

Wie dir nun vermutlich klar wird, passt dein Aufruf nicht so ganz. Eine Konstante NTC_UNIT_SPECTYPE ist nicht definiert, abgesehen davon ist spectype eine Eigenschaft eines Monsterobjekts, nicht aber ein Objekttyp.

Was soll classid sein, ist das in dem Kontext überhaupt definiert?

0x04 kann man machen, wenn man es bevorzugt, Hexadezimalzahlen zu verwenden, um die Anzahl der Versuche anzugeben, das wäre also nichtmal falsch.

Grundsätzlich bietet sich hier die Verwendung der classid als Suchkriterium nicht an, weil die Eigenschaft classid allgemein etwas über eine Monsterklasse aussagt und somit für alle Monster dieser Klasse identisch ist. Würdest du hier also eine classid einsetzen, dann würdest du eine Liste aus Monster Objekten erhalten, die neben dem "Infector of Souls" auch dessen minions repräsentieren, sowie sämtliche anderen Monster des Typs "Venom Lord" in der Nähe (Nähe heisst etwa ein Radius von ~70).

Du müsstest also zusätzlich die Eigenschaft spectype überprüfen, und solange die Liste durchlaufen, bis du auf ein Objekt triffst, bei dem der bitweise Abgleich des spectypes mit dem eines super unique Monsters (0x02) ein true liefert.
Eigentlich auch nicht weiter wild, aber du kannst eben alternativ mithilfe des passenden LocaleStrings direkt das Objekt instantiieren, was du eigentlich haben willst, womit du dir die Sache etwas erleichterst.

Die LocaleString IDs finden sich mit einem kurzen Blick ins vorhandene Diablo script:
Code:
Visier == 2851 (classid: 306)
De Seis == 2852 (classid: 312)
Infector == 2853 (classid: 362)
Lg
Muddy
Muddy Waters is offline  
Thanks
1 User
Old 01/12/2011, 13:42   #3
 
elite*gold: 0
Join Date: May 2009
Posts: 305
Received Thanks: 19
Hallo Muddy!

Danke für die, doch sehr aufschlussreiche, Antwort!
Mit den classid Nummern kann ich schon mal recht viel anfangen!

Also ich heute morgen auf dem Weg zu Arbeit deinen Grundlagen Thread durchforstet habe, ist mir selber klar geworden das meine Funktion alles andere als richtig ist.

Endlich wartet mein Barb solange, bis der Boss tot ist, bevor er in Town geht, danke!
Copy&Past is offline  
Reply




All times are GMT +1. The time now is 05:48.


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