Suche X3 TC/AP Script/Mod Blaupausen Sync für mehrere HQ

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

Charles Monroe
Posts: 1598
Joined: Fri, 7. Apr 06, 14:47
x3tc

Post by Charles Monroe »

Saetan wrote:Synchronisierung aller HQ's?

Aufwändig, aber nicht unmöglich ... rein aus meiner Überlegung:

Man scripte sich einen eigenen "Baue HQ"-Befehl.


Dieser liest aus dem bestehenden HQ, wenn vorhanden, alle Blaupausen aus und speichert diese in einem Array.

Das neue HQ wird errichtet.

Das Blaupausen Array wird dem neuen HQ hinzugefügt.
Also ich hab schon Probleme dabei, das Blaupausen-Array aus nur einem bzw. dem eigentlichen HQ zu bekommen, ansonsten hätte ich mir das so gedacht:

-Man erstellt sich ein Array aller seiner gebauten HQs in einem Setup-Script.
-Man besorgt sich von jedem dieser HQs das Blaupausen-Array, fügt diese zusammen (darauf achten, dass dabei keine doppelten Einträge entstehen) und fügt dieses Array allen ermittelten HQs zu.
-Beim Bau neuer HQs fügt man dem dieses Array hinzu und das HQ selbst zu der Liste der HQs.
-Neue Blaupausen könnten so allen HQs hinzugefügt werden.

Leider scheint mir das mit dem Blaupausen-Array nicht so trivial zu sein, ich zumindest sehe da keinen Script-Befehl für. Das einzige was bliebe, wäre es ein Array aller vorhandenen Schiffstypen in dem Universum zu erstellen und dann alle einzeln abfragen, ob sie dem HQ bekannt sind. dann erhält man ein Array, dessen Inhalt man mit add blueprints to player HQ hinzufügen kann. nur wie man dieses Array den anderen HQs hinzufügt, entzieht sich meiner Kenntnis, ich skripte halt nicht allzu oft.
Du weisst, dass du X angefangen hast, wenn du in der Flugschule den Autopiloten benutzt und der Fluglehrer dich fragt, wo du hin willst.
Guest

Post by Guest »

Charles Monroe wrote:
Saetan wrote:Synchronisierung aller HQ's?

Aufwändig, aber nicht unmöglich ... rein aus meiner Überlegung:

Man scripte sich einen eigenen "Baue HQ"-Befehl.


Dieser liest aus dem bestehenden HQ, wenn vorhanden, alle Blaupausen aus und speichert diese in einem Array.

Das neue HQ wird errichtet.

Das Blaupausen Array wird dem neuen HQ hinzugefügt.

Also ich hab schon Probleme dabei, das Blaupausen-Array aus nur einem bzw. dem eigentlichen HQ zu bekommen, ansonsten hätte ich mir das so gedacht:

-Man erstellt sich ein Array aller seiner gebauten HQs in einem Setup-Script.
-Man besorgt sich von jedem dieser HQs das Blaupausen-Array, fügt diese zusammen (darauf achten, dass dabei keine doppelten Einträge entstehen) und fügt dieses Array allen ermittelten HQs zu.
-Beim Bau neuer HQs fügt man dem dieses Array hinzu und das HQ selbst zu der Liste der HQs.
-Neue Blaupausen könnten so allen HQs hinzugefügt werden.

Leider scheint mir das mit dem Blaupausen-Array nicht so trivial zu sein, ich zumindest sehe da keinen Script-Befehl für. Das einzige was bliebe, wäre es ein Array aller vorhandenen Schiffstypen in dem Universum zu erstellen und dann alle einzeln abfragen, ob sie dem HQ bekannt sind. dann erhält man ein Array, dessen Inhalt man mit add blueprints to player HQ hinzufügen kann. nur wie man dieses Array den anderen HQs hinzufügt, entzieht sich meiner Kenntnis, ich skripte halt nicht allzu oft.

... um mal etwas "licht" ins "dunkel" zu bringen:
=> blaupausen-sync = unmöglich

begründung:
... angenommen, ich hab´ ´n altes HQ und ´n neues
... es gibt nur 2 befehle bzgl. HQ & blaupausen: (sowohl im script editor als auch im mission director)
1. hat NEUSTES HQ (!!!) blaupause für schiffstyp "xyz"
2. füge NEUSTEM HQ (!!!) blaupause für folgenden schiffstyp hinzu: "xyz"

... angenommen, man zerlegt im neuen HQ irgendein schiff, um die blaupause zu erhalten (beim neuen HQ)
=> mit welchem befehl soll das alte HQ upgedatet werden ??

... aus dem grund ist´s nicht möglich, man kann höchstens alle bereits vorhandenen blaupausen auf´s neue HQ übertragen
(also diejenigen, die man zuvor in ´nem array gesaved + regelmäßig geupdatet hatte, das geht relativ einfach, z.B. AL-Plugin mit timer-event 1minute ...)
Charles Monroe
Posts: 1598
Joined: Fri, 7. Apr 06, 14:47
x3tc

Post by Charles Monroe »

[ironie]Hübsch durchdachte scriptengine...[/ironie] :(

Ok, dann eben anders... kommt man evtl. an ein Array der namen von lokalen Variablen eines Objektes? Wär ja immerhin denkbar, dass innerhalb eines HQs die Blueprints als Array existieren. Andernfalls kann ich mir nicht vorstellen, wo die HQs ihre individuellen Blaupausen speichern.

Hab da nämlich getestet... Den Bauplan erhält genau das HQ, in welchem ein Schiff zerlegt wurde und nicht im zuletzt gebauten. Wo gekaufte Pläne landen, kein Plan... ich kauf mir die ja nicht.
Du weisst, dass du X angefangen hast, wenn du in der Flugschule den Autopiloten benutzt und der Fluglehrer dich fragt, wo du hin willst.
User avatar
ubuntufreakdragon
Posts: 5226
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon »

Hmmm hab hier n paar Tools die den Hardcode von X3 decompilieren können, wenn du willst kannst du ja nachschauen.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
Charles Monroe
Posts: 1598
Joined: Fri, 7. Apr 06, 14:47
x3tc

Post by Charles Monroe »

ubuntufreakdragon wrote:Hmmm hab hier n paar Tools die den Hardcode von X3 decompilieren können, wenn du willst kannst du ja nachschauen.
Ich hab' nur eines und das langt... heisst IDA-Pro. ;)
Aber das ist wahrhaftig nicht Sinn der Sache.

Eine Möglichkeit hätte ich ja gehabt, wenn "get all local variable keys" mit "starting with = null" auch alle "local variable keys" zurückgeben würde, aber das macht es anscheinend nicht. Darüber hinaus gibt es noch nicht mal irgendwo eine Erklärung, wie das Kommando überhaupt funktioniert, nicht mal im offiziellen PDF.
Du weisst, dass du X angefangen hast, wenn du in der Flugschule den Autopiloten benutzt und der Fluglehrer dich fragt, wo du hin willst.
User avatar
ubuntufreakdragon
Posts: 5226
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon »

je nach implementierung ist null n schlechter startwert, mal "a" oder so probiert?
Ich denke aber mal, das es nee Eigenschaft der HQKlasse ist, hätten sie doch nur n static davor geklatscht.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
Guest

Post by Guest »

Charles Monroe wrote:Ich hab' nur eines und das langt... heisst IDA-Pro. ;)
Aber das ist wahrhaftig nicht Sinn der Sache.
... was ´n los, ihr quellcode-bastler !! :D
... frage von ´nem ahungslosen: könntet ihr tatsächlich neue funzende befehle erstellen ?? **wär-mal-interessant**

Charles Monroe wrote:Eine Möglichkeit hätte ich ja gehabt, wenn "get all local variable keys" mit "starting with = null" auch alle "local variable keys" zurückgeben würde, aber das macht es anscheinend nicht. Darüber hinaus gibt es noch nicht mal irgendwo eine Erklärung, wie das Kommando überhaupt funktioniert, nicht mal im offiziellen PDF.
... da hilft nur eins: bei den script-göttern um hilfe bitten // oder deren scripts auseinandernehmmen :D:thumb_up:
... da gibt´s z.B. sooo ´ne methode, nennt sich "Lucike-methode" ;)

Code: Select all

001   
002   $String = ' '
003   $String = get substring of $String offset=0 length=0
004   
005   $Object = [PLAYERSHIP]
006   
007   *$Object ->set local variable: name='test.1' value=77
008   *$Object ->set local variable: name='test_2' value='f**king XR'
009   
010   $Array.Local.Var = $Object -> get all local variable keys, starting with=$String
011   
012   write to player logbook $Array.Local.Var
013   
014   return null
... also einfach ein substring mit länge 0 erstellen ;)
User avatar
ubuntufreakdragon
Posts: 5226
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon »

Code: Select all

;
; === AddBlueprints =============================================
; function  HQ.AddBlueprints(arg1, arg2);
;
HQ.AddBlueprints:
           enter      2, 6
           push       SP[4] ; arg2
           push       SP[4] ; arg1
           push       3
           push       3
           read       HQ.var_2046_1 ; [55d ; 37h]
           read       HQ.var_2046_0 ; [54d ; 36h]
           get_from_array
           get_from_array
           get_from_array
           push       3
           call88     HQ.GetFactorValue
           if SP[0]=0 then jump L000A5C47
           push       SP[4] ; arg2
           push       SP[4] ; arg1
           push       2
           call88     HQ.HasBlueprints
           if SP[0]=0 then push 1 else push 0
           if SP[0]=0 then jump L000A5C47
           push       1
           jump       L000A5C48

L000A5C47: push       0
L000A5C48: if SP[0]=0 then jump L000A5C66
           push       SP[3] ; arg1
           pushb      16d ; 10h
           shl        SP[1],SP[0]
           push       SP[5] ; arg2
           or         SP[0],SP[1]
           push       SP[4] ; arg1
           pushb      16d ; 10h
           shl        SP[1],SP[0]
           push       SP[6] ; arg2
           or         SP[0],SP[1]
           read       HQ.var_2046_4 ; [58d ; 3Ah]
           put_to_array
           pop
L000A5C66: push       0
           ret
Viel Spaß
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
Charles Monroe
Posts: 1598
Joined: Fri, 7. Apr 06, 14:47
x3tc

Post by Charles Monroe »

ubuntufreakdragon wrote:je nach implementierung ist null n schlechter startwert, mal "a" oder so probiert?
Ich denke aber mal, das es nee Eigenschaft der HQKlasse ist, hätten sie doch nur n static davor geklatscht.
Ja, schon probiert, aber noch nicht alle Buchstaben oder Zahlen.

Bei "static" hätte man ein solches Problem natürlich nicht, allerdings auch nicht mehr die Möglichkeit gehabt, mehrere HQs mit verschiedenen Bauplänen auszustatten, wenn man das wollte.

Edit: Also am HardCode frickel ich dazu sicher nicht rum. Das mit dem Leerstring teste ich mal. Theoretisch könnte man das machen, wenn man zum Decompiler auch noch den passenden Compiler hat. Ich verwende solche Dinger nur, wenn ich unbedingt herausfinden will, wie das ein oder andere Feature einer Anwendung funktioniert (so habe ich z.B. auch erfahren, dass die X-Signaturen RSA2048 verschlüsselte MD5 Hashes sind). Meistens genügt mir dazu aber bereits ein Java-Decompiler.
Du weisst, dass du X angefangen hast, wenn du in der Flugschule den Autopiloten benutzt und der Fluglehrer dich fragt, wo du hin willst.
Guest

Post by Guest »

... versteh´ grad´ nicht, worum´s geht:
--> scriptbefehl: get all local variables oder ...
--> quellcode-zeugs

... ?? :?

... der script-befehl funzt jedenfalls korrekt, sobald man ´nen string als input eingibt, bei ´nem leeren string werden alle lokalen (bzw. globalen beim entspr. anderen befehl) per array ausgegeben
Charles Monroe
Posts: 1598
Joined: Fri, 7. Apr 06, 14:47
x3tc

Post by Charles Monroe »

Das bedeutet also, dass das HQ nur eine lokale Variable hat und das sind nichtmal die Blaupausen. :(

Naja... vllt. stehen die Blaupausen-Arrays der HQs ja such in einer der ca. 500 globalen Variablen, aber ich denke mal nicht.

Das mit dem Assembler-Quellcode vergiss mal. Wenn ich schon bastele, dann auf jeden Fall etwas, das prinzipiell jeder verwenden kann und deswegen brauch ich am Hardcode auch nicht rumpfuschen.
Du weisst, dass du X angefangen hast, wenn du in der Flugschule den Autopiloten benutzt und der Fluglehrer dich fragt, wo du hin willst.
User avatar
ubuntufreakdragon
Posts: 5226
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon »

Es ist einfacher die HQfunktion im SE komplett neu zu schreiben als an sowas zu basteln.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
Guest

Post by Guest »

@ charly:

... vergessen kannst du auch, etwas gegen den hardcode per script editor zu tun :D // wie gesagt => unmöglich
... die blaupausen sind nicht über´n SE geregelt, d.h. du wirst keine lokalen variablen auf´m HQ finden !!

@ ubuntu:

... kannst mir mal erklären, wie ich meinen quellcode ändern kann ??
// welche tools zum dekompilieren ?? ist das ergebnis = c++ oder nur "hieroglyphen-artig" lesbar ?? re-kompilierbarkeit ?? **ambestenneuestopic/pn**
User avatar
ubuntufreakdragon
Posts: 5226
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon »

@JSDD, naja decompilieren führt zu Assembler, das dann in c++ zu überführen ist recht kompliziert, es gibt aber Lösungen, zumindest teuere.

Achja Assembler ist mehr als nur "hyroglyphenartig".

Ich denke mal, die Blaupausen, sind ein Klassenattribut der HQKlasse, und sowas findet man nicht per SE, wenn ich aber den c++ sourcecode hätte, wäre das ganze super simpel, ein einziges Wort "static" an der richtigen stelle sollte die blaupausen ganz von alleine syncronisieren.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
Charles Monroe
Posts: 1598
Joined: Fri, 7. Apr 06, 14:47
x3tc

Post by Charles Monroe »

ubuntufreakdragon wrote:@JSDD, naja decompilieren führt zu Assembler, das dann in c++ zu überführen ist recht kompliziert, es gibt aber Lösungen, zumindest teuere.

Achja Assembler ist mehr als nur "hyroglyphenartig".

Ich denke mal, die Blaupausen, sind ein Klassenattribut der HQKlasse, und sowas findet man nicht per SE, wenn ich aber den c++ sourcecode hätte, wäre das ganze super simpel, ein einziges Wort "static" an der richtigen stelle sollte die blaupausen ganz von alleine syncronisieren.
Also Assembler lässt sich mit viel Phantasie in jede andere Sprache überführen, ebenso wie dekompiliertes Java.
Wie weiter oben schon gesagt, würde das "static"-Attribut an der richtigen Stelle aber dazu führen, dass alle HQs anfangs die selben Schiffe produzieren, ergo gäbe es keine Unterschiede mehr zwischen terranischen, argonischen usw. Aber da kann man beim Kauf eines solchen ja immer noch verschiedene Baupläne hinzufügen, nur wenn dann doch einer seine HQs nicht synchronisiert haben will, wirds schwierig.

Mal was anderes... wo steht eigentlich, welche Schiffe sich zerlegen (demontieren) lassen und welche nicht. Hatte immer angenommen, dass wär beim Xperimental aus der Schatzsuche hardgecodet, nun habe ich aber eine Korvette hier, die sich auch nicht demontieren lässt.
Du weisst, dass du X angefangen hast, wenn du in der Flugschule den Autopiloten benutzt und der Fluglehrer dich fragt, wo du hin willst.
User avatar
ubuntufreakdragon
Posts: 5226
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon »

nicht demontierbar wird meist per id z.b. Khaakkorvette SS_SH_K_M6 gehardcoded zum testen ändere es mal in SS_SH_K_M6a, aber achtung dadurch findet der MD dat teil nit mehr wieder.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist

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