[TC]Taktkonforms Scriptschnipsel

Hier können Diskussionen rund ums scripten und modden zu X3 Terran Conflict und Albion Prelude geführt werden.

Moderator: Moderatoren

Benutzeravatar
Taktkonform
Feldwebel
Beiträge: 3119
Registriert: Di 24 Jun, 2008 4:28 pm
Lieblings X-Titel:
Wohnort: Saxonia

[TC]Taktkonforms Scriptschnipsel

Beitrag von Taktkonform »

Meist ist es ja so, das man erst auf eine Idee gebracht werden muß, eh man sie selbst realisiert.
Genauso hier...
...erst durch eine Nachfrage bin ich auf die Idee gekommen, mal den ganzen "Standard-Scripteintopf" in einen Thread zu legen.

Die folgenden Schnipsel sind alles keine "Komfortversionen" sondern dienen und dienten einzig und allein dazu, den Unsäglichkeiten des X-Universums ein wenig auf die Sprünge zu helfen.

Sie beschäftigen sich mit den großen und kleinen Katastrophen (siehe HUB-Plot) des täglichen Wahnsinns in X3 und sind meist auf Nachfrage aus diesem Forum entstanden.


Anmerkung
Ja, die Scripte sind durch die Bank weg Cheats, sieht man mal vom Hinzufüge-Script ab, und Cycrows Cheatpaket kann das sicherlich komfortabler und doller, aber ich selbst lehne das Paket ab, da es nicht reproduzierbare Ereignisse auslösen kann und es einfach zu einfach macht. ;)

Da streng ich doch lieber selber meinen Kopf an. ;)
Genug gelabert:

Achtung! Alle Scripte hier sind für TC ab 2.0 erstellt.

Warencheat für den Hubplot

Code: Alles auswählen

Arguments
1: ware , Var/Ware , 'Ware wählen'
2: Station , Var/Station , 'Sation wählen'
3: wert , Nummer , 'Anzahl der Durchläufe'

Source Text

001   $tempstore = $Station -> get max. store amount of ware $ware
002   $i = 0
003   while $i != $wert
004   |$tmp = $Station -> add $tempstore units of $ware
005   |inc $i =
006 @ |= wait 5000 ms
007   end
008   return null 
Dieses kleine Script fügt alle 5 Sekunden die maximal lagerbare Menge einer vorher bestimmten Ware dem Hub hinzu.
Das macht es solange, bis die angegebene Anzahl der Durchläufe erreicht ist. Somit ist jede beliebige Menge möglich, von "alles transferieren lassen", bis nur "mal ein paar tausend Microchips rüberschicken". ;)

Rufänderung des Spielers gegenüber anderen Völkern

Code: Alles auswählen

Version: 0
for Script Engine Version: 44

Description
Änderung des Ranges des Spielers bei den Völkern, bzw. zwischen den Völkern

Arguments
1: race , Var/Race , 'Rasse auswählen' 
2: value , Var/Number , 'Anzahl der Rufpunkte' 
Source Text

001   $race add notoriety: race=Player value=$value
002   return null
Wieder nur ein Zweizeiler (ohne die Argumente), der es möglich macht, die Beziehungen zwischen Spieler und Völkern, bzw. der Völker untereinander zu verändern.

Erstellen eines Asteroiden

Code: Alles auswählen

Version: 0
for Script Engine Version: 44

Description
Erstellt einen Asteroiden

Arguments
1: Sector.Pos , Var/Sector Position , 'Sektor und Position wählen' 
2: Type , Nummer , '(0=Erz/1=Sili/2=Nividium)' 
3: yield , Nummer , 'Ausbeute angeben' 
Source Text

001   $X = $Sector.Pos[0]
002   $Y = $Sector.Pos[1]
003   $Z = $Sector.Pos[2]
004   $Sector = $Sector.Pos[3]
005   $roid =  create asteroid: type=null addto=$Sector resource=$Type yield=$yield x=$X y=$Y z=$Z
006   return null
Damit wird das Erstellen eines Asteroiden zum Kinderspiel. Einfach Position, Typ und Ausbeute angeben und schon schwebt ein neuer Asteroid im All.

Verschieben eines Asteroiden ohne dabei im Sektor sein zu müssen

Code: Alles auswählen

Version: 0
for Script Engine Version: 44

Description
Verschieben eines Asteroiden
Arguments
1: Sector.Pos , Var/Sector Position , 'Sektor und Position wählen' 
2: roid , Var/Asteroid , 'Asteroid auswählen' 
Source Text

001   $X = $Sector.Pos[0]
002   $Y = $Sector.Pos[1]
003   $Z = $Sector.Pos[2]
004   $Sector = $Sector.Pos[3]
005   $roid -> set position: x=$X y=$Y z=$Z
006   return null
Das Script fordert Sektor und neue Position des Asteroiden in einem Sektor ab und verschiebt den angegebenen Asteroiden an diese Position.
Der Spieler muß sich dabei nicht im Sektor des Asteroiden aufhalten.
Ein Verschieben über Sektorgrenzen hinaus ist damit nicht möglich.

Verschieben einer Station

Code: Alles auswählen

Version: 0
for Script Engine Version: 44

Description
Erstellt einen Asteroiden
Arguments
1: Sector.Pos , Var/Sector Position , 'Sektor und Position wählen' 
2: station , Var/Station , 'Asteroid auswählen' 
Source Text

001   $X = $Sector.Pos[0]
002   $Y = $Sector.Pos[1]
003   $Z = $Sector.Pos[2]
004   $Sector = $Sector.Pos[3]
005   $station -> set position: x=$X y=$Y z=$Z
006   return null
Das gleiche wie beim Asteroiden, nur diesmal für Stationen. Abhängig was verschoben werden soll, ist nur vom Argument 2 <var>/Irgendwas. Setzt man dort was anderes ein, können auch Gates, Schiffe und die Großmutter gemovt werden. ;)

Erstellen jedes x-beliebigen Schiffes im Spiel

Code: Alles auswählen

Version: 0
for Script Engine Version: 44

Description
Schiff erstellen
Arguments
1: Sector.Pos , Var/Sector Position , 'Wähle Sektor und Position' 
2: Ship , Var/Ship Type , 'Schifstyp wählen' 
3: Rasse , Var/Race , 'Rasse auswählen' 
Source Text

001   $X = $Sector.Pos[0]
002   $Y = $Sector.Pos[1]
003   $Z = $Sector.Pos[2]
004   $Sector = $Sector.Pos[3]
005   $cship =  create ship: type=$Ship owner=$Rasse addto=$Sector x=$X y=$Y z=$Z
006   $Upgrade = $cship -> get amount of ware Laderaumerweiterung in cargo bay
007   $UpgradeMax = $cship -> get max upgrades for upgrade Laderaumerweiterung
008   $Upgrade = $UpgradeMax - $Upgrade
009   = $cship -> install $Upgrade units of Laderaumerweiterung
010   $Upgrade = $cship -> get amount of ware Triebwerkstuning in cargo bay
011   $UpgradeMax = $cship -> get max upgrades for upgrade Triebwerkstuning
012   $Upgrade = $UpgradeMax - $Upgrade
013   = $cship -> install $Upgrade units of Triebwerkstuning
014   $Upgrade = $cship -> get amount of ware Ruder-Optimierung in cargo bay
015   $UpgradeMax = $cship -> get max upgrades for upgrade Ruder-Optimierung
016   $Upgrade = $UpgradeMax - $Upgrade
017   = $cship -> install $Upgrade units of Ruder-Optimierung
018   $ShieldType = $cship -> get max. shield type that can be installed
019   $ShieldMax = $cship -> get number of shield bays
020   = $cship -> install $ShieldMax units of $ShieldType
021   
022   $Turret = 0
023   $TurretMax = $cship -> get number of turrets
024   while $Turret < $TurretMax
025   |
026   |$LaserType1 = null
027   |$LaserType2 = null
028   |$LaserType3 = null
029   |$LaserType4 = null
030   |
031   |skip if not $cship -> fits laser Photonenimpulskanone into turret $Turret
032   ||$LaserType1 = Photonenimpulskanone
033   |skip if not $cship -> fits laser Energiepulskanone into turret $Turret
034   ||$LaserType1 = Energiepulskanone
035   |skip if not $cship -> fits laser Energieplasmawerfer into turret $Turret
036   ||$LaserType2 = Energieplasmawerfer
037   |skip if not $cship -> fits laser Splitterbombenwerfer into turret $Turret
038   ||$LaserType2 = Splitterbombenwerfer
039   |skip if not $cship -> fits laser Projektilkanone into turret $Turret
040   ||$LaserType3 = Projektilkanone
041   |skip if not $cship -> fits laser Phasenrepetiergeschütz into turret $Turret
042   ||$LaserType3 = Phasenrepetiergeschütz
043   |skip if not $cship -> fits laser Ionen-Disruptor into turret $Turret
044   ||$LaserType4 = Ionen-Disruptor
045   |skip if not $cship -> fits laser Pulsstrahler into turret $Turret
046   ||$LaserType4 = Pulsstrahler
047   |$LaserMax = $cship -> get max. number of lasers in turret $Turret
048   |skip if not $LaserType1
049   ||= $cship -> install $LaserMax units of $LaserType1
050   |skip if not $LaserType2 AND ! $LaserType1
051   ||= $cship -> install $LaserMax units of $LaserType2
052   |skip if not $LaserType2 AND $LaserType1
053   ||= $cship -> install $LaserMax units of $LaserType2
054   |skip if not $LaserType3
055   ||= $cship -> install $LaserMax units of $LaserType3
056   |skip if not $LaserType4
057   ||= $cship -> install $LaserMax units of $LaserType4
058   |inc $Turret = 
059   end
060   
061   $inst = $cship -> install 1 units of Boost Erweiterung
062   $inst = $cship -> install 1 units of Versorgungssoftware 
063   $inst = $cship -> install 1 units of Duplex Scanner
064   $inst = $cship -> install 1 units of Patrouillensoftware 
065   $inst = $cship -> install 1 units of Erkundungssoftware 
066   $inst = $cship -> install 1 units of Frachtscanner
067   $inst = $cship -> install 1 units of Kampfsoftware MK1
068   $inst = $cship -> install 1 units of Kampfsoftware MK2
069   $inst = $cship -> install 1 units of Landecomputer
070   $inst = $cship -> install 1 units of Mineralienscanner
071   $inst = $cship -> install 1 units of Navigationssoftware MK1
072   $inst = $cship -> install 1 units of Singularitäts-Zeitverzerrungsantrieb
073   $inst = $cship -> install 1 units of Spezialsoftware MK1
074   $inst = $cship -> install 1 units of Transporter
075   $inst = $cship -> install 1 units of Triplex Scanner
076   $inst = $cship -> install 1 units of Sprungantrieb
077   $inst = $cship -> install 1 units of Handelssoftware MK3
078   $inst = $cship -> install 1 units of Handelssoftware MK1
079   $inst = $cship -> install 1 units of Handelscomputer-Erweiterung
080   $inst = $cship -> install 1 units of Handelssoftware MK2
081   $inst = $cship -> install 1 units of Lebenserhaltung für Frachtraum
082   return $cship
Mal was Längeres und auch schon Bekanntes.
Dieses Script erzeugt ein voll ausgestattes, mit Schilden und Waffen versehenes Schiff.
Dabei ist es völlig egal, ob nun für den Spieler oder für die Völker erstellt wird. Auch der Aufenthaltsort des Spielers ist egal, er muß nicht im gleichen Sektor sein.

Ein Wort zu den Waffen. Vom Prinzip her wäre es möglich, wirklich jede erdenkliche Waffenart und Waffenkombination einzubinden.
Dieses Beispiel hier ist dafür gedacht gewesen, schnell Ausfälle bei Transportern und Jägern zu kompensieren, daher liegt der Waffenschwerpunkt auf den "leichten Waffen". Die PIK ist dabei die Ausnahme, da ich das Script auch ab und an einsetze, um Völkern GKS zur Verfügung zu stellen, wenn deren Verteidigung wieder mal von Khaak, Xenon und Co. überrannt worden ist.


Gut, in TC passiert das fast nie, in XTM war es desöfteren im Einsatz.

Es gibt von diesem Script auch noch eine weitere Version, mit Kommandoslot und Ausrüstungslibrary, die aber für ein "Schnipsel" schon viel zu weit führt. ;)

Station erstellen und in Betrieb nehmen

Code: Alles auswählen

Version: 0
for Script Engine Version: 44

Description
Description
Arguments
1: Sector.Pos , Var/Sector Position , 'Sektor und Position wählen' 
2: station , Var/Station Type , 'Stationstyp wählen' 
3: race , Var/Race , 'Eigentümer wählen' 
4: name , String , 'Namen auswählen' 
Source Text

001   $X = $Sector.Pos[0]
002   $Y = $Sector.Pos[1]
003   $Z = $Sector.Pos[2]
004   $Sector = $Sector.Pos[3]
005   $stat =  create station: type=$station owner=$race addto=$Sector x=$X y=$Y z=$Z
006   $stat -> set name to $name
007   $stat -> add primary resource to factory: Energiezellen
008   $stat -> add primary resource to factory: Erz
009   *$stat -> add primary resource to factory: Siliziumscheiben
010   $stat -> add primary resource to factory: Cahoona Fleischblöcke
011   $stat -> add second resource to factory: Quantumröhren
012   $stat -> add second resource to factory: Computerkomponenten
013   $stat -> add second resource to factory: Stoff-Rheime
014   $stat -> add second resource to factory: Teladianium
015   $stat -> add product to factory or dock: 25 MJ Schild
016   $stat -> add product to factory or dock: 200 MJ Schild
017   $stat -> station trade and production tasks: on=1
018   $tmp = $stat -> install 5 units of 2 GJ Schild
019   return null
Wieder so eine Geschichte, die auf Nachfrage aus diesem Forum entstanden ist. Mit diesem Script läßt sich jede beliebige mögliche und unmögliche Station, bzw. deren Produktion und deren Resourceneinsatz zusammenzimmern.

Achtung!
Die Angaben der jeweiligen Primär-, Sekundärresourcen und Produkte muß bei dieser Version im SE erfolgen, wird also nicht über Argumente gelöst.


Obwohl...
...vielleicht denke ich da noch mal drüber nach, Aufwand wäre es kein großer, das über ein Menü zu machen.

Im Beispiel wird ein argonischer Produktionskomplex "mittlerer Schild" erstellt, mit einer etwas "anderen" Resourcenvergabe. ;)
Was ihr daraus macht, ist Eurer Phantasie überlassen. ;)

Die Angabe des Namens läßt es zu die Station beliebig umzubenennen, das gilt allerdings nur für die reine Benennung, nicht für den Voicestream, denn den müßte man erstmal aufnehmen.^^

Objekt zerstören

Code: Alles auswählen

Version: 0
for Script Engine Version: 44

Description
Bumm
Arguments
1: obj , Var/Ship/Station , 'Schiff oder Station wählen' 
Source Text

001   $obj -> destruct: show no explosion=[TRUE]
002   return null
Etwas aus der Liga "einfacher gehts nicht". Dieser Zweizeiler läßt alles und jeden BUMM machen, aber ohne großes Aufheben darum zu machen. ;)

Wie man sich Freunde macht...

Code: Alles auswählen

Version: 0
for Script Engine Version: 44

Description
Description
Arguments
1: target , Var/Ship/Station , 'Ziel auswählen' 
2: race , Var/Race , 'Rasse wählen' 
3: relation , Relation , 'Beziehungstyp wählen' 
Source Text

001   $target -> set relation against $race to $relation
002   return null
Das leidige Problem mit der "fast" Unabänderlichkeit einer roten Station oder eines roten Schiffes, gehört mit diesem Script der Vergangenheit an.

Waren/Ausrüstung an Schiffe und Stationen transferieren

Code: Alles auswählen

Version: 1
for Script Engine Version: 44

Description
Transferiert Waren zu Schiffen oder Stationen
Arguments
1: object , Var/Ship/Station , 'Schiff oder Station wählen' 
2: ware , Var/Ware , 'Ware wählen' 
3: count , Nummer , 'Menge wählen' 
Source Text

001   $tmp = $object -> add $count units of $ware
002   return null
Das ist mal ein Script, das auf meine eigene Intention zurückgeht...
...nach dem zweiundzwanzigsten Auftrag "bringe sie XYZ,blablabla" innerhalb der Sohnenreihe bei XTM ist mir der Kragen geplatzt. ;)

Ergebnis, dieses kleine Script, was alles schöööön vereinfacht.
Auch Upgrades lassen sich damit auf Schiffe transferieren.
Funktioniert auch wunderbarst mit TC.

Schiff tunen

Code: Alles auswählen

Version: 0
for Script Engine Version: 44

Description
Description
Arguments
1: cship , Var/Ship , 'Schiff wählen' 
2: count , Nummer , 'Menge wählen' 
Source Text

001   $Upgrade = $cship -> get amount of ware Laderaumerweiterung in cargo bay
002   $UpgradeMax = $cship -> get max upgrades for upgrade Laderaumerweiterung
003   $Upgrade = $UpgradeMax - $Upgrade
004   = $cship -> install $Upgrade units of Laderaumerweiterung
005   $Upgrade = $cship -> get amount of ware Triebwerkstuning in cargo bay
006   $UpgradeMax = $cship -> get max upgrades for upgrade Triebwerkstuning
007   $Upgrade = $UpgradeMax - $Upgrade + $count
008   = $cship -> install $Upgrade units of Triebwerkstuning
009   $Upgrade = $cship -> get amount of ware Ruder-Optimierung in cargo bay
010   $UpgradeMax = $cship -> get max upgrades for upgrade Ruder-Optimierung
011   $Upgrade = $UpgradeMax - $Upgrade + $count
012   = $cship -> install $Upgrade units of Ruder-Optimierung
013   return $cship
Schiff zu langsam oder zu ungelenkig? Mit diesen paar Zeilen macht man aus einer lahmen Ente einen Porsche, oder eben umgekehrt. ;)

Das Script maximiert die natürliche Anzahl an Tunings und fügt so nebenbei die gewünschte Anzahl an Overtuning hinzu.

Funktioniert sowohl im positiven, wie im negativen Bereich, will sagen, man kann damit auch Schiffe langsamer machen, falls man sich mal in der Anzahl der Tunings vergaloppiert hat.
Nur unter die Grenze der "natürlichen" Tunings fällt man nie.

Update
Komplette Werft, inklusive aller Schiffe einer Rasse, erstellen

Code: Alles auswählen

Script aa.test.atf.shipyard
Version: 0
for Script Engine Version: 44
Description
Description
Arguments

    1: sector.pos , Var/Sector Position , 'Sektor und Position wählen'

Source Text

001   $X = $sector.pos[0]
002   $Y = $sector.pos[1]
003   $Z = $sector.pos[2]
004   $Sector = $sector.pos[3]
005   $station =  create station: type=[STATIONSTYP] owner=[RASSE] addto=$Sector x=$X y=$Y z=$Z
006   $ships =  get ship type array: maker race=[RASSE] class=Bewegliches Schiff
007   $i =  size of array $ships
008   while $i
009   |dec $i = 
010   |$ware = $ships[$i]
011   |$station -> add product to factory or dock: $ware
012   |= $station -> add 1 units of $ware
013 @ |= wait 5 ms
014   end
015   $station -> factory production task: on=[TRUE]
016   return null
[STATIONSTYP] = Ist hier eine Werft der jeweiligen Rasse.
[RASSE] = Kann jede beliebige Rasse sein, außer dem Spieler. Spielereigene Werften funktionieren nicht! Der Rassentyp von Besitzer der Werft und Erstellerrasse der eingefügten Schiffe kann durchaus unterschiedlich sein.
Es geht also, das man den Gonern die Werft zuordnet, die Werft selbst aber ATF-Schiffe anbietet. ;)

Dieses kleine Script erstellt eine Werft vom angegebenen Typ und angegebener Rasse an der angegebenen Position und fügt dieser erstellten Werft alle Schiffe hinzu, die der Objektklasse Bewegliches Schiff der Erstellerrasse (<get maker race>) entsprechen.

Und das sind immer alle, also auch die, die sonst nicht im Spiel auftauchen, wie etwa die Wallhalla bei der ATF.

Objekttyp "Bewegliches Schiff" deswegen, da es keinen Sinn macht, Geschütztürme und Satelliten in einer Werft anzubieten.

Ach ja, das die Werft hier keine Schilde hat, war damals Absicht...
...sie sollte so schnell wie möglich "zerbröselt" werden, als Testobjekt für die KI-Steuerung in einem Kampfscript. Aber das bekommt ihr sicher hin, der Werft ein paar Schilde zu gönnen. Und wenn nicht...
...einfach fragen. :D

Update 2

Da sich in letzter Zeit die Fragen nach eigenen Torverbindungen und nach Zuweisungen von Waren, Produkten und Resourcen zu bestehenden Fabriken, Docks und Handelsstationen gehäuft hat, hier nochmal zwei Beispiele, wie man so etwas mit einfachen Mitteln lösen kann.

Eigene Torverbindungen erstellen

Code: Alles auswählen

Script aa.test.sprungtor
Version: 0
for Script Engine Version: 45
Description
Description
Arguments

    1: sector.pos , Var/Sector Position , 'Sektor und Position wählen'
    2: sector.pos1 , Var/Sector Position , 'Sektor 2 und Position wählen'
    3: typegate1 , Number , 'Angabe des Tortyps für Tor 1 (0=N, 1=S, 2=W, 3=E)'
    4: typegate2, Number, Angabe des Tortyps für Tor 2 (0=N, 1=S, 2=W, 3=E)'

Source Text

001   $X = $sector.pos[0]
002   $Y = $sector.pos[1]
003   $Z = $sector.pos[2]
004   $sector = $sector.pos[3]
005   
006   $X1 = $sector.pos1[0]
007   $Y1 = $sector.pos1[1]
008   $Z1 = $sector.pos1[2]
009   $sector1 = $sector.pos1[3]
010   
011   $sec1x = $sector -> get universe x index
012   $sec1y = $sector -> get universe y index
013   
014   $sec2x = $sector1 -> get universe x index
015   $sec2y = $sector1 -> get universe y index
016   
017   $gid1 = 5
018   while $sector -> get warp gate: gate id=$gid1
019   |if $gid1 == -1
020   ||return null
021   |end
022   end
023   
024   $gid2 = 5
025   while $sector1 -> get warp gate: gate id=$gid2
026   |if $gid2 == -1
027   ||return null
028   |end
029   end
030   
031   $tor1 = create gate: type=$typegate1 addto=$sector gateid=$gid1 dstsecx=$sec2x dstsecy=$sec2y dstgateid=$gid2 x=$X y=$Y z=$Z
032   $tor2 = create gate: type=$typegate2 addto=$sector1 gateid=$gid2 dstsecx=$sec1x dstsecy=$sec1y dstgateid=$gid1 x=$X1 y=$Y1 z=$Z1
033   return null
Das Script fragt nacheinander zwei Sektoren und die Positionen des späteren Tores innerhalb dieser Sektoren ab. Gleichzeitig wird es den Typ der Tore abfragen, also ob Nord, Süd, West, oder Osttor. Die erste Abfrage gilt dabei für das Tor in Sektor 1, die zweite für das Tor in Sektor 2. Das Eingabeformat für diese Werte steht in der Beschreibung des Arguments (0=Nord, 1=Süd, 2=West, 3=Ost).

Bitte beachten: Es können maximal 6 Tore ein einem Sektor platziert werden und es kann auch immer nur ein Tor mit der entsprechenden Richtungsangabe geben.

Alle benötigten Werte können von der Galaxiekarte entnommen werden. Das Script wandelt intern die Angaben in die benötigten Koordinaten um und erstellt dann zwei Tore in den angebenen Sektoren und verbindet diese miteinander.

Die Tore sind persistent. Sie bleiben auch nach einem Speichern des Spiels und Neuladen bestehen. Bei einem kompletten Neustart des Spiels muss das Script einmalig aufgerufen werden, um die Torverbindung zu erstellen.


Zuweisen von Resourcen zu Fabriken, mittels Maintype

Code: Alles auswählen

Script aa.test.maintype
Version: 0
for Script Engine Version: 45
Description
Description
Arguments

    1: ware , Var/Ware , 'Ware auswählen'

Source Text

001   $object = get maintype of ware $ware
002   $stock = get number of subtypes of maintype $object
003   $i = 0
004   while $i < $stock
005   |inc $i = 
006   |$product = get ware from maintype $object and subtype $i
007   |$station.array = get station array: product=$product include empty=[TRUE]
008   |$station.size = size of array $station.array
009   |while $station.size
010   ||dec $station.size = 
011   ||$station = $station.array[$station.size]
012   ||skip if $station -> uses ware Kristalle as secondary resource
013   |||$station ->add second resource to factory: Kristalle
014   ||skip if $station -> uses ware Nostropöl as secondary resource
015   |||$station ->add second resource to factory: Nostropöl
016   ||skip if $station -> uses ware Computerkomponenten as secondary resource
017   |||$station ->add second resource to factory: Computerkomponenten
018   ||skip if $station -> uses ware Teladianium as secondary resource
019   |||$station ->add second resource to factory: Teladianium
020   ||skip if $station -> uses ware Mikrochips as secondary resource
021   |||$station ->add second resource to factory: Mikrochips
022 @ ||= wait 10 ms
023   |end
024   end
025   return null
Grundgedanke dieses Script war das Zuweisen sekundärer Resourcen zu allen existierenden Fabriken eines bestimmten Produktes, mittels des Maintypes.
So kann man zum Beispiel allen Raketenfabriken im Universum einen anderen oder erweiterten Satz an sekundären Resourcen verpassen.

Natürlich kann man das Ganze auch so anpassen, dass sich damit auch die primären Resourcen ändern lassen.

Das Script selbst fragt nach dem Start nur eine Ware der gewünschten Gruppte (Maintype) ab, wird dann die enthaltenen Subtypen ermitteln und jede KI-Fabrik in der Galaxie suchen und um die Einträge ab Zeile 012 ergänzen, die einen Subtyp des Maintypes als Produkt herstellt, solange diese Fabrik die angegebene sekundäre Resource nicht schon als sekundäre Resource benutzt (skip if...).

Warum man das machhen will?
Nun ja, man kann damit recht schnell einen sehr hohe Nachfrage an sonst nicht oder wenig benötigten Gütern erreichen und das Spiel ein wenig "lebensechter" gestalten. Denn eine Rakete besteht nun mal nicht nur aus Sprengkopf, Futter für die Produktionsmannschaften und Erz. ;)

Update 3

Die eigene Reparatursoftware

Es ist ganz einfach nervig, wenn man sich mit dem Rep-Laser ins All hängt und beginnt Hüllenschäden zu reparieren. Bei GKS ist es defacto unmöglich auf diese Art Kosten zu sparen.
Aber mit ein wenig Aufwand kann man sich selbst eine käufliche Softwareerweiterung schaffen, die das dann übernimmt.

Reparaturscript

Code: Alles auswählen

Script aa.repair.ship
Version: 0
for Script Engine Version: 45
Description
Description
Arguments

Source Text

001   $maxhull = [THIS] -> get max hull
002   $curhull = [THIS] -> get hull
003   $i = $curhull
004   while $i < $maxhull
005   |inc $i = 
006   |[THIS] ->set hull to $i
007 @ |= wait 5 ms
008   end
009   return null
Das eigentliche Reparaturscript.
Wie man sieht, ist es mit ganz wenig Aufwand möglich, eine lineare Reparatur erreichen. Das Script ermittelt die maximal mögliche Hülle, die derzeit vorhandene Resthülle und repariert solange, bis der Wert von maxhull (maximal mögliche Hülle) nicht mehr größer ist, als der wert von currhull (dynamischer Wert der jeweiligen Hüllenstärke seit Beginn der Reparatur).

Setup-Script

Code: Alles auswählen

Script setup.plugin.repsoft
Version: 0
for Script Engine Version: 45
Description
Reparatursoftware
Arguments

Source Text

001   $pageid = 7661
002   load text: id=$pageid
003   set global variable: name='Global.Repsoft.PageID' value=$pageid
004   $command = COMMAND_537_REP_SOFTWARE
005   $ware = Reparatursoftware
006   set script command upgrade: command=$command  upgrade=$ware
007   global script map: set: key=$command, class=Bewegliches Schiff, race=Player, script='aa.repair.ship', prio=0
008   global script map: ignore: key=$command, class=Navigationssatellit, race=Player
009   global script map: ignore: key=$command, class=Erweiterter Satellit, race=Player
010   global script map: ignore: key=$command, class=Kampfdrohne, race=Player
011   global script map: ignore: key=$command, class=Frachtdrone, race=Player
012   
013   * Reparatursoftware den argonischen ADs hinzufügen
014   $station.array =  get station array: of race Argonen class/type=Argon Ausrüstungsdock
015   $station.size = size of array $station.array
016   while $station.size
017   |dec $station.size = 
018   |$station = $station.array[$station.size]
019   |skip if $station -> uses ware Reparatursoftware as product
020   ||$station ->add product to factory or dock: Reparatursoftware
021   |= $station -> add 1 units of Reparatursoftware
022   end
023   return null
Dieses Script installiert einen neuen Slot im Kommandomenü "Spezial" des Schiffes, auf dem die Softwareerweiterung "Reparatursoftware" installiert ist, worüber dann die Reparatur gestartet werden kann. Zudem fügt es die neue Ware "Reparatursoftware" allen argonischen AD's hinzu. Es müssen nicht unbedingt die argonischen AD oder AD allgemein sein. Man kann über die Schalter of race: und class/type= des Befehls <array> = get station array... die jeweilige Objektklasse und die Rasse bestimmen, zu der die neue Erweiterung hinzugefügt werde soll.

Ergänzung
Durch Nachfrage bin ich darauf aufmerksam gemacht worden, dass der angegebene Kommandoslot und die neue Ware nicht auffindbar sind.

Mein Fehler!

Ich hatte vergessen zu erwähnen, dass beim Schreiben des Setup-Scripts die Platzhalter eingesetzt werden sollten.

Für den Kommandoslot (Command_537_Rep_Software) ist das Command_Type_Special_37 und für die neue Ware (Reparatursoftware) der Eintrag SS_Ware_NEW11.

Sobald das Setup-Script zum ersten Mal gestartet wird, liest es die neuen Bezeichnungen aus dem T-File (7661) aus und ersetzt die Platzhalter. Ab dann stehen dann auch die Bezeichnungen so drin, wie sie im Listing vorhanden sind.


T-File und Definition der neuen Ware "Reparatursoftware"
T-File mit der Bezeichnung 7661-L049.xml

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?> 
<language id="49"> 
<page id="7661" title="Reparatursoftware" descr="0">
</page> 
<page id="2008" title="Script Object Commands" descr=""> 
<t id="537">COMMAND_537_REP_SOFTWARE</t> 
</page> 
<page id="2010" title="Script Cmd Names" descr=""> 
<t id="537">\033RErweiterung:\033X Reparatursoftware</t> 
</page> 
<page id="2011" title="Script Cmd Shorts" descr=""> 
<t id="537">RS</t> 
</page> 
<page id="2022" title="Command Info" descr=""> 
<t id="537">Neuartige Erweiterung auf Nanitenbasis zum Reparieren von Hüllenschäden</t>
</page> 
<page id="17" title="Boardcomp. objects" descr="">
      <t id="5853">Reparatursoftware</t>
      <t id="5854">Diese Erweiterung ermöglicht eine stetige Hüllenreparatur auf Schiffen, auf 

denen sie installiert ist.</t>
</page> 
</language>
Diese Datei koppelt das Reparaturscript an einen Kommandoslot (hier Gruppe 5 [Spezial] Slot 37 {gesamt gelesen id=537}), fügt die nötigen Slotbeschreibungen und Hilfetexte hinzu und erstellt die neue Ware "Reparatursoftware". Dazu wird im Bordcomputerteil (id=17) eine neue Ware angelegt (hier die id=5853 und die ID= 5854).

Anmerkung:

Code: Alles auswählen

\033RErweiterung:\033X Reparatursoftware
Hier sieht man eine mögliche Farbkodierung des Menüeintrages. Die Anweisungen \033 und \033X färben den darin eingeschlossen Text rot ein.
Somit steht dann im Kommandoslot folgendes:

Erweiterung: Reparatursoftware

Sie müssen nicht mitgeschrieben werden, dann bleibt halt alles weiß.
In der Onlinereferenz MSCI findert man eine komplette Liste aller möglichen Farbkodierungen.


Dieser Teil des Scripts wird nicht im SE erstellt, sondern einfach mit einem normalen Texteditor. Gespeichert wird die neue Datei dann im Ordner "t" der jeweiligen X-Installation (also bei TC im Ordner "t", bei AP im Ordner "addon/t"). Das Namensformat muss dabei jeweils in der Form <vierstellige ID>-L049.xml angegeben werden, wenn es sich um eine deutschsprachige Datei handelt. Beim Speichern auch bitte darauf achten, dass der Dateityp auf "alle" steht und die Kodierung im UTF-8-Format erfolgt.

Um mehrsprachige Versionen zu erzeugen, erstellt man die Datei mit den Einträgen in der jeweilig gewünschten Sprache und ändert den Zusatz L-<Landeskennung> in die jeweils gültige Landeskennung (internationale Telefonvorwahl des jeweiligen Landes [Deutsch=049, GB=044, Frankreich=033, usw.). So hat man dann eben mehrere Dateien mit der ID=7661, eben für die jeweilige Installationssprache des Spiels.

Im Egosoftforum, unter "unsignierte Erweiterungen" in Script-Forenteil (TC/AP) gibt es eine Liste mit freien und belegten Befehlsslots und verwendeten T-ID's. So kann man schon mal nachschauen, welche Slots verwendet werden und ob man diese Scripte bei sich installiert hat, und danach dann seine eigene Wahl treffen, um Inkompatibilitäten zu vermeiden.
Dasselbe gibt es, im gleichen Forumsteil/Thread, auch für die freien bzw. benutzten Erweiterungsslots (NEW_WARE[...]).

Somit hat man eine neue Softwareerweiterung, die man einmal kaufen muss, pro Schiff versteht sich, und die dann auf Wunsch anfängt die Hülle langsam aber sicher wieder zu reparieren.


Sodale, das soll es erstmal gewesen sein...
...ich hab zwar hier noch ein paar Schnipsel rumliegen, aber die sind so speziell auf bestimmte Probleme zugeschnitten (Aussetzen von Sats, Einsammeln von Sats, automatische Benennung von Schiffen, usw.) das ich sie hier nicht anbieten möchte.

Anhang A

Ich schiebe mal den Beitrag von Lucike zu den Befehlsbibliotheken hier in den Startpost. Sie sind hier bedeutend besser aufgehoben, als auf Seiten ypsen-tausend. :mrgreen:
Lucike hat geschrieben: Ich würde gerne hier mal einige Elemente aus meiner Befehlsbibliothek vorstellen, da oft nach solchen Sachen hier gefragt wird. Hoffentlich ist dieses Thema dafür passend.


lib.le.equip.ship.upgrades

Schiff komplett mit Laderaum, Triebwerk, Ruderoptimierung und Schilde ausrüsten.

Arguments
1: Ship , Var/Ship , 'Ship'

$Ship = das auszurüstende Schiff


lib.le.equip.ship.weapons

Schiff komplett mit allen möglichen Waffen intelligent ausrüsten.

Arguments
1: Ship , Var/Ship , 'Ship'

$Ship = das auszurüstende Schiff


lib.le.choose.product

Produkt aus einer nach Warengruppen (Subtypes) sortierten Liste auswählen.

1: Title , Var/String , 'Title'
2: Description , Var/String , 'Description'
3: Array.Ware , Value , 'not Array.Ware'

$Titel = Menütitel
$Description = Menübeschreibung
$Array.Ware = Nicht auswählbare Waren


Das ist natürlich nur ein kleiner Teil der Bibliothek. Auf Wunsch könnte ich das noch komplettieren.

Gruß
Lucike
Die Bibliotheken gibt es hier zu Download.

noch nen netten Tag
Taktkonform

Edit by Diemetius Thread gepinnt.
Zuletzt geändert von Taktkonform am Mo 06 Aug, 2012 5:29 pm, insgesamt 6-mal geändert.
Komm wir essen Oma - Satzzeichen können Leben retten!
omlamm
Scharfschütze
Beiträge: 305
Registriert: Do 10 Jul, 2008 8:11 am
Lieblings X-Titel:
Wohnort: Kassel

Beitrag von omlamm »

Ich kann mich irren, aber ich glaube du kannst dir den ganzen Aufwand mit den Produkten und Ressourcen beim erstellen der Stationen durch folgenden Befehl sparen.

<RetVar> -> add default wares to station/dock

(zumindest wenn man die "normalen" Produkte und Ressourcen haben will.)

ansonsten, schöne Idee. Gerade für Leute die nicht so tief um SE drin sind das sie es selber können, aber soviel verstehen das sie es "nachbauen" können.)

omlamm
Benutzeravatar
Taktkonform
Feldwebel
Beiträge: 3119
Registriert: Di 24 Jun, 2008 4:28 pm
Lieblings X-Titel:
Wohnort: Saxonia

Beitrag von Taktkonform »

omlamm hat geschrieben: (zumindest wenn man die "normalen" Produkte und Ressourcen haben will.)
Jupp, nur wollen das die meisten nicht, daher dieses Gewurschtel mit den add-Einträgen.
Werd´ das wohl doch nochmal mit nem Benutzermenü machen.
omlamm hat geschrieben: ansonsten, schöne Idee. Gerade für Leute die nicht so tief um SE drin sind das sie es selber können, aber soviel verstehen das sie es "nachbauen" können.)
Danke...
...war auch mein Grundgedanke. Klar, man cheatet, aber zumindest hat man den Cheat selbst geschrieben.^^

noch nen netten Tag
Taktkonform
Komm wir essen Oma - Satzzeichen können Leben retten!
[Pirat] Black Falcon [X]
Offiziersanwärter
Beiträge: 2625
Registriert: Fr 23 Nov, 2007 10:01 pm
Lieblings X-Titel:

Beitrag von [Pirat] Black Falcon [X] »

Ah, hat da noch jemand die Nase voll mit etlichen Anfragen "mach mal dies, mach mal das, wie macht man jenes"? :mrgreen:

Sowas fehlt irgendwie beim MD :-(

Aber gute Arbeit ;-)

MfG
Falcon
Thelquor
Rekrut
Beiträge: 93
Registriert: Do 24 Jun, 2010 1:15 pm
Lieblings X-Titel:

Beitrag von Thelquor »

Gute Sache...bei Cyrwos Cheatpaket muss mann sich ja nicht mal in den ScriptEditor bemühen, sondern einfach Kommandos geben: kurzum: langweilig (hab mich deswegen nach dem HUB-Plot davon verabschiedet :-D )

Aber insofern gute Sache: Damit können Anfänger sich sogar n bisschen Austoben und rumprobieren (und dabei hoffen das Spiel nicht in den A**** zu jagen...(Mir schon 2mal mit selbstgebastelten Scripts passiert :ooh: ))
Benutzeravatar
kanga
Rekrut
Beiträge: 89
Registriert: Mo 13 Aug, 2007 7:04 am
Lieblings X-Titel:
Wohnort: Unterbachern
Kontaktdaten:

Beitrag von kanga »

Hallo Taktkonform,

vielen Dank für die (wahnsinnig schnelle) Umsetzung. Genau das hab ich mir vorgestellt - und wenn ein Thread draus wird, umsobesser! So lernt man wirklich einfacher.

Möge der Saft mit Dir sein ...
73 de Kanga
http://www.kanga.de
Bild
MatzeR
Moderator
Beiträge: 3810
Registriert: So 04 Jan, 2009 12:29 pm
Lieblings X-Titel:
Wohnort: Leitstern

Beitrag von MatzeR »

Ich finde, dieser Thread hat ein Sticky verdient!
Liebe Mods, diese Mühe und dieser Nutzen für alle sollte wirklich eine 'Verewigung' wert sein.
Außerdem findet man so diesen Thread besser.
@Taktkonform: Ich werde erst einmal diese 'Cheats' zwar nicht verwenden, aber ich finde es Top, wie Du auf andere User eingehst und ihnen hilfst. Wenn das Papier billiger wird, spendiere ich Dir einmal einen Orden. :-)
:flowers:
Einen Krieger erkennt man nicht an seinen Waffen, sondern an den Augen seiner Gegner!
shinaro
Veteran Klasse 2
Beiträge: 1730
Registriert: Di 06 Jan, 2009 9:24 pm
Lieblings X-Titel:

Beitrag von shinaro »

Hier ist mal mein Schiffscript, dass ich mal vor langer Zeit geschrieben habe.

http://seizewell.de/viewtopic.php?t=5610&start=0

Das ist kein selbsterstelltes Script. Dieses Script hat sozusagen jeder.

Der Vorteil ist, man kann einfach die Schiffe auswählen und evt 1, 2 Ware und ist ein stark verkürtze Script. Kurz gesagt. Schiffe auswählen und Scriptbefehl ausführen und schon hat man es.

Nachteil ist. Soweit ich mich erinnere ist Rasse nicht anwählbar. Die Software, Schiffswerte (Marines, Geschwindigkeit, Wendigkeit usw) usw ist zufällig. Es spawnt in der Regel in der Mitte des Sektor im ein Argonische Sektor.

Fazit: Wer genauere Einstellung will, ist Taktinform selbsterstelltes Script gut geeignet.

Wer lieber kurz und schnell haben will, ist die Grundscript gut.

mfg shinaro
Benutzeravatar
Taktkonform
Feldwebel
Beiträge: 3119
Registriert: Di 24 Jun, 2008 4:28 pm
Lieblings X-Titel:
Wohnort: Saxonia

Beitrag von Taktkonform »

Ich hab da noch was...
...vielleicht ist es Euch ja auch schon mal so ergangen, ihr wolltet ein bestimmtes Schiff, oder einfach nur ein Schiff, allen Werften einer bestimmten Rasse zuweisen, vielleicht ganz einfach aus dem Grund, das ihr eben nicht bis nach Hintertupfingen fliegen wolltet, um das Schiff zu ergattern.

Nun ist das nicht sooo einfach in Reunion.^^
Mir fiel dann allerdings beim Durchsehen von Trickmov´s STO auf, das er im Population-Script, welches die Neubevölkerung von übernommenen Sektoren regelt, einen recht einfachen, aber sehr effizienten Trick anwendet.

Er kopiert die Stationen einfach von bestehenden Stationen...
...da kam mir der Einfall, das man dies mit Schiffen ja auch machen könnte, zwar nicht kopieren im reelen Sinne, aber dem Kopieren von Eigenschaften und Flaggen.

Herausgekommen ist das Script
Schiffe zu allen Werften einer Rasse hinzufügen

Code: Alles auswählen

001   
002   $ship =  create ship: type=Notos Frachter owner=Neutrale addto=Unbekannter Sektor x=0 y=0 z=0
003   
004   $race = $ship -> get maker race
005   $ware = $ship -> get ware type code of object
006   $ship -> destruct: show no explosion=[TRUE]
007   $station.array =  get station array: of race $race class/type=Schiffswerft
008   $station.size =  size of array $station.array
009   while $station.size
010   |dec $station.size = 
011   |$station = $station.array[$station.size]
012   |skip if $station -> uses ware $ware as product
013   ||$station -> add product to factory or dock: $ware
014   end
015   return null
Das Script erstellt das in der create-zeile angegebene Modell in einem beliebigen unbekannten Sektor, liest Eigentümerrasse und Warenobjektcode aus und zerstört das Schiff wieder. Natürlich lassen sich auch gleich mehrere einlesen, dann eben mit Arrays, was aber für ein Schnipsel schon arg weit geht. ;)

Danach sucht es nach allen Werften, die der Eigentümerrasse zugeordnet sind, überprüft ob das Schiff an diesen Werften bereits erhältlich ist und wenn nicht, fügt es dieses Schiff der Angebotspalette der Werft hinzu.

Auch hier ließe sich über Parameterbefehle (Argumente) sicherlich einiges automatisieren, was ich aber in dem speziellen Fall nicht wollte, daher hat das Script auch keine Parametrierung.

Um das Ganze dann auch noch selbstablaufend und permanent im Hintergrund zu erledigen, kommen da noch ein weiteres Script dazu, sowie ein t-file.

Das Setup-Script zum Hinzufügen von Schiffen

Code: Alles auswählen

001   load text: id=8467
002 @ = [THIS] -> call script 'plugin.add.shiptodock' : 
003   return null
Dieses Script hat einzig und allein die Aufgabe, als Autorun-Datei zu dienen. Bei jedem Start des Spiels wird das ausführende Script gerufen und so hat man immer die Gewissheit, das die hinzugefügten Schiff(e) nicht plötzlich verschwunden sind.

Die erste Zeile dieses Scriptes deutet auf eine zugehörige t-Datei hin, aus der bestimmte Informationen gelesen werden.

Das T-File zum Script

Code: Alles auswählen

<language id="49">
−
<page id="17" title="Boardcomp. objects" descr="0">
<t id="8467">Schiffsname</t>
<t id="8468">Schiffsbeschreibung</t>
</page>
</language>
Wie man sieht, liest das Script aus diesem t-file nur die Informationen aus dem Bordcomputer zum Schiffsnamen aus.

Aber, man muß nicht den ganz idiotensicheren Weg gehen, das reine Hinzufügescript funktioniert auch so, nur ist eben nicht sichergestellt, das sich bei einer veränderten Installation und/oder Umgebung, dann auch noch alle Schiffe in der Werftliste befinden.

Will man ein / mehrere Schiff(e) nur einer einzigen Werft hinzufügen, muß man diesen Umweg nicht gehen, da gibt es eine einfachere Lösung, wenn auch nicht ganz so elegant....

Schiff(e) zu einer bestimmten Werft hinzufügen

Code: Alles auswählen

Version: 0
for Script Engine Version: 44
Description
Description
Arguments

     1: Sector.Pos , Var/Sector , 'Sektor wählen'
     2: race , Var/Race , 'Eigentümer wählen'
     3: ship1 , Var/Ship Type , 'Schiffstyp wählen'

Source Text

001   $stat =  find station: sector=$Sector.Pos class or type=Schiffswerft race=$race flags=null refobj=null maxdist=null maxnum=1 refpos=null
002   $stat -> add product to factory or dock: $ship1
009   return null
Wieder mit find station eine Station der Klasse Schiffswerft ausmachen, die im angegebenen Sektor zu finden sein sollte, und schon wird das ausgewählte Schiff der Werft hinzugefügt.

noch nen netten Tag
Taktkonform
Komm wir essen Oma - Satzzeichen können Leben retten!
omlamm
Scharfschütze
Beiträge: 305
Registriert: Do 10 Jul, 2008 8:11 am
Lieblings X-Titel:
Wohnort: Kassel

Beitrag von omlamm »

Darf ich hier eigentlich auch?
Ok, ist jetzt eigentlich nichts was man spontan selber schreibt, aber ein kleines Scriptschnipsel ohne Bedienelemente das vielleicht dem ein oder anderen sein Universum verschönert.

http://seizewell.de/viewtopic.php?t=6788
Für alle denen in einem perfekten Sektor einfach der Planet nicht gefällt.
(Weiter unten kommt das Script sowohl zum dl als auch zum nachschreiben. Oder soll ich zumindest den Code auch hier rein stellen?)

omlamm
Benutzeravatar
Taktkonform
Feldwebel
Beiträge: 3119
Registriert: Di 24 Jun, 2008 4:28 pm
Lieblings X-Titel:
Wohnort: Saxonia

Beitrag von Taktkonform »

omlamm hat geschrieben:Darf ich hier eigentlich auch?
Na aber immer. :mrgreen:

noch nen netten Tag
Taktkonform
Komm wir essen Oma - Satzzeichen können Leben retten!
grieche
Harmlos
Beiträge: 7
Registriert: Fr 17 Jul, 2009 3:29 pm
Lieblings X-Titel:

Beitrag von grieche »

servus an die comunity!!!

erstmal vielen dank an taktkonform ,die mich greenhorn mit ihrer ausführung zum se überhaupt soweit gebracht hat.
wenn du nicht soweit weg wohnen würdest,würde ich dich doch glatt zum essen beim griechen einladen. smile

aber auch auf die gefahr hin das ich gesteinigt werde,aber wie bekomme ich diese verd....befehle hinter den codes?

Source Text

001 $tempstore = $Station -> get max. store amount of ware $ware
002 $i = 0
003 while $i != $wert
004 |$tmp = $Station -> add $tempstore units of $ware
005 |inc $i =
006 @ |= wait 5000 ms
007 end
008 return null
[/quote]


dank im vorraus
Benutzeravatar
Taktkonform
Feldwebel
Beiträge: 3119
Registriert: Di 24 Jun, 2008 4:28 pm
Lieblings X-Titel:
Wohnort: Saxonia

Beitrag von Taktkonform »

grieche hat geschrieben:servus an die comunity!!!
Willkommen an Bord. :-D
grieche hat geschrieben: erstmal vielen dank an taktkonform ,die mich greenhorn mit ihrer ausführung zum se überhaupt soweit gebracht hat.
Nix zu danken, dafür war die Geschichte ja gedacht.
grieche hat geschrieben: wenn du nicht soweit weg wohnen würdest,würde ich dich doch glatt zum essen beim griechen einladen. smile
Oh, ich liebe griechisches Essen, leider bewege ich mich derzeit aber jenseits der 60 kg-Grenze, von daher würde ich -zwar tieftraurig- aber dennoch ablehnen. ;)
grieche hat geschrieben: aber auch auf die gefahr hin das ich gesteinigt werde,aber wie bekomme ich diese verd....befehle hinter den codes?
Och, deswegen steinigt Dich hier keiner...
ich pack einfach wieder mal den Erklärbär aus und versuch das mal darzulegen.

Ein grundlegender Tipp voraus:
Madxhawk, Unitrader und SymTec betreiben eine Webseite, die so etwa das Wikipedia der Scripter in X ist.
Zu finden unter MSCI Onlinereferenz.
Dort findet man, unter dem Punkt Knowledgebase-->X3 Reunion/X3TC Befehlsreferenz, jeden einzelnen Befehl mit einer kurzen Erklärung und seiner Position im SE.

Schade eigentlich, das sich Egosoft nicht selbst durchringen konnte, eine vollständige Dokumentation ins Netz zu stellen. Das machen andere Spieleschmieden bedeutend besser, etwa Bohemia Interactive (mit der faktisch perfekten Onlinereferenz zu OFP) oder Bethesda (Morrowind, Oblivion).

Gut, genug gelabert...
...wie die einzelnen Befehle eingefügt werden, habe ich hier in diesem Forum schon mehrfach beschrieben, unter anderem in diesem Thread, zweiter Post und hier, drittletzter Post.

Wo die einzelnen Befehle, die verwendet worden sind, im SE angeordnet sind, versuche ich jetzt Zeile für Zeile zu erklären.

Zeile 1
001 $tempstore = $Station -> get max. store amount of ware $ware

Der dazugehörige Befehl lautet:

Code: Alles auswählen

<RetVar/IF><RefObj>->get amount store of ware <Var/Ware>
Zu finden ist dieser Befehl im SE unter

Code: Alles auswählen

Trade Commands-->for Stations
Zeile 2
002 $i = 0

Der dazugehörige Befehl lautet:

Code: Alles auswählen

<RetVar/IF><Expression>
Zu finden im SE unter:

Code: Alles auswählen

General Commands
Dieser Befehl ist eine Besonderheit im SE, da es mit ihm möglich ist, freien Variablen Werte zuzordnen und Bedingungen einzufügen.

Zeile 3
003 while $i != $wert

Der dazugehörige Befehl ist der gleiche wie in Zeile 2, also

Code: Alles auswählen

<RetVar/IF><Expression>
Also wieder unter

Code: Alles auswählen

General Commands 
zu finden.

Zeile 4
004 |$tmp = $Station -> add $tempstore units of $ware

Der dazugehörige Befehl lautet:

Code: Alles auswählen

<RetVar/IF><RefObj>add <Var/Number> units of <Var/Ware>
Zu finden im SE unter:

Code: Alles auswählen

Trade Commands
Zeile 5
005 |inc $i =

Der dazugehörige Befehl lautet:

Code: Alles auswählen

inc <RetVar>=
Zu finden unter

Code: Alles auswählen

General Commands
Zeile 6
006 @ |= wait 5000 ms

Der dazugehörige Befehl lautet:

Code: Alles auswählen

@ <RetVar> wait <Var/Number> ms
Wieder im SE unter

Code: Alles auswählen

General Commands 
zu finden.

Zeile 7
007 end

Der zugehörige Befehl lautet:

Code: Alles auswählen

end %u28conditional%u29
Zu finden im SE unter:

Code: Alles auswählen

General Commands-->Flow Control
Zeile 8
008 return null

Der zugehörige Befehl lautet:

Code: Alles auswählen

return <value>|NULL
Zu findem im SE unter:

Code: Alles auswählen

General Commands-->Script Calls
Ich hoffe, ich konnte Dir helfen...
...wenn nicht, dann frag´ einfach weiter. ;)

noch nen netten Tag
Taktkonform
Komm wir essen Oma - Satzzeichen können Leben retten!
grieche
Harmlos
Beiträge: 7
Registriert: Fr 17 Jul, 2009 3:29 pm
Lieblings X-Titel:

Beitrag von grieche »

taktonform,mein dank wird dich durchs universum begleiten!!!!!!

solltest du dich wieder wohler in deiner haut fühlen,darsft du gerne auf das angebot zurückgreifen.


gg
MatzeR
Moderator
Beiträge: 3810
Registriert: So 04 Jan, 2009 12:29 pm
Lieblings X-Titel:
Wohnort: Leitstern

Beitrag von MatzeR »

Nachdem mir das Universum zu langweilig wurde, habe ich folgende zwei kleinen Scripts geschrieben:

Script plugin.khaak.Agressivitat.anzeig
Version: 0
for Script Engine Version: 44

Description
Zeigt Khak Agresivitätsfaktor an
Arguments
Source Text

001 $level = get Kha'ak aggression level
002 write to player logbook $level
003 return null


Selbsterklärend.
Da der Aggressionslevel zwischen 0 und 100 liegen kann, ist die angezeigte Zahl im Logbuch interessant. Bei mir war sie nach Abschluss von FF '0'. Kein Wunder, dass die Khaak kaum Ärger machten.

Mit dem nächsten Script habe ich den Level auf '50' gesetzt, was dem Anfangszustand von TC entsprechen sollte:

Script plugin.khaak.agressivitaet.steig
Version: 0
for Script Engine Version: 44

Description
erhöht Khaak-Agressivitaet
Arguments
Source Text

001 set Kha'ak aggression level to 50
002 return null


Achtung: 'Kha'ak aggression level ' ist eine globale Variable, die bei jedem Start wieder eingelesen wird. Die Änderung müsste explizit zurückgenommen werden, im obigen Script also statt '50' eine '0' oder jede andere Zahl eingeben (maximal 100).

PS Juhuuu ich bin ein Scripter :-)
Einen Krieger erkennt man nicht an seinen Waffen, sondern an den Augen seiner Gegner!
Antworten