Entspann dich mal Es ist mitten in der Woche und nicht jeder ist hier 24/7 aktiv.
Draxxes hat dir die Lösung im Endeffekt schon genannt. Ich gehe noch einen Schritt weiter und nenne dir eine Funktion, die höchstwahrscheinlich das tut, was du möchtest.
Code:
FUNC INT Hlp_IsItem (VAR C_Item item, VAR INT instanceName)
Sorry, aber wenn's nach mir geht, musst du den Rest selber herausfinden.
Wenn ich vom skripten auch nur ansatzweise was verstehen würde, dann hätte ich wahrscheinlich die fragen hier alle nicht gestellt, aber danke schonmal ich sehe obs was wird
EDIT: okay, ich weis nichts damit anzufangen... :/
Fangen wir doch mal mit den Ansätzen an...
Mit welchem Teil kannst du nichts anfangen? Oder mit der gesamten Funktion?
Ich habe gerade meine sozialen fünf Minuten, deshalb gebe ich noch einen weiteren Tipp. Du hast im obigen Script folgende Zeile stehen:
Code:
var C_ITEM br_pfeil; br_pfeil = Npc_GetReadiedWeapon(other);
Vielleicht hilft dir das in Verbindung mit der von mir geposteten Funktion.
genau diese zeile habe ich getauscht und bei instance name, die instance eines meiner bögen eingefügt, leider geht das nicht...wie gesagt von skripten und funktionen verstehe ich nur bahnhof
das heisst, sachen die für andere selbstverständlich sind, sind für mich wie eine fremdsprache , zb latainisch welche ich nicht beherrsche :/
Gut, vier Minuten sind noch übrig. Ich werd's mal versuchen. Eins noch vorab, von mir gibt's gerade kein fertiges Script, nur Denkanstöße.
Code:
var C_ITEM br_pfeil; br_pfeil = Npc_GetReadiedWeapon(other);
In dieser Zeile definierst du zuerst eine Variable, in der du ein Item speicherst, genauer gesagt, die Fernkampfwaffe, die der Held gerade gezogen hat.
Code:
FUNC INT Hlp_IsItem (VAR C_Item item, VAR INT instanceName)
Die Funktion vergleicht zwei Items miteinander. In diesem Falle braucht der erste Parameter eine Variable (ein Objekt) vom Typ C_Item, der zweite eine Instanz. So zumindest die Benennung der Parameter.
Die Funktion ist natürlich schon definiert, daher musst du sie nur aufrufen. Das "FUNC INT" kannst du in diesem Fall weglassen.
Was du jetzt tauschen musst, ist nicht dieser Aufruf:
Code:
var C_ITEM br_pfeil; br_pfeil = Npc_GetReadiedWeapon(other);
sondern den Teil des Scriptes, der die Abfrage übernimmt. Tipp: Die erste der drei betroffenen Zeilen ist folgende:
Code:
if (br_pfeil.munition==ItRw_Addon_FireBow)
"if" bedeutet übersetzt soviel wie "wenn", die "||" in den Zeilen danach stehen für "oder".
So, eigentlich sind jetzt alle Puzzlestücke zusammen. Genauer gesagt sind es drei. Diese jetzt noch zusammen setzen und ab dafür!
Gut, vier Minuten sind noch übrig. Ich werd's mal versuchen. Eins noch vorab, von mir gibt's gerade kein fertiges Script, nur Denkanstöße.
Code:
var C_ITEM br_pfeil; br_pfeil = Npc_GetReadiedWeapon(other);
In dieser Zeile definierst du zuerst eine Variable, in der du ein Item speicherst, genauer gesagt, die Fernkampfwaffe, die der Held gerade gezogen hat.
Code:
FUNC INT Hlp_IsItem (VAR C_Item item, VAR INT instanceName)
Die Funktion vergleicht zwei Items miteinander. In diesem Falle braucht der erste Parameter eine Variable (ein Objekt) vom Typ C_Item, der zweite eine Instanz. So zumindest die Benennung der Parameter.
Die Funktion ist natürlich schon definiert, daher musst du sie nur aufrufen. Das "FUNC INT" kannst du in diesem Fall weglassen.
Was du jetzt tauschen musst, ist nicht dieser Aufruf:
Code:
var C_ITEM br_pfeil; br_pfeil = Npc_GetReadiedWeapon(other);
sondern den Teil des Scriptes, der die Abfrage übernimmt. Tipp: Die erste der drei betroffenen Zeilen ist folgende:
Code:
if (br_pfeil.munition==ItRw_Addon_FireBow)
"if" bedeutet übersetzt soviel wie "wenn", die "||" in den Zeilen danach stehen für "oder".
So, eigentlich sind jetzt alle Puzzlestücke zusammen. Genauer gesagt sind es drei. Diese jetzt noch zusammen setzen und ab dafür!
Okay... wenn ich das jetzt richtig verstehe, sollte das so aussehen...aber irgendwas ist noch falsch
Spoiler:(zum lesen bitte Text markieren)
Code:
var C_ITEM item; item = Npc_GetReadiedWeapon(other);
if Hlp_IsItem (VAR C_Item item, VAR INT ItRw_Addon_MagicBow)
erstellt eine neue Variable mit dem Namen item. Das funktioniert nur einmal. Danach musst du sie nur benutzen, nicht neu erstellen. Um darauf zuzugreifen, kannst du auch einfach den Namen nutzen.
erstellt eine neue Variable mit dem Namen item. Das funktioniert nur einmal. Danach musst du sie nur benutzen, nicht neu erstellen. Um darauf zuzugreifen, kannst du auch einfach den Namen nutzen.
ich habe jetzt item mit Item_bow ersetzt das geht leider immernoch nicht
Okay, hier nochmal ein kleiner Crash Kurs, was Funktionen angeht.
Das hier ist die Funktionsdeklarierung.
Code:
FUNC INT Hlp_IsItem (VAR C_Item item, VAR INT instanceName)
Das Func bedeutet, dass es sich um eine Funktion handelt.
Das Int bedeutet, dass diese Funktion etwas zurückgibt. Im Gegensatz zu Funktionen, die dort Void stehen haben. Die geben dann nichts zurück.
Anschließend ist Hlp_IsItem der Funktionsname, den du bei einem Aufruf benutzt. Im Anschluss stehen in den Klammern die Parameterdeklarationen.
Var C_Item item heißt hier, dass es sich um eine VARIABLE des Typs C_ITEM handelt, die "item" heißt. Wenn man diese Variable in der Funktion verwenden will, dann nutzt man diesen Namen, um auf den Inhalt zuzugreifen.
Wie Dada bereits geschrieben hat ist diese Funktion bereits definiert. Somit kannst du sie benutzen. Wenn du jetzt eine Funktion benutzt, dann lässt du die deklarierenden Elemente der Funktionsbeschreibung weg und verwendest ausschließlich die Namen. In diesem Fall fällt das FUNC INT vorne weg, genauso wie das VAR C_ITEM und das VAR INT vor den Parameternamen.
Ein Aufruf sieht also folgendermaßen aus:
Code:
Hlp_IsItem(myWeapon, ItRw_Addon_FireBow)
Dieser Aufruf würde jetzt TRUE zurückgeben, wenn myWeapon (was eine Variable vom Typ C_ITEM ist) vom Instanztyp ItRw_Addon_FireBow ist.
Ich hoffe, dass ich dir Richtung Funktionen etwas Licht ins Dunkel bringen konnte. Dieses Prinzip ist übrigens überall gleich. Das heißt, wenn du jetzt so einen Funktionsdeklaration siehst (zum Beispiel gibt es ganz viele praktische in der Externals.d), dann weißt du genau, wie du sie benutzt
Und noch ein kleiner Nachsatz zu deinem Vergleich zu Latein: Da du ja recht häufig Scriptprobleme hast spricht das dafür, dass es sicherlich nicht verkehrt ist mal das ein oder andere Tutorial anzuschauen, bevor du dich in die Feature-Hölle stürzt. Das spart dir im Nachhinein erfahrungsgemäß wirklich viel Zeit, die du sonst mit dem Warten auf eine Antwort im Forum verbrauchst. Außerdem macht Scripten richtig Spaß, wenn man einmal die Grundlagen verstanden hat und ist deutlich weniger frustrierend
Okay, hier nochmal ein kleiner Crash Kurs, was Funktionen angeht.
Das hier ist die Funktionsdeklarierung.
Code:
FUNC INT Hlp_IsItem (VAR C_Item item, VAR INT instanceName)
Das Func bedeutet, dass es sich um eine Funktion handelt.
Das Int bedeutet, dass diese Funktion etwas zurückgibt. Im Gegensatz zu Funktionen, die dort Void stehen haben. Die geben dann nichts zurück.
Anschließend ist Hlp_IsItem der Funktionsname, den du bei einem Aufruf benutzt. Im Anschluss stehen in den Klammern die Parameterdeklarationen.
Var C_Item item heißt hier, dass es sich um eine VARIABLE des Typs C_ITEM handelt, die "item" heißt. Wenn man diese Variable in der Funktion verwenden will, dann nutzt man diesen Namen, um auf den Inhalt zuzugreifen.
Wie Dada bereits geschrieben hat ist diese Funktion bereits definiert. Somit kannst du sie benutzen. Wenn du jetzt eine Funktion benutzt, dann lässt du die deklarierenden Elemente der Funktionsbeschreibung weg und verwendest ausschließlich die Namen. In diesem Fall fällt das FUNC INT vorne weg, genauso wie das VAR C_ITEM und das VAR INT vor den Parameternamen.
Ein Aufruf sieht also folgendermaßen aus:
Code:
Hlp_IsItem(myWeapon, ItRw_Addon_FireBow)
Dieser Aufruf würde jetzt TRUE zurückgeben, wenn myWeapon (was eine Variable vom Typ C_ITEM ist) vom Instanztyp ItRw_Addon_FireBow ist.
Ich hoffe, dass ich dir Richtung Funktionen etwas Licht ins Dunkel bringen konnte. Dieses Prinzip ist übrigens überall gleich. Das heißt, wenn du jetzt so einen Funktionsdeklaration siehst (zum Beispiel gibt es ganz viele praktische in der Externals.d), dann weißt du genau, wie du sie benutzt
Und noch ein kleiner Nachsatz zu deinem Vergleich zu Latein: Da du ja recht häufig Scriptprobleme hast spricht das dafür, dass es sicherlich nicht verkehrt ist mal das ein oder andere Tutorial anzuschauen, bevor du dich in die Feature-Hölle stürzt. Das spart dir im Nachhinein erfahrungsgemäß wirklich viel Zeit, die du sonst mit dem Warten auf eine Antwort im Forum verbrauchst. Außerdem macht Scripten richtig Spaß, wenn man einmal die Grundlagen verstanden hat und ist deutlich weniger frustrierend
Hmm, klingt tatsächlich etwas merkwürdig...
Wenn ich das richtig zusammengesucht habe, soll die Funktion wohl nicht funktionieren, wenn der NPC keine Munition hat.
Also versuch mal, folgendes vor der Funktion einzufügen.
Hmm, klingt tatsächlich etwas merkwürdig...
Wenn ich das richtig zusammengesucht habe, soll die Funktion wohl nicht funktionieren, wenn der NPC keine Munition hat.
Also versuch mal, folgendes vor der Funktion einzufügen.