Wie scripte ich ein Schiff ?
Moderator: Moderatoren
Desweiteren hab ich mal ein Beitrag wie man schiff und Ware erscriptet, aber die ist leider in vergessenheit geraten und bzw. wahrscheinlich kein Interesse oder kompliziert.
Hier wäre mein Beitrag:
http://seizewell.de/viewtopic.php?t=561 ... erscripten
mfg versando
- jakob.fugger
- Scharfschützen-Anwärter
- Beiträge: 274
- Registriert: So 11 Nov, 2007 6:26 am
- Lieblings X-Titel: X3 TC
- Taktkonform
- Feldwebel
- Beiträge: 3119
- Registriert: Di 24 Jun, 2008 4:28 pm
- Lieblings X-Titel:
- Wohnort: Saxonia
Du hättest einfach bei Rasse Deinen Spielernamen auswählen müssen, dann wäre das Schiff sofort Dein gewesen. Sofern Du das überhaupt vor gehabt hast.jakob.fugger hat geschrieben:Die Anleitung war in Ordnung. Sogar ich habe ein Schiff gezaubert (in Blau). Er fliegt leider schneller als mein Raumanzug, somit kann ich es noch nicht entern.
Demnächst gibt es dann die Anleitung zum automatischen Ausrüsten mit Waffen und Raketen.
noch nen netten Tag
Taktkonform
- jakob.fugger
- Scharfschützen-Anwärter
- Beiträge: 274
- Registriert: So 11 Nov, 2007 6:26 am
- Lieblings X-Titel: X3 TC
- Taktkonform
- Feldwebel
- Beiträge: 3119
- Registriert: Di 24 Jun, 2008 4:28 pm
- Lieblings X-Titel:
- Wohnort: Saxonia
Demnächst war vielleicht ein wenig "untertrieben", aber da ich derzeit ein paar Tage Urlaub habe und die Welt draußen im Schnee versinkt, dachte ich mir, ich setze das hier mal fort.Taktkonform hat geschrieben: Demnächst gibt es dann die Anleitung zum automatischen Ausrüsten mit Waffen und Raketen.
Vorbemerkung zu TC
Scripte aus Reunion übernehmen
Seit einigen Tagen besitze ich ja nun endlich auch Terran Conflict und mein erster Weg war es den SE zu erkunden, was sich da so getan hat, und was nicht.
Erstaunlich wenig...
...sieht man mal von einer Menge neuer Befehle ab, die die Bedienbarkeit doch um einiges steigern.^^
Aber die Hauptsache...
...fast alle Scripte aus Reunion funktionieren auch in Terran Conflict.
So funktionieren die hier beschriebenen Methoden auch in TC.
Dazu muß man nur die Engine-Version (engine version - Eintrag im Script) auf 40 bzw 44 (Version 2.5 mit dem Befehlsupgrade) ändern.
Wie mache ich das?
Öffnet das betreffende Script im Windows-Editor und sucht nach folgendem Eintrag:
Code: Alles auswählen
<engineversion>33</engineversion>
Desweiteren gibt es einen zweiten Eintrag, der geändert werden muß:
Code: Alles auswählen
<sval type="int" val="33"/>
Einschränkungen
Scripte, die mit Waren, Warenklassen und Zurordnungen zu Warenklassen jonglieren, sollten nicht 1 zu 1 mit der oben beschriebenen Methode umgesetzt werden.
Der Grund ist simpel...
...es hat sich einiges getan bei den Waren und Produkten, so daß es vorkommen kann, das es die Waren aus Reunion gar nicht mehr gibt, bzw. sich ihre Zuordnung geändert hat.
Bevor man solche Scripte portiert, sollte man sich die Zuordnungen anschauen.
So, genug des Vorgeplänkels. Kommen wir zum Eingemachten.
Schiff mit maximaler Schildanzahl und maximaler Schildstärke ausrüsten
Nachdem ich weiter oben beschrieben habe, wie man ein Schiff überhaupt ins Spiel bekommt, soll nun hier erklärt werden, wie das Schiff auch gleich mit den maximal möglichen Schilden und Schildstärken ausgerüstet wird.
Herausfinden, welchen Schildtyp das Schiff maximal tragen kann
Wie der Titel schon sagt, müssen wir erst einmal herausbekommen, welchen maximalen Schildtyp das zu erstellende Schiff überhaupt benutzen kann.
Das erledigt die folgende Zeile:
Code: Alles auswählen
<RetVar/IF> = <RefObj> -> get max. shield type that can be installed
Wiederum beginnt die Zeile mit einer Variablen <RetVar/IF>, die zuerst definiert werden muß.
Der SE (Script Editor) wird also, nach Auswahl dieser Zeile, zur Eingabe, bzw. Auswahl, einer Variablen oder einer Bedingung (IF) auffordern.
Ich für meinen Teil wähle immer Namen, die irgendwas mit dem Sinn und Zweck der Variablen zu tun haben, das macht es mir leichter, die Variablen später zuzuorden.
Als Nächstes fordert die Zeile ein referenziertes Objekt <RefObj> an.
Dieses Objekt ist das zu erstellende Schiff, bzw. die Variable die dafür erstellt wurde.
Die fertige Zeile, mit den eingetragenen Variablen, sieht dann so aus:
Code: Alles auswählen
$ShieldType = $cship -> get max. shield type that can be installed
Nachdem wir nun wissen, welchen maximalen Schildtyp das Schiff tragen kann, müssen wir noch herauslesen, wieviele Schilde es überhaupt installieren kann.
Diese Aufgabe erledigt die folgende Zeile:
Code: Alles auswählen
<RetVar/IF> <RefObj> get number of shield bays
<RetVar/IF> ist wieder eine Variable die es zu erstellen gilt.
<RefObj> ist wieder das Objekt, auf das sich diese Angabe/Abfrage bezieht.
Fertig sieht die Zeile dann so aus:
Code: Alles auswählen
$ShieldMax = $cship -> get number of shield bays
Nun haben wir alle Informationen, um die Schilde auf dem Schiff zu installieren.
Diese Aufgabe erledigt die folgende Zeile:
Code: Alles auswählen
<RetVar/IF> <RefObj> install <Var/Number> units of <Var/Ware>
Besonderheit an dieser Zeile ist, das die Eingangsvariable <RetVar/IF> weggelassen wird, also anstatt der Variablen oder Bedingung der Eintrag no returnvalue aus der Liste gewählt wird.
<Var/Number> wird mit der Varibalen $ShieldMax befüllt und
[/color=yellow]<Var/Ware>[/color] mit der Variablen $ShieldType.
Die fertige Zeile sieht dann so aus:
Code: Alles auswählen
= $cship -> install $ShieldMax units of $ShieldType
Code: Alles auswählen
$ShieldType = $cship -> get max. shield type that can be installed
$ShieldMax = $cship -> get number of shield bays
= $cship -> install $ShieldMax units of $ShieldType
Anmerkungen
Dieser Post bezieht sich direkt, was Variablennamen und referenzierte Objekte betrifft, auf den Post, in dem das Erstellen der Schiffe erklärt wird.
Waffen auswählen und installieren
Vorbemerkungen
Nun wird es Ernst. Das Schiff soll Waffen bekommen. Hier tauchen, innerhalb dieses Scripts, zum ersten Mal Schleifen auf, da es ja auch Schiffe gibt, die mehr als ein Turret (Geschützkanzel) haben. Um diese zu bestücken muß dieser Scriptteil mehrfach ausgeführt werden, bis eben alle Turrets mit Waffen versorgt sind.
Was ist eine Schleife?
Eine Programmierschleife ist ein Code, der solange ausgeführt werden soll, bis eine zuvor festgelegte Bedingung erfüllt oder eben nicht erfüllt ist.
Wie mach ich das im SE, bzw. was brauche ich dafür?
Nun, zuerst einmal müssen eine, bzw. mehrere Bedingungen geschaffen werden, damit die Schleife überhaupt weiß, von was sie ausgehen kann und wann sie enden soll.
In meinem Beispiel will ich ja nun das Schiff mit Waffen versorgen. Dazu brauche ich erst einmal eine Grundbedingung, die sagt wo die Schleife ansetzen soll.
Code: Alles auswählen
$Turret = 0
Ich habe mir also eine Variable mit dem Namen $Turret erstellt und diese auf den Wert 0 gesetzt.
Als Nächstes muß ich wissen, wann die Schleife beendet werden soll.
Hier also, wenn alle Turrets mit Waffen versorgt sind.
Dazu muß ich erst einmal herausbekommen, wieviele Turrets es denn überhaupt am zu erstellenden Schiff gibt.
Folgende Zeile übernimmt diese Aufgabe:
Code: Alles auswählen
<RetVar/IF> <RefObj> get number of turrets
<RefObj> ist wieder das referenzierte Objekt, also unser zu erstellenden Schiff, das ja bekanntermaßen den Variablennamen $cship trägt.
Die fertige Zeile sieht dann so aus:
Code: Alles auswählen
$TurretMax = $cship -> get number of turrets
Zeit die Schleife zu setzen.
Code: Alles auswählen
while $Turret < $TurretMax
Erstellt wurde diese Zeile mit dem Befehl <RetVar/IF><Expression>, der unter General Commands zu finden ist.
Soviel erstmal zur Schleife...
...da kommt später noch mehr, denn irgendwie müssen wir dem SE ja auch sagen, wann Schluß ist.
Waffentypen auswählen und gruppieren
Leider gibt es weder in Reunion, noch in TC (zumindest habe ich bisher keinen solchen in TC gefunden), einen so komfortablen Befehl, wie etwa die Auswahl der Schildtypen, für die Waffen. Wir müssen also einen kleinen Umweg gehen und eine Vorauswahl treffen.
Anmerkung
Natürlich kann man auch hier wieder mit Argumenten arbeiten, also dem Spieler die Auswahl des Waffentyps überlassen, aber ich werde hier, aus Gründen der Darstellbarkeit, erst einmal mit festen Waffentypen hantieren.
Um die Laser später auswählen zu können, müssen wir erst einmal eine Variable haben, die je eine Waffe darstellt.
Code: Alles auswählen
$LaserType1 = null
Das erledigt wieder das Kommando <RetVar/IF><Expression>.
Nun da wir die Variable haben, müssen wir ihr auch einen Inhalt zuweisen.
Dazu sollten wir allerdings erst einmal nachschauen, ob denn der gewünschte Inhalt auch in den Turm des gewünschten Schiffes paßt.
Folgende Zeile erledigt diese Arbeit für uns:
Code: Alles auswählen
<RetVar/IF> <RefObj> fits laser <Var/Ware> into turret <Var/Number>
<RetVar/IF> ist diesmal keine Variable, sondern eine Bedingung nähmlich skip if not.
Ausgewählt werden kann diese aber auch über das PopUp-Fenster, das sich nachdem dem Aufruf der Befehlszeile öffnet.
<RefObj> müßte euch nun langsam zum Hals raushängen und klar sein, das damit nur das zu erstellende Schiff, bzw. dessen Variablennamen gemeint sein kann.
<Var/Ware> ist der Waffentyp der gewünscht ist, den man bei Anwahl dieser Option aus der Liste der Waren auswählen kann.
<Var/Number> ist der Variablenname des Turrets.
Die fertige Zeile sieht dann folgendermaßen aus:
Code: Alles auswählen
skip if not $cship -> fits laser Alpha Partikelbeschleuniger into turret $Turret
Nun müssen wir noch sagen, das $LaserType1 eben der Alpha Partikelbeschleuniger ist.
Dazu dient die folgende Zeile:
Code: Alles auswählen
§Lasertype1 = Alpha Partikelbeschleuniger
Soweit so gut...
...wir haben also einen Waffentyp definert, geprüft ob der paßt, und wenn nicht, dann eben den Waffentyp ausgeschlossen.
Nun müssen wir noch herausfinden, wieviele Waffenslots der Turm denn eigentlich hat.
Dazu kommt die nächste Zeile ins Spiel:
Code: Alles auswählen
<RetVar/IF> <RefObj> get max. number of lasers in turret <Var/Number>
<RefObj> jaja, das zu erstellende Schiff, bzw. sein Variablenname.
<Var/Number> ist der aktuelle Turret, hier mit seinem Variablenname, also $Turret.
Zu finden ist dieser Befehl ebenfalls unter Fly Commands im SE.
Nun wissen wir also, wieviel Laser der Turm hat, und können uns daran machen, den ausgwählten Waffentyp zu installieren.
Dazu benötigen wir die folgende Zeile, die sich übrigens nicht unter Fly Commands verbirgt, sondern unter Trade Commands:
Code: Alles auswählen
<RetVar/IF> <RefObj> install <Var/Number> units of <Var/Ware>
Nur noch die fertige Version der Zeile:
Code: Alles auswählen
= $cship -> install $lasermax units of $Lasertype1
Richtig, es soll ja Schiffe geben, die mehr als ein Turret haben, wobei die Frontbatterie hier ebenfalls als Turret zählt.
Also kommt unsere Schleife wieder ins Spiel...
...wir haben da bestimmt, das $Turret = 0 ist.
Nun drehen wir einfach am Rad und erhöhen den Wert $Turret um 1.
Das macht die folgende Zeile:
Code: Alles auswählen
inc $Turret=
Danach sollten wir die Schleife beenden, damit sie nicht endlos weiterdreht.
Ein einfaches
Code: Alles auswählen
end
Dieses end versteckt sich im SE unter General Commands-->Flow Control. Genau heißt sie dort end (conditional).
Das gesamte Scriptstück sieht dann so aus:
Code: Alles auswählen
$Turret = 0
$TurretMax = $cship -> get number of turrets
while $Turret < $TurretMax
$Lasertype1 = null
skip if not $cship -> fits laser Phasenrepetiergeschütz into turret $Turret
$Lasertype1 = Phasenrepetiergeschütz
$lasermax = $cship -> get max. number of lasers in turret $Turret
= $cship -> install $lasermax units of $Lasertype1
inc $Turret =
end
Natürlich kann man auch gleich mehrere Waffentypen erstellen und nacheinander durchprobieren, ob sie in den Turm passen. Ich bin derzeit bei neun verschiedenen $Lasertype angekommen, die nacheinander, mit verschiedenen Bedingungen geprüft und installiert, bzw. eben nicht installiert werden, angekommen.
Das Ganze würde in etwa so aussehen:
Code: Alles auswählen
$Turret = 0
022 $TurretMax = $cship -> get number of turrets
023 while $Turret < $TurretMax
024 |$Lasertype1 = null
025 |$Lasertype2 = null
026 |$Lasertype3 = null
027 |$Lasertype4 = null
028 |$Lasertype5 = null
029 |skip if not $cship -> fits laser Flakartillerie into turret $Turret
030 ||$Lasertype1 = Flakartillerie
031 |skip if not $cship -> fits laser Energieplasmawerfer into turret $Turret
032 ||$Lasertype2 = Energieplasmawerfer
033 |skip if not $cship -> fits laser Phasenrepetiergeschütz into turret $Turret
034 ||$Lasertype3 = Phasenrepetiergeschütz
035 |skip if not $cship -> fits laser Energiepulskanone into turret $Turret
036 ||$Lasertype4 = Energiepulskanone
037 |skip if not $cship -> fits laser Photonenimpulskanone into turret $Turret
038 ||$Lasertype4 = Photonenimpulskanone
039 |$lasermax = $cship -> get max. number of lasers in turret $Turret
040 |skip if not $Lasertype1
041 ||= $cship -> install $lasermax units of $Lasertype1
042 |skip if not $Lasertype1 AND ! $Lasertype2
043 ||= $cship -> install $lasermax units of $Lasertype2
044 |skip if not $Lasertype1 AND $Lasertype2
045 ||= $cship -> install $lasermax units of $Lasertype2
046 |skip if not $Lasertype3
047 ||= $cship -> install $lasermax units of $Lasertype3
048 |skip if not $Lasertype4
049 ||= $cship -> install $lasermax units of $Lasertype4
050 |skip if not $Lasertype5
051 ||= $cship -> install $lasermax units of $Lasertype5
052 |inc $Turret =
053 end
Ohne Bedingung wird nur überprüft, ob die Waffe in den Turm passt und dann installiert. Ist der Turm beim nächsten Durchlauf der Schleife schon mit Waffen belegt, und die nächste Waffengruppe ließe sich auch installieren, wird das Script die benötigte Anzahl von Waffen der neuen Waffengruppe(n) in den Lagerraum des Schiffes stellen.
Ist dieser voll, wird jede weitere Anweisung ignoriert.
Ähm, der letzte Auszug stammt bereits aus Terran Conflict, also nicht wegen der Waffentypen wundern.
Ich hoffe, ich konnte mich einigermaßen verständlich machen und wünsche Euch
noch nen netten Tag
Taktkonform
- Taktkonform
- Feldwebel
- Beiträge: 3119
- Registriert: Di 24 Jun, 2008 4:28 pm
- Lieblings X-Titel:
- Wohnort: Saxonia
...kann ich eigentlich einen Post zwei Attachments verpassen? Und wenn ja, wie?
Nun zum eigentlichen Thema:
Mein Postfach lief in letzter Zeit über mit der Bitte, das Schiff-erstellen-Script doch bitte mit einem Kommandoslot zu verbinden, um es "benuterfreundlicher" zu machen.
Ich habe mich zwar lange geweigert das zu tun, einfach weil ich einen Cheat nicht ganz sooo einfach ins Spiel einbringen wollte, aber nun ist der Punkt erreicht, wo ich mich nicht mehr wehren kann.
Im Anhang ist jetzt das Script mit einem Kommandoslot versehen. Installation und Bedienung stehen in der beigefügten Readme.
Technisches:
Scriptdateien
aa.create.player.ship.xml
setup.ship.create.cheat.xml
T-File
497376.xml
Sonstiges
readme.txt
Kommandoslot
COMMAND_PIRACY_34
Page-ID
7376
noch nen netten Tag
Taktkonform
Hier ist der Downloadlink.