Problem beim übergeben von Daten von einem Script zum anderen (script call)

Hier ist der ideale Ort um über Scripts und Mods für X³: Reunion zu diskutieren.

Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators

Post Reply
siboneyr
Posts: 8
Joined: Fri, 20. Feb 15, 17:55

Problem beim übergeben von Daten von einem Script zum anderen (script call)

Post by siboneyr » Sun, 22. Feb 15, 23:19

Hallo zusammen,

ich versuche hier die Logik der Script Befehle zu verstehen...
Wenn ich zwei unterschiedliche Schiffe erstelle (M1+M2) möchte ich, dass das M2 den Träger M1 schützt.

Hier der code:

Code: Select all

 
001 $Carrier =  create ship: type=Colossus owner=Player addto=$CurentSector x=0 y=0 z=0 
002 $Carrier -> command COMMAND_KILL_ENEMIES : arg1=$CurentSector, arg2=null, arg3=null, arg4=null 
003 = [THIS] -> call script A.CreateDestroyer4Fleet1 :  Ship2Protect=$Carrier
Das aufgerufene Script (A.CreateDestroyer4Fleet1) hat 'Ship2Protect' als Agument, definiert als 'Var/Ship'.

Sein code ist:

Code: Select all

001 $Protector =  create ship: type=Titan owner=Player addto=$CurentSector x=0 y=0 z=0 
002 START $Protector -> command COMMAND_PROTECT : arg1=$Ship2Protect, arg2=null, arg3=null, arg4=null 
Ergebnis:
Das M1 führt das Kommando (KILL ENEMIES) sofort aus. Das M2 dagegen führt gar kein Kommando aus. Wenn ich jedoch statt '$Ship2Protect' die Konstante 'PLAYERSHIP' verwende beginnt das M2 sofort mich zu schützen...

Es scheint also ein Problem mit der Übergabe der Variablen vom aufrufenden Script an das aufgerufene Script zu geben. Ich finde aber den Fehler nicht... :?

Jemand eine Idee warum mein Script nicht funktioniert - d.h. warum das M2 kein Kommando bekommt?

Danke für die Hilfe! :)

P.S.: Das Ganze ist für x3 Reunion 2.5 ohne mods.
Me are takin' a rough life easy!

UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader » Fri, 6. Mar 15, 14:08

erste massnahme wäre mal, den Inhalt der beteiligten Variablen ins Logbuch zu schreiben, um zu sehen was überhaupt drin ist (write to player logbook: <value>)

ausserdem wäre es hilfreich, wenn du noch die Argumente der Scripts posten würdest.

ausserdem: müssen es unbedingt 2 Scripts sein? das was du hier postest hat auch in einem Script platz..
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)

siboneyr
Posts: 8
Joined: Fri, 20. Feb 15, 17:55

Post by siboneyr » Sat, 7. Mar 15, 00:03

Hey, danke für die Antwort!
Ah coole Idee den Inhalt der Variablen ins Log zu schreiben...
Siehe da es kam 'null' dabei heraus!!! Bei beiden Scripts...
D.h. bereits das erste Script schreibt mir für die Variable '$Carrier' den Wert 'null' ins Logbuch. Allerdings ist mir noch immer nicht wirklich klar warum...

Das Argument des ersten Scripts ist nur "FleetIndex" definiert als 'String'. Dieses Argument dient der strukturierten automatischen Namensgebung aller Schiffe innerhalb einer Flotte und muss von mir beim Aufrufe des Scripts manuell eingegeben werden. Dieser String wird übrigens tadellos an das zweite Script weitergegeben, weil das zweite Schiff ja ebenfalls zur gleichen Flotte gehört und damit auch den gleichen Index im Namen bekommt...

Das zweite Script hat also im Ganzen zwei Argumente, nämlich "FleetIndex" definiert als 'String' und wie im ersten Post erwähnt "Ship2Protect" definiert als 'Var/Ship'.

Zu deiner Frage warum mehrere Scripts: Naja das hier sind natürlich nur die relevanten Auszüge aus den einzelnen Scripts. Die sind deutlich umfangreicher - nicht nur diese drei Zeilen...
Meine Idee war die einzelnen Schiffstypen einer Flotte ein jeweils einem eigenen Script zu schreiben und dann diese Schiffe wie Module von einem Übergeordneten Script aufrufen und erstellen zu lassen.

Tja die Frage bleibt also: warum gibt die Variable $Carrier im ersten Script einfach nur 'null' wieder? :?
Me are takin' a rough life easy!

UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader » Sat, 7. Mar 15, 10:51

könnte damit zusammen hängen, dass $CurrentSector nicht existiert (==null) so wie du es hier grad beschreibst..
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)

siboneyr
Posts: 8
Joined: Fri, 20. Feb 15, 17:55

Post by siboneyr » Sat, 7. Mar 15, 13:16

Hmmm... ok...
Ich habe für $CurrentSector folgende Zeile stehen:

Code: Select all

 $CurrentSector = [PLAYERSHIP] -> get sector 
Ist das falsch?
Me are takin' a rough life easy!

UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader » Sat, 7. Mar 15, 13:24

so lange es vor dem schiff erstellen kommt nein, in deinem 1. Post ist dieses aber in Zeile 1 und davor kommen nur Argumente, die ne Var hätten fülllen können ^^
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)

siboneyr
Posts: 8
Joined: Fri, 20. Feb 15, 17:55

Post by siboneyr » Sat, 7. Mar 15, 14:56

Yep sorry, mein Fehler... das kommt natürlich vor dem Erstellen des Schiffes...
Ich habe hier in meinem ersten Post nur einen Auszug aus dem Script gepostet und das neu nummeriert.

Ich habe im Übrigen aufgrund deines Tips mal mir aus dem ersten Script die Variablen $Carrier und $CurrentSector und aus dem zweiten Script die Variablen $Ship2Protect, $Protector und $CurrentSector ins Log schreiben lassen:

Im LogBuch wurden jeweils aus beiden Scripts der Name des Trägerschiffes, der Name des Zerstörers und der Sektor eingetragen, in dem diese Schiffe erstellt wurden (was ja der Sektor ist indem ich mich gerade befinde... Die Inhalte stimmen jetzt also Grundsätzlich bei beiden Scripts (beim ersten Mal hatte ich einen dämlichen Tippfehler in der Variable weshalb dabei 'null' herauskam...)

Es sollte jetzt also nur noch an dem Befehl

Code: Select all

 $Protector -> command COMMAND_PROTECT : arg1=$Ship2Protect, arg2=null, arg3=null, arg4=null 
liegen können...

$Ship2Protect gibt ja offensichtlich den String des Shiffsnamens zurück... Hat der Träger vllt. eine eindeutige ID die ich auslesen muss um sie hier statt des Schiffnamens für den Befehl zu übergeben?
Me are takin' a rough life easy!

siboneyr
Posts: 8
Joined: Fri, 20. Feb 15, 17:55

Post by siboneyr » Mon, 9. Mar 15, 15:58

Ahhhh!!! Ich altes Argnu-Rindfieh!!! :evil:

Habe noch einen Tippfehler entdeckt und jetzt geht es natürlich... :oops:
(Ich sollte unbedingt aufhören meine Scripte nach Mitternacht zu schreiben sonst entwickle ich mich noch offiziell zum Script-Legastheniker... :roll: )

Aber Danke nochmal für den Tip mit dem LogEintrag so habe ich es wenigstens gefunden...!
Ist es eigentlich normal, dass der Script Editor Schwierigkeiten hat Doppelbuchstaben zu schreiben? (Aus "current" wurde an anderer Stelle "curent") :o

Cheers
Me are takin' a rough life easy!

User avatar
X2-Illuminatus
Moderator (Deutsch)
Moderator (Deutsch)
Posts: 24950
Joined: Sun, 2. Apr 06, 16:38
x4

Post by X2-Illuminatus » Mon, 9. Mar 15, 19:54

Ist es eigentlich normal, dass der Script Editor Schwierigkeiten hat Doppelbuchstaben zu schreiben? (Aus "current" wurde an anderer Stelle "curent")
Ja, das ist normal und trifft auf die komplette Texteingabe in X3 zu. Das wurde leider erst in X3AP behoben. Zum Scripte Schreiben empfiehlt sich ansonsten auch ein externer Script Editor, wie X-Studio von mr.bear.
Nun verfügbar! X3: Farnham's Legacy - Ein neues Kapitel für einen alten Favoriten

Die komplette X-Roman-Reihe jetzt als Kindle E-Books! (Farnhams Legende, Nopileos, X3: Yoshiko, X3: Hüter der Tore, X3: Wächter der Erde)

Neuauflage der fünf X-Romane als Taschenbuch

The official X-novels Farnham's Legend, Nopileos, X3: Yoshiko as Kindle e-books!

Post Reply

Return to “X³: Reunion - Scripts und Modding”