Diese Website verwendet Cookies und ähnliche Technologien!

Falls Sie die damit nicht einverstanden sind, ändern Sie bitte die Einstellungen Ihres Browsers. Mehr erfahren

Ich bin damit einverstanden

 Wir nutzen Cookies um Ihnen das beste Surferlebnis auf unserer Website bieten zu können.

  • Falls Sie dies bestätigen und fortfahren, ohne Ihre Einstellungen zu ändern, gehen wir davon aus, dass sie einverstanden sind alle Cookies unserer Seite zu erhalten:
  • Falls Sie Ihre Einstellung ändern möchten, so finden Sie eine Anleitung dazu hier.

Einige DataRefs verweisen auf mehrspaltige Datenspeicher, sogenannte Arrays.
Unter dem Pfad ist also eine Art Tabelle mit mehreren Einzelwerten hinterlegt. Man erkennt solche Arrays in der DataRefs.txt (oder auch in unserer uipcxdatos.txt for X-Plane 10) an einer Zahl in eckigen Klammern hinter dem Datentyp.

Die Zahl entspricht dann der maximalen Anzahl an Werten in diesem Array.


1385 sim/flightmodel/engine/ENGN_thro float[8]

Dieser Eintrag in der uipcxdatos.txt zeigt uns z.B. das unter diesem DataRef-Pfad eine 8-zeiliges Array mit 8 Float (="Kommazahlen") hinterlegt ist. Jede dieser Zeilen könnte nun die Positions des Throttels zwischen 0=Idle und 1=Vollschub eines Triebwerks entsprechen.*
Besitzt deine aktuelles Flugmodell lediglich 2 Engines, so wären die Werte im Array der Zeilen 3-8 leer.

*Anmerkung: Da IOCP nur ganzzahlige Werte (Integer) übermitteln kann. Werden Kommazahlen generell mit 10.000 multipliziert.
1,0 würde also als 10000 übertragen. 0,95 als 9500 usw.
Dazu mehr in einem anderen Artikel

Auf eine Zeile des Arrays zugreifen (IOCP-Standard konform)

Bleiben wir bei unserem Beispiel mit dem Gashebel. Eine gewöhnliche Anfrage an den IOCP Offset, so wie wir sie auf einen gewöhnlichen DataRef stellen würden, liefert uns standardmäßig auch einen Wert! Allerdings lediglich den der 1.Zeile, also von Engine 1.

Um nun auch den Wert der anderen Zeilen (>1) auszulesen, müssen wir dies explizit als Wert mit neuer IOCP-Offsetnummer definieren. Das machen wir mit eine Unterstrich + der Zeilennummer:

1385 sim/flightmodel/engine/ENGN_thro _1
1386 sim/flightmodel/engine/ENGN_thro _2

Auf eine Zeile des Arrays zugreifen (UIPCX Eigenlösung)

Der Autor des Plugins hat eine weitere Option für den Zugriff auf eine andere Zeile des Arrays implementiert. Hierbei kannst du den Eintrag in der uipcxdatos.txt so belassen, wie du sie bisher verwendet hast, beide Werte werden über den gleichen Offset abgerufen.  

1385 sim/flightmodel/engine/ENGN_thro float[8]

Der Unterschied liegt in der Anfrage nach dem Wert. Der Client fragt jetzt nach dem gemeinsamen IOCP-Offset (Arn.Preg:1385) und fügt die Arrayspalt, mit einem Punkt getrennt, dahinter an.
Hier als Beispiel einen telnet Aufruf der Throttlestellung von Engine 2:

telnet 127.0.0.1 8090
Arn.TipoSer:XPL0:
Arn.Preg:1385.2
Arn.Resp:1385.2=8000:

Da dies nicht IOCP Standard ist wird dies nicht ohne Weiteres von jeder Anwendungen unterstützt werden. (SIOC z.B.)

Habt ihr jedoch selbst ein Programm erstellt oder testet die Verbindung über telnet, könnte sich dieses Feature natürlich als nützlich erweisen, da ihr die DataRef.txt direkt so übernehmen könnt und nicht für jedes Array zusätzliche Offsets definieren müsst.

Viel Spaß damit!

Kommentare

{fcomments}