scriptcall + rückgabe von einem array

Hier ist der ideale Ort um über Scripts und Mods für X³: Terran Conflict und X³: Albion Prelude zu diskutieren.

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

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

scriptcall + rückgabe von einem array

Post by Boris4022 »

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
X3 süchtig und stolz drauf ^^
User avatar
Reacecor
Posts: 383
Joined: Mon, 22. Nov 10, 20:26
x3tc

Post by Reacecor »

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:

Code: Select all

* Hauptscript
...
$Return = [THIS] -> call script 'Unterscript' : Argumente, falls vorhanden
...
$Return wäre das Array, welches zurückgeben werden soll.

Code: Select all

* Unterscript
... 
* Code, der das Array erstellt
...
return $Array
$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. :wink:
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

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 ^^
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 ;)
User avatar
Reacecor
Posts: 383
Joined: Mon, 22. Nov 10, 20:26
x3tc

Post by Reacecor »

So ähnlich lassen sich auch dynamische Menüs erstellen. Aber das auch nur so am Rande. :roll:´
UniTrader wrote:Vote für BurnIt!-Actionfigur in der X - Rebirth - CE!!!
Ah, schon aktualisiert. :wink:

Gruß
Reacecor
Boris4022
Posts: 97
Joined: Tue, 22. Dec 09, 18:13

Post by Boris4022 »

oke danke leute jetzt weiss ich endlich warum mir immer Kein Array ins logbuch geschrieben wurde (zur fehlersuche) danke :lol:
X3 süchtig und stolz drauf ^^
Boris4022
Posts: 97
Joined: Tue, 22. Dec 09, 18:13

nochmal ein scriptproblem Mit einer Arrayerstellung

Post by Boris4022 »

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
X3 süchtig und stolz drauf ^^
User avatar
X2-Illuminatus
Moderator (Deutsch)
Moderator (Deutsch)
Posts: 25130
Joined: Sun, 2. Apr 06, 16:38
x4

Post by X2-Illuminatus »

Da es immer noch um Arrays geht und dein anderes Thema noch recht aktuell ist,...

**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!
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Hi,

das hier nichts gefunden wird ist logisch :wink:

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
User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike »


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
Zeile 14 bis 24 ist eine Sicherheitssortierung, da der Find-Befehl nicht immer die korrekte Reihenfolgen ausspukt.

Gruß
Lucike
Image
Boris4022
Posts: 97
Joined: Tue, 22. Dec 09, 18:13

Post by Boris4022 »

danke leute da hab ich wohl einige sachen verbockt :lol: 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
X3 süchtig und stolz drauf ^^
Boris4022
Posts: 97
Joined: Tue, 22. Dec 09, 18:13

Post by Boris4022 »

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
Last edited by Boris4022 on Sat, 23. Apr 11, 21:48, edited 1 time in total.
X3 süchtig und stolz drauf ^^
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

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...
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 ;)
Boris4022
Posts: 97
Joined: Tue, 22. Dec 09, 18:13

Post by Boris4022 »

hab das Problem gefunden dazu bitte das edit in meinem vorherigen post beachten hab erst gemerkt das Unitrader gepostet hat als ich das edit schon geschrieben habe. Kan es sein das der Find Derbris befehl mit zahlen für die entsprechenden Mineralien arbeitet?
X3 süchtig und stolz drauf ^^
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

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 ;)
Boris4022
Posts: 97
Joined: Tue, 22. Dec 09, 18:13

Post by Boris4022 »

oke gut zu wissen danke dan kan ich auch die zahlencodes verwenden :D

danke leute
X3 süchtig und stolz drauf ^^

Return to “X³: Terran Conflict / Albion Prelude - Scripts und Modding”