Kit Nr. 1 - 30.08.2007
SymTec ltd.
Was ist dieses Tutorial?
Dieses Tutorial (oder wie auch immer man es nennen mag) soll dir helfen, ein Schiffskommando auf einem Schiff zu registrieren (bzw. ein Stationskommando auf einer Station), sodass du ein Script auf einem Schiff starten kannst, ohne dazu den Scripteditor öffnen zu müssen.
Dazu ist ein bereits funktionierendes Beispiel eingefügt, das du nur noch entsprechend den eigenen Wünschen modifizieren musst, denn so schwer ist es eigentlich gar nicht. Alle hier erwähnten Dateien sind sowohl kommentiert, als auch als spätere "Kopiervorlage" unkommentiert vorhanden.
Für wen ist dieses Tutorial?
Dieses Tutorial ist für angehende Scripter in X3-Reunion, ab Spielversion V2.0.02. Du solltest schon einmal im Scripteditor gewesen sein und z.B. einen kleineren Geldcheat etc. geschrieben haben, da du so mit der (etwas gewöhnungsbedürftigen) Menüführung des Scripteditors vertraut bist. Dies ist in gewisser Weise Schritt 2 einer längeren Tutorial-Sammlung, wobei Schritt 1 und alle Schritte ab Schritt 3 noch nicht existieren.
Welche Tutorials sollte ich vor diesem hier machen?
Alle, die der Einführung in den Scripteditor dienen - zum Beispiel:
- Scripting Tutorial für Einsteiger von MADxHAWK
- Tutorial für den Script Editor von DWINO
- Scripting Anleitungen und Tutorials für Anfänger im X-Lexikon

Welche Tutorials sollte ich nach diesem machen?
Jeder das, was ihm am besten gefällt... in der Tutorial- und Tool-Sammlung sind viele Tutorials aufgelistet, denn je nach Programmiererfahrung und eigenen Vorlieben gibt es auch für fortgeschrittene Scripter eine große Auswahl an Möglichkeiten, seinen Scripting-Horizont zu erweitern.
Wo bleibt denn nun das Tutorial?
Du hast nun zwei Möglichkeiten, das Tutorial durchzuführen: Entweder, du lädst dir die Files herunter und nutzt die Files als Kopiervorlagen und funktionierende Beispieldateien, oder du liest es hier weiter und schreibst die Dateien dann selbst. Außer dem Windows-Texteditor und X³ werden keine weiteren Programme zum Scripten benötigt.
Download
(link auf downloadseite - .zip, 12kB, {6 .xml-Dateien, 1 readme.txt})
[ external image ]
Tutorial
readme.txt wrote:Was kannst, wirst und musst du an diesem Pack hauptsächlich verändern?
-> Die ID der Textdatei:
* Im Namen der Datei (498300.xml)
* In der Datei, etwa am Anfang der zweiten Hälfte
* Im Script setup.plugin.example.kit1
-> Den Kommandoslot des Kommandos:
* In der Textdatei auf den Seiten 2008, 2010, 2011 und 2022
* Im Script setup.plugin.example.kit1
-> Den Namen des setups:
* Im Script setup.plugin.example.kit1:
** Script mit "c" kopieren, alte Version löschen
-> Den Namen und Inhalt des Plugins:
* Im Script plugin.example.kit1:
** Script mit "c" kopieren, alte Version löschen
* Im Script setup.plugin.example.kit1: bei "global script map: set: key"
-> Den Namen der Globalen Variablen für die pageid:
* Im Script plugin.example.kit1
* Im Script setup.plugin.example.kit1
Wie gehst du vor:
1.: Plan machen: Was soll das Script können, und geht das überhaupt?
2.: IDs suchen: Sowohl die PageID als auch der Kommandoslot eines Scripts müssen einzigartig sein. Wenn du dein Script
veröffentlichen willst, muss es Slots belegen, die noch kein anderes Script in der Kompatibilitätsliste belegt.
3.: Dateien verschieben: Die Dateien "setup.plugin.example.kit1.xml" und "plugin.example.kit1.xml" müssen in den
"scripts"-Ordner der X3-Installation, die "498300.xml" in den "t"-Ordner. Zudem muss der Scripteditor InGame
aktiviert werden - das sollte man im Zweifel aber können, weil man es vor diesem Tutorial schon einmal gemacht
haben sollte. (Die x2scripts.xsl ist eine Stylesheet, mit der man den Scriptcode in Internetbrowsern betrachten
kann. Sie gehört in den "scripts"-Ordner, ist dort vermutlich aber schon vorhanden.)
4.: Textfile schreiben: Dort die Hinweise abarbeiten und deine individuellen Werte an den passenden Stellen eintragen.
5.: InGame: setup schreiben: Dort die Hinweise abarbeiten
6.: InGame: plugin schreiben: Letzte und größte Aufgabe.
7.: InGame: Betatesten: Tut das Script nun, was es soll?
8.: Hochladen? Dann:
* readme schreiben, alles zippen und hochladen (z.B.
* Thread öffnen, dabei möglichst genau das Script, die verwendeten Slots und auch Probleme beschreiben
* pageid und slots in der Kompatibilitätsliste (http://forum.egosoft.com/viewtopic.php? ... 24#1551024) bzw. deren
Diskussionsthema anmelden
Hilfe:
* Hilfen gibt es generell in allen X-Foren. Besondere Script-Hilfen gibt es z.B. bei:
http://forum.egosoft.com/viewforum.php?f=68
http://www.madxhawk.com/viewforum.php?f=4
http://www.seizewell.de/viewforum.php?selected_id=f21
http://cms.x-tec-online.de/viewforum.php?f=17
Weitere Hilfen gibt es im Egosoft-DevChat
http://www.egosoft.com/devnet/devchat/chat.php
und z.B. im irc, Netz insiderZ, Channels
#msci-online
-> http://www.madxhawk.com/chat.php
#x-tec
498300.xml wrote:<?xml version="1.0" encoding="UTF-8" ?>
<!-- Ship Command Kit - Scripting-Tutorial: -->
<!-- Der Header oben ist für jedes X3-Textfile gleich. Das eigentliche File beginnt mit der language-id: -->
<!-- Diese ist für die deutschen X3-Versionen die "49". Das sieht man sowohl am Dateinamen (498300.xml) als auch hier. -->
<!-- Weitere language id's sind: -->
<!-- 44: Englisch ; 07: Russisch ; 33: Französisch ; 39 Italienisch -->
<language id="49">
<!-- Die Nummer "8300", die sowohl im Dateinamen als auch später weiter unten zu finden ist, ist die sog. "pageid". -->
<!-- Sie muss zwischen 7000 und 9000 liegen. Da jedes Textfile eine eigene pageid haben MUSS, gibt es unter -->
<!-- http://forum.egosoft.com/viewtopic.php? ... 24#1551024 eine Kompatibilitätsliste, in der die ID jedes -->
<!-- öffentlichen Scripts eingetragen wird. -->
<!-- Die Textseiten 2008, 2010, 2011 und 2022 haben wichtige Aufgaben bei der Vergabe der Kommandoslots: -->
<!-- Seite 2008 bestimmt den Text, der im Scripteditor unter "Select Command/Signal" zu finden ist. Sobald ein -->
<!-- Kommandoslot vergeben ist, sollte hier statt dem vorherigen Defaultwert, etwa "COMMAND_TYPE_NAV_16", ein indi- -->
<!-- vidueller Name vergeben werden, der das Script identifizierbar macht - etwa in diesem Fall -->
<!-- "COMMAND_216_EXAMPLE_KIT1". -->
<!-- Seite 2010 ist der Text, der im Spiel ausgeschrieben als Kommandoname erscheint. Ein Kürzel des Namens erscheint -->
<!-- auf Seite 2011; mehr als ein paar Zeichen sollten hier nicht gewählt werden. -->
<!-- Seite 2022 enthält schließlich eine Beschreibung dessen, was das Kommando auslöst. Sie ist im Kommandomenü des -->
<!-- Schiffes mit "i" abrufbar, wenn das Kommando mit den Pfeiltasten gewählt wurde. -->
<page id="2008" title="script objects commands" descr="0">
<t id="216">COMMAND_216_EXAMPLE_KIT1</t>
</page>
<page id="2010" title="commands" descr=" ">
<t id="216">Beispielkommando Kit1</t>
</page>
<page id="2011" title="commands" descr=" ">
<t id="216">Bsp.K1</t>
</page>
<page id="2022" title="command info" descr=" ">
<t id="216">Dies ist ein Beispieltext.\n\033B©STL Software Development\033X \n\033BArgon Prime\033X</t>
</page>
<!-- Und wieder taucht die Nummer "8300" auf: Diese pageid ist die Textseite, auf der alle Texte geschrieben stehen, -->
<!-- die im Script gebraucht werden. title und description sind egal. Wichtig ist noch zu wissen, dass ein komplett -->
<!-- leerer text-tag nicht richtig gelesen werden kann. Daher sollte unter jeder textid mindestens ein Leerzeichen zu -->
<!-- finden sein, sonst sollte man die entsprechende textid gleich weglassen. -->
<page id="8300" title="Irgendein Titel" descr="Wenn nötig, Beschreibung der Textseite.">
<t id="001">Blubbertext</t>
<t id="100000">noch mehr Text</t>
<t id="7"> </t> <!-- kein Text-->
<t id="100">{8300,1}</t> <!-- Textreferenz-->
<!--(wird Text 8300-100 aufgerufen, steht dort nun "Blubbertext")-->
<t id="101">\033YGelber Text\033X</t>
<t id="102">%s</t> <!--Variable: Mit dem "sprintf"-Befehl kann hier im -->
<!--Scripteditor eine Variable eingefügt werden -->
<t id="103">Auf dem Schiff %s wurde das Beispielkommando gewählt.\n%s</t>
<t id="104">Es befindet sich in \033YSektor %s\033X, als Scriptargument wurde der Sektor %s gewählt, und die pageid ist %s.</t>
</page>
<!-- So lange man in einer pageid jede textid nur einmal vorkommen lässt, ist jede Reihenfolge der einzelnen Text- -->
<!-- stücke erlaubt. Texte aus Dateien, die früher geladen wurden, werden bei identischer page- UND textid von den -->
<!-- neuen Texteinträgen überschrieben. Das ist besonders sinnvoll, um etwa Sektoren neu zu benennen etc. -->
<!-- Durch Angabe der pageid und textid in geschweiften Klammern kann man auf ein anderes Textstück verweisen, das -->
<!-- dann an dieser Stelle in den Text einefügt wird. -->
<!-- Durch die Zeichenfolge "\033" und einen Buchstaben kann der Text eine andere Farbe bekommen. Mit \033X endet -->
<!-- diese Formatierung: \033A - Grau, \033B - Blau, \033C - Cyan, \033G - Grün, \033M - Magenta, \033R - Rot -->
<!-- \033W - Weiß, \033Y - Gelb, \033X - Ende der Farbformatierung -->
<!-- Am Ende wird der language-Tag geschlossen, und das file kann gespeichert werden.-->
</language>
setup.plugin.example.kit1.xml wrote:Version: 1000
for Script Engine Version: 32
Description
Setup für das Example Ship Command Kit
Arguments
Source Text
001 * Das setup-Script wird bei jedem Spielstart und bei der Aktivierung des Script-
002 * editors geladen. Dies ist der Fall, da sein Name mit ''setup.'' beginnt. Hier
003 * werden die für ein Script nötigen Globalen Variablen gesetzt, die Textdateien
004 * geladen und die Kommandos in Schiffen und Stationen mit den Scripts verbunden,
005 * die sie ausführen.
006
007 * --------------------------------------------------------------------------------
008 * Die ''pageid'' beschreibt, auf welcher Textseite die Nachrichtentexte für ein
009 * Script zu finden sind. Pageids liegen zwischen 7000 und 9000. Mehr dazu im Text-
010 * file. In diesem Beispiel ist das Textfile die 498300.xml, die pageid daher 8300:
011
012 $pageid = 8300
013
014 * Diese pageid bezeichnet sowohl den Namen des Textfiles, das nun geladen werden
015 * soll, als auch die ID jedes Textes, der aus ihm geladen werden soll. Daher wird
016 * erstens der Text aus dem File in das Spiel geladen, und zweitens eine Globale
017 * Variable gesetzt, sodass die ID des Textfiles an jeder Stelle im Script wieder
018 * aufgerufen werden kann und daher bei einer Änderung der pageid nur an einer
019 * Stelle etwas geändert werden muss:
020 * 1.: Textfile laden:
021
022 load text: id=$pageid
023
024 * 2.: Globale Variable setzen. Eine GV hat einen Namen und einen Wert. Der Name
025 * ist vom Typ ''string'' und sollte möglichst einzigartig sein, um Konflikte mit
026 * anderen Scripts zu verhindern. Der Wert ist die Variable ''pageid''.
027
028 set global variable: name='global.example.scc.pageid' value=$pageid
029
030 * --------------------------------------------------------------------------------
031 * Nun kann ein Kommandoslot ausgewählt werden, auf dem das Script registriert
032 * wird. Welcher das ist, bestimmt das Textfile, entsprechend sind auch dort die
033 * Erklärungen zu finden. In unserem Beispiel ist das Kommando die 216 (also das
034 * erste Navigationskommando für Schiffe), das nun festgelegt wird: Es heißt
035 * 'COMMAND_TYPE_NAV_16'' und ist in der Liste ''Select Command/Signal'' zu finden.
036
037 $command = COMMAND_TYPE_NAV_16
038
039 * Jedes Script hat eine Ware, die nötig ist, damit es auf dem entsprechenden
040 * Schiff gestartet werden kann. Soll keine Ware nötig sein, so gibt man 'TRUE' als
041 * Ware ein:
042
043 $ware = [TRUE]
044
045 * Nun wird das Kommando mit dem nötigen Upgrade verknüpft:
046
047 set script command upgrade: command=$command upgrade=$ware
048
049 * Als letzter Schritt wird allen TS des Spielers dieses Kommando gesetzt. Das
050 * Script, das durch dieses Kommando gestartet werden soll, heißt
051 * ''plugin.example.kit1'' und kann erst ausgewählt werden, wenn es existiert.
052 * Natürlich sollte kein fertiges Script am Ende diese Beispielnamen tragen - zum
053 * Umbenennen eines Scripts muss man es in der Übersicht mit ''c'' kopieren.
054
055 global script map: set: key=$command, class=TS, race=Player, script='plugin.example.kit1', prio=0
056
057 * Und ein letztes: Auch Kampfdrohnen zählen als Schiffe - ein Schiffskommando
058 * sollte auf ihnen nie ausführbar sein:
059
060 global script map: ignore: key=$command, class=Fight drone, race=Player
061
062 * Dieses Script hat 9 Zeilen - es ist eines der kleinsten und wichtigsten Scripts!
063 return null
>>>Downloadseite<<<plugin.example.kit1.xml wrote:Version: 1000
for Script Engine Version: 32
Description
Beispiel für das Example Ship Command Kit
Arguments
* 1: Argument.Sektor , Var/Sector , 'Arg1: Sektor'
Source Text
001 * Dieses Script läuft auf dem Schiff, auf dem das Kommando gestartet wurde. Die
002 * Argumente oben muss der Spieler beim Starten des Scripts auswählen oder eingeben
003 * Nun muss noch die pageid geladen werden, die beim setup global gespeichert wurde
004 * und eine Nachricht wird ins Spielerlog geschrieben, dass alles funktioniert hat.
005
006 $pageid = get global variable: name='global.example.scc.pageid'
007
008 $message = sprintf: pageid=$pageid textid=104, [SECTOR], $Argument.Sektor, $pageid, null, null
009 write to player logbook: printf: pageid=$pageid textid=103, [THIS], $message, null, null, null
010
011 return null
< keywords Tutorial Schiffskommando Stationskommando Kommandokonsole Kommando Registrieren Kommandoslot >