Befehlserklärung von multi Arrays?
Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators
-
- Posts: 107
- Joined: Fri, 2. Dec 05, 21:48
Befehlserklärung von multi Arrays?
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
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
-
- Posts: 107
- Joined: Fri, 2. Dec 05, 21:48
den threat kenn ich schon, hab ihn auch schon x-mal durchgelesen.hudruf wrote:http://forum2.egosoft.com/viewtopic.php?t=125083
komm einfach nicht dahinter
-
- Posts: 107
- Joined: Fri, 2. Dec 05, 21:48
ja weiss ich inzwischen und arbeite auch schon damit fleissighudruf wrote:hehe so gings mir auch...
bringens wir dir mal Schrittweise bei:
also frage 1.
weisst du was ein Array ist ?
MfG
Hudruf
(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)
-
- Posts: 107
- Joined: Fri, 2. Dec 05, 21:48
weiss ich bis jetzt noch nicht (daher will ich es ja rausbekommen, für was es gut sein könnte)hudruf wrote: äh wozu brauchst du überhaupt Multi arrays ?
MfG
Hudruf
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.)
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?
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
MfG
Hudruf
-
- Posts: 107
- Joined: Fri, 2. Dec 05, 21:48
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
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
-
- Posts: 107
- Joined: Fri, 2. Dec 05, 21:48
-
- Posts: 1611
- Joined: Wed, 6. Nov 02, 20:31
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
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?
-
- Posts: 4861
- Joined: Wed, 6. Nov 02, 20:31
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
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
-
- Posts: 1611
- Joined: Wed, 6. Nov 02, 20:31
-
- Posts: 107
- Joined: Fri, 2. Dec 05, 21:48
@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
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 )
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.
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
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 )
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.
-
- Posts: 1611
- Joined: Wed, 6. Nov 02, 20:31
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 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.
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 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.
-
- Posts: 107
- Joined: Fri, 2. Dec 05, 21:48
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.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)
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
Mfg topo14880
-
- Posts: 107
- Joined: Fri, 2. Dec 05, 21:48
darf ich mal dein 3 Dim. Array mal sehen?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
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