Infos zum coderarray in script-dateien

Hier ist der ideale Ort um über Scripts und Mods für X²: Die Bedrohung zu diskutieren.

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

User avatar
Moonraven
Posts: 968
Joined: Wed, 27. Aug 03, 11:13
x3

Infos zum coderarray in script-dateien

Post by Moonraven »

Hi,

ein englishes posting brachte mich auf das Thema codearray, insbesondere hinsichtlich eines externen Scripteditors.

Also hab ich etwas rumprobiert und folgendes herausgefunden.

Jeder Eintrag im Coderarray hat die Attribute val und type, mit Ausnahme von Array-Definitionen (hier isses size und type). Je nach "Level" des Eintrages, hat der Eintrag eine bestimmte Bedeutung. Im folgendenden
mal das was ich rausgefunden haben:


Level 0: Nur ein Eintrag; er hat immer size 10 und type array. Wie bei
allen array-Einträgen ist size die Anzahl der Subeinträge.

Level 1: Allgemeine Einträge zum Script

Eintrag 01: val= Name des Scriptes type=string
Eintrag 02: val= Version der Scriptengine type= int
Eintrag 03: val=Beschreibung des Scripts type = string
Eintrag 04: val=Version des Scripts type = string
Eintrag 05: val=0 type int; val scheint auch ab und an 1 zu sein.
Zusammenhang noch ungeklärt.

Eintrag 06: Ein Array Eintrag für die Variablen die im Script
verwendet werden. size entspricht der Anzahl der
Variablen type ist natürlich array. Jeder Untereintrag in
diesem Array besteht aus dem Namen der Variable (val)
und string als type. Auch Scriptparameter müssen hier
eingetragen werden.

Eintrag 07: Array für den scriptcode selbst. size entspricht der Anzahl
der Zeilen des Scripts. Näheres dazu später in diesem
Beitrag :)

Einträge 08: Array-Eintrag für Parameter des Scriptes mit den
entsprechenden Untereinträgen. Für jeden
Scriptparameter existiert hier ein Array-Eintrag (jeweils
ein subeintrag für Datentyp und Beschreibung)


Einträge 09: Array-Eintrag für nicht benutzte Kommandos des
Interpreters (z.B. Kommentare, end usw....)
Für jedes nicht benutzte Kommando jeweils ein
Untereintrag für die Zeile in der das Kommando
eingefügt werden soll und den Typ des Kommandos.
Ausnahme ist der Kommentar, hier steht zusätzlich noch
ein Eintrag mit dem Kommentar selbst drinn.
Eintrag 10: Int oder String. Wenn gesetzt ist das der Eintrag der
Angezeigt wird, wenn das Script als Kommando in
einem Schiffsslot läuft.

So..jetzt ans Eingemachte. Der Eintrag 07 ist wie oben gesagt, ein array. Für jede Script-Zeile existiert hier ein Untereintrag. Jeder Untereintrag ist hier wieder ein Array-Eintrag. Das Attribut size ist dabei abhängig davon, welches Kommando benutzt wird und wieviele Parameter dieses Kommando hat. type ist natürlich wieder array. Die Untereinträge für jedes Kommando haben dabei folgende Bedeutung (soweit wie ich das bisher analysiert hab :) ):

1. Eintrag val=Nummer des Kommandos. Die Nummer entspricht dabei dem Eintrag des Kommandos in der Sprachdatei. Die könnt ihr ganz einfach rausfinden in dem ihr in der Sprachdatei 490001 in der Page 2003 nachschaut, welche ID das Kommando hat. Beispiel: Das Kommando INC hat die ID 142. also hat der 1. Eintrag für ein INC-Kommando val=142 type 0

Eintrag 2-n: Einträge für die Parameter. Für Variablen ist das die Nummer des Eintrages im oben beschriebenen Array für die Namen der Variablen (Achtung 0-basiert, d.h. der erste Eintrag trägt die Nummer 0) :) Type ist immer int.

Soweit meine Analyse. Ich hoffe das hilft, fals jemand einen externen Editor machen möchte. Sollte jemand weitere erkenntnisse haben bitte hier posten, damit das mal gesammelt erscheint :)

[Edit]
Ergänzungen aus dem Englischen Forum vorgenommen.
[/Edit]
Last edited by Moonraven on Fri, 26. Aug 05, 13:26, edited 1 time in total.
Gruß Moonraven
Wer lesen kann, ist ganz klar im Vorteil.
[ external image ]
User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike »

Laprican hat im englischen Forum einiges gerade gebügelt. ;)

http://www.egosoft.com/x2/forum/viewtopic.php?t=89990

Gruß
Lucike
Image
User avatar
Moonraven
Posts: 968
Joined: Wed, 27. Aug 03, 11:13
x3

Post by Moonraven »

Text um die Ergänzungen aus dem englischen Forum ergänzt.
Gruß Moonraven
Wer lesen kann, ist ganz klar im Vorteil.
[ external image ]
the-last-drageon
Posts: 17
Joined: Tue, 3. Aug 04, 10:20
x3

Post by the-last-drageon »

Ich hab einen Script gefunden, der als Eintrag 05 eine 2 hat. Falls jemand das Scriot will einfach den Goner-Mod herunterladen, diesen mit irgendwas entpacken und dort die Datei setup.goner.secrets.xml anschauen.
ist mir bei anderen Dateien nicht aufgefallen.

edit:
Die Dateien pirate.goner.ships.xml, randoom.goner.spawn.xml und die uninstall.old.goner.xml sind auch davon betroffen.
User avatar
SpaceTycoon
Posts: 1190
Joined: Wed, 6. Nov 02, 20:31
x4

Post by SpaceTycoon »

@Lucike:
Du hast doch sicher DevNet Level 5? Mir ist unbegreiflich, warum man da alles mühsam ausklabustern muß. Und nicht einfach BalaGi nach der Dokumentation seines In-Game Scripteditors fragt. Das sollte doch irgendwo dokumentiert sein, wie das Codearray aufgebaut ist/wird.
Kann ich schlecht verstehen, warum solche Informationen hinter dem Berg gehalten werden.
the-last-drageon
Posts: 17
Joined: Tue, 3. Aug 04, 10:20
x3

Post by the-last-drageon »

ich hab mir das jetzt angeschaut und herausgefunden, dass die Scripte mit der 2 alle eine find aufforderung enthalten.

Edit:
Die 2 wird zur korrekten Erkennung der Sektornamen benötigt
laprican
Posts: 196
Joined: Fri, 13. Feb 04, 16:56
x2

Post by laprican »

Inwiefern? Was zeig der Scripteditor denn an, wenn man die zwei zB durch ne null ersetzt?
User avatar
Moonraven
Posts: 968
Joined: Wed, 27. Aug 03, 11:13
x3

Post by Moonraven »

Welches Find haben sie den ?


Der Umkehrschluss, das alle scripte mit einem Find-Befehel eine 2 drinn haben ist es jedenfalls nicht :)
Gruß Moonraven
Wer lesen kann, ist ganz klar im Vorteil.
[ external image ]
the-last-drageon
Posts: 17
Joined: Tue, 3. Aug 04, 10:20
x3

Post by the-last-drageon »

nur die find Anweisungen die Sektornamen enthaltenund alle anderen Anweisungen die einen Sektornamen(also wirklich den Namen und nicht irgendein Argument)drin haben, bewirken die 2
Außerdem hat jemand ein Script oder mehrere, dass an besagter Stelle eine 1 hat?
Last edited by the-last-drageon on Sun, 28. Aug 05, 11:41, edited 2 times in total.
the-last-drageon
Posts: 17
Joined: Tue, 3. Aug 04, 10:20
x3

Post by the-last-drageon »

@laprican: Bei mir ist dann so ein komisches Readtext17-xxx erschienen oder er ist abgestürtzt
und bei ner 1 hat er den Skript nicht in die Liste aufgenommen oder das Spiel ist abgestürtzt
laprican
Posts: 196
Joined: Fri, 13. Feb 04, 16:56
x2

Post by laprican »

Ich hab eine allerdings weiß ich nicht mehr welche. was ich aber machen könnte, wäre ein tool schreiben welches ein verzeichniss, nach scripts absucht, welche dort keine 0 haben.
User avatar
SpaceTycoon
Posts: 1190
Joined: Wed, 6. Nov 02, 20:31
x4

Post by SpaceTycoon »

laprican wrote:Ich hab eine allerdings weiß ich nicht mehr welche. was ich aber machen könnte, wäre ein tool schreiben welches ein verzeichniss, nach scripts absucht, welche dort keine 0 haben.
Tool schreiben? :lol:

1. Windows-Explorer öffnen.
2. Rechte Maustaste auf einen Ordner, in dem entpackte Scripte (.xml) liegen.
3. Aus Kontextmenü "Suchen" wählen.
4. In Feld "Enthaltener Text" reinkopieren: <sval type="int" val="1" /><sval type="array"
5. Auf Button "Jetzt suchen" klicken
6. Freuen

7. Zur Suche nach Wert 0 oder 2 einfach oben die "1" des Suchbegriffes entsprechend ändern.
laprican
Posts: 196
Joined: Fri, 13. Feb 04, 16:56
x2

Post by laprican »

@SpaceTycoon
hm... das ist natürlich auch eine möglichkeit :D

so ich hab jetzt etwas mit dem 5ten Wert rumgespielt und es sieht so als wenn nur die ersten 2 bits wichtig sind.
wenn bit 1 und bit 2 null sind wird das script geladen, aber Sektornamen werden als "CLASS<nen paar nummern>" dagestellt.
wenn bit 1 eins ist wird das script gar nucht geladen
wenn bit 2 eins und bit 1 zwei 0 ist, wird das script geladen und die Sektornamen werden auch richtig dargestellt
the-last-drageon
Posts: 17
Joined: Tue, 3. Aug 04, 10:20
x3

Post by the-last-drageon »

@laprican
was meinst du genau mit Bit 1 und 2?
normalerweise ist der 5te Eintrag bloß einstellig
User avatar
SpaceTycoon
Posts: 1190
Joined: Wed, 6. Nov 02, 20:31
x4

Post by SpaceTycoon »

the-last-drageon wrote:@laprican
was meinst du genau mit Bit 1 und 2?
normalerweise ist der 5te Eintrag bloß einstellig
Die Dezimalzahlen könnten in Wirklichkeit durchaus DoubleWord sein, also 32-Bit lange Zahlen. Die im Codearray nur ins Dezimalformat umgerechnet dargestellt werden. Das heißt, eine Zahl "1" wäre in Wirklichkeit ein 32-Bit langes Bitmuster: 00000000-00000000-00000000-00000001
Darauf deutet hin, daß man in codearrays auch solche Werte findet: val="-1610612733"
Und nicht die Dezimalzahl an sich, sondern jedes einzelne Bit kann eine bestimmte Bedeutung haben.
Insofern steht im Codearray zwar "2", aber maßgebend ist in Wirklichkeit das zweite gesetzte Bit: 00000000-00000000-00000000-00000010

Anders gesagt, für eine bestimmte Funktionalität zählt vielleicht nicht der Dezimalwert einer Zahl, sondern das dahintersteckende Bitmuster in Binärer Schreibweise.
Wenn nur die ersten beiden Bit verwendet werden, würde das bedeuten, daß die Dezimalzahl die dort steht, ziemlich egal ist. Zumindest solange in der Umrechnung dieser Dezimalzahl das erste Bit "0" und das zweite Bit "1" wäre, würde es funktionieren. Also 00000010 bringt dieselbe Funktionalität wie 00001010, das erstere ist jedoch dezimal "2" und das zweite dezimal "10".
the-last-drageon
Posts: 17
Joined: Tue, 3. Aug 04, 10:20
x3

Post by the-last-drageon »

Ich hab noch einen ziemlich große negative Zahl gefunden:
-2147483647

so wie es aussieht bedeutet diese Zahl =
aber im Sinn "kein Wert" (im Internen Editor <no value> oder so was)
die Zahl steckt mal wieder im setup.goner.Secrets Skript.
User avatar
Moonraven
Posts: 968
Joined: Wed, 27. Aug 03, 11:13
x3

Post by Moonraven »

Soweit das inzwischen rausgefunden wurde ist es wohl so, das dieser Wert etwas mit dem Laden und Ausführen des Scriptes zu tun hat.

So ist es so, wenn z.B. im Script direkt ein Sektorname verwendet wird, so steht gesichert eine 2 an dieser stelle.

Eine 1 scheint das Script in eine Art Debug-Modus zu schalten, da man wohl statt der Namen (Sektornamen) die entsprechende Read-Textnummer sieht.
Gruß Moonraven
Wer lesen kann, ist ganz klar im Vorteil.
[ external image ]
the-last-drageon
Posts: 17
Joined: Tue, 3. Aug 04, 10:20
x3

Post by the-last-drageon »

Wenn das mit dem Debugmodus stimmt, dann ist es die 0 bei der 1 wird das Skript nicht geladen

@laprican
ist es auch bei dem Skript das Standartmäßig eine 1 an der Stelle hat, dass es nicht geladen wird? :?:
Falls du den Skript findest schreibst du bitte hier rein um welchen Skript es sich ahndelt. :gruebel:
laprican
Posts: 196
Joined: Fri, 13. Feb 04, 16:56
x2

Post by laprican »

Moonraven wrote: Eine 1 scheint das Script in eine Art Debug-Modus zu schalten, da man wohl statt der Namen (Sektornamen) die entsprechende Read-Textnummer sieht.
hm... wo hast du das denn her? bei ner 1 werden die scripte bei mir gar nich geladen.

@the-last-drageon
Es gab wohl kein Script mit ner 1, war wohl auch ne 2.
Und auch 0 ist kein Debugmodus, da das bei den meißten Scripten so ist.
User avatar
Moonraven
Posts: 968
Joined: Wed, 27. Aug 03, 11:13
x3

Post by Moonraven »

Aus dem englischen Forum. Kann auch sein das ich da was missverstanden hab :)
Gruß Moonraven
Wer lesen kann, ist ganz klar im Vorteil.
[ external image ]

Return to “X²: Die Bedrohung - Scripts und Modding”