Befehlserklärung von multi Arrays?

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

topo14880
Posts: 107
Joined: Fri, 2. Dec 05, 21:48
x3

Befehlserklärung von multi Arrays?

Post by topo14880 » Sat, 4. Feb 06, 23:41

guten Abend

kann den jemand dies 3 Befehle , genauer erklären?(am besten anhand eines Bsp.)

<RetVar/IF><Var/Array>[<Var/Number>][<Var/Number>]

<Var/Array>[<Var/Number>][<Var/Number>]=<Value>

<RetVar>=get index of <Value>in array<Var/Array>offset = <Var/Number>+1
(wird bei diesem hier das Element oder eine Zahl zurückgegeben und warum ist am Schluss +1, weil das Array mit 0 anfängt?)

bei den ersten beiden Befehlen, handelt es sich um (soweit ich bis jetzt rausgefunden habe) multidimensionale Arrays

ich denk, dass diese Befehle auch andere sehr interressieren würde

Mfg topo14880

Deleted User

Post by Deleted User » Sun, 5. Feb 06, 10:09


topo14880
Posts: 107
Joined: Fri, 2. Dec 05, 21:48
x3

Post by topo14880 » Sun, 5. Feb 06, 11:39

den threat kenn ich schon, hab ihn auch schon x-mal durchgelesen.

komm einfach nicht dahinter :?

Deleted User

Post by Deleted User » Sun, 5. Feb 06, 19:48

hehe so gings mir auch...
bringens wir dir mal Schrittweise bei:
also frage 1.
weisst du was ein Array ist ?


MfG
Hudruf

topo14880
Posts: 107
Joined: Fri, 2. Dec 05, 21:48
x3

Post by topo14880 » Sun, 5. Feb 06, 20:10

hudruf wrote:hehe so gings mir auch...
bringens wir dir mal Schrittweise bei:
also frage 1.
weisst du was ein Array ist ?


MfG
Hudruf
ja weiss ich inzwischen und arbeite auch schon damit fleissig :D
(hat zwar ne weile gebraucht aber jetzt schnall ich dies voll und ganz)

ich mache gerade ein(mehre) script das ist voll von Array´s

kurz: ich fass mehre Objekt in eine Liste, die ich wieder abrufen kann mit nur einem Befehl (mal Laienhaft erklärt)

Deleted User

Post by Deleted User » Sun, 5. Feb 06, 20:19

langsam verstehe ich Ticaki...

[quote]Meine Erklärungen richten sich an Scripter mit einer gewissen Erfahrung, diese sollten dieses nachvollziehen können und sie anderen Nutzern mit weniger Erfahrung näher bringen[/quote]


Na gut...
äh wozu brauchst du überhaupt Multi arrays ?


MfG
Hudruf

topo14880
Posts: 107
Joined: Fri, 2. Dec 05, 21:48
x3

Post by topo14880 » Sun, 5. Feb 06, 21:07

hudruf wrote: äh wozu brauchst du überhaupt Multi arrays ?


MfG
Hudruf
weiss ich bis jetzt noch nicht :gruebel: (daher will ich es ja rausbekommen, für was es gut sein könnte)

ach ich muss noch was dazu sagen, ich habe seit einer Woche erst angefangen mit Scripten zu "spielen"

die Scripte, die ich bis jetzt gebastelt hatte funzen einwandfrei
(z.B. automatische Station Serial vergebung, hat mich bisher immer gestört, dass alle meine Fabriken alpha heissen.) :D

und wenn ich etwa nachvollziehen kann, für was Multi Arrays gut sind, tu ich mir vielleicht bei meinen Scripten leichter


Mfg topo14880

P.S. wird denn die Befehlslist auch mal auf den neusten Stand gebracht?

Deleted User

Post by Deleted User » Sun, 5. Feb 06, 21:10

Jo ich hab auch erst so ca. vor 2 Wochen angefange mit nem Mega-Script (dessen Alpha in ca. 3 Wochen fertig ist) aber man arbeitet sich schon ziemlich schnell ein. Ich hab die Multiarrays an dem Beispiel verstanden les es dir n paar mal durch. dann noch Ticakis tipps und du hasts verstanden.


MfG
Hudruf

topo14880
Posts: 107
Joined: Fri, 2. Dec 05, 21:48
x3

Post by topo14880 » Sun, 5. Feb 06, 21:14

hast du nicht vielleicht ein kleines beispiel von dir?
dann kann iches vergleichen und auch mal selbst probieren.

vorallem dieser Befehl würde mich noch interressieren

<RetVar>=get index of <Value>in array<Var/Array>offset = <Var/Number>+1
mir würde auch eine englische Beschreibung reichen, wenn es denn eine gibt

Deleted User

Post by Deleted User » Sun, 5. Feb 06, 21:27

na ja ehrlich gesagt ich weiss selber nicht wofür ich den Befehl brauchen könnte... irgendwie find ich ihn nutzlos... deswegen fällt mir auch kein Beispiel ein.


MfG
Hudruf

topo14880
Posts: 107
Joined: Fri, 2. Dec 05, 21:48
x3

Post by topo14880 » Sun, 5. Feb 06, 21:39

aso, ja das macht nix, wird sich schon zeigen für was der gut sein wird, werde einfach mal den anderen Threat noch beobachten

vorerst mal thx

Mfg topo14880

fennry
Posts: 1611
Joined: Wed, 6. Nov 02, 20:31
x3

Post by fennry » Mon, 6. Feb 06, 01:53

Code: Select all

Script aa.test
Version: 0
for Script Engine Version: 31

Description
Description
Arguments
1: station , Var/Station owned by Player , 'was soll verwaltet werden' 
Source Text

001   $ts.list.1 =  array alloc: size=0
002   $ts.list.tmp = $station -> get owned ships: class/type=Small Transport TS
003   if $ts.list.tmp
004    $counter1 =  size of array $ts.list.tmp
005    while $counter1 > 0
006     dec $counter1 = 
007     $ts1 = $ts.list.tmp[$counter1]
008     append $ts1 to array $ts.list.1
009    end
010   end
011   $ts.list =  array alloc: size=0
012   if $ts.list.1
013    $counter2 =  size of array $ts.list.1
014    while $counter2 > 0
015     dec $counter2 = 
016     $ts = $ts.list.1[$counter2]
017     $ts.id = $ts -> get ID code
018   * get dockingstation ?
019     $ts.space = $ts -> get cargo bay size
020     $cago.ist = $ts -> get true amount of ware Cargo bay extension in cargo bay
021     $cago.max = $ts -> get max amount of ware Cargo bay extension that can be stored in cargo bay
022     $ts.space.max = $cago.max - $cago.ist + $ts.space
023     $ts.free.space = $ts -> get free volume of cargo bay
024     $ts.tk = $ts -> get max. ware transport class
025     if $ts -> is docked
026      $ts.status = 'free'
027     else
028      $ts.status = 'busy'
029     end
030     $erw.info.ts =  array alloc: size=7
031     $erw.info.ts[0] = $ts.id
032     $erw.info.ts[1] = $ts.dockstat
033     $erw.info.ts[2] = $ts.space
034     $erw.info.ts[3] = $ts.space.max
035     $erw.info.ts[4] = $ts.free.space
036     $erw.info.ts[5] = $ts.tk
037     $erw.info.ts[6] = $ts.status
038     append $erw.info.ts to array $ts.list
039    end
040   end
041   return null
Wenn euch nichts einfällt weis ich was.

Array ist erstellt und füllt sich so wie angedacht. Meine Frage:
  • 1. wie bekomme ich die gespeicherten Infos wieder ans Tageslicht?
    2. wie kann ich Daten ersetzen? Also z.B. der 3. Frachter landet und verkauft eine Ware und ist ja nun frei etwas anderes zu tun. Wie bekomme ich das in das Array?
    3. geht es auch einfacher?
Ach ja und Zeile 18 finde ich keine Abfrage um die Dockingstat abzufragen hab ich da irgend einen Befehl übersehen?

ticaki
Posts: 4861
Joined: Wed, 6. Nov 02, 20:31
x3

Post by ticaki » Mon, 6. Feb 06, 10:43

Es gibt einen Befehl "is docked" dieser gibt NULL oder die Station/das Schiff zurück.

Nein es geht nicht leichter. Ersetzen kannst du die Daten in dem du einfach einen Arrayplatz mit einem neuen Array belegst oder auf NULL setzt.

Find index...

kann man wunderbar einsetzen um eine Datenbank mit Index zu erstellen. Dazu benötigen wir ein weiteres Array in dem der Index synchron zur Datenbank gespeichert ist. In diesem Suchen wir nun nach dem Wert und benutzen den Rückgabeindex um den korrekten Datensatz aus unserer Datenbank zu lesen.

Gruß ticaki

fennry
Posts: 1611
Joined: Wed, 6. Nov 02, 20:31
x3

Post by fennry » Mon, 6. Feb 06, 14:48

Danke für die schnelle Antwort!

Jetzt hab ich wieder ein bisschen was zum probieren mal sehen ob ich es hinbekomme.

topo14880
Posts: 107
Joined: Fri, 2. Dec 05, 21:48
x3

Post by topo14880 » Mon, 6. Feb 06, 16:59

@fennry

das ist aber kein Beispiel mit Multi Array
sondern nur mit ganz normalen Arrays
sowie dieses hier

Script AAAAgetserialchangename
Version: 0
for Script Engine Version: 30

Code: Select all

Description
Description
Arguments
1: sec , Var/Sector , 'secor' 
2: fabrik , Var/Station , 'reame' 
Source Text

001   $fabrikSn = $fabrik -> get serial name of station
002   $zaehler = 0
003   $Nr = 0
004   * get sizes of factory
005   $type =  array alloc: size=2
006   $type[0] = Argonen Agrarzentrum M
007   $type[1] = Argonen Agrarzentrum L
008   * get station serials
009   $Sn =  array alloc: size=24
010   $Sn[0] = alpha
011   $Sn[1] = beta
012   $Sn[2] = gamma
013   $Sn[3] = delta
014   $Sn[4] = epsilon
015   $Sn[5] = zeta
016   $Sn[6] = eta
017   $Sn[7] = theta
018   $Sn[8] = iota
019   $Sn[9] = kappa
020   $Sn[10] = lambda
021   $Sn[11] = my
022   $Sn[12] = ny
023   $Sn[13] = chi
024   $Sn[14] = omikron
025   $Sn[15] = pi
026   $Sn[16] = rho
027   $Sn[17] = sigma
028   $Sn[18] = tau
029   $Sn[19] = ypsilon
030   $Sn[20] = phi
031   $Sn[21] = chi
032   $Sn[22] = psi
033   $Sn[23] = omega
034   
035   * count serials
036   while $zaehler < 24
037    $Serial = $Sn[$Nr]
038    $b = $Sn[$Nr]
039   * end if Station serial the same as pointed station
040    if $fabrikSn == $b
041     goto label ende
042    end
043   * count typ of station
044    $NrSec = 0
045    $zaehlersec = 0
046    while $zaehlersec < 2
047     $Typ.of.fac = $type[$NrSec]
048   * find stations
049     $station =  find station in galaxy: startsector=$sec class or type=$Typ.of.fac race=null flags=null refobj=null serial=$Serial max.jumps=0
050     
051     $NrSec = $NrSec + 1
052     inc $zaehlersec = 
053     if $station
054      break
055     end
056    end
057   * check: If the Station serial free than rename
058    $a = $station -> get serial name of station
059    $b = $Sn[$Nr]
060    if $a != $b
061     $fabrik -> set serial name of station to $b
062     goto label ende
063    end
064    
065    $Nr = $Nr + 1
066    inc $zaehler = 
067   end
068   ende:
069   return null
ist zwar im Moment noch nur für das Agrarzentrum(bin noch am bastel)

dieses Script soll praktisch die Endung (alpha,beta,gamma...) der Stationen neuanordnen, auch die eigenen

mich hatte es immer gestört, dass meine Fab´s alle alpha heissen und nicht automatisch die Station Serial vergibt auch wenn bereits eine z.B. Argonen Fab des selben Typs bereits existiert.


so nun will ich wissen ob ich dafür ein Multi Array brauchen kann/was nützt?

damit meine ich ob die ganzen Fabriken(mit M, L, XL) unter einen Hut vereinfacht in ein Multi Array besser wäre

vor allem wird das Script ja riesig (wenn ich alle Stationen einbinde)
ansonsten werd ich wohl in den Sauren Apfel beissen müssen (dürfen :wink: )

Mfg topo14880

P.S. das Script ist noch nicht perfekt (bastel noch) aber für die Agrarzentren, so wie es hier ist funzt es einwandfrei.

fennry
Posts: 1611
Joined: Wed, 6. Nov 02, 20:31
x3

Post by fennry » Mon, 6. Feb 06, 23:55

Ich lege ^^damit^^ eine Schiffsdatenbank für eine Fab an ich glaub schon das das ein Multiarray ist.


Zu deinem

Wenn du es allgemeiner haben willst, suche nach einem Produkt.
Lese dann die maximale Lagermenge aus das bringt den Unterschied zwischen M und L

Pass auf das du bei der Suche nur deine eigenen Fabs filterst
(Zeile 49 bei dir race=null da must du unter selekt race deinen Spielername suchen)


edit
Hab inzwischen dein Topic gefunden und bin nun auch dahintergestiegen was du eigentlich vor hast. Damit erklärt sich dann auch der Sinn deines Scriptes. Daher hätte ich gleich noch einen Vorschlag :roll: Versuch doch mal den Firmennamen gleich mit reinzubringen und eventuell eine Lib daraus zu machen. Also bei der Namensgebung Firmenname/Fabname/serial zu berücksichtigen. So könnte man es eventuell später noch weiter nutzen falls sich hier nochmal was tut.
Schau doch mal bei StarTrekMarc vorbei er benennt die Schiffe um das könnte die als Anregung dienen.

topo14880
Posts: 107
Joined: Fri, 2. Dec 05, 21:48
x3

Post by topo14880 » Tue, 7. Feb 06, 16:52

fennry wrote:Ich lege ^^damit^^ eine Schiffsdatenbank für eine Fab an ich glaub schon das das ein Multiarray ist.


Zu deinem

Wenn du es allgemeiner haben willst, suche nach einem Produkt.
Lese dann die maximale Lagermenge aus das bringt den Unterschied zwischen M und L

Pass auf das du bei der Suche nur deine eigenen Fabs filterst
(Zeile 49 bei dir race=null da must du unter selekt race deinen Spielername suchen)
nein das war absicht, ich will ja nicht z.b. SKW L alpha (KI) und SKW M alpha (player), daher die null, es sollen alle gescannt werden.

das mit M und L (XL) hab ich auch gelöst, zwar nicht ganz elegant aber es funktioniert

Code: Select all

004   * get sizes of factory 
005   $type =  array alloc: size=2 
006   $type[0] = Argonen Agrarzentrum M 
007   $type[1] = Argonen Agrarzentrum L 
später wird diese Zeile einfach durchgezählt und verglichen

Mfg topo14880

Deleted User

Post by Deleted User » Thu, 9. Feb 06, 13:17

soviel Aufwand... du musst bedenken Topo das das ne menge rechenleistung erfordert...
Also ich habe n 3 Dimensionales array mit je ca. 7 werten un da rackert der schon n bisschen. Aber vielleicht weil er zu jedem Wert noch ne Rechnung machen muss...


MfG
Hudruf

topo14880
Posts: 107
Joined: Fri, 2. Dec 05, 21:48
x3

Post by topo14880 » Thu, 9. Feb 06, 15:03

hudruf wrote:soviel Aufwand... du musst bedenken Topo das das ne menge rechenleistung erfordert...
Also ich habe n 3 Dimensionales array mit je ca. 7 werten un da rackert der schon n bisschen. Aber vielleicht weil er zu jedem Wert noch ne Rechnung machen muss...


MfG
Hudruf
darf ich mal dein 3 Dim. Array mal sehen?

bei meinem Script, das ich gerade mache, merke ich es nicht mal, dass mein PC kurz rechnen muss (liegt vllt auch an 2GB Ram und 3500 Mhz CPU)

Mfg topo

Deleted User

Post by Deleted User » Thu, 9. Feb 06, 19:57

hab gerade bemerkt das ich n goto drinhab bis er n paar verschiedene werte ausrechnet d.h. er musste es ungefähr 10 mal durchlaufen lassen...

Hab inzwischen nähmlich bisschen rumprobiert... mit nem 3 dim. array mit 100 variablen, stürzt mein comp ab :D

MfG
Hudruf

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