[TC] Hilfe bei Scripts für eine realistische Wirtschaft

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

User avatar
JSDD
Posts: 1379
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD »

rudi1095 wrote:Danke !
Durchsuchen hat nichts gebracht, allerdings war der Dateipfad genau der gleiche.
... dacht´ ich mir ;) ... hab´ anfangs auch nicht den 2. install-ordner gefunden
// ist nämlich versteckt

rudi1095 wrote:Zu den Stationen weißt du aber nichts ? Ich hätte vermutet, dass man die Fabriken in eine GOD-Liste oder ähnliches eintragen muss. Oder reicht es, einfach die Stationen mit dem GalaxieEditor hinzuzufügen ?
... zu aller erst: vorsicht !! du steigst gerade in die tiefsten tiefen des modding ein => da kommt man nicht sooo schnell wieder raus :roll:
... was GOD betrifft: "den" kenn´ ich nich´ ^^ **spaß-beiseite**
wenn ich die geschichte richtig verstanden hab´, gibt´s sowas wie ´ne GOD-liste nicht, das *dings* heißt "map", genauer: cat.xy\maps\x3_universe.xml
... das ist die universumskarte, genauer: die standard-gamestart-universumskarte, dort wird festgelegt, wie das x-uni zu spielbeginn "aussieht"
... dort sind auch sogenannte "sekundäre" (rot-markierte) bauplätze für GANZ BESTIMMTE STATIONEN, d.h. ist auf der map ´ne cahoona-fab angelegt, dann wird GOD BEI BEDARF da auch ´ne cahoona-fab hinbauen (& nix anderes)

how to:
--> extrahiere cat.xy\maps\x3_universe.xml auf´s desktop
--> erstelle im gerade gefundenen "sekundären" install-ordner ´nen ordner namens "maps"
--> schieb´ die extrahierte, auf dem desktop liegende "x3_universe.xml" nach "maps"

... so, nun biste start-bereit:
--> starte irgendein game / lade irgendein save
--> spielername in "Makeanapplepiefromscratch" umbenennen
--> spiel beenden
--> nun solltest du dort, wo du neue games anfangen kannst, ´nen neuen menü-punkt namens "Galaxy Editor" haben => draufklicken
--> X3 Universe anklicken

... jetzt kannst du die zu beginn angesprochene gamestart-universumskarte bearbeiten
--> "speichern" geht über "exportieren" (& zwar OHNE Schiffskommandos !!!)

... platzierst du ´ne station in der map, dann ist sie zu spielbeginn auch vorhanden
... willst du diese station aber nur als "Platzhalter" (für GOD, damit "er/sie" bei bedarf die fab bauen kann) deklarieren, dann musst du diese station anklicken & auf bei geöffneter sektorkarte "p" drücken (=> dann erscheint die fab rot auf der sektorkarte)

wenn du weißt, was "waretemplate.xml" für ´ne datei ist, brauch´ ich dazu nix mehr sagen, anderenfalls:
--> da werden die zu produzierende & zu verbrauchende warentypen für stationstypen deklariert
--> sofern nicht über \maps\x3_universe.xml deklariert, werden warentypen von waretemplate übernommen
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele
rudi1095
Posts: 18
Joined: Sat, 18. Aug 12, 21:24

Post by rudi1095 »

Wegen den Platzhaltern.....
Muss ich die bauen oder sucht GOD sich auch eigene Plätze, falls kein vorgegebener Platz in der Nähe ist ?

Vielen Dank für die ausführliche Anleitung. Grob kannte ich mich mit dem Galaxieeditor zwar schon aus, aber besser etwas mehr erklären als zu wenig :wink:
User avatar
JSDD
Posts: 1379
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD »

rudi1095 wrote:Wegen den Platzhaltern.....
Muss ich die bauen oder sucht GOD sich auch eigene Plätze, falls kein vorgegebener Platz in der Nähe ist ?
... yepp, musst sie (im GalaxyEditor) bauen, danach (wie gesagt) kannst du sie als "platzhalter" deklarieren (anklicken + "p"-taste im sektormenü)
... afaik war´s das schon, GOD sucht sich (soweit mir bekannt) keine eigenen plätze zum bauen
// ist auch egal, denn wenn du deine fab zum verkauf an ´ner werft anbieten lässt, wird es baumissionen für solche fabs geben ;)
// stichwort baumissis: bei mir gibt´s (in X3TC) solche auch im terranerraum ;) (hab deren werften mit fabs bestückt & missionscode geändert ^^)
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele
rudi1095
Posts: 18
Joined: Sat, 18. Aug 12, 21:24

Post by rudi1095 »

Wenn GOD sich keine eigenen Plätze sucht, warum gibt es dann in der Standartkarte nur rund ein Dutzend "roter" Fabriken :?
Ich bin grade dabei meine Stationen im Universum zu verteilen, was erstaunlich lange dauern kann :o
User avatar
JSDD
Posts: 1379
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD »

rudi1095 wrote:Wenn GOD sich keine eigenen Plätze sucht, warum gibt es dann in der Standartkarte nur rund ein Dutzend "roter" Fabriken :?
... damit, falls GOD es für angemessen hält, einige fabs neu gebaut werden können ;)

rudi1095 wrote:Ich bin grade dabei meine Stationen im Universum zu verteilen, was erstaunlich lange dauern kann :o
... nutz´ einfach den im GE-menü enthaltenen befehl zum station bauen, positionieren kannst du im nachhinein mit den pfeiltasten auf dem nummernblock ;)
... zum sektoren-wechseln kannst du die "g"-taste auf der universumskarte nutzen
// alternativ: mini-script schreiben, welches den job erledigt
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele
User avatar
ubuntufreakdragon
Posts: 5226
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon »

nur rund ein Dutzend "roter" Fabriken
Weil ES die Sachen nie zuende bringt :roll: .
Und sie sich keine volle Dynamik zutrauen.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
rudi1095
Posts: 18
Joined: Sat, 18. Aug 12, 21:24

Post by rudi1095 »

// alternativ: mini-script schreiben, welches den job erledigt
Geht ja schlecht, da GOD die Stationen sonst ignoriert. Oder meinst du im Galaxieeditor per Script editor die Stationen bauen ? Funktioniert es dann auch noch ?[/quote]
User avatar
JSDD
Posts: 1379
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD »

rudi1095 wrote:Oder meinst du im Galaxieeditor per Script editor die Stationen bauen ? Funktioniert es dann auch noch ?
... yepp, genauso mein´ ich´s ;)
... wenn du wissen willst, wie ich meine asteroidenfelder in meine neuen sektoren verteile: (gaaanz bestimmt nicht von hand :D)

script 1 zum erstellen von felder

Code: Select all

001   
002   $sec = [PLAYERSHIP] -> get sector
003   $sec.size = $sec -> get size of object
004   $sec.size = get maximum, $sec.size, 20000, null, null, null
005   
006   $x.max = $sec.size
007   $y.max = 15000
008   $z.max = $sec.size
009   
010   $x.min = $x.max * -1
011   $y.min = $y.max * -1
012   $z.min = $z.max * -1
013   
014   $no.of.roids = 12 // HIER DIE ANZAHL DER ASTEROIDEN EINGEBEN
015   
016   $yield.min = 10
017   $yield.max = 50
018   
019   $distance.between.roids = 9000
020   $pos = array alloc: size=3
021   
022   while $no.of.roids > 0
023   |
024 @ |= wait 50 ms
025   |
026   |$x = random value from $x.min to $x.max - 1
027   |$y = random value from $y.min to $y.max - 1
028   |$z = random value from $z.min to $z.max - 1
029   |
030   |$pos[0] = $x
031   |$pos[1] = $y
032   |$pos[2] = $z
033   |
034   |$roid = find asteroid: sector=$sec resourcetype=null min.yield=null flags=null refobj=null maxdist=$distance.between.roids maxnum=null refpos=$pos
035   |skip if not $roid -> exists
036   ||continue
037   |
038   |$yield = random value from $yield.min to $yield.max - 1
039   |
040   |$random = random value from 1 to 101 - 1
041   |if $random < 55
042   ||$resource = Ore
043   |else if $random < 95
044   ||$resource = Silicon Wafers
045   |else if $random < 98
046   ||$resource = Nividium
047   |else
048   ||$resource = Ice
049   |end
050   |
051 @ |$roid = [THIS] -> call script 'JSDD.Lib.Create.Asteroid' :  Sector=$sec  Position X=$x  Position Y=$y  Position Z=$z  Resource=$resource  Yield=$yield
052   |
053   |skip if not $roid -> exists
054   ||dec $no.of.roids = 
055   |
056   end
057   
058   play sample 1008
059   
060   return null
061   
script 2 (meine eigene kleine lib zum fehlerfreien erstellen von asteroiden)

Code: Select all

Script JSDD.Lib.Create.Asteroid
Version: 1
for Script Engine Version: 45
Description
--- create asteroid ---
Arguments

    1: Sector , Var/Sector , 'Sector'
    2: Pos.X , Var/Number , 'Position X'
    3: Pos.Y , Var/Number , 'Position Y'
    4: Pos.Z , Var/Number , 'Position Z'
    5: Resource , Var/Ware , 'Resource'
    6: Yield , Var/Number , 'Yield'

Source Text

001   
002   skip if is datatype[ $Sector ] == DATATYPE_SECTOR
003   |goto label Error
004   skip if is datatype[ $Pos.X ] == DATATYPE_INT
005   |goto label Error
006   skip if is datatype[ $Pos.Y ] == DATATYPE_INT
007   |goto label Error
008   skip if is datatype[ $Pos.Z ] == DATATYPE_INT
009   |goto label Error
010   skip if is datatype[ $Resource ] == DATATYPE_WARE
011   |goto label Error
012   skip if is datatype[ $Yield ] == DATATYPE_INT
013   |goto label Error
014   
015   skip if $Sector -> exists
016   |goto label Error
017   
018   $Is.Mineral = get maintype of ware $Resource
019   $Is.Mineral = $Is.Mineral == [SSTYPE_W_MINERALS]
020   skip if $Is.Mineral
021   |goto label Error
022   
023   skip if $Yield > 0
024   |goto label Error
025   
026   $Type = random value from 0 to 2 - 1
027   $Resource = get subtype of ware $Resource
028   $Asteroid = create asteroid: type=$Type addto=$Sector resource=$Resource yield=$Yield x=$Pos.X y=$Pos.Y z=$Pos.Z
029   
030   if $Asteroid -> exists
031   |$Rot.A = random value from 0 to 65535 - 1
032   |$Rot.B = random value from 0 to 65535 - 1
033   |$Rot.C = random value from 0 to 65535 - 1
034   |$Asteroid ->set rotation: alpha=$Rot.A beta=$Rot.B gamma=$Rot.C
035   end
036   
037   return $Asteroid
038   
039   
040   Error:
041   
042   $Error.Message = get script name
043   $Error.Message = '... ' + $Error.Message + ' ... ERROR: wrong arguments !'
044   send incoming message $Error.Message to player: display it=[TRUE]
045   
046   return null
047   
... oder ´n anderes beispiel um im GE neue sektoren mit sprungtore verbinden:

Code: Select all

Script JSDD.Lib.Connect.Sectors.Gates
Version: 1
for Script Engine Version: 45
Description
--- create connected gates ---
Arguments

    1: A.Sector , Var/Sector , 'Sector A'
    2: A.Position.X , Var/Number , 'Position X in Sector A'
    3: A.Position.Y , Var/Number , 'Position Y in Sector A'
    4: A.Position.Z , Var/Number , 'Position Z in Sector A'
    5: A.Gate.Type , Var/Number , 'Gate Type in Sector A'
    6: B.Sector , Var/Sector , 'Sector B'
    7: B.Position.X , Var/Number , 'Position X in Sector B'
    8: B.Position.Y , Var/Number , 'Position Y in Sector B'
    9: B.Position.Z , Var/Number , 'Position Z in Sector B'
    10: B.Gate.Type , Var/Number , 'Gate Type in Sector B'

Source Text

001   
002   * gate types ... Maintype = 18
003   * --------------------------------------------------------------------------------
004   * Subtype 0:  NORTH GATE 
005   * Subtype 1:  SOUTH GATE 
006   * Subtype 2:  WEST GATE 
007   * Subtype 3:  EAST GATE 
008   
009   * Subtype 5:  NORTH TRANSORBITAL ACCELERATOR
010   * Subtype 6:  SOUTH TRANSORBITAL ACCELERATOR
011   * Subtype 7:  WEST TRANSORBITAL ACCELERATOR
012   * Subtype 8:  EAST TRANSORBITAL ACCELERATOR
013   * --------------------------------------------------------------------------------
014   
015   
016   
017   * check sector A and B
018   * --------------------------------------------------------------------------------
019   skip if is datatype[ $A.Sector ] == DATATYPE_SECTOR
020   |goto label Error
021   
022   skip if $A.Sector -> exists
023   |goto label Error
024   * --------------------------------------------------------------------------------
025   skip if is datatype[ $B.Sector ] == DATATYPE_SECTOR
026   |goto label Error
027   
028   skip if $B.Sector -> exists
029   |goto label Error
030   * --------------------------------------------------------------------------------
031   
032   
033   * check position A and B
034   * --------------------------------------------------------------------------------
035   skip if is datatype[ $A.Position.X ] == DATATYPE_INT
036   |goto label Error
037   
038   skip if is datatype[ $A.Position.Y ] == DATATYPE_INT
039   |goto label Error
040   
041   skip if is datatype[ $A.Position.Z ] == DATATYPE_INT
042   |goto label Error
043   * --------------------------------------------------------------------------------
044   skip if is datatype[ $B.Position.X ] == DATATYPE_INT
045   |goto label Error
046   
047   skip if is datatype[ $B.Position.Y ] == DATATYPE_INT
048   |goto label Error
049   
050   skip if is datatype[ $B.Position.Z ] == DATATYPE_INT
051   |goto label Error
052   * --------------------------------------------------------------------------------
053   
054   
055   * check gate type A and B
056   * --------------------------------------------------------------------------------
057   skip if is datatype[ $A.Gate.Type ] == DATATYPE_INT
058   |goto label Error
059   
060   skip if 0 <= $A.Gate.Type AND $A.Gate.Type <= 8 AND $A.Gate.Type != 4
061   |goto label Error
062   * --------------------------------------------------------------------------------
063   skip if is datatype[ $B.Gate.Type ] == DATATYPE_INT
064   |goto label Error
065   
066   skip if 0 <= $B.Gate.Type AND $B.Gate.Type <= 8 AND $B.Gate.Type != 4
067   |goto label Error
068   * --------------------------------------------------------------------------------
069   
070   
071   * get ID of gate A and B
072   * --------------------------------------------------------------------------------
073   if $A.Gate.Type > 4
074   |$A.Gate.ID = $A.Gate.Type - 5
075   else
076   |$A.Gate.ID = $A.Gate.Type
077   end
078   
079   if $B.Gate.Type > 4
080   |$B.Gate.ID = $B.Gate.Type - 5
081   else
082   |$B.Gate.ID = $B.Gate.Type
083   end
084   * --------------------------------------------------------------------------------
085   
086   
087   * create connected gates
088   * --------------------------------------------------------------------------------
089   $Index.1 = $B.Sector -> get universe x index
090   $Index.2 = $B.Sector -> get universe y index
091   
092   $Dummy.1 = create gate: type=$A.Gate.Type addto=$A.Sector gateid=$A.Gate.ID dstsecx=$Index.1 dstsecy=$Index.2 dstgateid=$B.Gate.ID x=$A.Position.X y=$A.Position.Y z=$A.Position.Z
093   
094   $Index.1 = $A.Sector -> get universe x index
095   $Index.2 = $A.Sector -> get universe y index
096   
097   $Dummy.1 = create gate: type=$B.Gate.Type addto=$B.Sector gateid=$B.Gate.ID dstsecx=$Index.1 dstsecy=$Index.2 dstgateid=$A.Gate.ID x=$B.Position.X y=$B.Position.Y z=$B.Position.Z
098   * --------------------------------------------------------------------------------
099   
100   
101   return [TRUE]
102   * ==================================================================
103   
104   
105   Error:
106   
107   $Error.Message = get script name
108   $Error.Message = '... ' + $Error.Message + ' ... error: wrong arguments !'
109   send incoming message $Error.Message to player: display it=[TRUE]
110   
111   return [FALSE]
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

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