scriptcall + rückgabe von einem array
Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum
-
- Posts: 97
- Joined: Tue, 22. Dec 09, 18:13
scriptcall + rückgabe von einem array
Ich komme nicht mehr weiter mit meinem problem deshalb wende ich mich hier an die community.
Ein Hauptscript soll ein unterscript aufrufen dass eine liste aller einsammelbaren astros mit einem bestimmten mineral züruckgeben soll.
das Problem ihrgenwie kommt das array nicht an Das script ruft mit einem
@ start scriptcall das unterscript auf und soll dan das Array welches von diesem erstelt wird übernehmen. nur kommt das nie im hauptscript an.
Tutorials habe ich keine dazu gefunden und die suche mit Google hat auch nichts brauchbares ergeben.
Danke schonmal im vorraus
Ein Hauptscript soll ein unterscript aufrufen dass eine liste aller einsammelbaren astros mit einem bestimmten mineral züruckgeben soll.
das Problem ihrgenwie kommt das array nicht an Das script ruft mit einem
@ start scriptcall das unterscript auf und soll dan das Array welches von diesem erstelt wird übernehmen. nur kommt das nie im hauptscript an.
Tutorials habe ich keine dazu gefunden und die suche mit Google hat auch nichts brauchbares ergeben.
Danke schonmal im vorraus
X3 süchtig und stolz drauf ^^
-
- Posts: 383
- Joined: Mon, 22. Nov 10, 20:26
Mit "START [THIS] -> call script..." ist keine Rückgabe möglich, da das Unterscript gestartet wird und das Hauptscript weiterläuft. Für eine Rückgabe muss das Hauptscript so lange warten, bis das Unterscript fertig gelaufen ist:
$Return wäre das Array, welches zurückgeben werden soll.
$Array wäre das Array, welches zurückgeben werden soll.
Du musst also im Hauptscript das Array (in dem Beispiel $Return) und im Unterscript den Rückgabewert (im Beispiel $Array) definieren. Dabei ist es egal, ob die Werte unterschiedliche Namen haben, da es sich ja um zwei verschiedene Scripte handelt.
Gruß
Reacecor
PS: Und für so kleine Fragen haben wir übrigens ein gepinntes Thema.
Code: Select all
* Hauptscript
...
$Return = [THIS] -> call script 'Unterscript' : Argumente, falls vorhanden
...
Code: Select all
* Unterscript
...
* Code, der das Array erstellt
...
return $Array
Du musst also im Hauptscript das Array (in dem Beispiel $Return) und im Unterscript den Rückgabewert (im Beispiel $Array) definieren. Dabei ist es egal, ob die Werte unterschiedliche Namen haben, da es sich ja um zwei verschiedene Scripte handelt.
Gruß
Reacecor
PS: Und für so kleine Fragen haben wir übrigens ein gepinntes Thema.

-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
alternativ dazu kann man im Hauptscript ein Array erstellen, dieses an das Unterscript übergeben und es dann im Unterscript füllen - eine Rückgabe ist in diesem fall nicht nötig weil Arrays ja Pointer sind (eine gewisse Wartezeit nach dem Starten ist trotzdem absolut notwendig, weil das Array sonst abgearbeitet wird bevor es überhaupt Werte enthält)
aber das nur so am rande ^^ ist nämlich keine schöne Lösung ^^
aber das nur so am rande ^^ ist nämlich keine schöne Lösung ^^
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
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

-
- Posts: 383
- Joined: Mon, 22. Nov 10, 20:26
-
- Posts: 97
- Joined: Tue, 22. Dec 09, 18:13
-
- Posts: 97
- Joined: Tue, 22. Dec 09, 18:13
nochmal ein scriptproblem Mit einer Arrayerstellung
Sorry leute aber irgendwie hab ich ein problem mit diesem script
unten sollte dan ein Array mit allen einsamelbaren astros mit der gewählten ressourse und geordnet nach entfernung vom ausführenden schiff rauskommen
1: Selected.Mineral , Var/Ware , 'wert'
2: ship , Var/Ship , 'schiff'
Source Text
001 $Scannerrange = [THIS] -> get scanner range
002 $Sector = [THIS] -> get sector
003 $flags = [Find.Nearest] AND [Find.Multiple]
004 $Rocks = find debris: sector=$Sector resource=$Selected.Mineral min yield=1 flags=$flags refobj=[THIS] num=40 max distance=$Scannerrange refpos=null
005 $size = size of array $Rocks
006 write to player logbook: printf: fmt=$size, $Rocks, null, null, null, null
007 Checking:
008 while $m <= $size
009 $m = 1
010 $pot.Rock = $Rocks[$m]
011 if $pot.Rock -> has collectible rocks
012 $min.pot.Rock = $pot.Rock -> get resource waretype of asteroid
013 if $min.pot.Rock == $Selected.Mineral
014 insert $pot.Rock into array $Rock.def at index $m
015 end
016 end
017 inc $m =
018 end
019 return $Rock.def
unten sollte dan ein Array mit allen einsamelbaren astros mit der gewählten ressourse und geordnet nach entfernung vom ausführenden schiff rauskommen
1: Selected.Mineral , Var/Ware , 'wert'
2: ship , Var/Ship , 'schiff'
Source Text
001 $Scannerrange = [THIS] -> get scanner range
002 $Sector = [THIS] -> get sector
003 $flags = [Find.Nearest] AND [Find.Multiple]
004 $Rocks = find debris: sector=$Sector resource=$Selected.Mineral min yield=1 flags=$flags refobj=[THIS] num=40 max distance=$Scannerrange refpos=null
005 $size = size of array $Rocks
006 write to player logbook: printf: fmt=$size, $Rocks, null, null, null, null
007 Checking:
008 while $m <= $size
009 $m = 1
010 $pot.Rock = $Rocks[$m]
011 if $pot.Rock -> has collectible rocks
012 $min.pot.Rock = $pot.Rock -> get resource waretype of asteroid
013 if $min.pot.Rock == $Selected.Mineral
014 insert $pot.Rock into array $Rock.def at index $m
015 end
016 end
017 inc $m =
018 end
019 return $Rock.def
X3 süchtig und stolz drauf ^^
-
- Moderator (Deutsch)
- Posts: 25130
- Joined: Sun, 2. Apr 06, 16:38
Da es immer noch um Arrays geht und dein anderes Thema noch recht aktuell ist,...
**Themen zusammengefügt***
**Themen zusammengefügt***
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!
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!
-
- Posts: 1296
- Joined: Tue, 3. Feb 04, 12:11
Hi,
das hier nichts gefunden wird ist logisch
Als
1. $scannerrange von $ship nehmen. So lange das Script nicht direkt auf dem Schiff läuft bekommst Du hier kein Ergebnis
2. $Sector von $ship nehmen. Wie bei 1.
3. Solltest Du die Flags mit '|' verküpfen
4. Schreib besser while $m < $size da arrays immer mit 0 anfangen und arrysize +1 ist
5. $m=1 würd ich vor der Schleife definieren ausserdem nimm 0 als Wert
6. Das Array $Rock.def muss vorher mit alloc definiert werden. Also am besten am Anfang des Scripts ($Rock.def = array alloc: size=0)
Das ist mal das was mir so auf die Schnelle aufgefallen ist.
Bis denn Thaon
das hier nichts gefunden wird ist logisch

Als
1. $scannerrange von $ship nehmen. So lange das Script nicht direkt auf dem Schiff läuft bekommst Du hier kein Ergebnis
2. $Sector von $ship nehmen. Wie bei 1.
3. Solltest Du die Flags mit '|' verküpfen
4. Schreib besser while $m < $size da arrays immer mit 0 anfangen und arrysize +1 ist
5. $m=1 würd ich vor der Schleife definieren ausserdem nimm 0 als Wert
6. Das Array $Rock.def muss vorher mit alloc definiert werden. Also am besten am Anfang des Scripts ($Rock.def = array alloc: size=0)
Das ist mal das was mir so auf die Schnelle aufgefallen ist.
Bis denn Thaon
-
- Posts: 12969
- Joined: Sun, 9. May 04, 21:26
Beispiel:
Code: Select all
Arguments
1: Ship , Var/Ship , 'Ship'
2: Mineral , Var/Ware , 'Mineral'
Source Text
001 * --------------------------------------------------------------------------------
002 skip if $Ship -> exists
003 |return null
004 skip if is datatyp[ $Mineral ] == DATATYP_WARE
005 |return null
006 * --------------------------------------------------------------------------------
007 $Sector = $Ship -> get sector
008 $ScannerRange = $Ship -> get scanner range
009 * --------------------------------------------------------------------------------
010 $Flags = [Find.Nearest] | [Find.Multiple]
011 $Array.Debris = find debris: sector=$Sector resource=$Mineral min yield=1 flags=$Flags refobj=$Ship num=2147483647 max distance=$ScannerRange refpos=null
012 skip if is datatyp[ $Array.Debris ] == DATATYP_ARRAY
013 |return null
014 * --------------------------------------------------------------------------------
015 $While = size of array $Array.Debris
016 $Array.Sort.Values = array alloc: size=$While
017 while $While
018 |dec $While =
019 |$Debris = $Array.Debris[$While]
020 |skip if $Debris -> exists
021 ||continue
022 |$Distance = get distance between $Ship and $Debris
023 |$Array.Sort.Values[$While] = $Distance
024 end
025 * --------------------------------------------------------------------------------
026 $Array.Debris = sort array: data=$Array.Debris sort values=$Array.Sort.Values
027 * --------------------------------------------------------------------------------
028 return $Array.Debris
Gruß
Lucike

-
- Posts: 97
- Joined: Tue, 22. Dec 09, 18:13
danke leute da hab ich wohl einige sachen verbockt
naja ist auch mein 1. grösserer script
Edit: Lucike Ich hab den script von probiert aber die controllabfragen geben mir immernoch keinen eintrag als ob die variablen und das Array am ende vor dem return einfach nicht existieren würden ich bin echt überfragt ich habe einen Skip not if Array.Derbris is datatype == Array verwendet aber kein yes. in beiden script dem callenden und dem gecallten habe ich so eine controllmeldung drin und bei beiden kommt no raus

Edit: Lucike Ich hab den script von probiert aber die controllabfragen geben mir immernoch keinen eintrag als ob die variablen und das Array am ende vor dem return einfach nicht existieren würden ich bin echt überfragt ich habe einen Skip not if Array.Derbris is datatype == Array verwendet aber kein yes. in beiden script dem callenden und dem gecallten habe ich so eine controllmeldung drin und bei beiden kommt no raus
X3 süchtig und stolz drauf ^^
-
- Posts: 97
- Joined: Tue, 22. Dec 09, 18:13
sorry für den doppelpost aber wollte mal hier die schaufel ansetzen weil mein problem nach wievor besteht. Ich habe jetzt auch noch das MSCI Handbuch durch und dazu steht da einfach nichts drin.
Edit: Oke hab den fehler im script gefunden die erste abfrage
Skip if Ware is datatype ... hat den script immer schon da bendet
Edit: Oke hab den fehler im script gefunden die erste abfrage
Skip if Ware is datatype ... hat den script immer schon da bendet
Last edited by Boris4022 on Sat, 23. Apr 11, 21:48, edited 1 time in total.
X3 süchtig und stolz drauf ^^
-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
poste mal ab besten deinen bisherigen Code.. und nein, du musst ihn nicht abschreiben sondern lediglich aus der Browseransicht in deinen Post kopieren - denn jetzt ist es nur rätselraten was bei dir nicht klappt..
PS und Arrays kann man problemlos zurückgeben, ja...
PS und Arrays kann man problemlos zurückgeben, ja...
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
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

-
- Posts: 97
- Joined: Tue, 22. Dec 09, 18:13
-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
ob Zahl oder Ware vom Typ Mineralien sollte dem Befehl so ziemlich egal sein.. hauptsache der Wert ist in nem gültigen bereich (0-3 oder Erz, Silizium, Nividium, Eis)
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
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

-
- Posts: 97
- Joined: Tue, 22. Dec 09, 18:13