<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.omnibussimulator.de/omsiwikineu.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marcel+Kuhnt</id>
	<title>OMSIWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.omnibussimulator.de/omsiwikineu.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marcel+Kuhnt"/>
	<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Spezial:Beitr%C3%A4ge/Marcel_Kuhnt"/>
	<updated>2026-04-10T08:43:47Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Hofdatei&amp;diff=1575</id>
		<title>Hofdatei</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Hofdatei&amp;diff=1575"/>
		<updated>2018-08-18T16:43:12Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: Änderung 1574 von Tatra (Diskussion) rückgängig gemacht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Die Hofdatei ist eine einfache Textdatei und dient dem Bus als Informationsort, für die im und am Bus möglichen Anzeigen. Sie enthält die IBIS-Codes für die Endstellen, alle Endhaltestellen und Haltestellen, sowie die möglichen Routen. Ohne eine passende Hofdatei, kann ein Bus keinerlei Informationen ausgeben, was dieser auf einer Map, als Fahrziel oder andere Informationen, anzeigen soll. Die Hofdatei muß sich im Ordner des Busses befinden und dient dem Spielerbus, sowie dem KI-Bus (mit Fahrplan) als Grundlage zum Anzeigen des Fahrzieles.&lt;br /&gt;
&lt;br /&gt;
Hier soll es um den Aufbau einer Hofdatei gehen, wie man eine Hofdatei erstellt und es soll die &amp;quot;universelle Hofdatei&amp;quot; erklärt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Hofdateien für Omsi''' =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Was ist eine Hofdatei''' ==&lt;br /&gt;
&lt;br /&gt;
Eine Hofdatei ist die Grundlage, um einen Bus auf einer Linie einer Map fahren zu können. Ohne Hofdatei kann der Bus keine Informationen anzeigen (Matrix, Rollbänder) und dadurch steigen keine Fahrkunden ein. Diese beinhaltet eine Liste der Endhaltestellen einer Karte (alle Endstellen, ob auf der Map vorhanden oder nicht), alle auf der Map vorhandenen Haltestellen und die Routen der einzelnen Linien. Sie dient lediglich der Information der Anzeigen und die Audiowiedergabe der Haltestellen / Endstellen im und am Bus. Nur über die Hofdatei wird eine vorgegebene Linie (im Editor) mit den Anzeigen identifiziert.&lt;br /&gt;
Die in der Hofdatei eingetragenen Routen geben nicht den Linienverlauf in Omsi vor, dies wird über den Fahrplan im Editor gestellt. Aber die Hofdatei dient der Informationsausgabe für die Zielanzeigen im Bus, die Innenanzeigen im Bus, die Anzeigen im Informationsgerät (IBIS, IBIS 2, EFAD, Atron, INIT usw) und die Texturnamen der Rollbandtexturen, sowie den passenden Ansagen.&lt;br /&gt;
Eine Hofdatei muß im Busordner vorliegen (in keinem Unterordner des Busses) und muß als Endung .hof haben. Diese Datei kann mit einem Editor oder Schreibprogramm erstellt werden, muß aber dann als Textdatei.txt abgespeichert werden. Schlußendlich wird dann der Dateiname .txt gelöscht und durch .hof ersetzt.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Externe Programme zum Erstellen einer Hofdatei''' ==&lt;br /&gt;
&lt;br /&gt;
Um eine Hofdatei zu erstellen, gibt es mehrere Möglichkeiten. Man kann eine Hofdatei erstellen, indem man mit Notepad von Windows, eine Textdatei erstellt- Dieses Programm ist standardmäßig in Windows dabei. Für große und umfangreiche Hofdateien, verliert man aber hier schnell den Überblick. Wahlweise kann man auch mit [https://notepad-plus-plus.org/ Notpad++] arbeiten. Dieses Programm kann kostenfrei im Internet runtergeladen und installiert werden.&lt;br /&gt;
Eine weitere Möglichkeit bietet auch der [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=22| HofCreator von Jan Kiesewalter]. Dieses Programm erstellt Hofdateien für Omsi 1. Außerdem gibt es für dieses Programm noch Templates, um für weitere Busse eine passende Hofdatei zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Für Omsi 2, empfielt sich [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=40888&amp;amp;highlight=| '''HOF Suite'''] vom User '''Rumpelhans'''. Damit bekommt man eine übersichtliche Arbeitsfläche um einfach und schnell, eine oder mehrere Hofdateien zu erstellen. Dies geht dann komplett ohne Fehler. Auch dieses Programm ist kostenlos auf der Omsi-WebDisk zu bekommen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Aufbau einer Hofdatei''' ==&lt;br /&gt;
&lt;br /&gt;
Man kann reinschreiben was man möchte, solange es nicht am Zeilenanfang steht (einmal TAB drücken) da es sonst zu &lt;br /&gt;
Fehlermeldungen beim einlesen der Hofdatei kommen kann. Alles was nicht am Zeilenanfang steht, wird von Omsi nicht &lt;br /&gt;
erkannt und daher nicht beachtet.&lt;br /&gt;
Was am Zeilenanfang steht wird von Omsi beachtet und ausgewertet. Zuerst muß ein Befehl geschrieben werden. Nach dem Befehl kommen eventuell Informationen der sich auf den Befehl bezieht und eine Identifikation oder Zuordnung. Erst dadrauf folgen die einzelnen Strings, für die einzelnen Informationsgeräte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Allgemeiner Aufbau einer Hofdatei - interne Informationen für Omsi''' ===&lt;br /&gt;
&lt;br /&gt;
In der Hofdatei ist dies ein wiederkehrender Prozess. In eckigen Klammern werden Befehle geschrieben und direkt darunter die Strings. Ein String ist ein Eingabewert der einen Verweis auf Punkte einer Map haben kann, oder einen Informationswert für eine Anzeige. Der Aufbau der einzelnen Befehle erklärt sich später bei den einzelnen Bereichen einer Hofdatei.&lt;br /&gt;
&lt;br /&gt;
Eine Hofdatei gliedert sich in 4 Bereiche&lt;br /&gt;
#Teil 1 - Informationen zur Hofdatei&lt;br /&gt;
#Teil 2 - Liste der Endhaltestellen&lt;br /&gt;
#Teil 3 - Liste der Haltestellen&lt;br /&gt;
#Teil 4 - Linienlisten der einzelnen Routen&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Aufbau des ersten Bereiches einer Hofdatei''' ===&lt;br /&gt;
&lt;br /&gt;
Der erste Bereich enthält Informationen, wo sich bestimmte Ordner befinden, die der Bus später benötigt, wie Rollbandtexturen, Steckschildtexturen oder Ansagen, Anzahl der verwendeten Strings in den Bereichen 2 und 3.&lt;br /&gt;
Der erste Befehl ist der Name der Hofdatei, so wie diese später im Auswahlmenü angezeigt wird. Der Name sollte passend zur Map sein und, falls die Chronologiefunktion benutzt wurde, auch die Zeit. Bedenke dabei, daß auch andere User die eine Strecke erstellen den gleichen Namen nutzen könnten, wenn deren Strecke zum Beispiel real ist, während die eigene fiktiv erstellt wurde.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[name]&lt;br /&gt;
Spandau 1990&lt;br /&gt;
&lt;br /&gt;
[servicetrip]&lt;br /&gt;
Betriebsfahrt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zuerst folgt der Name, damit Omsi diese Hofdatei zuordnen kann. Dies ist besonders beim KI-Verkehr wichtig. Wenn der Name mit dem Eintrag in der AI-List nicht übereinstimmt, können die KI-Busse nichts anzeigen. Diese Eintrag muß sich aber nicht auf den Namen der Textdatei beziehen. Vorteilhaft wäre es aber auf jeden Fall.&lt;br /&gt;
Servicetrip gibt an, was ein Bus schildern soll, wenn er nicht auf einer Linie fährt. Das sind unter anderem Ein- und Aussetzfahrten. Dazu muß Betriebsfahrt später eingetragen werden und als &amp;quot;nicht einsteigen&amp;quot; markiert werden, mit dem Befehl: [addterminus_allexit].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[global_strings]&lt;br /&gt;
6&lt;br /&gt;
Spandau_old&lt;br /&gt;
Spandau&lt;br /&gt;
Spandau_90&lt;br /&gt;
3&lt;br /&gt;
8&lt;br /&gt;
16&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl [Global_Strings] wird angegeben, wie die Ordner heißen, die Informationen zu der Karte haben. Diese Strings sind festgelegt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
6             - zeigt an wieviele Strings unter diesem Befehl folgen&lt;br /&gt;
Spandau_old   - Name des Unterordners der die Ansagen der Karte enthält. Dieser Unterordner muß unter&lt;br /&gt;
                Vehicles\Announcements&lt;br /&gt;
                angelegt werden. Diese einzelnen Ansagen der Haltestellen und Endhaltestellen, sollten im &lt;br /&gt;
                Audioformat .wav enthalten sein. Die Dateinamen der Audiofiles sollten einen Bezug&lt;br /&gt;
                zur Haltestelle / Endhaltestelle haben.&lt;br /&gt;
Spandau       - Unterordner im Ordner Anzeigen für die Rollbandtexturen&lt;br /&gt;
Spandau_90    - Unterordner für die zusätzlichen Seitenschildtexturen.&lt;br /&gt;
4             - Ibis-Specialcode die auf dieser Map verwendet werden können. Diese Zahl gibt an,&lt;br /&gt;
                welche Liniencodes mit Buchstaben auf speziellen Linien genutzt werden.&amp;lt;/pre&amp;gt;&lt;br /&gt;
*String 4= 900'er-Linien (Anzeige der Linie N.. oder ..N) &lt;br /&gt;
*String 5= 800'er-Linien (Anzeige der Linie X) &lt;br /&gt;
*String 6= 500'er-Linien (Anzeige der Linie M)&lt;br /&gt;
&lt;br /&gt;
Dieser Bereich ist nur für Omsi 2 wichtig, in Omsi 1 hingegen entfällt dieser Befehl und die Eintragungen, weil sich die entsprechenden Dateien in den Unterordnern des jeweiligen Busses befinden bzw. Funktionen wie Seitenschilder nicht funktionieren.&lt;br /&gt;
Die Ziffern darunter können beliebig gesetz werden, wenn man Linien einfach mit Buchstaben ausstatten möchte. Erstellt man in der Matrix.osc oder einer vergleichbaren Datei unter dem IBISCode 00016 den Buchstaben &amp;quot;A&amp;quot;, so gibt man oben die Zahlen vorn für den Hunderter Bereich ein, die später mit dem entsprechenden Buchstaben versehen wird. Möchte man also auf einer Linie die Linie 83A mit dem Buchstaben &amp;quot;A&amp;quot; versehen und diesen Buchstaben mit der 800-er Linie versehen, trägt man im 2. Zahlenstring die 16 ein. Damit ergibt sich dann die IBIS-Eingabe: Linie/Kurs: 88300 und der Bus schildert dann 83A.&lt;br /&gt;
Bleiben die jeweiligen Strings leer, kann für die Map die Linien wie gewohnt eingetragen werden, was dann notwendig ist, wenn eine Linie im 500-er, 800-er oder 900-er Bereich existiert. Werden die Codes oder einer der Codes nicht gebraucht, trägt man entweder die Null ein, oder man kürzt die Stringanzahl auf 3, wobei die Liniencodes nichtmehr gelesen werden. Mit dem oberen Beispiel, würde ein Bus dann die Linie 883 anzeigen.&lt;br /&gt;
In der Matrix.osc kann jeder beliebige Buchstabe mit einem der 3 Ziffernplätze belegt werden. Die Zuordnung, welcher Buchstabe wo genau in der Linienanzeige angezeigt wird, wird generell nur in der Matrix.osc eingetragen. Mit Hilfe des Codes, kann dann der Buchstabe über den zugordneten Code, gesetzt werden.&lt;br /&gt;
Übrigens, muß eine Matrix nicht zwangsläufig mit dem Dateinamen Matrix.osc gesteuert werden. Der Dateiname ist frei wählbar. So kann auch die Datei VMatrix.osc oder Matrix_d.osc heißen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Befehle werden nicht in eckigen Klammern geschrieben. Sie enthalten nur die Information, wieviele Strings in den Bereichen 2 und 3 folgen, damit Omsi genau erkennt, wieviele Strings ausgelesen werden sollen. Wichtig ist dies bei Omsi 1 und 2, weil nur die genaue Stringszahl ausgelesen wird, die hier eingetragen werden. Die tatsächliche Anzahl ist dagegen irrelevant.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Stringcount_terminus&lt;br /&gt;
7&lt;br /&gt;
&lt;br /&gt;
Stringcount_busstop&lt;br /&gt;
5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terminus gibt den Bereich an, der für die Endstellen vorgesehen ist. Und Busstop bleibt damit nur für die Haltestellenliste. Die genaue Anzahl richtet sich nach den geschriebenen Strings. Wichtig wird dies für eine [http://www.omnibussimulator.de/omsiwiki.de/index.php?title=Hofdatei#Die_Universelle_Hofdatei.| &amp;quot;Universelle Hofdatei&amp;quot;], die für alle verwendeten Anzeigesysteme in den Bussen Verwendung finden. Man kann bis 999 Strings verwenden, alles darüber hinaus, wird mit einem Fehler von Omsi quittiert, da normal nicht so viele Strings benötigt werden können. '''Es richtet sich ja nach den unterschiedlichen Anzeigesystemen der Busse, nicht um jeden einzelnen Bus selbst.'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== '''Aufbau des zweiten Bereiches einer Hofdatei - Endstellenliste''' ===&lt;br /&gt;
&lt;br /&gt;
In dieser Liste werden die Anzeigen für die Busse geschrieben, wie diese die entsprechenden Endstellen später anzeigen sollen. Wichtig hierbei ist, daß die Buchstabenanzahl nicht überschritten wird, weil sonst die Ziele nicht vollständig angezeigt werden. Welche Buchstaben genau angezeigt werden können, entscheidet der Font der Anzeigegeräte. Beinhaltet dieser Font nur Großbuchstaben, muß die Anzeige in Großbuchstaben gesetzt werden. Das gleiche gilt für Umlaute, Satzzeichen oder Symbole. &lt;br /&gt;
&lt;br /&gt;
Der Aufbau dieses Bereiches kann zwei Formen annehmen. Für Omsi 1 gilt nur eine Form, wobei bei Omsi 2 beide Formen genutzt werden können. Der Übersicht wegen, wird hier die alte Schreibform (untereinander gegliedert) gezeigt. Um eine Hofdatei ganz einfach zu erstellen empfielt sich die Verwendung des [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=40888&amp;amp;highlight=| Programm's '''Hof Suite von Rumpelhans'''], dass eine Hofdatei problemlos und Fehlerfrei vollständig erstellt. Einzelheiten zum Programm entnehmt ihr bitte dem beiliegenden Handbuch. Etwas schwerer, aber auch Möglich, ist die Nutzung eines Schreibprogrammes wie Office Word. Für die neuere Schreibform wie in Omsi 2 ist ein Tabellenprogramm wie Exel sinnvoller, da hier die Anzeigen nacheinander, getrennt von einem Tabulator gesetzt wird. Jeder gesetzte Abstand des Tabulator's, setzt den nächsten String fest. Ein String darf damit nicht als Platzhalter oder zur Zentrierung benutzt werden. Das [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=40888&amp;amp;highlight=| Programm '''Hof Suite von Rumpelhans'''], ist aber die einfachste und leichteste Variante, da dieses Programm eine übersichtliche Oberfläche bietet, viel Schreibkram einspart, auf Fehler hinweißt und auch größere Hofdateien, schnell und einfach, im Omsi-2-Format erstellt. Außerdem kann man eine Hofdatei damit sehr einfach erweitern, ergänzen, umstellen oder berichtigen und anpassen. So können auch Hofdateien aus Omsi 1 problemlos umgestellt werden, um diese auf Maps in Omsi 2 zu nutzen. Änderungen in der Hofdatei werden aber immer erst nach einem Neustart von Omsi umgesetzt.&lt;br /&gt;
Aus beiden letztgenannten Programmen (Word und Exel), kann man diese Hofdatei als Textdatei abspeichern und die Dateiendung umbenennen.&lt;br /&gt;
&lt;br /&gt;
In dem zweiten Bereich gibt es nur zwei Befehle, die wiederrum das Verhalten der Fahrkunden steuert. &lt;br /&gt;
[addterminus] bedeutet, daß die Fahrkunden einsteigen können, spätestens beim erreichen dieser Endstelle den Bus verlassen müssen,&lt;br /&gt;
[addterminus_allexit] bedeutet, egal was die Anzeige zeigt, es darf nicht eingestiegen werden.&lt;br /&gt;
Direkt darunter kommen zwei Informationen und darauf folgend die Strings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[addterminus_allexit]&lt;br /&gt;
123&lt;br /&gt;
Name der Endstelle&lt;br /&gt;
String 0&lt;br /&gt;
String 1&lt;br /&gt;
String 2&lt;br /&gt;
String 3&lt;br /&gt;
String 4&lt;br /&gt;
String 5&lt;br /&gt;
String 6&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Gemäß der Vorgabe im ersten Bereich der Hofdatei unter [stringcount_...] kann man hier die Strings für die Anzeigesysteme schreiben. Die ersten beiden Punkte unter dem Befehl sind fest vorgegeben und beinhalten nichtangezeigte Informationen. Besonders wichtig ist hier die richtige Stringanzahl. Stehen hier mehr Strings als unter &amp;quot;Stringcount_terminus&amp;quot; eingetragen, werden die folgenden Strings nicht beachtet (gelten also als nicht vorhanden). Außerdem ist zu Beachten, daß die Stingzählung bei NULL beginnt und nicht bei Eins. Das bedeutet, daß sieben Strings ausgelesen werden, von String 0 bis String 6.&lt;br /&gt;
&lt;br /&gt;
123 - die 3-stellige Zahl gibt dieses Ziel einen IBIS-Code. Da man im Ibis keine Buchstaben eingeben kann, werden alle Ziele mittels Code identifiziert. Welchen Code ein Ziel bekommt ist dabei egal, solange der Code für ein einziges Ziel eingetragen wird. Das Ziel kann zwar mit dem Code mehrmals in der Liste erscheinen, aber ein bestimmter Zahlencode darf nicht zwei unterschiedliche Ziele beinhalten.&lt;br /&gt;
&lt;br /&gt;
Gefolgt vom Namen der Endstelle. Hierbei erhält jede Endstelle einer Map seinen eigenen Zahlencode für das IBIS. Der Name der Endhaltestelle, der hier eingetragen wurde, muß dem Endstellenwürfel im Editor entsprechen. Sind diese nicht gleich, wird diese Endstelle nicht mit dem Ziel in Verbindung gebracht und ignoriert. Das bedeutet, daß diese Endstelle (im Editor) keinen IBIS-Code besitzt und daher nicht geschildert werden kann. Im Ibis wird eine Endstelle angezeigt, aber diese existiert für Omsi garnicht. &lt;br /&gt;
Im gegenzug müßen nicht alle Endstellen einen Haltestellenwürfel haben. Liegt die Endstelle ausserhalb des Kartenbereich's, sollte dennoch eine Endstelle dazu in der Hofdatei erstellt werden. Diese Endstellen sind für KI-Busse interessant. Die Endstellen werden im Fahrplan genannt, da alle Busse nur mit Fahrplan, im Liniendienst fahren könne. Ohne Fahrplan verhalten sich die Busse wie gewöhnliche KI-Fahrzeuge.&lt;br /&gt;
&lt;br /&gt;
Nun folgen die Strings der einzelnen Anzeigen. Diese Strings werden für die jeweiligen Anzeigegeräten in den Script-Dateien festgelegt. Die Verwendung welcher String für welche Anzeige genutzt wird, ist frei, sollte aber sinnvoll eingetragen werden, damit die Hofdatei für andere Busse genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispel, zeigt die Eintragungen einer ANNAX-Matrix, Rollbandanzeige, IBIS 1 und IBIS 2 Gerät:&lt;br /&gt;
&amp;lt;pre&amp;gt;[addterminus]&lt;br /&gt;
123&lt;br /&gt;
Endhaltestelle&lt;br /&gt;
BHF KIESELSTEIN&lt;br /&gt;
Bahnhof&lt;br /&gt;
Kieselstein&lt;br /&gt;
Bhf. Kieselstein&lt;br /&gt;
Rollbandtextur.tga&lt;br /&gt;
Bahnhof Kieselstein&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Aufgeschlüsselt bedeuten die Eintragungen (hier am Beispiel eines MAN SD 202) folgende Punkte am Bus:&lt;br /&gt;
&amp;lt;pre&amp;gt;[addterminus]&lt;br /&gt;
123                   - Durch Eingabe dieses Zahlencode in das IBIS, Atron, EFAD, etc. bei der Taste Ziel, wird die &lt;br /&gt;
                        gewählte Endhaltestelle ausgewählt.&lt;br /&gt;
Endhaltestelle        - hier muß der korrekte Name der Endstelle wie im Editor/ oder Fahrplan eingetragen werden.&lt;br /&gt;
BHF KIESELSTEIN       - Anzeige für das IBIS 1 (max. 16 Zeichen [incl. Leerzeichen] und nur Großbuchstaben, &lt;br /&gt;
                        weil es im Font des IBIS 1 nur Großbuchstaben gibt.&lt;br /&gt;
Bahnhof               - Anzeige der oberen ANNAX-Zeile an der Front des Busses. Hier dürfen ebenfalls nur&lt;br /&gt;
                        16 Zeichen vorhanden sein, und Buchstaben in Groß- und Kleinschrift.&lt;br /&gt;
Kieselstein           - Anzeige der unteren ANNAX-Zeile an der Fahrzeugfront. Hier dürfen ebenfalls nur max. 16 &lt;br /&gt;
                        Zeichen erstellt werden.&lt;br /&gt;
Bhf. Kieselstein      - Zielanzeige an der einzeiligen Seitenmatrix (ANNAX-Seite) mit max. 16 Zeichen.&lt;br /&gt;
Rollbandtextur.tga    - Name der Rollbandtextur im Ordner Anzeigen. Wichtig: die Dateiendung muß richtig&lt;br /&gt;
                        eingetragen werden.&lt;br /&gt;
Bahnhof Kieselstein   - Anzeige für das IBIS 2-Gerät (Groß- und Kleinschreibung, max. 20 Zeichen).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die hier gezeigte Schreibweise kann für Omsi 1 und Omsi 2 verwendet werden. Um bei Omsi 1 kurze Namen zu zentrieren, sollte man Leerzeichen verwenden. Für Omsi 2 ist es ratsam, hinter einer Eintragung ein Tabulator zu setzen. Wurden alle Endstellen, die auf der Map vorhanden sind geschrieben, können alle Endstellen geschrieben werden, die nicht auf der Map sind, aber von Linien die auf der Map fahren (KI-Linien) geschrieben werden. Der Präfix &amp;quot;_allexit&amp;quot; hinter dem Befehl addterminus sorgt dafür das keine Fahrkunden einsteigen und eventuell im Bus sitzende Fahrkunden, nach der Eingabe, sofort aussteigen.&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der eingetragenen Endstellen, bestimmt später die Reihenfolge der Rollbandtexturen, wenn man diese in einem Bus manuell einstellt (also nicht über das Omsi-Menü).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== '''Aufbau des dritten Bereiches einer Hofdatei - Haltestellenliste''' ===&lt;br /&gt;
&lt;br /&gt;
In dieser Liste ändert sich lediglich der Befehl und die Anzeige-Orte im Bus. Es gibt nur ein Befehl der eine weitere Haltestelle hinzufügt. Und es werden nur Haltestellen geschrieben, die vom Spieler bedient werden können (unabhägig, ob diese Haltestellen auf der Map existieren oder nicht).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[addbusstop]&lt;br /&gt;
Haltestelle&lt;br /&gt;
BUSPLATZ AM WALD&lt;br /&gt;
Busplatz&lt;br /&gt;
Am Wald&lt;br /&gt;
Busplatz am Wald&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wieder die Aufschlüßelung der Eintragungen:&lt;br /&gt;
&amp;lt;pre&amp;gt;[addbusstop]&lt;br /&gt;
Haltestelle        - Name der Haltestelle wie im Editor und Name der Audiodatei der Ansage (ohne Dateiendung).&lt;br /&gt;
BUSPLATZ AM WALD   - Anzeige für das IBIS 1 Gerät&lt;br /&gt;
Busplatz           - Innenanzeige erste Sicht vor dem Umschalten.&lt;br /&gt;
Am Wald            - Innenanzeige zweite Sicht nach dem Umschalten, die beiden Anzeigen werden im Takt &lt;br /&gt;
                     automatisch umgestellt und zentriert.&lt;br /&gt;
Busplatz am Wald   - Name der Haltestelle für das IBIS 2.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der einzelnen Haltestellen ist dabei irrelevant. Die Ausstiegspunkte der Endstellen werden genauso mit eingetragen, wie alle anderen Haltestellen. Damit erscheinen die Endstellen also in beiden Listen, was hauptsächlich den Ansagen, der Innenanzeige und der Anzeige im IBIS dient.&lt;br /&gt;
&lt;br /&gt;
Damit ist dieser kurze Abschnitt schnell geschafft.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== '''Aufbau des vierten Bereiches der Hofdatei - Routenlisten''' ===&lt;br /&gt;
&lt;br /&gt;
Hier werden nun, für jede einzelne Route die Liste in der Reihenfolge der abzufahrenden Haltestellen eingetragen. Die richtige Reihenfolge ist nicht für die Linie entscheidend, sondern der Fahrplan, so wie er im Editor erstellt wurde. Die richtige Reihenfolge wird aber benötigt, wenn die Ansagen der Haltestellen passen sollen und die Anzeigen in den Businternen Informationsgeräten. Schreibfehler oder die falsche Reihenfolge führt bei Bussen mit automatischer Haltestellenweiterschaltung nicht zu Fehlern im Bus, da nur der Bus diese Daten ausließt.&lt;br /&gt;
&lt;br /&gt;
'''Zur Definition:''' Eine Route ist der Weg von einer Endstelle zu einer anderen, also der wahre Anfangs- und Endpunkt einer Linie in einer Richtung. Zwei Routen sind nötig um einen Umlauf zu definieren. Bestehend aus der Hintour und der Rücktour. Es wird also lediglich eine Route je Liste geschrieben, kein kompletter Umlauf.&lt;br /&gt;
&lt;br /&gt;
Dieser Bereich teilt die Liste in 2 Gruppen auf. Hier gibt es auch wieder zwei festgelegte Befehle. Im ersten Teil '''[infosystem_trip]''' befinden sich die Information, der Linie und Routennummer, wo eine Linie beginnt und wo diese endet sowie den IBIS-Code welches Zeil geschildert werden soll. Das hat zur Folge, das es vollkommen ausreichend ist, wenn man nur die Linie und die Route im IBIS einträgt, daß Ziel und die Linie werden dann bereits bei einer Matrix geschildert. Rollbänder müßen hingegen, manuell oder über das Menü eingestellt werden.&lt;br /&gt;
In der ersten Gruppe befinden sich also die Informationen für die Route und in der zweiten Gruppe '''[infosystem_busstop_list]''' die Liste der Haltestellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[infosystem_trip]&lt;br /&gt;
901&lt;br /&gt;
Busplatz-Kieselstein&lt;br /&gt;
123&lt;br /&gt;
 9 &lt;br /&gt;
&lt;br /&gt;
................&lt;br /&gt;
&lt;br /&gt;
[infosystem_busstop_list]&lt;br /&gt;
5&lt;br /&gt;
Busplatz&lt;br /&gt;
Busplatz Am Wald&lt;br /&gt;
Einsteindorf&lt;br /&gt;
Krankenhaus&lt;br /&gt;
Bhf Kieselstein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Dies soll nur eine kurze Liste darstellen die rein fiktiv ist, um zu erklären was wo steht. Hier geht es um die Linie 9 und die erste Route. Nun geht es wieder um die Aufschlüsselung der einzelnen Zeilen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[infosystem_trip]        - Dieser Befehl sagt aus, daß hier Infos zur folgenden Route stehen.&lt;br /&gt;
901                      - Die Linie und die Routennummer. Also Linie 9 und die erste Route. &lt;br /&gt;
                           Diese Zahl &amp;quot;kann&amp;quot; auch 6-stellig sein (also 4-stellig, die Liniennummer und&lt;br /&gt;
                           2-stellig für die Route), während die Route 2-stellig sein &amp;quot;muß&amp;quot;.&lt;br /&gt;
Busplatz-Kieselstein     - Diese Zeile wird nicht ausgelesen, sie dient nur der Orientierung, von welche&lt;br /&gt;
                           Route jetzt die Liste folgt.&lt;br /&gt;
123                      - IBIS-Code der Zielendstelle (also in diesem Beispiel &amp;quot;Kieselstein&amp;quot;).&lt;br /&gt;
9                        - Wiederholung der Liniennummer.&lt;br /&gt;
&lt;br /&gt;
................&lt;br /&gt;
&lt;br /&gt;
[infosystem_busstop_list]- Dieser Befehl sagt aus, das hier die Liste der Haltestellen kommt &lt;br /&gt;
                           (inclusive Anfangs- und Endhaltestelle)&lt;br /&gt;
5                        - Anzahl der Haltestellen insgesamt. Beginnend bei der Zahl 1 (nicht NULL)&lt;br /&gt;
Busplatz                 - erste Haltestelle (also die Einstiegshaltestelle)&lt;br /&gt;
Busplatz Am Wald&lt;br /&gt;
Einsteindorf&lt;br /&gt;
Krankenhaus&lt;br /&gt;
Bhf Kieselstein          - Endhaltestelle, wo die Fahrkunden aussteigen sollen.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies wird nun für jede, im Editor erstellte Route eingegeben, allerdings nur für die Linien, die auch vom Spieler gefahren werden können. KI-Busse brauchen dies nicht, da KI-Busse keine Ansagen, Innenanzeigen oder sonstige Infos tragen, außer die Außenanzeigen (die aber aus der Endstellenliste ausgelesen werden). Die geschriebene Anzahl der Haltestellen muß mit der tatsächlichen Anzahl der eingetragenen Haltestellen übereinstimmen, sonst werden weitere Haltestellen nicht angezeigt oder angesagt, oder die Fahrkunden steigen alle zu früh aus.&lt;br /&gt;
&lt;br /&gt;
Es müßen nicht alle Linien geschrieben werden. einige gesonderte Linien kommen auch ohne Linienlisten aus. Dann gibt es aber weder eine Anzeige noch Ansagen, was z.B. bei kurzeitigen Linien gedacht ist oder Zielen die zu einer bestimmten Zeit nicht in einer Matrix oder Röllbänder existierten, wie zum Beispiel die Linie E522 in Spandau, zwischen November 1989 und Dezember 1990.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''Sonstiges:''' Wenn ein Ziel, über das Steckschild angezeigt werden soll (nur in Omsi 2) ====&lt;br /&gt;
&lt;br /&gt;
Wenn es keine Anzeigen im Bus geben soll, sondern die Ziele nur über ein Steckschild angezeigt werden sollen, muß der IBIS-Code über eine 4-stellige Nummer verfügen. 4-stellige IBIS-Codes können nicht im IBIS eingetragen werden. Daher bleibt die Anzeige leer, aber die Linie bleibt erhalten und das Steckschild fungiert als Anzeigen-Ersatz, womit auch die Fahrkunden einsteigen. Im String für das IBIS 1 (String 0) sollte dann ein Rautezeichen eingetragen werden (#).&lt;br /&gt;
Da alle Ziele in Omsi über den IBIS-Code identifiziert werden (Endstellen-ident), können nur hier ein Ziel über einen zweiten Zielcode identifiziert werden. Der Zielcode für das Steckschild wird it dem 4-stellugen IBIS-Code 1000 eingetragen. Damit dies ausgelesen wird, mußt der Code im jeweiligen Script der Zielanzeige mit 1000 addiert werden. Dies kann für andere Anzeigegeräte ebenfalls verwendet werden, wenn in den Scripten der IBIS-Code mit höheren Codes addiert wird. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Form der Hofdatei in Omsi 1''' ==&lt;br /&gt;
&lt;br /&gt;
Die Form der Hofdatei ist bei Omsi 1 einfacher und übersichtlicher, als in Omsi 2. Der Ablauf wie oben beschrieben ist einfach gestaffelt. Mit einem Befehl werden die einzelnen Zeilen zum Auslegen festgestellt, die dann durch die Scripte des einzelnen Busses ausgelesen werden:&lt;br /&gt;
Ein Befehl wird immer in einer Klammer festgelegt&lt;br /&gt;
&lt;br /&gt;
 [name]&lt;br /&gt;
 Spandau&lt;br /&gt;
&lt;br /&gt;
Damit beginnt die Hofdatei und legt fest, wie die Hof-Datei OMSI-intern heißt. Beim Erstellen einer Map kann ein Standard-Hof definiert werden (es muss der Name eingtragen werden, der in der Hof-Datei festgelegt wurde), der dafür sorgt, dass bei der Busauswahl gleich die richtige Hof-Datei vorausgewählt wird. Was unter dem Namensblock eingetragen wird, steht später auch im Busauswahldialog in OMSI. Außerdem wird dieser Name auch für die KI-Busse verwendet, die in der AI-List eingetragen sind. Stimmt der Name in der AI-List nicht mit dem Namen der Hofdatei überein, wird diese Hofdatei von den KI-Bussen nicht erkannt/geladen. Anmerkung: der Dateiname der Hofdatei ist an dieser Stelle für das Auslesen irrelevant. Die Hofdatei wird lediglich über den Befehl [name] identifiziert und damit genutzt.&lt;br /&gt;
&lt;br /&gt;
 [servicetrip]&lt;br /&gt;
 Dienstfahrt&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl legt fest, welche Anzeige am Bus angezeigt wird, wenn der Bus als KI ohne Route fährt. Es wird hier offensichtlich nicht festgelegt, welche Anzeige eingestellt wird nach dem Laden/Platzieren eines Spieler-Busses. OMSI nimmt dafür immer das erste Ziel aus der Endstellenliste.&lt;br /&gt;
&lt;br /&gt;
Die nächsten zwei Befehle (die ohne eckige Klammer geschrieben werden) legen fest, wieviele Strings insgesamt ausgelesen werden können. In der Endstellenliste und der Haltestellenlsite kann man soviele Strings schreiben wie man möchte, aber nur die festgelegte Anzahl wird auch tatsächlich ausgelesen. Beide Befehle bestehen aus zwei Teilen:&lt;br /&gt;
&lt;br /&gt;
 Stringcount_terminus&lt;br /&gt;
 18&lt;br /&gt;
 &lt;br /&gt;
 Stringcount_busstop&lt;br /&gt;
 9&lt;br /&gt;
&lt;br /&gt;
Stringcount sagt aus, das hier die Anzahl der auszulesenden Strings hier festgelegt werden. Der zweite Teil bezieht sich auf die folgenden Bereiche wofür die Stringanzahl festgesetzt wird.&lt;br /&gt;
_terminus bezieht sich auf die Liste der Endstellen,&lt;br /&gt;
_busstop legt fest, wieviele Strings dort ausgelesen werden müßen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== '''Endstellen''' ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl [addterminus] kann man die Entstellen festlegen. Direkt darunter werden erst die Zugehörigkeiten festgelegt und dann folgen die eigentlichen Strings. Ein String ist der auszulesende Teil der für die Anzeigeinformation ausgelesen werden soll. Der erste String beginnt aber erst in der dritten Zeile nach dem Befehl. Die zwischenliegenden Zeilen werden von Omsi für die Zugehörigkeit der Endstellen benötigt. Danach kann Omsi genau die gewünschten Anzeigen für die Endstelle definieren.&lt;br /&gt;
Ein Bus liest aber nicht alle Strings aus, sondern jeder Bus liest nur die Strings aus, die in den jeweiligen Strings des busses festgelegt sind, egal ob das dortige Format der Anzeige entspricht oder nicht. Stimmt das Format wird die Anzeige korrekt dargestellt, ist das Format für die jeweilige Anzeige ungeeignet wird entweder nichts angezeigt oder nur der Teil der verwendet werden kann.&lt;br /&gt;
Das gewünschte Verhalten, wie die Fahrkunden auf die jeweilige Anzeige reagieren soll, wird mit dem Präfix _allexit festgelegt. Die Personen in Omsi können nicht lesen, sie reagieren nur stur auf die gewählte Anzeige.&lt;br /&gt;
Jetzt folgen zwei Beispiele für Anzeigen. Zur besseren Übersicht werde ich die Zeilen Nummerieren und bezeichnen. Als Trennung verwende ich Wellenlinien. Ich beziehe mich hier ganz bewußt auf eine universelle Hofdatei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 ~~~Befehl ~~~~[addterminus]&lt;br /&gt;
2 ~~~IBIS-Code~~123&lt;br /&gt;
3 ~~~Name der Endstelle~Potzdamer Straße&lt;br /&gt;
4 ~~~String0~~~~POTZDAMER STR&lt;br /&gt;
5 ~~~String1~~~~Potzdamer&lt;br /&gt;
6 ~~~String2~~~~Strasse&lt;br /&gt;
7 ~~~String3~~~~Potzdamer Str.&lt;br /&gt;
8 ~~~String4~~~~Potzdamer.bmp&lt;br /&gt;
9 ~~~String5~~~~Potzdamer Strasse&lt;br /&gt;
10~~~String6~~~~Potzdamer.bmp&lt;br /&gt;
11~~~String7~~~~Potzd_Stra.bmp&lt;br /&gt;
12~~~String8~~~~M48 Potzdamer&lt;br /&gt;
13~~~String9~~~~M48&lt;br /&gt;
14~~~String10~~~246&lt;br /&gt;
15~~~String11~~~Potzdamer*I&lt;br /&gt;
16~~~String12~~~Straße*I&lt;br /&gt;
17~~~String13~~~Potzdamer Str/&lt;br /&gt;
18~~~String14~~~Lützow Str.&lt;br /&gt;
19~~~String15~~~Potzdamer&lt;br /&gt;
20~~~String16~~~Straße&lt;br /&gt;
21~~~String17~~~Potzdamer Straße&lt;br /&gt;
22~~~String18~~~Potzdamer Straße/*B&lt;br /&gt;
23~~~String19~~~Lützow Straße&lt;br /&gt;
24~~~String20~~~Potzdamer Straße&lt;br /&gt;
25~~~String21~~~Warschauer Straße&lt;br /&gt;
26~~~String22~~~Leer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie bereits geschrieben, liest jeder Bus nur ganz bestimmte Strings aus. Um dieses zu verdeutlichen mal 4 Busse als Beipiel:&lt;br /&gt;
* MB O 305 - braucht String0 für das IBIS1 und String 4 für das Rollband,&lt;br /&gt;
* MAN NG 272 - Braucht String 1 und 2 für die Krügeranzeige und String 5 für das IBIS 2,&lt;br /&gt;
* SD 202 - braucht String 1 und 2 für die ANNAX vorn, String 3 für die ANNAX an der Seite und String 5 für das IBIS 2,&lt;br /&gt;
* MAN ÜL - braucht String 8 für die Matrix vorn und Seite sowie den String 9 für die Heckmatrix.&lt;br /&gt;
* MB O407 - benötigt die String's 4, 5, 6, 8, 9, 13 ,14, 15, 16 für die unterschiedlichen Anzeigesysteme.&lt;br /&gt;
&lt;br /&gt;
Die genaue Zeichenanzahl, also die Länge eines Strings ist hier nicht begrenzt, sondern ist abhängig vom jeweiligen gescripteten Gerät, mit Ausnahme des Rollbandes, des Steckschildes und der Krüger++ da diese Texturen verwenden. Die Texturnamen sollten aber für Omsi kurz sein. Kürzere Texturnamen lädt Omsi schneller als lange, was sich bei vielen Texturnamen irgendwann bemerkbar macht.&lt;br /&gt;
&lt;br /&gt;
2. Beispiel für eine Anzeigevariante&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 ~~~Befehl ~~~~[addterminus_allexit]&lt;br /&gt;
2 ~~~IBIS-Code~~101&lt;br /&gt;
3 ~~~Name ~~~~~~Aussetzfahrt&lt;br /&gt;
4 ~~~String0~~~~AUSSETZFAHRT&lt;br /&gt;
5 ~~~String1~~~~Aussetzfahrt&lt;br /&gt;
6 ~~~String2~~~~BT Meullerstr.&lt;br /&gt;
7 ~~~String3~~~~Betriebsfahrt&lt;br /&gt;
8 ~~~String4~~~~Endfahrt.bmp&lt;br /&gt;
9 ~~~String5~~~~Heimfahrt&lt;br /&gt;
10~~~String6~~~~Aussetzen.tga&lt;br /&gt;
11~~~String7~~~~Diensfahrt.bmp&lt;br /&gt;
12~~~String8~~~~END&lt;br /&gt;
13~~~String9~~~~Dienstfahrt&lt;br /&gt;
14~~~String10~~~201&lt;br /&gt;
15~~~String11~~~Nicht einsteigen*B&lt;br /&gt;
16~~~String12~~~&lt;br /&gt;
17~~~String13~~~Feierabend&lt;br /&gt;
18~~~String14~~~&lt;br /&gt;
19~~~String15~~~Nicht&lt;br /&gt;
20~~~String16~~~einsteigen!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was in den einzelnen Strings drin steht ist fast egal. Die Texturen müßen mit den entsprechenden Texturnamen übereinstimmen. Was in den einzelnen Anzeigen steht ist vollkommen egal, da die Fahrkunden auf die Bedeutung der Worte nicht reagieren. Entscheidend für die Passagiere in Omsi ist der IBIS-Code des in Verbindung mit dem Namen der Endstelle, so wie diese in der Map eingetragen sind oder im Fahrplan. Oder das Präfix _allexit, womit die Figuren in Omsi das Fahrzeug vollkommen ignorieren.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== '''Haltestellen''' ===&lt;br /&gt;
&lt;br /&gt;
Das ganze wiederholt sich nun auch für die Haltestellen. Was dort im einzelnen angezeigt wird, ist auch hier vollkommen egal. Wichtig ist nur der Name der Haltestelle wie im Editor und auch die entsprechende Ansage. Der Dateiname der Audiodatei muß genauso geschrieben sein, damit Omsi die Audiodatei der Haltestelle zuordnen kann. Die Reihenfolge, wie die Audiodateien abgespielt werden, ist im letzten Abschnitt &amp;quot;Routenlisten&amp;quot; festgelegt. Die genaue Reihenfolge der Haltestellen die in der Route abgefahren werden sollen, wird im Fahrplan mit dem Editor festgelegt. Wird eine neue Haltestelle angefahren, wird aus der Hofdatei der Name der Haltestelle ausgeleden, im IBIS angezeigt und die entsprechende Audiodatei abgespielt. &lt;br /&gt;
&lt;br /&gt;
Zum besseren Verständnis:&lt;br /&gt;
Wie die Haltestelle im Editor heißt ist für die Hofdatei irrelevant. Steht im Fahrplan für die nächste Haltestelle Breite Straße und in der Hofdatei steht Baumalle, muß die nächste Haltestelle Breite Straße angefahren werden, da sonst alle Fahrkunden aussteigen. Der Bus liest für die nächste Haltestelle aber die Baumallee aus und spielt auch die dazugehörige Audiodatei ab.&lt;br /&gt;
Ihr solltet immer daran denken, was in der Hofdatei drinsteht ist nicht für die Perosnen in Omsi, sondern ausschließlich für euch. Steigt eine Person in einem Bus ein, orientiert diese sich nur nach zweit Punkten. Welchen IBIS-Code fahrt ihr an und welche Endstelle ist mit diesen IBIS-Code verbunden. Omsi legt dann fest das diese Figur eine bestimmte Anzahl an Haltestellen mitfährt und steigt dann aus. Welche Ziele am Bus stehen, was dort geschrieben oder angezeigt wird, wie die nächste Haltestelle heißt und welche Audiodatei abgespielt wird, ist der Figur in Omsi egal, sollange ihr auf dem Pfad der Tugend (also dem festgelegten Pfad zur Haltestelle, wie im Fahrplan angegeben) bleibt. Ihr braucht also lediglich nur im IBIS den Ziel-Code eintragen und die Leute steigen ein. Dies kann man am besten im MB O 305 sehen. Gibt man in diesen Bus die Linie und Route ein, wird aus der Hofdatei der Zielcode ermittelt und übernommen. Außen am Bus stehen keinerlei Informationen, aber die Leute steigen ein.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 ~~~Befehl ~~~~[addbusstop]&lt;br /&gt;
2 ~~~Name der Haltestelle~Baumallee&lt;br /&gt;
3 ~~~String0~~~~BAUMALLEE&lt;br /&gt;
4 ~~~String1~~~~Baumallee/&lt;br /&gt;
5 ~~~String2~~~~Hammerweg&lt;br /&gt;
6 ~~~String3~~~~Baumallee/Hammerweg&lt;br /&gt;
7 ~~~String4~~~~4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Direkt nach dem Befehl in Zeile 1 folgt die Identifizierung mit dem Haltestellenwürfel im Editor von Omsi. Die nachfolgenden Informationen werden nun im Bus für diese Haltestelle angezeigt. Was genau angezeigt wird, ist euch überlassen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Form der Hofdatei in Omsi 2''' ==&lt;br /&gt;
&lt;br /&gt;
Zuersteinmal sei an dieser Stelle erwähnt, daß Omsi 2 beide Formationen der Hofdatei auslesen kann. Im Grunde ist die Hofdatei gleich, es werden nur andere Trennungen verwendet. Dadurch ergeben sich einige kleine Änderungen. Somit braucht ein Befehl nicht mehr, mehrfach geschrieben werden, sondern leicht verändert in einmaliger Form.&lt;br /&gt;
&lt;br /&gt;
Im ersten Abschnitt einer Hofdatei kommt ein weiterer Befehl hinzu. Dieser regelt die dazugehörigen Unterordner in Omsi, da nun einige Dateien (Audiodateien und Texturdateien für Rollband, Steckschilder und Krüger++ Matrix), nichtmehr in jeden Bus-Ordner eingestellt werden, sondern zentral in einem Unterordner zusammengefast sind. Der Vorteil liegt dabei klar auf der Hand: Man spart Speicherplatz auf der Festplatte und muß nicht bei neuen Bussen alles einzeln einkopieren. Damit Omsi genau weiß, welche Daten für die jeweilige Hofdatei genau zu finden sind, wird mit einem neuen Befehl die Namen der Unterordner angegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 ~~~Befehl ~~~~[global_strings]&lt;br /&gt;
2 ~~~Stringanzahl~~~~6&lt;br /&gt;
3 ~~~String0~~~~Name des Ansagen-Unterordners &lt;br /&gt;
4 ~~~String1~~~~Name des Rollband-Unterordners &lt;br /&gt;
5 ~~~String2~~~~Name der Seitenschild-Unterordners&lt;br /&gt;
6 ~~~String3~~~~IBIS-Spezialcode für 900-er Liniennummern&lt;br /&gt;
7 ~~~String4~~~~IBIS-Spezialcode für 800-er Liniennummern&lt;br /&gt;
8 ~~~String5~~~~IBIS-Spezialcode für 500-er Liniennummern&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier folgen die genaue Anzahl der Strings die ausgelesen werden sollen. Nach der festlegung der Anzahl folgen die 3 Unterordner für die Ansagen (Audiodateien) sowie die Namen der Unterordner für die Texturen des Rollbandes und der Seitenschilder im Ordner Anzeigen.&lt;br /&gt;
&lt;br /&gt;
Die IBIS-Spezialcodes sind bereits in der jeweiligen Matrix-osc eines Busses festgelegt. Die darunter liegenden Zahlen die dort eingetragen werden, müßen den Buchstabencodes der Busse entsprechen. Da man in den IBIS-Geräten keine Buchstabentasten hat, werden Buchstaben nur über Codes eingetragen. Hier kann man also festlegen, welche Buchstaben an welcher Liniennummerposition angezeigt werden sollen. Eventuell muß ein Buchstabe in der jeweiligen Matrix.osc neu festgelegt werden.&lt;br /&gt;
&lt;br /&gt;
Hier folgt nun eine kleine Tabelle mit einigen ausgewählten Buchstaben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 ~~~ &amp;quot;E&amp;quot; an erster Stelle&lt;br /&gt;
4 ~~~ &amp;quot;N&amp;quot; an erster Stelle&lt;br /&gt;
5 ~~~ &amp;quot;S&amp;quot; an erster Stelle&lt;br /&gt;
6 ~~~ &amp;quot;A&amp;quot; an erster Stelle&lt;br /&gt;
9 ~~~ &amp;quot;E&amp;quot; an zweiter Stelle&lt;br /&gt;
10~~~ &amp;quot;E&amp;quot; an dritter Stelle&lt;br /&gt;
15~~~ &amp;quot;N&amp;quot; an zweiter Stelle&lt;br /&gt;
16~~~ &amp;quot;A&amp;quot; an dritter Stelle&lt;br /&gt;
28~~~ &amp;quot;M&amp;quot; an erster Stelle&lt;br /&gt;
32~~~ &amp;quot;M&amp;quot; an dritter Stelle&lt;br /&gt;
36~~~ &amp;quot;X&amp;quot; an erster Stelle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Soll also für eine bestimmte Linie ein Buchstabe angezeigt werden, so kann man drei Gruppen festlegen. Mit Hilfe der Codes für die Buchstaben, werden zusätzlich zur Liniennummer auch die Buchstaben entsprechend ihrer Platzierung angezeigt.&lt;br /&gt;
Soll also als Beispiel die Linie 23A für alle Busse mit den Liniennummern 800 angezeigt werden, schreibt man einfach bei String 5 den Buchstabencode 16 ein. Über das IBIS stellt man die Liniennummer 02317 ein oder die Linie 82300. In der jeweiligen Matrix.osc des Busses im Scriptordner sollte dann natürlich der Buchstabe A für den Buchstabencode 16 eingetragen sein. Fehlt dieser Eintrag, wird an der Stelle ein Leerzeichen angezeigt.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ''' Endstellen ''' ===&lt;br /&gt;
&lt;br /&gt;
Im Omsi 1-Format werden die jeweiligen Strings einfach untereinander geschrieben. Im einfachen Windowsseitigen Editor (Wordpad) schreibt man einfach unter dem Befehl die gewünschte Anzeige für den entsprechenden String ein. Dazu ist es aber erforderlich den jeweiligen Befehl immer wieder zu schreiben und neu die genaue stringposition zu zählen. Im Omsi 2-Format kann man nun alle Strings nacheinander schreiben, wobei man am Anfang lediglich den Grundfehel schreibt, dann folgt die Liste der Anzeigen und beendet die Liste mit einem &amp;quot;end&amp;quot;. Mit dem windowseigenen Editor Wordpad gibt es hier einen riesigen Nachteil. Da die Zeichenlänge der Anzeigen variieren kann, erscheinen nicht die jeweiligen Strings sauber untereinander. Die Trennung der jeweiligen Strings wird mit der TAB-Taste gesetzt. Auch diese Abstand variiert. Bei einer geringen Anzahl von Strings und auch von Endstelle kann man das ganze noch überschauen.&lt;br /&gt;
Aber wenn eine Karte doch etwas umfangreich ist, Wird das ganze zunehmend unübersichtlich und ungenau. Dann können Tababstände ein Feld mit der Leertaste entsprechen. &lt;br /&gt;
&lt;br /&gt;
''Daher wird dringend die Verwendung eines externen Programmes empfohlen, wie das [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=40888&amp;amp;highlight=| '''Hof Suite von Rumpelhans''' ''].&lt;br /&gt;
&lt;br /&gt;
Übersichtlich wird es aber auch mit einem Tabellenprogrammen wie Windows Office Exel oder ähnlichen Tabellenprogrammen, die es auch kostenlos gibt, wie Open Office. Dabei erstellt man die Anzeigen Zeilenweise und erstellt die Strings sauber nebeneinander in Spalten.&lt;br /&gt;
&lt;br /&gt;
Als erstes eröffnet man eine Liste mit den entsprechenden Befehl&lt;br /&gt;
[addterminus_list]&lt;br /&gt;
Nun folgen die Einträge für jede Endstelle in einer Zeile, wobei die einzelnen Strings mittels TAB getrennt werden. Damit ergeben sich zwar nacheinander mehrere Spalten, aber die Übersicht bleibt bei der verwendung externer Programme erhalten.&lt;br /&gt;
Nachfolgend nun eine Liste, was in die entsprechenden Spalten eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Spalte 1 Soll bei dieser Anzeige niemand einsteigen, wird diese Spalte mit dem Präfix {allexit} geschrieben,&lt;br /&gt;
 andernfalls bleibt dieses Feld leer&lt;br /&gt;
Spalte 2 IBIS-Code&lt;br /&gt;
Spalte 3 Identifikation der Endstelle&lt;br /&gt;
Spalte 4 String 0&lt;br /&gt;
Spalte 6 String 1&lt;br /&gt;
Spalte 7 String 2&lt;br /&gt;
Spalte 8 String 3&lt;br /&gt;
Spalte 9 String 4&lt;br /&gt;
Spalte 10 String 5&lt;br /&gt;
Spalte 11 String 6&lt;br /&gt;
Spalte 12 String 7&lt;br /&gt;
Spalte 13 String 8&lt;br /&gt;
Spalte 14 String 9&lt;br /&gt;
Spalte 15 String 10&lt;br /&gt;
Spalte 16 String 11&lt;br /&gt;
Spalte 17 String 12&lt;br /&gt;
Spalte 18 String 13&lt;br /&gt;
Spalte 19 String 14&lt;br /&gt;
Spalte 20 String 15&lt;br /&gt;
Spalte 21 String 16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wurden alle Endstellen eingetragen, wird die Liste mit dem Befehl&lt;br /&gt;
[end]&lt;br /&gt;
abgeschlossen. Anschließend folgt die nächste Liste, also die Haltestellenliste, was dem 3. bereich einer Hofdatei entspricht.:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ''' Haltestellen ''' ===&lt;br /&gt;
&lt;br /&gt;
Das selbe Prinzip wie zuvor, wird auch in dieser Liste angewendet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[addbusstop_list]&lt;br /&gt;
Spalte 1 Name der Haltestelle&lt;br /&gt;
Spalte 2 String 0&lt;br /&gt;
Spalte 3 String 1&lt;br /&gt;
Spalte 4 String 2&lt;br /&gt;
Spalte 5 String 3&lt;br /&gt;
Spalte 6 String 4&lt;br /&gt;
Spalte 7 String 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und auch diese Liste wird am Ende mit dem Befehl&lt;br /&gt;
[end]&lt;br /&gt;
geschlossen.&lt;br /&gt;
&lt;br /&gt;
Der vierte und letzte Teil der Hofdatei bleibt wie im Omsi 1-Format erhalten.&lt;br /&gt;
&lt;br /&gt;
 '''Bitte beachtet, daß einige Fahrkartendrucker noch zusätzliche Routeneinträge benötigen, &lt;br /&gt;
 die mit einem mehrstelligen Zahlencode eingetragen werden. Der mehrstellige Zahlencode hat den Vorteil, &lt;br /&gt;
 daß kein IBIS-Gerät diese Routen ausliest und somit einzig und allein nur für den jeweiligen&lt;br /&gt;
 Fahrkartendrucker nützlich sind. Es mag im ersten Moment keine Sinn machen,&lt;br /&gt;
 diese zusätzlichen Routen zu erstellen, ist aber sehr sinnvoll, wenn für andere Fahrkartendrucker,&lt;br /&gt;
 diese Routen erstellt werden, um den vollständig Umfang der jeweiligen Fahrkartendrucker&lt;br /&gt;
 nutzen zu können, was auch den Spielspaß deutlich erhöhen kann. '''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= '''Die Universelle Hofdatei.''' =&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt richtet sich an alle Personen die einen Bus bauen, Anzeigegeräte erstellen und komplette Add-Ons produzieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Was bedeutet ''&amp;quot;Universelle Hofdatei&amp;quot;'' ?''' ==&lt;br /&gt;
&lt;br /&gt;
Wie der Name schon vermuten läßt, bedeutet Universell = Vielseitig! Also eine einzige Datei die vielseitig eingesetzt werden kann. Diese vielseitigkeit bezieht sich hierbei (in Bezug auf Omsi) für '''alle''' [[Fahrtzielanzeiger an Bussen|Gruppen von Anzeigegeräten]], die in den Bussen verbaut wurden. Es wird nie eine einzige Hofdatei für alle Map's geben, aber es ist Möglich, eine einzige Hofdatei (für jede einzelne chronologische Zeitspanne), für jede einzelne Map anzulegen, wenn diese nicht in einem Busordner eingestellt wird, sondern in einem seperaten Ordner, wie die Ansagen (Announcement) oder die Rollbandtexturen (Anzeigen). &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Wenn eine ''&amp;quot;universelle Hofdatei&amp;quot;'' sinnvoll wäre, hätten M+R Software diese umgesetzt.''' ===&lt;br /&gt;
&lt;br /&gt;
'''M+R Software haben eine universelle Hofdatei mit Omsi 1 eingeführt.''' Es geht also nicht um etwas neues, sondern vielmehr um die Rückkehr zum Anfang, ''Back to Basic''. Zwei unterschiedliche Anzeigegeräte (Rollband und ANNAX-Matrix) und zwei unterschiedliche Informationssteuergeräte (IBIS 1 und IBIS 2). Wer meint das die beiden IBIS-Geräte nicht unterschiedlich wäre, sollte sich nur mal die Anzeigen ansehen. Wärend das IBIS 1 nur Großbuchstaben anzeigen kann und die Anzeige auf maximal 16 Anzeigestellen begrenzt ist, kann das IBIS 2 Groß- und Kleinbuchstaben anzeigen und 20 Anzeigestellen vorweisen. Dafür wurde beiden Geräten, unterschiedliche String zugewiesen. Neue Busse mit [[Fahrtzielanzeiger an Bussen|neuartigen Anzeigesystemen]] haben die Strings benutzt, die für die ANNAX-Anzeige vorgesehen waren und mußten dafür umgeschrieben werden. Andere Busse nutzen die Strings, die bereits für die IBIS-Geräte eingestellt wurden. Dazu wurden die bereits festgelegten Strings umgeschrieben. Stellt man diese Hofdatei in einem MAN SD 202, erhält man teilweise unerwünschte Anzeigeformen. Das Umschreiben einer Hofdatei ist dabei aufwendiger als die Hofdatei zu erweitern und das Anpassen der Scripte im Bus für die Anzeigegeräte und die Matrix, ist sehr einfach. Es müssen jeweils nur zwei Ziffern je Script geändert werden. Die Scripte müßen dafür nicht komplett umgestellt werden, keine neuen Scripte entwickelt werden und keine Scripte erweitert werden. Es werden nur zwei Ziffern in den entsprechenden Scripten geändert und die Hofdatei um die entsprechend benötigten Strings erweitert.&lt;br /&gt;
&lt;br /&gt;
Befürchtungen, daß die Hofdatei dadurch aus einem überschaubaren Rahmen fällt, dem sei gesagt, daß dies auch in der Zukunft und auf längere Sicht hin, nicht passieren wird. Sicher werden noch einige neue Anzeigegeräte hinzu kommen. Aber man sollte beim Erstellen schon darauf achten, ob man nicht vielleicht den ein oder anderen String, der für andere Anzeigegräte erstellt wurde, weiterhin nutzen kann. Unterschiedliche Anzeigen, kann man mittels eingestelltem Code verändern, so wie dies in der Busfanat Vollmatrix schon umgesetzt wurde. Es kann also nicht davon ausgegangen werden, daß künftig über hunderte Strings benötigt werden könnten.&lt;br /&gt;
&lt;br /&gt;
'''Dazu möchte ich gern ein passendes Zitat von Busfanat aus dem offiziellen Forum einfügen:'''&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Wenn man sich aber anschaut, wie viele Busse, die umgesetzt wurden, mit großteils den gleichen Scripts&lt;br /&gt;
 rumfahren, dann ist meiner Meinung nach der Bedarf nach verschiedenen Strings sowieso bald gedeckt.&lt;br /&gt;
 Ich glaube, mit 25 Strings pro Zielcode kommen wir die nächsten Monate wenn nicht Jahre über die Runden,&lt;br /&gt;
 weil sich einfach die Anzahl der Scripter in Grenzen hält.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== '''Sinn und Zweck einer ''&amp;quot;universellen Hofdatei&amp;quot;''. ''' ===&lt;br /&gt;
&lt;br /&gt;
Seitdem Omsi 2011 erschienen ist, sind viele weitere Busse erschienen. Nicht alle haben eine Rollbandanzeige oder eine ANNAX-Matrix. Neue Anzeigen sind auch nicht erst mit Omsi 2 erschienen, wie die Krüger-Matrix. Es gab schon die BUSE-Vollmatrix, die [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846%7C| Busfanat-Vollmatrix] oder Flipdot-Anzeige. Auch andere Informationsgeräte im Bus, haben ihren Platz in Omsi gefunden. Alle Anzeige- und Informationsgeräte brauchen die Hofdatei als Informationsquelle. Für fast jede Konfiguration von Anzeige-Geräten &amp;amp; Informationssteuergeräten, muß die Hofdatei angepasst werden. Möchte man nun einen anderen Bus nehmen, der eines der beiden verwendeten Geräte nicht besitzt, muß eine neue Hofdatei angefertig oder die vorhandene Hofdatei umgeschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Damit gibt es für eine Map ohne Chronologiefunktion schon mehrere Hofdateien, was völlig unnötig ist. Für eine Karte mit Chronologiefunktion gibt es allein schon mehrere Hofdateien, um die einzelnen Zeitspannen abzudecken. Stellt man nun noch für die einzelnen Anzeigesystemen noch die umgeschriebenen Hofdateien hinzu, werden es soviele Dateien, das man in der Busauswahl nichtmehr genau unterscheiden kann, welche Hofdatei nun für den entsprechenden Bus passend ist und man muß die einzelnen Busse in der ''AI-List'' genau zuweisen, damit diese richtig anzeigen. Dies würde mit einer universellen Hofdatei wegfallen, weil alle Busse auf diese eine universell angepasste Hofdatei zugreifen. &lt;br /&gt;
&lt;br /&gt;
Das mag insgesamt nicht schwer sein, aber nicht alle User haben dazu Zeit oder die Fähigkeit eine entsprechende Hofdatei zu erstellen. Mit einer universellen Hofdatei kann jeder Bus, unabhängig vom verwendeten Anzeige- und Informationssteuergerät, eine einzige Hofdatei für eine Karte verwenden. Bei Einführung eines neuen Anzeigesystems oder eines neuen Informationssteuergerätes braucht der User nur noch eine Hofdatei aus einem anderen Bus kopieren, ohne verher nachfragen zu müßen, oder testen zu müßen, welche Hofdatei eigentlich am besten passt. Das ist nichtnur für Buserbauer und Mapersteller sinnvoll, sondern ganz besonders für Paywarehersteller, da somit gewährleistet ist, daß wirklich alle Busse auf jeder Karte einsetzbar sind, ohne zuvor eine Hofdatei erstellen oder im Internet suchen zu müßen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== '''Vor- &amp;amp; Nachteile einer universellen Hofdatei.''' ===&lt;br /&gt;
&lt;br /&gt;
Es gibt für eine ''universelle Hofdatei'', natürlich einige Vorteile, aber leider auch einige Nachteile. Hier soll aufgezeigt werden, daß eine Umstellung durchaus sinnvoll ist und die Umstellung auch lohnt. Bei der Umsetzung einer ''universellen Hofdatei'' reicht es nicht aus, einfach die Hofdfatei ansich, zu erweitern. Es müßen auch einige Kleinigkeiten in den jeweiligen Bussen geändert werden.&lt;br /&gt;
&lt;br /&gt;
Vorteile einer ''universellen Hofdatei'':&lt;br /&gt;
&lt;br /&gt;
* Eine Hofdatei passt für alle Busse, unabhängig vom verwendeten Anzeige- &amp;amp; Informationssystem.&lt;br /&gt;
* Es werden auch alle verwendeten Informationsgeräte und Anzeigen im Bus unterstützt.&lt;br /&gt;
* Bei neuen Bussen mit bisher veröffentlichten Systemen, passt die universelle Hofdatei.&lt;br /&gt;
* Eine universelle Hofdatei ist unabhängig vom verwendeten Hofsystem (also für Omsi 1 oder Omsi 2).&lt;br /&gt;
* Diese Hofdatei kann bei Bussen mit neuen Systemen leicht angepasst/ erweitert werden.&lt;br /&gt;
* Bei neuen Bussen muß der User lediglich die Hofdatei in den Busordner einsetzen.&lt;br /&gt;
* Alle Busse werden dadurch leichter für alle Karten kompatibel.&lt;br /&gt;
* Ein Ziel kann unterschiedliche Anzeigen erhalten, die auf den unterschiedlichen Systemen angezeigt werden.&lt;br /&gt;
* Eine ''universelle Hofdatei'' kann durch kopieren/ einfügen schnell ergänzt und erweitert werden.&lt;br /&gt;
* Es muß nichtmehr getestet werden, welche Hofdatei für einen Bus passender ist.&lt;br /&gt;
* Bei Maps, kann ein User alle Busse problemlos einsetzen.&lt;br /&gt;
* Kann sehr einfach mit der [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=40888&amp;amp;highlight=| '''Hof Suite von Rumpelahns''' erstellt werden].&lt;br /&gt;
&lt;br /&gt;
Nachteile einer ''universellen Hofdatei'':&lt;br /&gt;
&lt;br /&gt;
* Einige bereits erstellte Hofdateien werden überflüssig (und auch die haben Arbeit und Zeit gekostet).&lt;br /&gt;
* Die Übersichtlichkeit innerhalb einer Hofdatei leidet (hauptsächlich beim Hofformat in Omsi 2).&lt;br /&gt;
* Bei nichtabsprache, welche Strings verwendeten werden können, kann es zu Problemen/ Streitigkeiten kommen.&lt;br /&gt;
&lt;br /&gt;
Insgesamt bleibt aber die Anzahl der verwendeten Strings, innerhalb eines kleinen und leicht überschaubaren Rahmen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Wie man eine &amp;quot;universelle Hofdatei&amp;quot; umsetzen kann. ==&lt;br /&gt;
&lt;br /&gt;
Um eine universelle Hofdatei umzusetzen, muß man lediglich drei Dinge beachten:&lt;br /&gt;
* Welche vorhandenen Strings kann ich nutzen, ohne die Strings in der Hofdatei umstellen zu müssen?&lt;br /&gt;
* Welche neuen Strings kann ich verwenden, die noch nicht von anderen Geräten ausgelesen werden?&lt;br /&gt;
* Wie kann ich neue Geräte auf weitere Strings umsetzen?&lt;br /&gt;
&lt;br /&gt;
Im folgenden geht es um bereits verwendete Strings, neu verwendete Strings und Strings die dadurch bereits vergeben sind und wie man das Auslesen der Strings beeinflußt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''Vergabe der Strings''' ====&lt;br /&gt;
&lt;br /&gt;
Sinn und Zweck einer &amp;quot;universellen Hofdatei&amp;quot; ist natürlich die Anpassung an mehrere verschiedene Informationssysteme an den einzelnen Bussen. Hierbei ist es natürlich unsinnig, wenn die von M+R Software vorgegebenen Strings beachtet werden (String 0 bis String 7) und einfach die nachfolgenden bereits vergebenen Strings verwendet werden. Hier ist es eine schwachsinnige Umsetzung der &amp;quot;universellen Hofdatei&amp;quot;. Es ist natürlich verständlich das jeder die benötigten Strings dicht bei einander haben möchte. Wenn aber bereits vergebene Strings einfach wieder umgeschrieben werden, die bereits für andere Informationssysteme vergeben wurden, wurde der Sinn der &amp;quot;universellen Hofdatei&amp;quot; nicht verstanden. Durch die Veröffentlichung hatte jeder die Möglichkeit, sich für eine beteiligung an der Umsetzung einer &amp;quot;universellen Hofdatei&amp;quot; einzubringen, um benötigte strings im Vorfeld zu reservieren. Besonders Add-On Herstellen wurden von mir direkt angeschrieben. Da aber entweder keine Antwort kam oder die Umsetzung nur Überlegt wurde, wurden bereits weitere Strings an andere User vergeben. Hier greift ganz klar das bekannte Sprichwort: &amp;quot;Wer zuerst kommt, mahlt zuerst&amp;quot;. &lt;br /&gt;
Für neue Projekte müßen dementsprechend neue Strings am Ende angepasst werden. Für einige neue Informationssysteme ergeben sich damit leider längere Stringlisten. Für andere Informationssysteme ist es nicht notwendig (aber sinnvoll und zweckmäßig) die bereits vergebenen, nicht benötigten Strings auszufüllen. Diese können auch frei gelassen werden.&lt;br /&gt;
&lt;br /&gt;
Sinnvoll ist es sich vorher Gedanken zu machen, welche bereits vergebene Strings mitbenutzt werden können und ob neue Strings erweitert werden müßen. Sinnvoll sind neue Strings dann, wenn die Schriftlänge mit anderen Systemen nicht passt oder zum Anzeigesystem gehörige Codes in die Strings geschrieben werden. Ein Anzeigesystem das keine Codes akzeptiert, oder bereits verwendete Codes anders auslegen, ergeben auf den verschiedenen Systemen falsche Anzeigen. Eine ANNAX-Matrix würde bei verwendung eines Codes für die Busfanat-Vollmatrix den Buchstaben des verwendeten Codes mit anzeigen. Andererseits gibt es auch Busse, wo die verwendeten Informationsgeräte bestimmte Eingabeformate erforderlich machen, die kein anderes Informationsgerät sinnvoll nutzen kann. Als Beispiel soll hier nur das Ansagesystem des LU-200 genannt werden. Dieses kann lediglich zwei einzelne Ziffern anzeigen, da dieses Gerät real umgesetzt wurde. Kein anderes bereits erstellte Informationsgerät kann etwas mit dieser Anzeige anfangen. Daher werden zum Beispiel in einem IBIS 2 lediglich die Zahlencodes wiedergegeben, statt einer lesbaren Anzeige.&lt;br /&gt;
&lt;br /&gt;
Besonders Payware-Herstellen sollten, um einen langen Spielspaß zu ermöglichen, eine &amp;quot;universelle Hofdatei&amp;quot; annehmen, statt blind einfach vorhandene Strings zu überschreiben. Man kann natürlich auch so unüberlegt handeln und seine Busse scriptseitig auf einer bestimmten Map festlegen. Das verkürtzt den Spielspaß aber erheblich, wenn man nicht ohne weiteres andere Busse, besonders dann wenn die mitgelieferten Busse schnell langweilig werden oder Freeware-Busse qualitytiv gleich- oder höherwertiger sind, einsetzen kann. Besonders Freeware-Busse die keine festgelegten Karten haben, können hier mit einbezogen werden.&lt;br /&gt;
&lt;br /&gt;
So wie Menschen sich anpassen können, sind auch die einzelnen String's individuell anpassbar. Besonders in Hinblick auf die verwendbaren Zeichen und Symbole, wie auch in der Zeichenlänge der damit versorgten Anzeigesysteme oder die Verwendung von Codes zur Anzeigeform. &lt;br /&gt;
&lt;br /&gt;
Für Hilfe zur Anpassung oder zur Einigung von neuen Strings, ist es sinnvoll die Kommunikation zwischen Paywareherstellern und Usern deutlich zu verbessern. Wenn man weiterhin, blind vorhandene bereits vegebene Strings benutzt, braucht man sich folglich nicht wundern, wenn es negative Kritiken (die dann auch berechtigt sind) für das jeweilige Produkt gibt. Man weiß nun nicht, ob es Faulheit oder Dummehit ist, wenn man bereits vorhandene Strings für eigene Systeme benutzt, daß soll hier auch nicht diskutiert werden, aber wenn es Omsi-seitig schon die Möglichkeit gibt, sollte man diese natürlich auch benutzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Veränderungen in der Hofdatei.''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Welche Strings bereits umgesetzt wurden und ausgelesen werden''' ====&lt;br /&gt;
&lt;br /&gt;
M+R Software haben bereits angefangen, neue Strings zu verwenden, als Omsi 2 eingeführt wurde. Hier wurden lediglich weitere Strings in der Hofdatei umgesetzt und neue Informationsteile auf die neuen Strings eingestellt. Busfanat hat auf bitten einer umsetzung, die von ihm erstellte [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846%7C|Busfanats-Vollmatrix], sofort auf andere neue Strings umgesetzt. Auch Perontinus hat die von ihm entworfenen [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=26274|Überlandbusse MAN ÜL 242, 272, 292 und 312], auf bereits neue und erweiterte Strings umgestellt.&lt;br /&gt;
&lt;br /&gt;
Im übrigen sei an diese Stelle erwähnt das alle Busse mit einer Rollbandtextur, oder Busse, die auf dieser Basis funktionieren, bereits einen einzigen String nutzen. Alle Busse auf dieser Basis nutzen nur den String 4. Der Unterschied der Texturgröße, wird über den Zugriff der Anzeige-Ordner geregelt. Dies betrifft mehrere Busse:&lt;br /&gt;
* MAN SD 200 Rollband von '''M+R Software'''&lt;br /&gt;
* MAN NL 202 Rollband von '''FRENZYMAX'''&lt;br /&gt;
* MB O305 von Rolf '''(RW1HH)'''&lt;br /&gt;
* Setra S215 UL von '''L.M.M.W.'''&lt;br /&gt;
* MB O307 V2 Banhnbus von '''Perotinus'''&lt;br /&gt;
* MB O407 von '''Perotinus'''&lt;br /&gt;
* GSÜH 240 von '''iTram'''&lt;br /&gt;
* Gemeinschaftsbusse von '''iTram'''&lt;br /&gt;
* LU 200 und GU 240 von '''ViewApp'''&lt;br /&gt;
und einige mehr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll es um die Stringsvergabe gehen und um die Anpassungen im Bus.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''Bereits verwendete Strings''' ====&lt;br /&gt;
&lt;br /&gt;
Bisher wurden folgende Terminus-Strings in der Hofdatei bis zum '''String 24''' erweitert und festgelegt:&lt;br /&gt;
&lt;br /&gt;
''Unter dem Befehl '''stringcount_terminus''' muss die Anzahl der Strings auf 25 gesetzt werden.''&lt;br /&gt;
&lt;br /&gt;
 [addterminus]&lt;br /&gt;
 123&lt;br /&gt;
 Endhaltestelle&lt;br /&gt;
 String  0 -  Anzeige IBIS 1 (nur Großbuchstaben, maximal 16 Zeichen)&lt;br /&gt;
 String  1 -  Anzeige ANNAX-Matrix obere Zeile  (maximal 16-Zeichen)&lt;br /&gt;
 String  2 -  Anzeige ANNAX-Matrix untere Zeile (maximal 16-Zeichen)&lt;br /&gt;
 String  3 -  Anzeige Seiten-ANNAX-Matrix, wenn diese einzeilig ist (maximal 16-Zeichen)&lt;br /&gt;
 String  4 -  Rollbandtextur (.tga-Datei)&lt;br /&gt;
 String  5 -  Anzeige IBIS 2 (Groß- &amp;amp; Kleinbuchstaben, maximal 20-Zeichen)&lt;br /&gt;
 String  6 -  Texturname für Steckschild (wenn Ziel in Matrix nicht darstellbar ist, &lt;br /&gt;
              oder nicht angezeigt werden soll)&lt;br /&gt;
 String  7 -  Texturname für Bildanzeige in Krüger-Matrix (Krüger+)&lt;br /&gt;
 String  8 -  Frontanzeige für ANNAX-Matrix (Groß- &amp;amp; Kleinbuchstaben, maximal 15-Zeichen)&lt;br /&gt;
 String  9 -  Heckanzeige für ANNAX-Matrix (maximal 4-Zeichen)&lt;br /&gt;
 String 10 -  IBIS-Code für Gegenroute für künftige Ikarus-Beschilderung (Ikarus 280.02)&lt;br /&gt;
 String 11 -  Anziege für [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846&amp;amp;pageNo=1| Busfanats-Vollmatrix] obere Zeile (oder Komplettanzeige, Wenn diese Zeile leer ist, &lt;br /&gt;
               wird String 1 ausgelesen)&lt;br /&gt;
 String 12 -  Anzeige für [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846&amp;amp;pageNo=1| Busfanats-Vollmatrix] untere Zeile (falls erforderlich, Wenn diese Zeile leer ist, &lt;br /&gt;
               wird String 2 ausgelesen)&lt;br /&gt;
 String 13 -  Anzeige für Coopers Lawo-Matrix Front oben (bleibt dieser String leer, wird String 1 ausgelesen)&lt;br /&gt;
 String 14 -  Anzeige für Coopers Lawo-Matrix Front unten (bleibt dieser String leer, wird String 13 ausgelesen)&lt;br /&gt;
 String 15 -  Anzeige für Coopers Lawo-Matrix Seite oben (bleibt dieser String leer, wird String 16 ausgelesen)&lt;br /&gt;
 String 16 -  Anzeige für Coopers Lawo-Matrix Seite unten (bleibt dieser String leer, wird String 15 ausgelesen)&lt;br /&gt;
 String 17 -  IBIS-Anzeige für Niederflur-Busse aus den Wien-Add-Ons 1 und 2&lt;br /&gt;
 String 18 -  MAN ÜL Vollmatrix oben&lt;br /&gt;
 String 19 -  MAN ÜL Vollmatrix unten&lt;br /&gt;
 String 20 -  MAN NL 2x3 Innenanzeige&lt;br /&gt;
 String 21 -  MAN NL 2x3 Innenanzeige II (zeigt eine zusätzliche Information an [über])&lt;br /&gt;
 String 22 -  Zusätzliche Heckanzeige für Coopers LAWO-Matrix, wenn Ziele keine Liniennummer haben (Betriebsfahrt)&lt;br /&gt;
 String 23 -  einfache Krüger-Matrix oben&lt;br /&gt;
 String 24 -  einfache Krüger-Matrix unten&lt;br /&gt;
 String 25 -  Anzeigecode für das Ansagegerät im LU 200 / GU 240 aus Wien (Zwei Ziffern getrennt durch Leerzeichen)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bisher wurden folgende Busstop-Strings in der Hofdatei bis zum '''String 8''' erweitert und festgelegt:&lt;br /&gt;
&lt;br /&gt;
''Unter dem Befehl '''stringcount_busstop''' muss die Anzahl der Strings auf 9 gesetzt werden.''&lt;br /&gt;
&lt;br /&gt;
 [addbusstop]&lt;br /&gt;
 Haltestelle&lt;br /&gt;
 String  0 -  Anzeige IBIS 1 (nur Großbuchstaben, maximal 16 Zeichen)&lt;br /&gt;
 String  1 -  Innenanzeige &lt;br /&gt;
 String  2 -  Innenanzeige nach Umschaltung&lt;br /&gt;
 String  3 -  IBIS 2 (Groß- &amp;amp; Kleinbuchstaben, 20 Zeichen)&lt;br /&gt;
 String  4 -  Haltestellencode für die Ansagengeräte der Hochflurbusse aus den Wien-Add-Ons 1 und 2&lt;br /&gt;
 String  5 -  Wabencode von iTram (aktuell im GSÜH 240 umgesetzt)&lt;br /&gt;
 String  6 -  IBIS-Anzeige für Niederflur-Busse aus den Wien-Add-Ons 1 und 2&lt;br /&gt;
 String  7 -  Ansagenlänge in Sekunden für IBIS-Geräte der Busse aus den Wien-Add-Ons 1 und 2&lt;br /&gt;
 String  8 -  Innenanzeige für Niederflur-Busse aus den Wien-Add-Ons 1 und 2 &lt;br /&gt;
              (fixe Länge von 2x24 Zeichen (24 Zeichen (= Zeile 1), dann &amp;quot;@&amp;quot; und nochmals 24 Zeichen (= Zeile 2)))&lt;br /&gt;
 String  9 -                                  weitere Strings wurden noch nicht festgelegt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Diese bereits zugewiesenen Strings sollten unbedingt beachtet werden, da es unsinnig ist, bereits veröffentlichte Scripte neu anzupassen - im Gegenteil ist es einfacher, neue Objekte und Systeme auf neue Strings anzupassen!''&lt;br /&gt;
&lt;br /&gt;
 Hinweis zur LAWO-Matrix von Cooper: Diese Vollmatrix verwendet in erster Linie die Strings 13 bis 16. Es müßen aber&lt;br /&gt;
 nicht alle Felder ausgefüllt werden. Cooper hat hier gleich mehrere Möglichkeiten eingebaut um auf andere Strings&lt;br /&gt;
 ausweichen zu können.&lt;br /&gt;
&lt;br /&gt;
 String 13 - bleibt dieser String leer, wird String 1 ausgelesen,&lt;br /&gt;
 String 14 - bleibt dieser String leer, wird String 13 ausgelesen,&lt;br /&gt;
 String 15 - bleibt dieser String leer, wird String 16 ausgelesen,&lt;br /&gt;
 String 16 - bleibt dieser String leer, wird String 15 ausgelesen,&lt;br /&gt;
           - Bleiben String 15 und 16 leer, werden die Strings 13 und 14 benutzt.&lt;br /&gt;
 &lt;br /&gt;
 Solange der String 13 benutzt wird, werden keine anderen Ersatzstrings verwendet. Bleiben aber alle für die&lt;br /&gt;
 Lawo-Matrix verwendeten Strings (also String 13 bis 16) leer, werden von der Lawo-Matrix, ersatzweise die&lt;br /&gt;
 String 1 bis 4 verwendet. Hier gibt es wieder mehrere Möglichkeiten Ersatzstrings zu benutzen:&lt;br /&gt;
 String 1 - bleibt dieser leer, wird String 2 ausgelesen,&lt;br /&gt;
 String 2 - bleibt dieser leer, wird String 1 ausgelesen,&lt;br /&gt;
 String 3 - bleibt dieser leer, wird String 4 ausgelesen,&lt;br /&gt;
 String 4 - bleibt dieser String leer oder wird ein Textureintrag mit der Dateiendung TGA eingetragen,&lt;br /&gt;
 wird String 3 ausgelesen.&lt;br /&gt;
&lt;br /&gt;
 '''Mit dieser Variante hat man sogar die Möglichkeit ein Ziel in verscheidenen Varianten anzeigen zu lassen.'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''Zeichenlänge eines String''' ====&lt;br /&gt;
&lt;br /&gt;
Wie bereit's geschrieben, gibt es von Omsi keinerlei Begrenzung wie lang der Inhalt eines String sein darf. Auch die Hofdatei ansich (also Textdokument) setzt keine Längengrenze. Einige Anzeigen geben aber eine bestimmte Maximallänge, also eine maximale Anzahl von Zeichen vor. Benutzt man also zwei Anzeigen die eine unterschiedliche Zeichenanzahl zulassen und setzt diese auf einen String, wird eine Anzeige falsche Ergebnisse liefern. Als einfaches Beispiel kann man hier die beiden IBIS-Geräte nehmen, wie sie von M+R Software umgesetzt wurden.&lt;br /&gt;
Während das IBIS 1 nur und ausschließlich Großbuchstaben verwendet und nur diese anzeigen kann, kann das IBIS 2 Groß- und Kleinbuchstaben verwenden. Dadurch ist auch die Anzahl an verwendbaren Zeichen begrenzt. Umlaute wie &amp;quot;Ä,Ö und Ü&amp;quot; fallen vollständig beim IBIS 1 raus (sowie auch das &amp;quot;ß&amp;quot;).&lt;br /&gt;
Die genaue Länge eines Strings ist einerseits in dem jeweiligen Script genau festgelegt und auch in der verwendeten Font. Das Script des IBIS 1 mit der verwendeten Font, läst insgesamt nur maximal 16 Zeichen zu. Dazu zählen alle in dem String verwendeten Zeichen, also Buchstaben, Zahlen, und Leerzeichen. Alles was nach den 16 Zeichen geschrieben wird, kann einfach im Display des IBIs 1 nicht angezeigt werden. Hat man als Beipiel einen Haltestellennamen der Länger als 16 Zeichen ist, werden nur maximal 16 Zeichen angezeigt:&lt;br /&gt;
 I N V A L I D E N S I E D L U N G&lt;br /&gt;
Im IBIS 1 würde nun also der letzte Buchstabe fehlen. Um dies anständig anzeigen zu lassen, sollte man also die Anzeige kürzen&lt;br /&gt;
 I N V A L I D E N S I E D .&lt;br /&gt;
Solch eine Abkürzung macht im IBIS 2 keinen Sinn, da dort Umlaute genauso angezeigt werden können, wie längere Haltestellennnamen:&lt;br /&gt;
 I n v a l i d e n s i e d l u n g&lt;br /&gt;
Ein Kürzen ist hier in diesem Fall also nicht nötig. Entwickelt oder setzt jemand eine neue Anzeige um, die beispielsweise nur Großbuchstaben aber 18 Zeichen anzeigen kann, emfpielt sich die verwendung eines weiteren String. Oder man weicht vom Original ab. &lt;br /&gt;
&lt;br /&gt;
Um nun genau zu wissen, welche Strings man nun verwenden kann oder ob man neue verwenden muß, ist es sinnvoll es an den originalen Fahrzeugen von M+R Software zu testen. Auch die folgenden Strings die von Freewarefahrzeugen verwendet werden sollte man beachten.&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 Wer sich nur an den von M+R Software vorgegebenen Standard hält und alle folgenden belegten Strigs mißachtet, &lt;br /&gt;
 kann auch ganz auf eine universelle Hofdatei verzichten, da der Sinn einer universellen Hofdatei definitiv &lt;br /&gt;
 nicht verstanden wurde.&lt;br /&gt;
 Wer also unbedingt nur die Standardfahrzeuge und ihre Strings beachtet und andere bereits vergebenen Strings &lt;br /&gt;
 ungeachtet läßt und diese sinnlos überschreibt, sollte sich unbedingt nochmal den Sinn und Zweck der &lt;br /&gt;
 universellen Hofdatei durchlesen. &lt;br /&gt;
 Ich habe jedem die Möglichkeit gegeben sich rechtzeitig bei mir zu melden, um weitere Strings zu vegeben. &lt;br /&gt;
 Einige haben diese Möglichkeit genutzt, wie Busfanat, Perotinus, iTram, Chrizzly92 und Cooper. Bekannte Payware-Hersteller habe &lt;br /&gt;
 ich vor Veröffentlichung dieses Artikels auch angeschrieben!&lt;br /&gt;
 Hier greift ganz klar das Sprichwort: &amp;quot; ''Wer zuerst kommt, malt zuerst.'' &amp;quot; und &amp;quot; ''Den letzten beißen die Hunde'' &amp;quot;. &lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Nachfolgend nocheinmal einige Zeichenlängen für einige Anzeigen in Bussen:&lt;br /&gt;
&lt;br /&gt;
 IBIS 1 = 16 Zeichen, nur Großbuchstaben (String 0)&lt;br /&gt;
 IBIS 2 = 20 Zeichen, Groß- &amp;amp; Kleinbuchstaben, Umlaute (String 5)&lt;br /&gt;
 ANNAX  = 16 Zeichen in 2 Zeilen (String 1 und 2)&lt;br /&gt;
 Seiten-ANNAX = 16 Zeichen einzeilig (String 3)&lt;br /&gt;
 Ansagegerät im LU-200 = 2 Ziffern (String 4 in der Haltestellenliste)&lt;br /&gt;
 Innenanzeige SD 202 oder MAN NL/NG = 2x 20 Zeichen mit automatischer Umschaltung (String 1 und 2 &lt;br /&gt;
                                      in der Haltestellenliste)&lt;br /&gt;
 Vollmatrix, Die Zeichenlänge ist von der Form der Schrift (Font) und die Mitnutzung von Liniennummern abhängig.&lt;br /&gt;
 ANNAX-Matrix vom MB O307, O407 und MAN ÜL, Maximal 15 Zeichen incl. Liniennummer (String 8)&lt;br /&gt;
 ANNAX-Matrix am Heck des MB O307, O407, MAN ÜL maximal 4 Zeichen (String 9)&lt;br /&gt;
 LAWO-MATRIX am Heck von Modifizierten Bussen von Cooper, maximal 6 Zeichen (String 22)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Die Zeichenanzahl in den unterschiedlichen Matrizen ist vom jeweilig verwendeten Font abhängig. Hier kann man keine festgelegte Zeichenanzahl angeben. Das selbe betrifft auch die Innenanzeige, wenn diese auf einer LED-Animation umgestellt wird. Auch dann entscheidet wieder die einzelne Zeichenlänge der Font die zu verwendete maximale Länge in den Innenanzeigegeräten. Auch die Krüger-Matrix vom MAN NL und NG von M+R Software sind nicht genau festgelegt, es sieht nur passender aus, wenn man hier die Anzahl der Dots beachtet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== '''Hinzufügen und erweitern von zusätzlichen Strings.''' ====&lt;br /&gt;
&lt;br /&gt;
Um weitere Strings einzubinden sollte man sich vorher überlegen:&lt;br /&gt;
* Wieviele Strings brauche ich für die im Bus verwendete Frontanzeige?&lt;br /&gt;
* Benötige ich seperate Strings für eine anders anzeigende Seitenanzeige?&lt;br /&gt;
* Soll die Heckanzeige seperat und unabhängig der anderen Anzeigen, Informationen darstellen?&lt;br /&gt;
* Brauche ich einen zusätzlichen Strings für ein im Bus verbautes Informationssteuergerät?&lt;br /&gt;
* Können einige Anzeigeräte bereits vergebene Strings auslesen ohne das diese Strings angepasst oder geändert werden müßen?&lt;br /&gt;
* Wie einigt man sich auf neue zusätzliche Strings.&lt;br /&gt;
&lt;br /&gt;
Man kann im offiziellen Omsi-Forum die künftige Verwendung neuer Strings ankündigen und diese in den Scripten des Fahrzeug's einstellen. Wer ganz sicher gehen möchte, kann sich im offiziellen Omsi-Forum an den User [http://www.omnibussimulator.de/forum/index.php?page=User&amp;amp;userID=1152| &amp;lt;&amp;lt;Tatra&amp;gt;&amp;gt; ], via PN wenden und die Verwendung weiterer Strings abklären. Oder via E-Mail an: e_marko@web.de - das gilt für neue und auch bereits erschienende Fahrzeuge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Veränderungen in den BusScripten''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Welche Scripte betroffen sind''' ====&lt;br /&gt;
&lt;br /&gt;
Hauptsächlich finden sich die Änderungen, nur in zwei Scripten wieder. Zum einen muß das Auslesen des Zieles in den Scripten der Matrixanzeige stattfinden. Diese Scripte haben im Dateinamen meist den Präfix: ''Matrix'', ''Rollband`` oder ähnliches und die Dateiendung lautet immer auf osc.&lt;br /&gt;
&lt;br /&gt;
Zum anderen finden sich Änderungen in dem jeweils verbauten Informationssteuergerät wieder. Die Dateinamen der verwendeten Steuergeräte sind noch unterschiedlicher als bei der Matrix. Teilweise sind die Scripte zum Steuern der Informationsanlage mit den Fahrkartendruckern zusammengelegt, da es in einigen Bussen kombinierte IBIS-Fahrkartendrucker gibt, wie dem EFAD, INIT, Atron etc, muß man hier eventuell nach mehreren Präfixen suchen:&lt;br /&gt;
* IBIS&lt;br /&gt;
* IBIS_2&lt;br /&gt;
* EFAD&lt;br /&gt;
* Atron&lt;br /&gt;
* Ticketprinter&lt;br /&gt;
* Printer&lt;br /&gt;
Aber auch hier lautet die Dateiändungen generell: osc.&lt;br /&gt;
&lt;br /&gt;
Die jeweils in den Bussen verbauten Informationssteuergeräten, steuern alle Informationsgeräte die es im Bus gibt, also nicht nur die äußeren Matrix-Anzeigegeräte, sondern auch die inneren Haltestellenanzeigen. In diesen dazugehörigen Scripten werden auch die jeweils benannten Strings angegeben, welche ausgelesen werden sollen.&lt;br /&gt;
&lt;br /&gt;
==== '''Die Befehle zum Auslesen bestimmter Strings.''' ====&lt;br /&gt;
&lt;br /&gt;
Zum Auslesen der entsprechenden Strings gibt es zwei Befehle:&lt;br /&gt;
&lt;br /&gt;
* ''(M.V.GetTerminusString)''&lt;br /&gt;
  Zum Auslesen eines bestimmten Strings aus der Endstellenliste (2.Bereich einer Hofdatei)'''[addterminus]'''&lt;br /&gt;
&lt;br /&gt;
* ''(M.V.GetBusstopString)''&lt;br /&gt;
  Zum Auslesen eines bestimmten Strings aus der Haltestellenliste (3.Bereich einer Hofdatei) '''[addbusstop]'''&lt;br /&gt;
&lt;br /&gt;
Nur diese beiden Befehle sind für das Auslesen eines bestimmten Strings zuständig. In diesem Bezug finden sich leider nicht immer die entsprechenden nummerierten String, was das umstellen sehr erschwert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Einstellungen zum Auslesen der Strings.''' ====&lt;br /&gt;
&lt;br /&gt;
Als Beispiele sollen hier die Stringeinstellungen im IBIS 1 des MAN SD 200 und des IBIS 2 des SD 202 dienen, sowie die Stringeinstellungen der ANNAX-Matrix.&lt;br /&gt;
&lt;br /&gt;
===== ''' IBIS 1 ''' =====&lt;br /&gt;
&lt;br /&gt;
Das IBIS 1 ließt den String 0 aus der Endstellenliste [addterminus]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{macro:IBIS_RefreshTerminusText}&lt;br /&gt;
	(L.L.IBIS_TerminusIndex) 0 (M.V.GetTerminusString) (S.$.IBIS_terminus_name)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und den String 0 aus der Haltestellenliste aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Sonst zeige die Bushaltestelle&lt;br /&gt;
	(S.L.IBIS_busstop_index) 0 (M.V.GetBusstopString)&lt;br /&gt;
	(S.$.IBIS_busstop_name)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die hier eingestellten Ziffern NULL, stehen für den String 0 in beiden Listen.&lt;br /&gt;
&lt;br /&gt;
===== ''' IBIS 2 ''' =====&lt;br /&gt;
&lt;br /&gt;
Für das IBIS 2 Gerät sind es zwei verschiedene Strings die ausgelesen werden. In der Endstellenliste ist es String 5:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{macro:IBIS_RefreshTerminusText}&lt;br /&gt;
	(L.L.IBIS_TerminusIndex) 5 (M.V.GetTerminusString) (S.$.IBIS_terminus_name)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und String 3 in der Haltestellenliste:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Sonst zeige die Bushaltestelle&lt;br /&gt;
	(L.L.IBIS_busstop_index) 3 (M.V.GetBusstopString)&lt;br /&gt;
	(S.$.IBIS_busstop_name)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die hier gezeigten Ziffern 5 und 3 weisen auf die Strings hin, die die Information für das IBIS 2 Gerät enthält.&lt;br /&gt;
&lt;br /&gt;
===== '''Innenanzeige ''' =====&lt;br /&gt;
&lt;br /&gt;
Auch die Innenanzeige des MAN SD 202 (D92) ließt bestimmte Strings aus. Diese findet sich ausschließlich in der Haltestellenliste (3.Bereich) der Hofdatei. Da die Innenanzeige zwei unterschiedliche Informationen anzeigen kann, die im zeitlichen Interval umschaltet, finden sich dort natürlich 2 Strings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{macro:IBIS_LCD-refresh}&lt;br /&gt;
&lt;br /&gt;
'Formatierung der D92-Innenanzeige&lt;br /&gt;
&lt;br /&gt;
	(L.L.IBIS_LCD-zeile) 1 = &lt;br /&gt;
	(L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString) $length 0 &amp;gt; &amp;amp;&amp;amp;&lt;br /&gt;
	{if}&lt;br /&gt;
		(L.L.IBIS_RouteIndex) 0 &amp;gt;=&lt;br /&gt;
		{if}&lt;br /&gt;
			(L.L.IBIS_LCD-zeile) &lt;br /&gt;
			(L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString)&lt;br /&gt;
			(S.$.IBIS_cabindisplay)&lt;br /&gt;
		{endif}&lt;br /&gt;
	{else}&lt;br /&gt;
		(L.L.IBIS_RouteIndex) 0 &amp;gt;=&lt;br /&gt;
		{if}&lt;br /&gt;
			(L.L.IBIS_LCD-zeile) &lt;br /&gt;
			(L.L.IBIS_busstop_index) 1 (M.V.GetBusstopString) &lt;br /&gt;
			(S.$.IBIS_cabindisplay)&lt;br /&gt;
		{endif}&lt;br /&gt;
	{endif}&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier erkennt man, daß aus der Haltestellenliste zwei unterschiedliche Strings ausgelesen werden sollen. Für die Innenanzeige sind in der Hofdatei die String 1 und 2 vorgesehen.&lt;br /&gt;
&lt;br /&gt;
===== '''Rollbandanzeige ''' =====&lt;br /&gt;
&lt;br /&gt;
Für das Rollband gibt es nur einen String der ausgelesen werden soll:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Aktualisierung der Strings für das Austauschen der Texturen:&lt;br /&gt;
			(L.L.rlbnd_ziel) trunc s0&lt;br /&gt;
			&amp;quot;..\..\Anzeigen\Rollband_SD79\&amp;quot; 1 (M.V.GetDepotStringGlobal) $+ &amp;quot;\&amp;quot; $+ (S.$.Rollband_Tex_H)&lt;br /&gt;
			l0 4 (M.V.GetTerminusString) $+ (S.$.Rollband_Tex_V)&lt;br /&gt;
			(L.$.Rollband_Tex_H) l0 1 + 4 (M.V.GetTerminusString) $+ (S.$.Rollband_Tex_H)&lt;br /&gt;
&lt;br /&gt;
'Internen Index aktualisieren:&lt;br /&gt;
			(M.L.rollband_refreshIntIndex)&lt;br /&gt;
		{endif}&lt;br /&gt;
	{endif}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier steht der String der ausgelesen werden soll, direkt vor dem Befehl (M.V.GetTerminusString) und zeigt auf den String 4. Für Rollbandbusse, sollte dieser String beibehalten werden (unabhängig von der Form der Rollbandtextur), da jeder Bus im Unterordner ''Anzeige'' seine eigene Rollbandtextur benutzt kann, wenn sich die Form der Textur von den Formen anderer Rollbandbusse unterscheidet. Bei bereits vorhandenen Maps, sollte man die Dateinamen der Rollbandtexturen, aus einer vorhandenen Hofdatei abschreiben. So ist gewährleistet, daß man keinen seperaten String benötigt, um die richtigen Texturen anzeigen zu lassen.&lt;br /&gt;
Wichtig ist auch die Beachtung der verwendeten Dateiendungen.&lt;br /&gt;
&lt;br /&gt;
===== ''' ANNAX-Matrix ''' =====&lt;br /&gt;
&lt;br /&gt;
Damit auch die Außenanzeige (Matrix) die richtigen Strings ausließt, muß in der Scriptdatei ''matrix.osc'' oder einer ähnlich lautenden Datei, die Matrix auf die richtigen Strings gesetzt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{if}&lt;br /&gt;
	&amp;quot;xxx&amp;quot; 30 random 1 (M.V.GetTerminusString) 10 $SetLengthL $+ &amp;quot;xxx&amp;quot; $+ &amp;quot;@&amp;quot; $+&lt;br /&gt;
	&amp;quot;xxx&amp;quot; 30 random 2 (M.V.GetTerminusString) 10 $SetLengthL $+ &amp;quot;xxx&amp;quot; $+ &amp;quot;@&amp;quot; $+ $+&lt;br /&gt;
	&amp;quot;xxx&amp;quot; 30 random 3 (M.V.GetTerminusString) 10 $SetLengthL $+ &amp;quot;xxx&amp;quot; $+ $+    &lt;br /&gt;
              (S.$.Matrix_NewTerminus)						&lt;br /&gt;
	{else}&lt;br /&gt;
	&amp;quot;yxyxyxyxyxyxyxyx@xyxyxyxyx       @zzzzzzzzzzzzzzzz&amp;quot; (S.$.Matrix_NewTerminus)&lt;br /&gt;
	{endif}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bei den Bussen MAN SD 200 sowie SD 202, stehen diese Einträge zweimal drin. Und es gibt natürlich auch 3 Strings die Ausgelesen werden müßen. Die auszulesenden String stehen auch hier wieder direkt vor dem Befehl (M.V.GetTerminusString) und beziehen sich bei den MAN SD-Bussen auf die Drei verbauten Matrix-Zeilen.&lt;br /&gt;
&lt;br /&gt;
#String enthält die Information der oberen Zeile der Front-Anzeige (maximal 16 Zeichen),&lt;br /&gt;
#String enthält die Information der unteren Zeile der Front-Anzeige (maximal 16 Zeichen), was eine erweiterung für die obere Zeile darstellt und&lt;br /&gt;
#String befindet sich seitlich am Bus. Hier gibt es nur eine Zeile (maximal 16 Zeichen).&lt;br /&gt;
Wenn sich die Seitenmatrix am Bus von der vorderen unterscheidet, sollte ein seperater String verwendet werden, da man auf der Front-Matrix mehr Informationen unterbringen kann als an der Seite.&lt;br /&gt;
&lt;br /&gt;
Die Verwendung des 3. Strings entfällt, wenn sich die Front-Anzeige und die Seiten-Anzeige gleichen. Dann werden für die Seiten-Anzeige ebendfalls die Strings 1 &amp;amp; 2 ausgelesen, damit das angezeigte Ziel identisch ist.&lt;br /&gt;
&lt;br /&gt;
===== ''' Steckschild ''' =====&lt;br /&gt;
&lt;br /&gt;
Für das Steckschild gilt der gleiche Befehl, aber abhängig vom verwendeten IBIS-Code. Soll statt einer Anzeige in der Matrix oder einer vewendeten Rollbandtextur, ein Steckschild in der Frontscheibe verwendet werden, Sollte der IBIS-Code in der Hofdatei 4-stellig sein. Also ein IBIScode größer als die Zahl 1.000, setzt den auszulesenden String um auf den String 6, wo sich die Texturname des Steckschildes befinden sollte, daß Verwendtet werden soll.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
' Trigger für Steckschild&lt;br /&gt;
&lt;br /&gt;
{trigger:bus_matrix_change_steckschild}&lt;br /&gt;
	(L.L.matrix_steckschild_index) 1 + (S.L.matrix_steckschild_index)&lt;br /&gt;
	1000 + (M.V.GetTerminusIndex) (S.L.matrix_steckschild_Termindex)&lt;br /&gt;
&lt;br /&gt;
	(M.L.matrix_setsteckschild)&lt;br /&gt;
	(M.L.matrix_refreshIntIndex)&lt;br /&gt;
{end}&lt;br /&gt;
&lt;br /&gt;
{macro:matrix_setsteckschild}&lt;br /&gt;
	(L.L.matrix_steckschild_Termindex) s0&lt;br /&gt;
	0 &amp;gt;= &lt;br /&gt;
	{if}&lt;br /&gt;
		l0 6 (M.V.GetTerminusString) (S.$.Matrix_SchildFrnt)&lt;br /&gt;
		1 $SetLengthL $StrToFloat 1 max (S.L.matrix_steckschild_vis)&lt;br /&gt;
		&amp;quot;..\..\Anzeigen\SteckSchilder\&amp;quot; (L.$.Matrix_SchildFrnt) $+ (S.$.Matrix_SchildFrnt)&lt;br /&gt;
	{else}&lt;br /&gt;
		0 (S.L.matrix_steckschild_index) (S.L.matrix_steckschild_vis)&lt;br /&gt;
		&amp;quot;&amp;quot;  (S.$.Matrix_SchildFrnt)&lt;br /&gt;
	{endif}&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Im oberen Bereich dieses Abschnittes, steht die Zahl 1000, was darauf hindeutet, daß das Steckschild verwendet werden soll. Im unteren Abschnitt folgenden dann der Verweis auf den String 6 für die richtige Textur des Steckschildes und darunter der Pfad, wo sich die Steckschilder befinden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== '''Auslesen von zusätzlichen String, mit der Möglichkeit von &amp;quot;Ersatz-Strings&amp;quot;. ''Die Busfanat-Vollmatrix.'' ''' ===&lt;br /&gt;
&lt;br /&gt;
Der folgende Abschnitt ist von Busfanat erstellt worden und soll zeigen, wie man Ersatzstrings verwendet. Diese Möglichkeit kann in allen Bussen umgesetzt werden, solange diese, die Anzeigen einer ANNAX-Matrix sauber anzeigen können (für die BUSE-Vollmatrix ungeeignet).&lt;br /&gt;
Während eine ANNAX-Matrix nur wenige Möglichkeiten bietet ein Ziel anzuzeigen, gibt es andere Anzeigen, die die Möglichkeit bieten, ein und das selbe Ziel unterschiedlich darzustellen. Eine Variante bietet die Krüger+ Anzeige. Hier kann statt eines Ziels das nur über Buchstaben verfügt, mittels Textur auch Zeichen dargestellt werden. Diese Anzeige verwendet dann den String 7 und beinhaltet ebenfalls einen Texturdateinamen.&lt;br /&gt;
&lt;br /&gt;
Eine andere, raffinierte Möglichkeit bietet die [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846%7C| '''Busfanats-Vollmatrix''']. Diese beschränkt sich nicht nur auf 2 Strings, sondern bietet zusätzlich die Möglichkeit 2 originale Strings als Ersatz zu verwenden. &lt;br /&gt;
Die [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846%7C| '''Busfanats-Vollmatrix'''] ermöglicht Teile der Zielinformation besonders darzustellen, ohne Bildtexturen zu verwenden. Mit zusätzlichen Befehlen, hinter der Information kann ein Ziel Großgeschrieben oder Invertiert dargestellt werden. Diese Vollmatrix kann aber auch Ziele so darstellen, wie es die ANNAX-Anzeige ermöglicht. Dazu brauchen die String 1 und 2 nicht kopiert werden, da die [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846%7C| '''Busfanats-Vollmatrix'''] diese String mitausließt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Grundlegende Funktion der ''Busfanat-Vollmatrix'' ''': ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll eine Ziel besonders dargestellt werden, schreibt man in String 11 und 12 das Ziel wie gewünscht ein und mittels Befehlen werden diese Ziele dann verändert.&lt;br /&gt;
   String 11: '''Bahnhof'''*B&lt;br /&gt;
   String 12:  Kieselstein&lt;br /&gt;
Hier wird das Wort &amp;quot;Bahnhof&amp;quot;, dick geschrieben, während der &amp;quot;Kieselstein&amp;quot; normal dargestellt wird.&lt;br /&gt;
   String 11: '''Pause'''*I&lt;br /&gt;
   String 12:&lt;br /&gt;
Hier wird das Wort &amp;quot;Pause&amp;quot; invertiert. Dabei erscheinen die Buchstaben dunkler als die umgebung, wo die Dot's erscheinen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ''' Die erweiterte Funktion der ''Busfanats-Vollmatrix''. ''' ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn das gewünschte Ziel so angezeigt werden soll, wie in einer ANNAX-Matrix, bedarf es bei dieser Möglichkeit keinen besonderen Aufwand, da die [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846%7C| '''Busfanats-Vollmatrix'''], die String 1 und 2 ebenfalls ausließt. Stehen in den Strings 11 und 12 Informationen drin, werden die Informationen aus den Strings 11 und 12 ausgelesen und dargestellt. Bleiben diese beiden String leer, werden die Informationen aus den Strings 1 &amp;amp; 2 ausgelesen und diese in der Matrix gezeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'  WENN die Zielanzeige wechseln soll&lt;br /&gt;
  (L.L.Matrix_TerminusIndex) 1 (M.V.GetTerminusString) (S.$.Matrix_Hofdatei_oben)&lt;br /&gt;
  (L.L.Matrix_TerminusIndex) 2 (M.V.GetTerminusString) (S.$.Matrix_Hofdatei_unten)&lt;br /&gt;
  (L.L.Matrix_TerminusIndex) 11 (M.V.GetTerminusString) &amp;quot;&amp;quot; $= !&lt;br /&gt;
  (L.L.Matrix_TerminusIndex) 12 (M.V.GetTerminusString) &amp;quot;&amp;quot; $= ! ||&lt;br /&gt;
  {if}&lt;br /&gt;
   (L.L.Matrix_TerminusIndex) 11 (M.V.GetTerminusString) (S.$.Matrix_Hofdatei_oben)&lt;br /&gt;
   (L.L.Matrix_TerminusIndex) 12 (M.V.GetTerminusString) (S.$.Matrix_Hofdatei_unten)&lt;br /&gt;
  {endif}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zuerst ließt das Script der [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846%7C| '''Busfanat-Vollmatrix'''] die Strings 1 und 2 aus. Bevor die Matrix die Anzeige umstellt, ließt das Script die Strings 11 und 12 aus der Hofdatei aus. Bleiben diese Zeilen leer, wird das zuerst eingelesene Ziel auf der Matrix dargestellt. Wenn aber in der Zeile 11 und 12 Informationen enthalten sind, werden die Informationen die zuerst aus den Strings 1 und 2 ausgelesen wurden, überschrieben und durch die neuen Informationen ersetzt.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846%7C| '''Busfanats-Vollmatrix'''], findet ihr im Omsi-Forum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=13846| Busfanat-Vollmatrix],&lt;br /&gt;
* Perotinus [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=26274| MAN ÜL's], [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=20384| MB O 307 Bahnbus], [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=40032| MB O307 Bahnbus V2] und [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=32580&amp;amp;highlight=| MB O407] &lt;br /&gt;
* Hofdatei Spandau von M+R Software aus Omsi 1 &amp;amp; Omsi 2,&lt;br /&gt;
* [http://omnibussimulator.de/| Offizielles Omsi-Forum],&lt;br /&gt;
* [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=31619| Gräf &amp;amp; Stift GSÜH 240 M12 von iTram].&lt;br /&gt;
* [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;threadID=35285| Grät &amp;amp; Stift Gemeinschaftsbusse von iTram].&lt;br /&gt;
* [http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;amp;postID=504330| Lawo-Matrix und Mod's von Cooper]&lt;br /&gt;
&lt;br /&gt;
== Einen herzlichen Dank ==&lt;br /&gt;
geht an&lt;br /&gt;
&lt;br /&gt;
* Busfanat,&lt;br /&gt;
* Perotinus,&lt;br /&gt;
* Marcel Kuhnt,&lt;br /&gt;
* Davidps,&lt;br /&gt;
* Danny,&lt;br /&gt;
* Nuorahino,&lt;br /&gt;
* Janine,&lt;br /&gt;
* Rumpelhans,&lt;br /&gt;
* iTram,&lt;br /&gt;
* Cooper,&lt;br /&gt;
* Chrizzly92,&lt;br /&gt;
* ViewApp,&lt;br /&gt;
* Teneberus,&lt;br /&gt;
&lt;br /&gt;
=== Anhang ===&lt;br /&gt;
&lt;br /&gt;
Ich würde mich freuen, wenn man diese &amp;quot;universelle Hofdatei&amp;quot; wieder umsetzen könnte. Es ist wirklich keine neue Idee, da Marcel Kuhnt und Rüdiger Hülsmann, diese mit Omsi 1 schon richtig umgesetzt haben. Durch neue Busse, Maps und kompletten Add-On's wurden bereits vergebenen Strings überschrieben und die Hofdatei für speziell diese Busse umgeschrieben. Somit gibt es in Omsi heute für eine Map, mehrere verschiedene Hofdateien, die jeweils nur für eine Gruppe von Bussen passen.&lt;br /&gt;
Für das einfache und schnelle Umsetzen einer ''universellen Hofdatei'' sollte besonders die Kommunikation verbessert werden, nicht nur zwischen den Usern, sondern besonders zwischen den Firmen die Add-On's herstellen. Leider war es mir in der Vergangenheit nicht möglich, den Kontakt zu einer Softwareschmiede herzustellen. Bei einer anderen Firma konnte ich Kontakt herstellen, aber eine Umsetzung wurde nicht angestrebt oder um Hilfe gebeten.&lt;br /&gt;
Während einige User dem ganzen Thema der &amp;quot;universellen Hofdatei&amp;quot; offen gegenüber standen, reagierten Firmen garnicht oder zeigten sich uninteressiert.&lt;br /&gt;
Wenn jemand eine universelle Hofdatei für sein Projekt umsetzen möchte, bin ich gern bereit, ohne irgendeiner Gegenleistung, Hilfe zu geben.&lt;br /&gt;
Marcel Kuhnt und Janine stehen dieser Idee positiv gegenüber und unterstützten mich, hier das Thema Hofdatei zu veröffentlichen.&lt;br /&gt;
Busfanat stellte die von ihm entwickelte Vollmatrix sehr schnell um. Auch Perotinus stellte seine neu erstellten Busse MAN ÜL nach Absprache und mit Hilfe von Busfanat und Cooper um. &lt;br /&gt;
Die ersten Schritte sind damit getan und ich danke Busfanat, Cooper und Perotinus recht herzlich, für ihre großartige Mitarbeit und die Umsetzung. Und ich hoffe das es in Zukunft mehr Gehör findet um eine &amp;quot;universelle Hofdatei&amp;quot; umsetzen zu können. Denn diese dient allen und die Vorteile sollten, eigentlich überwiegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
geschrieben von &lt;br /&gt;
[[Benutzer:Tatra|Tatra]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Tutorials für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=913</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=913"/>
		<updated>2014-03-06T09:23:11Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Begriffe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.sli-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM bedeutet &amp;quot;Digital Elevation Mesh&amp;quot; und steht auch stellvertretend für Datensätze, welche reale Geländeformen und -höhen beschreiben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
==== Create New Tile Here ====&lt;br /&gt;
&lt;br /&gt;
Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
==== Add Water / Remove Water ====&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
==== Aerial Download (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== DEM (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Im Bereich DEM können reale Höhendaten importiert werden, sofern die Karte Weltkoordinaten nutzt. Hierfür ist zunächst die zugehörige DLL auszuwählen und der Vorgang mit &amp;quot;Rund curr. Tile&amp;quot; für die aktuell fokussierte Kachel auszuführen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig liefert OMSI eine Import-DLL für freie SRTM-Daten mit, welche in *.hgt-Dateien im Ordner \SRTM\Data hinterlegt sein müssen. Die Dateien für das Grad-Quadrat N46 und E7 bzw. N52 E13 ist bereits in OMSI hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Der DEM-Import für OMSI läuft über DLLs, damit beliebige DEM-Importvarianten frei programmiert werden können (übrigens auch generisch-zufällige, sofern gewünscht!).&lt;br /&gt;
&lt;br /&gt;
Siehe hierzu: [[DEM-Import-DLLs selbst programmieren]]&lt;br /&gt;
&lt;br /&gt;
==== Create Roadmap ====&lt;br /&gt;
&lt;br /&gt;
Eine noch nicht ganz ausgereifte Funktion erlaubt es, eine zweidimensionale Landkarte der Karte zu erstellen, welche im Unterordner &amp;quot;texture\map&amp;quot; der Karte abgespeichert wird: Einerseits kachelweise mit 256 Pixel Kantenlänge, andererseits als Gesamtkarte mit 128 Pixeln Kantenlänge je Kachel.&lt;br /&gt;
&lt;br /&gt;
==== Convert into x terrain ====&lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktion kann die aktuell fokussierte Kachel in eine x-Datei exportiert werden - bspw. um ein komplexeres Objekt mit starker Abhängigkeit zum Boden genau erstellen zu können. Allerdings ist zu beachten, dass die exportierte x-Datei noch nicht für den Import in Blender optimiert ist und insbesondere die Koordinaten noch vertauscht sind.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
Der Wechsel auf diese Registerkarte aktiviert die Objektbearbeitung in OMSI.&lt;br /&gt;
&lt;br /&gt;
==== All Objects on Tile Nr. # ====&lt;br /&gt;
&lt;br /&gt;
Ganz oben auf der Registerkarte findet sich ein Dropdown-Feld, über welches alle Objekte der aktuellen Kachel ausgewählt werden können. Andernfalls kann ein Objekt auch ausgewählt werden, indem es mit der Maus angeklickt wird. Es wechselt dann seine Farbe auf rot.&lt;br /&gt;
&lt;br /&gt;
==== Actual Object Types ====&lt;br /&gt;
&lt;br /&gt;
Die Baumstruktur zeigt alle bisher geladenen Objekttypen an. Wenn man sich auf der Karte bewegt und hierbei weitere Objekttypen auftreten, wird die Struktur entsprechend ergänzt. Es können aber auch weitere, bisher nicht verwendete Objekte hinzugefügt werden:&lt;br /&gt;
&lt;br /&gt;
''Load....'' ermöglicht es, gezielt ein Objekt auszuwählen, ''Load directory!'' lädt den Inhalt eines ganzen Objektordners.&lt;br /&gt;
&lt;br /&gt;
Ist ein Objekt ausgewählt (rot), dann wechselt der Objekttyp, sobald man in der Baumstruktur ein anderes Objekt ausgewählt hat. Andernfalls wird lediglich ein Objekttyp vorgewählt, welcher beim Erstellen eines neuen Objektes verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ist ''Random'' gesetzt, dann wird beim Neuerstellen eines Objektes nicht das ausgewählte Objekt gewählt, sondern ein zufälliges aus derselben Gruppe. Sehr praktisch ist diese Funktion insbesondere beim Platzieren von zufälligen Bäumen oder Häusern.&lt;br /&gt;
&lt;br /&gt;
==== Objekte bewegen, rotieren, löschen und neu erstellen ====&lt;br /&gt;
&lt;br /&gt;
Dies geschieht über folgende Tastenkombinationen:&lt;br /&gt;
&lt;br /&gt;
'''G''' ''(grab)'' ermöglicht es, das selektierte Objekt zu bewegen. ''Enter'' oder ein Klick mit der linken Maustaste bestätigt den Vorgang, ''Esc'' bricht ihn ab.&lt;br /&gt;
&lt;br /&gt;
'''R''' erlaubt das Rotieren von Objekten&lt;br /&gt;
&lt;br /&gt;
'''N''' erstellt ein neues Objekt und wechselt automatisch in den Bewegungs-Modus&lt;br /&gt;
&lt;br /&gt;
'''Entf''' löscht das selektierte Objekt.&lt;br /&gt;
&lt;br /&gt;
==== Object Properties ====&lt;br /&gt;
&lt;br /&gt;
In diesen Feldern können die zahlreichen Eigenschaften der Objekte eingestellt werden. Die Textfelder wechseln nach einer Eingabe automatisch in den Bearbeitungsmodus und färben sich blau. Der Modus kann abgebrochen werden und die neuen Werte verworfen werden, indem auf ''Esc'' gedrückt wird. Sollen die Werte angewendet werden, ist ''Enter'' zu drücken.&lt;br /&gt;
&lt;br /&gt;
===== x, y, z und rot, pitch und bank =====&lt;br /&gt;
&lt;br /&gt;
Hier können numerisch exakte Werte für die drei Koordinaten und die Rotation eingegeben werden. ''Pitch'' und ''Bank'' entsprechen den Neigungen ''nicken'' und ''rollen''.&lt;br /&gt;
&lt;br /&gt;
===== Attach to Object... =====&lt;br /&gt;
&lt;br /&gt;
Infolge muss ein Objekt angeklickt werden, was über Anknüpfpunkte, auf engl. Attachpoints verfügt. Dann wird das selektierte Objekt an das angeklickte angehängt und folgt diesem bei weiteren Veränderungen.&lt;br /&gt;
&lt;br /&gt;
''AttPntNr'' wählt aus, an welchen Attachpoint das Objekt angehängt werden soll - falls mehrere Attachpoints existieren, wie bspw. bei den Haltestellen-Fahnen für die Linienkärtchen.&lt;br /&gt;
&lt;br /&gt;
===== ~ to Spline ... =====&lt;br /&gt;
&lt;br /&gt;
Objekte können ebenfalls an Splines angehängt werden - typisches Beispiel sind Straßenlaternen. Hierzu ist nach Anklicken der Schaltfläche eine Spline anzuklicken. Das Objekt wird nun entlang der Spline bewegt und es kann ganz normal mit ''Enter''/linker Maustaste und ''Esc'' verfahren werden.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus ist es möglich, dass mehrere Instanzen des Objekts entlang der Spline platziert werden. Hierzu ist das Intervall (''Distance'') und die Gesamtentfernung (''Range'') einzugeben.&lt;br /&gt;
&lt;br /&gt;
''Tangential to spline'' ermöglicht es, dass die Objekte auch gemäß der Splineoberfläche geneigt werden, bspw. bei parkenden Autos auf einer steigenden oder überhöhten Straße.&lt;br /&gt;
&lt;br /&gt;
===== Auto Rot. All =====&lt;br /&gt;
&lt;br /&gt;
... ermöglicht das zufällige Rotieren sämtlicher Objekte dieses Typs&lt;br /&gt;
&lt;br /&gt;
===== Parent to... =====&lt;br /&gt;
&lt;br /&gt;
Es ist ein weiteres Objekt zu markieren, welches dann zum &amp;quot;Elternobjekt&amp;quot; bzgl. der Scriptvariablen wird. Diese Funktion wird insbesondere bei Ampeln benötigt: Jede Ampel wird auf diese Weise mit &amp;quot;ihrer&amp;quot; Kreuzung verknüpft.&lt;br /&gt;
&lt;br /&gt;
===== Beschriftung / Optionen =====&lt;br /&gt;
&lt;br /&gt;
Je nach Objekttyp wechselt die Beschriftung der Schaltfläche. In jedem Fall erscheint ein Dialogfeld, mit welchem die Beschriftungen (bei normalen Objekten mit Textfeldern) oder die Optionen (bei speziellen Objekten wie Bushaltestellen) eingestellt werden können.&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=912</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=912"/>
		<updated>2014-03-06T09:22:54Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Object Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM bedeutet &amp;quot;Digital Elevation Mesh&amp;quot; und steht auch stellvertretend für Datensätze, welche reale Geländeformen und -höhen beschreiben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
==== Create New Tile Here ====&lt;br /&gt;
&lt;br /&gt;
Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
==== Add Water / Remove Water ====&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
==== Aerial Download (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== DEM (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Im Bereich DEM können reale Höhendaten importiert werden, sofern die Karte Weltkoordinaten nutzt. Hierfür ist zunächst die zugehörige DLL auszuwählen und der Vorgang mit &amp;quot;Rund curr. Tile&amp;quot; für die aktuell fokussierte Kachel auszuführen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig liefert OMSI eine Import-DLL für freie SRTM-Daten mit, welche in *.hgt-Dateien im Ordner \SRTM\Data hinterlegt sein müssen. Die Dateien für das Grad-Quadrat N46 und E7 bzw. N52 E13 ist bereits in OMSI hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Der DEM-Import für OMSI läuft über DLLs, damit beliebige DEM-Importvarianten frei programmiert werden können (übrigens auch generisch-zufällige, sofern gewünscht!).&lt;br /&gt;
&lt;br /&gt;
Siehe hierzu: [[DEM-Import-DLLs selbst programmieren]]&lt;br /&gt;
&lt;br /&gt;
==== Create Roadmap ====&lt;br /&gt;
&lt;br /&gt;
Eine noch nicht ganz ausgereifte Funktion erlaubt es, eine zweidimensionale Landkarte der Karte zu erstellen, welche im Unterordner &amp;quot;texture\map&amp;quot; der Karte abgespeichert wird: Einerseits kachelweise mit 256 Pixel Kantenlänge, andererseits als Gesamtkarte mit 128 Pixeln Kantenlänge je Kachel.&lt;br /&gt;
&lt;br /&gt;
==== Convert into x terrain ====&lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktion kann die aktuell fokussierte Kachel in eine x-Datei exportiert werden - bspw. um ein komplexeres Objekt mit starker Abhängigkeit zum Boden genau erstellen zu können. Allerdings ist zu beachten, dass die exportierte x-Datei noch nicht für den Import in Blender optimiert ist und insbesondere die Koordinaten noch vertauscht sind.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
Der Wechsel auf diese Registerkarte aktiviert die Objektbearbeitung in OMSI.&lt;br /&gt;
&lt;br /&gt;
==== All Objects on Tile Nr. # ====&lt;br /&gt;
&lt;br /&gt;
Ganz oben auf der Registerkarte findet sich ein Dropdown-Feld, über welches alle Objekte der aktuellen Kachel ausgewählt werden können. Andernfalls kann ein Objekt auch ausgewählt werden, indem es mit der Maus angeklickt wird. Es wechselt dann seine Farbe auf rot.&lt;br /&gt;
&lt;br /&gt;
==== Actual Object Types ====&lt;br /&gt;
&lt;br /&gt;
Die Baumstruktur zeigt alle bisher geladenen Objekttypen an. Wenn man sich auf der Karte bewegt und hierbei weitere Objekttypen auftreten, wird die Struktur entsprechend ergänzt. Es können aber auch weitere, bisher nicht verwendete Objekte hinzugefügt werden:&lt;br /&gt;
&lt;br /&gt;
''Load....'' ermöglicht es, gezielt ein Objekt auszuwählen, ''Load directory!'' lädt den Inhalt eines ganzen Objektordners.&lt;br /&gt;
&lt;br /&gt;
Ist ein Objekt ausgewählt (rot), dann wechselt der Objekttyp, sobald man in der Baumstruktur ein anderes Objekt ausgewählt hat. Andernfalls wird lediglich ein Objekttyp vorgewählt, welcher beim Erstellen eines neuen Objektes verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ist ''Random'' gesetzt, dann wird beim Neuerstellen eines Objektes nicht das ausgewählte Objekt gewählt, sondern ein zufälliges aus derselben Gruppe. Sehr praktisch ist diese Funktion insbesondere beim Platzieren von zufälligen Bäumen oder Häusern.&lt;br /&gt;
&lt;br /&gt;
==== Objekte bewegen, rotieren, löschen und neu erstellen ====&lt;br /&gt;
&lt;br /&gt;
Dies geschieht über folgende Tastenkombinationen:&lt;br /&gt;
&lt;br /&gt;
'''G''' ''(grab)'' ermöglicht es, das selektierte Objekt zu bewegen. ''Enter'' oder ein Klick mit der linken Maustaste bestätigt den Vorgang, ''Esc'' bricht ihn ab.&lt;br /&gt;
&lt;br /&gt;
'''R''' erlaubt das Rotieren von Objekten&lt;br /&gt;
&lt;br /&gt;
'''N''' erstellt ein neues Objekt und wechselt automatisch in den Bewegungs-Modus&lt;br /&gt;
&lt;br /&gt;
'''Entf''' löscht das selektierte Objekt.&lt;br /&gt;
&lt;br /&gt;
==== Object Properties ====&lt;br /&gt;
&lt;br /&gt;
In diesen Feldern können die zahlreichen Eigenschaften der Objekte eingestellt werden. Die Textfelder wechseln nach einer Eingabe automatisch in den Bearbeitungsmodus und färben sich blau. Der Modus kann abgebrochen werden und die neuen Werte verworfen werden, indem auf ''Esc'' gedrückt wird. Sollen die Werte angewendet werden, ist ''Enter'' zu drücken.&lt;br /&gt;
&lt;br /&gt;
===== x, y, z und rot, pitch und bank =====&lt;br /&gt;
&lt;br /&gt;
Hier können numerisch exakte Werte für die drei Koordinaten und die Rotation eingegeben werden. ''Pitch'' und ''Bank'' entsprechen den Neigungen ''nicken'' und ''rollen''.&lt;br /&gt;
&lt;br /&gt;
===== Attach to Object... =====&lt;br /&gt;
&lt;br /&gt;
Infolge muss ein Objekt angeklickt werden, was über Anknüpfpunkte, auf engl. Attachpoints verfügt. Dann wird das selektierte Objekt an das angeklickte angehängt und folgt diesem bei weiteren Veränderungen.&lt;br /&gt;
&lt;br /&gt;
''AttPntNr'' wählt aus, an welchen Attachpoint das Objekt angehängt werden soll - falls mehrere Attachpoints existieren, wie bspw. bei den Haltestellen-Fahnen für die Linienkärtchen.&lt;br /&gt;
&lt;br /&gt;
===== ~ to Spline ... =====&lt;br /&gt;
&lt;br /&gt;
Objekte können ebenfalls an Splines angehängt werden - typisches Beispiel sind Straßenlaternen. Hierzu ist nach Anklicken der Schaltfläche eine Spline anzuklicken. Das Objekt wird nun entlang der Spline bewegt und es kann ganz normal mit ''Enter''/linker Maustaste und ''Esc'' verfahren werden.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus ist es möglich, dass mehrere Instanzen des Objekts entlang der Spline platziert werden. Hierzu ist das Intervall (''Distance'') und die Gesamtentfernung (''Range'') einzugeben.&lt;br /&gt;
&lt;br /&gt;
''Tangential to spline'' ermöglicht es, dass die Objekte auch gemäß der Splineoberfläche geneigt werden, bspw. bei parkenden Autos auf einer steigenden oder überhöhten Straße.&lt;br /&gt;
&lt;br /&gt;
===== Auto Rot. All =====&lt;br /&gt;
&lt;br /&gt;
... ermöglicht das zufällige Rotieren sämtlicher Objekte dieses Typs&lt;br /&gt;
&lt;br /&gt;
===== Parent to... =====&lt;br /&gt;
&lt;br /&gt;
Es ist ein weiteres Objekt zu markieren, welches dann zum &amp;quot;Elternobjekt&amp;quot; bzgl. der Scriptvariablen wird. Diese Funktion wird insbesondere bei Ampeln benötigt: Jede Ampel wird auf diese Weise mit &amp;quot;ihrer&amp;quot; Kreuzung verknüpft.&lt;br /&gt;
&lt;br /&gt;
===== Beschriftung / Optionen =====&lt;br /&gt;
&lt;br /&gt;
Je nach Objekttyp wechselt die Beschriftung der Schaltfläche. In jedem Fall erscheint ein Dialogfeld, mit welchem die Beschriftungen (bei normalen Objekten mit Textfeldern) oder die Optionen (bei speziellen Objekten wie Bushaltestellen) eingestellt werden können.&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=911</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=911"/>
		<updated>2014-03-05T11:55:18Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Object Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM bedeutet &amp;quot;Digital Elevation Mesh&amp;quot; und steht auch stellvertretend für Datensätze, welche reale Geländeformen und -höhen beschreiben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
==== Create New Tile Here ====&lt;br /&gt;
&lt;br /&gt;
Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
==== Add Water / Remove Water ====&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
==== Aerial Download (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== DEM (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Im Bereich DEM können reale Höhendaten importiert werden, sofern die Karte Weltkoordinaten nutzt. Hierfür ist zunächst die zugehörige DLL auszuwählen und der Vorgang mit &amp;quot;Rund curr. Tile&amp;quot; für die aktuell fokussierte Kachel auszuführen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig liefert OMSI eine Import-DLL für freie SRTM-Daten mit, welche in *.hgt-Dateien im Ordner \SRTM\Data hinterlegt sein müssen. Die Dateien für das Grad-Quadrat N46 und E7 bzw. N52 E13 ist bereits in OMSI hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Der DEM-Import für OMSI läuft über DLLs, damit beliebige DEM-Importvarianten frei programmiert werden können (übrigens auch generisch-zufällige, sofern gewünscht!).&lt;br /&gt;
&lt;br /&gt;
Siehe hierzu: [[DEM-Import-DLLs selbst programmieren]]&lt;br /&gt;
&lt;br /&gt;
==== Create Roadmap ====&lt;br /&gt;
&lt;br /&gt;
Eine noch nicht ganz ausgereifte Funktion erlaubt es, eine zweidimensionale Landkarte der Karte zu erstellen, welche im Unterordner &amp;quot;texture\map&amp;quot; der Karte abgespeichert wird: Einerseits kachelweise mit 256 Pixel Kantenlänge, andererseits als Gesamtkarte mit 128 Pixeln Kantenlänge je Kachel.&lt;br /&gt;
&lt;br /&gt;
==== Convert into x terrain ====&lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktion kann die aktuell fokussierte Kachel in eine x-Datei exportiert werden - bspw. um ein komplexeres Objekt mit starker Abhängigkeit zum Boden genau erstellen zu können. Allerdings ist zu beachten, dass die exportierte x-Datei noch nicht für den Import in Blender optimiert ist und insbesondere die Koordinaten noch vertauscht sind.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
Der Wechsel auf diese Registerkarte aktiviert die Objektbearbeitung in OMSI.&lt;br /&gt;
&lt;br /&gt;
==== All Objects on Tile Nr. # ====&lt;br /&gt;
&lt;br /&gt;
Ganz oben auf der Registerkarte findet sich ein Dropdown-Feld, über welches alle Objekte der aktuellen Kachel ausgewählt werden können. Andernfalls kann ein Objekt auch ausgewählt werden, indem es mit der Maus angeklickt wird. Es wechselt dann seine Farbe auf rot.&lt;br /&gt;
&lt;br /&gt;
==== Actual Object Types ====&lt;br /&gt;
&lt;br /&gt;
Die Baumstruktur zeigt alle bisher geladenen Objekttypen an. Wenn man sich auf der Karte bewegt und hierbei weitere Objekttypen auftreten, wird die Struktur entsprechend ergänzt. Es können aber auch weitere, bisher nicht verwendete Objekte hinzugefügt werden:&lt;br /&gt;
&lt;br /&gt;
''Load....'' ermöglicht es, gezielt ein Objekt auszuwählen, ''Load directory!'' lädt den Inhalt eines ganzen Objektordners.&lt;br /&gt;
&lt;br /&gt;
Ist ein Objekt ausgewählt (rot), dann wechselt der Objekttyp, sobald man in der Baumstruktur ein anderes Objekt ausgewählt hat. Andernfalls wird lediglich ein Objekttyp vorgewählt, welcher beim Erstellen eines neuen Objektes verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ist ''Random'' gesetzt, dann wird beim Neuerstellen eines Objektes nicht das ausgewählte Objekt gewählt, sondern ein zufälliges aus derselben Gruppe. Sehr praktisch ist diese Funktion insbesondere beim Platzieren von zufälligen Bäumen oder Häusern.&lt;br /&gt;
&lt;br /&gt;
==== Objekte bewegen, rotieren, löschen und neu erstellen ====&lt;br /&gt;
&lt;br /&gt;
Dies geschieht über folgende Tastenkombinationen:&lt;br /&gt;
&lt;br /&gt;
'''G''' ''(grab)'' ermöglicht es, das selektierte Objekt zu bewegen. ''Enter'' oder ein Klick mit der linken Maustaste bestätigt den Vorgang, ''Esc'' bricht ihn ab.&lt;br /&gt;
&lt;br /&gt;
'''R''' erlaubt das Rotieren von Objekten&lt;br /&gt;
&lt;br /&gt;
'''N''' erstellt ein neues Objekt und wechselt automatisch in den Bewegungs-Modus&lt;br /&gt;
&lt;br /&gt;
'''Entf''' löscht das selektierte Objekt.&lt;br /&gt;
&lt;br /&gt;
==== Object Properties ====&lt;br /&gt;
&lt;br /&gt;
In diesen Feldern können die zahlreichen Eigenschaften der Objekte eingestellt werden. Die Textfelder wechseln nach einer Eingabe automatisch in den Bearbeitungsmodus und färben sich blau. Der Modus kann abgebrochen werden und die neuen Werte verworfen werden, indem auf ''Enter'' gedrückt wird. Sollen die Werte angewendet werden, ist ''Enter'' zu drücken.&lt;br /&gt;
&lt;br /&gt;
===== x, y, z und rot, pitch und bank =====&lt;br /&gt;
&lt;br /&gt;
Hier können numerisch exakte Werte für die drei Koordinaten und die Rotation eingegeben werden. ''Pitch'' und ''Bank'' entsprechen den Neigungen ''nicken'' und ''rollen''.&lt;br /&gt;
&lt;br /&gt;
===== Attach to Object... =====&lt;br /&gt;
&lt;br /&gt;
Infolge muss ein Objekt angeklickt werden, was über Anknüpfpunkte, auf engl. Attachpoints verfügt. Dann wird das selektierte Objekt an das angeklickte angehängt und folgt diesem bei weiteren Veränderungen.&lt;br /&gt;
&lt;br /&gt;
''AttPntNr'' wählt aus, an welchen Attachpoint das Objekt angehängt werden soll - falls mehrere Attachpoints existieren, wie bspw. bei den Haltestellen-Fahnen für die Linienkärtchen.&lt;br /&gt;
&lt;br /&gt;
===== ~ to Spline ... =====&lt;br /&gt;
&lt;br /&gt;
Objekte können ebenfalls an Splines angehängt werden - typisches Beispiel sind Straßenlaternen. Hierzu ist nach Anklicken der Schaltfläche eine Spline anzuklicken. Das Objekt wird nun entlang der Spline bewegt und es kann ganz normal mit ''Enter''/linker Maustaste und ''Esc'' verfahren werden.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus ist es möglich, dass mehrere Instanzen des Objekts entlang der Spline platziert werden. Hierzu ist das Intervall (''Distance'') und die Gesamtentfernung (''Range'') einzugeben.&lt;br /&gt;
&lt;br /&gt;
''Tangential to spline'' ermöglicht es, dass die Objekte auch gemäß der Splineoberfläche geneigt werden, bspw. bei parkenden Autos auf einer steigenden oder überhöhten Straße.&lt;br /&gt;
&lt;br /&gt;
===== Auto Rot. All =====&lt;br /&gt;
&lt;br /&gt;
... ermöglicht das zufällige Rotieren sämtlicher Objekte dieses Typs&lt;br /&gt;
&lt;br /&gt;
===== Parent to... =====&lt;br /&gt;
&lt;br /&gt;
Es ist ein weiteres Objekt zu markieren, welches dann zum &amp;quot;Elternobjekt&amp;quot; bzgl. der Scriptvariablen wird. Diese Funktion wird insbesondere bei Ampeln benötigt: Jede Ampel wird auf diese Weise mit &amp;quot;ihrer&amp;quot; Kreuzung verknüpft.&lt;br /&gt;
&lt;br /&gt;
===== Beschriftung / Optionen =====&lt;br /&gt;
&lt;br /&gt;
Je nach Objekttyp wechselt die Beschriftung der Schaltfläche. In jedem Fall erscheint ein Dialogfeld, mit welchem die Beschriftungen (bei normalen Objekten mit Textfeldern) oder die Optionen (bei speziellen Objekten wie Bushaltestellen) eingestellt werden können.&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=910</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=910"/>
		<updated>2014-03-05T11:44:00Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Object Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM bedeutet &amp;quot;Digital Elevation Mesh&amp;quot; und steht auch stellvertretend für Datensätze, welche reale Geländeformen und -höhen beschreiben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
==== Create New Tile Here ====&lt;br /&gt;
&lt;br /&gt;
Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
==== Add Water / Remove Water ====&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
==== Aerial Download (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== DEM (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Im Bereich DEM können reale Höhendaten importiert werden, sofern die Karte Weltkoordinaten nutzt. Hierfür ist zunächst die zugehörige DLL auszuwählen und der Vorgang mit &amp;quot;Rund curr. Tile&amp;quot; für die aktuell fokussierte Kachel auszuführen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig liefert OMSI eine Import-DLL für freie SRTM-Daten mit, welche in *.hgt-Dateien im Ordner \SRTM\Data hinterlegt sein müssen. Die Dateien für das Grad-Quadrat N46 und E7 bzw. N52 E13 ist bereits in OMSI hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Der DEM-Import für OMSI läuft über DLLs, damit beliebige DEM-Importvarianten frei programmiert werden können (übrigens auch generisch-zufällige, sofern gewünscht!).&lt;br /&gt;
&lt;br /&gt;
Siehe hierzu: [[DEM-Import-DLLs selbst programmieren]]&lt;br /&gt;
&lt;br /&gt;
==== Create Roadmap ====&lt;br /&gt;
&lt;br /&gt;
Eine noch nicht ganz ausgereifte Funktion erlaubt es, eine zweidimensionale Landkarte der Karte zu erstellen, welche im Unterordner &amp;quot;texture\map&amp;quot; der Karte abgespeichert wird: Einerseits kachelweise mit 256 Pixel Kantenlänge, andererseits als Gesamtkarte mit 128 Pixeln Kantenlänge je Kachel.&lt;br /&gt;
&lt;br /&gt;
==== Convert into x terrain ====&lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktion kann die aktuell fokussierte Kachel in eine x-Datei exportiert werden - bspw. um ein komplexeres Objekt mit starker Abhängigkeit zum Boden genau erstellen zu können. Allerdings ist zu beachten, dass die exportierte x-Datei noch nicht für den Import in Blender optimiert ist und insbesondere die Koordinaten noch vertauscht sind.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
Der Wechsel auf diese Registerkarte aktiviert die Objektbearbeitung in OMSI.&lt;br /&gt;
&lt;br /&gt;
==== All Objects on Tile Nr. # ====&lt;br /&gt;
&lt;br /&gt;
Ganz oben auf der Registerkarte findet sich ein Dropdown-Feld, über welches alle Objekte der aktuellen Kachel ausgewählt werden können. Andernfalls kann ein Objekt auch ausgewählt werden, indem es mit der Maus angeklickt wird. Es wechselt dann seine Farbe auf rot.&lt;br /&gt;
&lt;br /&gt;
==== Actual Object Types ====&lt;br /&gt;
&lt;br /&gt;
Die Baumstruktur zeigt alle bisher geladenen Objekttypen an. Wenn man sich auf der Karte bewegt und hierbei weitere Objekttypen auftreten, wird die Struktur entsprechend ergänzt. Es können aber auch weitere, bisher nicht verwendete Objekte hinzugefügt werden:&lt;br /&gt;
&lt;br /&gt;
''Load....'' ermöglicht es, gezielt ein Objekt auszuwählen, ''Load directory!'' lädt den Inhalt eines ganzen Objektordners.&lt;br /&gt;
&lt;br /&gt;
Ist ein Objekt ausgewählt (rot), dann wechselt der Objekttyp, sobald man in der Baumstruktur ein anderes Objekt ausgewählt hat. Andernfalls wird lediglich ein Objekttyp vorgewählt, welcher beim Erstellen eines neuen Objektes verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ist ''Random'' gesetzt, dann wird beim Neuerstellen eines Objektes nicht das ausgewählte Objekt gewählt, sondern ein zufälliges aus derselben Gruppe. Sehr praktisch ist diese Funktion insbesondere beim Platzieren von zufälligen Bäumen oder Häusern.&lt;br /&gt;
&lt;br /&gt;
==== Objekte bewegen, rotieren, löschen und neu erstellen ====&lt;br /&gt;
&lt;br /&gt;
Dies geschieht über folgende Tastenkombinationen:&lt;br /&gt;
&lt;br /&gt;
'''G''' ''(grab)'' ermöglicht es, das selektierte Objekt zu bewegen. ''Enter'' oder ein Klick mit der linken Maustaste bestätigt den Vorgang, ''Esc'' bricht ihn ab.&lt;br /&gt;
&lt;br /&gt;
'''R''' erlaubt das Rotieren von Objekten&lt;br /&gt;
&lt;br /&gt;
'''N''' erstellt ein neues Objekt und wechselt automatisch in den Bewegungs-Modus&lt;br /&gt;
&lt;br /&gt;
'''Entf''' löscht das selektierte Objekt.&lt;br /&gt;
&lt;br /&gt;
==== Object Properties ====&lt;br /&gt;
&lt;br /&gt;
In diesen Feldern können die zahlreichen Eigenschaften der Objekte eingestellt werden. Die Textfelder wechseln nach einer Eingabe automatisch in den Bearbeitungsmodus und färben sich blau. Der Modus kann abgebrochen werden und die neuen Werte verworfen werden, indem auf ''Enter'' gedrückt wird. Sollen die Werte angewendet werden, ist ''Enter'' zu drücken.&lt;br /&gt;
&lt;br /&gt;
===== x, y, z und rot, pitch und bank =====&lt;br /&gt;
&lt;br /&gt;
Hier können numerisch exakte Werte für die drei Koordinaten und die Rotation eingegeben werden. ''Pitch'' und ''Bank'' entsprechen den Neigungen ''nicken'' und ''rollen''.&lt;br /&gt;
&lt;br /&gt;
===== Attach to Object... =====&lt;br /&gt;
&lt;br /&gt;
Infolge muss ein Objekt angeklickt werden, was über Anknüpfpunkte, auf engl. Attachpoints verfügt. Dann wird das selektierte Objekt an das angeklickte angehängt und folgt diesem bei weiteren Veränderungen.&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=909</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=909"/>
		<updated>2014-03-05T11:41:08Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Object Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM bedeutet &amp;quot;Digital Elevation Mesh&amp;quot; und steht auch stellvertretend für Datensätze, welche reale Geländeformen und -höhen beschreiben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
==== Create New Tile Here ====&lt;br /&gt;
&lt;br /&gt;
Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
==== Add Water / Remove Water ====&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
==== Aerial Download (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== DEM (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Im Bereich DEM können reale Höhendaten importiert werden, sofern die Karte Weltkoordinaten nutzt. Hierfür ist zunächst die zugehörige DLL auszuwählen und der Vorgang mit &amp;quot;Rund curr. Tile&amp;quot; für die aktuell fokussierte Kachel auszuführen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig liefert OMSI eine Import-DLL für freie SRTM-Daten mit, welche in *.hgt-Dateien im Ordner \SRTM\Data hinterlegt sein müssen. Die Dateien für das Grad-Quadrat N46 und E7 bzw. N52 E13 ist bereits in OMSI hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Der DEM-Import für OMSI läuft über DLLs, damit beliebige DEM-Importvarianten frei programmiert werden können (übrigens auch generisch-zufällige, sofern gewünscht!).&lt;br /&gt;
&lt;br /&gt;
Siehe hierzu: [[DEM-Import-DLLs selbst programmieren]]&lt;br /&gt;
&lt;br /&gt;
==== Create Roadmap ====&lt;br /&gt;
&lt;br /&gt;
Eine noch nicht ganz ausgereifte Funktion erlaubt es, eine zweidimensionale Landkarte der Karte zu erstellen, welche im Unterordner &amp;quot;texture\map&amp;quot; der Karte abgespeichert wird: Einerseits kachelweise mit 256 Pixel Kantenlänge, andererseits als Gesamtkarte mit 128 Pixeln Kantenlänge je Kachel.&lt;br /&gt;
&lt;br /&gt;
==== Convert into x terrain ====&lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktion kann die aktuell fokussierte Kachel in eine x-Datei exportiert werden - bspw. um ein komplexeres Objekt mit starker Abhängigkeit zum Boden genau erstellen zu können. Allerdings ist zu beachten, dass die exportierte x-Datei noch nicht für den Import in Blender optimiert ist und insbesondere die Koordinaten noch vertauscht sind.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
Der Wechsel auf diese Registerkarte aktiviert die Objektbearbeitung in OMSI.&lt;br /&gt;
&lt;br /&gt;
==== All Objects on Tile Nr. # ====&lt;br /&gt;
&lt;br /&gt;
Ganz oben auf der Registerkarte findet sich ein Dropdown-Feld, über welches alle Objekte der aktuellen Kachel ausgewählt werden können. Andernfalls kann ein Objekt auch ausgewählt werden, indem es mit der Maus angeklickt wird. Es wechselt dann seine Farbe auf rot.&lt;br /&gt;
&lt;br /&gt;
==== Actual Object Types ====&lt;br /&gt;
&lt;br /&gt;
Die Baumstruktur zeigt alle bisher geladenen Objekttypen an. Wenn man sich auf der Karte bewegt und hierbei weitere Objekttypen auftreten, wird die Struktur entsprechend ergänzt. Es können aber auch weitere, bisher nicht verwendete Objekte hinzugefügt werden:&lt;br /&gt;
&lt;br /&gt;
''Load....'' ermöglicht es, gezielt ein Objekt auszuwählen, ''Load directory!'' lädt den Inhalt eines ganzen Objektordners.&lt;br /&gt;
&lt;br /&gt;
Ist ein Objekt ausgewählt (rot), dann wechselt der Objekttyp, sobald man in der Baumstruktur ein anderes Objekt ausgewählt hat. Andernfalls wird lediglich ein Objekttyp vorgewählt, welcher beim Erstellen eines neuen Objektes verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ist ''Random'' gesetzt, dann wird beim Neuerstellen eines Objektes nicht das ausgewählte Objekt gewählt, sondern ein zufälliges aus derselben Gruppe. Sehr praktisch ist diese Funktion insbesondere beim Platzieren von zufälligen Bäumen oder Häusern.&lt;br /&gt;
&lt;br /&gt;
==== Objekte bewegen, rotieren, löschen und neu erstellen ====&lt;br /&gt;
&lt;br /&gt;
Dies geschieht über folgende Tastenkombinationen:&lt;br /&gt;
&lt;br /&gt;
'''G''' ''(grab)'' ermöglicht es, das selektierte Objekt zu bewegen. ''Enter'' oder ein Klick mit der linken Maustaste bestätigt den Vorgang, ''Esc'' bricht ihn ab.&lt;br /&gt;
&lt;br /&gt;
'''R''' erlaubt das Rotieren von Objekten&lt;br /&gt;
&lt;br /&gt;
'''N''' erstellt ein neues Objekt und wechselt automatisch in den Bewegungs-Modus&lt;br /&gt;
&lt;br /&gt;
'''Entf''' löscht das selektierte Objekt.&lt;br /&gt;
&lt;br /&gt;
==== Object Properties ====&lt;br /&gt;
&lt;br /&gt;
In diesen Feldern können die zahlreichen Eigenschaften der Objekte eingestellt werden. Die Textfelder wechseln nach einer Eingabe automatisch in den Bearbeitungsmodus und färben sich blau. Der Modus kann abgebrochen werden und die neuen Werte verworfen werden, indem auf ''Enter'' gedrückt wird. Sollen die Werte angewendet werden, ist ''Enter'' zu drücken.&lt;br /&gt;
&lt;br /&gt;
===== x, y, z und rot =====&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=908</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=908"/>
		<updated>2014-03-05T11:40:17Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM bedeutet &amp;quot;Digital Elevation Mesh&amp;quot; und steht auch stellvertretend für Datensätze, welche reale Geländeformen und -höhen beschreiben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
==== Create New Tile Here ====&lt;br /&gt;
&lt;br /&gt;
Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
==== Add Water / Remove Water ====&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
==== Aerial Download (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== DEM (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Im Bereich DEM können reale Höhendaten importiert werden, sofern die Karte Weltkoordinaten nutzt. Hierfür ist zunächst die zugehörige DLL auszuwählen und der Vorgang mit &amp;quot;Rund curr. Tile&amp;quot; für die aktuell fokussierte Kachel auszuführen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig liefert OMSI eine Import-DLL für freie SRTM-Daten mit, welche in *.hgt-Dateien im Ordner \SRTM\Data hinterlegt sein müssen. Die Dateien für das Grad-Quadrat N46 und E7 bzw. N52 E13 ist bereits in OMSI hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Der DEM-Import für OMSI läuft über DLLs, damit beliebige DEM-Importvarianten frei programmiert werden können (übrigens auch generisch-zufällige, sofern gewünscht!).&lt;br /&gt;
&lt;br /&gt;
Siehe hierzu: [[DEM-Import-DLLs selbst programmieren]]&lt;br /&gt;
&lt;br /&gt;
==== Create Roadmap ====&lt;br /&gt;
&lt;br /&gt;
Eine noch nicht ganz ausgereifte Funktion erlaubt es, eine zweidimensionale Landkarte der Karte zu erstellen, welche im Unterordner &amp;quot;texture\map&amp;quot; der Karte abgespeichert wird: Einerseits kachelweise mit 256 Pixel Kantenlänge, andererseits als Gesamtkarte mit 128 Pixeln Kantenlänge je Kachel.&lt;br /&gt;
&lt;br /&gt;
==== Convert into x terrain ====&lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktion kann die aktuell fokussierte Kachel in eine x-Datei exportiert werden - bspw. um ein komplexeres Objekt mit starker Abhängigkeit zum Boden genau erstellen zu können. Allerdings ist zu beachten, dass die exportierte x-Datei noch nicht für den Import in Blender optimiert ist und insbesondere die Koordinaten noch vertauscht sind.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
Der Wechsel auf diese Registerkarte aktiviert die Objektbearbeitung in OMSI.&lt;br /&gt;
&lt;br /&gt;
==== All Objects on Tile Nr. # ====&lt;br /&gt;
&lt;br /&gt;
Ganz oben auf der Registerkarte findet sich ein Dropdown-Feld, über welches alle Objekte der aktuellen Kachel ausgewählt werden können. Andernfalls kann ein Objekt auch ausgewählt werden, indem es mit der Maus angeklickt wird. Es wechselt dann seine Farbe auf rot.&lt;br /&gt;
&lt;br /&gt;
==== Actual Object Types ====&lt;br /&gt;
&lt;br /&gt;
Die Baumstruktur zeigt alle bisher geladenen Objekttypen an. Wenn man sich auf der Karte bewegt und hierbei weitere Objekttypen auftreten, wird die Struktur entsprechend ergänzt. Es können aber auch weitere, bisher nicht verwendete Objekte hinzugefügt werden:&lt;br /&gt;
&lt;br /&gt;
''Load....'' ermöglicht es, gezielt ein Objekt auszuwählen, ''Load directory!'' lädt den Inhalt eines ganzen Objektordners.&lt;br /&gt;
&lt;br /&gt;
Ist ein Objekt ausgewählt (rot), dann wechselt der Objekttyp, sobald man in der Baumstruktur ein anderes Objekt ausgewählt hat. Andernfalls wird lediglich ein Objekttyp vorgewählt, welcher beim Erstellen eines neuen Objektes verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ist ''Random'' gesetzt, dann wird beim Neuerstellen eines Objektes nicht das ausgewählte Objekt gewählt, sondern ein zufälliges aus derselben Gruppe. Sehr praktisch ist diese Funktion insbesondere beim Platzieren von zufälligen Bäumen oder Häusern.&lt;br /&gt;
&lt;br /&gt;
==== Objekte bewegen, rotieren, löschen und neu erstellen ====&lt;br /&gt;
&lt;br /&gt;
Dies geschieht über folgende Tastenkombinationen:&lt;br /&gt;
&lt;br /&gt;
'''G''' ''(grab)'' ermöglicht es, das selektierte Objekt zu bewegen. ''Enter'' oder ein Klick mit der linken Maustaste bestätigt den Vorgang, ''Esc'' bricht ihn ab.&lt;br /&gt;
&lt;br /&gt;
'''R''' erlaubt das Rotieren von Objekten&lt;br /&gt;
&lt;br /&gt;
'''N''' erstellt ein neues Objekt und wechselt automatisch in den Bewegungs-Modus&lt;br /&gt;
&lt;br /&gt;
'''Entf''' löscht das selektierte Objekt.&lt;br /&gt;
&lt;br /&gt;
==== Object Properties ====&lt;br /&gt;
&lt;br /&gt;
In diesen Feldern können die zahlreichen Eigenschaften der Objekte eingestellt werden. Die Textfelder wechseln nach einer Eingabe automatisch in den Bearbeitungsmodus und färben sich blau. Der Modus kann abgebrochen werden und die neuen Werte verworfen werden, indem auf ''Enter'' gedrückt wird. Sollen die Werte angewendet werden, ist ''Enter'' zu drücken.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=907</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=907"/>
		<updated>2014-03-05T11:32:17Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM bedeutet &amp;quot;Digital Elevation Mesh&amp;quot; und steht auch stellvertretend für Datensätze, welche reale Geländeformen und -höhen beschreiben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
==== Create New Tile Here ====&lt;br /&gt;
&lt;br /&gt;
Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
==== Add Water / Remove Water ====&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
==== Aerial Download (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== DEM (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Im Bereich DEM können reale Höhendaten importiert werden, sofern die Karte Weltkoordinaten nutzt. Hierfür ist zunächst die zugehörige DLL auszuwählen und der Vorgang mit &amp;quot;Rund curr. Tile&amp;quot; für die aktuell fokussierte Kachel auszuführen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig liefert OMSI eine Import-DLL für freie SRTM-Daten mit, welche in *.hgt-Dateien im Ordner \SRTM\Data hinterlegt sein müssen. Die Dateien für das Grad-Quadrat N46 und E7 bzw. N52 E13 ist bereits in OMSI hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Der DEM-Import für OMSI läuft über DLLs, damit beliebige DEM-Importvarianten frei programmiert werden können (übrigens auch generisch-zufällige, sofern gewünscht!).&lt;br /&gt;
&lt;br /&gt;
Siehe hierzu: [[DEM-Import-DLLs selbst programmieren]]&lt;br /&gt;
&lt;br /&gt;
==== Create Roadmap ====&lt;br /&gt;
&lt;br /&gt;
Eine noch nicht ganz ausgereifte Funktion erlaubt es, eine zweidimensionale Landkarte der Karte zu erstellen, welche im Unterordner &amp;quot;texture\map&amp;quot; der Karte abgespeichert wird: Einerseits kachelweise mit 256 Pixel Kantenlänge, andererseits als Gesamtkarte mit 128 Pixeln Kantenlänge je Kachel.&lt;br /&gt;
&lt;br /&gt;
==== Convert into x terrain ====&lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktion kann die aktuell fokussierte Kachel in eine x-Datei exportiert werden - bspw. um ein komplexeres Objekt mit starker Abhängigkeit zum Boden genau erstellen zu können. Allerdings ist zu beachten, dass die exportierte x-Datei noch nicht für den Import in Blender optimiert ist und insbesondere die Koordinaten noch vertauscht sind.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
Der Wechsel auf diese Registerkarte aktiviert die Objektbearbeitung in OMSI.&lt;br /&gt;
&lt;br /&gt;
==== All Objects on Tile Nr. # ====&lt;br /&gt;
&lt;br /&gt;
Ganz oben auf der Registerkarte findet sich ein Dropdown-Feld, über welches alle Objekte der aktuellen Kachel ausgewählt werden können. Andernfalls kann ein Objekt auch ausgewählt werden, indem es mit der Maus angeklickt wird. Es wechselt dann seine Farbe auf rot.&lt;br /&gt;
&lt;br /&gt;
==== Actual Object Types ====&lt;br /&gt;
&lt;br /&gt;
Die Baumstruktur zeigt alle bisher geladenen Objekttypen an. Wenn man sich auf der Karte bewegt und hierbei weitere Objekttypen auftreten, wird die Struktur entsprechend ergänzt. Es können aber auch weitere, bisher nicht verwendete Objekte hinzugefügt werden:&lt;br /&gt;
&lt;br /&gt;
''Load....'' ermöglicht es, gezielt ein Objekt auszuwählen, ''Load directory!'' lädt den Inhalt eines ganzen Objektordners.&lt;br /&gt;
&lt;br /&gt;
Ist ein Objekt ausgewählt (rot), dann wechselt der Objekttyp, sobald man in der Baumstruktur ein anderes Objekt ausgewählt hat. Andernfalls wird lediglich ein Objekttyp vorgewählt, welcher beim Erstellen eines neuen Objektes verwendet wird.&lt;br /&gt;
&lt;br /&gt;
==== Objekte bewegen, rotieren, löschen und neu erstellen ====&lt;br /&gt;
&lt;br /&gt;
Dies geschieht über folgende Tastenkombinationen:&lt;br /&gt;
&lt;br /&gt;
'''G''' ''(grab)'' ermöglicht es, das selektierte Objekt zu bewegen. Enter oder ein Klick mit der linken Maustaste bestätigt den Vorgang, Esc bricht ihn ab.&lt;br /&gt;
&lt;br /&gt;
'''R''' erlaubt das Rotieren von Objekten&lt;br /&gt;
&lt;br /&gt;
'''N''' erstellt ein neues Objekt und wechselt automatisch in den Bewegungs-Modus&lt;br /&gt;
&lt;br /&gt;
'''Entf''' löscht das selektierte Objekt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=906</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=906"/>
		<updated>2014-03-05T11:14:50Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM bedeutet &amp;quot;Digital Elevation Mesh&amp;quot; und steht auch stellvertretend für Datensätze, welche reale Geländeformen und -höhen beschreiben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
==== Create New Tile Here ====&lt;br /&gt;
&lt;br /&gt;
Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
==== Add Water / Remove Water ====&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
==== Aerial Download (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== DEM (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Im Bereich DEM können reale Höhendaten importiert werden, sofern die Karte Weltkoordinaten nutzt. Hierfür ist zunächst die zugehörige DLL auszuwählen und der Vorgang mit &amp;quot;Rund curr. Tile&amp;quot; für die aktuell fokussierte Kachel auszuführen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig liefert OMSI eine Import-DLL für freie SRTM-Daten mit, welche in *.hgt-Dateien im Ordner \SRTM\Data hinterlegt sein müssen. Die Dateien für das Grad-Quadrat N46 und E7 bzw. N52 E13 ist bereits in OMSI hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Der DEM-Import für OMSI läuft über DLLs, damit beliebige DEM-Importvarianten frei programmiert werden können (übrigens auch generisch-zufällige, sofern gewünscht!).&lt;br /&gt;
&lt;br /&gt;
Siehe hierzu: [[DEM-Import-DLLs selbst programmieren]]&lt;br /&gt;
&lt;br /&gt;
==== Create Roadmap ====&lt;br /&gt;
&lt;br /&gt;
Eine noch nicht ganz ausgereifte Funktion erlaubt es, eine zweidimensionale Landkarte der Karte zu erstellen, welche im Unterordner &amp;quot;texture\map&amp;quot; der Karte abgespeichert wird: Einerseits kachelweise mit 256 Pixel Kantenlänge, andererseits als Gesamtkarte mit 128 Pixeln Kantenlänge je Kachel.&lt;br /&gt;
&lt;br /&gt;
==== Convert into x terrain ====&lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktion kann die aktuell fokussierte Kachel in eine x-Datei exportiert werden - bspw. um ein komplexeres Objekt mit starker Abhängigkeit zum Boden genau erstellen zu können. Allerdings ist zu beachten, dass die exportierte x-Datei noch nicht für den Import in Blender optimiert ist und insbesondere die Koordinaten noch vertauscht sind.&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=905</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=905"/>
		<updated>2014-03-05T11:06:42Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DEM bedeutet &amp;quot;Digital Elevation Mesh&amp;quot; und steht auch stellvertretend für Datensätze, welche reale Geländeformen und -höhen beschreiben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
==== Create New Tile Here ====&lt;br /&gt;
&lt;br /&gt;
Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
==== Add Water / Remove Water ====&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
==== Aerial Download (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== DEM (ab OMSI 2) ====&lt;br /&gt;
&lt;br /&gt;
Im Bereich DEM können reale Höhendaten importiert werden, sofern die Karte Weltkoordinaten nutzt. Hierfür ist zunächst die zugehörige DLL auszuwählen und der Vorgang mit &amp;quot;Rund curr. Tile&amp;quot; für die aktuell fokussierte Kachel auszuführen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig liefert OMSI eine Import-DLL für freie SRTM-Daten mit, welche in *.hgt-Dateien im Ordner \SRTM\Data hinterlegt sein müssen. Die Dateien für das Grad-Quadrat N46 und E7 bzw. N52 E13 ist bereits in OMSI hinterlegt.&lt;br /&gt;
&lt;br /&gt;
Der DEM-Import für OMSI läuft über DLLs, damit beliebige DEM-Importvarianten frei programmiert werden können (übrigens auch generisch-zufällige, sofern gewünscht!).&lt;br /&gt;
&lt;br /&gt;
Siehe hierzu: [[DEM-Import-DLLs selbst programmieren]]&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=904</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=904"/>
		<updated>2014-03-05T10:56:40Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Registerkarten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
==== Create New Tile Here ====&lt;br /&gt;
&lt;br /&gt;
Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
==== Add Water / Remove Water ====&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
==== Aerial Download ====&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== DEM ====&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=903</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=903"/>
		<updated>2014-03-05T10:46:31Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Create New Tile Here&amp;quot;: Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
=== Add Water / Remove Water ===&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Normalerweise liegt das Terrain über der Wasserfläche - sobald das Terrain unter das Wasser taucht, entsteht ein See oder Fluss.&lt;br /&gt;
&lt;br /&gt;
=== Aerial Download ===&lt;br /&gt;
&lt;br /&gt;
Sofern die Karte mit Weltkoordinaten arbeitet, können in diesem Bereich Luftbilder heruntergeladen und angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits heruntergeladene Luftbilder werden angezeigt, sobald der Haken &amp;quot;Use tile aerials&amp;quot; gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Heruntergeladen werden können Luftbilder, wenn der folgende Eintrag mit einem funktionierenden Download-Link in die Options.cfg eingetragen wird, wobei ~x, ~y und ~z für die drei Koordinaten x, y und Zoom stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Editor_LinkAerial]&lt;br /&gt;
http:www.dummy.de&amp;amp;x=~x&amp;amp;y=~y&amp;amp;z=~z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann fokussiert man die Sicht auf die Kachel, für welche das Luftbild heruntergeladen werden soll, stellt den Schieberegler &amp;quot;Resolution&amp;quot; auf den gewünschten Wert und klickt auf &amp;quot;Dnl. current Tile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=902</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=902"/>
		<updated>2014-03-05T10:31:36Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Create New Tile Here&amp;quot;: Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
=== Add Water / Remove Water ===&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Das Terrain ist normaler&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=901</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=901"/>
		<updated>2014-03-05T10:31:15Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tile&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kachel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Terrain&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gelände&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Üblicherweise wird die engl. Bezeichnung ''Terrain'' gewählt. Beim Terrain handelt es sich um den Untergrund. Es handelt sich hierbei um ein Raster von 60 mal 60 Quadraten, deren Eckpunkte nach Belieben angehoben oder gesenkt werden können, wodurch Berge, Hügel oder Mulden usw. geformt werden können. Außerdem können Splines und Objekte je nach deren Eigenschaften Löcher in das Terrain schneiden. Darüber hinaus kann das Terrain mit farblichen Strukturen versehen werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spline&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ein in einer *.spi-Datei gespeichertes Profil wird entlang einer geraden oder gebogenen Linie extrudiert. Auf diese Weise entstehen bspw. Straßen, Gleise und Zäune in OMSI, die direkt im Map-Editor in ihrer Länge und Biegung geformt und zu längeren Verbänden aneinandergehängt werden können.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Create New Tile Here&amp;quot;: Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
=== Add Water / Remove Water ===&lt;br /&gt;
&lt;br /&gt;
Stattet die Kachel mit einer Wasserebene aus. Wasserebenen können auf der Registerkarte &amp;quot;Terrain&amp;quot; in ihrer Höhe verändert werden. Das Terrain ist normaler&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=900</id>
		<title>Editor - Überblick</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Editor_-_%C3%9Cberblick&amp;diff=900"/>
		<updated>2014-03-05T10:19:11Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: Die Seite wurde neu angelegt: „''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''  ''OMSI-Version: 1.0 - 2.0''  Dieser Artikel liefert einen Überblick über alle Funktionen…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel liefert einen Überblick über alle Funktionen des OMSI-Mapeditors, geht dabei auch ins Detail, liefert aber keine einzelne Themen fokussierenden Tutorials zu einzelnen Themen.&lt;br /&gt;
&lt;br /&gt;
Da der Editor noch nicht fehlerfrei arbeitet und einige Funktionen (noch) nicht implementiert sind, werden auch nicht alle Kontrollelemente beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Starten des Editors ==&lt;br /&gt;
&lt;br /&gt;
Um den Editor erreichen zu können, ist eine Verknüpfung z.B. auf dem Desktop zu kopieren. Dann ist darauf mit rechts zu klicken und &amp;quot;Eigenschaften&amp;quot; auszuwählen. Der Pfad im Feld &amp;quot;Ziel&amp;quot; ist um den Parameter ''-editor'' zu ergänzen. Diese Verknüpfung dient fortan dem Starten des Mapeditors.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (engl.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Begriff (dt.)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Tile''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kachel''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Die Karte besteht aus zahlreichen quadratischen Kacheln. Auf Karten mit klassischen kartesischen Koordinaten haben alle Kacheln eine Kantenlänge von 300m, handelt es sich um eine Weltkoordinaten-Karte, dann schwankt die Kantenlänge in Abhängigkeit von der geographischen Breite (s.u.).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registerkarten ==&lt;br /&gt;
&lt;br /&gt;
Die Editorfunktionen werden gruppiert nach den entsprechenden Registerkarten am rechten Rand erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Tile ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Create New Tile Here&amp;quot;: Sobald der Sichtmittelpunkt auf einen Bereich außerhalb der Karte gesetzt ist, wird dieser Button aktiv und erlaubt die Erweiterung der Karte um eine Kachel (''Tile'') an dieser Stelle.&lt;br /&gt;
&lt;br /&gt;
== Weltkoordinaten ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivierten Weltkoordinaten verwendet OMSI die Mercator-Projektion und unterteilt die 360° entlang der West-Ost-Richtung in 2^16 (65536) Teile. Am Äquator (40075016,69m) beträgt die Kantenlänge der Kacheln dementsprechend 611,5m, auf 50° 393,1m und am Pol theoretisch 0m (allerdings ist der Pol mit OMSI nicht erreichbar). Weitere Werte entnehmen Sie bitte der folgenden Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''geograph. Breite''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Kantenlänge (m)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |611,496&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |­±10°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |602,206&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±20°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |574,618&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±30°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |529,571&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±40°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |468,433&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±50°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |393,062&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±60°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |305,748&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |±70°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |209,144&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=885</id>
		<title>System-Makros</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=885"/>
		<updated>2014-02-11T18:56:09Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
System-Makros sind spezielle im Hauptprogramm hinterlegte Makros, welche vom Skript mit dem Befehl (M.V.''makroname'') aufgerufen werden. Sie bekleiden verschiedene Funktionen und haben verschiedene Ein- und Ausgabeparameter.&lt;br /&gt;
&lt;br /&gt;
== Script-Texturen (gültig für Szenerie- und Fahrzeugscripts, ''nur OMSI 2'') ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scripttex.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STNewTex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index, entspricht [scripttexture]-Reihenfolge in model.cfg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur initialisieren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STLock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;locken&amp;quot;, d.h. Lese- und Schreibzugriff erlauben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STUnlock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;unlocken&amp;quot;, d.h. Lese- und Schreibzugriff zurücknehmen und zum Rendern freigeben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STFilter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mipmaps erzeugen, d.h. Untervarianten in kleineren Auflösungen. Dies passiert üblicherweise nach dem Unlock, keinesfalls jedoch zwischen Lock und Unlock. Geschieht es nicht, kommt es zu Darstellungsfehlern in größeren Entfernungen (&amp;quot;überscharf&amp;quot;, flimmern)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STSetColor&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: Alpha&lt;br /&gt;
&lt;br /&gt;
Stack2: Rot&lt;br /&gt;
&lt;br /&gt;
Stack1: Grün&lt;br /&gt;
&lt;br /&gt;
Stack0: Blau&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe, mit dem weitere Operationen vorgenommen werden sollen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack2: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: X&lt;br /&gt;
&lt;br /&gt;
Stack0: Y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe des mit X und Y angegebenen Pixels auf den vorgewählten Farbwert&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawRect&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: X1&lt;br /&gt;
&lt;br /&gt;
Stack2: Y1&lt;br /&gt;
&lt;br /&gt;
Stack1: X2&lt;br /&gt;
&lt;br /&gt;
Stack0: Y2&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeichnet ein ausgefülltes Rechteck in der vorgewählten Farbe zwischen den angegebenen Koordinatenpaaren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STTextOut&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack5: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack4: X1&lt;br /&gt;
&lt;br /&gt;
Stack3: Y1&lt;br /&gt;
&lt;br /&gt;
Stack2: Font-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: Vollfarbe (oder nicht?)&lt;br /&gt;
&lt;br /&gt;
Stack0: [http://de.wikipedia.org/wiki/Sperrsatz Sperr-Pixel]&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu schreibender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt einen Text auf die Textur. Der Font-Index kann mittels ''GetFontIndex'' geholt werden. Vollfarbe gibt an, dass der Text in der aktuell vorgewählten Farbe geschrieben werden soll, andernfalls werden die Symbole in der Farbe der Schriftart geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetFontIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack0: Font-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zur Verwendung für STTextOut&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TextLength&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu prüfender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Länge in Pixeln&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Berechnet die Länge des übergebenen Textes in der gewählten Schriftart&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STReadPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack2: Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack1: X&lt;br /&gt;
&lt;br /&gt;
StringStack0: Y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die vorgewählte Farbe auf die Farbe des angegebenen Pixels&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STCopyColor&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: von-Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: nach-Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die vorgewählte Farbe der &amp;quot;nach&amp;quot;-Textur wird auf die vorgewählte Farbe der &amp;quot;von&amp;quot;-Textur gesetzt&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STLoadTex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: Texturname&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeichnet die per Dateiname angegebene Textur auf die Scripttextur&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STGetR / G / B / A&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Farbwert Rot/Grün/Blau/Alpha&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den entsprechenden aktuell vorgewählten Farbwert zurück&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Szenerieobjekte ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusLine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierzu muss das Szenerieobjekt per &amp;quot;Parent to...&amp;quot;-Funktion mit einer Bushaltestelle verbunden sein. Dann schreibt diese Funktion in den Stringstack0 die Liniennummer des Busses, welcher in der Reihenfolge der Ankünfte an der durch Index angegebenen Stelle kommt (nullbasiert!)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusLine) liefert die Liniennummer des nächsten Busses, 1 (M.V.GetArrBusLine) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTerminus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ziel des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Endhaltestelle des Busses.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTerminus) liefert die Endhaltestelle des nächsten Busses, 1 (M.V.GetArrBusTerminus) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTimeDiff&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Zeitdauer bis Bus an Haltestelle ankommt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Zeit (in Sekunden), bis der per Index gewählte Bus an der Haltestelle ankommt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTimeDiff) liefert die Ankunftszeitdauer des nächsten Busses, 1 (M.V.GetArrBusTimeDiff) die des übernächsten Busses.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fahrzeuge ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Route-Code gehörigen Route-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Haltestellen-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Haltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Haltestelle. Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |5 2 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 2 der Haltestelle Nr. 5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Terminus-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Endhaltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Endhaltestelle (Terminus). Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |7 3 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 3 der Endhaltestelle Nr. 7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den zur vorgegebenen Route zugehörigen Terminus/Endhaltestellen-Index. Über ''GetTerminusString'' kann dann wiederum der Name der Endhaltestelle geholt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Terminus-Code gehörigen Terminus-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusCode&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den in der Hofdatei zum gegebenen Terminus-Index gehörigen Terminus-Code zurück und ist somit die Umkehrfunktion von ''GetTerminusIndex''.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Haltestellenanzahl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Haltestellen der per Index gewählten Route zurück. Da es sich hier um eine Anzahl handelt, ist diese auch nicht nullbasiert - hat die Route also zwei Haltestellen, ist auch das Ergebnis dieser Funktion &amp;quot;2&amp;quot;.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GiveChangeCoin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Münz-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sorgt für das Auswerfen der Münze mit dem Index Stack0, z.B. beim Geldwechsler-Script.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2 (M.V.GiveChangeCoin) wirft die Münze mit dem Index 2 aus.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteBusstopIdent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Route-Index, Stack0: Route-Busstop-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Ident der Stack0'ten Bushaltestelle in der Route Stack1. Wiederum nullbasierte Indizes.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |3 6 (M.V.GetRouteBusstopIdent) liefert also den Index der 6. Bushaltestelle der 3. Route.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht den Index der über den Ident bezeichneten Bushaltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;Reimerweg&amp;quot; (M.V.GetBusstopIndex) liefert den Index der Haltestelle Reimerweg.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Anzahl der Haltestellen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Anzahl der Haltestellen des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der aktuellen Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der aktuellen Haltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Endhaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der Endhaltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTLineString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Liniennummer des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTDelay&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Verspätung in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die aktuelle Verspätung gemäß aktivem Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Name der Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopDep&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Abfahrtszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Abfahrtszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopArr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Ankunftszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Ankunftszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ticket-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketValue&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Preis&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Preis der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetHumanCountOnPathLink&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Pathlink-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Fahrgast-Anzahl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Fahrgäste zurück, die sich aktuell auf dem angegebenen Pfadstück befinden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NrSpecRandom&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Seed&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Random-Wert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt einen Fahrzeugnummer-spezifischen Zufallswert zurück. Der Clou dabei ist, dass die Kombination Seed und Fahrzeugnummer immer denselben Zufallswert ergibt! Möchte man für ein spezifisches Fahrzeug mehrere verschiedene Zufallswerte (für verschiedene Anwendungszwecke) einsetzen, dann benutzt man einfach unterschiedliche Seed-Werte. Welcher Seed-Wert letztlich genutzt wird, ist (da es ja ein Zufallswert ist) letztlich egal.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetHeightAbovePoint&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack2: x&lt;br /&gt;
&lt;br /&gt;
Stack1: y&lt;br /&gt;
&lt;br /&gt;
Stack0: z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Höhe über Grund&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Höhe über dem Untergrund (Terrain, Straße oder Gehweg) zurück, gemessen entlang der negativen, lokalen Z-Achse des Fahrzeuges, ausgehend vom durch x, y und z definierten Punkt (lokales Koordinatensystem).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetDepotStringGlobal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack0: Global-String aus Hofdatei&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt einen String aus der aktuell eingestellten Hofdatei zurück; diese werden in der Hofdatei mit dem Befehl [global_strings] definiert; der String-Index entspricht dann der nullbasierten Position in der Liste.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=884</id>
		<title>System-Makros</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=884"/>
		<updated>2014-02-11T18:55:32Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Fahrzeuge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
System-Makros sind spezielle im Hauptprogramm hinterlegte Makros, welche vom Skript mit dem Befehl (M.V.''makroname'') aufgerufen werden. Sie bekleiden verschiedene Funktionen und haben verschiedene Ein- und Ausgabeparameter.&lt;br /&gt;
&lt;br /&gt;
== Script-Texturen (gültig für Szenerie- und Fahrzeugscripts, ''nur OMSI 2'') ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scripttex.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STNewTex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index, entspricht [scripttexture]-Reihenfolge in model.cfg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur initialisieren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STLock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;locken&amp;quot;, d.h. Lese- und Schreibzugriff erlauben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STUnlock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;unlocken&amp;quot;, d.h. Lese- und Schreibzugriff zurücknehmen und zum Rendern freigeben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STFilter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mipmaps erzeugen, d.h. Untervarianten in kleineren Auflösungen. Dies passiert üblicherweise nach dem Unlock, keinesfalls jedoch zwischen Lock und Unlock. Geschieht es nicht, kommt es zu Darstellungsfehlern in größeren Entfernungen (&amp;quot;überscharf&amp;quot;, flimmern)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STSetColor&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: Alpha&lt;br /&gt;
&lt;br /&gt;
Stack2: Rot&lt;br /&gt;
&lt;br /&gt;
Stack1: Grün&lt;br /&gt;
&lt;br /&gt;
Stack0: Blau&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe, mit dem weitere Operationen vorgenommen werden sollen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack2: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: X&lt;br /&gt;
&lt;br /&gt;
Stack0: Y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe des mit X und Y angegebenen Pixels auf den vorgewählten Farbwert&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawRect&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: X1&lt;br /&gt;
&lt;br /&gt;
Stack2: Y1&lt;br /&gt;
&lt;br /&gt;
Stack1: X2&lt;br /&gt;
&lt;br /&gt;
Stack0: Y2&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeichnet ein ausgefülltes Rechteck in der vorgewählten Farbe zwischen den angegebenen Koordinatenpaaren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STTextOut&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack5: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack4: X1&lt;br /&gt;
&lt;br /&gt;
Stack3: Y1&lt;br /&gt;
&lt;br /&gt;
Stack2: Font-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: Vollfarbe (oder nicht?)&lt;br /&gt;
&lt;br /&gt;
Stack0: [http://de.wikipedia.org/wiki/Sperrsatz Sperr-Pixel]&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu schreibender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt einen Text auf die Textur. Der Font-Index kann mittels ''GetFontIndex'' geholt werden. Vollfarbe gibt an, dass der Text in der aktuell vorgewählten Farbe geschrieben werden soll, andernfalls werden die Symbole in der Farbe der Schriftart geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetFontIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack0: Font-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zur Verwendung für STTextOut&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TextLength&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu prüfender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Länge in Pixeln&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Berechnet die Länge des übergebenen Textes in der gewählten Schriftart&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STReadPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack2: Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack1: X&lt;br /&gt;
&lt;br /&gt;
StringStack0: Y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die vorgewählte Farbe auf die Farbe des angegebenen Pixels&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STCopyColor&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: von-Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: nach-Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die vorgewählte Farbe der &amp;quot;nach&amp;quot;-Textur wird auf die vorgewählte Farbe der &amp;quot;von&amp;quot;-Textur gesetzt&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STLoadTex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: Texturname&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeichnet die per Dateiname angegebene Textur auf die Scripttextur&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STGetR / G / B / A&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Farbwert Rot/Grün/Blau/Alpha&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den entsprechenden aktuell vorgewählten Farbwert zurück&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Szenerieobjekte ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusLine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierzu muss das Szenerieobjekt per &amp;quot;Parent to...&amp;quot;-Funktion mit einer Bushaltestelle verbunden sein. Dann schreibt diese Funktion in den Stringstack0 die Liniennummer des Busses, welcher in der Reihenfolge der Ankünfte an der durch Index angegebenen Stelle kommt (nullbasiert!)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusLine) liefert die Liniennummer des nächsten Busses, 1 (M.V.GetArrBusLine) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTerminus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ziel des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Endhaltestelle des Busses.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTerminus) liefert die Endhaltestelle des nächsten Busses, 1 (M.V.GetArrBusTerminus) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTimeDiff&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Zeitdauer bis Bus an Haltestelle ankommt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Zeit (in Sekunden), bis der per Index gewählte Bus an der Haltestelle ankommt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTimeDiff) liefert die Ankunftszeitdauer des nächsten Busses, 1 (M.V.GetArrBusTimeDiff) die des übernächsten Busses.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fahrzeuge ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Route-Code gehörigen Route-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Haltestellen-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Haltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Haltestelle. Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |5 2 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 2 der Haltestelle Nr. 5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Terminus-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Endhaltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Endhaltestelle (Terminus). Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |7 3 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 3 der Endhaltestelle Nr. 7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den zur vorgegebenen Route zugehörigen Terminus/Endhaltestellen-Index. Über ''GetTerminusString'' kann dann wiederum der Name der Endhaltestelle geholt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Terminus-Code gehörigen Terminus-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusCode&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den in der Hofdatei zum gegebenen Terminus-Index gehörigen Terminus-Code zurück und ist somit die Umkehrfunktion von ''GetTerminusIndex''.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Haltestellenanzahl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Haltestellen der per Index gewählten Route zurück. Da es sich hier um eine Anzahl handelt, ist diese auch nicht nullbasiert - hat die Route also zwei Haltestellen, ist auch das Ergebnis dieser Funktion &amp;quot;2&amp;quot;.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GiveChangeCoin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Münz-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sorgt für das Auswerfen der Münze mit dem Index Stack0, z.B. beim Geldwechsler-Script.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2 (M.V.GiveChangeCoin) wirft die Münze mit dem Index 2 aus.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteBusstopIdent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Route-Index, Stack0: Route-Busstop-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Ident der Stack0'ten Bushaltestelle in der Route Stack1. Wiederum nullbasierte Indizes.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |3 6 (M.V.GetRouteBusstopIdent) liefert also den Index der 6. Bushaltestelle der 3. Route.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht den Index der über den Ident bezeichneten Bushaltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;Reimerweg&amp;quot; (M.V.GetBusstopIndex) liefert den Index der Haltestelle Reimerweg.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Anzahl der Haltestellen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Anzahl der Haltestellen des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der aktuellen Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der aktuellen Haltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Endhaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der Endhaltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTLineString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Liniennummer des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTDelay&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Verspätung in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die aktuelle Verspätung gemäß aktivem Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Name der Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopDep&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Abfahrtszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Abfahrtszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopArr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Ankunftszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Ankunftszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ticket-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketValue&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Preis&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Preis der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetHumanCountOnPathLink&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Pathlink-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Fahrgast-Anzahl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Fahrgäste zurück, die sich aktuell auf dem angegebenen Pfadstück befinden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NrSpecRandom&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Seed&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Random-Wert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt einen Fahrzeugnummer-spezifischen Zufallswert zurück. Der Clou dabei ist, dass die Kombination Seed und Fahrzeugnummer immer denselben Zufallswert ergibt! Möchte man für ein spezifisches Fahrzeug mehrere verschiedene Zufallswerte (für verschiedene Anwendungszwecke) einsetzen, dann benutzt man einfach unterschiedliche Seed-Werte. Welcher Seed-Wert letztlich genutzt wird, ist (da es ja ein Zufallswert ist) letztlich egal.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetHeightAbovePoint&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack2: x&lt;br /&gt;
&lt;br /&gt;
Stack1: y&lt;br /&gt;
&lt;br /&gt;
Stack0: z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Höhe über Grund&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Höhe über dem Untergrund (Terrain, Straße oder Gehweg) zurück, gemessen entlang der negativen, lokalen Z-Achse des Fahrzeuges, ausgehend vom durch x, y und z definierten Punkt (lokales Koordinatensystem).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetDepotStringGlobal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack0: Global-String aus Hofdatei&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt einen String aus der aktuell eingestellten Hofdatei zurück; diese werden in der Hofdatei mit dem Befehl [global_strings] definiert; der String-Index entspricht dann der nullbasierten Position in der Liste.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=883</id>
		<title>System-Makros</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=883"/>
		<updated>2014-02-11T18:45:27Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Fahrzeuge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
System-Makros sind spezielle im Hauptprogramm hinterlegte Makros, welche vom Skript mit dem Befehl (M.V.''makroname'') aufgerufen werden. Sie bekleiden verschiedene Funktionen und haben verschiedene Ein- und Ausgabeparameter.&lt;br /&gt;
&lt;br /&gt;
== Script-Texturen (gültig für Szenerie- und Fahrzeugscripts, ''nur OMSI 2'') ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scripttex.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STNewTex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index, entspricht [scripttexture]-Reihenfolge in model.cfg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur initialisieren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STLock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;locken&amp;quot;, d.h. Lese- und Schreibzugriff erlauben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STUnlock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;unlocken&amp;quot;, d.h. Lese- und Schreibzugriff zurücknehmen und zum Rendern freigeben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STFilter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mipmaps erzeugen, d.h. Untervarianten in kleineren Auflösungen. Dies passiert üblicherweise nach dem Unlock, keinesfalls jedoch zwischen Lock und Unlock. Geschieht es nicht, kommt es zu Darstellungsfehlern in größeren Entfernungen (&amp;quot;überscharf&amp;quot;, flimmern)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STSetColor&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: Alpha&lt;br /&gt;
&lt;br /&gt;
Stack2: Rot&lt;br /&gt;
&lt;br /&gt;
Stack1: Grün&lt;br /&gt;
&lt;br /&gt;
Stack0: Blau&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe, mit dem weitere Operationen vorgenommen werden sollen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack2: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: X&lt;br /&gt;
&lt;br /&gt;
Stack0: Y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe des mit X und Y angegebenen Pixels auf den vorgewählten Farbwert&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawRect&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: X1&lt;br /&gt;
&lt;br /&gt;
Stack2: Y1&lt;br /&gt;
&lt;br /&gt;
Stack1: X2&lt;br /&gt;
&lt;br /&gt;
Stack0: Y2&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeichnet ein ausgefülltes Rechteck in der vorgewählten Farbe zwischen den angegebenen Koordinatenpaaren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STTextOut&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack5: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack4: X1&lt;br /&gt;
&lt;br /&gt;
Stack3: Y1&lt;br /&gt;
&lt;br /&gt;
Stack2: Font-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: Vollfarbe (oder nicht?)&lt;br /&gt;
&lt;br /&gt;
Stack0: [http://de.wikipedia.org/wiki/Sperrsatz Sperr-Pixel]&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu schreibender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt einen Text auf die Textur. Der Font-Index kann mittels ''GetFontIndex'' geholt werden. Vollfarbe gibt an, dass der Text in der aktuell vorgewählten Farbe geschrieben werden soll, andernfalls werden die Symbole in der Farbe der Schriftart geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetFontIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack0: Font-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zur Verwendung für STTextOut&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TextLength&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu prüfender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Länge in Pixeln&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Berechnet die Länge des übergebenen Textes in der gewählten Schriftart&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STReadPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack2: Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack1: X&lt;br /&gt;
&lt;br /&gt;
StringStack0: Y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die vorgewählte Farbe auf die Farbe des angegebenen Pixels&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STCopyColor&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: von-Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: nach-Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die vorgewählte Farbe der &amp;quot;nach&amp;quot;-Textur wird auf die vorgewählte Farbe der &amp;quot;von&amp;quot;-Textur gesetzt&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STLoadTex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: Texturname&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeichnet die per Dateiname angegebene Textur auf die Scripttextur&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STGetR / G / B / A&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Farbwert Rot/Grün/Blau/Alpha&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den entsprechenden aktuell vorgewählten Farbwert zurück&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Szenerieobjekte ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusLine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierzu muss das Szenerieobjekt per &amp;quot;Parent to...&amp;quot;-Funktion mit einer Bushaltestelle verbunden sein. Dann schreibt diese Funktion in den Stringstack0 die Liniennummer des Busses, welcher in der Reihenfolge der Ankünfte an der durch Index angegebenen Stelle kommt (nullbasiert!)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusLine) liefert die Liniennummer des nächsten Busses, 1 (M.V.GetArrBusLine) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTerminus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ziel des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Endhaltestelle des Busses.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTerminus) liefert die Endhaltestelle des nächsten Busses, 1 (M.V.GetArrBusTerminus) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTimeDiff&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Zeitdauer bis Bus an Haltestelle ankommt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Zeit (in Sekunden), bis der per Index gewählte Bus an der Haltestelle ankommt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTimeDiff) liefert die Ankunftszeitdauer des nächsten Busses, 1 (M.V.GetArrBusTimeDiff) die des übernächsten Busses.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fahrzeuge ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Route-Code gehörigen Route-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Haltestellen-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Haltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Haltestelle. Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |5 2 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 2 der Haltestelle Nr. 5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Terminus-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Endhaltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Endhaltestelle (Terminus). Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |7 3 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 3 der Endhaltestelle Nr. 7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den zur vorgegebenen Route zugehörigen Terminus/Endhaltestellen-Index. Über ''GetTerminusString'' kann dann wiederum der Name der Endhaltestelle geholt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Terminus-Code gehörigen Terminus-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusCode&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den in der Hofdatei zum gegebenen Terminus-Index gehörigen Terminus-Code zurück und ist somit die Umkehrfunktion von ''GetTerminusIndex''.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Haltestellenanzahl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Haltestellen der per Index gewählten Route zurück. Da es sich hier um eine Anzahl handelt, ist diese auch nicht nullbasiert - hat die Route also zwei Haltestellen, ist auch das Ergebnis dieser Funktion &amp;quot;2&amp;quot;.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GiveChangeCoin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Münz-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sorgt für das Auswerfen der Münze mit dem Index Stack0, z.B. beim Geldwechsler-Script.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2 (M.V.GiveChangeCoin) wirft die Münze mit dem Index 2 aus.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteBusstopIdent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Route-Index, Stack0: Route-Busstop-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Ident der Stack0'ten Bushaltestelle in der Route Stack1. Wiederum nullbasierte Indizes.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |3 6 (M.V.GetRouteBusstopIdent) liefert also den Index der 6. Bushaltestelle der 3. Route.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht den Index der über den Ident bezeichneten Bushaltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;Reimerweg&amp;quot; (M.V.GetBusstopIndex) liefert den Index der Haltestelle Reimerweg.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Anzahl der Haltestellen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Anzahl der Haltestellen des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der aktuellen Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der aktuellen Haltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Endhaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der Endhaltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTLineString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Liniennummer des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTDelay&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Verspätung in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die aktuelle Verspätung gemäß aktivem Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Name der Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopDep&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Abfahrtszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Abfahrtszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopArr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Ankunftszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Ankunftszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ticket-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketValue&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Preis&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Preis der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=882</id>
		<title>System-Makros</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=882"/>
		<updated>2014-02-11T18:43:40Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Script-Texturen (gültig für Szenerie- und Fahrzeugscripts, nur OMSI 2) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
System-Makros sind spezielle im Hauptprogramm hinterlegte Makros, welche vom Skript mit dem Befehl (M.V.''makroname'') aufgerufen werden. Sie bekleiden verschiedene Funktionen und haben verschiedene Ein- und Ausgabeparameter.&lt;br /&gt;
&lt;br /&gt;
== Script-Texturen (gültig für Szenerie- und Fahrzeugscripts, ''nur OMSI 2'') ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scripttex.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STNewTex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index, entspricht [scripttexture]-Reihenfolge in model.cfg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur initialisieren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STLock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;locken&amp;quot;, d.h. Lese- und Schreibzugriff erlauben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STUnlock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;unlocken&amp;quot;, d.h. Lese- und Schreibzugriff zurücknehmen und zum Rendern freigeben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STFilter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mipmaps erzeugen, d.h. Untervarianten in kleineren Auflösungen. Dies passiert üblicherweise nach dem Unlock, keinesfalls jedoch zwischen Lock und Unlock. Geschieht es nicht, kommt es zu Darstellungsfehlern in größeren Entfernungen (&amp;quot;überscharf&amp;quot;, flimmern)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STSetColor&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: Alpha&lt;br /&gt;
&lt;br /&gt;
Stack2: Rot&lt;br /&gt;
&lt;br /&gt;
Stack1: Grün&lt;br /&gt;
&lt;br /&gt;
Stack0: Blau&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe, mit dem weitere Operationen vorgenommen werden sollen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack2: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: X&lt;br /&gt;
&lt;br /&gt;
Stack0: Y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe des mit X und Y angegebenen Pixels auf den vorgewählten Farbwert&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawRect&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: X1&lt;br /&gt;
&lt;br /&gt;
Stack2: Y1&lt;br /&gt;
&lt;br /&gt;
Stack1: X2&lt;br /&gt;
&lt;br /&gt;
Stack0: Y2&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeichnet ein ausgefülltes Rechteck in der vorgewählten Farbe zwischen den angegebenen Koordinatenpaaren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STTextOut&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack5: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack4: X1&lt;br /&gt;
&lt;br /&gt;
Stack3: Y1&lt;br /&gt;
&lt;br /&gt;
Stack2: Font-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: Vollfarbe (oder nicht?)&lt;br /&gt;
&lt;br /&gt;
Stack0: [http://de.wikipedia.org/wiki/Sperrsatz Sperr-Pixel]&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu schreibender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt einen Text auf die Textur. Der Font-Index kann mittels ''GetFontIndex'' geholt werden. Vollfarbe gibt an, dass der Text in der aktuell vorgewählten Farbe geschrieben werden soll, andernfalls werden die Symbole in der Farbe der Schriftart geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetFontIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack0: Font-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zur Verwendung für STTextOut&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TextLength&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu prüfender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Länge in Pixeln&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Berechnet die Länge des übergebenen Textes in der gewählten Schriftart&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STReadPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack2: Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack1: X&lt;br /&gt;
&lt;br /&gt;
StringStack0: Y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die vorgewählte Farbe auf die Farbe des angegebenen Pixels&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STCopyColor&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: von-Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: nach-Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die vorgewählte Farbe der &amp;quot;nach&amp;quot;-Textur wird auf die vorgewählte Farbe der &amp;quot;von&amp;quot;-Textur gesetzt&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STLoadTex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: Texturname&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeichnet die per Dateiname angegebene Textur auf die Scripttextur&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STGetR / G / B / A&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Farbwert Rot/Grün/Blau/Alpha&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den entsprechenden aktuell vorgewählten Farbwert zurück&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Szenerieobjekte ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusLine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierzu muss das Szenerieobjekt per &amp;quot;Parent to...&amp;quot;-Funktion mit einer Bushaltestelle verbunden sein. Dann schreibt diese Funktion in den Stringstack0 die Liniennummer des Busses, welcher in der Reihenfolge der Ankünfte an der durch Index angegebenen Stelle kommt (nullbasiert!)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusLine) liefert die Liniennummer des nächsten Busses, 1 (M.V.GetArrBusLine) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTerminus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ziel des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Endhaltestelle des Busses.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTerminus) liefert die Endhaltestelle des nächsten Busses, 1 (M.V.GetArrBusTerminus) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTimeDiff&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Zeitdauer bis Bus an Haltestelle ankommt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Zeit (in Sekunden), bis der per Index gewählte Bus an der Haltestelle ankommt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTimeDiff) liefert die Ankunftszeitdauer des nächsten Busses, 1 (M.V.GetArrBusTimeDiff) die des übernächsten Busses.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fahrzeuge ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Route-Code gehörigen Route-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Haltestellen-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Haltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Haltestelle. Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |5 2 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 2 der Haltestelle Nr. 5&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Terminus-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Endhaltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Endhaltestelle (Terminus). Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |7 3 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 3 der Endhaltestelle Nr. 7&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den zur vorgegebenen Route zugehörigen Terminus/Endhaltestellen-Index. Über ''GetTerminusString'' kann dann wiederum der Name der Endhaltestelle geholt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Terminus-Code gehörigen Terminus-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusCode&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den in der Hofdatei zum gegebenen Terminus-Index gehörigen Terminus-Code zurück und ist somit die Umkehrfunktion von ''GetTerminusIndex''.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Haltestellenanzahl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Haltestellen der per Index gewählten Route zurück. Da es sich hier um eine Anzahl handelt, ist diese auch nicht nullbasiert - hat die Route also zwei Haltestellen, ist auch das Ergebnis dieser Funktion &amp;quot;2&amp;quot;.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GiveChangeCoin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Münz-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sorgt für das Auswerfen der Münze mit dem Index Stack0, z.B. beim Geldwechsler-Script.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2 (M.V.GiveChangeCoin) wirft die Münze mit dem Index 2 aus.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteBusstopIdent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Route-Index, Stack0: Route-Busstop-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Ident der Stack0'ten Bushaltestelle in der Route Stack1. Wiederum nullbasierte Indizes.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |3 6 (M.V.GetRouteBusstopIdent) liefert also den Index der 6. Bushaltestelle der 3. Route.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht den Index der über den Ident bezeichneten Bushaltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;Reimerweg&amp;quot; (M.V.GetBusstopIndex) liefert den Index der Haltestelle Reimerweg.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Anzahl der Haltestellen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Anzahl der Haltestellen des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der aktuellen Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der aktuellen Haltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Endhaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der Endhaltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTLineString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Liniennummer des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTDelay&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Verspätung in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die aktuelle Verspätung gemäß aktivem Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Name der Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopDep&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Abfahrtszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Abfahrtszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopArr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Ankunftszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Ankunftszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ticket-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketValue&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Preis&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Preis der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=881</id>
		<title>System-Makros</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=881"/>
		<updated>2014-02-11T17:13:36Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Script-Texturen (gültig für Szenerie- und Fahrzeugscripts, nur OMSI 2) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
System-Makros sind spezielle im Hauptprogramm hinterlegte Makros, welche vom Skript mit dem Befehl (M.V.''makroname'') aufgerufen werden. Sie bekleiden verschiedene Funktionen und haben verschiedene Ein- und Ausgabeparameter.&lt;br /&gt;
&lt;br /&gt;
== Script-Texturen (gültig für Szenerie- und Fahrzeugscripts, ''nur OMSI 2'') ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scripttex.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STNewTex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index, entspricht [scripttexture]-Reihenfolge in model.cfg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur initialisieren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STLock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;locken&amp;quot;, d.h. Lese- und Schreibzugriff erlauben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STUnlock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;unlocken&amp;quot;, d.h. Lese- und Schreibzugriff zurücknehmen und zum Rendern freigeben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STFilter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mipmaps erzeugen, d.h. Untervarianten in kleineren Auflösungen. Dies passiert üblicherweise nach dem Unlock, keinesfalls jedoch zwischen Lock und Unlock. Geschieht es nicht, kommt es zu Darstellungsfehlern in größeren Entfernungen (&amp;quot;überscharf&amp;quot;, flimmern)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STSetColor&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: Alpha&lt;br /&gt;
&lt;br /&gt;
Stack2: Rot&lt;br /&gt;
&lt;br /&gt;
Stack1: Grün&lt;br /&gt;
&lt;br /&gt;
Stack0: Blau&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe, mit dem weitere Operationen vorgenommen werden sollen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack2: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: X&lt;br /&gt;
&lt;br /&gt;
Stack0: Y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe des mit X und Y angegebenen Pixels auf den vorgewählten Farbwert&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawRect&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: X1&lt;br /&gt;
&lt;br /&gt;
Stack2: Y1&lt;br /&gt;
&lt;br /&gt;
Stack1: X2&lt;br /&gt;
&lt;br /&gt;
Stack0: Y2&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeichnet ein ausgefülltes Rechteck in der vorgewählten Farbe zwischen den angegebenen Koordinatenpaaren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STTextOut&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack5: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack4: X1&lt;br /&gt;
&lt;br /&gt;
Stack3: Y1&lt;br /&gt;
&lt;br /&gt;
Stack2: Font-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: Vollfarbe (oder nicht?)&lt;br /&gt;
&lt;br /&gt;
Stack0: [http://de.wikipedia.org/wiki/Sperrsatz Sperr-Pixel]&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu schreibender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt einen Text auf die Textur. Der Font-Index kann mittels ''GetFontIndex'' geholt werden. Vollfarbe gibt an, dass der Text in der aktuell vorgewählten Farbe geschrieben werden soll, andernfalls werden die Symbole in der Farbe der Schriftart geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetFontIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack0: Font-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zur Verwendung für STTextOut&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TextLength&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu prüfender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Länge in Pixeln&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Berechnet die Länge des übergebenen Textes in der gewählten Schriftart&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STReadPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StringStack0: Font-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Font-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zur Verwendung für STTextOut&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Szenerieobjekte ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusLine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierzu muss das Szenerieobjekt per &amp;quot;Parent to...&amp;quot;-Funktion mit einer Bushaltestelle verbunden sein. Dann schreibt diese Funktion in den Stringstack0 die Liniennummer des Busses, welcher in der Reihenfolge der Ankünfte an der durch Index angegebenen Stelle kommt (nullbasiert!)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusLine) liefert die Liniennummer des nächsten Busses, 1 (M.V.GetArrBusLine) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTerminus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ziel des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Endhaltestelle des Busses.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTerminus) liefert die Endhaltestelle des nächsten Busses, 1 (M.V.GetArrBusTerminus) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTimeDiff&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Zeitdauer bis Bus an Haltestelle ankommt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Zeit (in Sekunden), bis der per Index gewählte Bus an der Haltestelle ankommt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTimeDiff) liefert die Ankunftszeitdauer des nächsten Busses, 1 (M.V.GetArrBusTimeDiff) die des übernächsten Busses.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fahrzeuge ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Route-Code gehörigen Route-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Haltestellen-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Haltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Haltestelle. Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |5 2 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 2 der Haltestelle Nr. 5&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Terminus-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Endhaltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Endhaltestelle (Terminus). Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |7 3 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 3 der Endhaltestelle Nr. 7&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den zur vorgegebenen Route zugehörigen Terminus/Endhaltestellen-Index. Über ''GetTerminusString'' kann dann wiederum der Name der Endhaltestelle geholt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Terminus-Code gehörigen Terminus-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusCode&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den in der Hofdatei zum gegebenen Terminus-Index gehörigen Terminus-Code zurück und ist somit die Umkehrfunktion von ''GetTerminusIndex''.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Haltestellenanzahl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Haltestellen der per Index gewählten Route zurück. Da es sich hier um eine Anzahl handelt, ist diese auch nicht nullbasiert - hat die Route also zwei Haltestellen, ist auch das Ergebnis dieser Funktion &amp;quot;2&amp;quot;.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GiveChangeCoin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Münz-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sorgt für das Auswerfen der Münze mit dem Index Stack0, z.B. beim Geldwechsler-Script.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2 (M.V.GiveChangeCoin) wirft die Münze mit dem Index 2 aus.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteBusstopIdent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Route-Index, Stack0: Route-Busstop-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Ident der Stack0'ten Bushaltestelle in der Route Stack1. Wiederum nullbasierte Indizes.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |3 6 (M.V.GetRouteBusstopIdent) liefert also den Index der 6. Bushaltestelle der 3. Route.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht den Index der über den Ident bezeichneten Bushaltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;Reimerweg&amp;quot; (M.V.GetBusstopIndex) liefert den Index der Haltestelle Reimerweg.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Anzahl der Haltestellen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Anzahl der Haltestellen des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der aktuellen Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der aktuellen Haltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Endhaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der Endhaltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTLineString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Liniennummer des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTDelay&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Verspätung in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die aktuelle Verspätung gemäß aktivem Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Name der Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopDep&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Abfahrtszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Abfahrtszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopArr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Ankunftszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Ankunftszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ticket-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketValue&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Preis&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Preis der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=880</id>
		<title>System-Makros</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=880"/>
		<updated>2014-02-11T16:58:19Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Script-Texturen (gültig für Szenerie- und Fahrzeugscripts, nur OMSI 2) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
System-Makros sind spezielle im Hauptprogramm hinterlegte Makros, welche vom Skript mit dem Befehl (M.V.''makroname'') aufgerufen werden. Sie bekleiden verschiedene Funktionen und haben verschiedene Ein- und Ausgabeparameter.&lt;br /&gt;
&lt;br /&gt;
== Script-Texturen (gültig für Szenerie- und Fahrzeugscripts, ''nur OMSI 2'') ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scripttex.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STNewTex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index, entspricht [scripttexture]-Reihenfolge in model.cfg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur initialisieren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STLock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;locken&amp;quot;, d.h. Lese- und Schreibzugriff erlauben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STUnlock&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Scripttextur &amp;quot;unlocken&amp;quot;, d.h. Lese- und Schreibzugriff zurücknehmen und zum Rendern freigeben&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STFilter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Textur-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mipmaps erzeugen, d.h. Untervarianten in kleineren Auflösungen. Dies passiert üblicherweise nach dem Unlock, keinesfalls jedoch zwischen Lock und Unlock. Geschieht es nicht, kommt es zu Darstellungsfehlern in größeren Entfernungen (&amp;quot;überscharf&amp;quot;, flimmern)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STSetColor&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: Alpha&lt;br /&gt;
&lt;br /&gt;
Stack2: Rot&lt;br /&gt;
&lt;br /&gt;
Stack1: Grün&lt;br /&gt;
&lt;br /&gt;
Stack0: Blau&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe, mit dem weitere Operationen vorgenommen werden sollen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawPixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack2: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack1: X&lt;br /&gt;
&lt;br /&gt;
Stack0: Y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Farbe des mit X und Y angegebenen Pixels auf den vorgewählten Farbwert&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STDrawRect&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack4: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack3: X1&lt;br /&gt;
&lt;br /&gt;
Stack2: Y1&lt;br /&gt;
&lt;br /&gt;
Stack1: X2&lt;br /&gt;
&lt;br /&gt;
Stack0: Y2&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeichnet ein ausgefülltes Rechteck in der vorgewählten Farbe zwischen den angegebenen Koordinatenpaaren&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STTextOut&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack5: Textur-Index&lt;br /&gt;
&lt;br /&gt;
Stack4: X1&lt;br /&gt;
&lt;br /&gt;
Stack3: Y1&lt;br /&gt;
&lt;br /&gt;
Stack2: Fontindex&lt;br /&gt;
&lt;br /&gt;
Stack1: Vollfarbe (oder nicht?)&lt;br /&gt;
&lt;br /&gt;
Stack0: [http://de.wikipedia.org/wiki/Sperrsatz Sperr-Pixel]&lt;br /&gt;
&lt;br /&gt;
StringStack0: Zu schreibender Text&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt einen Text auf die Textur. Der Font-Index kann mittels ''GetFontIndex'' geholt werden. Vollfarbe gibt an, dass der Text in der aktuell vorgewählten Farbe geschrieben werden soll, andernfalls werden die Symbole in der Farbe der Schriftart geschrieben.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Szenerieobjekte ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusLine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierzu muss das Szenerieobjekt per &amp;quot;Parent to...&amp;quot;-Funktion mit einer Bushaltestelle verbunden sein. Dann schreibt diese Funktion in den Stringstack0 die Liniennummer des Busses, welcher in der Reihenfolge der Ankünfte an der durch Index angegebenen Stelle kommt (nullbasiert!)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusLine) liefert die Liniennummer des nächsten Busses, 1 (M.V.GetArrBusLine) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTerminus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ziel des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Endhaltestelle des Busses.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTerminus) liefert die Endhaltestelle des nächsten Busses, 1 (M.V.GetArrBusTerminus) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTimeDiff&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Zeitdauer bis Bus an Haltestelle ankommt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Zeit (in Sekunden), bis der per Index gewählte Bus an der Haltestelle ankommt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTimeDiff) liefert die Ankunftszeitdauer des nächsten Busses, 1 (M.V.GetArrBusTimeDiff) die des übernächsten Busses.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fahrzeuge ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Route-Code gehörigen Route-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Haltestellen-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Haltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Haltestelle. Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |5 2 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 2 der Haltestelle Nr. 5&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Terminus-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Endhaltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Endhaltestelle (Terminus). Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |7 3 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 3 der Endhaltestelle Nr. 7&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den zur vorgegebenen Route zugehörigen Terminus/Endhaltestellen-Index. Über ''GetTerminusString'' kann dann wiederum der Name der Endhaltestelle geholt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Terminus-Code gehörigen Terminus-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusCode&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den in der Hofdatei zum gegebenen Terminus-Index gehörigen Terminus-Code zurück und ist somit die Umkehrfunktion von ''GetTerminusIndex''.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Haltestellenanzahl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Haltestellen der per Index gewählten Route zurück. Da es sich hier um eine Anzahl handelt, ist diese auch nicht nullbasiert - hat die Route also zwei Haltestellen, ist auch das Ergebnis dieser Funktion &amp;quot;2&amp;quot;.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GiveChangeCoin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Münz-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sorgt für das Auswerfen der Münze mit dem Index Stack0, z.B. beim Geldwechsler-Script.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2 (M.V.GiveChangeCoin) wirft die Münze mit dem Index 2 aus.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteBusstopIdent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Route-Index, Stack0: Route-Busstop-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Ident der Stack0'ten Bushaltestelle in der Route Stack1. Wiederum nullbasierte Indizes.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |3 6 (M.V.GetRouteBusstopIdent) liefert also den Index der 6. Bushaltestelle der 3. Route.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht den Index der über den Ident bezeichneten Bushaltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;Reimerweg&amp;quot; (M.V.GetBusstopIndex) liefert den Index der Haltestelle Reimerweg.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Anzahl der Haltestellen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Anzahl der Haltestellen des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der aktuellen Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der aktuellen Haltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Endhaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der Endhaltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTLineString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Liniennummer des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTDelay&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Verspätung in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die aktuelle Verspätung gemäß aktivem Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Name der Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopDep&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Abfahrtszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Abfahrtszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopArr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Ankunftszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Ankunftszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ticket-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketValue&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Preis&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Preis der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=879</id>
		<title>System-Makros</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Makros&amp;diff=879"/>
		<updated>2014-02-11T16:33:00Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
System-Makros sind spezielle im Hauptprogramm hinterlegte Makros, welche vom Skript mit dem Befehl (M.V.''makroname'') aufgerufen werden. Sie bekleiden verschiedene Funktionen und haben verschiedene Ein- und Ausgabeparameter.&lt;br /&gt;
&lt;br /&gt;
== Script-Texturen (gültig für Szenerie- und Fahrzeugscripts, ''nur OMSI 2'') ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scripttex.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Szenerieobjekte ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusLine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierzu muss das Szenerieobjekt per &amp;quot;Parent to...&amp;quot;-Funktion mit einer Bushaltestelle verbunden sein. Dann schreibt diese Funktion in den Stringstack0 die Liniennummer des Busses, welcher in der Reihenfolge der Ankünfte an der durch Index angegebenen Stelle kommt (nullbasiert!)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusLine) liefert die Liniennummer des nächsten Busses, 1 (M.V.GetArrBusLine) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTerminus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ziel des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Endhaltestelle des Busses.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTerminus) liefert die Endhaltestelle des nächsten Busses, 1 (M.V.GetArrBusTerminus) die des übernächsten Busses.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetArrBusTimeDiff&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index des ankommenden Busses&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Zeitdauer bis Bus an Haltestelle ankommt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Funktioniert wie ''GetArrBusLine'' und liefert die Zeit (in Sekunden), bis der per Index gewählte Bus an der Haltestelle ankommt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 (M.V.GetArrBusTimeDiff) liefert die Ankunftszeitdauer des nächsten Busses, 1 (M.V.GetArrBusTimeDiff) die des übernächsten Busses.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fahrzeuge ==&lt;br /&gt;
&lt;br /&gt;
Siehe auch Datei ''program\callbacklist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Makroname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Input-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Output-Stackwerte''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beispiel''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Route-Code gehörigen Route-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Haltestellen-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Haltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Haltestelle. Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |5 2 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 2 der Haltestelle Nr. 5&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Terminus-Index, Stack0: String-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Endhaltestellen-Stringinhalt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert aus der Hofdatei den stack0'ten String der stack1'ten Endhaltestelle (Terminus). Beide Indizes sind [[http://de.wikipedia.org/wiki/Z%C3%A4hlen#Z.C3.A4hlen_ab_0 nullbasiert]].&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |7 3 (M.V.GetBusstopString) liefert den Inhalt des Strings Nr. 3 der Endhaltestelle Nr. 7&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den zur vorgegebenen Route zugehörigen Terminus/Endhaltestellen-Index. Über ''GetTerminusString'' kann dann wiederum der Name der Endhaltestelle geholt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht in der Hofdatei die zum gegebenen Terminus-Code gehörigen Terminus-Index.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTerminusCode&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Terminus-Code&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt den in der Hofdatei zum gegebenen Terminus-Index gehörigen Terminus-Code zurück und ist somit die Umkehrfunktion von ''GetTerminusIndex''.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Route-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Haltestellenanzahl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Haltestellen der per Index gewählten Route zurück. Da es sich hier um eine Anzahl handelt, ist diese auch nicht nullbasiert - hat die Route also zwei Haltestellen, ist auch das Ergebnis dieser Funktion &amp;quot;2&amp;quot;.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GiveChangeCoin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Münz-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sorgt für das Auswerfen der Münze mit dem Index Stack0, z.B. beim Geldwechsler-Script.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2 (M.V.GiveChangeCoin) wirft die Münze mit dem Index 2 aus.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetRouteBusstopIdent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack1: Route-Index, Stack0: Route-Busstop-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Ident der Stack0'ten Bushaltestelle in der Route Stack1. Wiederum nullbasierte Indizes.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |3 6 (M.V.GetRouteBusstopIdent) liefert also den Index der 6. Bushaltestelle der 3. Route.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ident der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Bushaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sucht den Index der über den Ident bezeichneten Bushaltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;Reimerweg&amp;quot; (M.V.GetBusstopIndex) liefert den Index der Haltestelle Reimerweg.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopCount&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Anzahl der Haltestellen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Anzahl der Haltestellen des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der aktuellen Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der aktuellen Haltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTTerminusIndex&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Endhaltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Index der Endhaltestelle des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTLineString&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Liniennummer&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Liniennummer des aktuellen Fahrplans&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTDelay&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Verspätung in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die aktuelle Verspätung gemäß aktivem Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Name der Haltestelle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopDep&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Abfahrtszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Abfahrtszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTTBusstopArr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Index der Haltestelle im aktuellen Fahrplan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |STack0: Ankunftszeit in Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert die Ankunftszeit an der Haltestelle, die sich im aktuellen Fahrplan an stack0'ter Stelle befindet&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketName&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stringstack0: Ticket-Name&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Namen der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTicketValue&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stack0: Ticket-Preis&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Liefert den Preis der über Index indizierten Fahrkartentype (nullbasiert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Trigger&amp;diff=878</id>
		<title>System-Trigger</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Trigger&amp;diff=878"/>
		<updated>2014-02-11T16:31:20Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
System-Trigger sind Trigger, welche einen {trigger:''name''}...{end}-Block in einem Fahrzeug- oder Szenerieobjektscript aufruft und dabei nicht durch einen Tastendruck oder ein Maus-Ereignis des Users ausgelöst wird sondern direkt von OMSI.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Bezeichnung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |collision&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird für jede Kollision ausgelöst. Zuvor werden die ''coll_~''-Variablen entsprechend gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |int_haltewunsch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber teilen die Fahrgäste dem Bus-Script mit, dass sie aussteigen wollen. Damit die Türen ggf. auch offen bleiben, &amp;quot;drücken&amp;quot; die Fahrgäste normalerweise mehrfach!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |railbond_#&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Auslösen der Schienenstoß-Sounds bei Schienenfahrzeugen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ai_scheduled_settarget&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Aufforderung an das Script, die angezeigte Linie und das Zielschild neu einzustellen. Der String für die Linie wird über die Fahrzeug-Variable ''SetLineTo'' vorgegeben, der Index des Ziels in der Hofdatei über ''AI_target_index''.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ai_scheduled_setbusstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Aufforderung an das Script, die Haltestelle zu aktualisieren, z.B. für die Innenraumanzeige. Die neue Haltestelle wird dem Script über die Fahrzeug-Variable ''act_busstop'' mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |malfunction_gettime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Aufforderung an das Script, die Zeitdauer sämtlicher notwendiger Reparaturen zu berechnen (ohne Anfahrtszeit!); das Resultat muss am Ende ganz oben im Stack stehen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |malfunction_reset&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Aufforderung an das Script, sämtliche Reparaturen durchzuführen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Trigger&amp;diff=877</id>
		<title>System-Trigger</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Trigger&amp;diff=877"/>
		<updated>2014-02-11T16:30:08Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
System-Trigger sind Trigger, welche einen {trigger:''name''}...{end}-Block in einem Fahrzeug- oder Szenerieobjektscript aufruft und dabei nicht durch einen Tastendruck oder ein Maus-Ereignis des Users ausgelöst wird sondern direkt von OMSI.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Bezeichnung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |collision&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird für jede Kollision ausgelöst. Zuvor werden die ''coll_~''-Variablen entsprechend gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |int_haltewunsch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber teilen die Fahrgäste dem Bus-Script mit, dass sie aussteigen wollen. Damit die Türen ggf. auch offen bleiben, &amp;quot;drücken&amp;quot; die Fahrgäste normalerweise mehrfach!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |railbond_#&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Auslösen der Schienenstoß-Sounds bei Schienenfahrzeugen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ai_scheduled_settarget&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Aufforderung an das Script, die angezeigte Linie und das Zielschild neu einzustellen. Der String für die Linie wird über die Fahrzeug-Variable ''SetLineTo'' vorgegeben, der Index des Ziels in der Hofdatei über ''AI_target_index''.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ai_scheduled_setbusstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Aufforderung an das Script, die Haltestelle zu aktualisieren, z.B. für die Innenraumanzeige. Die neue Haltestelle wird dem Script über die Fahrzeug-Variable ''act_busstop'' mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |malfunction_gettime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Aufforderung an das Script, die Zeitdauer sämtlicher notwendiger Reparaturen zu berechnen (ohne Anfahrtszeit!); das Resultat muss am Ende ganz oben im Stack stehen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |malfunction_reset&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Aufforderung an das Script, sämtliche Reparaturen durchzuführen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=876</id>
		<title>System- und vordefinierte lokalen Variablen</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=876"/>
		<updated>2014-02-11T16:26:07Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Zahlvariablen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Beschreibung der System- und der lokalen [[Scriptsystem#Variablenzugriff|Scriptvariablen]], welche für jedes Objekt vordefiniert werden und im Allgemeinen bestimmte Sonderfunktionen gegenüber frei definierten Scriptvariablen übernehmen.&lt;br /&gt;
&lt;br /&gt;
== Systemvariablen ==&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_system.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Timegap&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeitschritt seit dem letzten Durchlauf (Frame)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält eine absolute Zeitangabe, die vom Beginn des Ausführens von OMSI zählt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NoSound&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sounds deaktiviert?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Sounds aktiviert, 1 = Sounds deaktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pause&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Simulations-Pause aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Simulation läuft, 1 = Simulation angehalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Time&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Uhrzeit gerechnet von Mitternacht des aktuellen Tages&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Day&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Monatsbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Month&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Year&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahre&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DayOfYear&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Jahresbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Y-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keiner, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein Niederschlag, 1 = maximaler Niederschlag&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, x-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, y-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, z-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_energy&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Energie der Kollision (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_Temperature&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Außentemperatur&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_AbsHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Absolute Luftfeuchtigkeit&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AutoClutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Option &amp;quot;automatische Kupplung&amp;quot; aktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''nicht nutzen!''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SunAlt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhenwinkel der Sonne&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte lokale Variablen ==&lt;br /&gt;
&lt;br /&gt;
Seit OMSI 2 gibt es eine neue Form vordefinierter Variablen: Diese tauchen nicht in der ''varlist_*.txt''-Datei im ''program''-Verzeichnis auf und müssen daher so wie &amp;quot;normale&amp;quot; lokale Variablen deklariert werden, sie werden aber dennoch (sofern sie deklariert werden) mit internen Variablen verbunden. Diese Variablen werden &amp;quot;on-demand-vordefinierte Variablen&amp;quot; genannt. Bitte beachten Sie hierzu die neue Spalte!&lt;br /&gt;
&lt;br /&gt;
=== Szenerieobjekte ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NightLightA&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist die Nachtbeleuchtung aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |InUse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist das Objekt &amp;quot;aktiv&amp;quot;? Die Sporthallen sind bspw. nur an Schultagen vormittags &amp;quot;aktiv&amp;quot;, sodass die Soundeffekte an diese Variable gekoppelt werden können - auf diese Weise wird verhindert, dass die Soundeffekte auch in den Ferien oder nachts zu hören sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = inaktiv, 1 = aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightPhase&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber wird Ampelobjekten die anzuzeigende Ampelphase mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..2 = rot, 3..5 = rot-gelb, 6..8 = grün, 9..11 = gelb, sonst aus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightApproach&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script eine Ampelanforderung erkennen und bspw. eine Kennleuchte aktiviert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine Anforderung, 1 = Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(veraltet)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(-)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Signal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale ihr anzuzeigendes Signalbild&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NextSignal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale mit Vorsignalfunktion das anzuzeigende Signalbild des nächsten Signals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Switch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mit dieser Variable kann die Weiche, die im Objekt eingebaut ist, gestellt werden. Hierfür muss der Wert der Variable auf den mit [switchdir] angegebenen Wert des gewünschten Pfades gesetzt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fahrzeuge ===&lt;br /&gt;
&lt;br /&gt;
Wichtig: Üblicherweise nutzen Gelenkbusse das [[Scriptshare]]-System, bei welchem sich mehrere Fahrzeuge denselben Variablenspeicher teilen. Hierbei ist zu beachten, dass Räder und Türen '''über alle Fahrzeugteile zählen'''. Beim NG272 bedeutet dies beispielsweise, dass die dritte Tür auch mit PAX_Entry2_Open angesteuert wird.&lt;br /&gt;
&lt;br /&gt;
==== Zahlvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''&amp;quot;on demand&amp;quot;''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Envir_Brightness&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umgebungshelligkeit in Fahrzeugnähe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = dunkel, 1 = hell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StreetCond&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Information über die Oberflächenbedingungen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Trocken, 0..1: zunehmende Feuchtigkeit, 1: komplett feucht, 1..2: teilweise Pfützen, 2: Fahrzeug komplett in Pfützen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spot_Select&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann gesteuert werden, welches fürs Fahrzeug vordefinierte Spotlight aktiv sein soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Spotlight, 0: Spotlight Nr. 0, 1: Spotlight Nr. 1 usw.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Index des gewählten Farbschemas/Anstriches&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |M_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script ein [http://de.wikipedia.org/wiki/Drehmoment Drehmoment] auf die Räder übertragen. Hierbei die Summe anzugeben, welche auf alle als angetrieben ausgewiesene Achsen wirken &lt;br /&gt;
soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kNm = 1000 [http://de.wikipedia.org/wiki/Newtonmeter Nm]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |n_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mittlere Raddrehzahl des Fahrzeuges&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Throttle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Gaspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brake&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Bremspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Clutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Kupplungspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brakeforce&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script die Gesamtbremskraft des Fahrzeuges vorgeben, welche auf die Räder wirkt. Sollte nicht gleichzeitig mit ''Axle_Brakeforce...'' verwendet werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche sich über die Raddrehung ergibt, entspricht der Tachoanzeige&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity_Ground&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche direkt relativ zum Grund gemessen wird, berücksichtigt kein Radschleudern oder -blockieren, entspricht der Anzeige auf einem GPS&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |tank_percent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tankinhalt, nur für die Anzeige auf der roten Informationsleiste. Die Betankung und Simulation eines leeren Tanks geschieht über einen Trigger bzw. muss im Script programmiert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (nur ganze km)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (zusätzliche Meter, läuft stets nur von 0m bis 999m; hinzu kommen die Kilometer von ''kmcounter_km'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |relrange&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zurückgelegte, relative Strecke. Wurde nur testweise für pfadfixierte Fahrzeuge eingeführt. Nicht benutzen!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |---&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Driver_Seat_VertTransl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederung des federnden Fahrersitzes&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_Rotation_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehwinkel des jeweiligen Rades, z.B. für die Animation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_RotationSpeed_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehzahl des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Suspension_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederungsweg des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Steering_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lenkwinkel des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Springfactor_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, mit dem radweise die Federstärke angepasst werden kann, z.B. um Luftfederungen zu simulieren.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine, 1 = normale, 2 = doppelte Federkraft&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Brakeforce_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ermöglicht Setzen der Bremskraft pro Rad. Sollte nicht gleichzeitig mit ''Brakeforce'' verwendet werden!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_SurfaceID_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Oberflächenbeschaffenheit unter dem Rad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[[Oberflächen-Codes]]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug_0 ... _5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug-Variablen. Können im Debug-Modus in der Informationsleiste angezeigt werden, um auf diese Weise die Scripts zu testen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |bliebig&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |A_Trans_X ... _Z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Beschleunigungen im Fahrzeug, die durch die Fahrzeugbewegungen ausgelöst werden (beim Bremsen oder bei Kurvenfahrten usw.)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m/s²&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Blinker_L, ~_R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Linker oder rechter Blinker aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: ein&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Light&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Fahrlicht, Standlicht, Lichthupe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Licht aus, 0.5: Standlicht an, 1: Fahrlicht an, 2: Fernlicht/Lichthupe an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Interiorlight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenbeleuchtung. Hierüber erfahren die einsteigenden Fahrgäste auch, ob es im Bus zu dunkel ist (sodass sie meckern dürfen).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Brakelight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Script soll Bremslicht einschalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Engine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Aufforderung zum Ein- oder Ausschalten des Motors&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Motor ausschalten!, 0: egal/nicht-KI, 1: Motor einschalten!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_target_index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dient der Übergabe des Sollwertes des einzustellenden Zielschildes bei Aufruf des Menüs oder beim Umschildern der KI-Busse. Entspricht der Reihenfolge in der Hof-Datei; erster Eintrag = 0&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |target_index_int&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Über diese Variable setzt das Script, welches Zielschild am Bus zusehen ist und steuert hierüber insbesondere die Fahrgäste. Entspricht wie ''AI_target_index'' dem Index der Reihenfolge in der Hof-Datei.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Scheduled_AtStation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur KI-Fahrzeuge, bidirektionale Kommunikation: Bei Erreichen einer Station setzt OMSI den Wert auf 1, sodass das Script mitgeteilt bekommt, dass die Türen geöffnet werden sollen. Wenn sich der Bus abfahrbereit machen soll, setzt OMSI den Wert auf -1. Wenn der Bus abfahrbereit ist (Türen geschlossen usw.), dann setzt das Script den Wert auf 0, sodass die KI den Bus weiterfahren lassen kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Bus abfahrbereit machen, 0: Bus ist abfahrbereit, 1: Türen freigeben/öffnen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Scheduled_AtStation_Side&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt dem Script an, auf welcher Seite die Türen geöffnet werden können/sollen (insbesondere bei Schienenfahrzeugen)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: rechts, 1: links, 2: beidseitig&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erfährt das Script, ob das Fahrzeug von der AI gesteuert wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Open ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Eingänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Ausgänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Req ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mindestens ein Fahrgast fordert den Einstieg durch diesen Eingang an.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: keine Anforderung, 1: Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Req&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mindestens ein Fahrgast fordert den Ausstieg durch diesen Ausgang an (&amp;quot;Haltewunsch&amp;quot;).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: keine Anforderung, 1: Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GivenTicket&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob der ggf. vorhandene Fahrscheinautomat ein Ticket ausgegeben hat.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Ticket, 0: Tickettyp 0, 1: Tickettyp 1, ...&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |humans_count&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Anzahl der Fahrgäste im Fahrzeug&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Period&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsperiode im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Amp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsamplitude im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0...1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_OutsideVol&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, wie stark der Außensound im Innenraum hörbar ist; verändert sich bspw. wenn eine Tür geöffnet wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: kaum hörbar, 1: wie draußen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Microphone&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Hardware-)Mikrofon aktiv sein?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Radio&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Internet-)Radio laufen?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_Temp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenraumtemperatur für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_absHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Absolute_Luftfeuchtigkeit Absolute Luftfeuchtigkeit] im Innenraum für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_relHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Relative_Luftfeuchtigkeit Relative Luftfeuchtigkeit] im Innenraum, wird durch OMSI automatisch über die absolute Feuchtigkeit und die Innentemperatur berechnet.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = 0%, 1 = 100%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = maximal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dirt_Norm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |allgemeiner Verdreckungszustand (Windschutzscheiben können sauberer sein und werden nur vom Script simuliert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = sauber, 1 = total verdreckt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DirtRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |aktuelle Verdreckungsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verdreckung / s, wobei eine Verdreckung = 1 bedeutet, dass die Verdreckung maximal ist.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |schedule_active&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist gerade ein Fahrplan aktiv? (Bspw. für Einblendung der Fahrplankarte)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_frontcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der vorderen Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_backcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der hinteren Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_me_reverse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Steht dieses Fahrzeug rückwärts zum gesamten Fahrzeugverband?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficPriority&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable wird vom Fahrzeug gesetzt, wenn dieses Fahrzeug (z.B. Feuerwehr oder Polizei) im Einsatz ist und Vorrang vor allen anderen Verkehrsteilnehmern genießt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, welcher beim Initialisieren von Verschleißteil-Lebensdauern über den Durchschnittswert multipliziert wird. Hierrüber wirkt sich die Einstellung in den Optionen über dem Wartungszustand auf die Lebensdauern aus. &lt;br /&gt;
| align=&amp;quot;left&amp;quot; |10: sehr gute Wartung, 1: normale Wartung, 0.1: schlechte Wartung, 0.01: sehr schlechte Wartung, 1500000: &amp;quot;unendlich&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |articulation_#_alpha / ~_beta&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Winkel, um den das #. Gelenk um die Hochachse (''alpha'') bzw. Querachse (''beta'') geknickt ist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |boogie_#_wheel_at_limit&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wie weit läuft das Drehgestell an der Kante?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = genau mittig auf dem Gleis, -1/1: ganz an einer der beiden Kanten - Quietschen ist das Resultat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |boogie_#_invradius&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Welchen inversen Kurvenradius hat die Kurve am Drehgestell?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1/m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |contactshoe_#_rail_pos_x / ~_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |An welcher Position befindet sich die Stromschiene am Gleis?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |contactshoe_#_rail_index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Index der Stromschiene, -1, falls keine vorhanden ist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |contactshoe_#_volt_rail&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spannung an der Stromschiene&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Volt V]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |contactshoe_#_volt_veh&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Der durch diese Stromschiene ins Fahrzeug gelangte Spannung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Volt V]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |contactshoe_#_freq&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die Frequenz der an dieser Stromschiene liegenden [http://de.wikipedia.org/wiki/Wechselspannung Spannung]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Hertz_(Einheit) Hz], 0: Gleichspannung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*) Bidirektionale KI-Variablen: Handelt es sich um ein Userfahrzeug, kann das Script dem Hauptprogramm mitteilen, wie Licht, Blinker usw. gesetzt wurden. Handelt es sich aber um ein KI-Fahrzeug, teilt OMSI dem Script mit, wie die entsprechenden Zustände gesetzt werden müssen.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stringvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\stringvarlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ident&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält das Kraftfahrzeugkennzeichen dieses Fahrzeugs (z.B. &amp;quot;B-V 3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |number&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält die Fahrzeugnummer (z.B. &amp;quot;3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_route&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''(keine Verwendung)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_busstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_setbusstop'' verwendet: Enthält dann den Namen der im Fahrplansystem aktiven Haltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SetLineTo&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_settarget'' verwendet: Enthält die einzustellende Liniennummer (oder Symbol) (bei Verwendung vom Zielschild-Menü oder beim Umschildern von KI-Bussen)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |yard&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Name der Hofdatei des Fahrzeuges, bspw. damit das Scriptsystem den Dateinamen der Zielcode-Tabelle generieren kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |file_schedule&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält den Dateinamen der Fahrplan-Bitmap, die zu der von diesem Fahrzeug gefahrenen Strecke gehört.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Menschen ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_human.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |LastMovedDist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernung, die der Mensch seit dem letzten Durchlauf zurückgelegt hat. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_State&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zustand des Menschens. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: stehen, 1: gehen, 2: sitzen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |HeightOfSeat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhe des Sitzes. Diese Eigenschaft wird in der Sitzposition gebraucht, um die Höhe der Füße korrekt gesetzt. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tauschtextur-Index (&amp;quot;Farbschema&amp;quot;) des Menschens.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Trigger&amp;diff=875</id>
		<title>System-Trigger</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-Trigger&amp;diff=875"/>
		<updated>2014-02-11T16:07:43Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
System-Trigger sind Trigger, welche einen {trigger:''name''}...{end}-Block in einem Fahrzeug- oder Szenerieobjektscript aufruft und dabei nicht durch einen Tastendruck oder ein Maus-Ereignis des Users ausgelöst wird sondern direkt von OMSI.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Bezeichnung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |collision&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird für jede Kollision ausgelöst. Zuvor werden die ''coll_~''-Variablen entsprechend gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |int_haltewunsch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber teilen die Fahrgäste dem Bus-Script mit, dass sie aussteigen wollen. Damit die Türen ggf. auch offen bleiben, &amp;quot;drücken&amp;quot; die Fahrgäste normalerweise mehrfach!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |railbond_#&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Auslösen der Schienenstoß-Sounds bei Schienenfahrzeugen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ai_scheduled_settarget&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Aufforderung an das Script, die angezeigte Linie und das Zielschild neu einzustellen. Der String für die Linie wird über die Fahrzeug-Variable ''SetLineTo'' vorgegeben, der Index des Ziels in der Hofdatei über ''AI_target_index''.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ai_scheduled_setbusstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Aufforderung an das Script, die Haltestelle zu aktualisieren, z.B. für die Innenraumanzeige. Die neue Haltestelle wird dem Script über die Fahrzeug-Variable ''act_busstop'' mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=874</id>
		<title>System- und vordefinierte lokalen Variablen</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=874"/>
		<updated>2014-02-11T16:01:44Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Beschreibung der System- und der lokalen [[Scriptsystem#Variablenzugriff|Scriptvariablen]], welche für jedes Objekt vordefiniert werden und im Allgemeinen bestimmte Sonderfunktionen gegenüber frei definierten Scriptvariablen übernehmen.&lt;br /&gt;
&lt;br /&gt;
== Systemvariablen ==&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_system.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Timegap&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeitschritt seit dem letzten Durchlauf (Frame)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält eine absolute Zeitangabe, die vom Beginn des Ausführens von OMSI zählt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NoSound&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sounds deaktiviert?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Sounds aktiviert, 1 = Sounds deaktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pause&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Simulations-Pause aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Simulation läuft, 1 = Simulation angehalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Time&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Uhrzeit gerechnet von Mitternacht des aktuellen Tages&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Day&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Monatsbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Month&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Year&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahre&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DayOfYear&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Jahresbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Y-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keiner, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein Niederschlag, 1 = maximaler Niederschlag&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, x-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, y-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, z-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_energy&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Energie der Kollision (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_Temperature&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Außentemperatur&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_AbsHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Absolute Luftfeuchtigkeit&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AutoClutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Option &amp;quot;automatische Kupplung&amp;quot; aktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''nicht nutzen!''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SunAlt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhenwinkel der Sonne&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte lokale Variablen ==&lt;br /&gt;
&lt;br /&gt;
Seit OMSI 2 gibt es eine neue Form vordefinierter Variablen: Diese tauchen nicht in der ''varlist_*.txt''-Datei im ''program''-Verzeichnis auf und müssen daher so wie &amp;quot;normale&amp;quot; lokale Variablen deklariert werden, sie werden aber dennoch (sofern sie deklariert werden) mit internen Variablen verbunden. Diese Variablen werden &amp;quot;on-demand-vordefinierte Variablen&amp;quot; genannt. Bitte beachten Sie hierzu die neue Spalte!&lt;br /&gt;
&lt;br /&gt;
=== Szenerieobjekte ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NightLightA&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist die Nachtbeleuchtung aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |InUse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist das Objekt &amp;quot;aktiv&amp;quot;? Die Sporthallen sind bspw. nur an Schultagen vormittags &amp;quot;aktiv&amp;quot;, sodass die Soundeffekte an diese Variable gekoppelt werden können - auf diese Weise wird verhindert, dass die Soundeffekte auch in den Ferien oder nachts zu hören sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = inaktiv, 1 = aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightPhase&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber wird Ampelobjekten die anzuzeigende Ampelphase mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..2 = rot, 3..5 = rot-gelb, 6..8 = grün, 9..11 = gelb, sonst aus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightApproach&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script eine Ampelanforderung erkennen und bspw. eine Kennleuchte aktiviert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine Anforderung, 1 = Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(veraltet)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(-)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Signal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale ihr anzuzeigendes Signalbild&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NextSignal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale mit Vorsignalfunktion das anzuzeigende Signalbild des nächsten Signals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Switch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mit dieser Variable kann die Weiche, die im Objekt eingebaut ist, gestellt werden. Hierfür muss der Wert der Variable auf den mit [switchdir] angegebenen Wert des gewünschten Pfades gesetzt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fahrzeuge ===&lt;br /&gt;
&lt;br /&gt;
Wichtig: Üblicherweise nutzen Gelenkbusse das [[Scriptshare]]-System, bei welchem sich mehrere Fahrzeuge denselben Variablenspeicher teilen. Hierbei ist zu beachten, dass Räder und Türen '''über alle Fahrzeugteile zählen'''. Beim NG272 bedeutet dies beispielsweise, dass die dritte Tür auch mit PAX_Entry2_Open angesteuert wird.&lt;br /&gt;
&lt;br /&gt;
==== Zahlvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''&amp;quot;on demand&amp;quot;''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Envir_Brightness&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umgebungshelligkeit in Fahrzeugnähe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = dunkel, 1 = hell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StreetCond&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Information über die Oberflächenbedingungen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Trocken, 0..1: zunehmende Feuchtigkeit, 1: komplett feucht, 1..2: teilweise Pfützen, 2: Fahrzeug komplett in Pfützen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spot_Select&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann gesteuert werden, welches fürs Fahrzeug vordefinierte Spotlight aktiv sein soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Spotlight, 0: Spotlight Nr. 0, 1: Spotlight Nr. 1 usw.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Index des gewählten Farbschemas/Anstriches&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |M_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script ein [http://de.wikipedia.org/wiki/Drehmoment Drehmoment] auf die Räder übertragen. Hierbei die Summe anzugeben, welche auf alle als angetrieben ausgewiesene Achsen wirken &lt;br /&gt;
soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kNm = 1000 [http://de.wikipedia.org/wiki/Newtonmeter Nm]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |n_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mittlere Raddrehzahl des Fahrzeuges&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Throttle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Gaspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brake&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Bremspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Clutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Kupplungspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brakeforce&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script die Gesamtbremskraft des Fahrzeuges vorgeben, welche auf die Räder wirkt. Sollte nicht gleichzeitig mit ''Axle_Brakeforce...'' verwendet werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche sich über die Raddrehung ergibt, entspricht der Tachoanzeige&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity_Ground&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche direkt relativ zum Grund gemessen wird, berücksichtigt kein Radschleudern oder -blockieren, entspricht der Anzeige auf einem GPS&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |tank_percent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tankinhalt, nur für die Anzeige auf der roten Informationsleiste. Die Betankung und Simulation eines leeren Tanks geschieht über einen Trigger bzw. muss im Script programmiert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (nur ganze km)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (zusätzliche Meter, läuft stets nur von 0m bis 999m; hinzu kommen die Kilometer von ''kmcounter_km'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |relrange&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zurückgelegte, relative Strecke. Wurde nur testweise für pfadfixierte Fahrzeuge eingeführt. Nicht benutzen!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |---&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Driver_Seat_VertTransl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederung des federnden Fahrersitzes&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_Rotation_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehwinkel des jeweiligen Rades, z.B. für die Animation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_RotationSpeed_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehzahl des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Suspension_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederungsweg des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Steering_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lenkwinkel des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Springfactor_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, mit dem radweise die Federstärke angepasst werden kann, z.B. um Luftfederungen zu simulieren.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine, 1 = normale, 2 = doppelte Federkraft&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Brakeforce_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ermöglicht Setzen der Bremskraft pro Rad. Sollte nicht gleichzeitig mit ''Brakeforce'' verwendet werden!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_SurfaceID_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Oberflächenbeschaffenheit unter dem Rad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[[Oberflächen-Codes]]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug_0 ... _5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug-Variablen. Können im Debug-Modus in der Informationsleiste angezeigt werden, um auf diese Weise die Scripts zu testen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |bliebig&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |A_Trans_X ... _Z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Beschleunigungen im Fahrzeug, die durch die Fahrzeugbewegungen ausgelöst werden (beim Bremsen oder bei Kurvenfahrten usw.)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m/s²&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Blinker_L, ~_R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Linker oder rechter Blinker aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: ein&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Light&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Fahrlicht, Standlicht, Lichthupe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Licht aus, 0.5: Standlicht an, 1: Fahrlicht an, 2: Fernlicht/Lichthupe an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Interiorlight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenbeleuchtung. Hierüber erfahren die einsteigenden Fahrgäste auch, ob es im Bus zu dunkel ist (sodass sie meckern dürfen).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Brakelight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Script soll Bremslicht einschalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Engine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Aufforderung zum Ein- oder Ausschalten des Motors&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Motor ausschalten!, 0: egal/nicht-KI, 1: Motor einschalten!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_target_index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dient der Übergabe des Sollwertes des einzustellenden Zielschildes bei Aufruf des Menüs oder beim Umschildern der KI-Busse. Entspricht der Reihenfolge in der Hof-Datei; erster Eintrag = 0&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |target_index_int&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Über diese Variable setzt das Script, welches Zielschild am Bus zusehen ist und steuert hierüber insbesondere die Fahrgäste. Entspricht wie ''AI_target_index'' dem Index der Reihenfolge in der Hof-Datei.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Scheduled_AtStation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur KI-Fahrzeuge, bidirektionale Kommunikation: Bei Erreichen einer Station setzt OMSI den Wert auf 1, sodass das Script mitgeteilt bekommt, dass die Türen geöffnet werden sollen. Wenn sich der Bus abfahrbereit machen soll, setzt OMSI den Wert auf -1. Wenn der Bus abfahrbereit ist (Türen geschlossen usw.), dann setzt das Script den Wert auf 0, sodass die KI den Bus weiterfahren lassen kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Bus abfahrbereit machen, 0: Bus ist abfahrbereit, 1: Türen freigeben/öffnen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erfährt das Script, ob das Fahrzeug von der AI gesteuert wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Open ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Eingänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Ausgänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Req ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mindestens ein Fahrgast fordert den Einstieg durch diesen Eingang an.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: keine Anforderung, 1: Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Req&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mindestens ein Fahrgast fordert den Ausstieg durch diesen Ausgang an (&amp;quot;Haltewunsch&amp;quot;).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: keine Anforderung, 1: Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GivenTicket&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob der ggf. vorhandene Fahrscheinautomat ein Ticket ausgegeben hat.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Ticket, 0: Tickettyp 0, 1: Tickettyp 1, ...&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |humans_count&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Anzahl der Fahrgäste im Fahrzeug&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Period&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsperiode im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Amp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsamplitude im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0...1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_OutsideVol&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, wie stark der Außensound im Innenraum hörbar ist; verändert sich bspw. wenn eine Tür geöffnet wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: kaum hörbar, 1: wie draußen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Microphone&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Hardware-)Mikrofon aktiv sein?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Radio&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Internet-)Radio laufen?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_Temp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenraumtemperatur für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_absHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Absolute_Luftfeuchtigkeit Absolute Luftfeuchtigkeit] im Innenraum für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_relHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Relative_Luftfeuchtigkeit Relative Luftfeuchtigkeit] im Innenraum, wird durch OMSI automatisch über die absolute Feuchtigkeit und die Innentemperatur berechnet.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = 0%, 1 = 100%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = maximal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dirt_Norm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |allgemeiner Verdreckungszustand (Windschutzscheiben können sauberer sein und werden nur vom Script simuliert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = sauber, 1 = total verdreckt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DirtRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |aktuelle Verdreckungsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verdreckung / s, wobei eine Verdreckung = 1 bedeutet, dass die Verdreckung maximal ist.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |schedule_active&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist gerade ein Fahrplan aktiv? (Bspw. für Einblendung der Fahrplankarte)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_frontcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der vorderen Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_backcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der hinteren Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_me_reverse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Steht dieses Fahrzeug rückwärts zum gesamten Fahrzeugverband?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficPriority&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable wird vom Fahrzeug gesetzt, wenn dieses Fahrzeug (z.B. Feuerwehr oder Polizei) im Einsatz ist und Vorrang vor allen anderen Verkehrsteilnehmern genießt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, welcher beim Initialisieren von Verschleißteil-Lebensdauern über den Durchschnittswert multipliziert wird. Hierrüber wirkt sich die Einstellung in den Optionen über dem Wartungszustand auf die Lebensdauern aus. &lt;br /&gt;
| align=&amp;quot;left&amp;quot; |10: sehr gute Wartung, 1: normale Wartung, 0.1: schlechte Wartung, 0.01: sehr schlechte Wartung, 1500000: &amp;quot;unendlich&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |articulation_#_alpha / ~_beta&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Winkel, um den das #. Gelenk um die Hochachse (''alpha'') bzw. Querachse (''beta'') geknickt ist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*) Bidirektionale KI-Variablen: Handelt es sich um ein Userfahrzeug, kann das Script dem Hauptprogramm mitteilen, wie Licht, Blinker usw. gesetzt wurden. Handelt es sich aber um ein KI-Fahrzeug, teilt OMSI dem Script mit, wie die entsprechenden Zustände gesetzt werden müssen.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stringvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\stringvarlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ident&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält das Kraftfahrzeugkennzeichen dieses Fahrzeugs (z.B. &amp;quot;B-V 3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |number&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält die Fahrzeugnummer (z.B. &amp;quot;3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_route&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''(keine Verwendung)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_busstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_setbusstop'' verwendet: Enthält dann den Namen der im Fahrplansystem aktiven Haltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SetLineTo&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_settarget'' verwendet: Enthält die einzustellende Liniennummer (oder Symbol) (bei Verwendung vom Zielschild-Menü oder beim Umschildern von KI-Bussen)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |yard&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Name der Hofdatei des Fahrzeuges, bspw. damit das Scriptsystem den Dateinamen der Zielcode-Tabelle generieren kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |file_schedule&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält den Dateinamen der Fahrplan-Bitmap, die zu der von diesem Fahrzeug gefahrenen Strecke gehört.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Menschen ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_human.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |LastMovedDist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernung, die der Mensch seit dem letzten Durchlauf zurückgelegt hat. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_State&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zustand des Menschens. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: stehen, 1: gehen, 2: sitzen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |HeightOfSeat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhe des Sitzes. Diese Eigenschaft wird in der Sitzposition gebraucht, um die Höhe der Füße korrekt gesetzt. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tauschtextur-Index (&amp;quot;Farbschema&amp;quot;) des Menschens.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=873</id>
		<title>System- und vordefinierte lokalen Variablen</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=873"/>
		<updated>2014-02-11T15:59:56Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Zahlvariablen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Beschreibung der System- und der lokalen [[Scriptsystem#Variablenzugriff|Scriptvariablen]], welche für jedes Objekt vordefiniert werden und im Allgemeinen bestimmte Sonderfunktionen gegenüber frei definierten Scriptvariablen übernehmen.&lt;br /&gt;
&lt;br /&gt;
== Systemvariablen ==&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_system.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Timegap&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeitschritt seit dem letzten Durchlauf (Frame)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält eine absolute Zeitangabe, die vom Beginn des Ausführens von OMSI zählt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NoSound&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sounds deaktiviert?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Sounds aktiviert, 1 = Sounds deaktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pause&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Simulations-Pause aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Simulation läuft, 1 = Simulation angehalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Time&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Uhrzeit gerechnet von Mitternacht des aktuellen Tages&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Day&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Monatsbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Month&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Year&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahre&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DayOfYear&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Jahresbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Y-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keiner, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein Niederschlag, 1 = maximaler Niederschlag&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, x-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, y-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, z-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_energy&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Energie der Kollision (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_Temperature&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Außentemperatur&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_AbsHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Absolute Luftfeuchtigkeit&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AutoClutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Option &amp;quot;automatische Kupplung&amp;quot; aktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''nicht nutzen!''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SunAlt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhenwinkel der Sonne&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte lokale Variablen ==&lt;br /&gt;
&lt;br /&gt;
Seit OMSI 2 gibt es eine neue Form vordefinierter Variablen: Diese tauchen nicht in der ''varlist_*.txt''-Datei im ''program''-Verzeichnis auf und müssen daher so wie &amp;quot;normale&amp;quot; lokale Variablen deklariert werden, sie werden aber dennoch (sofern sie deklariert werden) mit internen Variablen verbunden. Diese Variablen werden &amp;quot;on-demand-vordefinierte Variablen&amp;quot; genannt. Bitte beachten Sie hierzu die neue Spalte!&lt;br /&gt;
&lt;br /&gt;
=== Szenerieobjekte ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NightLightA&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist die Nachtbeleuchtung aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |InUse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist das Objekt &amp;quot;aktiv&amp;quot;? Die Sporthallen sind bspw. nur an Schultagen vormittags &amp;quot;aktiv&amp;quot;, sodass die Soundeffekte an diese Variable gekoppelt werden können - auf diese Weise wird verhindert, dass die Soundeffekte auch in den Ferien oder nachts zu hören sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = inaktiv, 1 = aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightPhase&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber wird Ampelobjekten die anzuzeigende Ampelphase mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..2 = rot, 3..5 = rot-gelb, 6..8 = grün, 9..11 = gelb, sonst aus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightApproach&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script eine Ampelanforderung erkennen und bspw. eine Kennleuchte aktiviert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine Anforderung, 1 = Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(veraltet)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(-)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Signal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale ihr anzuzeigendes Signalbild&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NextSignal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale mit Vorsignalfunktion das anzuzeigende Signalbild des nächsten Signals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Switch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mit dieser Variable kann die Weiche, die im Objekt eingebaut ist, gestellt werden. Hierfür muss der Wert der Variable auf den mit [switchdir] angegebenen Wert des gewünschten Pfades gesetzt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fahrzeuge ===&lt;br /&gt;
&lt;br /&gt;
Wichtig: Üblicherweise nutzen Gelenkbusse das [[Scriptshare]]-System, bei welchem sich mehrere Fahrzeuge denselben Variablenspeicher teilen. Hierbei ist zu beachten, dass Räder und Türen '''über alle Fahrzeugteile zählen'''. Beim NG272 bedeutet dies beispielsweise, dass die dritte Tür auch mit PAX_Entry2_Open angesteuert wird.&lt;br /&gt;
&lt;br /&gt;
==== Zahlvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''&amp;quot;on demand&amp;quot;''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Envir_Brightness&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umgebungshelligkeit in Fahrzeugnähe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = dunkel, 1 = hell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StreetCond&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Information über die Oberflächenbedingungen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Trocken, 0..1: zunehmende Feuchtigkeit, 1: komplett feucht, 1..2: teilweise Pfützen, 2: Fahrzeug komplett in Pfützen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spot_Select&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann gesteuert werden, welches fürs Fahrzeug vordefinierte Spotlight aktiv sein soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Spotlight, 0: Spotlight Nr. 0, 1: Spotlight Nr. 1 usw.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Index des gewählten Farbschemas/Anstriches&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |M_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script ein [http://de.wikipedia.org/wiki/Drehmoment Drehmoment] auf die Räder übertragen. Hierbei die Summe anzugeben, welche auf alle als angetrieben ausgewiesene Achsen wirken &lt;br /&gt;
soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kNm = 1000 [http://de.wikipedia.org/wiki/Newtonmeter Nm]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |n_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mittlere Raddrehzahl des Fahrzeuges&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Throttle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Gaspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brake&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Bremspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Clutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Kupplungspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brakeforce&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script die Gesamtbremskraft des Fahrzeuges vorgeben, welche auf die Räder wirkt. Sollte nicht gleichzeitig mit ''Axle_Brakeforce...'' verwendet werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche sich über die Raddrehung ergibt, entspricht der Tachoanzeige&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity_Ground&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche direkt relativ zum Grund gemessen wird, berücksichtigt kein Radschleudern oder -blockieren, entspricht der Anzeige auf einem GPS&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |tank_percent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tankinhalt, nur für die Anzeige auf der roten Informationsleiste. Die Betankung und Simulation eines leeren Tanks geschieht über einen Trigger bzw. muss im Script programmiert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (nur ganze km)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (zusätzliche Meter, läuft stets nur von 0m bis 999m; hinzu kommen die Kilometer von ''kmcounter_km'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |relrange&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zurückgelegte, relative Strecke. Wurde nur testweise für pfadfixierte Fahrzeuge eingeführt. Nicht benutzen!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |---&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Driver_Seat_VertTransl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederung des federnden Fahrersitzes&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_Rotation_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehwinkel des jeweiligen Rades, z.B. für die Animation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_RotationSpeed_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehzahl des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Suspension_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederungsweg des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Steering_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lenkwinkel des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Springfactor_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, mit dem radweise die Federstärke angepasst werden kann, z.B. um Luftfederungen zu simulieren.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine, 1 = normale, 2 = doppelte Federkraft&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Brakeforce_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ermöglicht Setzen der Bremskraft pro Rad. Sollte nicht gleichzeitig mit ''Brakeforce'' verwendet werden!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_SurfaceID_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Oberflächenbeschaffenheit unter dem Rad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[[Oberflächen-Codes]]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug_0 ... _5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug-Variablen. Können im Debug-Modus in der Informationsleiste angezeigt werden, um auf diese Weise die Scripts zu testen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |bliebig&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |A_Trans_X ... _Z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Beschleunigungen im Fahrzeug, die durch die Fahrzeugbewegungen ausgelöst werden (beim Bremsen oder bei Kurvenfahrten usw.)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m/s²&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Blinker_L, ~_R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Linker oder rechter Blinker aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: ein&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Light&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Fahrlicht, Standlicht, Lichthupe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Licht aus, 0.5: Standlicht an, 1: Fahrlicht an, 2: Fernlicht/Lichthupe an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Interiorlight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenbeleuchtung. Hierüber erfahren die einsteigenden Fahrgäste auch, ob es im Bus zu dunkel ist (sodass sie meckern dürfen).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Brakelight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Script soll Bremslicht einschalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Engine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Aufforderung zum Ein- oder Ausschalten des Motors&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Motor ausschalten!, 0: egal/nicht-KI, 1: Motor einschalten!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_target_index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dient der Übergabe des Sollwertes des einzustellenden Zielschildes bei Aufruf des Menüs oder beim Umschildern der KI-Busse. Entspricht der Reihenfolge in der Hof-Datei; erster Eintrag = 0&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |target_index_int&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Über diese Variable setzt das Script, welches Zielschild am Bus zusehen ist und steuert hierüber insbesondere die Fahrgäste. Entspricht wie ''AI_target_index'' dem Index der Reihenfolge in der Hof-Datei.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Scheduled_AtStation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur KI-Fahrzeuge, bidirektionale Kommunikation: Bei Erreichen einer Station setzt OMSI den Wert auf 1, sodass das Script mitgeteilt bekommt, dass die Türen geöffnet werden sollen. Wenn sich der Bus abfahrbereit machen soll, setzt OMSI den Wert auf -1. Wenn der Bus abfahrbereit ist (Türen geschlossen usw.), dann setzt das Script den Wert auf 0, sodass die KI den Bus weiterfahren lassen kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Bus abfahrbereit machen, 0: Bus ist abfahrbereit, 1: Türen freigeben/öffnen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erfährt das Script, ob das Fahrzeug von der AI gesteuert wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Open ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Eingänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Ausgänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Req ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mindestens ein Fahrgast fordert den Einstieg durch diesen Eingang an.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: keine Anforderung, 1: Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Req&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mindestens ein Fahrgast fordert den Ausstieg durch diesen Ausgang an (&amp;quot;Haltewunsch&amp;quot;).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: keine Anforderung, 1: Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GivenTicket&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob der ggf. vorhandene Fahrscheinautomat ein Ticket ausgegeben hat.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Ticket, 0: Tickettyp 0, 1: Tickettyp 1, ...&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |humans_count&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Anzahl der Fahrgäste im Fahrzeug&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Period&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsperiode im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Amp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsamplitude im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0...1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_OutsideVol&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, wie stark der Außensound im Innenraum hörbar ist; verändert sich bspw. wenn eine Tür geöffnet wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: kaum hörbar, 1: wie draußen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Microphone&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Hardware-)Mikrofon aktiv sein?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Radio&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Internet-)Radio laufen?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_Temp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenraumtemperatur für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_absHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Absolute_Luftfeuchtigkeit Absolute Luftfeuchtigkeit] im Innenraum für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_relHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Relative_Luftfeuchtigkeit Relative Luftfeuchtigkeit] im Innenraum, wird durch OMSI automatisch über die absolute Feuchtigkeit und die Innentemperatur berechnet.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = 0%, 1 = 100%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = maximal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dirt_Norm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |allgemeiner Verdreckungszustand (Windschutzscheiben können sauberer sein und werden nur vom Script simuliert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = sauber, 1 = total verdreckt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DirtRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |aktuelle Verdreckungsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verdreckung / s, wobei eine Verdreckung = 1 bedeutet, dass die Verdreckung maximal ist.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |schedule_active&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist gerade ein Fahrplan aktiv? (Bspw. für Einblendung der Fahrplankarte)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_frontcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der vorderen Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_backcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der hinteren Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_me_reverse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Steht dieses Fahrzeug rückwärts zum gesamten Fahrzeugverband?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficPriority&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable wird vom Fahrzeug gesetzt, wenn dieses Fahrzeug (z.B. Feuerwehr oder Polizei) im Einsatz ist und Vorrang vor allen anderen Verkehrsteilnehmern genießt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, welcher beim Initialisieren von Verschleißteil-Lebensdauern über den Durchschnittswert multipliziert wird. Hierrüber wirkt sich die Einstellung in den Optionen über dem Wartungszustand auf die Lebensdauern aus. &lt;br /&gt;
| align=&amp;quot;left&amp;quot; |10: sehr gute Wartung, 1: normale Wartung, 0.1: schlechte Wartung, 0.01: sehr schlechte Wartung, 1500000: &amp;quot;unendlich&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |articulation_#_alpha / ~_beta&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Winkel, um den das #. Gelenk um die Hochachse (''alpha'') bzw. Querachse (''beta'') geknickt ist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*) Bidirektionale KI-Variablen: Handelt es sich um ein Userfahrzeug, kann das Script dem Hauptprogramm mitteilen, wie Licht, Blinker usw. gesetzt wurden. Handelt es sich aber um ein KI-Fahrzeug, teilt OMSI dem Script mit, wie die entsprechenden Zustände gesetzt werden müssen.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stringvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\stringvarlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ident&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält das Kraftfahrzeugkennzeichen dieses Fahrzeugs (z.B. &amp;quot;B-V 3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |number&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält die Fahrzeugnummer (z.B. &amp;quot;3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_route&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''(keine Verwendung)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_busstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_setbusstop'' verwendet: Enthält dann den Namen der im Fahrplansystem aktiven Haltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SetLineTo&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_settarget'' verwendet: Enthält die einzustellende Liniennummer (oder Symbol) (bei Verwendung vom Zielschild-Menü oder beim Umschildern von KI-Bussen)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |yard&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Name der Hofdatei des Fahrzeuges, bspw. damit das Scriptsystem den Dateinamen der Zielcode-Tabelle generieren kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |file_schedule&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält den Dateinamen der Fahrplan-Bitmap, die zu der von diesem Fahrzeug gefahrenen Strecke gehört.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Menschen ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_human.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |LastMovedDist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernung, die der Mensch seit dem letzten Durchlauf zurückgelegt hat. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_State&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zustand des Menschens. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: stehen, 1: gehen, 2: sitzen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |HeightOfSeat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhe des Sitzes. Diese Eigenschaft wird in der Sitzposition gebraucht, um die Höhe der Füße korrekt gesetzt. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tauschtextur-Index (&amp;quot;Farbschema&amp;quot;) des Menschens.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=872</id>
		<title>System- und vordefinierte lokalen Variablen</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=872"/>
		<updated>2014-02-11T15:40:25Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Zahlvariablen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Beschreibung der System- und der lokalen [[Scriptsystem#Variablenzugriff|Scriptvariablen]], welche für jedes Objekt vordefiniert werden und im Allgemeinen bestimmte Sonderfunktionen gegenüber frei definierten Scriptvariablen übernehmen.&lt;br /&gt;
&lt;br /&gt;
== Systemvariablen ==&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_system.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Timegap&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeitschritt seit dem letzten Durchlauf (Frame)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält eine absolute Zeitangabe, die vom Beginn des Ausführens von OMSI zählt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NoSound&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sounds deaktiviert?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Sounds aktiviert, 1 = Sounds deaktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pause&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Simulations-Pause aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Simulation läuft, 1 = Simulation angehalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Time&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Uhrzeit gerechnet von Mitternacht des aktuellen Tages&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Day&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Monatsbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Month&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Year&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahre&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DayOfYear&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Jahresbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Y-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keiner, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein Niederschlag, 1 = maximaler Niederschlag&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, x-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, y-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, z-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_energy&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Energie der Kollision (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_Temperature&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Außentemperatur&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_AbsHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Absolute Luftfeuchtigkeit&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AutoClutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Option &amp;quot;automatische Kupplung&amp;quot; aktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''nicht nutzen!''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SunAlt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhenwinkel der Sonne&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte lokale Variablen ==&lt;br /&gt;
&lt;br /&gt;
Seit OMSI 2 gibt es eine neue Form vordefinierter Variablen: Diese tauchen nicht in der ''varlist_*.txt''-Datei im ''program''-Verzeichnis auf und müssen daher so wie &amp;quot;normale&amp;quot; lokale Variablen deklariert werden, sie werden aber dennoch (sofern sie deklariert werden) mit internen Variablen verbunden. Diese Variablen werden &amp;quot;on-demand-vordefinierte Variablen&amp;quot; genannt. Bitte beachten Sie hierzu die neue Spalte!&lt;br /&gt;
&lt;br /&gt;
=== Szenerieobjekte ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NightLightA&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist die Nachtbeleuchtung aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |InUse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist das Objekt &amp;quot;aktiv&amp;quot;? Die Sporthallen sind bspw. nur an Schultagen vormittags &amp;quot;aktiv&amp;quot;, sodass die Soundeffekte an diese Variable gekoppelt werden können - auf diese Weise wird verhindert, dass die Soundeffekte auch in den Ferien oder nachts zu hören sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = inaktiv, 1 = aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightPhase&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber wird Ampelobjekten die anzuzeigende Ampelphase mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..2 = rot, 3..5 = rot-gelb, 6..8 = grün, 9..11 = gelb, sonst aus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightApproach&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script eine Ampelanforderung erkennen und bspw. eine Kennleuchte aktiviert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine Anforderung, 1 = Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(veraltet)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(-)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Signal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale ihr anzuzeigendes Signalbild&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NextSignal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale mit Vorsignalfunktion das anzuzeigende Signalbild des nächsten Signals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Switch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mit dieser Variable kann die Weiche, die im Objekt eingebaut ist, gestellt werden. Hierfür muss der Wert der Variable auf den mit [switchdir] angegebenen Wert des gewünschten Pfades gesetzt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fahrzeuge ===&lt;br /&gt;
&lt;br /&gt;
Wichtig: Üblicherweise nutzen Gelenkbusse das [[Scriptshare]]-System, bei welchem sich mehrere Fahrzeuge denselben Variablenspeicher teilen. Hierbei ist zu beachten, dass Räder und Türen '''über alle Fahrzeugteile zählen'''. Beim NG272 bedeutet dies beispielsweise, dass die dritte Tür auch mit PAX_Entry2_Open angesteuert wird.&lt;br /&gt;
&lt;br /&gt;
==== Zahlvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''&amp;quot;on demand&amp;quot;''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Envir_Brightness&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umgebungshelligkeit in Fahrzeugnähe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = dunkel, 1 = hell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StreetCond&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Information über die Oberflächenbedingungen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Trocken, 0..1: zunehmende Feuchtigkeit, 1: komplett feucht, 1..2: teilweise Pfützen, 2: Fahrzeug komplett in Pfützen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spot_Select&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann gesteuert werden, welches fürs Fahrzeug vordefinierte Spotlight aktiv sein soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Spotlight, 0: Spotlight Nr. 0, 1: Spotlight Nr. 1 usw.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Index des gewählten Farbschemas/Anstriches&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |M_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script ein [http://de.wikipedia.org/wiki/Drehmoment Drehmoment] auf die Räder übertragen. Hierbei die Summe anzugeben, welche auf alle als angetrieben ausgewiesene Achsen wirken &lt;br /&gt;
soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kNm = 1000 [http://de.wikipedia.org/wiki/Newtonmeter Nm]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |n_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mittlere Raddrehzahl des Fahrzeuges&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Throttle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Gaspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brake&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Bremspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Clutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Kupplungspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brakeforce&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script die Gesamtbremskraft des Fahrzeuges vorgeben, welche auf die Räder wirkt. Sollte nicht gleichzeitig mit ''Axle_Brakeforce...'' verwendet werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche sich über die Raddrehung ergibt, entspricht der Tachoanzeige&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity_Ground&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche direkt relativ zum Grund gemessen wird, berücksichtigt kein Radschleudern oder -blockieren, entspricht der Anzeige auf einem GPS&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |tank_percent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tankinhalt, nur für die Anzeige auf der roten Informationsleiste. Die Betankung und Simulation eines leeren Tanks geschieht über einen Trigger bzw. muss im Script programmiert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (nur ganze km)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (zusätzliche Meter, läuft stets nur von 0m bis 999m; hinzu kommen die Kilometer von ''kmcounter_km'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |relrange&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zurückgelegte, relative Strecke. Wurde nur testweise für pfadfixierte Fahrzeuge eingeführt. Nicht benutzen!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |---&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Driver_Seat_VertTransl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederung des federnden Fahrersitzes&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_Rotation_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehwinkel des jeweiligen Rades, z.B. für die Animation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_RotationSpeed_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehzahl des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Suspension_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederungsweg des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Steering_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lenkwinkel des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Springfactor_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, mit dem radweise die Federstärke angepasst werden kann, z.B. um Luftfederungen zu simulieren.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine, 1 = normale, 2 = doppelte Federkraft&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Brakeforce_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ermöglicht Setzen der Bremskraft pro Rad. Sollte nicht gleichzeitig mit ''Brakeforce'' verwendet werden!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug_0 ... _5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug-Variablen. Können im Debug-Modus in der Informationsleiste angezeigt werden, um auf diese Weise die Scripts zu testen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |bliebig&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |A_Trans_X ... _Z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Beschleunigungen im Fahrzeug, die durch die Fahrzeugbewegungen ausgelöst werden (beim Bremsen oder bei Kurvenfahrten usw.)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m/s²&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Blinker_L, ~_R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Linker oder rechter Blinker aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: ein&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Light&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Fahrlicht, Standlicht, Lichthupe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Licht aus, 0.5: Standlicht an, 1: Fahrlicht an, 2: Fernlicht/Lichthupe an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Interiorlight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenbeleuchtung. Hierüber erfahren die einsteigenden Fahrgäste auch, ob es im Bus zu dunkel ist (sodass sie meckern dürfen).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Brakelight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Script soll Bremslicht einschalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Engine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Aufforderung zum Ein- oder Ausschalten des Motors&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Motor ausschalten!, 0: egal/nicht-KI, 1: Motor einschalten!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_target_index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dient der Übergabe des Sollwertes des einzustellenden Zielschildes bei Aufruf des Menüs oder beim Umschildern der KI-Busse. Entspricht der Reihenfolge in der Hof-Datei; erster Eintrag = 0&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |target_index_int&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Über diese Variable setzt das Script, welches Zielschild am Bus zusehen ist und steuert hierüber insbesondere die Fahrgäste. Entspricht wie ''AI_target_index'' dem Index der Reihenfolge in der Hof-Datei.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Scheduled_AtStation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur KI-Fahrzeuge, bidirektionale Kommunikation: Bei Erreichen einer Station setzt OMSI den Wert auf 1, sodass das Script mitgeteilt bekommt, dass die Türen geöffnet werden sollen. Wenn sich der Bus abfahrbereit machen soll, setzt OMSI den Wert auf -1. Wenn der Bus abfahrbereit ist (Türen geschlossen usw.), dann setzt das Script den Wert auf 0, sodass die KI den Bus weiterfahren lassen kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Bus abfahrbereit machen, 0: Bus ist abfahrbereit, 1: Türen freigeben/öffnen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erfährt das Script, ob das Fahrzeug von der AI gesteuert wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Open ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Eingänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Ausgänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GivenTicket&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob der ggf. vorhandene Fahrscheinautomat ein Ticket ausgegeben hat.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Ticket, 0: Tickettyp 0, 1: Tickettyp 1, ...&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |humans_count&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Anzahl der Fahrgäste im Fahrzeug&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Period&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsperiode im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Amp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsamplitude im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0...1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_OutsideVol&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, wie stark der Außensound im Innenraum hörbar ist; verändert sich bspw. wenn eine Tür geöffnet wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: kaum hörbar, 1: wie draußen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Microphone&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Hardware-)Mikrofon aktiv sein?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Radio&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Internet-)Radio laufen?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_Temp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenraumtemperatur für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_absHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Absolute_Luftfeuchtigkeit Absolute Luftfeuchtigkeit] im Innenraum für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_relHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Relative_Luftfeuchtigkeit Relative Luftfeuchtigkeit] im Innenraum, wird durch OMSI automatisch über die absolute Feuchtigkeit und die Innentemperatur berechnet.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = 0%, 1 = 100%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = maximal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dirt_Norm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |allgemeiner Verdreckungszustand (Windschutzscheiben können sauberer sein und werden nur vom Script simuliert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = sauber, 1 = total verdreckt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DirtRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |aktuelle Verdreckungsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verdreckung / s, wobei eine Verdreckung = 1 bedeutet, dass die Verdreckung maximal ist.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |schedule_active&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist gerade ein Fahrplan aktiv? (Bspw. für Einblendung der Fahrplankarte)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_frontcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der vorderen Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_backcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der hinteren Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_me_reverse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Steht dieses Fahrzeug rückwärts zum gesamten Fahrzeugverband?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*) Bidirektionale KI-Variablen: Handelt es sich um ein Userfahrzeug, kann das Script dem Hauptprogramm mitteilen, wie Licht, Blinker usw. gesetzt wurden. Handelt es sich aber um ein KI-Fahrzeug, teilt OMSI dem Script mit, wie die entsprechenden Zustände gesetzt werden müssen.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stringvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\stringvarlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ident&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält das Kraftfahrzeugkennzeichen dieses Fahrzeugs (z.B. &amp;quot;B-V 3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |number&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält die Fahrzeugnummer (z.B. &amp;quot;3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_route&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''(keine Verwendung)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_busstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_setbusstop'' verwendet: Enthält dann den Namen der im Fahrplansystem aktiven Haltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SetLineTo&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_settarget'' verwendet: Enthält die einzustellende Liniennummer (oder Symbol) (bei Verwendung vom Zielschild-Menü oder beim Umschildern von KI-Bussen)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |yard&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Name der Hofdatei des Fahrzeuges, bspw. damit das Scriptsystem den Dateinamen der Zielcode-Tabelle generieren kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |file_schedule&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält den Dateinamen der Fahrplan-Bitmap, die zu der von diesem Fahrzeug gefahrenen Strecke gehört.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Menschen ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_human.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |LastMovedDist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernung, die der Mensch seit dem letzten Durchlauf zurückgelegt hat. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_State&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zustand des Menschens. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: stehen, 1: gehen, 2: sitzen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |HeightOfSeat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhe des Sitzes. Diese Eigenschaft wird in der Sitzposition gebraucht, um die Höhe der Füße korrekt gesetzt. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tauschtextur-Index (&amp;quot;Farbschema&amp;quot;) des Menschens.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=871</id>
		<title>System- und vordefinierte lokalen Variablen</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=871"/>
		<updated>2014-02-11T15:37:52Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Fahrzeuge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Beschreibung der System- und der lokalen [[Scriptsystem#Variablenzugriff|Scriptvariablen]], welche für jedes Objekt vordefiniert werden und im Allgemeinen bestimmte Sonderfunktionen gegenüber frei definierten Scriptvariablen übernehmen.&lt;br /&gt;
&lt;br /&gt;
== Systemvariablen ==&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_system.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Timegap&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeitschritt seit dem letzten Durchlauf (Frame)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält eine absolute Zeitangabe, die vom Beginn des Ausführens von OMSI zählt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NoSound&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sounds deaktiviert?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Sounds aktiviert, 1 = Sounds deaktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pause&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Simulations-Pause aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Simulation läuft, 1 = Simulation angehalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Time&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Uhrzeit gerechnet von Mitternacht des aktuellen Tages&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Day&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Monatsbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Month&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Year&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahre&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DayOfYear&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Jahresbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Y-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keiner, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein Niederschlag, 1 = maximaler Niederschlag&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, x-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, y-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, z-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_energy&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Energie der Kollision (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_Temperature&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Außentemperatur&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_AbsHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Absolute Luftfeuchtigkeit&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AutoClutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Option &amp;quot;automatische Kupplung&amp;quot; aktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''nicht nutzen!''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SunAlt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhenwinkel der Sonne&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte lokale Variablen ==&lt;br /&gt;
&lt;br /&gt;
Seit OMSI 2 gibt es eine neue Form vordefinierter Variablen: Diese tauchen nicht in der ''varlist_*.txt''-Datei im ''program''-Verzeichnis auf und müssen daher so wie &amp;quot;normale&amp;quot; lokale Variablen deklariert werden, sie werden aber dennoch (sofern sie deklariert werden) mit internen Variablen verbunden. Diese Variablen werden &amp;quot;on-demand-vordefinierte Variablen&amp;quot; genannt. Bitte beachten Sie hierzu die neue Spalte!&lt;br /&gt;
&lt;br /&gt;
=== Szenerieobjekte ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NightLightA&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist die Nachtbeleuchtung aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |InUse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist das Objekt &amp;quot;aktiv&amp;quot;? Die Sporthallen sind bspw. nur an Schultagen vormittags &amp;quot;aktiv&amp;quot;, sodass die Soundeffekte an diese Variable gekoppelt werden können - auf diese Weise wird verhindert, dass die Soundeffekte auch in den Ferien oder nachts zu hören sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = inaktiv, 1 = aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightPhase&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber wird Ampelobjekten die anzuzeigende Ampelphase mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..2 = rot, 3..5 = rot-gelb, 6..8 = grün, 9..11 = gelb, sonst aus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightApproach&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script eine Ampelanforderung erkennen und bspw. eine Kennleuchte aktiviert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine Anforderung, 1 = Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(veraltet)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(-)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Signal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale ihr anzuzeigendes Signalbild&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NextSignal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale mit Vorsignalfunktion das anzuzeigende Signalbild des nächsten Signals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Switch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mit dieser Variable kann die Weiche, die im Objekt eingebaut ist, gestellt werden. Hierfür muss der Wert der Variable auf den mit [switchdir] angegebenen Wert des gewünschten Pfades gesetzt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fahrzeuge ===&lt;br /&gt;
&lt;br /&gt;
Wichtig: Üblicherweise nutzen Gelenkbusse das [[Scriptshare]]-System, bei welchem sich mehrere Fahrzeuge denselben Variablenspeicher teilen. Hierbei ist zu beachten, dass Räder und Türen '''über alle Fahrzeugteile zählen'''. Beim NG272 bedeutet dies beispielsweise, dass die dritte Tür auch mit PAX_Entry2_Open angesteuert wird.&lt;br /&gt;
&lt;br /&gt;
==== Zahlvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Envir_Brightness&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umgebungshelligkeit in Fahrzeugnähe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = dunkel, 1 = hell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StreetCond&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Information über die Oberflächenbedingungen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Trocken, 0..1: zunehmende Feuchtigkeit, 1: komplett feucht, 1..2: teilweise Pfützen, 2: Fahrzeug komplett in Pfützen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spot_Select&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann gesteuert werden, welches fürs Fahrzeug vordefinierte Spotlight aktiv sein soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Spotlight, 0: Spotlight Nr. 0, 1: Spotlight Nr. 1 usw.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Index des gewählten Farbschemas/Anstriches&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |M_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script ein [http://de.wikipedia.org/wiki/Drehmoment Drehmoment] auf die Räder übertragen. Hierbei die Summe anzugeben, welche auf alle als angetrieben ausgewiesene Achsen wirken &lt;br /&gt;
soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kNm = 1000 [http://de.wikipedia.org/wiki/Newtonmeter Nm]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |n_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mittlere Raddrehzahl des Fahrzeuges&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Throttle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Gaspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brake&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Bremspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Clutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Kupplungspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brakeforce&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script die Gesamtbremskraft des Fahrzeuges vorgeben, welche auf die Räder wirkt. Sollte nicht gleichzeitig mit ''Axle_Brakeforce...'' verwendet werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche sich über die Raddrehung ergibt, entspricht der Tachoanzeige&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity_Ground&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche direkt relativ zum Grund gemessen wird, berücksichtigt kein Radschleudern oder -blockieren, entspricht der Anzeige auf einem GPS&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |tank_percent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tankinhalt, nur für die Anzeige auf der roten Informationsleiste. Die Betankung und Simulation eines leeren Tanks geschieht über einen Trigger bzw. muss im Script programmiert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (nur ganze km)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (zusätzliche Meter, läuft stets nur von 0m bis 999m; hinzu kommen die Kilometer von ''kmcounter_km'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |relrange&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zurückgelegte, relative Strecke. Wurde nur testweise für pfadfixierte Fahrzeuge eingeführt. Nicht benutzen!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |---&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Driver_Seat_VertTransl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederung des federnden Fahrersitzes&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_Rotation_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehwinkel des jeweiligen Rades, z.B. für die Animation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_RotationSpeed_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehzahl des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Suspension_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederungsweg des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Steering_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lenkwinkel des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Springfactor_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, mit dem radweise die Federstärke angepasst werden kann, z.B. um Luftfederungen zu simulieren.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine, 1 = normale, 2 = doppelte Federkraft&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Brakeforce_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ermöglicht Setzen der Bremskraft pro Rad. Sollte nicht gleichzeitig mit ''Brakeforce'' verwendet werden!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug_0 ... _5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug-Variablen. Können im Debug-Modus in der Informationsleiste angezeigt werden, um auf diese Weise die Scripts zu testen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |bliebig&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |A_Trans_X ... _Z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Beschleunigungen im Fahrzeug, die durch die Fahrzeugbewegungen ausgelöst werden (beim Bremsen oder bei Kurvenfahrten usw.)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m/s²&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Blinker_L, ~_R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Linker oder rechter Blinker aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: ein&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Light&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Fahrlicht, Standlicht, Lichthupe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Licht aus, 0.5: Standlicht an, 1: Fahrlicht an, 2: Fernlicht/Lichthupe an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Interiorlight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenbeleuchtung. Hierüber erfahren die einsteigenden Fahrgäste auch, ob es im Bus zu dunkel ist (sodass sie meckern dürfen).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Brakelight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Script soll Bremslicht einschalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Engine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Aufforderung zum Ein- oder Ausschalten des Motors&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Motor ausschalten!, 0: egal/nicht-KI, 1: Motor einschalten!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_target_index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dient der Übergabe des Sollwertes des einzustellenden Zielschildes bei Aufruf des Menüs oder beim Umschildern der KI-Busse. Entspricht der Reihenfolge in der Hof-Datei; erster Eintrag = 0&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |target_index_int&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Über diese Variable setzt das Script, welches Zielschild am Bus zusehen ist und steuert hierüber insbesondere die Fahrgäste. Entspricht wie ''AI_target_index'' dem Index der Reihenfolge in der Hof-Datei.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Scheduled_AtStation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur KI-Fahrzeuge, bidirektionale Kommunikation: Bei Erreichen einer Station setzt OMSI den Wert auf 1, sodass das Script mitgeteilt bekommt, dass die Türen geöffnet werden sollen. Wenn sich der Bus abfahrbereit machen soll, setzt OMSI den Wert auf -1. Wenn der Bus abfahrbereit ist (Türen geschlossen usw.), dann setzt das Script den Wert auf 0, sodass die KI den Bus weiterfahren lassen kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Bus abfahrbereit machen, 0: Bus ist abfahrbereit, 1: Türen freigeben/öffnen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erfährt das Script, ob das Fahrzeug von der AI gesteuert wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Open ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Eingänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Ausgänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GivenTicket&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob der ggf. vorhandene Fahrscheinautomat ein Ticket ausgegeben hat.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Ticket, 0: Tickettyp 0, 1: Tickettyp 1, ...&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |humans_count&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Anzahl der Fahrgäste im Fahrzeug&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Period&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsperiode im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Amp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsamplitude im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0...1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_OutsideVol&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, wie stark der Außensound im Innenraum hörbar ist; verändert sich bspw. wenn eine Tür geöffnet wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: kaum hörbar, 1: wie draußen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Microphone&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Hardware-)Mikrofon aktiv sein?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Radio&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Internet-)Radio laufen?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_Temp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenraumtemperatur für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_absHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Absolute_Luftfeuchtigkeit Absolute Luftfeuchtigkeit] im Innenraum für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_relHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Relative_Luftfeuchtigkeit Relative Luftfeuchtigkeit] im Innenraum, wird durch OMSI automatisch über die absolute Feuchtigkeit und die Innentemperatur berechnet.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = 0%, 1 = 100%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = maximal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dirt_Norm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |allgemeiner Verdreckungszustand (Windschutzscheiben können sauberer sein und werden nur vom Script simuliert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = sauber, 1 = total verdreckt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DirtRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |aktuelle Verdreckungsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verdreckung / s, wobei eine Verdreckung = 1 bedeutet, dass die Verdreckung maximal ist.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |schedule_active&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist gerade ein Fahrplan aktiv? (Bspw. für Einblendung der Fahrplankarte)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_frontcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der vorderen Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_backcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der hinteren Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_me_reverse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Steht dieses Fahrzeug rückwärts zum gesamten Fahrzeugverband?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*) Bidirektionale KI-Variablen: Handelt es sich um ein Userfahrzeug, kann das Script dem Hauptprogramm mitteilen, wie Licht, Blinker usw. gesetzt wurden. Handelt es sich aber um ein KI-Fahrzeug, teilt OMSI dem Script mit, wie die entsprechenden Zustände gesetzt werden müssen.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stringvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\stringvarlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ident&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält das Kraftfahrzeugkennzeichen dieses Fahrzeugs (z.B. &amp;quot;B-V 3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |number&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält die Fahrzeugnummer (z.B. &amp;quot;3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_route&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''(keine Verwendung)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_busstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_setbusstop'' verwendet: Enthält dann den Namen der im Fahrplansystem aktiven Haltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SetLineTo&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_settarget'' verwendet: Enthält die einzustellende Liniennummer (oder Symbol) (bei Verwendung vom Zielschild-Menü oder beim Umschildern von KI-Bussen)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |yard&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Name der Hofdatei des Fahrzeuges, bspw. damit das Scriptsystem den Dateinamen der Zielcode-Tabelle generieren kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |file_schedule&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält den Dateinamen der Fahrplan-Bitmap, die zu der von diesem Fahrzeug gefahrenen Strecke gehört.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Menschen ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_human.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |LastMovedDist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernung, die der Mensch seit dem letzten Durchlauf zurückgelegt hat. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_State&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zustand des Menschens. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: stehen, 1: gehen, 2: sitzen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |HeightOfSeat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhe des Sitzes. Diese Eigenschaft wird in der Sitzposition gebraucht, um die Höhe der Füße korrekt gesetzt. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tauschtextur-Index (&amp;quot;Farbschema&amp;quot;) des Menschens.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=870</id>
		<title>System- und vordefinierte lokalen Variablen</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=870"/>
		<updated>2014-02-11T15:34:12Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Szenerieobjekte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Beschreibung der System- und der lokalen [[Scriptsystem#Variablenzugriff|Scriptvariablen]], welche für jedes Objekt vordefiniert werden und im Allgemeinen bestimmte Sonderfunktionen gegenüber frei definierten Scriptvariablen übernehmen.&lt;br /&gt;
&lt;br /&gt;
== Systemvariablen ==&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_system.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Timegap&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeitschritt seit dem letzten Durchlauf (Frame)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält eine absolute Zeitangabe, die vom Beginn des Ausführens von OMSI zählt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NoSound&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sounds deaktiviert?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Sounds aktiviert, 1 = Sounds deaktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pause&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Simulations-Pause aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Simulation läuft, 1 = Simulation angehalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Time&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Uhrzeit gerechnet von Mitternacht des aktuellen Tages&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Day&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Monatsbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Month&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Year&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahre&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DayOfYear&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Jahresbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Y-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keiner, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein Niederschlag, 1 = maximaler Niederschlag&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, x-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, y-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, z-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_energy&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Energie der Kollision (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_Temperature&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Außentemperatur&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_AbsHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Absolute Luftfeuchtigkeit&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AutoClutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Option &amp;quot;automatische Kupplung&amp;quot; aktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''nicht nutzen!''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SunAlt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhenwinkel der Sonne&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte lokale Variablen ==&lt;br /&gt;
&lt;br /&gt;
Seit OMSI 2 gibt es eine neue Form vordefinierter Variablen: Diese tauchen nicht in der ''varlist_*.txt''-Datei im ''program''-Verzeichnis auf und müssen daher so wie &amp;quot;normale&amp;quot; lokale Variablen deklariert werden, sie werden aber dennoch (sofern sie deklariert werden) mit internen Variablen verbunden. Diese Variablen werden &amp;quot;on-demand-vordefinierte Variablen&amp;quot; genannt. Bitte beachten Sie hierzu die neue Spalte!&lt;br /&gt;
&lt;br /&gt;
=== Szenerieobjekte ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NightLightA&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist die Nachtbeleuchtung aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |InUse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist das Objekt &amp;quot;aktiv&amp;quot;? Die Sporthallen sind bspw. nur an Schultagen vormittags &amp;quot;aktiv&amp;quot;, sodass die Soundeffekte an diese Variable gekoppelt werden können - auf diese Weise wird verhindert, dass die Soundeffekte auch in den Ferien oder nachts zu hören sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = inaktiv, 1 = aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightPhase&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber wird Ampelobjekten die anzuzeigende Ampelphase mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..2 = rot, 3..5 = rot-gelb, 6..8 = grün, 9..11 = gelb, sonst aus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightApproach&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script eine Ampelanforderung erkennen und bspw. eine Kennleuchte aktiviert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine Anforderung, 1 = Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(veraltet)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(-)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Signal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale ihr anzuzeigendes Signalbild&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NextSignal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale mit Vorsignalfunktion das anzuzeigende Signalbild des nächsten Signals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Switch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mit dieser Variable kann die Weiche, die im Objekt eingebaut ist, gestellt werden. Hierfür muss der Wert der Variable auf den mit [switchdir] angegebenen Wert des gewünschten Pfades gesetzt werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fahrzeuge ===&lt;br /&gt;
&lt;br /&gt;
==== Zahlvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Envir_Brightness&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umgebungshelligkeit in Fahrzeugnähe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = dunkel, 1 = hell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StreetCond&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Information über die Oberflächenbedingungen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Trocken, 0..1: zunehmende Feuchtigkeit, 1: komplett feucht, 1..2: teilweise Pfützen, 2: Fahrzeug komplett in Pfützen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spot_Select&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann gesteuert werden, welches fürs Fahrzeug vordefinierte Spotlight aktiv sein soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Spotlight, 0: Spotlight Nr. 0, 1: Spotlight Nr. 1 usw.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Index des gewählten Farbschemas/Anstriches&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |M_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script ein [http://de.wikipedia.org/wiki/Drehmoment Drehmoment] auf die Räder übertragen. Hierbei die Summe anzugeben, welche auf alle als angetrieben ausgewiesene Achsen wirken &lt;br /&gt;
soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kNm = 1000 [http://de.wikipedia.org/wiki/Newtonmeter Nm]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |n_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mittlere Raddrehzahl des Fahrzeuges&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Throttle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Gaspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brake&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Bremspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Clutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Kupplungspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brakeforce&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script die Gesamtbremskraft des Fahrzeuges vorgeben, welche auf die Räder wirkt. Sollte nicht gleichzeitig mit ''Axle_Brakeforce...'' verwendet werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche sich über die Raddrehung ergibt, entspricht der Tachoanzeige&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity_Ground&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche direkt relativ zum Grund gemessen wird, berücksichtigt kein Radschleudern oder -blockieren, entspricht der Anzeige auf einem GPS&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |tank_percent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tankinhalt, nur für die Anzeige auf der roten Informationsleiste. Die Betankung und Simulation eines leeren Tanks geschieht über einen Trigger bzw. muss im Script programmiert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (nur ganze km)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (zusätzliche Meter, läuft stets nur von 0m bis 999m; hinzu kommen die Kilometer von ''kmcounter_km'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |relrange&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zurückgelegte, relative Strecke. Wurde nur testweise für pfadfixierte Fahrzeuge eingeführt. Nicht benutzen!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |---&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Driver_Seat_VertTransl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederung des federnden Fahrersitzes&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_Rotation_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehwinkel des jeweiligen Rades, z.B. für die Animation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_RotationSpeed_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehzahl des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Suspension_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederungsweg des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Steering_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lenkwinkel des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Springfactor_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, mit dem radweise die Federstärke angepasst werden kann, z.B. um Luftfederungen zu simulieren.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine, 1 = normale, 2 = doppelte Federkraft&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Brakeforce_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ermöglicht Setzen der Bremskraft pro Rad. Sollte nicht gleichzeitig mit ''Brakeforce'' verwendet werden!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug_0 ... _5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug-Variablen. Können im Debug-Modus in der Informationsleiste angezeigt werden, um auf diese Weise die Scripts zu testen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |bliebig&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |A_Trans_X ... _Z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Beschleunigungen im Fahrzeug, die durch die Fahrzeugbewegungen ausgelöst werden (beim Bremsen oder bei Kurvenfahrten usw.)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m/s²&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Blinker_L, ~_R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Linker oder rechter Blinker aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: ein&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Light&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Fahrlicht, Standlicht, Lichthupe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Licht aus, 0.5: Standlicht an, 1: Fahrlicht an, 2: Fernlicht/Lichthupe an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Interiorlight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenbeleuchtung. Hierüber erfahren die einsteigenden Fahrgäste auch, ob es im Bus zu dunkel ist (sodass sie meckern dürfen).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Brakelight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Script soll Bremslicht einschalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Engine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Aufforderung zum Ein- oder Ausschalten des Motors&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Motor ausschalten!, 0: egal/nicht-KI, 1: Motor einschalten!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_target_index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dient der Übergabe des Sollwertes des einzustellenden Zielschildes bei Aufruf des Menüs oder beim Umschildern der KI-Busse. Entspricht der Reihenfolge in der Hof-Datei; erster Eintrag = 0&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |target_index_int&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Über diese Variable setzt das Script, welches Zielschild am Bus zusehen ist und steuert hierüber insbesondere die Fahrgäste. Entspricht wie ''AI_target_index'' dem Index der Reihenfolge in der Hof-Datei.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Scheduled_AtStation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur KI-Fahrzeuge, bidirektionale Kommunikation: Bei Erreichen einer Station setzt OMSI den Wert auf 1, sodass das Script mitgeteilt bekommt, dass die Türen geöffnet werden sollen. Wenn sich der Bus abfahrbereit machen soll, setzt OMSI den Wert auf -1. Wenn der Bus abfahrbereit ist (Türen geschlossen usw.), dann setzt das Script den Wert auf 0, sodass die KI den Bus weiterfahren lassen kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Bus abfahrbereit machen, 0: Bus ist abfahrbereit, 1: Türen freigeben/öffnen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erfährt das Script, ob das Fahrzeug von der AI gesteuert wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Open ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Eingänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Ausgänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GivenTicket&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob der ggf. vorhandene Fahrscheinautomat ein Ticket ausgegeben hat.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Ticket, 0: Tickettyp 0, 1: Tickettyp 1, ...&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |humans_count&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Anzahl der Fahrgäste im Fahrzeug&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Period&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsperiode im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Amp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsamplitude im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0...1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_OutsideVol&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, wie stark der Außensound im Innenraum hörbar ist; verändert sich bspw. wenn eine Tür geöffnet wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: kaum hörbar, 1: wie draußen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Microphone&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Hardware-)Mikrofon aktiv sein?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Radio&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Internet-)Radio laufen?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_Temp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenraumtemperatur für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_absHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Absolute_Luftfeuchtigkeit Absolute Luftfeuchtigkeit] im Innenraum für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_relHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Relative_Luftfeuchtigkeit Relative Luftfeuchtigkeit] im Innenraum, wird durch OMSI automatisch über die absolute Feuchtigkeit und die Innentemperatur berechnet.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = 0%, 1 = 100%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = maximal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dirt_Norm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |allgemeiner Verdreckungszustand (Windschutzscheiben können sauberer sein und werden nur vom Script simuliert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = sauber, 1 = total verdreckt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DirtRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |aktuelle Verdreckungsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verdreckung / s, wobei eine Verdreckung = 1 bedeutet, dass die Verdreckung maximal ist.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |schedule_active&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist gerade ein Fahrplan aktiv? (Bspw. für Einblendung der Fahrplankarte)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_frontcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der vorderen Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_backcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der hinteren Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_me_reverse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Steht dieses Fahrzeug rückwärts zum gesamten Fahrzeugverband?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*) Bidirektionale KI-Variablen: Handelt es sich um ein Userfahrzeug, kann das Script dem Hauptprogramm mitteilen, wie Licht, Blinker usw. gesetzt wurden. Handelt es sich aber um ein KI-Fahrzeug, teilt OMSI dem Script mit, wie die entsprechenden Zustände gesetzt werden müssen.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stringvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\stringvarlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ident&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält das Kraftfahrzeugkennzeichen dieses Fahrzeugs (z.B. &amp;quot;B-V 3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |number&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält die Fahrzeugnummer (z.B. &amp;quot;3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_route&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''(keine Verwendung)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_busstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_setbusstop'' verwendet: Enthält dann den Namen der im Fahrplansystem aktiven Haltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SetLineTo&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_settarget'' verwendet: Enthält die einzustellende Liniennummer (oder Symbol) (bei Verwendung vom Zielschild-Menü oder beim Umschildern von KI-Bussen)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |yard&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Name der Hofdatei des Fahrzeuges, bspw. damit das Scriptsystem den Dateinamen der Zielcode-Tabelle generieren kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |file_schedule&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält den Dateinamen der Fahrplan-Bitmap, die zu der von diesem Fahrzeug gefahrenen Strecke gehört.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Menschen ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_human.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |LastMovedDist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernung, die der Mensch seit dem letzten Durchlauf zurückgelegt hat. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_State&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zustand des Menschens. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: stehen, 1: gehen, 2: sitzen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |HeightOfSeat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhe des Sitzes. Diese Eigenschaft wird in der Sitzposition gebraucht, um die Höhe der Füße korrekt gesetzt. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tauschtextur-Index (&amp;quot;Farbschema&amp;quot;) des Menschens.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=869</id>
		<title>System- und vordefinierte lokalen Variablen</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=869"/>
		<updated>2014-02-11T15:27:28Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Beschreibung der System- und der lokalen [[Scriptsystem#Variablenzugriff|Scriptvariablen]], welche für jedes Objekt vordefiniert werden und im Allgemeinen bestimmte Sonderfunktionen gegenüber frei definierten Scriptvariablen übernehmen.&lt;br /&gt;
&lt;br /&gt;
== Systemvariablen ==&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_system.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Timegap&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeitschritt seit dem letzten Durchlauf (Frame)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält eine absolute Zeitangabe, die vom Beginn des Ausführens von OMSI zählt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NoSound&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sounds deaktiviert?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Sounds aktiviert, 1 = Sounds deaktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pause&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Simulations-Pause aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Simulation läuft, 1 = Simulation angehalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Time&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Uhrzeit gerechnet von Mitternacht des aktuellen Tages&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Day&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Monatsbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Month&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Year&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahre&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DayOfYear&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Jahresbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Y-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keiner, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein Niederschlag, 1 = maximaler Niederschlag&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, x-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, y-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, z-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_energy&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Energie der Kollision (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_Temperature&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Außentemperatur&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_AbsHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Absolute Luftfeuchtigkeit&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AutoClutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Option &amp;quot;automatische Kupplung&amp;quot; aktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''nicht nutzen!''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SunAlt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhenwinkel der Sonne&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte lokale Variablen ==&lt;br /&gt;
&lt;br /&gt;
Seit OMSI 2 gibt es eine neue Form vordefinierter Variablen: Diese tauchen nicht in der ''varlist_*.txt''-Datei im ''program''-Verzeichnis auf und müssen daher so wie &amp;quot;normale&amp;quot; lokale Variablen deklariert werden, sie werden aber dennoch (sofern sie deklariert werden) mit internen Variablen verbunden. Diese Variablen werden &amp;quot;on-demand-vordefinierte Variablen&amp;quot; genannt. Bitte beachten Sie hierzu die neue Spalte!&lt;br /&gt;
&lt;br /&gt;
=== Szenerieobjekte ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NightLightA&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist die Nachtbeleuchtung aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |InUse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist das Objekt &amp;quot;aktiv&amp;quot;? Die Sporthallen sind bspw. nur an Schultagen vormittags &amp;quot;aktiv&amp;quot;, sodass die Soundeffekte an diese Variable gekoppelt werden können - auf diese Weise wird verhindert, dass die Soundeffekte auch in den Ferien oder nachts zu hören sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = inaktiv, 1 = aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightPhase&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber wird Ampelobjekten die anzuzeigende Ampelphase mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..2 = rot, 3..5 = rot-gelb, 6..8 = grün, 9..11 = gelb, sonst aus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightApproach&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script eine Ampelanforderung erkennen und bspw. eine Kennleuchte aktiviert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine Anforderung, 1 = Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(veraltet)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(-)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Signal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale ihr anzuzeigendes Signalbild&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NextSignal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale mit Vorsignalfunktion das anzuzeigende Signalbild des nächsten Signals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fahrzeuge ===&lt;br /&gt;
&lt;br /&gt;
==== Zahlvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Envir_Brightness&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umgebungshelligkeit in Fahrzeugnähe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = dunkel, 1 = hell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StreetCond&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Information über die Oberflächenbedingungen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Trocken, 0..1: zunehmende Feuchtigkeit, 1: komplett feucht, 1..2: teilweise Pfützen, 2: Fahrzeug komplett in Pfützen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spot_Select&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann gesteuert werden, welches fürs Fahrzeug vordefinierte Spotlight aktiv sein soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Spotlight, 0: Spotlight Nr. 0, 1: Spotlight Nr. 1 usw.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Index des gewählten Farbschemas/Anstriches&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |M_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script ein [http://de.wikipedia.org/wiki/Drehmoment Drehmoment] auf die Räder übertragen. Hierbei die Summe anzugeben, welche auf alle als angetrieben ausgewiesene Achsen wirken &lt;br /&gt;
soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kNm = 1000 [http://de.wikipedia.org/wiki/Newtonmeter Nm]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |n_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mittlere Raddrehzahl des Fahrzeuges&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Throttle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Gaspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brake&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Bremspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Clutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Kupplungspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brakeforce&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script die Gesamtbremskraft des Fahrzeuges vorgeben, welche auf die Räder wirkt. Sollte nicht gleichzeitig mit ''Axle_Brakeforce...'' verwendet werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche sich über die Raddrehung ergibt, entspricht der Tachoanzeige&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity_Ground&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche direkt relativ zum Grund gemessen wird, berücksichtigt kein Radschleudern oder -blockieren, entspricht der Anzeige auf einem GPS&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |tank_percent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tankinhalt, nur für die Anzeige auf der roten Informationsleiste. Die Betankung und Simulation eines leeren Tanks geschieht über einen Trigger bzw. muss im Script programmiert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (nur ganze km)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (zusätzliche Meter, läuft stets nur von 0m bis 999m; hinzu kommen die Kilometer von ''kmcounter_km'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |relrange&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zurückgelegte, relative Strecke. Wurde nur testweise für pfadfixierte Fahrzeuge eingeführt. Nicht benutzen!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |---&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Driver_Seat_VertTransl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederung des federnden Fahrersitzes&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_Rotation_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehwinkel des jeweiligen Rades, z.B. für die Animation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_RotationSpeed_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehzahl des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Suspension_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederungsweg des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Steering_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lenkwinkel des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Springfactor_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, mit dem radweise die Federstärke angepasst werden kann, z.B. um Luftfederungen zu simulieren.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine, 1 = normale, 2 = doppelte Federkraft&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Brakeforce_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ermöglicht Setzen der Bremskraft pro Rad. Sollte nicht gleichzeitig mit ''Brakeforce'' verwendet werden!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug_0 ... _5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug-Variablen. Können im Debug-Modus in der Informationsleiste angezeigt werden, um auf diese Weise die Scripts zu testen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |bliebig&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |A_Trans_X ... _Z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Beschleunigungen im Fahrzeug, die durch die Fahrzeugbewegungen ausgelöst werden (beim Bremsen oder bei Kurvenfahrten usw.)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m/s²&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Blinker_L, ~_R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Linker oder rechter Blinker aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: ein&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Light&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Fahrlicht, Standlicht, Lichthupe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Licht aus, 0.5: Standlicht an, 1: Fahrlicht an, 2: Fernlicht/Lichthupe an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Interiorlight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenbeleuchtung. Hierüber erfahren die einsteigenden Fahrgäste auch, ob es im Bus zu dunkel ist (sodass sie meckern dürfen).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Brakelight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Script soll Bremslicht einschalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Engine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Aufforderung zum Ein- oder Ausschalten des Motors&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Motor ausschalten!, 0: egal/nicht-KI, 1: Motor einschalten!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_target_index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dient der Übergabe des Sollwertes des einzustellenden Zielschildes bei Aufruf des Menüs oder beim Umschildern der KI-Busse. Entspricht der Reihenfolge in der Hof-Datei; erster Eintrag = 0&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |target_index_int&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Über diese Variable setzt das Script, welches Zielschild am Bus zusehen ist und steuert hierüber insbesondere die Fahrgäste. Entspricht wie ''AI_target_index'' dem Index der Reihenfolge in der Hof-Datei.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Scheduled_AtStation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur KI-Fahrzeuge, bidirektionale Kommunikation: Bei Erreichen einer Station setzt OMSI den Wert auf 1, sodass das Script mitgeteilt bekommt, dass die Türen geöffnet werden sollen. Wenn sich der Bus abfahrbereit machen soll, setzt OMSI den Wert auf -1. Wenn der Bus abfahrbereit ist (Türen geschlossen usw.), dann setzt das Script den Wert auf 0, sodass die KI den Bus weiterfahren lassen kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Bus abfahrbereit machen, 0: Bus ist abfahrbereit, 1: Türen freigeben/öffnen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erfährt das Script, ob das Fahrzeug von der AI gesteuert wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Open ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Eingänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Ausgänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GivenTicket&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob der ggf. vorhandene Fahrscheinautomat ein Ticket ausgegeben hat.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Ticket, 0: Tickettyp 0, 1: Tickettyp 1, ...&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |humans_count&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Anzahl der Fahrgäste im Fahrzeug&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Period&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsperiode im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Amp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsamplitude im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0...1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_OutsideVol&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, wie stark der Außensound im Innenraum hörbar ist; verändert sich bspw. wenn eine Tür geöffnet wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: kaum hörbar, 1: wie draußen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Microphone&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Hardware-)Mikrofon aktiv sein?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Radio&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Internet-)Radio laufen?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_Temp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenraumtemperatur für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_absHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Absolute_Luftfeuchtigkeit Absolute Luftfeuchtigkeit] im Innenraum für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_relHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Relative_Luftfeuchtigkeit Relative Luftfeuchtigkeit] im Innenraum, wird durch OMSI automatisch über die absolute Feuchtigkeit und die Innentemperatur berechnet.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = 0%, 1 = 100%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = maximal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dirt_Norm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |allgemeiner Verdreckungszustand (Windschutzscheiben können sauberer sein und werden nur vom Script simuliert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = sauber, 1 = total verdreckt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DirtRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |aktuelle Verdreckungsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verdreckung / s, wobei eine Verdreckung = 1 bedeutet, dass die Verdreckung maximal ist.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |schedule_active&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist gerade ein Fahrplan aktiv? (Bspw. für Einblendung der Fahrplankarte)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_frontcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der vorderen Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_backcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der hinteren Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_me_reverse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Steht dieses Fahrzeug rückwärts zum gesamten Fahrzeugverband?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*) Bidirektionale KI-Variablen: Handelt es sich um ein Userfahrzeug, kann das Script dem Hauptprogramm mitteilen, wie Licht, Blinker usw. gesetzt wurden. Handelt es sich aber um ein KI-Fahrzeug, teilt OMSI dem Script mit, wie die entsprechenden Zustände gesetzt werden müssen.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stringvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\stringvarlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ident&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält das Kraftfahrzeugkennzeichen dieses Fahrzeugs (z.B. &amp;quot;B-V 3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |number&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält die Fahrzeugnummer (z.B. &amp;quot;3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_route&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''(keine Verwendung)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_busstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_setbusstop'' verwendet: Enthält dann den Namen der im Fahrplansystem aktiven Haltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SetLineTo&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_settarget'' verwendet: Enthält die einzustellende Liniennummer (oder Symbol) (bei Verwendung vom Zielschild-Menü oder beim Umschildern von KI-Bussen)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |yard&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Name der Hofdatei des Fahrzeuges, bspw. damit das Scriptsystem den Dateinamen der Zielcode-Tabelle generieren kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |file_schedule&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält den Dateinamen der Fahrplan-Bitmap, die zu der von diesem Fahrzeug gefahrenen Strecke gehört.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Menschen ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_human.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |LastMovedDist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernung, die der Mensch seit dem letzten Durchlauf zurückgelegt hat. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_State&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zustand des Menschens. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: stehen, 1: gehen, 2: sitzen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |HeightOfSeat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhe des Sitzes. Diese Eigenschaft wird in der Sitzposition gebraucht, um die Höhe der Füße korrekt gesetzt. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tauschtextur-Index (&amp;quot;Farbschema&amp;quot;) des Menschens.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=868</id>
		<title>Scriptsystem</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=868"/>
		<updated>2014-02-11T15:26:44Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Variablenzugriff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem in OMSI ermöglicht es, dass Szenerieobjekte und vor allem Fahrzeuge mit individuellen Systemen ausgestattet werden können, die über Variablen und Funktionsaufrufe mit dem Hauptprogramm und der Grafik- und Soundengine kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der hier beschriebene Stand des Scriptsystems entspricht OMSI Version 1.01.&lt;br /&gt;
&lt;br /&gt;
== Dateien des Scriptsystems ==&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem umfasst folgende Dateien:&lt;br /&gt;
&lt;br /&gt;
* Scriptdateien mit ausführbarem Code (*.osc)&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien im OMSI\program-Verzeichnis zur Definition von Systemdateien und vordefinierten Dateien&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien zur Definition von Uservariablen&lt;br /&gt;
* Constfile-Dateien zur Definition von Userkonstanten und Funktionstabellen&lt;br /&gt;
&lt;br /&gt;
Abgesehen von den Dateien zur Definition von Systemvariablen müssen alle benötigten Dateien für jedes Fahrzeug/Szenerieobjekt (im folgenden kurz: Objekt) in dessen [[Konfigurationsdatei]] angemeldet werden.&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es die Befehle ''[script]'', ''[varnamelist]'', ''[stringvarnamelist]'' und ''[constfile]''. Der erste Eintrag jedes Befehls ist die Anzahl der Dateien, darauf folgen die entsprechenden Dateinamen (inkl. Pfad relativ zur Konfigurationsdatei. Die Namen der Dateien sind nicht relevant, solange sie korrekt in die Listen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Auf die Funktion der jeweiligen Dateien wird im Laufe der Beschreibung der Scriptsprache eingegangen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Scriptsprache ==&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Scriptsystem arbeitet mit der [http://de.wikipedia.org/wiki/Umgekehrte_Polnische_Notation umgekehrten Polnischen Notation]. Hierbei steht der Operator hinter den beiden Operanden; vereinfacht gesagt bedeutet es, dass die Operation &amp;quot; 1 + 2 &amp;quot; stattdessen folgendermaßen notiert wird: &amp;quot; 1 2 + &amp;quot;. Ein komplizierteres Beispiel: &amp;quot; (1 + 2) * (4 + 5) &amp;quot; entspricht &amp;quot; 1 2 + 4 5 + * &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist die Tatsache, dass die OMSI-Textdateien und insbesondere die Scriptsprache [http://de.wikipedia.org/wiki/Case_sensitivity Case-Sensitive] ist! D.h. es ist immer auf die Groß- und Kleinschreibung zu achten!&lt;br /&gt;
&lt;br /&gt;
=== Stack und Register ===&lt;br /&gt;
&lt;br /&gt;
Bei der Verarbeitung der Scripts verfügt OMSI über einen String-Stack und einen [http://de.wikipedia.org/wiki/Stapelspeicher Stack] für [http://de.wikipedia.org/wiki/Gleitkommazahl Gleitkommazahlen]. Im folgenden ist mit &amp;quot;Stack&amp;quot; immer der Stack für Gleitkommazahlen gemeint, andernfalls wird von &amp;quot;String-Stack&amp;quot; gesprochen.&lt;br /&gt;
&lt;br /&gt;
Beide Stacks enthält 8 Speicherplätze, welche von 0 bis 7 durchnumeriert sind. Jede Script-Operation kann nun einen oder mehrere neue Werte in einen der Stacks einfügen (push), wobei der neue Wert auf die Position 0 gesetzt wird und alle folgenden Werte &amp;quot;einen Platz aufrücken&amp;quot;, oder sie kann einen oder mehrere Werte aus dem Stack herausziehen (pop/pull) oder lediglich auslesen (peek).&lt;br /&gt;
&lt;br /&gt;
Fürs temporäre Ablegen von Zahlen gibt es zusätzlich acht indizierte Speicherplätze, welche direkt geschrieben oder gelesen werden können, die sich im sogenannten Register befinden - hier gibt es jedoch nur einen Register für die Gleitkommazahlen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel-Operationen ===&lt;br /&gt;
&lt;br /&gt;
Beispiel: Die Operation 1 + 4. Der Code hierfür lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 4 +&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle wird demonstriert, wie sich hierbei der Stack verhält:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			5	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ausgangszustand ist der Stack nur mit Nullen (oder unbekannten/zufälligen Werten) gefüllt. Der Befehl &amp;quot;1&amp;quot; schiebt die Eins in den obersten Stackplatz und schiebt alle weiteren Werte (Nullen) nach hinten. Der Befehl &amp;quot;4&amp;quot; schiebt die Vier auf den 0. Platz und alle folgenden Werte, also insbesondere die Eins auf den jeweils nächsten Platz. Im nächsten Schritt &amp;quot;+&amp;quot; werden die obersten beiden Werte aus dem Stack herausgezogen - also 4 und 1 - und summiert. Das Ergebnis (5) wird wiederum in den Stack geschoben. Die beiden ursprünglichen Zahlen sind im Stack nicht mehr vorhanden.&lt;br /&gt;
&lt;br /&gt;
Ein zweites Beispiel:&lt;br /&gt;
&lt;br /&gt;
(1 + 2) * (4 + 5) muss wie bereits erwähnt folgendermaßen notiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 2 + 4 5 + *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Stack verhält sich somit folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;2&amp;quot;			2	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			3	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	3	0	0	0&lt;br /&gt;
&amp;quot;5&amp;quot;			5	4	3	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			9	3	0	0	0&lt;br /&gt;
&amp;quot;*&amp;quot;			27	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Ende befindet sich also das korrekte Ergebnis auf Stackplatz 0!&lt;br /&gt;
&lt;br /&gt;
=== Gleitkommazahlen und Strings ===&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Skriptsystem arbeitet ausschließlich mit den Datentypen Gleitkommazahl (einfache Präzision mit Vorzeichen) und String. Beide Datentypen haben getrennte Stacks. Deshalb laufen die Verarbeitung von Gleitkommazahlen und Strings im Allgemeinen unabhängig nebeneinander. Jedoch kann es natürlich vorkommen, dass bestimmte Funktionen z.B. Zahlen in Strings umwandeln und somit gleichzeitig auf beide Teilbereiche zugreifen.&lt;br /&gt;
&lt;br /&gt;
Auf boolische Variablen wurde verzichtet. Für boolische Werte werden im Allgemeinen die Zahlenwerte 0 und 1 verwendet.&lt;br /&gt;
&lt;br /&gt;
== Script-Schlüsselwörter ==&lt;br /&gt;
&lt;br /&gt;
=== Kommentare ===&lt;br /&gt;
&lt;br /&gt;
Kommentierungen sind nur möglich, indem in der auszukommentierenden Zeile ganz vorne ein Apostroph ['] gesetzt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Ich bin eine Kommentarzeile&lt;br /&gt;
   'Ich bin KEINE Kommentarzeile!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstiegs- und Ausstiegspunkte, Makros und Trigger ===&lt;br /&gt;
&lt;br /&gt;
Alle Befehle müssen zwischen einem Einstiegs- und einem Ausstiegspunkt liegen.&lt;br /&gt;
&lt;br /&gt;
Der Einstiegspunkt wird durch eins der folgenden Schlüsselwörter gekennzeichnet:&lt;br /&gt;
&lt;br /&gt;
* {frame} Im Laufe jedes Frames ruft OMSI über diesen Einstiegspunkt die frameweise Scriptverarbeitung auf, sofern er vorhanden ist.&lt;br /&gt;
* {init} Bei der Initialisierung ruft OMSI über diesen Einstiegspunkt die Script-Initialisierung auf.&lt;br /&gt;
* {frame_ai} Hierbei handelt es sich um eine Variante des {frame}-Einstiegspunktes, welcher bei Fahrzeugen dann aufgerufen wird, wenn diese nicht im Fokus des Benutzers stehen, z.B. wenn sie als KI-Fahrzeug unterwegs sind. Ist dieser Einstiegspunkt jedoch nicht vorhanden sondern nur {frame}, dann wird dieser alternativ aufgerufen. Bei Szenerieobjekten kommt dieser Eintrittspunkt nicht zur Anwendung.&lt;br /&gt;
* {macro:''name''} Dieser Einstiegspunkt ruft ein Subsektion (Makro) auf, welche '''stets nach dem Aufruf''' definiert werden muss.&lt;br /&gt;
* {trigger:''name''} Dieser Einstiegspunkt wird vom Hauptprogramm aufgerufen, wenn der Benutzer die Tastenkombination oder das Maus-Event mit der Bezeichnung ''name'' aufruft - es gibt auch bestimmte Trigger, die direkt vom Hauptprogramm aufgerufen werden, z.B. wenn OMSI bei KI-Bussen die Anzeige wechselt u.Ä.&lt;br /&gt;
&lt;br /&gt;
{end} ist der universelle Ausstiegspunkt. Er muss stets den Block abschließen, der mit einem der obigen Befehle eröffnet wird.&lt;br /&gt;
&lt;br /&gt;
==== Makroaufruf ====&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Makros erfolgt über (M.L.''name''). Der Aufruf des Makros muss ''immer'' vor dessen Definition erfolgen. Andernfalls meldet OMSI, dass das Makro nicht gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
==== Aufteilung des Scripts in mehrere Dateien ====&lt;br /&gt;
&lt;br /&gt;
Bei einfachen Scripts (z.B. bei reinen KI-Fahrzeugen oder Szenerieobjekten) reicht es im Allgemeinen eine *.sco-Datei zu erstellen, welche über einen {frame}...{end}- und ggf. einen {init}...{end}-Block verfügt.&lt;br /&gt;
&lt;br /&gt;
Handelt es sich jedoch um ein komplettes Fahrzeugscript, dann empfiehlt es sich für die verschiedenen Subsysteme getrennte Dateien anzulegen. Hierbei sollte folgendermaßen vorgegangen werden:&lt;br /&gt;
&lt;br /&gt;
* Es gibt ein Hauptscript und die nötigen Subsystemdateien. Die Hauptdatei enthält dabei die {frame}- und {init}-Blöcke, die jedoch nur Makros aufrufen, welche in den Subsystemdateien definiert sind.&lt;br /&gt;
* Für jedes Subsystem gibt es eine *.sco-Datei und je nach Bedarf eine eigene Varlist und Constfile mit den zum System gehörenden Variablen. Außerdem werden auch hier die Trigger für die Tastenbefehle einsortiert.&lt;br /&gt;
* Die Makros sollten sinnvollerweise folgendermaßen benannt werden: {macro:''subsystem''_frame} und {macro:''subsystem''_init}.&lt;br /&gt;
* Damit die Makros vom Hauptscript aufgerufen werden, muss dieses in der Liste der Scripts in der Objekt-Konfigurationsdatei als erstes aufgerufen werden. Die Reihenfolge der Scripts untereinander muss ebenfalls so gewählt werden, dass alle dateiübergreifenden Makroaufrufe stets vor der jeweiligen Makrodefinition stehen.&lt;br /&gt;
&lt;br /&gt;
Die Einschränkung, dass Makros immer hinter dem Aufruf definiert werden müssen, kann zwar bisweilen hinderlich sein, ist aber ein sehr wirksamer Schutz gegen Zirkelschlüsse und Endlosschleifen.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
&lt;br /&gt;
Wie schon geschrieben wurde, kann ein {trigger:''name''}...{end}-Abschnitt durch verschiedene Möglichkeiten aus dem Hauptprogramm heraus aufgerufen werden. Hierzu zählen:&lt;br /&gt;
&lt;br /&gt;
* Auslösung per Tastatur. Wurde die Tastenkombination mit dem Namen ''tastkomb'' bezeichnet, wird {trigger:tastkomb} aufgerufen, wenn die Taste gedrückt wird und {trigger:tastkomb_off}, wenn die Taste losgelassen wird.&lt;br /&gt;
* Auslösung per Maus. Wurde ein Mesh angeklickt mit der [mouseevent]-Bezeichnung ''mouse_ev'', so wird {trigger:mouse_ev} aufgerufen, wenn die Maustaste gedrückt wird, {trigger:mouse_ev_drag}, während die Maustaste gehalten wird und {trigger:mouse_ev_off}, wenn die Maustaste losgelassen wird.&lt;br /&gt;
* Außerdem gibt es noch eine Reihe von [[System-Trigger|System-Triggern]].&lt;br /&gt;
&lt;br /&gt;
=== Operationen ===&lt;br /&gt;
&lt;br /&gt;
==== Stack-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%stackdump%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt eine Dialogbox mit dem Gleitkomma-Stackinhalt aus. Sollte deshalb natürlich nur zu Debug-Zwecken eingesetzt werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s0, s1, ..., s7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichern des aktuellen Stackwertes im durch die Ziffer angegebenen Register. Der Wert verbleibt hierbei im Stack&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |l0, l1, ..., l7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Laden des entsprechenden Registerwertes und Verschiebung in den Stack. Registerwert bleibt erhalten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den obersten Stackwert; alle weiteren Stackwerte rücken nach hinten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$msg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt den obersten String-Stack-Wert in die Debug-Zeile von OMSI - egal, ob es sich um ein User-, KI-Fahrzeug oder Szenerieobjekt handelt.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den Stringstack-Wert analog zu &amp;quot;d&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Logische Operationen ====&lt;br /&gt;
&lt;br /&gt;
Die logischen Operationen arbeiten nach dem Prinzip 0 = FALSE, alles andere ist TRUE.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;amp;&amp;amp;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |UND, d.h. wenn einer der beiden obersten Stackwerte gleich 0 ist, ist das Ergbnis 0, sonst 1.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ODER&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verneinung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Vergleichsoperationen ====&lt;br /&gt;
&lt;br /&gt;
Die Vergleichsoperationen vergleichen die Werte in den beiden jeweils obersten Stackplätzen und fügen dann je nach Ergebnis eine &amp;quot;1&amp;quot; oder &amp;quot;0&amp;quot; im obersten Stackplatz ein. Die Größer-/Kleinerzeichen stehen dabei entsprechend für der Reihenfolge, in der die Werte zuvor angegeben wurden. Das bedeutet:&lt;br /&gt;
&lt;br /&gt;
4 2 &amp;gt; ist wahr, weil die intern durchgeführte Operation in diesem Fall &amp;quot;4 &amp;gt; 2&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls die obersten Stackwerte identisch sind, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls Stackwert 1 kleiner ist als Stackwert 0, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... kleiner als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wie &amp;quot;=&amp;quot; nur für die obersten beiden Stringstack-Plätze.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner als (String). Die Ungleich-Operationen bei Strings prüfen auf alphabetische Reihenfolge. &amp;quot;A&amp;quot; ist also kleiner als &amp;quot;B&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer als (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner oder gleich (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer oder gleich (String).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Mathematische Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Plus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Minus (Stackplatz 1 - Stackplatz 0, also vom Prinzip her wie bei den Größer/Kleiner-Operationen)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mal&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |geteilt (Stackplatz 1 / Stackplatz 0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rest der Division (folgendermaßen erweitert für Gleitkommazahlen: Stack0 - trunc(Stack1 / Stack0) * Stack1 )&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/-/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Vorzeichenwechsel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sinus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arcsin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Sinus ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arctan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Tangens ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |min&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des kleineren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |max&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des größeren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |exp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Exponentialfunktion zur Basis e (e^Stack0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqrt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadratwurzel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadrat&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sgn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Vorzeichens; je nachdem entweder -1, 0 oder 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |pi&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kreiszahl pi&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |random&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ganzzahlige Zufallszahl 0 &amp;lt;= x &amp;lt; Stack0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |abs&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Absolutwertes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |trunc&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Abrunden auf nächste ganze Zahl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;''bla''&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfügen des Strings ''bla'' auf dem obersten String-Stack-Platz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zusammenfügen zweier Strings. &amp;quot;Omnibus&amp;quot; &amp;quot;simulator&amp;quot; $+ ergibt &amp;quot;Omnibussimulator&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Der oberste Stack-String wird sooft wiederholt, bis die resultierende Zeichenlänger gerade noch kleiner oder gleich des obersten Stackwertes ist. Beispiel: &amp;quot;nu&amp;quot; 6 $* ergibt &amp;quot;nununu&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$length&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Zeichen des obersten Stack-String zurück in den Stack. &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutBegin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen vorne vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutEnd&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen hinten vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthR&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' rechtsbündig an, indem am Anfang Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthC&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' zentriert an, indem am Anfang und am Ende Zeichen entfernt oder Leerzeichen ergänzt werden ''(ab OMSI2)''.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthL&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' linksbündig an, indem am Ende Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rundet ''stack0'' ab und wandelt die resultierende Ganzzahl um in einen String.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStrEnh&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die erweiterte Version von IntToStr. Hierbei wird der oberste Stack-String verwendet, um das Format der String-Umwandlung zu bestimmen: Das erste Zeichen im String wird zum Auffüllen der fehlenden Zeichen verwendet, die folgenden Zeichen müssen eine Zahl ergeben, die die Stellen angibt. Beispiel: 35 &amp;quot; 5&amp;quot; $IntToStrEnh führt zu &amp;quot;   35&amp;quot; und 123456789 &amp;quot;011&amp;quot; $IntToStrEnh führt zu &amp;quot;00123456789&amp;quot;. Falls ein Fehler vorliegt, wird &amp;quot;ERROR&amp;quot; ausgegeben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$StrToFloat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wandelt den obersten Stack-String in eine Gleitkommazahl um, falls möglich. Andernfalls wird eine -1 geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$RemoveSpaces&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernt sämtliche Leerzeichen vor und nach dem eigentlichen String. Aus &amp;quot;   Spandau Freudstr    &amp;quot; wird &amp;quot;Spandau Freudstr&amp;quot; ''(ab OMSI2)''.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variablenzugriff ===&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden in Systemvariablen und in lokale Variablen. Die Systemvariablen gelten OMSI-weit, die lokalen Variablen werden zum Fahrzeug/Objekt zugehörig gespeichert.&lt;br /&gt;
&lt;br /&gt;
Bei den lokalen Variablen gibt es stets einen Grundstamm an Variablen, welcher von OMSI vordefiniert werden. Darüber hinaus können beliebig viele Variablen mit Hilfe der Varlist-Dateien ergänzt werden. Außerdem gibt es seit OMSI2 die Variante, dass man die Variable zwar selbst definieren muss, sie dann aber trotzdem mit einem OMSI-Internen Zustand verbunden wird (&amp;quot;on-demand-vordefinierte Variablen&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.S.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die Systemvariable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale Variable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale String-Variable ''varname'' in den obersten String-Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten Stackplatz in die lokale Variable ''varname''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten String-Stackplatz in die lokale String-Variable ''varname''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung der einzelnen Systemvariablen und der vordefinierten lokalen Variablen finden Sie hier: [[System- und vordefinierte lokalen Variablen]]&lt;br /&gt;
&lt;br /&gt;
=== Konstanten und Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Lokale Konstanten und [http://de.wikipedia.org/w/index.php?title=Datei:Linear_interpolation.svg&amp;amp;filetimestamp=20080226155013 stückweise definierte lineare Funktionen] können in den Konstantendateien (''constfiles'', ''~_constfile.txt'') definiert werden. Der Aufbau jeder Konstantendatei entspricht der der [[Konfigurationsdateien|Konfigurationsdatei]]. Es gibt lediglich drei Schlüsselwörter. Zu beachten ist: Bisher können keine Strings, sondern nur Fließkommazahlen als Konstanten definiert werden.&lt;br /&gt;
&lt;br /&gt;
[const] definiert eine neue Konstante und gibt ihren Wert an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
name&lt;br /&gt;
wert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
leistung&lt;br /&gt;
200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[newcurve] leitet die Definition einer neuen (stückweise linearen) Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[pnt] fügt der zuvor mit [newcurve] definierten Funktion ein neues x-y-Paar hinzu. Jede Funktion sollte normalerweise über mindestens zwei Paare verfügen. Die Reihenfolge der Paare ''muss'' in x-Richtung aufsteigend sein!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
Drehzahl_Drehmoment_Kennlinie&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
50&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
300&lt;br /&gt;
400&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
1000&lt;br /&gt;
600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Konstanten werden über den Befehl (C.L.''konstantenname'') in den Stack geladen.&lt;br /&gt;
&lt;br /&gt;
Funktionen werden über den Befehl (F.L.''funktionsname'') aufgerufen. Dabei wird stets der zuvor auf oberster Stackposition befindliche Wert als x-Parameter übergaben und der resultierende y-Wert der Funktion stattdessen auf dem obersten Stackplatz gespeichert. Bewegt sich der x-Wert außerhalb der Grenzen der durch die [pnt]-Einträge definierten Eckpunkte, wird stets der y-Wert des nächstliegenden Eckpunktes verwendet. Die Funktion wird also vor dem ersten und hinter dem letzten Eckpunkt ins Unendliche waagerecht verlängert.&lt;br /&gt;
&lt;br /&gt;
=== Sound-Trigger ===&lt;br /&gt;
&lt;br /&gt;
Soundtrigger sind nicht mit den weiter oben erwähnten Triggern zu verwechseln!&lt;br /&gt;
&lt;br /&gt;
Sie stellen vielmehr eine Möglichkeit dar, direkt einen gewünschten Sound abzuspielen. Hierbei gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
(T.L.''soundtriggername'') ist ein einfacher Soundtrigger. Der so markierte Sound wird (einmalig) abgespielt.&lt;br /&gt;
&lt;br /&gt;
(T.F.''soundtriggername'') ist ein Soundtrigger mit Dateiwechselfunktion. Hierbei wird der oberste Stackstring ausgelesen und als Dateiname verwendet, wobei der Dateipfad relativ zum Sound-Ordner des Objektes interpretiert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Angenommen, die Sounddatei lautet &amp;quot;diese.wav&amp;quot; und ist mit dem Trigger ''MeinTrigger'' verknüpft, dann spielt&lt;br /&gt;
&lt;br /&gt;
 (T.L.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;diese.wav&amp;quot; ab und&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;andere.wav&amp;quot; (T.F.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;andere.wav&amp;quot;. Alternativ zu (T.L.''soundtriggername'') kann beim Befehl (T.F.''soundtriggername'') auch ein &amp;quot;Nullstring&amp;quot; im Stack liegen (also der String: &amp;quot;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== System-Makros ===&lt;br /&gt;
&lt;br /&gt;
Die bisherigen Methoden erlauben dem Script folgende Kommunikationsmöglichkeiten mit OMSI:&lt;br /&gt;
&lt;br /&gt;
* Lesen von Werten über System- und vordefinierte lokale Variablen&lt;br /&gt;
* Schreiben von Werten über ebendiese&lt;br /&gt;
* Empfangen von Tastatur-, Maus- oder Systemtriggern&lt;br /&gt;
&lt;br /&gt;
Schließlich gibt es noch eine weitere Methode, um mit dem Hauptprogramm zu kommunizieren, die sogenannten System-Makros, gelegentlich auch unpräzise als &amp;quot;Callback-Funktionen&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
In bestimmten Situationen ist es nötig, dass das Script Werte von OMSI bekommt, die in größeren Datenbanken vorliegen und daher nicht über vordefinierte Variablen übermittelt werden können, z.B. die Inhalte der Hofdatei. Hier kommen nun die System-Makros ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Diese arbeiten scriptseitig sehr ähnlich wie die lokalen, selbstdefinierten Makros: Der Aufruf (M.V.''macroname'') ruft das System-Makro auf (&amp;quot;V&amp;quot; stand ursprünglich für &amp;quot;Vehicle-Macro&amp;quot;, gilt aber genauso auch in Szenerieobjekten), das sich während der Ausführung Werte aus den beiden Stacks holt und/oder in diese schreibt. Eine Aufstellung aller System-Makros findet sich hier: [[System-Makros]]&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen und Schleifen ===&lt;br /&gt;
&lt;br /&gt;
Die einzige Steuerung des Programmablaufs ist zur Zeit nur mit der IF-Bedingung möglich.&lt;br /&gt;
&lt;br /&gt;
==== IF-Bedingung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dass erst die Bedingung formuliert wird und dann erst das Schlüsselwort {if} folgt, sollte einleuchten: Zunächst muss an oberster Stelle des Stacks der Wert abgelegt werden und erst dann folgt das Schlüsselwort {if}, welches diesen Wert prüft. Hierbei bedeutet ähnlich wie bei &amp;amp;&amp;amp; und || Gleichheit mit Null gleichbedeutend mit ''False'', alle anderen Werte bedeuten ''True''.&lt;br /&gt;
&lt;br /&gt;
Wenn also im obigen Beispiel ''bla'' den Wert 1 hat, wird ''blub'' auf den Wert 5 gesetzt, andernfalls auf den Wert 7.&lt;br /&gt;
&lt;br /&gt;
Verschachtelungen der IF-Bedingung dienen als Ersatz für die (nicht vorhandenen) &amp;quot;Else-If&amp;quot;-Konstruktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
    (L.L.bla) 5 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 5 ist:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        13&lt;br /&gt;
    {endif}&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist insbesondere auf das doppelte {endif} zu achten! Hier gilt:&lt;br /&gt;
&lt;br /&gt;
* bla = 1 ==&amp;gt; blub = 5&lt;br /&gt;
* bla = 5 ==&amp;gt; blub = 7&lt;br /&gt;
* sonst   ==&amp;gt; blub = 13&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=867</id>
		<title>System- und vordefinierte lokalen Variablen</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=867"/>
		<updated>2014-02-11T15:23:58Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Systemvariablen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Beschreibung der System- und der lokalen [[Scriptsystem#Variablenzugriff|Scriptvariablen]], welche für jedes Objekt vordefiniert werden und im Allgemeinen bestimmte Sonderfunktionen gegenüber frei definierten Scriptvariablen übernehmen.&lt;br /&gt;
&lt;br /&gt;
== Systemvariablen ==&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_system.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Timegap&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeitschritt seit dem letzten Durchlauf (Frame)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält eine absolute Zeitangabe, die vom Beginn des Ausführens von OMSI zählt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NoSound&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sounds deaktiviert?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Sounds aktiviert, 1 = Sounds deaktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pause&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Simulations-Pause aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Simulation läuft, 1 = Simulation angehalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Time&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Uhrzeit gerechnet von Mitternacht des aktuellen Tages&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Day&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Monatsbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Month&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Year&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahre&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DayOfYear&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Jahresbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Y-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keiner, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein Niederschlag, 1 = maximaler Niederschlag&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, x-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, y-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, z-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_energy&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Energie der Kollision (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_Temperature&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Außentemperatur&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_AbsHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Absolute Luftfeuchtigkeit&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AutoClutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Option &amp;quot;automatische Kupplung&amp;quot; aktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.03&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''nicht nutzen!''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SunAlt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhenwinkel der Sonne&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte lokale Variablen ==&lt;br /&gt;
&lt;br /&gt;
=== Szenerieobjekte ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NightLightA&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist die Nachtbeleuchtung aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |InUse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist das Objekt &amp;quot;aktiv&amp;quot;? Die Sporthallen sind bspw. nur an Schultagen vormittags &amp;quot;aktiv&amp;quot;, sodass die Soundeffekte an diese Variable gekoppelt werden können - auf diese Weise wird verhindert, dass die Soundeffekte auch in den Ferien oder nachts zu hören sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = inaktiv, 1 = aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightPhase&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber wird Ampelobjekten die anzuzeigende Ampelphase mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..2 = rot, 3..5 = rot-gelb, 6..8 = grün, 9..11 = gelb, sonst aus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightApproach&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script eine Ampelanforderung erkennen und bspw. eine Kennleuchte aktiviert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine Anforderung, 1 = Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(veraltet)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(-)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Signal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale ihr anzuzeigendes Signalbild&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NextSignal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale mit Vorsignalfunktion das anzuzeigende Signalbild des nächsten Signals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fahrzeuge ===&lt;br /&gt;
&lt;br /&gt;
==== Zahlvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Envir_Brightness&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umgebungshelligkeit in Fahrzeugnähe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = dunkel, 1 = hell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StreetCond&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Information über die Oberflächenbedingungen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Trocken, 0..1: zunehmende Feuchtigkeit, 1: komplett feucht, 1..2: teilweise Pfützen, 2: Fahrzeug komplett in Pfützen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spot_Select&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann gesteuert werden, welches fürs Fahrzeug vordefinierte Spotlight aktiv sein soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Spotlight, 0: Spotlight Nr. 0, 1: Spotlight Nr. 1 usw.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Index des gewählten Farbschemas/Anstriches&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |M_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script ein [http://de.wikipedia.org/wiki/Drehmoment Drehmoment] auf die Räder übertragen. Hierbei die Summe anzugeben, welche auf alle als angetrieben ausgewiesene Achsen wirken &lt;br /&gt;
soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kNm = 1000 [http://de.wikipedia.org/wiki/Newtonmeter Nm]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |n_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mittlere Raddrehzahl des Fahrzeuges&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Throttle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Gaspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brake&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Bremspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Clutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Kupplungspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brakeforce&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script die Gesamtbremskraft des Fahrzeuges vorgeben, welche auf die Räder wirkt. Sollte nicht gleichzeitig mit ''Axle_Brakeforce...'' verwendet werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche sich über die Raddrehung ergibt, entspricht der Tachoanzeige&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity_Ground&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche direkt relativ zum Grund gemessen wird, berücksichtigt kein Radschleudern oder -blockieren, entspricht der Anzeige auf einem GPS&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |tank_percent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tankinhalt, nur für die Anzeige auf der roten Informationsleiste. Die Betankung und Simulation eines leeren Tanks geschieht über einen Trigger bzw. muss im Script programmiert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (nur ganze km)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (zusätzliche Meter, läuft stets nur von 0m bis 999m; hinzu kommen die Kilometer von ''kmcounter_km'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |relrange&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zurückgelegte, relative Strecke. Wurde nur testweise für pfadfixierte Fahrzeuge eingeführt. Nicht benutzen!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |---&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Driver_Seat_VertTransl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederung des federnden Fahrersitzes&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_Rotation_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehwinkel des jeweiligen Rades, z.B. für die Animation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_RotationSpeed_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehzahl des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Suspension_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederungsweg des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Steering_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lenkwinkel des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Springfactor_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, mit dem radweise die Federstärke angepasst werden kann, z.B. um Luftfederungen zu simulieren.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine, 1 = normale, 2 = doppelte Federkraft&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Brakeforce_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ermöglicht Setzen der Bremskraft pro Rad. Sollte nicht gleichzeitig mit ''Brakeforce'' verwendet werden!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug_0 ... _5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug-Variablen. Können im Debug-Modus in der Informationsleiste angezeigt werden, um auf diese Weise die Scripts zu testen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |bliebig&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |A_Trans_X ... _Z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Beschleunigungen im Fahrzeug, die durch die Fahrzeugbewegungen ausgelöst werden (beim Bremsen oder bei Kurvenfahrten usw.)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m/s²&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Blinker_L, ~_R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Linker oder rechter Blinker aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: ein&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Light&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Fahrlicht, Standlicht, Lichthupe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Licht aus, 0.5: Standlicht an, 1: Fahrlicht an, 2: Fernlicht/Lichthupe an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Interiorlight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenbeleuchtung. Hierüber erfahren die einsteigenden Fahrgäste auch, ob es im Bus zu dunkel ist (sodass sie meckern dürfen).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Brakelight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Script soll Bremslicht einschalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Engine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Aufforderung zum Ein- oder Ausschalten des Motors&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Motor ausschalten!, 0: egal/nicht-KI, 1: Motor einschalten!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_target_index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dient der Übergabe des Sollwertes des einzustellenden Zielschildes bei Aufruf des Menüs oder beim Umschildern der KI-Busse. Entspricht der Reihenfolge in der Hof-Datei; erster Eintrag = 0&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |target_index_int&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Über diese Variable setzt das Script, welches Zielschild am Bus zusehen ist und steuert hierüber insbesondere die Fahrgäste. Entspricht wie ''AI_target_index'' dem Index der Reihenfolge in der Hof-Datei.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Scheduled_AtStation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur KI-Fahrzeuge, bidirektionale Kommunikation: Bei Erreichen einer Station setzt OMSI den Wert auf 1, sodass das Script mitgeteilt bekommt, dass die Türen geöffnet werden sollen. Wenn sich der Bus abfahrbereit machen soll, setzt OMSI den Wert auf -1. Wenn der Bus abfahrbereit ist (Türen geschlossen usw.), dann setzt das Script den Wert auf 0, sodass die KI den Bus weiterfahren lassen kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Bus abfahrbereit machen, 0: Bus ist abfahrbereit, 1: Türen freigeben/öffnen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erfährt das Script, ob das Fahrzeug von der AI gesteuert wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Open ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Eingänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Ausgänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GivenTicket&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob der ggf. vorhandene Fahrscheinautomat ein Ticket ausgegeben hat.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Ticket, 0: Tickettyp 0, 1: Tickettyp 1, ...&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |humans_count&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Anzahl der Fahrgäste im Fahrzeug&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Period&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsperiode im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Amp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsamplitude im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0...1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_OutsideVol&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, wie stark der Außensound im Innenraum hörbar ist; verändert sich bspw. wenn eine Tür geöffnet wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: kaum hörbar, 1: wie draußen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Microphone&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Hardware-)Mikrofon aktiv sein?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Radio&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Internet-)Radio laufen?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_Temp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenraumtemperatur für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_absHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Absolute_Luftfeuchtigkeit Absolute Luftfeuchtigkeit] im Innenraum für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_relHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Relative_Luftfeuchtigkeit Relative Luftfeuchtigkeit] im Innenraum, wird durch OMSI automatisch über die absolute Feuchtigkeit und die Innentemperatur berechnet.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = 0%, 1 = 100%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = maximal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dirt_Norm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |allgemeiner Verdreckungszustand (Windschutzscheiben können sauberer sein und werden nur vom Script simuliert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = sauber, 1 = total verdreckt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DirtRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |aktuelle Verdreckungsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verdreckung / s, wobei eine Verdreckung = 1 bedeutet, dass die Verdreckung maximal ist.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |schedule_active&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist gerade ein Fahrplan aktiv? (Bspw. für Einblendung der Fahrplankarte)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_frontcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der vorderen Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_backcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der hinteren Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_me_reverse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Steht dieses Fahrzeug rückwärts zum gesamten Fahrzeugverband?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*) Bidirektionale KI-Variablen: Handelt es sich um ein Userfahrzeug, kann das Script dem Hauptprogramm mitteilen, wie Licht, Blinker usw. gesetzt wurden. Handelt es sich aber um ein KI-Fahrzeug, teilt OMSI dem Script mit, wie die entsprechenden Zustände gesetzt werden müssen.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stringvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\stringvarlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ident&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält das Kraftfahrzeugkennzeichen dieses Fahrzeugs (z.B. &amp;quot;B-V 3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |number&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält die Fahrzeugnummer (z.B. &amp;quot;3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_route&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''(keine Verwendung)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_busstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_setbusstop'' verwendet: Enthält dann den Namen der im Fahrplansystem aktiven Haltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SetLineTo&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_settarget'' verwendet: Enthält die einzustellende Liniennummer (oder Symbol) (bei Verwendung vom Zielschild-Menü oder beim Umschildern von KI-Bussen)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |yard&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Name der Hofdatei des Fahrzeuges, bspw. damit das Scriptsystem den Dateinamen der Zielcode-Tabelle generieren kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |file_schedule&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält den Dateinamen der Fahrplan-Bitmap, die zu der von diesem Fahrzeug gefahrenen Strecke gehört.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Menschen ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_human.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |LastMovedDist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernung, die der Mensch seit dem letzten Durchlauf zurückgelegt hat. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_State&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zustand des Menschens. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: stehen, 1: gehen, 2: sitzen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |HeightOfSeat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhe des Sitzes. Diese Eigenschaft wird in der Sitzposition gebraucht, um die Höhe der Füße korrekt gesetzt. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tauschtextur-Index (&amp;quot;Farbschema&amp;quot;) des Menschens.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=866</id>
		<title>System- und vordefinierte lokalen Variablen</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=System-_und_vordefinierte_lokalen_Variablen&amp;diff=866"/>
		<updated>2014-02-11T15:23:08Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Systemvariablen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Beschreibung der System- und der lokalen [[Scriptsystem#Variablenzugriff|Scriptvariablen]], welche für jedes Objekt vordefiniert werden und im Allgemeinen bestimmte Sonderfunktionen gegenüber frei definierten Scriptvariablen übernehmen.&lt;br /&gt;
&lt;br /&gt;
== Systemvariablen ==&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_system.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''ab OMSI-Vs.''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Timegap&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zeitschritt seit dem letzten Durchlauf (Frame)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GetTime&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält eine absolute Zeitangabe, die vom Beginn des Ausführens von OMSI zählt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NoSound&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sounds deaktiviert?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Sounds aktiviert, 1 = Sounds deaktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pause&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Simulations-Pause aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = Simulation läuft, 1 = Simulation angehalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Time&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Uhrzeit gerechnet von Mitternacht des aktuellen Tages&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sekunden&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Day&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Monatsbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Month&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Monate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Year&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Jahre&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DayOfYear&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tag gezählt ab Jahresbeginn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tage&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |mouse_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Y-Koordinate des Mauszeigers auf dem Bildschirm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Pixel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keiner, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein Niederschlag, 1 = maximaler Niederschlag&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_x&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, x-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_y&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, y-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_pos_z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Position der Kollision, z-Richtung relativ zum Fahrzeugursprung (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Meter&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |coll_energy&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Energie der Kollision (nur bei Auslösung des Kollisions-Triggers)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_Temperature&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Außentemperatur&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Weather_AbsHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Absolute Luftfeuchtigkeit&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AutoClutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Option &amp;quot;automatische Kupplung&amp;quot; aktiviert&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |1.04&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |wearlifespan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''nicht nutzen!''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SunAlt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhenwinkel der Sonne&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |2.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte lokale Variablen ==&lt;br /&gt;
&lt;br /&gt;
=== Szenerieobjekte ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_scenobj.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NightLightA&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist die Nachtbeleuchtung aktiv?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = aus, 1 = an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |InUse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist das Objekt &amp;quot;aktiv&amp;quot;? Die Sporthallen sind bspw. nur an Schultagen vormittags &amp;quot;aktiv&amp;quot;, sodass die Soundeffekte an diese Variable gekoppelt werden können - auf diese Weise wird verhindert, dass die Soundeffekte auch in den Ferien oder nachts zu hören sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = inaktiv, 1 = aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightPhase&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber wird Ampelobjekten die anzuzeigende Ampelphase mitgeteilt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..2 = rot, 3..5 = rot-gelb, 6..8 = grün, 9..11 = gelb, sonst aus&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |TrafficLightApproach&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script eine Ampelanforderung erkennen und bspw. eine Kennleuchte aktiviert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine Anforderung, 1 = Anforderung&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(veraltet)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(-)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Signal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale ihr anzuzeigendes Signalbild&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |NextSignal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erhalten Signale mit Vorsignalfunktion das anzuzeigende Signalbild des nächsten Signals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |individuell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fahrzeuge ===&lt;br /&gt;
&lt;br /&gt;
==== Zahlvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Refresh_Strings&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Diese Variable muss auf &amp;quot;1&amp;quot; gesetzt werden, damit die Text-Texturen aktualisiert werden! Wird nach erfolgreicher Abarbeitung von OMSI auf 0 gesetzt.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Envir_Brightness&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umgebungshelligkeit in Fahrzeugnähe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = dunkel, 1 = hell&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |StreetCond&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Information über die Oberflächenbedingungen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Trocken, 0..1: zunehmende Feuchtigkeit, 1: komplett feucht, 1..2: teilweise Pfützen, 2: Fahrzeug komplett in Pfützen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Spot_Select&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann gesteuert werden, welches fürs Fahrzeug vordefinierte Spotlight aktiv sein soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Spotlight, 0: Spotlight Nr. 0, 1: Spotlight Nr. 1 usw.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Index des gewählten Farbschemas/Anstriches&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |M_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script ein [http://de.wikipedia.org/wiki/Drehmoment Drehmoment] auf die Räder übertragen. Hierbei die Summe anzugeben, welche auf alle als angetrieben ausgewiesene Achsen wirken &lt;br /&gt;
soll.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kNm = 1000 [http://de.wikipedia.org/wiki/Newtonmeter Nm]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |n_Wheel&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mittlere Raddrehzahl des Fahrzeuges&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Throttle&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Gaspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brake&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Bremspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Clutch&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stellung des Kupplungspedals&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Brakeforce&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber kann das Script die Gesamtbremskraft des Fahrzeuges vorgeben, welche auf die Räder wirkt. Sollte nicht gleichzeitig mit ''Axle_Brakeforce...'' verwendet werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche sich über die Raddrehung ergibt, entspricht der Tachoanzeige&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Velocity_Ground&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Geschwindigkeit, welche direkt relativ zum Grund gemessen wird, berücksichtigt kein Radschleudern oder -blockieren, entspricht der Anzeige auf einem GPS&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Km/h km/h]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |tank_percent&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tankinhalt, nur für die Anzeige auf der roten Informationsleiste. Die Betankung und Simulation eines leeren Tanks geschieht über einen Trigger bzw. muss im Script programmiert werden.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0..1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (nur ganze km)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |km&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |kmcounter_m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Stand des Kilometerzählers (zusätzliche Meter, läuft stets nur von 0m bis 999m; hinzu kommen die Kilometer von ''kmcounter_km'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |relrange&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zurückgelegte, relative Strecke. Wurde nur testweise für pfadfixierte Fahrzeuge eingeführt. Nicht benutzen!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |---&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Driver_Seat_VertTransl&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederung des federnden Fahrersitzes&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_Rotation_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehwinkel des jeweiligen Rades, z.B. für die Animation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wheel_RotationSpeed_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Drehzahl des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umdrehungen pro Minute&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Suspension_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfederungsweg des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Steering_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lenkwinkel des jeweiligen Rades&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Radiant_(Einheit) rad]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Springfactor_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Faktor, mit dem radweise die Federstärke angepasst werden kann, z.B. um Luftfederungen zu simulieren.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = keine, 1 = normale, 2 = doppelte Federkraft&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Axle_Brakeforce_0_L / ~_R ... ~_3_L / _R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ermöglicht Setzen der Bremskraft pro Rad. Sollte nicht gleichzeitig mit ''Brakeforce'' verwendet werden!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Newton_(Einheit) N]&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug_0 ... _5&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Debug-Variablen. Können im Debug-Modus in der Informationsleiste angezeigt werden, um auf diese Weise die Scripts zu testen.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |bliebig&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |A_Trans_X ... _Z&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Beschleunigungen im Fahrzeug, die durch die Fahrzeugbewegungen ausgelöst werden (beim Bremsen oder bei Kurvenfahrten usw.)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m/s²&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Blinker_L, ~_R&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Linker oder rechter Blinker aktiv&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: ein&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Light&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Fahrlicht, Standlicht, Lichthupe&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: Licht aus, 0.5: Standlicht an, 1: Fahrlicht an, 2: Fernlicht/Lichthupe an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Interiorlight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenbeleuchtung. Hierüber erfahren die einsteigenden Fahrgäste auch, ob es im Bus zu dunkel ist (sodass sie meckern dürfen).&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)*&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Brakelight&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Script soll Bremslicht einschalten&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Engine&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur für KI-Fahrzeuge: Aufforderung zum Ein- oder Ausschalten des Motors&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Motor ausschalten!, 0: egal/nicht-KI, 1: Motor einschalten!&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_target_index&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dient der Übergabe des Sollwertes des einzustellenden Zielschildes bei Aufruf des Menüs oder beim Umschildern der KI-Busse. Entspricht der Reihenfolge in der Hof-Datei; erster Eintrag = 0&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |target_index_int&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Über diese Variable setzt das Script, welches Zielschild am Bus zusehen ist und steuert hierüber insbesondere die Fahrgäste. Entspricht wie ''AI_target_index'' dem Index der Reihenfolge in der Hof-Datei.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI_Scheduled_AtStation&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Nur KI-Fahrzeuge, bidirektionale Kommunikation: Bei Erreichen einer Station setzt OMSI den Wert auf 1, sodass das Script mitgeteilt bekommt, dass die Türen geöffnet werden sollen. Wenn sich der Bus abfahrbereit machen soll, setzt OMSI den Wert auf -1. Wenn der Bus abfahrbereit ist (Türen geschlossen usw.), dann setzt das Script den Wert auf 0, sodass die KI den Bus weiterfahren lassen kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: Bus abfahrbereit machen, 0: Bus ist abfahrbereit, 1: Türen freigeben/öffnen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(X)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |AI&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Hierüber erfährt das Script, ob das Fahrzeug von der AI gesteuert wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Entry0_Open ... ~7_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Eingänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_Exit0_Open&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob die jeweiligen Ausgänge offen oder geschlossen sind.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: geschlossen, 1: offen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |GivenTicket&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, ob der ggf. vorhandene Fahrscheinautomat ein Ticket ausgegeben hat.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-1: kein Ticket, 0: Tickettyp 0, 1: Tickettyp 1, ...&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |humans_count&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Anzahl der Fahrgäste im Fahrzeug&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Period&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsperiode im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |FF_Vib_Amp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Setzt die Force-Feedback-Vibrationsamplitude im Lenkrad&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0...1&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_OutsideVol&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Teilt OMSI mit, wie stark der Außensound im Innenraum hörbar ist; verändert sich bspw. wenn eine Tür geöffnet wird.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: kaum hörbar, 1: wie draußen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Microphone&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Hardware-)Mikrofon aktiv sein?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Snd_Radio&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Soll das (Internet-)Radio laufen?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: aus, 1: an&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_Temp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Innenraumtemperatur für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |°C&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_absHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Absolute_Luftfeuchtigkeit Absolute Luftfeuchtigkeit] im Innenraum für die Beurteilung durch die Fahrgäste&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |g/m³&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Cabinair_relHum&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |[http://de.wikipedia.org/wiki/Luftfeuchtigkeit#Relative_Luftfeuchtigkeit Relative Luftfeuchtigkeit] im Innenraum, wird durch OMSI automatisch über die absolute Feuchtigkeit und die Innentemperatur berechnet.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = 0%, 1 = 100%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = maximal&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PrecipType&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Niederschlagstyp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = kein, 1 = Regen, 2 = Schnee&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dirt_Norm&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |allgemeiner Verdreckungszustand (Windschutzscheiben können sauberer sein und werden nur vom Script simuliert)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0 = sauber, 1 = total verdreckt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |DirtRate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |aktuelle Verdreckungsrate&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verdreckung / s, wobei eine Verdreckung = 1 bedeutet, dass die Verdreckung maximal ist.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |schedule_active&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist gerade ein Fahrplan aktiv? (Bspw. für Einblendung der Fahrplankarte)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_frontcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der vorderen Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_backcoupling&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Ist an der hinteren Kupplung etwas angekuppelt? (Eventuell spätere Benutzung zum Abkuppeln)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |train_me_reverse&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Steht dieses Fahrzeug rückwärts zum gesamten Fahrzeugverband?&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: nein, 1: ja&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*) Bidirektionale KI-Variablen: Handelt es sich um ein Userfahrzeug, kann das Script dem Hauptprogramm mitteilen, wie Licht, Blinker usw. gesetzt wurden. Handelt es sich aber um ein KI-Fahrzeug, teilt OMSI dem Script mit, wie die entsprechenden Zustände gesetzt werden müssen.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stringvariablen ====&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\stringvarlist_roadvehicle.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ident&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält das Kraftfahrzeugkennzeichen dieses Fahrzeugs (z.B. &amp;quot;B-V 3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |number&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält die Fahrzeugnummer (z.B. &amp;quot;3503&amp;quot;)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_route&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''(keine Verwendung)''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |act_busstop&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_setbusstop'' verwendet: Enthält dann den Namen der im Fahrplansystem aktiven Haltestelle.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |SetLineTo&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wird zusammen mit dem internen Trigger ''ai_scheduled_settarget'' verwendet: Enthält die einzustellende Liniennummer (oder Symbol) (bei Verwendung vom Zielschild-Menü oder beim Umschildern von KI-Bussen)&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |yard&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Name der Hofdatei des Fahrzeuges, bspw. damit das Scriptsystem den Dateinamen der Zielcode-Tabelle generieren kann.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |file_schedule&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Enthält den Dateinamen der Fahrplan-Bitmap, die zu der von diesem Fahrzeug gefahrenen Strecke gehört.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Menschen ===&lt;br /&gt;
&lt;br /&gt;
Siehe bitte auch Datei ''program\varlist_human.txt''!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Variablenname''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Beschreibung''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''Einheit''&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |''kein Schreibzugriff''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |LastMovedDist&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernung, die der Mensch seit dem letzten Durchlauf zurückgelegt hat. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |PAX_State&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zustand des Menschens. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |0: stehen, 1: gehen, 2: sitzen&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |HeightOfSeat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Höhe des Sitzes. Diese Eigenschaft wird in der Sitzposition gebraucht, um die Höhe der Füße korrekt gesetzt. Wurde für die alten Animationen gebraucht.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |m&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Colorscheme&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Tauschtextur-Index (&amp;quot;Farbschema&amp;quot;) des Menschens.&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Hauptseite&amp;diff=865</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Hauptseite&amp;diff=865"/>
		<updated>2014-02-11T15:15:07Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: Aktuell in Arbeit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font style=&amp;quot;font-size:1.2em;&amp;quot;&amp;gt;&lt;br /&gt;
'''Herzlich willkommen auf der deutschen Version von OMSIWiki!'''&lt;br /&gt;
&lt;br /&gt;
Hier geht's direkt zu einer der Hauptkategorien:&lt;br /&gt;
&lt;br /&gt;
* [[FAQs - Häufig gestellte Fragen]]&lt;br /&gt;
* [[:Kategorie:Busfahren in OMSI|Busfahren in OMSI]]&lt;br /&gt;
* Entwicklung von Addons:&lt;br /&gt;
** [[:Kategorie:Nachschlagewerk für Addon-Entwickler|Nachschlagewerk]]&lt;br /&gt;
** [[:Kategorie:Tutorials für Addon-Entwickler|Tutorials]]&lt;br /&gt;
** [[:Kategorie:Tipps und Tricks für Addon-Entwickler|Tipps und Tricks]]&lt;br /&gt;
* [[:Kategorie:Anschlussprojekte|Anschlussprojekte (z.B. Addon-Manager, OAT)]]&lt;br /&gt;
* [[:Kategorie:Addon-Präsentationen|Addon-Präsentationen]]&lt;br /&gt;
* [[:Kategorie:Hintergrundinformationen|Hintergrundinformationen]]&lt;br /&gt;
&lt;br /&gt;
* [[:Kategorie:Neuerungen OMSI 2|Neuerungen in OMSI 2]]&lt;br /&gt;
&lt;br /&gt;
'''Achtung: Vor dem Verfassen eigener Beiträge bitte zuerst die Regeln lesen!''' Weiter unten gibt es noch eine Ultra-Kurzanleitung für Neulinge.&lt;br /&gt;
&lt;br /&gt;
''Aktuell in Arbeit:''&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Aktualisieren auf OMSI 2 --[[Benutzer:Marcel Kuhnt|Marcel Kuhnt]] 16:15, 11. Feb. 2014 (MET)&lt;br /&gt;
* Umrüsten der [[FAQs - Häufig gestellte Fragen|FAQ]] auf OMSI 2 --[[Benutzer:MarvinK|MarvinK]] 12:27, 6. Jan. 2014 (MET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&lt;br /&gt;
Wir Entwickler von OMSI haben OMSIWiki eingerichtet, um eine bessere Plattform für alle Arten von Informationen rund um OMSI zu erhalten. Folgende Themengebiete sind von uns vorläufig vorgesehen:&lt;br /&gt;
&lt;br /&gt;
* Präsentation von Hintergrundinformationen über das Addon-Design von unserer Seite (Objekt- und Fahrzeugbar, Soundengine, Scriptengine usw.)&lt;br /&gt;
* Tipps und Tricks oder auch ganze Tutorials von Usern z.B. zum Erstellen von Repaints oder Mapbau würden unsere Kernthemen abrunden. Entweder als Ergänzung unserer oder als weiterreichende Artikel.&lt;br /&gt;
* Die Bedienung von OMSI und insbesondere der Busse könnte ein weiterer Themenkomplex sein. Zwar gibt es natürlich ein Handbuch für OMSI, dennoch gibt es vieleicht die eine oder andere Sache, die ausführlicher erklärt werden soll. Hier werden wir uns allerdings etwas zurückhalten.&lt;br /&gt;
* Weiterhin könnten hier bewährte Anschlussprojekte zu OMSI präsentiert werden, z.B. OAT oder der Addon-Manager. Höchstwahrscheinlich werden die zugehörigen Artikel dann von den Leitern oder treuesten Fans dieser Projekte geschrieben, wir werden uns hier ebenfalls zurückhalten.&lt;br /&gt;
* Ähnlich hierzu haben wir nichts gegen eine hochqualitative Präsentation von komplexen Addons; denkbar wäre hier z.B. die Bedienungsanleitung eines Addon-Busses oder die Beschreibung und Hinweise für die Fahrt durch eine Addon-Karte mit Fahrplänen und/oder Karten. Wo wir hier allerdings die Grenze setzen, steht noch nicht fest. Insbesondere sollen hier keine &amp;quot;Mini-Artikel&amp;quot; entstehen, wo nur ein Screenshot von einem Repaint und ein Download-Link präsentiert wird!&lt;br /&gt;
* Selbstverständlich dürfen hier auch gerne Hintergrundinformationen zu unserer Strecke oder unseren Bussen oder aber zu Addons gegeben werden (wie sah Spandau in der Realität 1989 aus? Wie wurde damals in Berlin Bus gefahren?). Es sollte sich aber um abgeschlossene und ernsthaft geschriebene Artikel handeln und es sollte definitiv ein Bezug zu OMSI vorhanden sein! Also keine schnell hingeschriebenen Tagesberichte von irgendeinem Busunternehmen, was keiner kennt und was auch nicht in OMSI mindestens als Addon simuliert werden kann.&lt;br /&gt;
&lt;br /&gt;
== Regeln ==&lt;br /&gt;
&lt;br /&gt;
=== Ist das Thema hier erwünscht? ===&lt;br /&gt;
&lt;br /&gt;
Der Idee von OMSIWiki entsprechend sollte jeder Artikel letztlich in eine der oben genannten Kategorien passen!&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Goldene Regel&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Zunächst die '''&amp;quot;goldene Regel&amp;quot;''': Bevor ein Artikel verfasst oder geändert wird, sollte stets geschaut werden, ob sich an den Regeln etwas geändert hat! Gerade in der Anfangszeit wird es sicher vorkommen, dass sich Regeln ändern oder neue hinzukommen.&lt;br /&gt;
&lt;br /&gt;
=== Erwünscht ===&lt;br /&gt;
&lt;br /&gt;
* Wenn ihr einen kleinen oder großen Fehler entdeckt (auch in einem unserer Artikel!), dann darf ihn jeder korrigieren! Aber nur, wenn ihr euch dabei auch sicher seid.&lt;br /&gt;
* Ihr findet einen Artikel z.B. im Addon-Handbuch zu trocken? Dann dürft ihr gerne ein kleines Beispiel ergänzen! Von mir weiß ich z.B., dass die Anschauung und Klarheit leidet, wenn ich viele und lange Texte schreibe!&lt;br /&gt;
* Ihr findet einen Fachbegriff, der nicht erklärt wird? Wenn es ein bisher nicht erklärter Begriff von OMSI ist, dürft ihr gerne einen Artikel anfertigen und ihn mit dem Fachbegriff verlinken; handelt es sich um einen allgemeinen Fachbegriff, dann reicht meist ein externer Link zu einem entsprechenden Artikel z.B. in der Wikipedia aus.&lt;br /&gt;
* Um zu vermeiden, dass euch bereits jemand anderes &amp;quot;dazwischen funkt&amp;quot;, obwohl euer Artikel noch gar nicht fertig ist, ergänzt bitte hierzu oben den Hinweis: &amp;quot;''Hinweis: Dieser Artikel befindet sich noch im Aufbau!''&amp;quot;. Dadurch wird auch vermieden, dass der unter Umständen erst halbfertige Artikel schon von jemandem übersetzt wird, sodass nach Fertigstellung der deutschen Version die englische noch unvollständig ist.&lt;br /&gt;
* Wenn euer Artikel auch ein englischsprachiges Pendant hat, dann verknüpft ihn bitte! Ein Blick ans Ende des Quelltextes ''dieser'' Seite zeigt euch, wie das geht! Hat er jedoch ''kein'' Pendant und muss demnach in der englischen OMSIWiki noch angelegt werden, so wäre ein Hinweis ganz oben nicht schlecht: &amp;quot;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&amp;quot; oder &amp;quot;''Hinweis: Die englische Version muss noch aktualisiert werden!''&amp;quot;&lt;br /&gt;
* Wenn ihr Spaß am Übersetzen habt, dann könnt ihr eine sehr wertvolle Hilfe für OMSIWiki sein! Wenn ihr einen dieser Hinweise entdeckt, scheut euch nicht, den Artikel in die englische OMSIWiki einzupflegen! Ihr solltet danach aber den Original-Autor informieren (damit er die Gelegenheit hat, einmal drüber zu schauen) und dann natürlich die beidseitige Verlinkung mit der deutschen Seite vornehmen und den Hinweis entfernen.&lt;br /&gt;
&lt;br /&gt;
=== Unerwünscht ===&lt;br /&gt;
&lt;br /&gt;
* '''Ganz wichtig: Der Name des Artikels muss wohlüberlegt gewählt werden, weil man den nicht mal eben ändern kann! Wer hier grob fahrlässig schlampt, fliegt raus!'''&lt;br /&gt;
* Schlechter Schreibstil! Was im Chat normal ist und im Forum zwangsweise geduldet wird, ist hier tabu: Bitte gebt euch etwas Mühe, wenn ihr hier einen Artikel verfasst!&lt;br /&gt;
* Werbung für unbekannte, kleine Projekte, Foren, virtuelle Gesellschaften etc. Der Sinn von OMSIWiki ist nicht die Werbung für Projekte! Es soll eine Informationsplattform sein!&lt;br /&gt;
&lt;br /&gt;
Hier dazu was Passendes zum schmunzeln: [http://meta.wikimedia.org/wiki/Wikipedia_Anti-Regeln Wikipedia-Anti-Regeln]&lt;br /&gt;
&lt;br /&gt;
=== Absprachen ===&lt;br /&gt;
&lt;br /&gt;
* Vor Beginn der Arbeit bitte oben bei &amp;quot;Aktuell in Arbeit&amp;quot; eine Zeile mit der geplanten Arbeit und eurer Signatur ergänzen. Nach Fertigstellung diesen wieder entfernen. Sollte jedoch dann gar kein Punkt mehr übrigbleiben, dann ein &amp;quot; * ''Nichts'' &amp;quot; stehen lassen.&lt;br /&gt;
* Wenn ihr größere Korrekturen an unseren Artikeln vornehmt, wär es natürlich gut, wenn ihr uns zumindest nachher darüber informiert, damit wir den Überblick behalten.&lt;br /&gt;
* Bevor ein neuer Artikel verfasst wird, kann es nicht schaden, kurz eine E-Mail an uns Administratoren zu schicken mit euren Planungen.&lt;br /&gt;
* Das Einführen neuer Kategorien hat grundstätzlich in Absprache mit den Administratoren zu geschehen.&lt;br /&gt;
&lt;br /&gt;
* Beachtet auch die Möglichkeit, mit den Autoren auf der Diskussionsseite zu diskutieren! Wie der &amp;quot;Quellcode&amp;quot; einer Diskussionsseite aussieht, seht ihr hier: [[Diskussion:OMSI_Addon_Tester_(OAT)]]. Und nicht vergessen: Die Signatur könnt ihr automatisch erzeugen mit &amp;lt;nowiki&amp;gt;--~~~~&amp;lt;/nowiki&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
=== Multilingualität ===&lt;br /&gt;
&lt;br /&gt;
OMSIWiki ist zweisprachig ausgelegt: Englisch und Deutsch. Wie beim großen Vorbild, der Wikipedia, können die Artikel beider Sprachen miteinander verbunden werden. Dies erfolgt auch auf selbem Wege wie bei Wikipedia. Selbstverständlich ist es erstrebenswert, beide Teile der OMSIWiki auf gleichem Stand zu halten - auch wenn das natürlich praktisch nie ganz der Fall sein kann.&lt;br /&gt;
&lt;br /&gt;
=== Zugriff ===&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zur Wikipedia müsst ihr angemeldet sein, um hier Schreibzugriff zu erhalten. Ich denke, dies ist nicht zu viel verlangt und hilft uns eine gewisse Kontrolle über das Verfassen von Artikeln zu behalten.&lt;br /&gt;
&lt;br /&gt;
== Ultra-Kurzhandbuch ==&lt;br /&gt;
&lt;br /&gt;
Ein paar Hinweise für Neulinge, die sich davor scheuen, das ganze Handbuch zu lesen. Wie &amp;quot;baut&amp;quot; man einen OMSIWiki-Artikel?&lt;br /&gt;
&lt;br /&gt;
* Signatur: Gibt's überm Editor-Fenster einen Button, sonst &amp;lt;nowiki&amp;gt;--~~~~&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
* Anlegen einer neuen Seite: Nachdem ihr im Forum oder uns Bescheid gegeben habt, gebt ihr den ''wohlüberlegten'' Titel der neuen Seite ins ''Suche''-Feld ein. Es erscheint dann der Vorschlag, ob man diese Seite enlegen möchte? Ein &amp;quot;ja&amp;quot; führt dich dann zum leeren Editorfenster.&lt;br /&gt;
* Eine sinnvolle Gliederung kann folgendermaßen erstellt werden:&lt;br /&gt;
 == Hauptüberschrift ==&lt;br /&gt;
 === Subüberschrift ===&lt;br /&gt;
 ==== Sub-Sub-Überschrift ==== usw.&lt;br /&gt;
* Aufzählungen wie diese werden folgendermaßen durchgeführt:&lt;br /&gt;
 * Aufzählungspunkt&lt;br /&gt;
 * Aufzählungspunkt&lt;br /&gt;
 ** Sub-Aufzählungspunkt&lt;br /&gt;
* Ein # statt einem * führt zu numerierten Aufzählungen.&lt;br /&gt;
* Fett- und Kursivschreibung wird mittels Apostrophen markiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
''Kursiv''&lt;br /&gt;
'''Fett'''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Die Zuweisung einer Kategorie (im Beispiel der Kategorie &amp;quot;Busfahren in OMSI&amp;quot;) erfolgt ganz am Ende des Artikels mit &amp;lt;nowiki&amp;gt;[[Kategorie:Busfahren in OMSI]]&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen: [http://meta.wikimedia.org/wiki/Hilfe:Handbuch?uselang=de meta.wikimedia.org/wiki/Hilfe:Handbuch]&lt;br /&gt;
&lt;br /&gt;
== Historie ==&lt;br /&gt;
&lt;br /&gt;
* 8. September 2011 - Marcel Kuhnt: Einrichten der deutschen OMSIWiki und Verlinkung mit der englischen.&lt;br /&gt;
* 13. September 2011 - Marcel Kuhnt: OMSIWiki öffentlich angekündigt.&lt;br /&gt;
&lt;br /&gt;
== Links rund ums Thema OMSI ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.omnibussimulator.de www.omnibussimulator.de] - offizielle Seite von OMSI, dem Omnibussimulator&lt;br /&gt;
* [http://www.omnibussimulator.de/forum/ www.omnibussimulator.de/forum/] - offizielles OMSI-Forum&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
&lt;br /&gt;
[[Technische Informationen zum MediaWiki]]&lt;br /&gt;
&lt;br /&gt;
[[en:Main Page]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=864</id>
		<title>Scriptsystem</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=864"/>
		<updated>2014-02-11T10:49:56Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.0 - 2.0''&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem in OMSI ermöglicht es, dass Szenerieobjekte und vor allem Fahrzeuge mit individuellen Systemen ausgestattet werden können, die über Variablen und Funktionsaufrufe mit dem Hauptprogramm und der Grafik- und Soundengine kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der hier beschriebene Stand des Scriptsystems entspricht OMSI Version 1.01.&lt;br /&gt;
&lt;br /&gt;
== Dateien des Scriptsystems ==&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem umfasst folgende Dateien:&lt;br /&gt;
&lt;br /&gt;
* Scriptdateien mit ausführbarem Code (*.osc)&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien im OMSI\program-Verzeichnis zur Definition von Systemdateien und vordefinierten Dateien&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien zur Definition von Uservariablen&lt;br /&gt;
* Constfile-Dateien zur Definition von Userkonstanten und Funktionstabellen&lt;br /&gt;
&lt;br /&gt;
Abgesehen von den Dateien zur Definition von Systemvariablen müssen alle benötigten Dateien für jedes Fahrzeug/Szenerieobjekt (im folgenden kurz: Objekt) in dessen [[Konfigurationsdatei]] angemeldet werden.&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es die Befehle ''[script]'', ''[varnamelist]'', ''[stringvarnamelist]'' und ''[constfile]''. Der erste Eintrag jedes Befehls ist die Anzahl der Dateien, darauf folgen die entsprechenden Dateinamen (inkl. Pfad relativ zur Konfigurationsdatei. Die Namen der Dateien sind nicht relevant, solange sie korrekt in die Listen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Auf die Funktion der jeweiligen Dateien wird im Laufe der Beschreibung der Scriptsprache eingegangen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Scriptsprache ==&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Scriptsystem arbeitet mit der [http://de.wikipedia.org/wiki/Umgekehrte_Polnische_Notation umgekehrten Polnischen Notation]. Hierbei steht der Operator hinter den beiden Operanden; vereinfacht gesagt bedeutet es, dass die Operation &amp;quot; 1 + 2 &amp;quot; stattdessen folgendermaßen notiert wird: &amp;quot; 1 2 + &amp;quot;. Ein komplizierteres Beispiel: &amp;quot; (1 + 2) * (4 + 5) &amp;quot; entspricht &amp;quot; 1 2 + 4 5 + * &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist die Tatsache, dass die OMSI-Textdateien und insbesondere die Scriptsprache [http://de.wikipedia.org/wiki/Case_sensitivity Case-Sensitive] ist! D.h. es ist immer auf die Groß- und Kleinschreibung zu achten!&lt;br /&gt;
&lt;br /&gt;
=== Stack und Register ===&lt;br /&gt;
&lt;br /&gt;
Bei der Verarbeitung der Scripts verfügt OMSI über einen String-Stack und einen [http://de.wikipedia.org/wiki/Stapelspeicher Stack] für [http://de.wikipedia.org/wiki/Gleitkommazahl Gleitkommazahlen]. Im folgenden ist mit &amp;quot;Stack&amp;quot; immer der Stack für Gleitkommazahlen gemeint, andernfalls wird von &amp;quot;String-Stack&amp;quot; gesprochen.&lt;br /&gt;
&lt;br /&gt;
Beide Stacks enthält 8 Speicherplätze, welche von 0 bis 7 durchnumeriert sind. Jede Script-Operation kann nun einen oder mehrere neue Werte in einen der Stacks einfügen (push), wobei der neue Wert auf die Position 0 gesetzt wird und alle folgenden Werte &amp;quot;einen Platz aufrücken&amp;quot;, oder sie kann einen oder mehrere Werte aus dem Stack herausziehen (pop/pull) oder lediglich auslesen (peek).&lt;br /&gt;
&lt;br /&gt;
Fürs temporäre Ablegen von Zahlen gibt es zusätzlich acht indizierte Speicherplätze, welche direkt geschrieben oder gelesen werden können, die sich im sogenannten Register befinden - hier gibt es jedoch nur einen Register für die Gleitkommazahlen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel-Operationen ===&lt;br /&gt;
&lt;br /&gt;
Beispiel: Die Operation 1 + 4. Der Code hierfür lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 4 +&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle wird demonstriert, wie sich hierbei der Stack verhält:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			5	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ausgangszustand ist der Stack nur mit Nullen (oder unbekannten/zufälligen Werten) gefüllt. Der Befehl &amp;quot;1&amp;quot; schiebt die Eins in den obersten Stackplatz und schiebt alle weiteren Werte (Nullen) nach hinten. Der Befehl &amp;quot;4&amp;quot; schiebt die Vier auf den 0. Platz und alle folgenden Werte, also insbesondere die Eins auf den jeweils nächsten Platz. Im nächsten Schritt &amp;quot;+&amp;quot; werden die obersten beiden Werte aus dem Stack herausgezogen - also 4 und 1 - und summiert. Das Ergebnis (5) wird wiederum in den Stack geschoben. Die beiden ursprünglichen Zahlen sind im Stack nicht mehr vorhanden.&lt;br /&gt;
&lt;br /&gt;
Ein zweites Beispiel:&lt;br /&gt;
&lt;br /&gt;
(1 + 2) * (4 + 5) muss wie bereits erwähnt folgendermaßen notiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 2 + 4 5 + *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Stack verhält sich somit folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;2&amp;quot;			2	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			3	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	3	0	0	0&lt;br /&gt;
&amp;quot;5&amp;quot;			5	4	3	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			9	3	0	0	0&lt;br /&gt;
&amp;quot;*&amp;quot;			27	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Ende befindet sich also das korrekte Ergebnis auf Stackplatz 0!&lt;br /&gt;
&lt;br /&gt;
=== Gleitkommazahlen und Strings ===&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Skriptsystem arbeitet ausschließlich mit den Datentypen Gleitkommazahl (einfache Präzision mit Vorzeichen) und String. Beide Datentypen haben getrennte Stacks. Deshalb laufen die Verarbeitung von Gleitkommazahlen und Strings im Allgemeinen unabhängig nebeneinander. Jedoch kann es natürlich vorkommen, dass bestimmte Funktionen z.B. Zahlen in Strings umwandeln und somit gleichzeitig auf beide Teilbereiche zugreifen.&lt;br /&gt;
&lt;br /&gt;
Auf boolische Variablen wurde verzichtet. Für boolische Werte werden im Allgemeinen die Zahlenwerte 0 und 1 verwendet.&lt;br /&gt;
&lt;br /&gt;
== Script-Schlüsselwörter ==&lt;br /&gt;
&lt;br /&gt;
=== Kommentare ===&lt;br /&gt;
&lt;br /&gt;
Kommentierungen sind nur möglich, indem in der auszukommentierenden Zeile ganz vorne ein Apostroph ['] gesetzt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Ich bin eine Kommentarzeile&lt;br /&gt;
   'Ich bin KEINE Kommentarzeile!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstiegs- und Ausstiegspunkte, Makros und Trigger ===&lt;br /&gt;
&lt;br /&gt;
Alle Befehle müssen zwischen einem Einstiegs- und einem Ausstiegspunkt liegen.&lt;br /&gt;
&lt;br /&gt;
Der Einstiegspunkt wird durch eins der folgenden Schlüsselwörter gekennzeichnet:&lt;br /&gt;
&lt;br /&gt;
* {frame} Im Laufe jedes Frames ruft OMSI über diesen Einstiegspunkt die frameweise Scriptverarbeitung auf, sofern er vorhanden ist.&lt;br /&gt;
* {init} Bei der Initialisierung ruft OMSI über diesen Einstiegspunkt die Script-Initialisierung auf.&lt;br /&gt;
* {frame_ai} Hierbei handelt es sich um eine Variante des {frame}-Einstiegspunktes, welcher bei Fahrzeugen dann aufgerufen wird, wenn diese nicht im Fokus des Benutzers stehen, z.B. wenn sie als KI-Fahrzeug unterwegs sind. Ist dieser Einstiegspunkt jedoch nicht vorhanden sondern nur {frame}, dann wird dieser alternativ aufgerufen. Bei Szenerieobjekten kommt dieser Eintrittspunkt nicht zur Anwendung.&lt;br /&gt;
* {macro:''name''} Dieser Einstiegspunkt ruft ein Subsektion (Makro) auf, welche '''stets nach dem Aufruf''' definiert werden muss.&lt;br /&gt;
* {trigger:''name''} Dieser Einstiegspunkt wird vom Hauptprogramm aufgerufen, wenn der Benutzer die Tastenkombination oder das Maus-Event mit der Bezeichnung ''name'' aufruft - es gibt auch bestimmte Trigger, die direkt vom Hauptprogramm aufgerufen werden, z.B. wenn OMSI bei KI-Bussen die Anzeige wechselt u.Ä.&lt;br /&gt;
&lt;br /&gt;
{end} ist der universelle Ausstiegspunkt. Er muss stets den Block abschließen, der mit einem der obigen Befehle eröffnet wird.&lt;br /&gt;
&lt;br /&gt;
==== Makroaufruf ====&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Makros erfolgt über (M.L.''name''). Der Aufruf des Makros muss ''immer'' vor dessen Definition erfolgen. Andernfalls meldet OMSI, dass das Makro nicht gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
==== Aufteilung des Scripts in mehrere Dateien ====&lt;br /&gt;
&lt;br /&gt;
Bei einfachen Scripts (z.B. bei reinen KI-Fahrzeugen oder Szenerieobjekten) reicht es im Allgemeinen eine *.sco-Datei zu erstellen, welche über einen {frame}...{end}- und ggf. einen {init}...{end}-Block verfügt.&lt;br /&gt;
&lt;br /&gt;
Handelt es sich jedoch um ein komplettes Fahrzeugscript, dann empfiehlt es sich für die verschiedenen Subsysteme getrennte Dateien anzulegen. Hierbei sollte folgendermaßen vorgegangen werden:&lt;br /&gt;
&lt;br /&gt;
* Es gibt ein Hauptscript und die nötigen Subsystemdateien. Die Hauptdatei enthält dabei die {frame}- und {init}-Blöcke, die jedoch nur Makros aufrufen, welche in den Subsystemdateien definiert sind.&lt;br /&gt;
* Für jedes Subsystem gibt es eine *.sco-Datei und je nach Bedarf eine eigene Varlist und Constfile mit den zum System gehörenden Variablen. Außerdem werden auch hier die Trigger für die Tastenbefehle einsortiert.&lt;br /&gt;
* Die Makros sollten sinnvollerweise folgendermaßen benannt werden: {macro:''subsystem''_frame} und {macro:''subsystem''_init}.&lt;br /&gt;
* Damit die Makros vom Hauptscript aufgerufen werden, muss dieses in der Liste der Scripts in der Objekt-Konfigurationsdatei als erstes aufgerufen werden. Die Reihenfolge der Scripts untereinander muss ebenfalls so gewählt werden, dass alle dateiübergreifenden Makroaufrufe stets vor der jeweiligen Makrodefinition stehen.&lt;br /&gt;
&lt;br /&gt;
Die Einschränkung, dass Makros immer hinter dem Aufruf definiert werden müssen, kann zwar bisweilen hinderlich sein, ist aber ein sehr wirksamer Schutz gegen Zirkelschlüsse und Endlosschleifen.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
&lt;br /&gt;
Wie schon geschrieben wurde, kann ein {trigger:''name''}...{end}-Abschnitt durch verschiedene Möglichkeiten aus dem Hauptprogramm heraus aufgerufen werden. Hierzu zählen:&lt;br /&gt;
&lt;br /&gt;
* Auslösung per Tastatur. Wurde die Tastenkombination mit dem Namen ''tastkomb'' bezeichnet, wird {trigger:tastkomb} aufgerufen, wenn die Taste gedrückt wird und {trigger:tastkomb_off}, wenn die Taste losgelassen wird.&lt;br /&gt;
* Auslösung per Maus. Wurde ein Mesh angeklickt mit der [mouseevent]-Bezeichnung ''mouse_ev'', so wird {trigger:mouse_ev} aufgerufen, wenn die Maustaste gedrückt wird, {trigger:mouse_ev_drag}, während die Maustaste gehalten wird und {trigger:mouse_ev_off}, wenn die Maustaste losgelassen wird.&lt;br /&gt;
* Außerdem gibt es noch eine Reihe von [[System-Trigger|System-Triggern]].&lt;br /&gt;
&lt;br /&gt;
=== Operationen ===&lt;br /&gt;
&lt;br /&gt;
==== Stack-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%stackdump%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt eine Dialogbox mit dem Gleitkomma-Stackinhalt aus. Sollte deshalb natürlich nur zu Debug-Zwecken eingesetzt werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s0, s1, ..., s7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichern des aktuellen Stackwertes im durch die Ziffer angegebenen Register. Der Wert verbleibt hierbei im Stack&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |l0, l1, ..., l7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Laden des entsprechenden Registerwertes und Verschiebung in den Stack. Registerwert bleibt erhalten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den obersten Stackwert; alle weiteren Stackwerte rücken nach hinten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$msg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt den obersten String-Stack-Wert in die Debug-Zeile von OMSI - egal, ob es sich um ein User-, KI-Fahrzeug oder Szenerieobjekt handelt.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den Stringstack-Wert analog zu &amp;quot;d&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Logische Operationen ====&lt;br /&gt;
&lt;br /&gt;
Die logischen Operationen arbeiten nach dem Prinzip 0 = FALSE, alles andere ist TRUE.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;amp;&amp;amp;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |UND, d.h. wenn einer der beiden obersten Stackwerte gleich 0 ist, ist das Ergbnis 0, sonst 1.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ODER&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verneinung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Vergleichsoperationen ====&lt;br /&gt;
&lt;br /&gt;
Die Vergleichsoperationen vergleichen die Werte in den beiden jeweils obersten Stackplätzen und fügen dann je nach Ergebnis eine &amp;quot;1&amp;quot; oder &amp;quot;0&amp;quot; im obersten Stackplatz ein. Die Größer-/Kleinerzeichen stehen dabei entsprechend für der Reihenfolge, in der die Werte zuvor angegeben wurden. Das bedeutet:&lt;br /&gt;
&lt;br /&gt;
4 2 &amp;gt; ist wahr, weil die intern durchgeführte Operation in diesem Fall &amp;quot;4 &amp;gt; 2&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls die obersten Stackwerte identisch sind, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls Stackwert 1 kleiner ist als Stackwert 0, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... kleiner als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wie &amp;quot;=&amp;quot; nur für die obersten beiden Stringstack-Plätze.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner als (String). Die Ungleich-Operationen bei Strings prüfen auf alphabetische Reihenfolge. &amp;quot;A&amp;quot; ist also kleiner als &amp;quot;B&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer als (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner oder gleich (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer oder gleich (String).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Mathematische Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Plus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Minus (Stackplatz 1 - Stackplatz 0, also vom Prinzip her wie bei den Größer/Kleiner-Operationen)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mal&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |geteilt (Stackplatz 1 / Stackplatz 0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rest der Division (folgendermaßen erweitert für Gleitkommazahlen: Stack0 - trunc(Stack1 / Stack0) * Stack1 )&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/-/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Vorzeichenwechsel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sinus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arcsin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Sinus ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arctan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Tangens ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |min&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des kleineren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |max&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des größeren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |exp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Exponentialfunktion zur Basis e (e^Stack0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqrt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadratwurzel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadrat&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sgn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Vorzeichens; je nachdem entweder -1, 0 oder 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |pi&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kreiszahl pi&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |random&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ganzzahlige Zufallszahl 0 &amp;lt;= x &amp;lt; Stack0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |abs&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Absolutwertes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |trunc&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Abrunden auf nächste ganze Zahl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;''bla''&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfügen des Strings ''bla'' auf dem obersten String-Stack-Platz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zusammenfügen zweier Strings. &amp;quot;Omnibus&amp;quot; &amp;quot;simulator&amp;quot; $+ ergibt &amp;quot;Omnibussimulator&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Der oberste Stack-String wird sooft wiederholt, bis die resultierende Zeichenlänger gerade noch kleiner oder gleich des obersten Stackwertes ist. Beispiel: &amp;quot;nu&amp;quot; 6 $* ergibt &amp;quot;nununu&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$length&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Zeichen des obersten Stack-String zurück in den Stack. &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutBegin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen vorne vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutEnd&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen hinten vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthR&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' rechtsbündig an, indem am Anfang Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthC&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' zentriert an, indem am Anfang und am Ende Zeichen entfernt oder Leerzeichen ergänzt werden ''(ab OMSI2)''.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthL&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' linksbündig an, indem am Ende Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rundet ''stack0'' ab und wandelt die resultierende Ganzzahl um in einen String.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStrEnh&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die erweiterte Version von IntToStr. Hierbei wird der oberste Stack-String verwendet, um das Format der String-Umwandlung zu bestimmen: Das erste Zeichen im String wird zum Auffüllen der fehlenden Zeichen verwendet, die folgenden Zeichen müssen eine Zahl ergeben, die die Stellen angibt. Beispiel: 35 &amp;quot; 5&amp;quot; $IntToStrEnh führt zu &amp;quot;   35&amp;quot; und 123456789 &amp;quot;011&amp;quot; $IntToStrEnh führt zu &amp;quot;00123456789&amp;quot;. Falls ein Fehler vorliegt, wird &amp;quot;ERROR&amp;quot; ausgegeben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$StrToFloat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wandelt den obersten Stack-String in eine Gleitkommazahl um, falls möglich. Andernfalls wird eine -1 geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$RemoveSpaces&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernt sämtliche Leerzeichen vor und nach dem eigentlichen String. Aus &amp;quot;   Spandau Freudstr    &amp;quot; wird &amp;quot;Spandau Freudstr&amp;quot; ''(ab OMSI2)''.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variablenzugriff ===&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden in Systemvariablen und in lokale Variablen. Die Systemvariablen gelten OMSI-weit, die lokalen Variablen werden zum Fahrzeug/Objekt zugehörig gespeichert.&lt;br /&gt;
&lt;br /&gt;
Bei den lokalen Variablen gibt es stets einen Grundstamm an Variablen, welcher von OMSI vordefiniert werden. Darüber hinaus können beliebig viele Variablen mit Hilfe der Varlist-Dateien ergänzt werden. Außerdem gibt es seit OMSI2 die Variante, dass man die Variable zwar selbst definieren muss, sie dann aber trotzdem mit einem OMSI-Internen Zustand verbunden wird (&amp;quot;ondemand-vordefinierte Variablen&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.S.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die Systemvariable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale Variable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale String-Variable ''varname'' in den obersten String-Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten Stackplatz in die lokale Variable ''varname''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten String-Stackplatz in die lokale String-Variable ''varname''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung der einzelnen Systemvariablen und der vordefinierten lokalen Variablen finden Sie hier: [[System- und vordefinierte lokalen Variablen]]&lt;br /&gt;
&lt;br /&gt;
=== Konstanten und Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Lokale Konstanten und [http://de.wikipedia.org/w/index.php?title=Datei:Linear_interpolation.svg&amp;amp;filetimestamp=20080226155013 stückweise definierte lineare Funktionen] können in den Konstantendateien (''constfiles'', ''~_constfile.txt'') definiert werden. Der Aufbau jeder Konstantendatei entspricht der der [[Konfigurationsdateien|Konfigurationsdatei]]. Es gibt lediglich drei Schlüsselwörter. Zu beachten ist: Bisher können keine Strings, sondern nur Fließkommazahlen als Konstanten definiert werden.&lt;br /&gt;
&lt;br /&gt;
[const] definiert eine neue Konstante und gibt ihren Wert an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
name&lt;br /&gt;
wert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
leistung&lt;br /&gt;
200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[newcurve] leitet die Definition einer neuen (stückweise linearen) Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[pnt] fügt der zuvor mit [newcurve] definierten Funktion ein neues x-y-Paar hinzu. Jede Funktion sollte normalerweise über mindestens zwei Paare verfügen. Die Reihenfolge der Paare ''muss'' in x-Richtung aufsteigend sein!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
Drehzahl_Drehmoment_Kennlinie&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
50&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
300&lt;br /&gt;
400&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
1000&lt;br /&gt;
600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Konstanten werden über den Befehl (C.L.''konstantenname'') in den Stack geladen.&lt;br /&gt;
&lt;br /&gt;
Funktionen werden über den Befehl (F.L.''funktionsname'') aufgerufen. Dabei wird stets der zuvor auf oberster Stackposition befindliche Wert als x-Parameter übergaben und der resultierende y-Wert der Funktion stattdessen auf dem obersten Stackplatz gespeichert. Bewegt sich der x-Wert außerhalb der Grenzen der durch die [pnt]-Einträge definierten Eckpunkte, wird stets der y-Wert des nächstliegenden Eckpunktes verwendet. Die Funktion wird also vor dem ersten und hinter dem letzten Eckpunkt ins Unendliche waagerecht verlängert.&lt;br /&gt;
&lt;br /&gt;
=== Sound-Trigger ===&lt;br /&gt;
&lt;br /&gt;
Soundtrigger sind nicht mit den weiter oben erwähnten Triggern zu verwechseln!&lt;br /&gt;
&lt;br /&gt;
Sie stellen vielmehr eine Möglichkeit dar, direkt einen gewünschten Sound abzuspielen. Hierbei gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
(T.L.''soundtriggername'') ist ein einfacher Soundtrigger. Der so markierte Sound wird (einmalig) abgespielt.&lt;br /&gt;
&lt;br /&gt;
(T.F.''soundtriggername'') ist ein Soundtrigger mit Dateiwechselfunktion. Hierbei wird der oberste Stackstring ausgelesen und als Dateiname verwendet, wobei der Dateipfad relativ zum Sound-Ordner des Objektes interpretiert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Angenommen, die Sounddatei lautet &amp;quot;diese.wav&amp;quot; und ist mit dem Trigger ''MeinTrigger'' verknüpft, dann spielt&lt;br /&gt;
&lt;br /&gt;
 (T.L.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;diese.wav&amp;quot; ab und&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;andere.wav&amp;quot; (T.F.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;andere.wav&amp;quot;. Alternativ zu (T.L.''soundtriggername'') kann beim Befehl (T.F.''soundtriggername'') auch ein &amp;quot;Nullstring&amp;quot; im Stack liegen (also der String: &amp;quot;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== System-Makros ===&lt;br /&gt;
&lt;br /&gt;
Die bisherigen Methoden erlauben dem Script folgende Kommunikationsmöglichkeiten mit OMSI:&lt;br /&gt;
&lt;br /&gt;
* Lesen von Werten über System- und vordefinierte lokale Variablen&lt;br /&gt;
* Schreiben von Werten über ebendiese&lt;br /&gt;
* Empfangen von Tastatur-, Maus- oder Systemtriggern&lt;br /&gt;
&lt;br /&gt;
Schließlich gibt es noch eine weitere Methode, um mit dem Hauptprogramm zu kommunizieren, die sogenannten System-Makros, gelegentlich auch unpräzise als &amp;quot;Callback-Funktionen&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
In bestimmten Situationen ist es nötig, dass das Script Werte von OMSI bekommt, die in größeren Datenbanken vorliegen und daher nicht über vordefinierte Variablen übermittelt werden können, z.B. die Inhalte der Hofdatei. Hier kommen nun die System-Makros ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Diese arbeiten scriptseitig sehr ähnlich wie die lokalen, selbstdefinierten Makros: Der Aufruf (M.V.''macroname'') ruft das System-Makro auf (&amp;quot;V&amp;quot; stand ursprünglich für &amp;quot;Vehicle-Macro&amp;quot;, gilt aber genauso auch in Szenerieobjekten), das sich während der Ausführung Werte aus den beiden Stacks holt und/oder in diese schreibt. Eine Aufstellung aller System-Makros findet sich hier: [[System-Makros]]&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen und Schleifen ===&lt;br /&gt;
&lt;br /&gt;
Die einzige Steuerung des Programmablaufs ist zur Zeit nur mit der IF-Bedingung möglich.&lt;br /&gt;
&lt;br /&gt;
==== IF-Bedingung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dass erst die Bedingung formuliert wird und dann erst das Schlüsselwort {if} folgt, sollte einleuchten: Zunächst muss an oberster Stelle des Stacks der Wert abgelegt werden und erst dann folgt das Schlüsselwort {if}, welches diesen Wert prüft. Hierbei bedeutet ähnlich wie bei &amp;amp;&amp;amp; und || Gleichheit mit Null gleichbedeutend mit ''False'', alle anderen Werte bedeuten ''True''.&lt;br /&gt;
&lt;br /&gt;
Wenn also im obigen Beispiel ''bla'' den Wert 1 hat, wird ''blub'' auf den Wert 5 gesetzt, andernfalls auf den Wert 7.&lt;br /&gt;
&lt;br /&gt;
Verschachtelungen der IF-Bedingung dienen als Ersatz für die (nicht vorhandenen) &amp;quot;Else-If&amp;quot;-Konstruktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
    (L.L.bla) 5 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 5 ist:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        13&lt;br /&gt;
    {endif}&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist insbesondere auf das doppelte {endif} zu achten! Hier gilt:&lt;br /&gt;
&lt;br /&gt;
* bla = 1 ==&amp;gt; blub = 5&lt;br /&gt;
* bla = 5 ==&amp;gt; blub = 7&lt;br /&gt;
* sonst   ==&amp;gt; blub = 13&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=863</id>
		<title>Scriptsystem</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=863"/>
		<updated>2014-02-11T10:49:18Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Variablenzugriff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem in OMSI ermöglicht es, dass Szenerieobjekte und vor allem Fahrzeuge mit individuellen Systemen ausgestattet werden können, die über Variablen und Funktionsaufrufe mit dem Hauptprogramm und der Grafik- und Soundengine kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der hier beschriebene Stand des Scriptsystems entspricht OMSI Version 1.01.&lt;br /&gt;
&lt;br /&gt;
== Dateien des Scriptsystems ==&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem umfasst folgende Dateien:&lt;br /&gt;
&lt;br /&gt;
* Scriptdateien mit ausführbarem Code (*.osc)&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien im OMSI\program-Verzeichnis zur Definition von Systemdateien und vordefinierten Dateien&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien zur Definition von Uservariablen&lt;br /&gt;
* Constfile-Dateien zur Definition von Userkonstanten und Funktionstabellen&lt;br /&gt;
&lt;br /&gt;
Abgesehen von den Dateien zur Definition von Systemvariablen müssen alle benötigten Dateien für jedes Fahrzeug/Szenerieobjekt (im folgenden kurz: Objekt) in dessen [[Konfigurationsdatei]] angemeldet werden.&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es die Befehle ''[script]'', ''[varnamelist]'', ''[stringvarnamelist]'' und ''[constfile]''. Der erste Eintrag jedes Befehls ist die Anzahl der Dateien, darauf folgen die entsprechenden Dateinamen (inkl. Pfad relativ zur Konfigurationsdatei. Die Namen der Dateien sind nicht relevant, solange sie korrekt in die Listen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Auf die Funktion der jeweiligen Dateien wird im Laufe der Beschreibung der Scriptsprache eingegangen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Scriptsprache ==&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Scriptsystem arbeitet mit der [http://de.wikipedia.org/wiki/Umgekehrte_Polnische_Notation umgekehrten Polnischen Notation]. Hierbei steht der Operator hinter den beiden Operanden; vereinfacht gesagt bedeutet es, dass die Operation &amp;quot; 1 + 2 &amp;quot; stattdessen folgendermaßen notiert wird: &amp;quot; 1 2 + &amp;quot;. Ein komplizierteres Beispiel: &amp;quot; (1 + 2) * (4 + 5) &amp;quot; entspricht &amp;quot; 1 2 + 4 5 + * &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist die Tatsache, dass die OMSI-Textdateien und insbesondere die Scriptsprache [http://de.wikipedia.org/wiki/Case_sensitivity Case-Sensitive] ist! D.h. es ist immer auf die Groß- und Kleinschreibung zu achten!&lt;br /&gt;
&lt;br /&gt;
=== Stack und Register ===&lt;br /&gt;
&lt;br /&gt;
Bei der Verarbeitung der Scripts verfügt OMSI über einen String-Stack und einen [http://de.wikipedia.org/wiki/Stapelspeicher Stack] für [http://de.wikipedia.org/wiki/Gleitkommazahl Gleitkommazahlen]. Im folgenden ist mit &amp;quot;Stack&amp;quot; immer der Stack für Gleitkommazahlen gemeint, andernfalls wird von &amp;quot;String-Stack&amp;quot; gesprochen.&lt;br /&gt;
&lt;br /&gt;
Beide Stacks enthält 8 Speicherplätze, welche von 0 bis 7 durchnumeriert sind. Jede Script-Operation kann nun einen oder mehrere neue Werte in einen der Stacks einfügen (push), wobei der neue Wert auf die Position 0 gesetzt wird und alle folgenden Werte &amp;quot;einen Platz aufrücken&amp;quot;, oder sie kann einen oder mehrere Werte aus dem Stack herausziehen (pop/pull) oder lediglich auslesen (peek).&lt;br /&gt;
&lt;br /&gt;
Fürs temporäre Ablegen von Zahlen gibt es zusätzlich acht indizierte Speicherplätze, welche direkt geschrieben oder gelesen werden können, die sich im sogenannten Register befinden - hier gibt es jedoch nur einen Register für die Gleitkommazahlen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel-Operationen ===&lt;br /&gt;
&lt;br /&gt;
Beispiel: Die Operation 1 + 4. Der Code hierfür lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 4 +&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle wird demonstriert, wie sich hierbei der Stack verhält:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			5	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ausgangszustand ist der Stack nur mit Nullen (oder unbekannten/zufälligen Werten) gefüllt. Der Befehl &amp;quot;1&amp;quot; schiebt die Eins in den obersten Stackplatz und schiebt alle weiteren Werte (Nullen) nach hinten. Der Befehl &amp;quot;4&amp;quot; schiebt die Vier auf den 0. Platz und alle folgenden Werte, also insbesondere die Eins auf den jeweils nächsten Platz. Im nächsten Schritt &amp;quot;+&amp;quot; werden die obersten beiden Werte aus dem Stack herausgezogen - also 4 und 1 - und summiert. Das Ergebnis (5) wird wiederum in den Stack geschoben. Die beiden ursprünglichen Zahlen sind im Stack nicht mehr vorhanden.&lt;br /&gt;
&lt;br /&gt;
Ein zweites Beispiel:&lt;br /&gt;
&lt;br /&gt;
(1 + 2) * (4 + 5) muss wie bereits erwähnt folgendermaßen notiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 2 + 4 5 + *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Stack verhält sich somit folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;2&amp;quot;			2	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			3	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	3	0	0	0&lt;br /&gt;
&amp;quot;5&amp;quot;			5	4	3	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			9	3	0	0	0&lt;br /&gt;
&amp;quot;*&amp;quot;			27	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Ende befindet sich also das korrekte Ergebnis auf Stackplatz 0!&lt;br /&gt;
&lt;br /&gt;
=== Gleitkommazahlen und Strings ===&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Skriptsystem arbeitet ausschließlich mit den Datentypen Gleitkommazahl (einfache Präzision mit Vorzeichen) und String. Beide Datentypen haben getrennte Stacks. Deshalb laufen die Verarbeitung von Gleitkommazahlen und Strings im Allgemeinen unabhängig nebeneinander. Jedoch kann es natürlich vorkommen, dass bestimmte Funktionen z.B. Zahlen in Strings umwandeln und somit gleichzeitig auf beide Teilbereiche zugreifen.&lt;br /&gt;
&lt;br /&gt;
Auf boolische Variablen wurde verzichtet. Für boolische Werte werden im Allgemeinen die Zahlenwerte 0 und 1 verwendet.&lt;br /&gt;
&lt;br /&gt;
== Script-Schlüsselwörter ==&lt;br /&gt;
&lt;br /&gt;
=== Kommentare ===&lt;br /&gt;
&lt;br /&gt;
Kommentierungen sind nur möglich, indem in der auszukommentierenden Zeile ganz vorne ein Apostroph ['] gesetzt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Ich bin eine Kommentarzeile&lt;br /&gt;
   'Ich bin KEINE Kommentarzeile!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstiegs- und Ausstiegspunkte, Makros und Trigger ===&lt;br /&gt;
&lt;br /&gt;
Alle Befehle müssen zwischen einem Einstiegs- und einem Ausstiegspunkt liegen.&lt;br /&gt;
&lt;br /&gt;
Der Einstiegspunkt wird durch eins der folgenden Schlüsselwörter gekennzeichnet:&lt;br /&gt;
&lt;br /&gt;
* {frame} Im Laufe jedes Frames ruft OMSI über diesen Einstiegspunkt die frameweise Scriptverarbeitung auf, sofern er vorhanden ist.&lt;br /&gt;
* {init} Bei der Initialisierung ruft OMSI über diesen Einstiegspunkt die Script-Initialisierung auf.&lt;br /&gt;
* {frame_ai} Hierbei handelt es sich um eine Variante des {frame}-Einstiegspunktes, welcher bei Fahrzeugen dann aufgerufen wird, wenn diese nicht im Fokus des Benutzers stehen, z.B. wenn sie als KI-Fahrzeug unterwegs sind. Ist dieser Einstiegspunkt jedoch nicht vorhanden sondern nur {frame}, dann wird dieser alternativ aufgerufen. Bei Szenerieobjekten kommt dieser Eintrittspunkt nicht zur Anwendung.&lt;br /&gt;
* {macro:''name''} Dieser Einstiegspunkt ruft ein Subsektion (Makro) auf, welche '''stets nach dem Aufruf''' definiert werden muss.&lt;br /&gt;
* {trigger:''name''} Dieser Einstiegspunkt wird vom Hauptprogramm aufgerufen, wenn der Benutzer die Tastenkombination oder das Maus-Event mit der Bezeichnung ''name'' aufruft - es gibt auch bestimmte Trigger, die direkt vom Hauptprogramm aufgerufen werden, z.B. wenn OMSI bei KI-Bussen die Anzeige wechselt u.Ä.&lt;br /&gt;
&lt;br /&gt;
{end} ist der universelle Ausstiegspunkt. Er muss stets den Block abschließen, der mit einem der obigen Befehle eröffnet wird.&lt;br /&gt;
&lt;br /&gt;
==== Makroaufruf ====&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Makros erfolgt über (M.L.''name''). Der Aufruf des Makros muss ''immer'' vor dessen Definition erfolgen. Andernfalls meldet OMSI, dass das Makro nicht gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
==== Aufteilung des Scripts in mehrere Dateien ====&lt;br /&gt;
&lt;br /&gt;
Bei einfachen Scripts (z.B. bei reinen KI-Fahrzeugen oder Szenerieobjekten) reicht es im Allgemeinen eine *.sco-Datei zu erstellen, welche über einen {frame}...{end}- und ggf. einen {init}...{end}-Block verfügt.&lt;br /&gt;
&lt;br /&gt;
Handelt es sich jedoch um ein komplettes Fahrzeugscript, dann empfiehlt es sich für die verschiedenen Subsysteme getrennte Dateien anzulegen. Hierbei sollte folgendermaßen vorgegangen werden:&lt;br /&gt;
&lt;br /&gt;
* Es gibt ein Hauptscript und die nötigen Subsystemdateien. Die Hauptdatei enthält dabei die {frame}- und {init}-Blöcke, die jedoch nur Makros aufrufen, welche in den Subsystemdateien definiert sind.&lt;br /&gt;
* Für jedes Subsystem gibt es eine *.sco-Datei und je nach Bedarf eine eigene Varlist und Constfile mit den zum System gehörenden Variablen. Außerdem werden auch hier die Trigger für die Tastenbefehle einsortiert.&lt;br /&gt;
* Die Makros sollten sinnvollerweise folgendermaßen benannt werden: {macro:''subsystem''_frame} und {macro:''subsystem''_init}.&lt;br /&gt;
* Damit die Makros vom Hauptscript aufgerufen werden, muss dieses in der Liste der Scripts in der Objekt-Konfigurationsdatei als erstes aufgerufen werden. Die Reihenfolge der Scripts untereinander muss ebenfalls so gewählt werden, dass alle dateiübergreifenden Makroaufrufe stets vor der jeweiligen Makrodefinition stehen.&lt;br /&gt;
&lt;br /&gt;
Die Einschränkung, dass Makros immer hinter dem Aufruf definiert werden müssen, kann zwar bisweilen hinderlich sein, ist aber ein sehr wirksamer Schutz gegen Zirkelschlüsse und Endlosschleifen.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
&lt;br /&gt;
Wie schon geschrieben wurde, kann ein {trigger:''name''}...{end}-Abschnitt durch verschiedene Möglichkeiten aus dem Hauptprogramm heraus aufgerufen werden. Hierzu zählen:&lt;br /&gt;
&lt;br /&gt;
* Auslösung per Tastatur. Wurde die Tastenkombination mit dem Namen ''tastkomb'' bezeichnet, wird {trigger:tastkomb} aufgerufen, wenn die Taste gedrückt wird und {trigger:tastkomb_off}, wenn die Taste losgelassen wird.&lt;br /&gt;
* Auslösung per Maus. Wurde ein Mesh angeklickt mit der [mouseevent]-Bezeichnung ''mouse_ev'', so wird {trigger:mouse_ev} aufgerufen, wenn die Maustaste gedrückt wird, {trigger:mouse_ev_drag}, während die Maustaste gehalten wird und {trigger:mouse_ev_off}, wenn die Maustaste losgelassen wird.&lt;br /&gt;
* Außerdem gibt es noch eine Reihe von [[System-Trigger|System-Triggern]].&lt;br /&gt;
&lt;br /&gt;
=== Operationen ===&lt;br /&gt;
&lt;br /&gt;
==== Stack-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%stackdump%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt eine Dialogbox mit dem Gleitkomma-Stackinhalt aus. Sollte deshalb natürlich nur zu Debug-Zwecken eingesetzt werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s0, s1, ..., s7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichern des aktuellen Stackwertes im durch die Ziffer angegebenen Register. Der Wert verbleibt hierbei im Stack&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |l0, l1, ..., l7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Laden des entsprechenden Registerwertes und Verschiebung in den Stack. Registerwert bleibt erhalten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den obersten Stackwert; alle weiteren Stackwerte rücken nach hinten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$msg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt den obersten String-Stack-Wert in die Debug-Zeile von OMSI - egal, ob es sich um ein User-, KI-Fahrzeug oder Szenerieobjekt handelt.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den Stringstack-Wert analog zu &amp;quot;d&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Logische Operationen ====&lt;br /&gt;
&lt;br /&gt;
Die logischen Operationen arbeiten nach dem Prinzip 0 = FALSE, alles andere ist TRUE.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;amp;&amp;amp;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |UND, d.h. wenn einer der beiden obersten Stackwerte gleich 0 ist, ist das Ergbnis 0, sonst 1.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ODER&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verneinung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Vergleichsoperationen ====&lt;br /&gt;
&lt;br /&gt;
Die Vergleichsoperationen vergleichen die Werte in den beiden jeweils obersten Stackplätzen und fügen dann je nach Ergebnis eine &amp;quot;1&amp;quot; oder &amp;quot;0&amp;quot; im obersten Stackplatz ein. Die Größer-/Kleinerzeichen stehen dabei entsprechend für der Reihenfolge, in der die Werte zuvor angegeben wurden. Das bedeutet:&lt;br /&gt;
&lt;br /&gt;
4 2 &amp;gt; ist wahr, weil die intern durchgeführte Operation in diesem Fall &amp;quot;4 &amp;gt; 2&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls die obersten Stackwerte identisch sind, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls Stackwert 1 kleiner ist als Stackwert 0, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... kleiner als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wie &amp;quot;=&amp;quot; nur für die obersten beiden Stringstack-Plätze.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner als (String). Die Ungleich-Operationen bei Strings prüfen auf alphabetische Reihenfolge. &amp;quot;A&amp;quot; ist also kleiner als &amp;quot;B&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer als (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner oder gleich (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer oder gleich (String).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Mathematische Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Plus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Minus (Stackplatz 1 - Stackplatz 0, also vom Prinzip her wie bei den Größer/Kleiner-Operationen)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mal&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |geteilt (Stackplatz 1 / Stackplatz 0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rest der Division (folgendermaßen erweitert für Gleitkommazahlen: Stack0 - trunc(Stack1 / Stack0) * Stack1 )&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/-/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Vorzeichenwechsel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sinus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arcsin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Sinus ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arctan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Tangens ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |min&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des kleineren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |max&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des größeren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |exp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Exponentialfunktion zur Basis e (e^Stack0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqrt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadratwurzel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadrat&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sgn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Vorzeichens; je nachdem entweder -1, 0 oder 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |pi&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kreiszahl pi&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |random&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ganzzahlige Zufallszahl 0 &amp;lt;= x &amp;lt; Stack0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |abs&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Absolutwertes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |trunc&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Abrunden auf nächste ganze Zahl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;''bla''&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfügen des Strings ''bla'' auf dem obersten String-Stack-Platz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zusammenfügen zweier Strings. &amp;quot;Omnibus&amp;quot; &amp;quot;simulator&amp;quot; $+ ergibt &amp;quot;Omnibussimulator&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Der oberste Stack-String wird sooft wiederholt, bis die resultierende Zeichenlänger gerade noch kleiner oder gleich des obersten Stackwertes ist. Beispiel: &amp;quot;nu&amp;quot; 6 $* ergibt &amp;quot;nununu&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$length&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Zeichen des obersten Stack-String zurück in den Stack. &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutBegin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen vorne vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutEnd&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen hinten vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthR&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' rechtsbündig an, indem am Anfang Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthC&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' zentriert an, indem am Anfang und am Ende Zeichen entfernt oder Leerzeichen ergänzt werden ''(ab OMSI2)''.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthL&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' linksbündig an, indem am Ende Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rundet ''stack0'' ab und wandelt die resultierende Ganzzahl um in einen String.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStrEnh&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die erweiterte Version von IntToStr. Hierbei wird der oberste Stack-String verwendet, um das Format der String-Umwandlung zu bestimmen: Das erste Zeichen im String wird zum Auffüllen der fehlenden Zeichen verwendet, die folgenden Zeichen müssen eine Zahl ergeben, die die Stellen angibt. Beispiel: 35 &amp;quot; 5&amp;quot; $IntToStrEnh führt zu &amp;quot;   35&amp;quot; und 123456789 &amp;quot;011&amp;quot; $IntToStrEnh führt zu &amp;quot;00123456789&amp;quot;. Falls ein Fehler vorliegt, wird &amp;quot;ERROR&amp;quot; ausgegeben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$StrToFloat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wandelt den obersten Stack-String in eine Gleitkommazahl um, falls möglich. Andernfalls wird eine -1 geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$RemoveSpaces&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernt sämtliche Leerzeichen vor und nach dem eigentlichen String. Aus &amp;quot;   Spandau Freudstr    &amp;quot; wird &amp;quot;Spandau Freudstr&amp;quot; ''(ab OMSI2)''.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variablenzugriff ===&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden in Systemvariablen und in lokale Variablen. Die Systemvariablen gelten OMSI-weit, die lokalen Variablen werden zum Fahrzeug/Objekt zugehörig gespeichert.&lt;br /&gt;
&lt;br /&gt;
Bei den lokalen Variablen gibt es stets einen Grundstamm an Variablen, welcher von OMSI vordefiniert werden. Darüber hinaus können beliebig viele Variablen mit Hilfe der Varlist-Dateien ergänzt werden. Außerdem gibt es seit OMSI2 die Variante, dass man die Variable zwar selbst definieren muss, sie dann aber trotzdem mit einem OMSI-Internen Zustand verbunden wird (&amp;quot;ondemand-vordefinierte Variablen&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.S.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die Systemvariable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale Variable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale String-Variable ''varname'' in den obersten String-Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten Stackplatz in die lokale Variable ''varname''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten String-Stackplatz in die lokale String-Variable ''varname''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung der einzelnen Systemvariablen und der vordefinierten lokalen Variablen finden Sie hier: [[System- und vordefinierte lokalen Variablen]]&lt;br /&gt;
&lt;br /&gt;
=== Konstanten und Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Lokale Konstanten und [http://de.wikipedia.org/w/index.php?title=Datei:Linear_interpolation.svg&amp;amp;filetimestamp=20080226155013 stückweise definierte lineare Funktionen] können in den Konstantendateien (''constfiles'', ''~_constfile.txt'') definiert werden. Der Aufbau jeder Konstantendatei entspricht der der [[Konfigurationsdateien|Konfigurationsdatei]]. Es gibt lediglich drei Schlüsselwörter. Zu beachten ist: Bisher können keine Strings, sondern nur Fließkommazahlen als Konstanten definiert werden.&lt;br /&gt;
&lt;br /&gt;
[const] definiert eine neue Konstante und gibt ihren Wert an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
name&lt;br /&gt;
wert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
leistung&lt;br /&gt;
200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[newcurve] leitet die Definition einer neuen (stückweise linearen) Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[pnt] fügt der zuvor mit [newcurve] definierten Funktion ein neues x-y-Paar hinzu. Jede Funktion sollte normalerweise über mindestens zwei Paare verfügen. Die Reihenfolge der Paare ''muss'' in x-Richtung aufsteigend sein!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
Drehzahl_Drehmoment_Kennlinie&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
50&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
300&lt;br /&gt;
400&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
1000&lt;br /&gt;
600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Konstanten werden über den Befehl (C.L.''konstantenname'') in den Stack geladen.&lt;br /&gt;
&lt;br /&gt;
Funktionen werden über den Befehl (F.L.''funktionsname'') aufgerufen. Dabei wird stets der zuvor auf oberster Stackposition befindliche Wert als x-Parameter übergaben und der resultierende y-Wert der Funktion stattdessen auf dem obersten Stackplatz gespeichert. Bewegt sich der x-Wert außerhalb der Grenzen der durch die [pnt]-Einträge definierten Eckpunkte, wird stets der y-Wert des nächstliegenden Eckpunktes verwendet. Die Funktion wird also vor dem ersten und hinter dem letzten Eckpunkt ins Unendliche waagerecht verlängert.&lt;br /&gt;
&lt;br /&gt;
=== Sound-Trigger ===&lt;br /&gt;
&lt;br /&gt;
Soundtrigger sind nicht mit den weiter oben erwähnten Triggern zu verwechseln!&lt;br /&gt;
&lt;br /&gt;
Sie stellen vielmehr eine Möglichkeit dar, direkt einen gewünschten Sound abzuspielen. Hierbei gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
(T.L.''soundtriggername'') ist ein einfacher Soundtrigger. Der so markierte Sound wird (einmalig) abgespielt.&lt;br /&gt;
&lt;br /&gt;
(T.F.''soundtriggername'') ist ein Soundtrigger mit Dateiwechselfunktion. Hierbei wird der oberste Stackstring ausgelesen und als Dateiname verwendet, wobei der Dateipfad relativ zum Sound-Ordner des Objektes interpretiert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Angenommen, die Sounddatei lautet &amp;quot;diese.wav&amp;quot; und ist mit dem Trigger ''MeinTrigger'' verknüpft, dann spielt&lt;br /&gt;
&lt;br /&gt;
 (T.L.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;diese.wav&amp;quot; ab und&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;andere.wav&amp;quot; (T.F.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;andere.wav&amp;quot;. Alternativ zu (T.L.''soundtriggername'') kann beim Befehl (T.F.''soundtriggername'') auch ein &amp;quot;Nullstring&amp;quot; im Stack liegen (also der String: &amp;quot;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== System-Makros ===&lt;br /&gt;
&lt;br /&gt;
Die bisherigen Methoden erlauben dem Script folgende Kommunikationsmöglichkeiten mit OMSI:&lt;br /&gt;
&lt;br /&gt;
* Lesen von Werten über System- und vordefinierte lokale Variablen&lt;br /&gt;
* Schreiben von Werten über ebendiese&lt;br /&gt;
* Empfangen von Tastatur-, Maus- oder Systemtriggern&lt;br /&gt;
&lt;br /&gt;
Schließlich gibt es noch eine weitere Methode, um mit dem Hauptprogramm zu kommunizieren, die sogenannten System-Makros, gelegentlich auch unpräzise als &amp;quot;Callback-Funktionen&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
In bestimmten Situationen ist es nötig, dass das Script Werte von OMSI bekommt, die in größeren Datenbanken vorliegen und daher nicht über vordefinierte Variablen übermittelt werden können, z.B. die Inhalte der Hofdatei. Hier kommen nun die System-Makros ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Diese arbeiten scriptseitig sehr ähnlich wie die lokalen, selbstdefinierten Makros: Der Aufruf (M.V.''macroname'') ruft das System-Makro auf (&amp;quot;V&amp;quot; stand ursprünglich für &amp;quot;Vehicle-Macro&amp;quot;, gilt aber genauso auch in Szenerieobjekten), das sich während der Ausführung Werte aus den beiden Stacks holt und/oder in diese schreibt. Eine Aufstellung aller System-Makros findet sich hier: [[System-Makros]]&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen und Schleifen ===&lt;br /&gt;
&lt;br /&gt;
Die einzige Steuerung des Programmablaufs ist zur Zeit nur mit der IF-Bedingung möglich.&lt;br /&gt;
&lt;br /&gt;
==== IF-Bedingung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dass erst die Bedingung formuliert wird und dann erst das Schlüsselwort {if} folgt, sollte einleuchten: Zunächst muss an oberster Stelle des Stacks der Wert abgelegt werden und erst dann folgt das Schlüsselwort {if}, welches diesen Wert prüft. Hierbei bedeutet ähnlich wie bei &amp;amp;&amp;amp; und || Gleichheit mit Null gleichbedeutend mit ''False'', alle anderen Werte bedeuten ''True''.&lt;br /&gt;
&lt;br /&gt;
Wenn also im obigen Beispiel ''bla'' den Wert 1 hat, wird ''blub'' auf den Wert 5 gesetzt, andernfalls auf den Wert 7.&lt;br /&gt;
&lt;br /&gt;
Verschachtelungen der IF-Bedingung dienen als Ersatz für die (nicht vorhandenen) &amp;quot;Else-If&amp;quot;-Konstruktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
    (L.L.bla) 5 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 5 ist:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        13&lt;br /&gt;
    {endif}&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist insbesondere auf das doppelte {endif} zu achten! Hier gilt:&lt;br /&gt;
&lt;br /&gt;
* bla = 1 ==&amp;gt; blub = 5&lt;br /&gt;
* bla = 5 ==&amp;gt; blub = 7&lt;br /&gt;
* sonst   ==&amp;gt; blub = 13&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=862</id>
		<title>Scriptsystem</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=862"/>
		<updated>2014-02-11T10:47:08Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Dateien des Scriptsystems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem in OMSI ermöglicht es, dass Szenerieobjekte und vor allem Fahrzeuge mit individuellen Systemen ausgestattet werden können, die über Variablen und Funktionsaufrufe mit dem Hauptprogramm und der Grafik- und Soundengine kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der hier beschriebene Stand des Scriptsystems entspricht OMSI Version 1.01.&lt;br /&gt;
&lt;br /&gt;
== Dateien des Scriptsystems ==&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem umfasst folgende Dateien:&lt;br /&gt;
&lt;br /&gt;
* Scriptdateien mit ausführbarem Code (*.osc)&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien im OMSI\program-Verzeichnis zur Definition von Systemdateien und vordefinierten Dateien&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien zur Definition von Uservariablen&lt;br /&gt;
* Constfile-Dateien zur Definition von Userkonstanten und Funktionstabellen&lt;br /&gt;
&lt;br /&gt;
Abgesehen von den Dateien zur Definition von Systemvariablen müssen alle benötigten Dateien für jedes Fahrzeug/Szenerieobjekt (im folgenden kurz: Objekt) in dessen [[Konfigurationsdatei]] angemeldet werden.&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es die Befehle ''[script]'', ''[varnamelist]'', ''[stringvarnamelist]'' und ''[constfile]''. Der erste Eintrag jedes Befehls ist die Anzahl der Dateien, darauf folgen die entsprechenden Dateinamen (inkl. Pfad relativ zur Konfigurationsdatei. Die Namen der Dateien sind nicht relevant, solange sie korrekt in die Listen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Auf die Funktion der jeweiligen Dateien wird im Laufe der Beschreibung der Scriptsprache eingegangen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Scriptsprache ==&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Scriptsystem arbeitet mit der [http://de.wikipedia.org/wiki/Umgekehrte_Polnische_Notation umgekehrten Polnischen Notation]. Hierbei steht der Operator hinter den beiden Operanden; vereinfacht gesagt bedeutet es, dass die Operation &amp;quot; 1 + 2 &amp;quot; stattdessen folgendermaßen notiert wird: &amp;quot; 1 2 + &amp;quot;. Ein komplizierteres Beispiel: &amp;quot; (1 + 2) * (4 + 5) &amp;quot; entspricht &amp;quot; 1 2 + 4 5 + * &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist die Tatsache, dass die OMSI-Textdateien und insbesondere die Scriptsprache [http://de.wikipedia.org/wiki/Case_sensitivity Case-Sensitive] ist! D.h. es ist immer auf die Groß- und Kleinschreibung zu achten!&lt;br /&gt;
&lt;br /&gt;
=== Stack und Register ===&lt;br /&gt;
&lt;br /&gt;
Bei der Verarbeitung der Scripts verfügt OMSI über einen String-Stack und einen [http://de.wikipedia.org/wiki/Stapelspeicher Stack] für [http://de.wikipedia.org/wiki/Gleitkommazahl Gleitkommazahlen]. Im folgenden ist mit &amp;quot;Stack&amp;quot; immer der Stack für Gleitkommazahlen gemeint, andernfalls wird von &amp;quot;String-Stack&amp;quot; gesprochen.&lt;br /&gt;
&lt;br /&gt;
Beide Stacks enthält 8 Speicherplätze, welche von 0 bis 7 durchnumeriert sind. Jede Script-Operation kann nun einen oder mehrere neue Werte in einen der Stacks einfügen (push), wobei der neue Wert auf die Position 0 gesetzt wird und alle folgenden Werte &amp;quot;einen Platz aufrücken&amp;quot;, oder sie kann einen oder mehrere Werte aus dem Stack herausziehen (pop/pull) oder lediglich auslesen (peek).&lt;br /&gt;
&lt;br /&gt;
Fürs temporäre Ablegen von Zahlen gibt es zusätzlich acht indizierte Speicherplätze, welche direkt geschrieben oder gelesen werden können, die sich im sogenannten Register befinden - hier gibt es jedoch nur einen Register für die Gleitkommazahlen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel-Operationen ===&lt;br /&gt;
&lt;br /&gt;
Beispiel: Die Operation 1 + 4. Der Code hierfür lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 4 +&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle wird demonstriert, wie sich hierbei der Stack verhält:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			5	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ausgangszustand ist der Stack nur mit Nullen (oder unbekannten/zufälligen Werten) gefüllt. Der Befehl &amp;quot;1&amp;quot; schiebt die Eins in den obersten Stackplatz und schiebt alle weiteren Werte (Nullen) nach hinten. Der Befehl &amp;quot;4&amp;quot; schiebt die Vier auf den 0. Platz und alle folgenden Werte, also insbesondere die Eins auf den jeweils nächsten Platz. Im nächsten Schritt &amp;quot;+&amp;quot; werden die obersten beiden Werte aus dem Stack herausgezogen - also 4 und 1 - und summiert. Das Ergebnis (5) wird wiederum in den Stack geschoben. Die beiden ursprünglichen Zahlen sind im Stack nicht mehr vorhanden.&lt;br /&gt;
&lt;br /&gt;
Ein zweites Beispiel:&lt;br /&gt;
&lt;br /&gt;
(1 + 2) * (4 + 5) muss wie bereits erwähnt folgendermaßen notiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 2 + 4 5 + *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Stack verhält sich somit folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;2&amp;quot;			2	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			3	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	3	0	0	0&lt;br /&gt;
&amp;quot;5&amp;quot;			5	4	3	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			9	3	0	0	0&lt;br /&gt;
&amp;quot;*&amp;quot;			27	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Ende befindet sich also das korrekte Ergebnis auf Stackplatz 0!&lt;br /&gt;
&lt;br /&gt;
=== Gleitkommazahlen und Strings ===&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Skriptsystem arbeitet ausschließlich mit den Datentypen Gleitkommazahl (einfache Präzision mit Vorzeichen) und String. Beide Datentypen haben getrennte Stacks. Deshalb laufen die Verarbeitung von Gleitkommazahlen und Strings im Allgemeinen unabhängig nebeneinander. Jedoch kann es natürlich vorkommen, dass bestimmte Funktionen z.B. Zahlen in Strings umwandeln und somit gleichzeitig auf beide Teilbereiche zugreifen.&lt;br /&gt;
&lt;br /&gt;
Auf boolische Variablen wurde verzichtet. Für boolische Werte werden im Allgemeinen die Zahlenwerte 0 und 1 verwendet.&lt;br /&gt;
&lt;br /&gt;
== Script-Schlüsselwörter ==&lt;br /&gt;
&lt;br /&gt;
=== Kommentare ===&lt;br /&gt;
&lt;br /&gt;
Kommentierungen sind nur möglich, indem in der auszukommentierenden Zeile ganz vorne ein Apostroph ['] gesetzt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Ich bin eine Kommentarzeile&lt;br /&gt;
   'Ich bin KEINE Kommentarzeile!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstiegs- und Ausstiegspunkte, Makros und Trigger ===&lt;br /&gt;
&lt;br /&gt;
Alle Befehle müssen zwischen einem Einstiegs- und einem Ausstiegspunkt liegen.&lt;br /&gt;
&lt;br /&gt;
Der Einstiegspunkt wird durch eins der folgenden Schlüsselwörter gekennzeichnet:&lt;br /&gt;
&lt;br /&gt;
* {frame} Im Laufe jedes Frames ruft OMSI über diesen Einstiegspunkt die frameweise Scriptverarbeitung auf, sofern er vorhanden ist.&lt;br /&gt;
* {init} Bei der Initialisierung ruft OMSI über diesen Einstiegspunkt die Script-Initialisierung auf.&lt;br /&gt;
* {frame_ai} Hierbei handelt es sich um eine Variante des {frame}-Einstiegspunktes, welcher bei Fahrzeugen dann aufgerufen wird, wenn diese nicht im Fokus des Benutzers stehen, z.B. wenn sie als KI-Fahrzeug unterwegs sind. Ist dieser Einstiegspunkt jedoch nicht vorhanden sondern nur {frame}, dann wird dieser alternativ aufgerufen. Bei Szenerieobjekten kommt dieser Eintrittspunkt nicht zur Anwendung.&lt;br /&gt;
* {macro:''name''} Dieser Einstiegspunkt ruft ein Subsektion (Makro) auf, welche '''stets nach dem Aufruf''' definiert werden muss.&lt;br /&gt;
* {trigger:''name''} Dieser Einstiegspunkt wird vom Hauptprogramm aufgerufen, wenn der Benutzer die Tastenkombination oder das Maus-Event mit der Bezeichnung ''name'' aufruft - es gibt auch bestimmte Trigger, die direkt vom Hauptprogramm aufgerufen werden, z.B. wenn OMSI bei KI-Bussen die Anzeige wechselt u.Ä.&lt;br /&gt;
&lt;br /&gt;
{end} ist der universelle Ausstiegspunkt. Er muss stets den Block abschließen, der mit einem der obigen Befehle eröffnet wird.&lt;br /&gt;
&lt;br /&gt;
==== Makroaufruf ====&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Makros erfolgt über (M.L.''name''). Der Aufruf des Makros muss ''immer'' vor dessen Definition erfolgen. Andernfalls meldet OMSI, dass das Makro nicht gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
==== Aufteilung des Scripts in mehrere Dateien ====&lt;br /&gt;
&lt;br /&gt;
Bei einfachen Scripts (z.B. bei reinen KI-Fahrzeugen oder Szenerieobjekten) reicht es im Allgemeinen eine *.sco-Datei zu erstellen, welche über einen {frame}...{end}- und ggf. einen {init}...{end}-Block verfügt.&lt;br /&gt;
&lt;br /&gt;
Handelt es sich jedoch um ein komplettes Fahrzeugscript, dann empfiehlt es sich für die verschiedenen Subsysteme getrennte Dateien anzulegen. Hierbei sollte folgendermaßen vorgegangen werden:&lt;br /&gt;
&lt;br /&gt;
* Es gibt ein Hauptscript und die nötigen Subsystemdateien. Die Hauptdatei enthält dabei die {frame}- und {init}-Blöcke, die jedoch nur Makros aufrufen, welche in den Subsystemdateien definiert sind.&lt;br /&gt;
* Für jedes Subsystem gibt es eine *.sco-Datei und je nach Bedarf eine eigene Varlist und Constfile mit den zum System gehörenden Variablen. Außerdem werden auch hier die Trigger für die Tastenbefehle einsortiert.&lt;br /&gt;
* Die Makros sollten sinnvollerweise folgendermaßen benannt werden: {macro:''subsystem''_frame} und {macro:''subsystem''_init}.&lt;br /&gt;
* Damit die Makros vom Hauptscript aufgerufen werden, muss dieses in der Liste der Scripts in der Objekt-Konfigurationsdatei als erstes aufgerufen werden. Die Reihenfolge der Scripts untereinander muss ebenfalls so gewählt werden, dass alle dateiübergreifenden Makroaufrufe stets vor der jeweiligen Makrodefinition stehen.&lt;br /&gt;
&lt;br /&gt;
Die Einschränkung, dass Makros immer hinter dem Aufruf definiert werden müssen, kann zwar bisweilen hinderlich sein, ist aber ein sehr wirksamer Schutz gegen Zirkelschlüsse und Endlosschleifen.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
&lt;br /&gt;
Wie schon geschrieben wurde, kann ein {trigger:''name''}...{end}-Abschnitt durch verschiedene Möglichkeiten aus dem Hauptprogramm heraus aufgerufen werden. Hierzu zählen:&lt;br /&gt;
&lt;br /&gt;
* Auslösung per Tastatur. Wurde die Tastenkombination mit dem Namen ''tastkomb'' bezeichnet, wird {trigger:tastkomb} aufgerufen, wenn die Taste gedrückt wird und {trigger:tastkomb_off}, wenn die Taste losgelassen wird.&lt;br /&gt;
* Auslösung per Maus. Wurde ein Mesh angeklickt mit der [mouseevent]-Bezeichnung ''mouse_ev'', so wird {trigger:mouse_ev} aufgerufen, wenn die Maustaste gedrückt wird, {trigger:mouse_ev_drag}, während die Maustaste gehalten wird und {trigger:mouse_ev_off}, wenn die Maustaste losgelassen wird.&lt;br /&gt;
* Außerdem gibt es noch eine Reihe von [[System-Trigger|System-Triggern]].&lt;br /&gt;
&lt;br /&gt;
=== Operationen ===&lt;br /&gt;
&lt;br /&gt;
==== Stack-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%stackdump%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt eine Dialogbox mit dem Gleitkomma-Stackinhalt aus. Sollte deshalb natürlich nur zu Debug-Zwecken eingesetzt werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s0, s1, ..., s7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichern des aktuellen Stackwertes im durch die Ziffer angegebenen Register. Der Wert verbleibt hierbei im Stack&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |l0, l1, ..., l7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Laden des entsprechenden Registerwertes und Verschiebung in den Stack. Registerwert bleibt erhalten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den obersten Stackwert; alle weiteren Stackwerte rücken nach hinten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$msg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt den obersten String-Stack-Wert in die Debug-Zeile von OMSI - egal, ob es sich um ein User-, KI-Fahrzeug oder Szenerieobjekt handelt.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den Stringstack-Wert analog zu &amp;quot;d&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Logische Operationen ====&lt;br /&gt;
&lt;br /&gt;
Die logischen Operationen arbeiten nach dem Prinzip 0 = FALSE, alles andere ist TRUE.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;amp;&amp;amp;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |UND, d.h. wenn einer der beiden obersten Stackwerte gleich 0 ist, ist das Ergbnis 0, sonst 1.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ODER&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verneinung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Vergleichsoperationen ====&lt;br /&gt;
&lt;br /&gt;
Die Vergleichsoperationen vergleichen die Werte in den beiden jeweils obersten Stackplätzen und fügen dann je nach Ergebnis eine &amp;quot;1&amp;quot; oder &amp;quot;0&amp;quot; im obersten Stackplatz ein. Die Größer-/Kleinerzeichen stehen dabei entsprechend für der Reihenfolge, in der die Werte zuvor angegeben wurden. Das bedeutet:&lt;br /&gt;
&lt;br /&gt;
4 2 &amp;gt; ist wahr, weil die intern durchgeführte Operation in diesem Fall &amp;quot;4 &amp;gt; 2&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls die obersten Stackwerte identisch sind, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls Stackwert 1 kleiner ist als Stackwert 0, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... kleiner als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wie &amp;quot;=&amp;quot; nur für die obersten beiden Stringstack-Plätze.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner als (String). Die Ungleich-Operationen bei Strings prüfen auf alphabetische Reihenfolge. &amp;quot;A&amp;quot; ist also kleiner als &amp;quot;B&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer als (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner oder gleich (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer oder gleich (String).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Mathematische Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Plus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Minus (Stackplatz 1 - Stackplatz 0, also vom Prinzip her wie bei den Größer/Kleiner-Operationen)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mal&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |geteilt (Stackplatz 1 / Stackplatz 0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rest der Division (folgendermaßen erweitert für Gleitkommazahlen: Stack0 - trunc(Stack1 / Stack0) * Stack1 )&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/-/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Vorzeichenwechsel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sinus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arcsin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Sinus ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arctan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Tangens ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |min&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des kleineren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |max&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des größeren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |exp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Exponentialfunktion zur Basis e (e^Stack0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqrt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadratwurzel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadrat&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sgn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Vorzeichens; je nachdem entweder -1, 0 oder 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |pi&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kreiszahl pi&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |random&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ganzzahlige Zufallszahl 0 &amp;lt;= x &amp;lt; Stack0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |abs&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Absolutwertes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |trunc&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Abrunden auf nächste ganze Zahl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;''bla''&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfügen des Strings ''bla'' auf dem obersten String-Stack-Platz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zusammenfügen zweier Strings. &amp;quot;Omnibus&amp;quot; &amp;quot;simulator&amp;quot; $+ ergibt &amp;quot;Omnibussimulator&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Der oberste Stack-String wird sooft wiederholt, bis die resultierende Zeichenlänger gerade noch kleiner oder gleich des obersten Stackwertes ist. Beispiel: &amp;quot;nu&amp;quot; 6 $* ergibt &amp;quot;nununu&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$length&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Zeichen des obersten Stack-String zurück in den Stack. &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutBegin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen vorne vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutEnd&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen hinten vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthR&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' rechtsbündig an, indem am Anfang Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthC&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' zentriert an, indem am Anfang und am Ende Zeichen entfernt oder Leerzeichen ergänzt werden ''(ab OMSI2)''.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthL&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' linksbündig an, indem am Ende Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rundet ''stack0'' ab und wandelt die resultierende Ganzzahl um in einen String.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStrEnh&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die erweiterte Version von IntToStr. Hierbei wird der oberste Stack-String verwendet, um das Format der String-Umwandlung zu bestimmen: Das erste Zeichen im String wird zum Auffüllen der fehlenden Zeichen verwendet, die folgenden Zeichen müssen eine Zahl ergeben, die die Stellen angibt. Beispiel: 35 &amp;quot; 5&amp;quot; $IntToStrEnh führt zu &amp;quot;   35&amp;quot; und 123456789 &amp;quot;011&amp;quot; $IntToStrEnh führt zu &amp;quot;00123456789&amp;quot;. Falls ein Fehler vorliegt, wird &amp;quot;ERROR&amp;quot; ausgegeben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$StrToFloat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wandelt den obersten Stack-String in eine Gleitkommazahl um, falls möglich. Andernfalls wird eine -1 geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$RemoveSpaces&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernt sämtliche Leerzeichen vor und nach dem eigentlichen String. Aus &amp;quot;   Spandau Freudstr    &amp;quot; wird &amp;quot;Spandau Freudstr&amp;quot; ''(ab OMSI2)''.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variablenzugriff ===&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden in Systemvariablen und in lokale Variablen. Die Systemvariablen gelten OMSI-weit, die lokalen Variablen werden zum Fahrzeug/Objekt zugehörig gespeichert.&lt;br /&gt;
&lt;br /&gt;
Bei den lokalen Variablen gibt es stets einen Grundstamm an Variablen, welcher von OMSI vordefiniert werden. Darüber hinaus können beliebig viele Variablen mit Hilfe der Varlist-Dateien ergänzt werden. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.S.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die Systemvariable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale Variable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale String-Variable ''varname'' in den obersten String-Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten Stackplatz in die lokale Variable ''varname''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten String-Stackplatz in die lokale String-Variable ''varname''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung der einzelnen Systemvariablen und der vordefinierten lokalen Variablen finden Sie hier: [[System- und vordefinierte lokalen Variablen]]&lt;br /&gt;
&lt;br /&gt;
=== Konstanten und Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Lokale Konstanten und [http://de.wikipedia.org/w/index.php?title=Datei:Linear_interpolation.svg&amp;amp;filetimestamp=20080226155013 stückweise definierte lineare Funktionen] können in den Konstantendateien (''constfiles'', ''~_constfile.txt'') definiert werden. Der Aufbau jeder Konstantendatei entspricht der der [[Konfigurationsdateien|Konfigurationsdatei]]. Es gibt lediglich drei Schlüsselwörter. Zu beachten ist: Bisher können keine Strings, sondern nur Fließkommazahlen als Konstanten definiert werden.&lt;br /&gt;
&lt;br /&gt;
[const] definiert eine neue Konstante und gibt ihren Wert an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
name&lt;br /&gt;
wert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
leistung&lt;br /&gt;
200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[newcurve] leitet die Definition einer neuen (stückweise linearen) Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[pnt] fügt der zuvor mit [newcurve] definierten Funktion ein neues x-y-Paar hinzu. Jede Funktion sollte normalerweise über mindestens zwei Paare verfügen. Die Reihenfolge der Paare ''muss'' in x-Richtung aufsteigend sein!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
Drehzahl_Drehmoment_Kennlinie&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
50&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
300&lt;br /&gt;
400&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
1000&lt;br /&gt;
600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Konstanten werden über den Befehl (C.L.''konstantenname'') in den Stack geladen.&lt;br /&gt;
&lt;br /&gt;
Funktionen werden über den Befehl (F.L.''funktionsname'') aufgerufen. Dabei wird stets der zuvor auf oberster Stackposition befindliche Wert als x-Parameter übergaben und der resultierende y-Wert der Funktion stattdessen auf dem obersten Stackplatz gespeichert. Bewegt sich der x-Wert außerhalb der Grenzen der durch die [pnt]-Einträge definierten Eckpunkte, wird stets der y-Wert des nächstliegenden Eckpunktes verwendet. Die Funktion wird also vor dem ersten und hinter dem letzten Eckpunkt ins Unendliche waagerecht verlängert.&lt;br /&gt;
&lt;br /&gt;
=== Sound-Trigger ===&lt;br /&gt;
&lt;br /&gt;
Soundtrigger sind nicht mit den weiter oben erwähnten Triggern zu verwechseln!&lt;br /&gt;
&lt;br /&gt;
Sie stellen vielmehr eine Möglichkeit dar, direkt einen gewünschten Sound abzuspielen. Hierbei gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
(T.L.''soundtriggername'') ist ein einfacher Soundtrigger. Der so markierte Sound wird (einmalig) abgespielt.&lt;br /&gt;
&lt;br /&gt;
(T.F.''soundtriggername'') ist ein Soundtrigger mit Dateiwechselfunktion. Hierbei wird der oberste Stackstring ausgelesen und als Dateiname verwendet, wobei der Dateipfad relativ zum Sound-Ordner des Objektes interpretiert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Angenommen, die Sounddatei lautet &amp;quot;diese.wav&amp;quot; und ist mit dem Trigger ''MeinTrigger'' verknüpft, dann spielt&lt;br /&gt;
&lt;br /&gt;
 (T.L.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;diese.wav&amp;quot; ab und&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;andere.wav&amp;quot; (T.F.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;andere.wav&amp;quot;. Alternativ zu (T.L.''soundtriggername'') kann beim Befehl (T.F.''soundtriggername'') auch ein &amp;quot;Nullstring&amp;quot; im Stack liegen (also der String: &amp;quot;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== System-Makros ===&lt;br /&gt;
&lt;br /&gt;
Die bisherigen Methoden erlauben dem Script folgende Kommunikationsmöglichkeiten mit OMSI:&lt;br /&gt;
&lt;br /&gt;
* Lesen von Werten über System- und vordefinierte lokale Variablen&lt;br /&gt;
* Schreiben von Werten über ebendiese&lt;br /&gt;
* Empfangen von Tastatur-, Maus- oder Systemtriggern&lt;br /&gt;
&lt;br /&gt;
Schließlich gibt es noch eine weitere Methode, um mit dem Hauptprogramm zu kommunizieren, die sogenannten System-Makros, gelegentlich auch unpräzise als &amp;quot;Callback-Funktionen&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
In bestimmten Situationen ist es nötig, dass das Script Werte von OMSI bekommt, die in größeren Datenbanken vorliegen und daher nicht über vordefinierte Variablen übermittelt werden können, z.B. die Inhalte der Hofdatei. Hier kommen nun die System-Makros ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Diese arbeiten scriptseitig sehr ähnlich wie die lokalen, selbstdefinierten Makros: Der Aufruf (M.V.''macroname'') ruft das System-Makro auf (&amp;quot;V&amp;quot; stand ursprünglich für &amp;quot;Vehicle-Macro&amp;quot;, gilt aber genauso auch in Szenerieobjekten), das sich während der Ausführung Werte aus den beiden Stacks holt und/oder in diese schreibt. Eine Aufstellung aller System-Makros findet sich hier: [[System-Makros]]&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen und Schleifen ===&lt;br /&gt;
&lt;br /&gt;
Die einzige Steuerung des Programmablaufs ist zur Zeit nur mit der IF-Bedingung möglich.&lt;br /&gt;
&lt;br /&gt;
==== IF-Bedingung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dass erst die Bedingung formuliert wird und dann erst das Schlüsselwort {if} folgt, sollte einleuchten: Zunächst muss an oberster Stelle des Stacks der Wert abgelegt werden und erst dann folgt das Schlüsselwort {if}, welches diesen Wert prüft. Hierbei bedeutet ähnlich wie bei &amp;amp;&amp;amp; und || Gleichheit mit Null gleichbedeutend mit ''False'', alle anderen Werte bedeuten ''True''.&lt;br /&gt;
&lt;br /&gt;
Wenn also im obigen Beispiel ''bla'' den Wert 1 hat, wird ''blub'' auf den Wert 5 gesetzt, andernfalls auf den Wert 7.&lt;br /&gt;
&lt;br /&gt;
Verschachtelungen der IF-Bedingung dienen als Ersatz für die (nicht vorhandenen) &amp;quot;Else-If&amp;quot;-Konstruktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
    (L.L.bla) 5 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 5 ist:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        13&lt;br /&gt;
    {endif}&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist insbesondere auf das doppelte {endif} zu achten! Hier gilt:&lt;br /&gt;
&lt;br /&gt;
* bla = 1 ==&amp;gt; blub = 5&lt;br /&gt;
* bla = 5 ==&amp;gt; blub = 7&lt;br /&gt;
* sonst   ==&amp;gt; blub = 13&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=861</id>
		<title>Scriptsystem</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=861"/>
		<updated>2014-02-11T10:26:13Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* String-Operationen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem in OMSI ermöglicht es, dass Szenerieobjekte und vor allem Fahrzeuge mit individuellen Systemen ausgestattet werden können, die über Variablen und Funktionsaufrufe mit dem Hauptprogramm und der Grafik- und Soundengine kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der hier beschriebene Stand des Scriptsystems entspricht OMSI Version 1.01.&lt;br /&gt;
&lt;br /&gt;
== Dateien des Scriptsystems ==&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem umfasst folgende Dateien:&lt;br /&gt;
&lt;br /&gt;
* Scriptdateien mit ausführbarem Code (*.osc)&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien im OMSI\program-Verzeichnis zur Definition von (reinen) Systemvariablen&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien zur Definition von Uservariablen und (zusätzlichen) Systemvariablen (seit OMSI2)&lt;br /&gt;
* Constfile-Dateien zur Definition von Userkonstanten und Funktionstabellen&lt;br /&gt;
&lt;br /&gt;
Abgesehen von den Dateien zur Definition von Systemvariablen müssen alle benötigten Dateien für jedes Fahrzeug/Szenerieobjekt (im folgenden kurz: Objekt) in dessen [[Konfigurationsdatei]] angemeldet werden.&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es die Befehle ''[script]'', ''[varnamelist]'', ''[stringvarnamelist]'' und ''[constfile]''. Der erste Eintrag jedes Befehls ist die Anzahl der Dateien, darauf folgen die entsprechenden Dateinamen (inkl. Pfad relativ zur Konfigurationsdatei. Die Namen der Dateien sind nicht relevant, solange sie korrekt in die Listen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Auf die Funktion der jeweiligen Dateien wird im Laufe der Beschreibung der Scriptsprache eingegangen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Scriptsprache ==&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Scriptsystem arbeitet mit der [http://de.wikipedia.org/wiki/Umgekehrte_Polnische_Notation umgekehrten Polnischen Notation]. Hierbei steht der Operator hinter den beiden Operanden; vereinfacht gesagt bedeutet es, dass die Operation &amp;quot; 1 + 2 &amp;quot; stattdessen folgendermaßen notiert wird: &amp;quot; 1 2 + &amp;quot;. Ein komplizierteres Beispiel: &amp;quot; (1 + 2) * (4 + 5) &amp;quot; entspricht &amp;quot; 1 2 + 4 5 + * &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist die Tatsache, dass die OMSI-Textdateien und insbesondere die Scriptsprache [http://de.wikipedia.org/wiki/Case_sensitivity Case-Sensitive] ist! D.h. es ist immer auf die Groß- und Kleinschreibung zu achten!&lt;br /&gt;
&lt;br /&gt;
=== Stack und Register ===&lt;br /&gt;
&lt;br /&gt;
Bei der Verarbeitung der Scripts verfügt OMSI über einen String-Stack und einen [http://de.wikipedia.org/wiki/Stapelspeicher Stack] für [http://de.wikipedia.org/wiki/Gleitkommazahl Gleitkommazahlen]. Im folgenden ist mit &amp;quot;Stack&amp;quot; immer der Stack für Gleitkommazahlen gemeint, andernfalls wird von &amp;quot;String-Stack&amp;quot; gesprochen.&lt;br /&gt;
&lt;br /&gt;
Beide Stacks enthält 8 Speicherplätze, welche von 0 bis 7 durchnumeriert sind. Jede Script-Operation kann nun einen oder mehrere neue Werte in einen der Stacks einfügen (push), wobei der neue Wert auf die Position 0 gesetzt wird und alle folgenden Werte &amp;quot;einen Platz aufrücken&amp;quot;, oder sie kann einen oder mehrere Werte aus dem Stack herausziehen (pop/pull) oder lediglich auslesen (peek).&lt;br /&gt;
&lt;br /&gt;
Fürs temporäre Ablegen von Zahlen gibt es zusätzlich acht indizierte Speicherplätze, welche direkt geschrieben oder gelesen werden können, die sich im sogenannten Register befinden - hier gibt es jedoch nur einen Register für die Gleitkommazahlen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel-Operationen ===&lt;br /&gt;
&lt;br /&gt;
Beispiel: Die Operation 1 + 4. Der Code hierfür lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 4 +&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle wird demonstriert, wie sich hierbei der Stack verhält:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			5	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ausgangszustand ist der Stack nur mit Nullen (oder unbekannten/zufälligen Werten) gefüllt. Der Befehl &amp;quot;1&amp;quot; schiebt die Eins in den obersten Stackplatz und schiebt alle weiteren Werte (Nullen) nach hinten. Der Befehl &amp;quot;4&amp;quot; schiebt die Vier auf den 0. Platz und alle folgenden Werte, also insbesondere die Eins auf den jeweils nächsten Platz. Im nächsten Schritt &amp;quot;+&amp;quot; werden die obersten beiden Werte aus dem Stack herausgezogen - also 4 und 1 - und summiert. Das Ergebnis (5) wird wiederum in den Stack geschoben. Die beiden ursprünglichen Zahlen sind im Stack nicht mehr vorhanden.&lt;br /&gt;
&lt;br /&gt;
Ein zweites Beispiel:&lt;br /&gt;
&lt;br /&gt;
(1 + 2) * (4 + 5) muss wie bereits erwähnt folgendermaßen notiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 2 + 4 5 + *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Stack verhält sich somit folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;2&amp;quot;			2	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			3	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	3	0	0	0&lt;br /&gt;
&amp;quot;5&amp;quot;			5	4	3	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			9	3	0	0	0&lt;br /&gt;
&amp;quot;*&amp;quot;			27	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Ende befindet sich also das korrekte Ergebnis auf Stackplatz 0!&lt;br /&gt;
&lt;br /&gt;
=== Gleitkommazahlen und Strings ===&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Skriptsystem arbeitet ausschließlich mit den Datentypen Gleitkommazahl (einfache Präzision mit Vorzeichen) und String. Beide Datentypen haben getrennte Stacks. Deshalb laufen die Verarbeitung von Gleitkommazahlen und Strings im Allgemeinen unabhängig nebeneinander. Jedoch kann es natürlich vorkommen, dass bestimmte Funktionen z.B. Zahlen in Strings umwandeln und somit gleichzeitig auf beide Teilbereiche zugreifen.&lt;br /&gt;
&lt;br /&gt;
Auf boolische Variablen wurde verzichtet. Für boolische Werte werden im Allgemeinen die Zahlenwerte 0 und 1 verwendet.&lt;br /&gt;
&lt;br /&gt;
== Script-Schlüsselwörter ==&lt;br /&gt;
&lt;br /&gt;
=== Kommentare ===&lt;br /&gt;
&lt;br /&gt;
Kommentierungen sind nur möglich, indem in der auszukommentierenden Zeile ganz vorne ein Apostroph ['] gesetzt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Ich bin eine Kommentarzeile&lt;br /&gt;
   'Ich bin KEINE Kommentarzeile!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstiegs- und Ausstiegspunkte, Makros und Trigger ===&lt;br /&gt;
&lt;br /&gt;
Alle Befehle müssen zwischen einem Einstiegs- und einem Ausstiegspunkt liegen.&lt;br /&gt;
&lt;br /&gt;
Der Einstiegspunkt wird durch eins der folgenden Schlüsselwörter gekennzeichnet:&lt;br /&gt;
&lt;br /&gt;
* {frame} Im Laufe jedes Frames ruft OMSI über diesen Einstiegspunkt die frameweise Scriptverarbeitung auf, sofern er vorhanden ist.&lt;br /&gt;
* {init} Bei der Initialisierung ruft OMSI über diesen Einstiegspunkt die Script-Initialisierung auf.&lt;br /&gt;
* {frame_ai} Hierbei handelt es sich um eine Variante des {frame}-Einstiegspunktes, welcher bei Fahrzeugen dann aufgerufen wird, wenn diese nicht im Fokus des Benutzers stehen, z.B. wenn sie als KI-Fahrzeug unterwegs sind. Ist dieser Einstiegspunkt jedoch nicht vorhanden sondern nur {frame}, dann wird dieser alternativ aufgerufen. Bei Szenerieobjekten kommt dieser Eintrittspunkt nicht zur Anwendung.&lt;br /&gt;
* {macro:''name''} Dieser Einstiegspunkt ruft ein Subsektion (Makro) auf, welche '''stets nach dem Aufruf''' definiert werden muss.&lt;br /&gt;
* {trigger:''name''} Dieser Einstiegspunkt wird vom Hauptprogramm aufgerufen, wenn der Benutzer die Tastenkombination oder das Maus-Event mit der Bezeichnung ''name'' aufruft - es gibt auch bestimmte Trigger, die direkt vom Hauptprogramm aufgerufen werden, z.B. wenn OMSI bei KI-Bussen die Anzeige wechselt u.Ä.&lt;br /&gt;
&lt;br /&gt;
{end} ist der universelle Ausstiegspunkt. Er muss stets den Block abschließen, der mit einem der obigen Befehle eröffnet wird.&lt;br /&gt;
&lt;br /&gt;
==== Makroaufruf ====&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Makros erfolgt über (M.L.''name''). Der Aufruf des Makros muss ''immer'' vor dessen Definition erfolgen. Andernfalls meldet OMSI, dass das Makro nicht gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
==== Aufteilung des Scripts in mehrere Dateien ====&lt;br /&gt;
&lt;br /&gt;
Bei einfachen Scripts (z.B. bei reinen KI-Fahrzeugen oder Szenerieobjekten) reicht es im Allgemeinen eine *.sco-Datei zu erstellen, welche über einen {frame}...{end}- und ggf. einen {init}...{end}-Block verfügt.&lt;br /&gt;
&lt;br /&gt;
Handelt es sich jedoch um ein komplettes Fahrzeugscript, dann empfiehlt es sich für die verschiedenen Subsysteme getrennte Dateien anzulegen. Hierbei sollte folgendermaßen vorgegangen werden:&lt;br /&gt;
&lt;br /&gt;
* Es gibt ein Hauptscript und die nötigen Subsystemdateien. Die Hauptdatei enthält dabei die {frame}- und {init}-Blöcke, die jedoch nur Makros aufrufen, welche in den Subsystemdateien definiert sind.&lt;br /&gt;
* Für jedes Subsystem gibt es eine *.sco-Datei und je nach Bedarf eine eigene Varlist und Constfile mit den zum System gehörenden Variablen. Außerdem werden auch hier die Trigger für die Tastenbefehle einsortiert.&lt;br /&gt;
* Die Makros sollten sinnvollerweise folgendermaßen benannt werden: {macro:''subsystem''_frame} und {macro:''subsystem''_init}.&lt;br /&gt;
* Damit die Makros vom Hauptscript aufgerufen werden, muss dieses in der Liste der Scripts in der Objekt-Konfigurationsdatei als erstes aufgerufen werden. Die Reihenfolge der Scripts untereinander muss ebenfalls so gewählt werden, dass alle dateiübergreifenden Makroaufrufe stets vor der jeweiligen Makrodefinition stehen.&lt;br /&gt;
&lt;br /&gt;
Die Einschränkung, dass Makros immer hinter dem Aufruf definiert werden müssen, kann zwar bisweilen hinderlich sein, ist aber ein sehr wirksamer Schutz gegen Zirkelschlüsse und Endlosschleifen.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
&lt;br /&gt;
Wie schon geschrieben wurde, kann ein {trigger:''name''}...{end}-Abschnitt durch verschiedene Möglichkeiten aus dem Hauptprogramm heraus aufgerufen werden. Hierzu zählen:&lt;br /&gt;
&lt;br /&gt;
* Auslösung per Tastatur. Wurde die Tastenkombination mit dem Namen ''tastkomb'' bezeichnet, wird {trigger:tastkomb} aufgerufen, wenn die Taste gedrückt wird und {trigger:tastkomb_off}, wenn die Taste losgelassen wird.&lt;br /&gt;
* Auslösung per Maus. Wurde ein Mesh angeklickt mit der [mouseevent]-Bezeichnung ''mouse_ev'', so wird {trigger:mouse_ev} aufgerufen, wenn die Maustaste gedrückt wird, {trigger:mouse_ev_drag}, während die Maustaste gehalten wird und {trigger:mouse_ev_off}, wenn die Maustaste losgelassen wird.&lt;br /&gt;
* Außerdem gibt es noch eine Reihe von [[System-Trigger|System-Triggern]].&lt;br /&gt;
&lt;br /&gt;
=== Operationen ===&lt;br /&gt;
&lt;br /&gt;
==== Stack-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%stackdump%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt eine Dialogbox mit dem Gleitkomma-Stackinhalt aus. Sollte deshalb natürlich nur zu Debug-Zwecken eingesetzt werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s0, s1, ..., s7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichern des aktuellen Stackwertes im durch die Ziffer angegebenen Register. Der Wert verbleibt hierbei im Stack&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |l0, l1, ..., l7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Laden des entsprechenden Registerwertes und Verschiebung in den Stack. Registerwert bleibt erhalten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den obersten Stackwert; alle weiteren Stackwerte rücken nach hinten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$msg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt den obersten String-Stack-Wert in die Debug-Zeile von OMSI - egal, ob es sich um ein User-, KI-Fahrzeug oder Szenerieobjekt handelt.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den Stringstack-Wert analog zu &amp;quot;d&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Logische Operationen ====&lt;br /&gt;
&lt;br /&gt;
Die logischen Operationen arbeiten nach dem Prinzip 0 = FALSE, alles andere ist TRUE.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;amp;&amp;amp;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |UND, d.h. wenn einer der beiden obersten Stackwerte gleich 0 ist, ist das Ergbnis 0, sonst 1.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ODER&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verneinung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Vergleichsoperationen ====&lt;br /&gt;
&lt;br /&gt;
Die Vergleichsoperationen vergleichen die Werte in den beiden jeweils obersten Stackplätzen und fügen dann je nach Ergebnis eine &amp;quot;1&amp;quot; oder &amp;quot;0&amp;quot; im obersten Stackplatz ein. Die Größer-/Kleinerzeichen stehen dabei entsprechend für der Reihenfolge, in der die Werte zuvor angegeben wurden. Das bedeutet:&lt;br /&gt;
&lt;br /&gt;
4 2 &amp;gt; ist wahr, weil die intern durchgeführte Operation in diesem Fall &amp;quot;4 &amp;gt; 2&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls die obersten Stackwerte identisch sind, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls Stackwert 1 kleiner ist als Stackwert 0, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... kleiner als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wie &amp;quot;=&amp;quot; nur für die obersten beiden Stringstack-Plätze.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner als (String). Die Ungleich-Operationen bei Strings prüfen auf alphabetische Reihenfolge. &amp;quot;A&amp;quot; ist also kleiner als &amp;quot;B&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer als (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner oder gleich (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer oder gleich (String).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Mathematische Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Plus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Minus (Stackplatz 1 - Stackplatz 0, also vom Prinzip her wie bei den Größer/Kleiner-Operationen)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mal&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |geteilt (Stackplatz 1 / Stackplatz 0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rest der Division (folgendermaßen erweitert für Gleitkommazahlen: Stack0 - trunc(Stack1 / Stack0) * Stack1 )&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/-/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Vorzeichenwechsel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sinus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arcsin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Sinus ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arctan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Tangens ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |min&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des kleineren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |max&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des größeren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |exp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Exponentialfunktion zur Basis e (e^Stack0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqrt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadratwurzel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadrat&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sgn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Vorzeichens; je nachdem entweder -1, 0 oder 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |pi&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kreiszahl pi&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |random&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ganzzahlige Zufallszahl 0 &amp;lt;= x &amp;lt; Stack0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |abs&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Absolutwertes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |trunc&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Abrunden auf nächste ganze Zahl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;''bla''&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfügen des Strings ''bla'' auf dem obersten String-Stack-Platz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zusammenfügen zweier Strings. &amp;quot;Omnibus&amp;quot; &amp;quot;simulator&amp;quot; $+ ergibt &amp;quot;Omnibussimulator&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Der oberste Stack-String wird sooft wiederholt, bis die resultierende Zeichenlänger gerade noch kleiner oder gleich des obersten Stackwertes ist. Beispiel: &amp;quot;nu&amp;quot; 6 $* ergibt &amp;quot;nununu&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$length&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Zeichen des obersten Stack-String zurück in den Stack. &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutBegin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen vorne vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutEnd&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen hinten vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthR&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' rechtsbündig an, indem am Anfang Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthC&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' zentriert an, indem am Anfang und am Ende Zeichen entfernt oder Leerzeichen ergänzt werden ''(ab OMSI2)''.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthL&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' linksbündig an, indem am Ende Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
Achtung: Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rundet ''stack0'' ab und wandelt die resultierende Ganzzahl um in einen String.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStrEnh&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die erweiterte Version von IntToStr. Hierbei wird der oberste Stack-String verwendet, um das Format der String-Umwandlung zu bestimmen: Das erste Zeichen im String wird zum Auffüllen der fehlenden Zeichen verwendet, die folgenden Zeichen müssen eine Zahl ergeben, die die Stellen angibt. Beispiel: 35 &amp;quot; 5&amp;quot; $IntToStrEnh führt zu &amp;quot;   35&amp;quot; und 123456789 &amp;quot;011&amp;quot; $IntToStrEnh führt zu &amp;quot;00123456789&amp;quot;. Falls ein Fehler vorliegt, wird &amp;quot;ERROR&amp;quot; ausgegeben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$StrToFloat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wandelt den obersten Stack-String in eine Gleitkommazahl um, falls möglich. Andernfalls wird eine -1 geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$RemoveSpaces&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Entfernt sämtliche Leerzeichen vor und nach dem eigentlichen String. Aus &amp;quot;   Spandau Freudstr    &amp;quot; wird &amp;quot;Spandau Freudstr&amp;quot; ''(ab OMSI2)''.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variablenzugriff ===&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden in Systemvariablen und in lokale Variablen. Die Systemvariablen gelten OMSI-weit, die lokalen Variablen werden zum Fahrzeug/Objekt zugehörig gespeichert.&lt;br /&gt;
&lt;br /&gt;
Bei den lokalen Variablen gibt es stets einen Grundstamm an Variablen, welcher von OMSI vordefiniert werden. Darüber hinaus können beliebig viele Variablen mit Hilfe der Varlist-Dateien ergänzt werden. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.S.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die Systemvariable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale Variable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale String-Variable ''varname'' in den obersten String-Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten Stackplatz in die lokale Variable ''varname''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten String-Stackplatz in die lokale String-Variable ''varname''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung der einzelnen Systemvariablen und der vordefinierten lokalen Variablen finden Sie hier: [[System- und vordefinierte lokalen Variablen]]&lt;br /&gt;
&lt;br /&gt;
=== Konstanten und Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Lokale Konstanten und [http://de.wikipedia.org/w/index.php?title=Datei:Linear_interpolation.svg&amp;amp;filetimestamp=20080226155013 stückweise definierte lineare Funktionen] können in den Konstantendateien (''constfiles'', ''~_constfile.txt'') definiert werden. Der Aufbau jeder Konstantendatei entspricht der der [[Konfigurationsdateien|Konfigurationsdatei]]. Es gibt lediglich drei Schlüsselwörter. Zu beachten ist: Bisher können keine Strings, sondern nur Fließkommazahlen als Konstanten definiert werden.&lt;br /&gt;
&lt;br /&gt;
[const] definiert eine neue Konstante und gibt ihren Wert an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
name&lt;br /&gt;
wert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
leistung&lt;br /&gt;
200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[newcurve] leitet die Definition einer neuen (stückweise linearen) Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[pnt] fügt der zuvor mit [newcurve] definierten Funktion ein neues x-y-Paar hinzu. Jede Funktion sollte normalerweise über mindestens zwei Paare verfügen. Die Reihenfolge der Paare ''muss'' in x-Richtung aufsteigend sein!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
Drehzahl_Drehmoment_Kennlinie&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
50&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
300&lt;br /&gt;
400&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
1000&lt;br /&gt;
600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Konstanten werden über den Befehl (C.L.''konstantenname'') in den Stack geladen.&lt;br /&gt;
&lt;br /&gt;
Funktionen werden über den Befehl (F.L.''funktionsname'') aufgerufen. Dabei wird stets der zuvor auf oberster Stackposition befindliche Wert als x-Parameter übergaben und der resultierende y-Wert der Funktion stattdessen auf dem obersten Stackplatz gespeichert. Bewegt sich der x-Wert außerhalb der Grenzen der durch die [pnt]-Einträge definierten Eckpunkte, wird stets der y-Wert des nächstliegenden Eckpunktes verwendet. Die Funktion wird also vor dem ersten und hinter dem letzten Eckpunkt ins Unendliche waagerecht verlängert.&lt;br /&gt;
&lt;br /&gt;
=== Sound-Trigger ===&lt;br /&gt;
&lt;br /&gt;
Soundtrigger sind nicht mit den weiter oben erwähnten Triggern zu verwechseln!&lt;br /&gt;
&lt;br /&gt;
Sie stellen vielmehr eine Möglichkeit dar, direkt einen gewünschten Sound abzuspielen. Hierbei gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
(T.L.''soundtriggername'') ist ein einfacher Soundtrigger. Der so markierte Sound wird (einmalig) abgespielt.&lt;br /&gt;
&lt;br /&gt;
(T.F.''soundtriggername'') ist ein Soundtrigger mit Dateiwechselfunktion. Hierbei wird der oberste Stackstring ausgelesen und als Dateiname verwendet, wobei der Dateipfad relativ zum Sound-Ordner des Objektes interpretiert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Angenommen, die Sounddatei lautet &amp;quot;diese.wav&amp;quot; und ist mit dem Trigger ''MeinTrigger'' verknüpft, dann spielt&lt;br /&gt;
&lt;br /&gt;
 (T.L.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;diese.wav&amp;quot; ab und&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;andere.wav&amp;quot; (T.F.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;andere.wav&amp;quot;. Alternativ zu (T.L.''soundtriggername'') kann beim Befehl (T.F.''soundtriggername'') auch ein &amp;quot;Nullstring&amp;quot; im Stack liegen (also der String: &amp;quot;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== System-Makros ===&lt;br /&gt;
&lt;br /&gt;
Die bisherigen Methoden erlauben dem Script folgende Kommunikationsmöglichkeiten mit OMSI:&lt;br /&gt;
&lt;br /&gt;
* Lesen von Werten über System- und vordefinierte lokale Variablen&lt;br /&gt;
* Schreiben von Werten über ebendiese&lt;br /&gt;
* Empfangen von Tastatur-, Maus- oder Systemtriggern&lt;br /&gt;
&lt;br /&gt;
Schließlich gibt es noch eine weitere Methode, um mit dem Hauptprogramm zu kommunizieren, die sogenannten System-Makros, gelegentlich auch unpräzise als &amp;quot;Callback-Funktionen&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
In bestimmten Situationen ist es nötig, dass das Script Werte von OMSI bekommt, die in größeren Datenbanken vorliegen und daher nicht über vordefinierte Variablen übermittelt werden können, z.B. die Inhalte der Hofdatei. Hier kommen nun die System-Makros ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Diese arbeiten scriptseitig sehr ähnlich wie die lokalen, selbstdefinierten Makros: Der Aufruf (M.V.''macroname'') ruft das System-Makro auf (&amp;quot;V&amp;quot; stand ursprünglich für &amp;quot;Vehicle-Macro&amp;quot;, gilt aber genauso auch in Szenerieobjekten), das sich während der Ausführung Werte aus den beiden Stacks holt und/oder in diese schreibt. Eine Aufstellung aller System-Makros findet sich hier: [[System-Makros]]&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen und Schleifen ===&lt;br /&gt;
&lt;br /&gt;
Die einzige Steuerung des Programmablaufs ist zur Zeit nur mit der IF-Bedingung möglich.&lt;br /&gt;
&lt;br /&gt;
==== IF-Bedingung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dass erst die Bedingung formuliert wird und dann erst das Schlüsselwort {if} folgt, sollte einleuchten: Zunächst muss an oberster Stelle des Stacks der Wert abgelegt werden und erst dann folgt das Schlüsselwort {if}, welches diesen Wert prüft. Hierbei bedeutet ähnlich wie bei &amp;amp;&amp;amp; und || Gleichheit mit Null gleichbedeutend mit ''False'', alle anderen Werte bedeuten ''True''.&lt;br /&gt;
&lt;br /&gt;
Wenn also im obigen Beispiel ''bla'' den Wert 1 hat, wird ''blub'' auf den Wert 5 gesetzt, andernfalls auf den Wert 7.&lt;br /&gt;
&lt;br /&gt;
Verschachtelungen der IF-Bedingung dienen als Ersatz für die (nicht vorhandenen) &amp;quot;Else-If&amp;quot;-Konstruktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
    (L.L.bla) 5 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 5 ist:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        13&lt;br /&gt;
    {endif}&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist insbesondere auf das doppelte {endif} zu achten! Hier gilt:&lt;br /&gt;
&lt;br /&gt;
* bla = 1 ==&amp;gt; blub = 5&lt;br /&gt;
* bla = 5 ==&amp;gt; blub = 7&lt;br /&gt;
* sonst   ==&amp;gt; blub = 13&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=860</id>
		<title>Scriptsystem</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=860"/>
		<updated>2014-02-11T10:14:29Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Mathematische Operationen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem in OMSI ermöglicht es, dass Szenerieobjekte und vor allem Fahrzeuge mit individuellen Systemen ausgestattet werden können, die über Variablen und Funktionsaufrufe mit dem Hauptprogramm und der Grafik- und Soundengine kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der hier beschriebene Stand des Scriptsystems entspricht OMSI Version 1.01.&lt;br /&gt;
&lt;br /&gt;
== Dateien des Scriptsystems ==&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem umfasst folgende Dateien:&lt;br /&gt;
&lt;br /&gt;
* Scriptdateien mit ausführbarem Code (*.osc)&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien im OMSI\program-Verzeichnis zur Definition von (reinen) Systemvariablen&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien zur Definition von Uservariablen und (zusätzlichen) Systemvariablen (seit OMSI2)&lt;br /&gt;
* Constfile-Dateien zur Definition von Userkonstanten und Funktionstabellen&lt;br /&gt;
&lt;br /&gt;
Abgesehen von den Dateien zur Definition von Systemvariablen müssen alle benötigten Dateien für jedes Fahrzeug/Szenerieobjekt (im folgenden kurz: Objekt) in dessen [[Konfigurationsdatei]] angemeldet werden.&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es die Befehle ''[script]'', ''[varnamelist]'', ''[stringvarnamelist]'' und ''[constfile]''. Der erste Eintrag jedes Befehls ist die Anzahl der Dateien, darauf folgen die entsprechenden Dateinamen (inkl. Pfad relativ zur Konfigurationsdatei. Die Namen der Dateien sind nicht relevant, solange sie korrekt in die Listen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Auf die Funktion der jeweiligen Dateien wird im Laufe der Beschreibung der Scriptsprache eingegangen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Scriptsprache ==&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Scriptsystem arbeitet mit der [http://de.wikipedia.org/wiki/Umgekehrte_Polnische_Notation umgekehrten Polnischen Notation]. Hierbei steht der Operator hinter den beiden Operanden; vereinfacht gesagt bedeutet es, dass die Operation &amp;quot; 1 + 2 &amp;quot; stattdessen folgendermaßen notiert wird: &amp;quot; 1 2 + &amp;quot;. Ein komplizierteres Beispiel: &amp;quot; (1 + 2) * (4 + 5) &amp;quot; entspricht &amp;quot; 1 2 + 4 5 + * &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist die Tatsache, dass die OMSI-Textdateien und insbesondere die Scriptsprache [http://de.wikipedia.org/wiki/Case_sensitivity Case-Sensitive] ist! D.h. es ist immer auf die Groß- und Kleinschreibung zu achten!&lt;br /&gt;
&lt;br /&gt;
=== Stack und Register ===&lt;br /&gt;
&lt;br /&gt;
Bei der Verarbeitung der Scripts verfügt OMSI über einen String-Stack und einen [http://de.wikipedia.org/wiki/Stapelspeicher Stack] für [http://de.wikipedia.org/wiki/Gleitkommazahl Gleitkommazahlen]. Im folgenden ist mit &amp;quot;Stack&amp;quot; immer der Stack für Gleitkommazahlen gemeint, andernfalls wird von &amp;quot;String-Stack&amp;quot; gesprochen.&lt;br /&gt;
&lt;br /&gt;
Beide Stacks enthält 8 Speicherplätze, welche von 0 bis 7 durchnumeriert sind. Jede Script-Operation kann nun einen oder mehrere neue Werte in einen der Stacks einfügen (push), wobei der neue Wert auf die Position 0 gesetzt wird und alle folgenden Werte &amp;quot;einen Platz aufrücken&amp;quot;, oder sie kann einen oder mehrere Werte aus dem Stack herausziehen (pop/pull) oder lediglich auslesen (peek).&lt;br /&gt;
&lt;br /&gt;
Fürs temporäre Ablegen von Zahlen gibt es zusätzlich acht indizierte Speicherplätze, welche direkt geschrieben oder gelesen werden können, die sich im sogenannten Register befinden - hier gibt es jedoch nur einen Register für die Gleitkommazahlen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel-Operationen ===&lt;br /&gt;
&lt;br /&gt;
Beispiel: Die Operation 1 + 4. Der Code hierfür lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 4 +&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle wird demonstriert, wie sich hierbei der Stack verhält:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			5	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ausgangszustand ist der Stack nur mit Nullen (oder unbekannten/zufälligen Werten) gefüllt. Der Befehl &amp;quot;1&amp;quot; schiebt die Eins in den obersten Stackplatz und schiebt alle weiteren Werte (Nullen) nach hinten. Der Befehl &amp;quot;4&amp;quot; schiebt die Vier auf den 0. Platz und alle folgenden Werte, also insbesondere die Eins auf den jeweils nächsten Platz. Im nächsten Schritt &amp;quot;+&amp;quot; werden die obersten beiden Werte aus dem Stack herausgezogen - also 4 und 1 - und summiert. Das Ergebnis (5) wird wiederum in den Stack geschoben. Die beiden ursprünglichen Zahlen sind im Stack nicht mehr vorhanden.&lt;br /&gt;
&lt;br /&gt;
Ein zweites Beispiel:&lt;br /&gt;
&lt;br /&gt;
(1 + 2) * (4 + 5) muss wie bereits erwähnt folgendermaßen notiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 2 + 4 5 + *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Stack verhält sich somit folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;2&amp;quot;			2	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			3	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	3	0	0	0&lt;br /&gt;
&amp;quot;5&amp;quot;			5	4	3	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			9	3	0	0	0&lt;br /&gt;
&amp;quot;*&amp;quot;			27	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Ende befindet sich also das korrekte Ergebnis auf Stackplatz 0!&lt;br /&gt;
&lt;br /&gt;
=== Gleitkommazahlen und Strings ===&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Skriptsystem arbeitet ausschließlich mit den Datentypen Gleitkommazahl (einfache Präzision mit Vorzeichen) und String. Beide Datentypen haben getrennte Stacks. Deshalb laufen die Verarbeitung von Gleitkommazahlen und Strings im Allgemeinen unabhängig nebeneinander. Jedoch kann es natürlich vorkommen, dass bestimmte Funktionen z.B. Zahlen in Strings umwandeln und somit gleichzeitig auf beide Teilbereiche zugreifen.&lt;br /&gt;
&lt;br /&gt;
Auf boolische Variablen wurde verzichtet. Für boolische Werte werden im Allgemeinen die Zahlenwerte 0 und 1 verwendet.&lt;br /&gt;
&lt;br /&gt;
== Script-Schlüsselwörter ==&lt;br /&gt;
&lt;br /&gt;
=== Kommentare ===&lt;br /&gt;
&lt;br /&gt;
Kommentierungen sind nur möglich, indem in der auszukommentierenden Zeile ganz vorne ein Apostroph ['] gesetzt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Ich bin eine Kommentarzeile&lt;br /&gt;
   'Ich bin KEINE Kommentarzeile!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstiegs- und Ausstiegspunkte, Makros und Trigger ===&lt;br /&gt;
&lt;br /&gt;
Alle Befehle müssen zwischen einem Einstiegs- und einem Ausstiegspunkt liegen.&lt;br /&gt;
&lt;br /&gt;
Der Einstiegspunkt wird durch eins der folgenden Schlüsselwörter gekennzeichnet:&lt;br /&gt;
&lt;br /&gt;
* {frame} Im Laufe jedes Frames ruft OMSI über diesen Einstiegspunkt die frameweise Scriptverarbeitung auf, sofern er vorhanden ist.&lt;br /&gt;
* {init} Bei der Initialisierung ruft OMSI über diesen Einstiegspunkt die Script-Initialisierung auf.&lt;br /&gt;
* {frame_ai} Hierbei handelt es sich um eine Variante des {frame}-Einstiegspunktes, welcher bei Fahrzeugen dann aufgerufen wird, wenn diese nicht im Fokus des Benutzers stehen, z.B. wenn sie als KI-Fahrzeug unterwegs sind. Ist dieser Einstiegspunkt jedoch nicht vorhanden sondern nur {frame}, dann wird dieser alternativ aufgerufen. Bei Szenerieobjekten kommt dieser Eintrittspunkt nicht zur Anwendung.&lt;br /&gt;
* {macro:''name''} Dieser Einstiegspunkt ruft ein Subsektion (Makro) auf, welche '''stets nach dem Aufruf''' definiert werden muss.&lt;br /&gt;
* {trigger:''name''} Dieser Einstiegspunkt wird vom Hauptprogramm aufgerufen, wenn der Benutzer die Tastenkombination oder das Maus-Event mit der Bezeichnung ''name'' aufruft - es gibt auch bestimmte Trigger, die direkt vom Hauptprogramm aufgerufen werden, z.B. wenn OMSI bei KI-Bussen die Anzeige wechselt u.Ä.&lt;br /&gt;
&lt;br /&gt;
{end} ist der universelle Ausstiegspunkt. Er muss stets den Block abschließen, der mit einem der obigen Befehle eröffnet wird.&lt;br /&gt;
&lt;br /&gt;
==== Makroaufruf ====&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Makros erfolgt über (M.L.''name''). Der Aufruf des Makros muss ''immer'' vor dessen Definition erfolgen. Andernfalls meldet OMSI, dass das Makro nicht gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
==== Aufteilung des Scripts in mehrere Dateien ====&lt;br /&gt;
&lt;br /&gt;
Bei einfachen Scripts (z.B. bei reinen KI-Fahrzeugen oder Szenerieobjekten) reicht es im Allgemeinen eine *.sco-Datei zu erstellen, welche über einen {frame}...{end}- und ggf. einen {init}...{end}-Block verfügt.&lt;br /&gt;
&lt;br /&gt;
Handelt es sich jedoch um ein komplettes Fahrzeugscript, dann empfiehlt es sich für die verschiedenen Subsysteme getrennte Dateien anzulegen. Hierbei sollte folgendermaßen vorgegangen werden:&lt;br /&gt;
&lt;br /&gt;
* Es gibt ein Hauptscript und die nötigen Subsystemdateien. Die Hauptdatei enthält dabei die {frame}- und {init}-Blöcke, die jedoch nur Makros aufrufen, welche in den Subsystemdateien definiert sind.&lt;br /&gt;
* Für jedes Subsystem gibt es eine *.sco-Datei und je nach Bedarf eine eigene Varlist und Constfile mit den zum System gehörenden Variablen. Außerdem werden auch hier die Trigger für die Tastenbefehle einsortiert.&lt;br /&gt;
* Die Makros sollten sinnvollerweise folgendermaßen benannt werden: {macro:''subsystem''_frame} und {macro:''subsystem''_init}.&lt;br /&gt;
* Damit die Makros vom Hauptscript aufgerufen werden, muss dieses in der Liste der Scripts in der Objekt-Konfigurationsdatei als erstes aufgerufen werden. Die Reihenfolge der Scripts untereinander muss ebenfalls so gewählt werden, dass alle dateiübergreifenden Makroaufrufe stets vor der jeweiligen Makrodefinition stehen.&lt;br /&gt;
&lt;br /&gt;
Die Einschränkung, dass Makros immer hinter dem Aufruf definiert werden müssen, kann zwar bisweilen hinderlich sein, ist aber ein sehr wirksamer Schutz gegen Zirkelschlüsse und Endlosschleifen.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
&lt;br /&gt;
Wie schon geschrieben wurde, kann ein {trigger:''name''}...{end}-Abschnitt durch verschiedene Möglichkeiten aus dem Hauptprogramm heraus aufgerufen werden. Hierzu zählen:&lt;br /&gt;
&lt;br /&gt;
* Auslösung per Tastatur. Wurde die Tastenkombination mit dem Namen ''tastkomb'' bezeichnet, wird {trigger:tastkomb} aufgerufen, wenn die Taste gedrückt wird und {trigger:tastkomb_off}, wenn die Taste losgelassen wird.&lt;br /&gt;
* Auslösung per Maus. Wurde ein Mesh angeklickt mit der [mouseevent]-Bezeichnung ''mouse_ev'', so wird {trigger:mouse_ev} aufgerufen, wenn die Maustaste gedrückt wird, {trigger:mouse_ev_drag}, während die Maustaste gehalten wird und {trigger:mouse_ev_off}, wenn die Maustaste losgelassen wird.&lt;br /&gt;
* Außerdem gibt es noch eine Reihe von [[System-Trigger|System-Triggern]].&lt;br /&gt;
&lt;br /&gt;
=== Operationen ===&lt;br /&gt;
&lt;br /&gt;
==== Stack-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%stackdump%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt eine Dialogbox mit dem Gleitkomma-Stackinhalt aus. Sollte deshalb natürlich nur zu Debug-Zwecken eingesetzt werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s0, s1, ..., s7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichern des aktuellen Stackwertes im durch die Ziffer angegebenen Register. Der Wert verbleibt hierbei im Stack&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |l0, l1, ..., l7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Laden des entsprechenden Registerwertes und Verschiebung in den Stack. Registerwert bleibt erhalten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den obersten Stackwert; alle weiteren Stackwerte rücken nach hinten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$msg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt den obersten String-Stack-Wert in die Debug-Zeile von OMSI - egal, ob es sich um ein User-, KI-Fahrzeug oder Szenerieobjekt handelt.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den Stringstack-Wert analog zu &amp;quot;d&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Logische Operationen ====&lt;br /&gt;
&lt;br /&gt;
Die logischen Operationen arbeiten nach dem Prinzip 0 = FALSE, alles andere ist TRUE.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;amp;&amp;amp;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |UND, d.h. wenn einer der beiden obersten Stackwerte gleich 0 ist, ist das Ergbnis 0, sonst 1.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ODER&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verneinung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Vergleichsoperationen ====&lt;br /&gt;
&lt;br /&gt;
Die Vergleichsoperationen vergleichen die Werte in den beiden jeweils obersten Stackplätzen und fügen dann je nach Ergebnis eine &amp;quot;1&amp;quot; oder &amp;quot;0&amp;quot; im obersten Stackplatz ein. Die Größer-/Kleinerzeichen stehen dabei entsprechend für der Reihenfolge, in der die Werte zuvor angegeben wurden. Das bedeutet:&lt;br /&gt;
&lt;br /&gt;
4 2 &amp;gt; ist wahr, weil die intern durchgeführte Operation in diesem Fall &amp;quot;4 &amp;gt; 2&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls die obersten Stackwerte identisch sind, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls Stackwert 1 kleiner ist als Stackwert 0, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... kleiner als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wie &amp;quot;=&amp;quot; nur für die obersten beiden Stringstack-Plätze.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner als (String). Die Ungleich-Operationen bei Strings prüfen auf alphabetische Reihenfolge. &amp;quot;A&amp;quot; ist also kleiner als &amp;quot;B&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer als (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner oder gleich (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer oder gleich (String).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Mathematische Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Plus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Minus (Stackplatz 1 - Stackplatz 0, also vom Prinzip her wie bei den Größer/Kleiner-Operationen)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mal&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |geteilt (Stackplatz 1 / Stackplatz 0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rest der Division (folgendermaßen erweitert für Gleitkommazahlen: Stack0 - trunc(Stack1 / Stack0) * Stack1 )&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/-/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Vorzeichenwechsel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sinus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arcsin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Sinus ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arctan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Tangens ''(ab OMSI2)''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |min&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des kleineren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |max&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des größeren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |exp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Exponentialfunktion zur Basis e (e^Stack0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqrt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadratwurzel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadrat&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sgn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Vorzeichens; je nachdem entweder -1, 0 oder 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |pi&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kreiszahl pi&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |random&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ganzzahlige Zufallszahl 0 &amp;lt;= x &amp;lt; Stack0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |abs&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Absolutwertes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |trunc&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Abrunden auf nächste ganze Zahl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;''bla''&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfügen des Strings ''bla'' auf dem obersten String-Stack-Platz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zusammenfügen zweier Strings. &amp;quot;Omnibus&amp;quot; &amp;quot;simulator&amp;quot; $+ ergibt &amp;quot;Omnibussimulator&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Der oberste Stack-String wird sooft wiederholt, bis die resultierende Zeichenlänger gerade noch kleiner oder gleich des obersten Stackwertes ist. Beispiel: &amp;quot;nu&amp;quot; 6 $* ergibt &amp;quot;nununu&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$length&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Zeichen des obersten Stack-String zurück in den Stack. &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutBegin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen vorne vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutEnd&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen hinten vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthR&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' rechtsbündig an, indem am Anfang Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
VORSICHT Bug! Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthL&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' linksbündig an, indem am Ende Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
VORSICHT Bug! Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rundet ''stack0'' ab und wandelt die resultierende Ganzzahl um in einen String.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStrEnh&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die erweiterte Version von IntToStr. Hierbei wird der oberste Stack-String verwendet, um das Format der String-Umwandlung zu bestimmen: Das erste Zeichen im String wird zum Auffüllen der fehlenden Zeichen verwendet, die folgenden Zeichen müssen eine Zahl ergeben, die die Stellen angibt. Beispiel: 35 &amp;quot; 5&amp;quot; $IntToStrEnh führt zu &amp;quot;   35&amp;quot; und 123456789 &amp;quot;011&amp;quot; $IntToStrEnh führt zu &amp;quot;00123456789&amp;quot;. Falls ein Fehler vorliegt, wird &amp;quot;ERROR&amp;quot; ausgegeben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$StrToFloat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wandelt den obersten Stack-String in eine Gleitkommazahl um, falls möglich. Andernfalls wird eine -1 geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variablenzugriff ===&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden in Systemvariablen und in lokale Variablen. Die Systemvariablen gelten OMSI-weit, die lokalen Variablen werden zum Fahrzeug/Objekt zugehörig gespeichert.&lt;br /&gt;
&lt;br /&gt;
Bei den lokalen Variablen gibt es stets einen Grundstamm an Variablen, welcher von OMSI vordefiniert werden. Darüber hinaus können beliebig viele Variablen mit Hilfe der Varlist-Dateien ergänzt werden. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.S.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die Systemvariable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale Variable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale String-Variable ''varname'' in den obersten String-Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten Stackplatz in die lokale Variable ''varname''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten String-Stackplatz in die lokale String-Variable ''varname''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung der einzelnen Systemvariablen und der vordefinierten lokalen Variablen finden Sie hier: [[System- und vordefinierte lokalen Variablen]]&lt;br /&gt;
&lt;br /&gt;
=== Konstanten und Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Lokale Konstanten und [http://de.wikipedia.org/w/index.php?title=Datei:Linear_interpolation.svg&amp;amp;filetimestamp=20080226155013 stückweise definierte lineare Funktionen] können in den Konstantendateien (''constfiles'', ''~_constfile.txt'') definiert werden. Der Aufbau jeder Konstantendatei entspricht der der [[Konfigurationsdateien|Konfigurationsdatei]]. Es gibt lediglich drei Schlüsselwörter. Zu beachten ist: Bisher können keine Strings, sondern nur Fließkommazahlen als Konstanten definiert werden.&lt;br /&gt;
&lt;br /&gt;
[const] definiert eine neue Konstante und gibt ihren Wert an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
name&lt;br /&gt;
wert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
leistung&lt;br /&gt;
200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[newcurve] leitet die Definition einer neuen (stückweise linearen) Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[pnt] fügt der zuvor mit [newcurve] definierten Funktion ein neues x-y-Paar hinzu. Jede Funktion sollte normalerweise über mindestens zwei Paare verfügen. Die Reihenfolge der Paare ''muss'' in x-Richtung aufsteigend sein!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
Drehzahl_Drehmoment_Kennlinie&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
50&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
300&lt;br /&gt;
400&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
1000&lt;br /&gt;
600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Konstanten werden über den Befehl (C.L.''konstantenname'') in den Stack geladen.&lt;br /&gt;
&lt;br /&gt;
Funktionen werden über den Befehl (F.L.''funktionsname'') aufgerufen. Dabei wird stets der zuvor auf oberster Stackposition befindliche Wert als x-Parameter übergaben und der resultierende y-Wert der Funktion stattdessen auf dem obersten Stackplatz gespeichert. Bewegt sich der x-Wert außerhalb der Grenzen der durch die [pnt]-Einträge definierten Eckpunkte, wird stets der y-Wert des nächstliegenden Eckpunktes verwendet. Die Funktion wird also vor dem ersten und hinter dem letzten Eckpunkt ins Unendliche waagerecht verlängert.&lt;br /&gt;
&lt;br /&gt;
=== Sound-Trigger ===&lt;br /&gt;
&lt;br /&gt;
Soundtrigger sind nicht mit den weiter oben erwähnten Triggern zu verwechseln!&lt;br /&gt;
&lt;br /&gt;
Sie stellen vielmehr eine Möglichkeit dar, direkt einen gewünschten Sound abzuspielen. Hierbei gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
(T.L.''soundtriggername'') ist ein einfacher Soundtrigger. Der so markierte Sound wird (einmalig) abgespielt.&lt;br /&gt;
&lt;br /&gt;
(T.F.''soundtriggername'') ist ein Soundtrigger mit Dateiwechselfunktion. Hierbei wird der oberste Stackstring ausgelesen und als Dateiname verwendet, wobei der Dateipfad relativ zum Sound-Ordner des Objektes interpretiert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Angenommen, die Sounddatei lautet &amp;quot;diese.wav&amp;quot; und ist mit dem Trigger ''MeinTrigger'' verknüpft, dann spielt&lt;br /&gt;
&lt;br /&gt;
 (T.L.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;diese.wav&amp;quot; ab und&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;andere.wav&amp;quot; (T.F.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;andere.wav&amp;quot;. Alternativ zu (T.L.''soundtriggername'') kann beim Befehl (T.F.''soundtriggername'') auch ein &amp;quot;Nullstring&amp;quot; im Stack liegen (also der String: &amp;quot;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== System-Makros ===&lt;br /&gt;
&lt;br /&gt;
Die bisherigen Methoden erlauben dem Script folgende Kommunikationsmöglichkeiten mit OMSI:&lt;br /&gt;
&lt;br /&gt;
* Lesen von Werten über System- und vordefinierte lokale Variablen&lt;br /&gt;
* Schreiben von Werten über ebendiese&lt;br /&gt;
* Empfangen von Tastatur-, Maus- oder Systemtriggern&lt;br /&gt;
&lt;br /&gt;
Schließlich gibt es noch eine weitere Methode, um mit dem Hauptprogramm zu kommunizieren, die sogenannten System-Makros, gelegentlich auch unpräzise als &amp;quot;Callback-Funktionen&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
In bestimmten Situationen ist es nötig, dass das Script Werte von OMSI bekommt, die in größeren Datenbanken vorliegen und daher nicht über vordefinierte Variablen übermittelt werden können, z.B. die Inhalte der Hofdatei. Hier kommen nun die System-Makros ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Diese arbeiten scriptseitig sehr ähnlich wie die lokalen, selbstdefinierten Makros: Der Aufruf (M.V.''macroname'') ruft das System-Makro auf (&amp;quot;V&amp;quot; stand ursprünglich für &amp;quot;Vehicle-Macro&amp;quot;, gilt aber genauso auch in Szenerieobjekten), das sich während der Ausführung Werte aus den beiden Stacks holt und/oder in diese schreibt. Eine Aufstellung aller System-Makros findet sich hier: [[System-Makros]]&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen und Schleifen ===&lt;br /&gt;
&lt;br /&gt;
Die einzige Steuerung des Programmablaufs ist zur Zeit nur mit der IF-Bedingung möglich.&lt;br /&gt;
&lt;br /&gt;
==== IF-Bedingung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dass erst die Bedingung formuliert wird und dann erst das Schlüsselwort {if} folgt, sollte einleuchten: Zunächst muss an oberster Stelle des Stacks der Wert abgelegt werden und erst dann folgt das Schlüsselwort {if}, welches diesen Wert prüft. Hierbei bedeutet ähnlich wie bei &amp;amp;&amp;amp; und || Gleichheit mit Null gleichbedeutend mit ''False'', alle anderen Werte bedeuten ''True''.&lt;br /&gt;
&lt;br /&gt;
Wenn also im obigen Beispiel ''bla'' den Wert 1 hat, wird ''blub'' auf den Wert 5 gesetzt, andernfalls auf den Wert 7.&lt;br /&gt;
&lt;br /&gt;
Verschachtelungen der IF-Bedingung dienen als Ersatz für die (nicht vorhandenen) &amp;quot;Else-If&amp;quot;-Konstruktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
    (L.L.bla) 5 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 5 ist:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        13&lt;br /&gt;
    {endif}&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist insbesondere auf das doppelte {endif} zu achten! Hier gilt:&lt;br /&gt;
&lt;br /&gt;
* bla = 1 ==&amp;gt; blub = 5&lt;br /&gt;
* bla = 5 ==&amp;gt; blub = 7&lt;br /&gt;
* sonst   ==&amp;gt; blub = 13&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=859</id>
		<title>Scriptsystem</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=859"/>
		<updated>2014-02-11T10:13:53Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Mathematische Operationen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem in OMSI ermöglicht es, dass Szenerieobjekte und vor allem Fahrzeuge mit individuellen Systemen ausgestattet werden können, die über Variablen und Funktionsaufrufe mit dem Hauptprogramm und der Grafik- und Soundengine kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der hier beschriebene Stand des Scriptsystems entspricht OMSI Version 1.01.&lt;br /&gt;
&lt;br /&gt;
== Dateien des Scriptsystems ==&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem umfasst folgende Dateien:&lt;br /&gt;
&lt;br /&gt;
* Scriptdateien mit ausführbarem Code (*.osc)&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien im OMSI\program-Verzeichnis zur Definition von (reinen) Systemvariablen&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien zur Definition von Uservariablen und (zusätzlichen) Systemvariablen (seit OMSI2)&lt;br /&gt;
* Constfile-Dateien zur Definition von Userkonstanten und Funktionstabellen&lt;br /&gt;
&lt;br /&gt;
Abgesehen von den Dateien zur Definition von Systemvariablen müssen alle benötigten Dateien für jedes Fahrzeug/Szenerieobjekt (im folgenden kurz: Objekt) in dessen [[Konfigurationsdatei]] angemeldet werden.&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es die Befehle ''[script]'', ''[varnamelist]'', ''[stringvarnamelist]'' und ''[constfile]''. Der erste Eintrag jedes Befehls ist die Anzahl der Dateien, darauf folgen die entsprechenden Dateinamen (inkl. Pfad relativ zur Konfigurationsdatei. Die Namen der Dateien sind nicht relevant, solange sie korrekt in die Listen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Auf die Funktion der jeweiligen Dateien wird im Laufe der Beschreibung der Scriptsprache eingegangen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Scriptsprache ==&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Scriptsystem arbeitet mit der [http://de.wikipedia.org/wiki/Umgekehrte_Polnische_Notation umgekehrten Polnischen Notation]. Hierbei steht der Operator hinter den beiden Operanden; vereinfacht gesagt bedeutet es, dass die Operation &amp;quot; 1 + 2 &amp;quot; stattdessen folgendermaßen notiert wird: &amp;quot; 1 2 + &amp;quot;. Ein komplizierteres Beispiel: &amp;quot; (1 + 2) * (4 + 5) &amp;quot; entspricht &amp;quot; 1 2 + 4 5 + * &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist die Tatsache, dass die OMSI-Textdateien und insbesondere die Scriptsprache [http://de.wikipedia.org/wiki/Case_sensitivity Case-Sensitive] ist! D.h. es ist immer auf die Groß- und Kleinschreibung zu achten!&lt;br /&gt;
&lt;br /&gt;
=== Stack und Register ===&lt;br /&gt;
&lt;br /&gt;
Bei der Verarbeitung der Scripts verfügt OMSI über einen String-Stack und einen [http://de.wikipedia.org/wiki/Stapelspeicher Stack] für [http://de.wikipedia.org/wiki/Gleitkommazahl Gleitkommazahlen]. Im folgenden ist mit &amp;quot;Stack&amp;quot; immer der Stack für Gleitkommazahlen gemeint, andernfalls wird von &amp;quot;String-Stack&amp;quot; gesprochen.&lt;br /&gt;
&lt;br /&gt;
Beide Stacks enthält 8 Speicherplätze, welche von 0 bis 7 durchnumeriert sind. Jede Script-Operation kann nun einen oder mehrere neue Werte in einen der Stacks einfügen (push), wobei der neue Wert auf die Position 0 gesetzt wird und alle folgenden Werte &amp;quot;einen Platz aufrücken&amp;quot;, oder sie kann einen oder mehrere Werte aus dem Stack herausziehen (pop/pull) oder lediglich auslesen (peek).&lt;br /&gt;
&lt;br /&gt;
Fürs temporäre Ablegen von Zahlen gibt es zusätzlich acht indizierte Speicherplätze, welche direkt geschrieben oder gelesen werden können, die sich im sogenannten Register befinden - hier gibt es jedoch nur einen Register für die Gleitkommazahlen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel-Operationen ===&lt;br /&gt;
&lt;br /&gt;
Beispiel: Die Operation 1 + 4. Der Code hierfür lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 4 +&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle wird demonstriert, wie sich hierbei der Stack verhält:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			5	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ausgangszustand ist der Stack nur mit Nullen (oder unbekannten/zufälligen Werten) gefüllt. Der Befehl &amp;quot;1&amp;quot; schiebt die Eins in den obersten Stackplatz und schiebt alle weiteren Werte (Nullen) nach hinten. Der Befehl &amp;quot;4&amp;quot; schiebt die Vier auf den 0. Platz und alle folgenden Werte, also insbesondere die Eins auf den jeweils nächsten Platz. Im nächsten Schritt &amp;quot;+&amp;quot; werden die obersten beiden Werte aus dem Stack herausgezogen - also 4 und 1 - und summiert. Das Ergebnis (5) wird wiederum in den Stack geschoben. Die beiden ursprünglichen Zahlen sind im Stack nicht mehr vorhanden.&lt;br /&gt;
&lt;br /&gt;
Ein zweites Beispiel:&lt;br /&gt;
&lt;br /&gt;
(1 + 2) * (4 + 5) muss wie bereits erwähnt folgendermaßen notiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 2 + 4 5 + *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Stack verhält sich somit folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;2&amp;quot;			2	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			3	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	3	0	0	0&lt;br /&gt;
&amp;quot;5&amp;quot;			5	4	3	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			9	3	0	0	0&lt;br /&gt;
&amp;quot;*&amp;quot;			27	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Ende befindet sich also das korrekte Ergebnis auf Stackplatz 0!&lt;br /&gt;
&lt;br /&gt;
=== Gleitkommazahlen und Strings ===&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Skriptsystem arbeitet ausschließlich mit den Datentypen Gleitkommazahl (einfache Präzision mit Vorzeichen) und String. Beide Datentypen haben getrennte Stacks. Deshalb laufen die Verarbeitung von Gleitkommazahlen und Strings im Allgemeinen unabhängig nebeneinander. Jedoch kann es natürlich vorkommen, dass bestimmte Funktionen z.B. Zahlen in Strings umwandeln und somit gleichzeitig auf beide Teilbereiche zugreifen.&lt;br /&gt;
&lt;br /&gt;
Auf boolische Variablen wurde verzichtet. Für boolische Werte werden im Allgemeinen die Zahlenwerte 0 und 1 verwendet.&lt;br /&gt;
&lt;br /&gt;
== Script-Schlüsselwörter ==&lt;br /&gt;
&lt;br /&gt;
=== Kommentare ===&lt;br /&gt;
&lt;br /&gt;
Kommentierungen sind nur möglich, indem in der auszukommentierenden Zeile ganz vorne ein Apostroph ['] gesetzt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Ich bin eine Kommentarzeile&lt;br /&gt;
   'Ich bin KEINE Kommentarzeile!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstiegs- und Ausstiegspunkte, Makros und Trigger ===&lt;br /&gt;
&lt;br /&gt;
Alle Befehle müssen zwischen einem Einstiegs- und einem Ausstiegspunkt liegen.&lt;br /&gt;
&lt;br /&gt;
Der Einstiegspunkt wird durch eins der folgenden Schlüsselwörter gekennzeichnet:&lt;br /&gt;
&lt;br /&gt;
* {frame} Im Laufe jedes Frames ruft OMSI über diesen Einstiegspunkt die frameweise Scriptverarbeitung auf, sofern er vorhanden ist.&lt;br /&gt;
* {init} Bei der Initialisierung ruft OMSI über diesen Einstiegspunkt die Script-Initialisierung auf.&lt;br /&gt;
* {frame_ai} Hierbei handelt es sich um eine Variante des {frame}-Einstiegspunktes, welcher bei Fahrzeugen dann aufgerufen wird, wenn diese nicht im Fokus des Benutzers stehen, z.B. wenn sie als KI-Fahrzeug unterwegs sind. Ist dieser Einstiegspunkt jedoch nicht vorhanden sondern nur {frame}, dann wird dieser alternativ aufgerufen. Bei Szenerieobjekten kommt dieser Eintrittspunkt nicht zur Anwendung.&lt;br /&gt;
* {macro:''name''} Dieser Einstiegspunkt ruft ein Subsektion (Makro) auf, welche '''stets nach dem Aufruf''' definiert werden muss.&lt;br /&gt;
* {trigger:''name''} Dieser Einstiegspunkt wird vom Hauptprogramm aufgerufen, wenn der Benutzer die Tastenkombination oder das Maus-Event mit der Bezeichnung ''name'' aufruft - es gibt auch bestimmte Trigger, die direkt vom Hauptprogramm aufgerufen werden, z.B. wenn OMSI bei KI-Bussen die Anzeige wechselt u.Ä.&lt;br /&gt;
&lt;br /&gt;
{end} ist der universelle Ausstiegspunkt. Er muss stets den Block abschließen, der mit einem der obigen Befehle eröffnet wird.&lt;br /&gt;
&lt;br /&gt;
==== Makroaufruf ====&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Makros erfolgt über (M.L.''name''). Der Aufruf des Makros muss ''immer'' vor dessen Definition erfolgen. Andernfalls meldet OMSI, dass das Makro nicht gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
==== Aufteilung des Scripts in mehrere Dateien ====&lt;br /&gt;
&lt;br /&gt;
Bei einfachen Scripts (z.B. bei reinen KI-Fahrzeugen oder Szenerieobjekten) reicht es im Allgemeinen eine *.sco-Datei zu erstellen, welche über einen {frame}...{end}- und ggf. einen {init}...{end}-Block verfügt.&lt;br /&gt;
&lt;br /&gt;
Handelt es sich jedoch um ein komplettes Fahrzeugscript, dann empfiehlt es sich für die verschiedenen Subsysteme getrennte Dateien anzulegen. Hierbei sollte folgendermaßen vorgegangen werden:&lt;br /&gt;
&lt;br /&gt;
* Es gibt ein Hauptscript und die nötigen Subsystemdateien. Die Hauptdatei enthält dabei die {frame}- und {init}-Blöcke, die jedoch nur Makros aufrufen, welche in den Subsystemdateien definiert sind.&lt;br /&gt;
* Für jedes Subsystem gibt es eine *.sco-Datei und je nach Bedarf eine eigene Varlist und Constfile mit den zum System gehörenden Variablen. Außerdem werden auch hier die Trigger für die Tastenbefehle einsortiert.&lt;br /&gt;
* Die Makros sollten sinnvollerweise folgendermaßen benannt werden: {macro:''subsystem''_frame} und {macro:''subsystem''_init}.&lt;br /&gt;
* Damit die Makros vom Hauptscript aufgerufen werden, muss dieses in der Liste der Scripts in der Objekt-Konfigurationsdatei als erstes aufgerufen werden. Die Reihenfolge der Scripts untereinander muss ebenfalls so gewählt werden, dass alle dateiübergreifenden Makroaufrufe stets vor der jeweiligen Makrodefinition stehen.&lt;br /&gt;
&lt;br /&gt;
Die Einschränkung, dass Makros immer hinter dem Aufruf definiert werden müssen, kann zwar bisweilen hinderlich sein, ist aber ein sehr wirksamer Schutz gegen Zirkelschlüsse und Endlosschleifen.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
&lt;br /&gt;
Wie schon geschrieben wurde, kann ein {trigger:''name''}...{end}-Abschnitt durch verschiedene Möglichkeiten aus dem Hauptprogramm heraus aufgerufen werden. Hierzu zählen:&lt;br /&gt;
&lt;br /&gt;
* Auslösung per Tastatur. Wurde die Tastenkombination mit dem Namen ''tastkomb'' bezeichnet, wird {trigger:tastkomb} aufgerufen, wenn die Taste gedrückt wird und {trigger:tastkomb_off}, wenn die Taste losgelassen wird.&lt;br /&gt;
* Auslösung per Maus. Wurde ein Mesh angeklickt mit der [mouseevent]-Bezeichnung ''mouse_ev'', so wird {trigger:mouse_ev} aufgerufen, wenn die Maustaste gedrückt wird, {trigger:mouse_ev_drag}, während die Maustaste gehalten wird und {trigger:mouse_ev_off}, wenn die Maustaste losgelassen wird.&lt;br /&gt;
* Außerdem gibt es noch eine Reihe von [[System-Trigger|System-Triggern]].&lt;br /&gt;
&lt;br /&gt;
=== Operationen ===&lt;br /&gt;
&lt;br /&gt;
==== Stack-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%stackdump%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt eine Dialogbox mit dem Gleitkomma-Stackinhalt aus. Sollte deshalb natürlich nur zu Debug-Zwecken eingesetzt werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s0, s1, ..., s7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichern des aktuellen Stackwertes im durch die Ziffer angegebenen Register. Der Wert verbleibt hierbei im Stack&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |l0, l1, ..., l7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Laden des entsprechenden Registerwertes und Verschiebung in den Stack. Registerwert bleibt erhalten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den obersten Stackwert; alle weiteren Stackwerte rücken nach hinten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$msg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt den obersten String-Stack-Wert in die Debug-Zeile von OMSI - egal, ob es sich um ein User-, KI-Fahrzeug oder Szenerieobjekt handelt.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den Stringstack-Wert analog zu &amp;quot;d&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Logische Operationen ====&lt;br /&gt;
&lt;br /&gt;
Die logischen Operationen arbeiten nach dem Prinzip 0 = FALSE, alles andere ist TRUE.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;amp;&amp;amp;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |UND, d.h. wenn einer der beiden obersten Stackwerte gleich 0 ist, ist das Ergbnis 0, sonst 1.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ODER&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verneinung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Vergleichsoperationen ====&lt;br /&gt;
&lt;br /&gt;
Die Vergleichsoperationen vergleichen die Werte in den beiden jeweils obersten Stackplätzen und fügen dann je nach Ergebnis eine &amp;quot;1&amp;quot; oder &amp;quot;0&amp;quot; im obersten Stackplatz ein. Die Größer-/Kleinerzeichen stehen dabei entsprechend für der Reihenfolge, in der die Werte zuvor angegeben wurden. Das bedeutet:&lt;br /&gt;
&lt;br /&gt;
4 2 &amp;gt; ist wahr, weil die intern durchgeführte Operation in diesem Fall &amp;quot;4 &amp;gt; 2&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls die obersten Stackwerte identisch sind, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls Stackwert 1 kleiner ist als Stackwert 0, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... kleiner als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wie &amp;quot;=&amp;quot; nur für die obersten beiden Stringstack-Plätze.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner als (String). Die Ungleich-Operationen bei Strings prüfen auf alphabetische Reihenfolge. &amp;quot;A&amp;quot; ist also kleiner als &amp;quot;B&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer als (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner oder gleich (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer oder gleich (String).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Mathematische Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Plus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Minus (Stackplatz 1 - Stackplatz 0, also vom Prinzip her wie bei den Größer/Kleiner-Operationen)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mal&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |geteilt (Stackplatz 1 / Stackplatz 0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rest der Division (folgendermaßen erweitert für Gleitkommazahlen: Stack0 - trunc(Stack1 / Stack0) * Stack1 )&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/-/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Vorzeichenwechsel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sinus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arcsin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Sinus (ab OMSI2)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |arctan&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Umkehrfunktion zum Tangens (ab OMSI2)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |min&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des kleineren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |max&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des größeren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |exp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Exponentialfunktion zur Basis e (e^Stack0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqrt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadratwurzel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadrat&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sgn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Vorzeichens; je nachdem entweder -1, 0 oder 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |pi&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kreiszahl pi&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |random&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ganzzahlige Zufallszahl 0 &amp;lt;= x &amp;lt; Stack0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |abs&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Absolutwertes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |trunc&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Abrunden auf nächste ganze Zahl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;''bla''&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfügen des Strings ''bla'' auf dem obersten String-Stack-Platz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zusammenfügen zweier Strings. &amp;quot;Omnibus&amp;quot; &amp;quot;simulator&amp;quot; $+ ergibt &amp;quot;Omnibussimulator&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Der oberste Stack-String wird sooft wiederholt, bis die resultierende Zeichenlänger gerade noch kleiner oder gleich des obersten Stackwertes ist. Beispiel: &amp;quot;nu&amp;quot; 6 $* ergibt &amp;quot;nununu&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$length&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Zeichen des obersten Stack-String zurück in den Stack. &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutBegin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen vorne vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutEnd&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen hinten vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthR&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' rechtsbündig an, indem am Anfang Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
VORSICHT Bug! Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthL&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' linksbündig an, indem am Ende Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
VORSICHT Bug! Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rundet ''stack0'' ab und wandelt die resultierende Ganzzahl um in einen String.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStrEnh&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die erweiterte Version von IntToStr. Hierbei wird der oberste Stack-String verwendet, um das Format der String-Umwandlung zu bestimmen: Das erste Zeichen im String wird zum Auffüllen der fehlenden Zeichen verwendet, die folgenden Zeichen müssen eine Zahl ergeben, die die Stellen angibt. Beispiel: 35 &amp;quot; 5&amp;quot; $IntToStrEnh führt zu &amp;quot;   35&amp;quot; und 123456789 &amp;quot;011&amp;quot; $IntToStrEnh führt zu &amp;quot;00123456789&amp;quot;. Falls ein Fehler vorliegt, wird &amp;quot;ERROR&amp;quot; ausgegeben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$StrToFloat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wandelt den obersten Stack-String in eine Gleitkommazahl um, falls möglich. Andernfalls wird eine -1 geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variablenzugriff ===&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden in Systemvariablen und in lokale Variablen. Die Systemvariablen gelten OMSI-weit, die lokalen Variablen werden zum Fahrzeug/Objekt zugehörig gespeichert.&lt;br /&gt;
&lt;br /&gt;
Bei den lokalen Variablen gibt es stets einen Grundstamm an Variablen, welcher von OMSI vordefiniert werden. Darüber hinaus können beliebig viele Variablen mit Hilfe der Varlist-Dateien ergänzt werden. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.S.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die Systemvariable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale Variable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale String-Variable ''varname'' in den obersten String-Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten Stackplatz in die lokale Variable ''varname''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten String-Stackplatz in die lokale String-Variable ''varname''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung der einzelnen Systemvariablen und der vordefinierten lokalen Variablen finden Sie hier: [[System- und vordefinierte lokalen Variablen]]&lt;br /&gt;
&lt;br /&gt;
=== Konstanten und Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Lokale Konstanten und [http://de.wikipedia.org/w/index.php?title=Datei:Linear_interpolation.svg&amp;amp;filetimestamp=20080226155013 stückweise definierte lineare Funktionen] können in den Konstantendateien (''constfiles'', ''~_constfile.txt'') definiert werden. Der Aufbau jeder Konstantendatei entspricht der der [[Konfigurationsdateien|Konfigurationsdatei]]. Es gibt lediglich drei Schlüsselwörter. Zu beachten ist: Bisher können keine Strings, sondern nur Fließkommazahlen als Konstanten definiert werden.&lt;br /&gt;
&lt;br /&gt;
[const] definiert eine neue Konstante und gibt ihren Wert an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
name&lt;br /&gt;
wert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
leistung&lt;br /&gt;
200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[newcurve] leitet die Definition einer neuen (stückweise linearen) Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[pnt] fügt der zuvor mit [newcurve] definierten Funktion ein neues x-y-Paar hinzu. Jede Funktion sollte normalerweise über mindestens zwei Paare verfügen. Die Reihenfolge der Paare ''muss'' in x-Richtung aufsteigend sein!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
Drehzahl_Drehmoment_Kennlinie&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
50&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
300&lt;br /&gt;
400&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
1000&lt;br /&gt;
600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Konstanten werden über den Befehl (C.L.''konstantenname'') in den Stack geladen.&lt;br /&gt;
&lt;br /&gt;
Funktionen werden über den Befehl (F.L.''funktionsname'') aufgerufen. Dabei wird stets der zuvor auf oberster Stackposition befindliche Wert als x-Parameter übergaben und der resultierende y-Wert der Funktion stattdessen auf dem obersten Stackplatz gespeichert. Bewegt sich der x-Wert außerhalb der Grenzen der durch die [pnt]-Einträge definierten Eckpunkte, wird stets der y-Wert des nächstliegenden Eckpunktes verwendet. Die Funktion wird also vor dem ersten und hinter dem letzten Eckpunkt ins Unendliche waagerecht verlängert.&lt;br /&gt;
&lt;br /&gt;
=== Sound-Trigger ===&lt;br /&gt;
&lt;br /&gt;
Soundtrigger sind nicht mit den weiter oben erwähnten Triggern zu verwechseln!&lt;br /&gt;
&lt;br /&gt;
Sie stellen vielmehr eine Möglichkeit dar, direkt einen gewünschten Sound abzuspielen. Hierbei gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
(T.L.''soundtriggername'') ist ein einfacher Soundtrigger. Der so markierte Sound wird (einmalig) abgespielt.&lt;br /&gt;
&lt;br /&gt;
(T.F.''soundtriggername'') ist ein Soundtrigger mit Dateiwechselfunktion. Hierbei wird der oberste Stackstring ausgelesen und als Dateiname verwendet, wobei der Dateipfad relativ zum Sound-Ordner des Objektes interpretiert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Angenommen, die Sounddatei lautet &amp;quot;diese.wav&amp;quot; und ist mit dem Trigger ''MeinTrigger'' verknüpft, dann spielt&lt;br /&gt;
&lt;br /&gt;
 (T.L.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;diese.wav&amp;quot; ab und&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;andere.wav&amp;quot; (T.F.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;andere.wav&amp;quot;. Alternativ zu (T.L.''soundtriggername'') kann beim Befehl (T.F.''soundtriggername'') auch ein &amp;quot;Nullstring&amp;quot; im Stack liegen (also der String: &amp;quot;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== System-Makros ===&lt;br /&gt;
&lt;br /&gt;
Die bisherigen Methoden erlauben dem Script folgende Kommunikationsmöglichkeiten mit OMSI:&lt;br /&gt;
&lt;br /&gt;
* Lesen von Werten über System- und vordefinierte lokale Variablen&lt;br /&gt;
* Schreiben von Werten über ebendiese&lt;br /&gt;
* Empfangen von Tastatur-, Maus- oder Systemtriggern&lt;br /&gt;
&lt;br /&gt;
Schließlich gibt es noch eine weitere Methode, um mit dem Hauptprogramm zu kommunizieren, die sogenannten System-Makros, gelegentlich auch unpräzise als &amp;quot;Callback-Funktionen&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
In bestimmten Situationen ist es nötig, dass das Script Werte von OMSI bekommt, die in größeren Datenbanken vorliegen und daher nicht über vordefinierte Variablen übermittelt werden können, z.B. die Inhalte der Hofdatei. Hier kommen nun die System-Makros ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Diese arbeiten scriptseitig sehr ähnlich wie die lokalen, selbstdefinierten Makros: Der Aufruf (M.V.''macroname'') ruft das System-Makro auf (&amp;quot;V&amp;quot; stand ursprünglich für &amp;quot;Vehicle-Macro&amp;quot;, gilt aber genauso auch in Szenerieobjekten), das sich während der Ausführung Werte aus den beiden Stacks holt und/oder in diese schreibt. Eine Aufstellung aller System-Makros findet sich hier: [[System-Makros]]&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen und Schleifen ===&lt;br /&gt;
&lt;br /&gt;
Die einzige Steuerung des Programmablaufs ist zur Zeit nur mit der IF-Bedingung möglich.&lt;br /&gt;
&lt;br /&gt;
==== IF-Bedingung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dass erst die Bedingung formuliert wird und dann erst das Schlüsselwort {if} folgt, sollte einleuchten: Zunächst muss an oberster Stelle des Stacks der Wert abgelegt werden und erst dann folgt das Schlüsselwort {if}, welches diesen Wert prüft. Hierbei bedeutet ähnlich wie bei &amp;amp;&amp;amp; und || Gleichheit mit Null gleichbedeutend mit ''False'', alle anderen Werte bedeuten ''True''.&lt;br /&gt;
&lt;br /&gt;
Wenn also im obigen Beispiel ''bla'' den Wert 1 hat, wird ''blub'' auf den Wert 5 gesetzt, andernfalls auf den Wert 7.&lt;br /&gt;
&lt;br /&gt;
Verschachtelungen der IF-Bedingung dienen als Ersatz für die (nicht vorhandenen) &amp;quot;Else-If&amp;quot;-Konstruktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
    (L.L.bla) 5 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 5 ist:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        13&lt;br /&gt;
    {endif}&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist insbesondere auf das doppelte {endif} zu achten! Hier gilt:&lt;br /&gt;
&lt;br /&gt;
* bla = 1 ==&amp;gt; blub = 5&lt;br /&gt;
* bla = 5 ==&amp;gt; blub = 7&lt;br /&gt;
* sonst   ==&amp;gt; blub = 13&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=858</id>
		<title>Scriptsystem</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Scriptsystem&amp;diff=858"/>
		<updated>2014-02-11T10:08:08Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Dateien des Scriptsystems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem in OMSI ermöglicht es, dass Szenerieobjekte und vor allem Fahrzeuge mit individuellen Systemen ausgestattet werden können, die über Variablen und Funktionsaufrufe mit dem Hauptprogramm und der Grafik- und Soundengine kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der hier beschriebene Stand des Scriptsystems entspricht OMSI Version 1.01.&lt;br /&gt;
&lt;br /&gt;
== Dateien des Scriptsystems ==&lt;br /&gt;
&lt;br /&gt;
Das Scriptsystem umfasst folgende Dateien:&lt;br /&gt;
&lt;br /&gt;
* Scriptdateien mit ausführbarem Code (*.osc)&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien im OMSI\program-Verzeichnis zur Definition von (reinen) Systemvariablen&lt;br /&gt;
* Varlist- und Stringvarlist-Dateien zur Definition von Uservariablen und (zusätzlichen) Systemvariablen (seit OMSI2)&lt;br /&gt;
* Constfile-Dateien zur Definition von Userkonstanten und Funktionstabellen&lt;br /&gt;
&lt;br /&gt;
Abgesehen von den Dateien zur Definition von Systemvariablen müssen alle benötigten Dateien für jedes Fahrzeug/Szenerieobjekt (im folgenden kurz: Objekt) in dessen [[Konfigurationsdatei]] angemeldet werden.&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es die Befehle ''[script]'', ''[varnamelist]'', ''[stringvarnamelist]'' und ''[constfile]''. Der erste Eintrag jedes Befehls ist die Anzahl der Dateien, darauf folgen die entsprechenden Dateinamen (inkl. Pfad relativ zur Konfigurationsdatei. Die Namen der Dateien sind nicht relevant, solange sie korrekt in die Listen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Auf die Funktion der jeweiligen Dateien wird im Laufe der Beschreibung der Scriptsprache eingegangen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen der Scriptsprache ==&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Scriptsystem arbeitet mit der [http://de.wikipedia.org/wiki/Umgekehrte_Polnische_Notation umgekehrten Polnischen Notation]. Hierbei steht der Operator hinter den beiden Operanden; vereinfacht gesagt bedeutet es, dass die Operation &amp;quot; 1 + 2 &amp;quot; stattdessen folgendermaßen notiert wird: &amp;quot; 1 2 + &amp;quot;. Ein komplizierteres Beispiel: &amp;quot; (1 + 2) * (4 + 5) &amp;quot; entspricht &amp;quot; 1 2 + 4 5 + * &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist die Tatsache, dass die OMSI-Textdateien und insbesondere die Scriptsprache [http://de.wikipedia.org/wiki/Case_sensitivity Case-Sensitive] ist! D.h. es ist immer auf die Groß- und Kleinschreibung zu achten!&lt;br /&gt;
&lt;br /&gt;
=== Stack und Register ===&lt;br /&gt;
&lt;br /&gt;
Bei der Verarbeitung der Scripts verfügt OMSI über einen String-Stack und einen [http://de.wikipedia.org/wiki/Stapelspeicher Stack] für [http://de.wikipedia.org/wiki/Gleitkommazahl Gleitkommazahlen]. Im folgenden ist mit &amp;quot;Stack&amp;quot; immer der Stack für Gleitkommazahlen gemeint, andernfalls wird von &amp;quot;String-Stack&amp;quot; gesprochen.&lt;br /&gt;
&lt;br /&gt;
Beide Stacks enthält 8 Speicherplätze, welche von 0 bis 7 durchnumeriert sind. Jede Script-Operation kann nun einen oder mehrere neue Werte in einen der Stacks einfügen (push), wobei der neue Wert auf die Position 0 gesetzt wird und alle folgenden Werte &amp;quot;einen Platz aufrücken&amp;quot;, oder sie kann einen oder mehrere Werte aus dem Stack herausziehen (pop/pull) oder lediglich auslesen (peek).&lt;br /&gt;
&lt;br /&gt;
Fürs temporäre Ablegen von Zahlen gibt es zusätzlich acht indizierte Speicherplätze, welche direkt geschrieben oder gelesen werden können, die sich im sogenannten Register befinden - hier gibt es jedoch nur einen Register für die Gleitkommazahlen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel-Operationen ===&lt;br /&gt;
&lt;br /&gt;
Beispiel: Die Operation 1 + 4. Der Code hierfür lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 4 +&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle wird demonstriert, wie sich hierbei der Stack verhält:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			5	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ausgangszustand ist der Stack nur mit Nullen (oder unbekannten/zufälligen Werten) gefüllt. Der Befehl &amp;quot;1&amp;quot; schiebt die Eins in den obersten Stackplatz und schiebt alle weiteren Werte (Nullen) nach hinten. Der Befehl &amp;quot;4&amp;quot; schiebt die Vier auf den 0. Platz und alle folgenden Werte, also insbesondere die Eins auf den jeweils nächsten Platz. Im nächsten Schritt &amp;quot;+&amp;quot; werden die obersten beiden Werte aus dem Stack herausgezogen - also 4 und 1 - und summiert. Das Ergebnis (5) wird wiederum in den Stack geschoben. Die beiden ursprünglichen Zahlen sind im Stack nicht mehr vorhanden.&lt;br /&gt;
&lt;br /&gt;
Ein zweites Beispiel:&lt;br /&gt;
&lt;br /&gt;
(1 + 2) * (4 + 5) muss wie bereits erwähnt folgendermaßen notiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 2 + 4 5 + *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Stack verhält sich somit folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Operation:	Stack:	0	1	2	3	4 ...&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
vorher:			0	0	0	0	0&lt;br /&gt;
&amp;quot;1&amp;quot;			1	0	0	0	0&lt;br /&gt;
&amp;quot;2&amp;quot;			2	1	0	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			3	0	0	0	0&lt;br /&gt;
&amp;quot;4&amp;quot;			4	3	0	0	0&lt;br /&gt;
&amp;quot;5&amp;quot;			5	4	3	0	0&lt;br /&gt;
&amp;quot;+&amp;quot;			9	3	0	0	0&lt;br /&gt;
&amp;quot;*&amp;quot;			27	0	0	0	0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Ende befindet sich also das korrekte Ergebnis auf Stackplatz 0!&lt;br /&gt;
&lt;br /&gt;
=== Gleitkommazahlen und Strings ===&lt;br /&gt;
&lt;br /&gt;
Das OMSI-Skriptsystem arbeitet ausschließlich mit den Datentypen Gleitkommazahl (einfache Präzision mit Vorzeichen) und String. Beide Datentypen haben getrennte Stacks. Deshalb laufen die Verarbeitung von Gleitkommazahlen und Strings im Allgemeinen unabhängig nebeneinander. Jedoch kann es natürlich vorkommen, dass bestimmte Funktionen z.B. Zahlen in Strings umwandeln und somit gleichzeitig auf beide Teilbereiche zugreifen.&lt;br /&gt;
&lt;br /&gt;
Auf boolische Variablen wurde verzichtet. Für boolische Werte werden im Allgemeinen die Zahlenwerte 0 und 1 verwendet.&lt;br /&gt;
&lt;br /&gt;
== Script-Schlüsselwörter ==&lt;br /&gt;
&lt;br /&gt;
=== Kommentare ===&lt;br /&gt;
&lt;br /&gt;
Kommentierungen sind nur möglich, indem in der auszukommentierenden Zeile ganz vorne ein Apostroph ['] gesetzt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Ich bin eine Kommentarzeile&lt;br /&gt;
   'Ich bin KEINE Kommentarzeile!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstiegs- und Ausstiegspunkte, Makros und Trigger ===&lt;br /&gt;
&lt;br /&gt;
Alle Befehle müssen zwischen einem Einstiegs- und einem Ausstiegspunkt liegen.&lt;br /&gt;
&lt;br /&gt;
Der Einstiegspunkt wird durch eins der folgenden Schlüsselwörter gekennzeichnet:&lt;br /&gt;
&lt;br /&gt;
* {frame} Im Laufe jedes Frames ruft OMSI über diesen Einstiegspunkt die frameweise Scriptverarbeitung auf, sofern er vorhanden ist.&lt;br /&gt;
* {init} Bei der Initialisierung ruft OMSI über diesen Einstiegspunkt die Script-Initialisierung auf.&lt;br /&gt;
* {frame_ai} Hierbei handelt es sich um eine Variante des {frame}-Einstiegspunktes, welcher bei Fahrzeugen dann aufgerufen wird, wenn diese nicht im Fokus des Benutzers stehen, z.B. wenn sie als KI-Fahrzeug unterwegs sind. Ist dieser Einstiegspunkt jedoch nicht vorhanden sondern nur {frame}, dann wird dieser alternativ aufgerufen. Bei Szenerieobjekten kommt dieser Eintrittspunkt nicht zur Anwendung.&lt;br /&gt;
* {macro:''name''} Dieser Einstiegspunkt ruft ein Subsektion (Makro) auf, welche '''stets nach dem Aufruf''' definiert werden muss.&lt;br /&gt;
* {trigger:''name''} Dieser Einstiegspunkt wird vom Hauptprogramm aufgerufen, wenn der Benutzer die Tastenkombination oder das Maus-Event mit der Bezeichnung ''name'' aufruft - es gibt auch bestimmte Trigger, die direkt vom Hauptprogramm aufgerufen werden, z.B. wenn OMSI bei KI-Bussen die Anzeige wechselt u.Ä.&lt;br /&gt;
&lt;br /&gt;
{end} ist der universelle Ausstiegspunkt. Er muss stets den Block abschließen, der mit einem der obigen Befehle eröffnet wird.&lt;br /&gt;
&lt;br /&gt;
==== Makroaufruf ====&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Makros erfolgt über (M.L.''name''). Der Aufruf des Makros muss ''immer'' vor dessen Definition erfolgen. Andernfalls meldet OMSI, dass das Makro nicht gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
==== Aufteilung des Scripts in mehrere Dateien ====&lt;br /&gt;
&lt;br /&gt;
Bei einfachen Scripts (z.B. bei reinen KI-Fahrzeugen oder Szenerieobjekten) reicht es im Allgemeinen eine *.sco-Datei zu erstellen, welche über einen {frame}...{end}- und ggf. einen {init}...{end}-Block verfügt.&lt;br /&gt;
&lt;br /&gt;
Handelt es sich jedoch um ein komplettes Fahrzeugscript, dann empfiehlt es sich für die verschiedenen Subsysteme getrennte Dateien anzulegen. Hierbei sollte folgendermaßen vorgegangen werden:&lt;br /&gt;
&lt;br /&gt;
* Es gibt ein Hauptscript und die nötigen Subsystemdateien. Die Hauptdatei enthält dabei die {frame}- und {init}-Blöcke, die jedoch nur Makros aufrufen, welche in den Subsystemdateien definiert sind.&lt;br /&gt;
* Für jedes Subsystem gibt es eine *.sco-Datei und je nach Bedarf eine eigene Varlist und Constfile mit den zum System gehörenden Variablen. Außerdem werden auch hier die Trigger für die Tastenbefehle einsortiert.&lt;br /&gt;
* Die Makros sollten sinnvollerweise folgendermaßen benannt werden: {macro:''subsystem''_frame} und {macro:''subsystem''_init}.&lt;br /&gt;
* Damit die Makros vom Hauptscript aufgerufen werden, muss dieses in der Liste der Scripts in der Objekt-Konfigurationsdatei als erstes aufgerufen werden. Die Reihenfolge der Scripts untereinander muss ebenfalls so gewählt werden, dass alle dateiübergreifenden Makroaufrufe stets vor der jeweiligen Makrodefinition stehen.&lt;br /&gt;
&lt;br /&gt;
Die Einschränkung, dass Makros immer hinter dem Aufruf definiert werden müssen, kann zwar bisweilen hinderlich sein, ist aber ein sehr wirksamer Schutz gegen Zirkelschlüsse und Endlosschleifen.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
&lt;br /&gt;
Wie schon geschrieben wurde, kann ein {trigger:''name''}...{end}-Abschnitt durch verschiedene Möglichkeiten aus dem Hauptprogramm heraus aufgerufen werden. Hierzu zählen:&lt;br /&gt;
&lt;br /&gt;
* Auslösung per Tastatur. Wurde die Tastenkombination mit dem Namen ''tastkomb'' bezeichnet, wird {trigger:tastkomb} aufgerufen, wenn die Taste gedrückt wird und {trigger:tastkomb_off}, wenn die Taste losgelassen wird.&lt;br /&gt;
* Auslösung per Maus. Wurde ein Mesh angeklickt mit der [mouseevent]-Bezeichnung ''mouse_ev'', so wird {trigger:mouse_ev} aufgerufen, wenn die Maustaste gedrückt wird, {trigger:mouse_ev_drag}, während die Maustaste gehalten wird und {trigger:mouse_ev_off}, wenn die Maustaste losgelassen wird.&lt;br /&gt;
* Außerdem gibt es noch eine Reihe von [[System-Trigger|System-Triggern]].&lt;br /&gt;
&lt;br /&gt;
=== Operationen ===&lt;br /&gt;
&lt;br /&gt;
==== Stack-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%stackdump%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt eine Dialogbox mit dem Gleitkomma-Stackinhalt aus. Sollte deshalb natürlich nur zu Debug-Zwecken eingesetzt werden.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |s0, s1, ..., s7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichern des aktuellen Stackwertes im durch die Ziffer angegebenen Register. Der Wert verbleibt hierbei im Stack&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |l0, l1, ..., l7&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Laden des entsprechenden Registerwertes und Verschiebung in den Stack. Registerwert bleibt erhalten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den obersten Stackwert; alle weiteren Stackwerte rücken nach hinten.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$msg&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schreibt den obersten String-Stack-Wert in die Debug-Zeile von OMSI - egal, ob es sich um ein User-, KI-Fahrzeug oder Szenerieobjekt handelt.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$d&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Dubliziert den Stringstack-Wert analog zu &amp;quot;d&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Logische Operationen ====&lt;br /&gt;
&lt;br /&gt;
Die logischen Operationen arbeiten nach dem Prinzip 0 = FALSE, alles andere ist TRUE.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;amp;&amp;amp;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |UND, d.h. wenn einer der beiden obersten Stackwerte gleich 0 ist, ist das Ergbnis 0, sonst 1.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ODER&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Verneinung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Vergleichsoperationen ====&lt;br /&gt;
&lt;br /&gt;
Die Vergleichsoperationen vergleichen die Werte in den beiden jeweils obersten Stackplätzen und fügen dann je nach Ergebnis eine &amp;quot;1&amp;quot; oder &amp;quot;0&amp;quot; im obersten Stackplatz ein. Die Größer-/Kleinerzeichen stehen dabei entsprechend für der Reihenfolge, in der die Werte zuvor angegeben wurden. Das bedeutet:&lt;br /&gt;
&lt;br /&gt;
4 2 &amp;gt; ist wahr, weil die intern durchgeführte Operation in diesem Fall &amp;quot;4 &amp;gt; 2&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls die obersten Stackwerte identisch sind, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;1&amp;quot;, falls Stackwert 1 kleiner ist als Stackwert 0, sonst &amp;quot;0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... kleiner als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |... größer als oder gleich ist ...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wie &amp;quot;=&amp;quot; nur für die obersten beiden Stringstack-Plätze.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner als (String). Die Ungleich-Operationen bei Strings prüfen auf alphabetische Reihenfolge. &amp;quot;A&amp;quot; ist also kleiner als &amp;quot;B&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer als (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;lt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kleiner oder gleich (String).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$&amp;gt;=&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Größer oder gleich (String).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Mathematische Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Plus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Minus (Stackplatz 1 - Stackplatz 0, also vom Prinzip her wie bei den Größer/Kleiner-Operationen)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Mal&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |geteilt (Stackplatz 1 / Stackplatz 0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |%&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rest der Division (folgendermaßen erweitert für Gleitkommazahlen: Stack0 - trunc(Stack1 / Stack0) * Stack1 )&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |/-/&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Vorzeichenwechsel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Sinus&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |min&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des kleineren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |max&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wahl des größeren der beiden obersten Stackwerte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |exp&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Exponentialfunktion zur Basis e (e^Stack0)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqrt&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadratwurzel&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sqr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Quadrat&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |sgn&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Vorzeichens; je nachdem entweder -1, 0 oder 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |pi&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Kreiszahl pi&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |random&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |ganzzahlige Zufallszahl 0 &amp;lt;= x &amp;lt; Stack0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |abs&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rückgabe des Absolutwertes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |trunc&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Abrunden auf nächste ganze Zahl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String-Operationen ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&amp;quot;''bla''&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Einfügen des Strings ''bla'' auf dem obersten String-Stack-Platz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$+&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Zusammenfügen zweier Strings. &amp;quot;Omnibus&amp;quot; &amp;quot;simulator&amp;quot; $+ ergibt &amp;quot;Omnibussimulator&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$*&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Der oberste Stack-String wird sooft wiederholt, bis die resultierende Zeichenlänger gerade noch kleiner oder gleich des obersten Stackwertes ist. Beispiel: &amp;quot;nu&amp;quot; 6 $* ergibt &amp;quot;nununu&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$length&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Gibt die Anzahl der Zeichen des obersten Stack-String zurück in den Stack. &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutBegin&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen vorne vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$cutEnd&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Schneidet ''stack0'' Zeichen hinten vom obersten Stack-String ab.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthR&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' rechtsbündig an, indem am Anfang Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
VORSICHT Bug! Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$SetLengthL&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Passt die Länge des obersten Stack-Strings auf ''stack0'' linksbündig an, indem am Ende Zeichen entfernt oder Leerzeichen ergänzt werden.&lt;br /&gt;
VORSICHT Bug! Der Befehl entfernt den Float-Operator nicht vom Stack. Der Wert, auf dessen Länge der String gekürzt wurde, verbleibt also auf Stack0.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStr&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rundet ''stack0'' ab und wandelt die resultierende Ganzzahl um in einen String.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$IntToStrEnh&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Die erweiterte Version von IntToStr. Hierbei wird der oberste Stack-String verwendet, um das Format der String-Umwandlung zu bestimmen: Das erste Zeichen im String wird zum Auffüllen der fehlenden Zeichen verwendet, die folgenden Zeichen müssen eine Zahl ergeben, die die Stellen angibt. Beispiel: 35 &amp;quot; 5&amp;quot; $IntToStrEnh führt zu &amp;quot;   35&amp;quot; und 123456789 &amp;quot;011&amp;quot; $IntToStrEnh führt zu &amp;quot;00123456789&amp;quot;. Falls ein Fehler vorliegt, wird &amp;quot;ERROR&amp;quot; ausgegeben.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |$StrToFloat&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Wandelt den obersten Stack-String in eine Gleitkommazahl um, falls möglich. Andernfalls wird eine -1 geschrieben.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Variablenzugriff ===&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden in Systemvariablen und in lokale Variablen. Die Systemvariablen gelten OMSI-weit, die lokalen Variablen werden zum Fahrzeug/Objekt zugehörig gespeichert.&lt;br /&gt;
&lt;br /&gt;
Bei den lokalen Variablen gibt es stets einen Grundstamm an Variablen, welcher von OMSI vordefiniert werden. Darüber hinaus können beliebig viele Variablen mit Hilfe der Varlist-Dateien ergänzt werden. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:95%;&amp;quot;  &lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.S.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die Systemvariable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale Variable ''varname'' in den obersten Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(L.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Lädt die lokale String-Variable ''varname'' in den obersten String-Stackplatz&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.L.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten Stackplatz in die lokale Variable ''varname''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |(S.$.''varname'')&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Speichert den obersten String-Stackplatz in die lokale String-Variable ''varname''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung der einzelnen Systemvariablen und der vordefinierten lokalen Variablen finden Sie hier: [[System- und vordefinierte lokalen Variablen]]&lt;br /&gt;
&lt;br /&gt;
=== Konstanten und Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Lokale Konstanten und [http://de.wikipedia.org/w/index.php?title=Datei:Linear_interpolation.svg&amp;amp;filetimestamp=20080226155013 stückweise definierte lineare Funktionen] können in den Konstantendateien (''constfiles'', ''~_constfile.txt'') definiert werden. Der Aufbau jeder Konstantendatei entspricht der der [[Konfigurationsdateien|Konfigurationsdatei]]. Es gibt lediglich drei Schlüsselwörter. Zu beachten ist: Bisher können keine Strings, sondern nur Fließkommazahlen als Konstanten definiert werden.&lt;br /&gt;
&lt;br /&gt;
[const] definiert eine neue Konstante und gibt ihren Wert an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
name&lt;br /&gt;
wert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[const]&lt;br /&gt;
leistung&lt;br /&gt;
200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[newcurve] leitet die Definition einer neuen (stückweise linearen) Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[pnt] fügt der zuvor mit [newcurve] definierten Funktion ein neues x-y-Paar hinzu. Jede Funktion sollte normalerweise über mindestens zwei Paare verfügen. Die Reihenfolge der Paare ''muss'' in x-Richtung aufsteigend sein!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[newcurve]&lt;br /&gt;
Drehzahl_Drehmoment_Kennlinie&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
50&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
300&lt;br /&gt;
400&lt;br /&gt;
&lt;br /&gt;
[pnt]&lt;br /&gt;
1000&lt;br /&gt;
600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Konstanten werden über den Befehl (C.L.''konstantenname'') in den Stack geladen.&lt;br /&gt;
&lt;br /&gt;
Funktionen werden über den Befehl (F.L.''funktionsname'') aufgerufen. Dabei wird stets der zuvor auf oberster Stackposition befindliche Wert als x-Parameter übergaben und der resultierende y-Wert der Funktion stattdessen auf dem obersten Stackplatz gespeichert. Bewegt sich der x-Wert außerhalb der Grenzen der durch die [pnt]-Einträge definierten Eckpunkte, wird stets der y-Wert des nächstliegenden Eckpunktes verwendet. Die Funktion wird also vor dem ersten und hinter dem letzten Eckpunkt ins Unendliche waagerecht verlängert.&lt;br /&gt;
&lt;br /&gt;
=== Sound-Trigger ===&lt;br /&gt;
&lt;br /&gt;
Soundtrigger sind nicht mit den weiter oben erwähnten Triggern zu verwechseln!&lt;br /&gt;
&lt;br /&gt;
Sie stellen vielmehr eine Möglichkeit dar, direkt einen gewünschten Sound abzuspielen. Hierbei gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
(T.L.''soundtriggername'') ist ein einfacher Soundtrigger. Der so markierte Sound wird (einmalig) abgespielt.&lt;br /&gt;
&lt;br /&gt;
(T.F.''soundtriggername'') ist ein Soundtrigger mit Dateiwechselfunktion. Hierbei wird der oberste Stackstring ausgelesen und als Dateiname verwendet, wobei der Dateipfad relativ zum Sound-Ordner des Objektes interpretiert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Angenommen, die Sounddatei lautet &amp;quot;diese.wav&amp;quot; und ist mit dem Trigger ''MeinTrigger'' verknüpft, dann spielt&lt;br /&gt;
&lt;br /&gt;
 (T.L.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;diese.wav&amp;quot; ab und&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;andere.wav&amp;quot; (T.F.MeinTrigger)&lt;br /&gt;
&lt;br /&gt;
die Datei &amp;quot;andere.wav&amp;quot;. Alternativ zu (T.L.''soundtriggername'') kann beim Befehl (T.F.''soundtriggername'') auch ein &amp;quot;Nullstring&amp;quot; im Stack liegen (also der String: &amp;quot;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== System-Makros ===&lt;br /&gt;
&lt;br /&gt;
Die bisherigen Methoden erlauben dem Script folgende Kommunikationsmöglichkeiten mit OMSI:&lt;br /&gt;
&lt;br /&gt;
* Lesen von Werten über System- und vordefinierte lokale Variablen&lt;br /&gt;
* Schreiben von Werten über ebendiese&lt;br /&gt;
* Empfangen von Tastatur-, Maus- oder Systemtriggern&lt;br /&gt;
&lt;br /&gt;
Schließlich gibt es noch eine weitere Methode, um mit dem Hauptprogramm zu kommunizieren, die sogenannten System-Makros, gelegentlich auch unpräzise als &amp;quot;Callback-Funktionen&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
In bestimmten Situationen ist es nötig, dass das Script Werte von OMSI bekommt, die in größeren Datenbanken vorliegen und daher nicht über vordefinierte Variablen übermittelt werden können, z.B. die Inhalte der Hofdatei. Hier kommen nun die System-Makros ins Spiel.&lt;br /&gt;
&lt;br /&gt;
Diese arbeiten scriptseitig sehr ähnlich wie die lokalen, selbstdefinierten Makros: Der Aufruf (M.V.''macroname'') ruft das System-Makro auf (&amp;quot;V&amp;quot; stand ursprünglich für &amp;quot;Vehicle-Macro&amp;quot;, gilt aber genauso auch in Szenerieobjekten), das sich während der Ausführung Werte aus den beiden Stacks holt und/oder in diese schreibt. Eine Aufstellung aller System-Makros findet sich hier: [[System-Makros]]&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen und Schleifen ===&lt;br /&gt;
&lt;br /&gt;
Die einzige Steuerung des Programmablaufs ist zur Zeit nur mit der IF-Bedingung möglich.&lt;br /&gt;
&lt;br /&gt;
==== IF-Bedingung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dass erst die Bedingung formuliert wird und dann erst das Schlüsselwort {if} folgt, sollte einleuchten: Zunächst muss an oberster Stelle des Stacks der Wert abgelegt werden und erst dann folgt das Schlüsselwort {if}, welches diesen Wert prüft. Hierbei bedeutet ähnlich wie bei &amp;amp;&amp;amp; und || Gleichheit mit Null gleichbedeutend mit ''False'', alle anderen Werte bedeuten ''True''.&lt;br /&gt;
&lt;br /&gt;
Wenn also im obigen Beispiel ''bla'' den Wert 1 hat, wird ''blub'' auf den Wert 5 gesetzt, andernfalls auf den Wert 7.&lt;br /&gt;
&lt;br /&gt;
Verschachtelungen der IF-Bedingung dienen als Ersatz für die (nicht vorhandenen) &amp;quot;Else-If&amp;quot;-Konstruktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'Hier muss eine Bedingung stehen, z.B.:&lt;br /&gt;
    (L.L.bla) 1 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 1 ist:&lt;br /&gt;
        2 3 +&lt;br /&gt;
    {else}&lt;br /&gt;
    (L.L.bla) 5 =&lt;br /&gt;
    {if}&lt;br /&gt;
'Dieser Abschnitt wird ausgeführt, wenn bla = 5 ist:&lt;br /&gt;
        3 4 +&lt;br /&gt;
    {else}&lt;br /&gt;
'Dieser Abschnitt wird andernfalls ausgeführt:&lt;br /&gt;
        13&lt;br /&gt;
    {endif}&lt;br /&gt;
    {endif}&lt;br /&gt;
    (S.L.blub)&lt;br /&gt;
{end}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist insbesondere auf das doppelte {endif} zu achten! Hier gilt:&lt;br /&gt;
&lt;br /&gt;
* bla = 1 ==&amp;gt; blub = 5&lt;br /&gt;
* bla = 5 ==&amp;gt; blub = 7&lt;br /&gt;
* sonst   ==&amp;gt; blub = 13&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Plug-in-Schnittstelle&amp;diff=857</id>
		<title>Plug-in-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Plug-in-Schnittstelle&amp;diff=857"/>
		<updated>2014-02-11T09:46:31Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Änderungen dieses Artikels wurden noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.00 - 2.00, für OMSI 2 bitte letztes Kapitel beachten!''&lt;br /&gt;
&lt;br /&gt;
= Allgemeines Prinzip =&lt;br /&gt;
&lt;br /&gt;
Es besteht die Möglichkeit, für den OMSI Plugin-DLLs zu programmieren, welche Lese- und Schreibzugriff auf die [[System-_und_vordefinierte_lokalen_Variablen#Fahrzeuge|Fahrzeugvariablen]] haben und [[Scriptsystem#Trigger|Fahrzeug-Trigger]] auslösen können.&lt;br /&gt;
&lt;br /&gt;
Jedes Plugin besteht aus einer [[Konfigurationsdatei]] mit der Dateiendung *.opl und einer zugehörigen DLL. Beide Dateien müssen im Verzeichnis &amp;quot;OMSI\plugins&amp;quot; liegen.&lt;br /&gt;
&lt;br /&gt;
= Beschreibung des Beispiels =&lt;br /&gt;
&lt;br /&gt;
In OMSI enthalten ist bereits ein Beispiel-Plugin enthalten. Um es zu aktivieren, muss die Datei &amp;quot;test.txt&amp;quot; im &amp;quot;&amp;lt;OMSI&amp;gt;\plugins&amp;quot;-Verzeichnis in &amp;quot;test.opl&amp;quot; umbenannt werden.&lt;br /&gt;
&lt;br /&gt;
== Funktionsumfang ==&lt;br /&gt;
&lt;br /&gt;
Dieses Plugin hat drei Funktionen: Einen Tacho (analog und digital) ganz oben, einen Sollwertregler für den roten Heizungsregler (obwohl da falscherweise &amp;quot;Rollband-Sollwert&amp;quot; steht) und einen Türtaster &amp;quot;Button1&amp;quot; (der aber trotzdem nur funktioniert, wenn die Haltestellenbremse aktiv und die Elektrik an ist).&lt;br /&gt;
&lt;br /&gt;
[[Datei:Beispiel-Plugin.jpg|600px|thumb|right|Oberfläche des Beispiel-Plugins]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der *.opl-Datei ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To activate, rename this file to &amp;quot;test.opl&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[dll]&lt;br /&gt;
Test.dll&lt;br /&gt;
&lt;br /&gt;
[varlist]&lt;br /&gt;
2&lt;br /&gt;
Velocity&lt;br /&gt;
cockpit_heizregler_temp&lt;br /&gt;
&lt;br /&gt;
[triggers]&lt;br /&gt;
1&lt;br /&gt;
bus_doorfront0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die erste Zeile ist nur eine Kommentarzeile. Der [dll]-Befehl gibt den Dateinamen der zugehörigen DLL an.&lt;br /&gt;
&lt;br /&gt;
Der [varlist]-Befehl beginnt mit der Anzahl der zu erwartenden (lokalen) Fahrzeugvariablen. Hierbei können auch User-Variablen eines bestimmten Busses angegeben werden. Wenn der tatsächlich gefahrene Bus dann diese Variable nicht hat, dann werden die zugehörigen Zugriffe natürlich nicht durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Die Variable mit dem Index 0 ist also bei dieser DLL &amp;quot;Velocity&amp;quot;, die Variable mit dem Index 1 ist &amp;quot;cockpit_heizregler_temp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der [triggers]-Befehl beginnt ebenfalls mit der Anzahl der zu erwartenden Fahrzeugtrigger. In diesem Fall ist dies nur ein Trigger: &amp;quot;bus_doorfront0&amp;quot; mit dem Index 0.&lt;br /&gt;
&lt;br /&gt;
== Aufbau der DLL ==&lt;br /&gt;
&lt;br /&gt;
Anhand der Beispiel-DLL wird nun erklärt, wie der zugehörige Delphi-Code aussehen soll. Im Allgemeinen sollte es möglich sein, auch mit anderen Programmiersprachen passende DLLs zu programmieren. Ausprobiert habe ich dies allerdings nicht.&lt;br /&gt;
&lt;br /&gt;
Die DLL besteht aus zwei Units. Erklärt wird aber nur die Hauptunit (Test.dpr) (die zweite Unit enthält nur einige wenige nicht-relevante Implementierungen für die Form):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
library Test;&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  SysUtils,&lt;br /&gt;
  Dialogs,&lt;br /&gt;
  Classes,&lt;br /&gt;
  TestU in 'TestU.pas' {Form1};&lt;br /&gt;
&lt;br /&gt;
{$R *.res}&lt;br /&gt;
&lt;br /&gt;
procedure Start( AOwner: TComponent ); stdcall;&lt;br /&gt;
begin&lt;br /&gt;
        form1 := TForm1.Create( AOwner );&lt;br /&gt;
        form1.Show;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure Finalize; stdcall;&lt;br /&gt;
begin&lt;br /&gt;
        form1.Free;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure AccessVariable( varindex: word; var value: single; var write: boolean ); stdcall;&lt;br /&gt;
begin&lt;br /&gt;
        case varindex of&lt;br /&gt;
                0:&lt;br /&gt;
                begin&lt;br /&gt;
                        form1.Label2.Caption := floattostrF( value, ffFixed, 5, 1 ) + ' km/h';&lt;br /&gt;
                        form1.Gauge1.Progress := round( value );&lt;br /&gt;
                        write := false;                        &lt;br /&gt;
                end;&lt;br /&gt;
                1:&lt;br /&gt;
                begin&lt;br /&gt;
                        value := form1.TrackBar1.Position / 30;&lt;br /&gt;
                        write := true;&lt;br /&gt;
                end;&lt;br /&gt;
        end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure AccessTrigger( triggerindex: word; var active: boolean ); stdcall;&lt;br /&gt;
begin&lt;br /&gt;
        case triggerindex of&lt;br /&gt;
                0:&lt;br /&gt;
                begin&lt;br /&gt;
                        active := form1.button1_pressed;&lt;br /&gt;
                end;&lt;br /&gt;
        end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
exports&lt;br /&gt;
        AccessVariable,&lt;br /&gt;
        AccessTrigger,        &lt;br /&gt;
        Start,&lt;br /&gt;
        Finalize;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zunächst ist der letzte Abschnitt &amp;quot;exports&amp;quot; zu beachten: Die vier gelisteten Prozeduren sollen von der DLL angeboten werden: ''AccessVariable'', ''AccessTrigger'', ''Start'' und ''Finalize''.&lt;br /&gt;
&lt;br /&gt;
Die vier Prozeduren haben folgenden Aufbau:&lt;br /&gt;
&lt;br /&gt;
=== Aufbau der Prozedur ''Start'' ===&lt;br /&gt;
&lt;br /&gt;
''Start( AOwner: TComponent )'' wird am Anfang aufgerufen und ermöglicht es der DLL, sich zu initialisieren. In diesem Fall wird ''Form1'' erzeugt und der gleichnamigen Variable zugeordnet, welche sich jedoch in der Unit ''TestU'' befindet. Als zweiter Schritt wird der ''Show''-Befehl aufgerufen, um die ''Form1'' anzuzeigen. ''Start'' übergibt den Parameter &amp;quot;AOwner&amp;quot;, welcher der Handler des Hauptprogramms von OMSI darstellt.&lt;br /&gt;
&lt;br /&gt;
=== Aufbau der Prozedur ''Finalize'' ===&lt;br /&gt;
&lt;br /&gt;
''Finalize'' dagegen wird beim Schließen aufgerufen. Hier wird schlicht das Objekt ''Form1'' zerstört.&lt;br /&gt;
&lt;br /&gt;
=== Aufbau der Prozedur ''AccessVariable'' ===&lt;br /&gt;
&lt;br /&gt;
Im Betrieb ruft OMSI diese Prozedur für alle in der *.opl-Datei gelisteten lokalen Variablen auf. Sie übergibt dabei stets den Index der Variable (''varindex''). Die Prozedur kann nun ihrerseits die Variablen ''value'' und ''write'' schreiben.&lt;br /&gt;
&lt;br /&gt;
Bei einem Lesezugriff kann die Prozedur wie im Beispiel unter &amp;quot;0:&amp;quot; die Variable über ''value'' einfach auslesen. Es ist aber wie unter &amp;quot;1&amp;quot; auch möglich, dem Wert von ''value'' einen neuen Wert zuzuweisen. Dann aber muss die Variable ''write'' auch auf ''wahr'' gesetzt werden, damit der Wert von OMSI übernommen wird. Im Beispiel wird die ''TrackBar'' ausgelesen und der Wert auf den Wert von ''value'' geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Aufbau der Prozedur ''AccessTrigger'' ===&lt;br /&gt;
&lt;br /&gt;
Diese Prozedur arbeitet recht ähnlich. Hier allerdings wird die Triggerliste durchgearbeitet. Die DLL kann bei Aufruf dieser Funktion den Wert ''active'' auf ''true'' setzen; dann löst OMSI den gewünschten Trigger aus.&lt;br /&gt;
&lt;br /&gt;
= Ausführliches Tutorial =&lt;br /&gt;
&lt;br /&gt;
Ein ausführliches Tutorial zur Nutzung dieser Schnittstelle - allerdings mit der Programmiersprache C++ - ist hier im Wiki in der Kategorie [[OMSI Plugin Framework|Tutorials]] zu finden.&lt;br /&gt;
&lt;br /&gt;
= Neuerungen OMSI2 =&lt;br /&gt;
&lt;br /&gt;
Aus Gründen der Kompatibilität wurden die folgenden Prozedurnamen geändert:&lt;br /&gt;
&lt;br /&gt;
''Start'' ==&amp;gt; ''PluginStart'' sowie&lt;br /&gt;
&lt;br /&gt;
''Finalize'' ==&amp;gt; ''PluginFinalize''.&lt;br /&gt;
&lt;br /&gt;
Außerdem wurde die *.opl-Datei um die Schlüsselworte [stringvarlist] und [systemvarlist] ergänzt, mit denen nun auch auf String- und Systemvariablen zugegriffen werden kann. Deren Syntax entspricht der von [varlist]. Dementsprechend wurden folgende Methoden ergänzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccessSystemVariable( varindex: word; var value: single; var write: boolean );&lt;br /&gt;
AccessStringVariable( varindex: word; str: PWideChar; var write: boolean );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk_für_Addon-Entwickler]]&lt;br /&gt;
&lt;br /&gt;
[[en:Plug-In Interface]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Plug-in-Schnittstelle&amp;diff=856</id>
		<title>Plug-in-Schnittstelle</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Plug-in-Schnittstelle&amp;diff=856"/>
		<updated>2014-02-11T09:45:08Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: OMSI2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Änderungen dieses Artikels wurden noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 1.00 - 2.00''&lt;br /&gt;
&lt;br /&gt;
= Allgemeines Prinzip =&lt;br /&gt;
&lt;br /&gt;
Es besteht die Möglichkeit, für den OMSI Plugin-DLLs zu programmieren, welche Lese- und Schreibzugriff auf die [[System-_und_vordefinierte_lokalen_Variablen#Fahrzeuge|Fahrzeugvariablen]] haben und [[Scriptsystem#Trigger|Fahrzeug-Trigger]] auslösen können.&lt;br /&gt;
&lt;br /&gt;
Jedes Plugin besteht aus einer [[Konfigurationsdatei]] mit der Dateiendung *.opl und einer zugehörigen DLL. Beide Dateien müssen im Verzeichnis &amp;quot;OMSI\plugins&amp;quot; liegen.&lt;br /&gt;
&lt;br /&gt;
= Beschreibung des Beispiels =&lt;br /&gt;
&lt;br /&gt;
In OMSI enthalten ist bereits ein Beispiel-Plugin enthalten. Um es zu aktivieren, muss die Datei &amp;quot;test.txt&amp;quot; im &amp;quot;&amp;lt;OMSI&amp;gt;\plugins&amp;quot;-Verzeichnis in &amp;quot;test.opl&amp;quot; umbenannt werden.&lt;br /&gt;
&lt;br /&gt;
== Funktionsumfang ==&lt;br /&gt;
&lt;br /&gt;
Dieses Plugin hat drei Funktionen: Einen Tacho (analog und digital) ganz oben, einen Sollwertregler für den roten Heizungsregler (obwohl da falscherweise &amp;quot;Rollband-Sollwert&amp;quot; steht) und einen Türtaster &amp;quot;Button1&amp;quot; (der aber trotzdem nur funktioniert, wenn die Haltestellenbremse aktiv und die Elektrik an ist).&lt;br /&gt;
&lt;br /&gt;
[[Datei:Beispiel-Plugin.jpg|600px|thumb|right|Oberfläche des Beispiel-Plugins]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der *.opl-Datei ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
To activate, rename this file to &amp;quot;test.opl&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[dll]&lt;br /&gt;
Test.dll&lt;br /&gt;
&lt;br /&gt;
[varlist]&lt;br /&gt;
2&lt;br /&gt;
Velocity&lt;br /&gt;
cockpit_heizregler_temp&lt;br /&gt;
&lt;br /&gt;
[triggers]&lt;br /&gt;
1&lt;br /&gt;
bus_doorfront0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die erste Zeile ist nur eine Kommentarzeile. Der [dll]-Befehl gibt den Dateinamen der zugehörigen DLL an.&lt;br /&gt;
&lt;br /&gt;
Der [varlist]-Befehl beginnt mit der Anzahl der zu erwartenden (lokalen) Fahrzeugvariablen. Hierbei können auch User-Variablen eines bestimmten Busses angegeben werden. Wenn der tatsächlich gefahrene Bus dann diese Variable nicht hat, dann werden die zugehörigen Zugriffe natürlich nicht durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Die Variable mit dem Index 0 ist also bei dieser DLL &amp;quot;Velocity&amp;quot;, die Variable mit dem Index 1 ist &amp;quot;cockpit_heizregler_temp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der [triggers]-Befehl beginnt ebenfalls mit der Anzahl der zu erwartenden Fahrzeugtrigger. In diesem Fall ist dies nur ein Trigger: &amp;quot;bus_doorfront0&amp;quot; mit dem Index 0.&lt;br /&gt;
&lt;br /&gt;
== Aufbau der DLL ==&lt;br /&gt;
&lt;br /&gt;
Anhand der Beispiel-DLL wird nun erklärt, wie der zugehörige Delphi-Code aussehen soll. Im Allgemeinen sollte es möglich sein, auch mit anderen Programmiersprachen passende DLLs zu programmieren. Ausprobiert habe ich dies allerdings nicht.&lt;br /&gt;
&lt;br /&gt;
Die DLL besteht aus zwei Units. Erklärt wird aber nur die Hauptunit (Test.dpr) (die zweite Unit enthält nur einige wenige nicht-relevante Implementierungen für die Form):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
library Test;&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
  SysUtils,&lt;br /&gt;
  Dialogs,&lt;br /&gt;
  Classes,&lt;br /&gt;
  TestU in 'TestU.pas' {Form1};&lt;br /&gt;
&lt;br /&gt;
{$R *.res}&lt;br /&gt;
&lt;br /&gt;
procedure Start( AOwner: TComponent ); stdcall;&lt;br /&gt;
begin&lt;br /&gt;
        form1 := TForm1.Create( AOwner );&lt;br /&gt;
        form1.Show;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure Finalize; stdcall;&lt;br /&gt;
begin&lt;br /&gt;
        form1.Free;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure AccessVariable( varindex: word; var value: single; var write: boolean ); stdcall;&lt;br /&gt;
begin&lt;br /&gt;
        case varindex of&lt;br /&gt;
                0:&lt;br /&gt;
                begin&lt;br /&gt;
                        form1.Label2.Caption := floattostrF( value, ffFixed, 5, 1 ) + ' km/h';&lt;br /&gt;
                        form1.Gauge1.Progress := round( value );&lt;br /&gt;
                        write := false;                        &lt;br /&gt;
                end;&lt;br /&gt;
                1:&lt;br /&gt;
                begin&lt;br /&gt;
                        value := form1.TrackBar1.Position / 30;&lt;br /&gt;
                        write := true;&lt;br /&gt;
                end;&lt;br /&gt;
        end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure AccessTrigger( triggerindex: word; var active: boolean ); stdcall;&lt;br /&gt;
begin&lt;br /&gt;
        case triggerindex of&lt;br /&gt;
                0:&lt;br /&gt;
                begin&lt;br /&gt;
                        active := form1.button1_pressed;&lt;br /&gt;
                end;&lt;br /&gt;
        end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
exports&lt;br /&gt;
        AccessVariable,&lt;br /&gt;
        AccessTrigger,        &lt;br /&gt;
        Start,&lt;br /&gt;
        Finalize;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zunächst ist der letzte Abschnitt &amp;quot;exports&amp;quot; zu beachten: Die vier gelisteten Prozeduren sollen von der DLL angeboten werden: ''AccessVariable'', ''AccessTrigger'', ''Start'' und ''Finalize''.&lt;br /&gt;
&lt;br /&gt;
Die vier Prozeduren haben folgenden Aufbau:&lt;br /&gt;
&lt;br /&gt;
=== Aufbau der Prozedur ''Start'' ===&lt;br /&gt;
&lt;br /&gt;
''Start( AOwner: TComponent )'' wird am Anfang aufgerufen und ermöglicht es der DLL, sich zu initialisieren. In diesem Fall wird ''Form1'' erzeugt und der gleichnamigen Variable zugeordnet, welche sich jedoch in der Unit ''TestU'' befindet. Als zweiter Schritt wird der ''Show''-Befehl aufgerufen, um die ''Form1'' anzuzeigen. ''Start'' übergibt den Parameter &amp;quot;AOwner&amp;quot;, welcher der Handler des Hauptprogramms von OMSI darstellt.&lt;br /&gt;
&lt;br /&gt;
=== Aufbau der Prozedur ''Finalize'' ===&lt;br /&gt;
&lt;br /&gt;
''Finalize'' dagegen wird beim Schließen aufgerufen. Hier wird schlicht das Objekt ''Form1'' zerstört.&lt;br /&gt;
&lt;br /&gt;
=== Aufbau der Prozedur ''AccessVariable'' ===&lt;br /&gt;
&lt;br /&gt;
Im Betrieb ruft OMSI diese Prozedur für alle in der *.opl-Datei gelisteten lokalen Variablen auf. Sie übergibt dabei stets den Index der Variable (''varindex''). Die Prozedur kann nun ihrerseits die Variablen ''value'' und ''write'' schreiben.&lt;br /&gt;
&lt;br /&gt;
Bei einem Lesezugriff kann die Prozedur wie im Beispiel unter &amp;quot;0:&amp;quot; die Variable über ''value'' einfach auslesen. Es ist aber wie unter &amp;quot;1&amp;quot; auch möglich, dem Wert von ''value'' einen neuen Wert zuzuweisen. Dann aber muss die Variable ''write'' auch auf ''wahr'' gesetzt werden, damit der Wert von OMSI übernommen wird. Im Beispiel wird die ''TrackBar'' ausgelesen und der Wert auf den Wert von ''value'' geschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Aufbau der Prozedur ''AccessTrigger'' ===&lt;br /&gt;
&lt;br /&gt;
Diese Prozedur arbeitet recht ähnlich. Hier allerdings wird die Triggerliste durchgearbeitet. Die DLL kann bei Aufruf dieser Funktion den Wert ''active'' auf ''true'' setzen; dann löst OMSI den gewünschten Trigger aus.&lt;br /&gt;
&lt;br /&gt;
= Ausführliches Tutorial =&lt;br /&gt;
&lt;br /&gt;
Ein ausführliches Tutorial zur Nutzung dieser Schnittstelle - allerdings mit der Programmiersprache C++ - ist hier im Wiki in der Kategorie [[OMSI Plugin Framework|Tutorials]] zu finden.&lt;br /&gt;
&lt;br /&gt;
= Neuerungen OMSI2 =&lt;br /&gt;
&lt;br /&gt;
Aus Gründen der Kompatibilität wurden die folgenden Prozedurnamen geändert:&lt;br /&gt;
&lt;br /&gt;
''Start'' ==&amp;gt; ''PluginStart'' sowie&lt;br /&gt;
&lt;br /&gt;
''Finalize'' ==&amp;gt; ''PluginFinalize''.&lt;br /&gt;
&lt;br /&gt;
Außerdem wurde die *.opl-Datei um die Schlüsselworte [stringvarlist] und [systemvarlist] ergänzt, mit denen nun auch auf String- und Systemvariablen zugegriffen werden kann. Deren Syntax entspricht der von [varlist]. Dementsprechend wurden folgende Methoden ergänzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccessSystemVariable( varindex: word; var value: single; var write: boolean );&lt;br /&gt;
AccessStringVariable( varindex: word; str: PWideChar; var write: boolean );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk_für_Addon-Entwickler]]&lt;br /&gt;
&lt;br /&gt;
[[en:Plug-In Interface]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Objekte_und_Splines_erstellen_(Artikel-%C3%9Cbersicht)&amp;diff=855</id>
		<title>Objekte und Splines erstellen (Artikel-Übersicht)</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Objekte_und_Splines_erstellen_(Artikel-%C3%9Cbersicht)&amp;diff=855"/>
		<updated>2014-02-11T09:35:25Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: Ausgeblendet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine Übersicht über alle Artikel, die sich mit Objekten und Splines erstellen befassen.&lt;br /&gt;
&lt;br /&gt;
== Objekte ==&lt;br /&gt;
&lt;br /&gt;
=== Häuser ===&lt;br /&gt;
&lt;br /&gt;
*[[Altbauhaus (Blender-Tutorial)]]&lt;br /&gt;
&lt;br /&gt;
=== Kreuzungen und andere Straßenobjekte ===&lt;br /&gt;
&lt;br /&gt;
*''Derzeit keine Einträge''&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
&lt;br /&gt;
*''Derzeit keine Einträge''&lt;br /&gt;
&lt;br /&gt;
== Splines ==&lt;br /&gt;
&lt;br /&gt;
=== Straßen ===&lt;br /&gt;
&lt;br /&gt;
*''Derzeit keine Einträge''&lt;br /&gt;
&lt;br /&gt;
=== Andere Splines ===&lt;br /&gt;
&lt;br /&gt;
*''Derzeit keine Einträge''&lt;br /&gt;
&lt;br /&gt;
== Fahrzeuge ==&lt;br /&gt;
&lt;br /&gt;
*Das [[Fahrzeug-SDK]]&lt;br /&gt;
&lt;br /&gt;
Kategorie:Nachschlagewerk für Addon-Entwickler&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=DISABLED-Befehl&amp;diff=854</id>
		<title>DISABLED-Befehl</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=DISABLED-Befehl&amp;diff=854"/>
		<updated>2014-02-11T09:21:54Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 2.0''&lt;br /&gt;
&lt;br /&gt;
Die Befehle &amp;quot;-&amp;lt;DISABLED&amp;gt;-&amp;quot; und &amp;quot;-&amp;lt;ENABLED&amp;gt;-&amp;quot; sind in einigen Konfigurationsdateien erlaubt und dienen dem Auskommentieren mehrerer Zeilen, ohne dass die jeweiligen Schlüsselworte einzeln auskommentiert werden müssen.&lt;br /&gt;
&lt;br /&gt;
Die Anwendung erfolgt schlicht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
{gültige Zeilen}&lt;br /&gt;
...&lt;br /&gt;
-&amp;lt;DISABLED&amp;gt;-&lt;br /&gt;
...&lt;br /&gt;
{auskommentierte Zeilen}&lt;br /&gt;
...&lt;br /&gt;
-&amp;lt;ENABLED&amp;gt;-&lt;br /&gt;
...&lt;br /&gt;
{gültige Zeilen}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In folgenden Konfigurationsdateien kann dieser Befehl benutzt werden:&lt;br /&gt;
&lt;br /&gt;
*.bus, *.ovh, *.sco, *.hum, model.cfg, envir.cfg, passengercabin.cfg, path.cfg&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Fahrgastwege_und_-sitzpl%C3%A4tze_konfigurieren&amp;diff=853</id>
		<title>Fahrgastwege und -sitzplätze konfigurieren</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Fahrgastwege_und_-sitzpl%C3%A4tze_konfigurieren&amp;diff=853"/>
		<updated>2014-02-11T09:02:53Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
''OMSI-Version: 2.0''&lt;br /&gt;
&lt;br /&gt;
== Überblick ==&lt;br /&gt;
&lt;br /&gt;
Die Wege, die ein Fahrgast im Bus laufen kann und die Positionen, wo er stehen oder sitzen darf, werden in zwei Dateien festgelegt:&lt;br /&gt;
&lt;br /&gt;
* passengercabin.cfg: Enthält die Sitz- und Stehplätze&lt;br /&gt;
* paths.cfg: Enthält die Laufwege&lt;br /&gt;
&lt;br /&gt;
, welche sich (bei unseren Fahrzeugen) üblicherweise im &amp;quot;Model&amp;quot;-Verzeichnis befinden. Allerdings ist sowohl der Name als auch der Speicherort nicht festgelegt.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist nur, dass sie korrekt in der *.bus, *.ovh oder - bei Szenerieobjekten, die zumindest auch Sitz- und Stehplätze haben können - in der *.sco-Datei eingetragen werden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[paths]&lt;br /&gt;
model\paths_eintrepper.cfg&lt;br /&gt;
&lt;br /&gt;
[passengercabin]&lt;br /&gt;
model\passengercabin.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tipp zur Vorgehensweise ===&lt;br /&gt;
&lt;br /&gt;
Bevor man mit der Arbeit an den Bus-Pfaden beginnt, erstellt man am Besten in Blender mit Ecken und Punkten die Sitzpositionen und Wege im Fahrzeug. Dann fertigt man davon einen Screenshot an und beschriftet die Wegpunkte mit Nummern von 0 an aufsteigend:&lt;br /&gt;
&lt;br /&gt;
[[Datei:A3 Pfad- und Sitzpositionen.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nun kann man sich durch die Sitzpositionen &amp;quot;hangeln&amp;quot; und jeweils in Blender die Eckpunktkoordinaten ablesen (dafür zuvor [N] drücken) und eintragen.&lt;br /&gt;
&lt;br /&gt;
Bei den Pfaden erstellt man die [pathpnt]-Einträge in der numerierten Reihenfolge, sodass man direkt aus der Zeichnung dann ablesen kann, welche Punkte mittels [pathlink] oder ggf. [pathlink_oneway]-Einträgen verbunden werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Schlüsselwörter für die passengercabin.cfg ==&lt;br /&gt;
&lt;br /&gt;
Die Passengercabin-Datei verfügt (neben dem [[DISABLED-Befehl]]) über folgende Schlüsselwörter:&lt;br /&gt;
&lt;br /&gt;
=== [passpos]/[drivpos] ===&lt;br /&gt;
&lt;br /&gt;
Definiert einen neuen Sitz- oder Stehplatz für einen Fahrgast oder für den Fahrer. Beide Schlüsselwörter verfügen über dieselben Parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[passpos]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z&lt;br /&gt;
h&lt;br /&gt;
rot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''x'', ''y'' und ''z'' definieren die Position des Gesäßes (Sitzplatz) oder der Füße (Stehplatz).&lt;br /&gt;
&lt;br /&gt;
Der Parameter ''h'' gibt an, wie hoch der Sitzplatz über dem Boden angebracht ist (was einen Einfluss auf die Beinstellung hat) oder - wenn er &amp;quot;0&amp;quot; ist - dass es sich um einen Stehplatz handelt.&lt;br /&gt;
&lt;br /&gt;
Der Parameter ''rot'' gibt die Rotation in Grad an. 0 = in Fahrtrichtung sitzend, 90 = quer zur Fahrtrichtung, nach rechts schauend.&lt;br /&gt;
&lt;br /&gt;
=== [illumination_interior] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl gibt an, mit welchen (bis zu vier) Lichtquellen die vorherige durch [passpos] oder [drivpos] definierte Sitz-/Stehposition beleuchtet wird. Außerdem werden alle weiteren Positionen derart beleuchtet bis zum Auftauchen eines weiteren [illumination_interior]-Befehls. Sollen weniger als vier Lichtquellen verwendet werden, sind die restlichen Positionen auf &amp;quot;-1&amp;quot; zu setzen.&lt;br /&gt;
&lt;br /&gt;
Die zur Anwendung kommenden Indizes entsprechen (nullbasiert) der Reihenfolge der &amp;quot;[interiorlight]&amp;quot;-Befehle (die die Lichtquellen definieren) in der model.cfg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[illumination_interior]&lt;br /&gt;
Index einer Lichtquelle&lt;br /&gt;
Index einer weiteren Lichtquelle&lt;br /&gt;
Index einer dritten Lichtquelle&lt;br /&gt;
Index einer vierten Lichtquelle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [entry] / [exit] ===&lt;br /&gt;
&lt;br /&gt;
Definiert einen neuen Ein- oder Ausgang des Fahrzeuges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[entry] / [exit]&lt;br /&gt;
num&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierzu muss kurz auf die Path.cfg-Datei vorgegriffen werden: Dort werden Pfad-Punkte definiert, die wiederum mit Pfad-Links miteinander verbunden werden. Die Pfadpunkte sind von 0 beginnend durchnumeriert.&lt;br /&gt;
&lt;br /&gt;
Der Parameter ''num'' gibt nun an, welcher dieser Pfadpunkte ein Eingang oder Ausgang ist. Pfadpunkte können auch gleichzeitig Ein- und Ausstieg sein, auch wenn das momentan eventuell zu einem gewissen Durcheinander führen kann.&lt;br /&gt;
&lt;br /&gt;
Jeder neue [entry]/[exit]-Befehl definiert einen weiteren Ein- oder Ausgang und diese Reihe ist ebenfalls von 0 an beginnend durchnumeriert. Es gibt also die Eingänge 0, 1, 2,... und die Ausgänge 0, 1, 2, ... .&lt;br /&gt;
&lt;br /&gt;
Über das Fahrzeug-Script kann nun über die vordefinierten Variablen ''PAX_Entry#_Open'' (# = Nummer des Eingangs) bzw. ''PAX_Exit#_Open'' der Öffnungszustand des jeweiligen Ein- oder Ausgangs gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Es ist also wichtig, dass das Script über diese Variablen den Ein- oder Ausgangs öffnet, damit Fahrgäste durch diese Tür ein- oder aussteigen können.&lt;br /&gt;
&lt;br /&gt;
Mit ''PAX_Entry#_Req'' und ''PAX_Exit#_Req'' kann die Anforderung der Fahrgäste am jeweiligen Ein- oder Ausgang abgefragt werden; sie können somit ersatzweise für den Bus-weiten alten Haltewunsch-Trigger ''int_haltewunsch'' genutzt werden, der aber weiterhin gültig bleibt.&lt;br /&gt;
&lt;br /&gt;
=== {noticketsale} ===&lt;br /&gt;
&lt;br /&gt;
Gibt an, dass der vorherige [entry] nicht benutzt werden darf, wenn der Fahrgast einen Fahrschein kaufen möchte. Typischerweise kommt der Befehl bei Hintertüren zum Einsatz, da die Fahrgäste nicht von der Hintertür nach vorne laufen sollen, um einen Fahrschein zu kaufen, sondern gleich vorne einsteigen sollen.&lt;br /&gt;
&lt;br /&gt;
=== {withbutton} ===&lt;br /&gt;
&lt;br /&gt;
Gibt an, dass für der vorherige [entry] über die Möglichkeit verfügt, dass Fahrgäste die Türöffnung von außen anfordern können, also z.B.  über Außentürtaster verfügt. In diesem Fall nämlich laufen die Fahrgäste auch dann zum entsprechenden Eingang, wenn die Tür zu ist, da sie davon ausgehen, dass sie sie selbst öffnen können. Die Anforderung kann im Script mittels der Variable ''PAX_Entry#_Req'' abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
=== [stamper] ===&lt;br /&gt;
&lt;br /&gt;
Definiert die Position des Entwerters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[stamper]&lt;br /&gt;
num&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erst wenn ein solcher Eintrag vorhanden ist, können Fahrgäste ihre Fahrkarten an einem Entwerter abstempeln. Es kann nur ein Entwerter pro Fahrzeug definiert werden. Der Fahrgast läuft zunächst zum Pfadpunkt ''num'' und führt dann seine seine Hand (mit der virtuellen Fahrkarte) zur Position ''x'', ''y'', ''z''. Dann wird der Sound-Trigger ''ev_Stamper'' ausgelöst (woraufhin üblicherweise das Entwertergeräusche ertönt), der Fahrgast nimmt die Hand wieder weg und geht weiter.&lt;br /&gt;
&lt;br /&gt;
=== [ticket_sale] ===&lt;br /&gt;
&lt;br /&gt;
Definiert die Fahrschein-Verkausstelle (Zahltisch).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale]&lt;br /&gt;
num&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie im ''Stamper''-Eintrag wird hierüber die Verkaufsstelle für Fahrscheine definiert, wobei ''num'' wieder der Index des Pfadpunktes ist, an dem der Fahrgast den Fahrschein bestellt. Die Koordinaten geben wieder die Position an, wo der Fahrgast &amp;quot;hinfassen&amp;quot; muss, um den Fahrschein zu nehmen. Allerdings wird über diesen Eintrag ''nicht'' eingestellt, wo die Fahrkarten erscheinen, dies regelt der Eintrag [ticket_sale_money_point].&lt;br /&gt;
&lt;br /&gt;
=== [ticket_sale_money_point] / [ticket_sale_money_point_2] ===&lt;br /&gt;
&lt;br /&gt;
Hierüber wird der Tisch definiert, auf den die Fahrgäste das Geld zum Bezahlen und worauf der Fahrer den Fahrschein legt.&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei Varianten des Befehls:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_money_point]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_money_point_2]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
anim-parent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei geben die Koordinaten pos_x bis pos_z die Position der Münzen, Scheine und Fahrscheine an und über var_x und var_y wird noch die Ausdehnung der Fläche definiert, wie stark die Werte variieren dürfen. Wenn der Fahrgast Geld hinlegt, dann wird der Soundtrigger ''ev_ticketsale_givemoney'' ausgelöst, allerdings nur, wenn Münzen enthalten sind - Scheine machen ja kein Geräusch! ;) Wenn der Fahrer dagegen den Fahrschein durch Klick auf einen Fahrscheinblock ausgibt, dann wird der Trigger ''ev_ticketsale_giveticket'' ausgelöst, sobald der Fahrgast den Fahrschein nimmt, dann ''ev_ticketsale_taketicket''&lt;br /&gt;
&lt;br /&gt;
Der neu eingeführte &amp;quot;anim-parent&amp;quot;-Parameter erlaubt die Animation der Geld-Position. Hierfür wird beim zugehörigen, animierten Mesh mit dem Befehl [mesh_ident] ein Name zugewiesen, der als &amp;quot;anim-parent&amp;quot; angegeben wird.&lt;br /&gt;
&lt;br /&gt;
=== [ticket_sale_change_point] / [ticket_sale_change_point_2] ===&lt;br /&gt;
&lt;br /&gt;
Auf gleiche Weise wie der Eintrag [ticket_sale_money_point] definiert dieser Eintrag den Punkt (bzw. die Fläche), wo das Rückgeld ausgegeben wird.&lt;br /&gt;
&lt;br /&gt;
Auch hier gibt es zwei Varianten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_change_point]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_change_point_2]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
anim-parent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch hier hat &amp;quot;anim-parent&amp;quot; dieselbe Funktion wie beim Befehl [ticket_sale_money_point_2].&lt;br /&gt;
&lt;br /&gt;
=== [linkToNextVeh]/[linkToPrevVeh] ===&lt;br /&gt;
&lt;br /&gt;
Bei Gelenkbussen gibt dieser Befehl an, welcher Pfadpunkt für den Übergang zum vorderen (&amp;quot;Next&amp;quot;) bzw. hinteren (&amp;quot;Prev&amp;quot;) Fahrzeugteil genutzt werden soll:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[linkToNextVeh]&lt;br /&gt;
Pfadpunktindex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schlüsselwörter für die paths.cfg ==&lt;br /&gt;
&lt;br /&gt;
Die Paths-Datei verfügt über folgende Schlüsselwörter:&lt;br /&gt;
&lt;br /&gt;
=== [stepsoundpack] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl definiert ein neues Schritt-Sound-Paket.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[stepsoundpack]&lt;br /&gt;
num&lt;br /&gt;
filename1.wav&lt;br /&gt;
filename2.wav&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit unterschiedliche Bereiche oder gewissermaßen Bodenbeläge unterschiedlich klingen, aber dennoch die Schritte einen abwechslungsreichen Klang auch innerhalb der jeweiligen Bereiche haben, können verschiedene Schritt-Sound-Pakete definiert werden. Jeder Eintrag definiert ein neues Paket, sie werden automatisch bei Null beginnend durchgezählt. ''num'' gibt an, wieviele Einzelschrittsounds definiert werden sollen, darauf folgt dann die Reihe der Wave-Dateien, welche sich im Verzeichnis ''Omsi\Sounds\Passengers'' befinden müssen. (Dort kann natürlich auch ein Unterverzeichnis eingerichtet werden und dann mit ''unterverzeichnis\filename1.wav'' vermerkt werden.)&lt;br /&gt;
&lt;br /&gt;
Die Stepsoundpacks müssen vor dem ersten [pathlink]/[pathlink_oneway]-Eintrag definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== [pathpnt] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pathpnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Eintrag definiert einen neuen Pfadpunkt. Die Pfadpunkte werden bei Null beginnend automatisch in der Reihenfolge der Einträge durchnumeriert.&lt;br /&gt;
&lt;br /&gt;
=== [pathlink] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Eintrag definiert eine Verbindung zweier Pfadpunkte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pathlink]&lt;br /&gt;
Pfadpunkt-Index 1&lt;br /&gt;
Pfadpunkt-Index 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [pathlink_oneway] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl wird genauso wie [pathlink] definiert, aber erzeugt einen &amp;quot;Einbahnstraßen&amp;quot;-Pfad. Die Fahrgäste können nur vom ersteingetragenen zum zweiteingetragenen Pfadpunkt laufen.&lt;br /&gt;
&lt;br /&gt;
=== [next_roomheight] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl setzt für alle folgenden [pathlink]- und [pathlink_oneway]-Befehle bis zum nächsten Auftauchen dieses Befehls die Raumhöhe auf den Wert ''height'' (in Metern), sodass verhindert wird, dass die Fahrgäste mit ihrem Kopf durch die Decke stoßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[next_roomheight]&lt;br /&gt;
height&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [next_stepsound] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl setzt für alle folgenden [pathlink]- und [pathlink_oneway]-Befehle bis zum nächsten Auftauchen dieses Befehls das zu verwendende Schritt-Soundpaket. Wenn die Fahrgäste über Pfadverbindungen laufen, die ab hier definiert werden, wird der Schrittsound aus dem gewählten Schritt-Soundpaket ausgewählt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[next_stepsound]&lt;br /&gt;
index_stepsoundpack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Fahrgastwege_und_-sitzpl%C3%A4tze_konfigurieren&amp;diff=852</id>
		<title>Fahrgastwege und -sitzplätze konfigurieren</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Fahrgastwege_und_-sitzpl%C3%A4tze_konfigurieren&amp;diff=852"/>
		<updated>2014-02-11T09:02:12Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* [pathlink_oneway] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
== Überblick ==&lt;br /&gt;
&lt;br /&gt;
Die Wege, die ein Fahrgast im Bus laufen kann und die Positionen, wo er stehen oder sitzen darf, werden in zwei Dateien festgelegt:&lt;br /&gt;
&lt;br /&gt;
* passengercabin.cfg: Enthält die Sitz- und Stehplätze&lt;br /&gt;
* paths.cfg: Enthält die Laufwege&lt;br /&gt;
&lt;br /&gt;
, welche sich (bei unseren Fahrzeugen) üblicherweise im &amp;quot;Model&amp;quot;-Verzeichnis befinden. Allerdings ist sowohl der Name als auch der Speicherort nicht festgelegt.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist nur, dass sie korrekt in der *.bus, *.ovh oder - bei Szenerieobjekten, die zumindest auch Sitz- und Stehplätze haben können - in der *.sco-Datei eingetragen werden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[paths]&lt;br /&gt;
model\paths_eintrepper.cfg&lt;br /&gt;
&lt;br /&gt;
[passengercabin]&lt;br /&gt;
model\passengercabin.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tipp zur Vorgehensweise ===&lt;br /&gt;
&lt;br /&gt;
Bevor man mit der Arbeit an den Bus-Pfaden beginnt, erstellt man am Besten in Blender mit Ecken und Punkten die Sitzpositionen und Wege im Fahrzeug. Dann fertigt man davon einen Screenshot an und beschriftet die Wegpunkte mit Nummern von 0 an aufsteigend:&lt;br /&gt;
&lt;br /&gt;
[[Datei:A3 Pfad- und Sitzpositionen.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nun kann man sich durch die Sitzpositionen &amp;quot;hangeln&amp;quot; und jeweils in Blender die Eckpunktkoordinaten ablesen (dafür zuvor [N] drücken) und eintragen.&lt;br /&gt;
&lt;br /&gt;
Bei den Pfaden erstellt man die [pathpnt]-Einträge in der numerierten Reihenfolge, sodass man direkt aus der Zeichnung dann ablesen kann, welche Punkte mittels [pathlink] oder ggf. [pathlink_oneway]-Einträgen verbunden werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Schlüsselwörter für die passengercabin.cfg ==&lt;br /&gt;
&lt;br /&gt;
Die Passengercabin-Datei verfügt (neben dem [[DISABLED-Befehl]]) über folgende Schlüsselwörter:&lt;br /&gt;
&lt;br /&gt;
=== [passpos]/[drivpos] ===&lt;br /&gt;
&lt;br /&gt;
Definiert einen neuen Sitz- oder Stehplatz für einen Fahrgast oder für den Fahrer. Beide Schlüsselwörter verfügen über dieselben Parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[passpos]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z&lt;br /&gt;
h&lt;br /&gt;
rot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''x'', ''y'' und ''z'' definieren die Position des Gesäßes (Sitzplatz) oder der Füße (Stehplatz).&lt;br /&gt;
&lt;br /&gt;
Der Parameter ''h'' gibt an, wie hoch der Sitzplatz über dem Boden angebracht ist (was einen Einfluss auf die Beinstellung hat) oder - wenn er &amp;quot;0&amp;quot; ist - dass es sich um einen Stehplatz handelt.&lt;br /&gt;
&lt;br /&gt;
Der Parameter ''rot'' gibt die Rotation in Grad an. 0 = in Fahrtrichtung sitzend, 90 = quer zur Fahrtrichtung, nach rechts schauend.&lt;br /&gt;
&lt;br /&gt;
=== [illumination_interior] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl gibt an, mit welchen (bis zu vier) Lichtquellen die vorherige durch [passpos] oder [drivpos] definierte Sitz-/Stehposition beleuchtet wird. Außerdem werden alle weiteren Positionen derart beleuchtet bis zum Auftauchen eines weiteren [illumination_interior]-Befehls. Sollen weniger als vier Lichtquellen verwendet werden, sind die restlichen Positionen auf &amp;quot;-1&amp;quot; zu setzen.&lt;br /&gt;
&lt;br /&gt;
Die zur Anwendung kommenden Indizes entsprechen (nullbasiert) der Reihenfolge der &amp;quot;[interiorlight]&amp;quot;-Befehle (die die Lichtquellen definieren) in der model.cfg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[illumination_interior]&lt;br /&gt;
Index einer Lichtquelle&lt;br /&gt;
Index einer weiteren Lichtquelle&lt;br /&gt;
Index einer dritten Lichtquelle&lt;br /&gt;
Index einer vierten Lichtquelle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [entry] / [exit] ===&lt;br /&gt;
&lt;br /&gt;
Definiert einen neuen Ein- oder Ausgang des Fahrzeuges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[entry] / [exit]&lt;br /&gt;
num&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierzu muss kurz auf die Path.cfg-Datei vorgegriffen werden: Dort werden Pfad-Punkte definiert, die wiederum mit Pfad-Links miteinander verbunden werden. Die Pfadpunkte sind von 0 beginnend durchnumeriert.&lt;br /&gt;
&lt;br /&gt;
Der Parameter ''num'' gibt nun an, welcher dieser Pfadpunkte ein Eingang oder Ausgang ist. Pfadpunkte können auch gleichzeitig Ein- und Ausstieg sein, auch wenn das momentan eventuell zu einem gewissen Durcheinander führen kann.&lt;br /&gt;
&lt;br /&gt;
Jeder neue [entry]/[exit]-Befehl definiert einen weiteren Ein- oder Ausgang und diese Reihe ist ebenfalls von 0 an beginnend durchnumeriert. Es gibt also die Eingänge 0, 1, 2,... und die Ausgänge 0, 1, 2, ... .&lt;br /&gt;
&lt;br /&gt;
Über das Fahrzeug-Script kann nun über die vordefinierten Variablen ''PAX_Entry#_Open'' (# = Nummer des Eingangs) bzw. ''PAX_Exit#_Open'' der Öffnungszustand des jeweiligen Ein- oder Ausgangs gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Es ist also wichtig, dass das Script über diese Variablen den Ein- oder Ausgangs öffnet, damit Fahrgäste durch diese Tür ein- oder aussteigen können.&lt;br /&gt;
&lt;br /&gt;
Mit ''PAX_Entry#_Req'' und ''PAX_Exit#_Req'' kann die Anforderung der Fahrgäste am jeweiligen Ein- oder Ausgang abgefragt werden; sie können somit ersatzweise für den Bus-weiten alten Haltewunsch-Trigger ''int_haltewunsch'' genutzt werden, der aber weiterhin gültig bleibt.&lt;br /&gt;
&lt;br /&gt;
=== {noticketsale} ===&lt;br /&gt;
&lt;br /&gt;
Gibt an, dass der vorherige [entry] nicht benutzt werden darf, wenn der Fahrgast einen Fahrschein kaufen möchte. Typischerweise kommt der Befehl bei Hintertüren zum Einsatz, da die Fahrgäste nicht von der Hintertür nach vorne laufen sollen, um einen Fahrschein zu kaufen, sondern gleich vorne einsteigen sollen.&lt;br /&gt;
&lt;br /&gt;
=== {withbutton} ===&lt;br /&gt;
&lt;br /&gt;
Gibt an, dass für der vorherige [entry] über die Möglichkeit verfügt, dass Fahrgäste die Türöffnung von außen anfordern können, also z.B.  über Außentürtaster verfügt. In diesem Fall nämlich laufen die Fahrgäste auch dann zum entsprechenden Eingang, wenn die Tür zu ist, da sie davon ausgehen, dass sie sie selbst öffnen können. Die Anforderung kann im Script mittels der Variable ''PAX_Entry#_Req'' abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
=== [stamper] ===&lt;br /&gt;
&lt;br /&gt;
Definiert die Position des Entwerters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[stamper]&lt;br /&gt;
num&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erst wenn ein solcher Eintrag vorhanden ist, können Fahrgäste ihre Fahrkarten an einem Entwerter abstempeln. Es kann nur ein Entwerter pro Fahrzeug definiert werden. Der Fahrgast läuft zunächst zum Pfadpunkt ''num'' und führt dann seine seine Hand (mit der virtuellen Fahrkarte) zur Position ''x'', ''y'', ''z''. Dann wird der Sound-Trigger ''ev_Stamper'' ausgelöst (woraufhin üblicherweise das Entwertergeräusche ertönt), der Fahrgast nimmt die Hand wieder weg und geht weiter.&lt;br /&gt;
&lt;br /&gt;
=== [ticket_sale] ===&lt;br /&gt;
&lt;br /&gt;
Definiert die Fahrschein-Verkausstelle (Zahltisch).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale]&lt;br /&gt;
num&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie im ''Stamper''-Eintrag wird hierüber die Verkaufsstelle für Fahrscheine definiert, wobei ''num'' wieder der Index des Pfadpunktes ist, an dem der Fahrgast den Fahrschein bestellt. Die Koordinaten geben wieder die Position an, wo der Fahrgast &amp;quot;hinfassen&amp;quot; muss, um den Fahrschein zu nehmen. Allerdings wird über diesen Eintrag ''nicht'' eingestellt, wo die Fahrkarten erscheinen, dies regelt der Eintrag [ticket_sale_money_point].&lt;br /&gt;
&lt;br /&gt;
=== [ticket_sale_money_point] / [ticket_sale_money_point_2] ===&lt;br /&gt;
&lt;br /&gt;
Hierüber wird der Tisch definiert, auf den die Fahrgäste das Geld zum Bezahlen und worauf der Fahrer den Fahrschein legt.&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei Varianten des Befehls:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_money_point]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_money_point_2]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
anim-parent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei geben die Koordinaten pos_x bis pos_z die Position der Münzen, Scheine und Fahrscheine an und über var_x und var_y wird noch die Ausdehnung der Fläche definiert, wie stark die Werte variieren dürfen. Wenn der Fahrgast Geld hinlegt, dann wird der Soundtrigger ''ev_ticketsale_givemoney'' ausgelöst, allerdings nur, wenn Münzen enthalten sind - Scheine machen ja kein Geräusch! ;) Wenn der Fahrer dagegen den Fahrschein durch Klick auf einen Fahrscheinblock ausgibt, dann wird der Trigger ''ev_ticketsale_giveticket'' ausgelöst, sobald der Fahrgast den Fahrschein nimmt, dann ''ev_ticketsale_taketicket''&lt;br /&gt;
&lt;br /&gt;
Der neu eingeführte &amp;quot;anim-parent&amp;quot;-Parameter erlaubt die Animation der Geld-Position. Hierfür wird beim zugehörigen, animierten Mesh mit dem Befehl [mesh_ident] ein Name zugewiesen, der als &amp;quot;anim-parent&amp;quot; angegeben wird.&lt;br /&gt;
&lt;br /&gt;
=== [ticket_sale_change_point] / [ticket_sale_change_point_2] ===&lt;br /&gt;
&lt;br /&gt;
Auf gleiche Weise wie der Eintrag [ticket_sale_money_point] definiert dieser Eintrag den Punkt (bzw. die Fläche), wo das Rückgeld ausgegeben wird.&lt;br /&gt;
&lt;br /&gt;
Auch hier gibt es zwei Varianten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_change_point]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_change_point_2]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
anim-parent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch hier hat &amp;quot;anim-parent&amp;quot; dieselbe Funktion wie beim Befehl [ticket_sale_money_point_2].&lt;br /&gt;
&lt;br /&gt;
=== [linkToNextVeh]/[linkToPrevVeh] ===&lt;br /&gt;
&lt;br /&gt;
Bei Gelenkbussen gibt dieser Befehl an, welcher Pfadpunkt für den Übergang zum vorderen (&amp;quot;Next&amp;quot;) bzw. hinteren (&amp;quot;Prev&amp;quot;) Fahrzeugteil genutzt werden soll:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[linkToNextVeh]&lt;br /&gt;
Pfadpunktindex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schlüsselwörter für die paths.cfg ==&lt;br /&gt;
&lt;br /&gt;
Die Paths-Datei verfügt über folgende Schlüsselwörter:&lt;br /&gt;
&lt;br /&gt;
=== [stepsoundpack] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl definiert ein neues Schritt-Sound-Paket.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[stepsoundpack]&lt;br /&gt;
num&lt;br /&gt;
filename1.wav&lt;br /&gt;
filename2.wav&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit unterschiedliche Bereiche oder gewissermaßen Bodenbeläge unterschiedlich klingen, aber dennoch die Schritte einen abwechslungsreichen Klang auch innerhalb der jeweiligen Bereiche haben, können verschiedene Schritt-Sound-Pakete definiert werden. Jeder Eintrag definiert ein neues Paket, sie werden automatisch bei Null beginnend durchgezählt. ''num'' gibt an, wieviele Einzelschrittsounds definiert werden sollen, darauf folgt dann die Reihe der Wave-Dateien, welche sich im Verzeichnis ''Omsi\Sounds\Passengers'' befinden müssen. (Dort kann natürlich auch ein Unterverzeichnis eingerichtet werden und dann mit ''unterverzeichnis\filename1.wav'' vermerkt werden.)&lt;br /&gt;
&lt;br /&gt;
Die Stepsoundpacks müssen vor dem ersten [pathlink]/[pathlink_oneway]-Eintrag definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== [pathpnt] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pathpnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Eintrag definiert einen neuen Pfadpunkt. Die Pfadpunkte werden bei Null beginnend automatisch in der Reihenfolge der Einträge durchnumeriert.&lt;br /&gt;
&lt;br /&gt;
=== [pathlink] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Eintrag definiert eine Verbindung zweier Pfadpunkte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pathlink]&lt;br /&gt;
Pfadpunkt-Index 1&lt;br /&gt;
Pfadpunkt-Index 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [pathlink_oneway] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl wird genauso wie [pathlink] definiert, aber erzeugt einen &amp;quot;Einbahnstraßen&amp;quot;-Pfad. Die Fahrgäste können nur vom ersteingetragenen zum zweiteingetragenen Pfadpunkt laufen.&lt;br /&gt;
&lt;br /&gt;
=== [next_roomheight] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl setzt für alle folgenden [pathlink]- und [pathlink_oneway]-Befehle bis zum nächsten Auftauchen dieses Befehls die Raumhöhe auf den Wert ''height'' (in Metern), sodass verhindert wird, dass die Fahrgäste mit ihrem Kopf durch die Decke stoßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[next_roomheight]&lt;br /&gt;
height&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [next_stepsound] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl setzt für alle folgenden [pathlink]- und [pathlink_oneway]-Befehle bis zum nächsten Auftauchen dieses Befehls das zu verwendende Schritt-Soundpaket. Wenn die Fahrgäste über Pfadverbindungen laufen, die ab hier definiert werden, wird der Schrittsound aus dem gewählten Schritt-Soundpaket ausgewählt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[next_stepsound]&lt;br /&gt;
index_stepsoundpack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Fahrgastwege_und_-sitzpl%C3%A4tze_konfigurieren&amp;diff=851</id>
		<title>Fahrgastwege und -sitzplätze konfigurieren</title>
		<link rel="alternate" type="text/html" href="http://wiki.omnibussimulator.de/omsiwikineu.de/index.php?title=Fahrgastwege_und_-sitzpl%C3%A4tze_konfigurieren&amp;diff=851"/>
		<updated>2014-02-11T09:00:56Z</updated>

		<summary type="html">&lt;p&gt;Marcel Kuhnt: /* Schlüsselwörter für die passengercabin.cfg */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hinweis: Dieser Artikel wurde noch nicht ins Englische übersetzt!''&lt;br /&gt;
&lt;br /&gt;
== Überblick ==&lt;br /&gt;
&lt;br /&gt;
Die Wege, die ein Fahrgast im Bus laufen kann und die Positionen, wo er stehen oder sitzen darf, werden in zwei Dateien festgelegt:&lt;br /&gt;
&lt;br /&gt;
* passengercabin.cfg: Enthält die Sitz- und Stehplätze&lt;br /&gt;
* paths.cfg: Enthält die Laufwege&lt;br /&gt;
&lt;br /&gt;
, welche sich (bei unseren Fahrzeugen) üblicherweise im &amp;quot;Model&amp;quot;-Verzeichnis befinden. Allerdings ist sowohl der Name als auch der Speicherort nicht festgelegt.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist nur, dass sie korrekt in der *.bus, *.ovh oder - bei Szenerieobjekten, die zumindest auch Sitz- und Stehplätze haben können - in der *.sco-Datei eingetragen werden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[paths]&lt;br /&gt;
model\paths_eintrepper.cfg&lt;br /&gt;
&lt;br /&gt;
[passengercabin]&lt;br /&gt;
model\passengercabin.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tipp zur Vorgehensweise ===&lt;br /&gt;
&lt;br /&gt;
Bevor man mit der Arbeit an den Bus-Pfaden beginnt, erstellt man am Besten in Blender mit Ecken und Punkten die Sitzpositionen und Wege im Fahrzeug. Dann fertigt man davon einen Screenshot an und beschriftet die Wegpunkte mit Nummern von 0 an aufsteigend:&lt;br /&gt;
&lt;br /&gt;
[[Datei:A3 Pfad- und Sitzpositionen.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nun kann man sich durch die Sitzpositionen &amp;quot;hangeln&amp;quot; und jeweils in Blender die Eckpunktkoordinaten ablesen (dafür zuvor [N] drücken) und eintragen.&lt;br /&gt;
&lt;br /&gt;
Bei den Pfaden erstellt man die [pathpnt]-Einträge in der numerierten Reihenfolge, sodass man direkt aus der Zeichnung dann ablesen kann, welche Punkte mittels [pathlink] oder ggf. [pathlink_oneway]-Einträgen verbunden werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Schlüsselwörter für die passengercabin.cfg ==&lt;br /&gt;
&lt;br /&gt;
Die Passengercabin-Datei verfügt (neben dem [[DISABLED-Befehl]]) über folgende Schlüsselwörter:&lt;br /&gt;
&lt;br /&gt;
=== [passpos]/[drivpos] ===&lt;br /&gt;
&lt;br /&gt;
Definiert einen neuen Sitz- oder Stehplatz für einen Fahrgast oder für den Fahrer. Beide Schlüsselwörter verfügen über dieselben Parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[passpos]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z&lt;br /&gt;
h&lt;br /&gt;
rot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''x'', ''y'' und ''z'' definieren die Position des Gesäßes (Sitzplatz) oder der Füße (Stehplatz).&lt;br /&gt;
&lt;br /&gt;
Der Parameter ''h'' gibt an, wie hoch der Sitzplatz über dem Boden angebracht ist (was einen Einfluss auf die Beinstellung hat) oder - wenn er &amp;quot;0&amp;quot; ist - dass es sich um einen Stehplatz handelt.&lt;br /&gt;
&lt;br /&gt;
Der Parameter ''rot'' gibt die Rotation in Grad an. 0 = in Fahrtrichtung sitzend, 90 = quer zur Fahrtrichtung, nach rechts schauend.&lt;br /&gt;
&lt;br /&gt;
=== [illumination_interior] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl gibt an, mit welchen (bis zu vier) Lichtquellen die vorherige durch [passpos] oder [drivpos] definierte Sitz-/Stehposition beleuchtet wird. Außerdem werden alle weiteren Positionen derart beleuchtet bis zum Auftauchen eines weiteren [illumination_interior]-Befehls. Sollen weniger als vier Lichtquellen verwendet werden, sind die restlichen Positionen auf &amp;quot;-1&amp;quot; zu setzen.&lt;br /&gt;
&lt;br /&gt;
Die zur Anwendung kommenden Indizes entsprechen (nullbasiert) der Reihenfolge der &amp;quot;[interiorlight]&amp;quot;-Befehle (die die Lichtquellen definieren) in der model.cfg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[illumination_interior]&lt;br /&gt;
Index einer Lichtquelle&lt;br /&gt;
Index einer weiteren Lichtquelle&lt;br /&gt;
Index einer dritten Lichtquelle&lt;br /&gt;
Index einer vierten Lichtquelle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [entry] / [exit] ===&lt;br /&gt;
&lt;br /&gt;
Definiert einen neuen Ein- oder Ausgang des Fahrzeuges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[entry] / [exit]&lt;br /&gt;
num&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierzu muss kurz auf die Path.cfg-Datei vorgegriffen werden: Dort werden Pfad-Punkte definiert, die wiederum mit Pfad-Links miteinander verbunden werden. Die Pfadpunkte sind von 0 beginnend durchnumeriert.&lt;br /&gt;
&lt;br /&gt;
Der Parameter ''num'' gibt nun an, welcher dieser Pfadpunkte ein Eingang oder Ausgang ist. Pfadpunkte können auch gleichzeitig Ein- und Ausstieg sein, auch wenn das momentan eventuell zu einem gewissen Durcheinander führen kann.&lt;br /&gt;
&lt;br /&gt;
Jeder neue [entry]/[exit]-Befehl definiert einen weiteren Ein- oder Ausgang und diese Reihe ist ebenfalls von 0 an beginnend durchnumeriert. Es gibt also die Eingänge 0, 1, 2,... und die Ausgänge 0, 1, 2, ... .&lt;br /&gt;
&lt;br /&gt;
Über das Fahrzeug-Script kann nun über die vordefinierten Variablen ''PAX_Entry#_Open'' (# = Nummer des Eingangs) bzw. ''PAX_Exit#_Open'' der Öffnungszustand des jeweiligen Ein- oder Ausgangs gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Es ist also wichtig, dass das Script über diese Variablen den Ein- oder Ausgangs öffnet, damit Fahrgäste durch diese Tür ein- oder aussteigen können.&lt;br /&gt;
&lt;br /&gt;
Mit ''PAX_Entry#_Req'' und ''PAX_Exit#_Req'' kann die Anforderung der Fahrgäste am jeweiligen Ein- oder Ausgang abgefragt werden; sie können somit ersatzweise für den Bus-weiten alten Haltewunsch-Trigger ''int_haltewunsch'' genutzt werden, der aber weiterhin gültig bleibt.&lt;br /&gt;
&lt;br /&gt;
=== {noticketsale} ===&lt;br /&gt;
&lt;br /&gt;
Gibt an, dass der vorherige [entry] nicht benutzt werden darf, wenn der Fahrgast einen Fahrschein kaufen möchte. Typischerweise kommt der Befehl bei Hintertüren zum Einsatz, da die Fahrgäste nicht von der Hintertür nach vorne laufen sollen, um einen Fahrschein zu kaufen, sondern gleich vorne einsteigen sollen.&lt;br /&gt;
&lt;br /&gt;
=== {withbutton} ===&lt;br /&gt;
&lt;br /&gt;
Gibt an, dass für der vorherige [entry] über die Möglichkeit verfügt, dass Fahrgäste die Türöffnung von außen anfordern können, also z.B.  über Außentürtaster verfügt. In diesem Fall nämlich laufen die Fahrgäste auch dann zum entsprechenden Eingang, wenn die Tür zu ist, da sie davon ausgehen, dass sie sie selbst öffnen können. Die Anforderung kann im Script mittels der Variable ''PAX_Entry#_Req'' abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
=== [stamper] ===&lt;br /&gt;
&lt;br /&gt;
Definiert die Position des Entwerters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[stamper]&lt;br /&gt;
num&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erst wenn ein solcher Eintrag vorhanden ist, können Fahrgäste ihre Fahrkarten an einem Entwerter abstempeln. Es kann nur ein Entwerter pro Fahrzeug definiert werden. Der Fahrgast läuft zunächst zum Pfadpunkt ''num'' und führt dann seine seine Hand (mit der virtuellen Fahrkarte) zur Position ''x'', ''y'', ''z''. Dann wird der Sound-Trigger ''ev_Stamper'' ausgelöst (woraufhin üblicherweise das Entwertergeräusche ertönt), der Fahrgast nimmt die Hand wieder weg und geht weiter.&lt;br /&gt;
&lt;br /&gt;
=== [ticket_sale] ===&lt;br /&gt;
&lt;br /&gt;
Definiert die Fahrschein-Verkausstelle (Zahltisch).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale]&lt;br /&gt;
num&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie im ''Stamper''-Eintrag wird hierüber die Verkaufsstelle für Fahrscheine definiert, wobei ''num'' wieder der Index des Pfadpunktes ist, an dem der Fahrgast den Fahrschein bestellt. Die Koordinaten geben wieder die Position an, wo der Fahrgast &amp;quot;hinfassen&amp;quot; muss, um den Fahrschein zu nehmen. Allerdings wird über diesen Eintrag ''nicht'' eingestellt, wo die Fahrkarten erscheinen, dies regelt der Eintrag [ticket_sale_money_point].&lt;br /&gt;
&lt;br /&gt;
=== [ticket_sale_money_point] / [ticket_sale_money_point_2] ===&lt;br /&gt;
&lt;br /&gt;
Hierüber wird der Tisch definiert, auf den die Fahrgäste das Geld zum Bezahlen und worauf der Fahrer den Fahrschein legt.&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei Varianten des Befehls:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_money_point]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_money_point_2]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
anim-parent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei geben die Koordinaten pos_x bis pos_z die Position der Münzen, Scheine und Fahrscheine an und über var_x und var_y wird noch die Ausdehnung der Fläche definiert, wie stark die Werte variieren dürfen. Wenn der Fahrgast Geld hinlegt, dann wird der Soundtrigger ''ev_ticketsale_givemoney'' ausgelöst, allerdings nur, wenn Münzen enthalten sind - Scheine machen ja kein Geräusch! ;) Wenn der Fahrer dagegen den Fahrschein durch Klick auf einen Fahrscheinblock ausgibt, dann wird der Trigger ''ev_ticketsale_giveticket'' ausgelöst, sobald der Fahrgast den Fahrschein nimmt, dann ''ev_ticketsale_taketicket''&lt;br /&gt;
&lt;br /&gt;
Der neu eingeführte &amp;quot;anim-parent&amp;quot;-Parameter erlaubt die Animation der Geld-Position. Hierfür wird beim zugehörigen, animierten Mesh mit dem Befehl [mesh_ident] ein Name zugewiesen, der als &amp;quot;anim-parent&amp;quot; angegeben wird.&lt;br /&gt;
&lt;br /&gt;
=== [ticket_sale_change_point] / [ticket_sale_change_point_2] ===&lt;br /&gt;
&lt;br /&gt;
Auf gleiche Weise wie der Eintrag [ticket_sale_money_point] definiert dieser Eintrag den Punkt (bzw. die Fläche), wo das Rückgeld ausgegeben wird.&lt;br /&gt;
&lt;br /&gt;
Auch hier gibt es zwei Varianten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_change_point]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ticket_sale_change_point_2]&lt;br /&gt;
pos_x&lt;br /&gt;
pos_y&lt;br /&gt;
pos_z&lt;br /&gt;
var_x&lt;br /&gt;
var_y&lt;br /&gt;
anim-parent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch hier hat &amp;quot;anim-parent&amp;quot; dieselbe Funktion wie beim Befehl [ticket_sale_money_point_2].&lt;br /&gt;
&lt;br /&gt;
=== [linkToNextVeh]/[linkToPrevVeh] ===&lt;br /&gt;
&lt;br /&gt;
Bei Gelenkbussen gibt dieser Befehl an, welcher Pfadpunkt für den Übergang zum vorderen (&amp;quot;Next&amp;quot;) bzw. hinteren (&amp;quot;Prev&amp;quot;) Fahrzeugteil genutzt werden soll:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[linkToNextVeh]&lt;br /&gt;
Pfadpunktindex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schlüsselwörter für die paths.cfg ==&lt;br /&gt;
&lt;br /&gt;
Die Paths-Datei verfügt über folgende Schlüsselwörter:&lt;br /&gt;
&lt;br /&gt;
=== [stepsoundpack] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl definiert ein neues Schritt-Sound-Paket.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[stepsoundpack]&lt;br /&gt;
num&lt;br /&gt;
filename1.wav&lt;br /&gt;
filename2.wav&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit unterschiedliche Bereiche oder gewissermaßen Bodenbeläge unterschiedlich klingen, aber dennoch die Schritte einen abwechslungsreichen Klang auch innerhalb der jeweiligen Bereiche haben, können verschiedene Schritt-Sound-Pakete definiert werden. Jeder Eintrag definiert ein neues Paket, sie werden automatisch bei Null beginnend durchgezählt. ''num'' gibt an, wieviele Einzelschrittsounds definiert werden sollen, darauf folgt dann die Reihe der Wave-Dateien, welche sich im Verzeichnis ''Omsi\Sounds\Passengers'' befinden müssen. (Dort kann natürlich auch ein Unterverzeichnis eingerichtet werden und dann mit ''unterverzeichnis\filename1.wav'' vermerkt werden.)&lt;br /&gt;
&lt;br /&gt;
Die Stepsoundpacks müssen vor dem ersten [pathlink]/[pathlink_oneway]-Eintrag definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== [pathpnt] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pathpnt]&lt;br /&gt;
x&lt;br /&gt;
y&lt;br /&gt;
z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Eintrag definiert einen neuen Pfadpunkt. Die Pfadpunkte werden bei Null beginnend automatisch in der Reihenfolge der Einträge durchnumeriert.&lt;br /&gt;
&lt;br /&gt;
=== [pathlink] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Eintrag definiert eine Verbindung zweier Pfadpunkte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pathlink]&lt;br /&gt;
Pfadpunkt-Index 1&lt;br /&gt;
Pfadpunkt-Index 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [pathlink_oneway] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl wird genauso wie [pathlink] definiert, aber erzeugt einen Einrichtungs-Pfad. Die Fahrgäste können nur vom ersteingetragenen zum zweiteingetragenen Pfadpunkt laufen.&lt;br /&gt;
&lt;br /&gt;
=== [next_roomheight] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl setzt für alle folgenden [pathlink]- und [pathlink_oneway]-Befehle bis zum nächsten Auftauchen dieses Befehls die Raumhöhe auf den Wert ''height'' (in Metern), sodass verhindert wird, dass die Fahrgäste mit ihrem Kopf durch die Decke stoßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[next_roomheight]&lt;br /&gt;
height&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [next_stepsound] ===&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl setzt für alle folgenden [pathlink]- und [pathlink_oneway]-Befehle bis zum nächsten Auftauchen dieses Befehls das zu verwendende Schritt-Soundpaket. Wenn die Fahrgäste über Pfadverbindungen laufen, die ab hier definiert werden, wird der Schrittsound aus dem gewählten Schritt-Soundpaket ausgewählt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[next_stepsound]&lt;br /&gt;
index_stepsoundpack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nachschlagewerk für Addon-Entwickler]]&lt;/div&gt;</summary>
		<author><name>Marcel Kuhnt</name></author>
		
	</entry>
</feed>