Capabilities

Dokumentation für Version v0.1.0-beta.3Quelle auf GitHub ansehen

Übersetzung der englischen Originalseite für OmsiLaunch 0.1.0-beta3. Maßgeblich ist die englische Seite: Bei Abweichungen gelten die englische Seite und der Code.

Dies ist das maßgebliche Verzeichnis dessen, was OmsiLaunch 0.1.0-beta3 kann. Es ist abgeleitet aus PublicCapabilityRegistry (src/OmsiLaunch.Api/PublicCapabilityRegistry.cs), der Runtime-Implementierung im Plugin (src/OmsiLaunch.Plugin/CurrentRuntimeControl.cs und src/OmsiLaunch.Interop/OmsiRuntimeReaders.cs) sowie OmsiLaunchService.GetCapabilitiesAsync. Für jede Capability werden angegeben: die Klassifizierung, die in dieser gesamten Dokumentation verwendete Stabilitätsstufe, ob eine Sitzung im Zustand Running erforderlich ist, ob sie OMSI verändert, die Argumente und Ergebnisschlüssel, die Fehler sowie der Nachweis der Validierung zur Laufzeit. Wie eine Operation aufgerufen wird (CLI-Routen, API-Envelope, Timeouts, Handles), steht unter Runtime-Steuerung; die Nachweistabelle steht unter Status der Runtime-Validierung.

Klassifizierung und Stabilität#

PublicCapabilityClassification hat vier Werte. Sie werden wie folgt auf das Stabilitätsvokabular abgebildet, mit Herabstufungen, wo der Nachweis unvollständig ist:

KlassifizierungBedeutungStabilität
PublicStableBetaÖffentlich, Teil des Beta-Vertrags, zur Laufzeit validiertSTABLE_BETA (herabgestuft auf PARTIAL, wo vermerkt)
PublicExperimentalÖffentlich, kann sich ändern, zur Laufzeit validiert oder statisch validiertEXPERIMENTAL (herabgestuft auf PARTIAL, wo vermerkt)
InternalOnlyForschungsprimitiv; nicht über die öffentliche API oder CLI erreichbarINTERNAL
UnsupportedFür Diagnosezwecke erkannt, abgelehnt oder nicht vorhandenUNAVAILABLE

PublicCapabilityKind unterscheidet Read, Write, Action und Event. Jede Runtime-Capability erfordert eine Sitzung im Zustand Running und exakt das Profil Omsi23004_692EBFBF (RequiresSession / RequiresExactProfile in der Registry); Sitzungs-Capabilities, die eine Sitzung erzeugen, erfordern das exakte Profil, aber keine Sitzung.

Runtime-Ergebnisse sind Dictionaries aus Zeichenfolgen. Schlüssel, die mit internal_ beginnen oder auf _address, _pointer oder _vmt enden, werden an der API-Grenze entfernt (ScrubInternalValues) und sind hier nicht aufgeführt. Die Ergebnisschlüssel in den folgenden Operationstabellen sind exakt die Schlüsselmengen, die das Produkt zurückgibt: Sie wurden durch Ausführen jeder öffentlichen Operation in einer echten Sitzung erfasst (Dokumentationserfassung des Runtime-Abschlusses, Sitzung f51dcb59-a723-4570-b6c5-b61e628a7993, situations\Linie 5.osn; Listenzeilen werden als <row>.<n>.<field> geschrieben).

Wie ein Fehlschlag einer Operation gemeldet wird (CurrentRuntimeControl.Execute):

FehlschlagErrorCodeValues
Ablehnung durch die Registry (unbekannte oder internal.*-Operation, fehlendes erforderliches Argument)OL_E_RUNTIME_OPERATION_UNKNOWN, OL_E_RUNTIME_ARGUMENT_REQUIREDkeine
Eine bewusste Ablehnung durch das Produkt (weather.set)der spezifische Code (OL_E_RUNTIME_SETTING_NOT_PERSISTENT)detail (Satz)
Ein D3D-Fehlschlagder spezifische OL_E_D3D_*-Codedetail, native_status
Jeder andere Fehlschlag auf Plugin-Seite (veraltetes Handle, unbekannter Name, Wert außerhalb des Bereichs, kein Spielerfahrzeug, ...)OL_E_RUNTIME_OPERATION_FAILEDdetail (beginnt mit dem spezifischen Code, z. B. OL_E_RUNTIME_OBJECT_HANDLE_STALE oder OL_E_RUNTIME_VALUE_OUT_OF_RANGE (Parameter 'minute')), exception (.NET-Typname)
Ein Ergebnis, das nicht in die Mailbox von 64 KiB passtOL_E_RUNTIME_RESPONSE_TOO_LARGE (begrenzte Listen werden stattdessen gekürzt, siehe Fahrplan, Fahrer, Fahrscheine)keine

Die Spalte Errors (Fehler) jeder Tabelle nennt die spezifischen Codes; lesen Sie sie wie oben beschrieben aus ErrorCode oder aus dem ersten Token von Values.detail.

Sitzungs-Capabilities#

CapabilityKlassifizierungStabilitätArtAPI-RouteCLI-RouteVerändertValidierung
session.planPublicStableBetaSTABLE_BETAActionPlanSessionAsync/plan, /validateneinRUNTIME_PASS (jede validierte Sitzung beginnt mit einem Plan)
session.startPublicStableBetaSTABLE_BETAActionStartSessionAsyncStartflagsDateisystem (Transaktion), ProzessRUNTIME_PASS (NEW_MAP Grundorf, SAVED_SITUATION Berlin-Spandau)
session.statusPublicStableBetaSTABLE_BETAReadGetStatusAsyncsession statusneinRUNTIME_PASS
session.stopPublicStableBetaSTABLE_BETAActionStopAsync / CloseAsyncsession stop, Tray, Ctrl+CProzess (TerminateProcess), Dateisystem (Wiederherstellung)RUNTIME_PASS; kooperatives Herunterfahren nicht implementiert
session.recoverPublicStableBetaSTABLE_BETAActionRecoverPendingAsync/recovery-status, /recoverDateisystem (Wiederherstellung)RUNTIME_PASS: Recovery (Absturzwiederherstellung) nach frühem Beenden (RV-008), beendeter Eigentümer plus frühe Recovery beim nächsten Start (S05), fehlgeschlagene Wiederherstellung und anschließend /recover (F01), Ablehnung unter der Lease, mit einem verwaisten OMSI und im Fenster vor der PID (S04, S04b)
events.readPublicExperimentalEXPERIMENTALEventGetStatusAsync().RuntimeEvents, Steuerung session.eventsevents read, events watchneinRUNTIME_PASS; der Telemetrie-Slot mit jeweils neuestem Wert kann Ereignisschübe verlieren

Runtime-Capabilities (Registry-Einträge)#

CapabilityKlassifizierungStabilitätArtOperationenHandlesValidierung
time.readPublicStableBetaSTABLE_BETAReadtime.readRUNTIME_PASS (Sitzung e5454061)
time.setPublicExperimentalEXPERIMENTALWritetime.setRUNTIME_PASS (Schreiben, SetTime, Rücklesen)
weather.readPublicStableBetaSTABLE_BETAReadweather.readRUNTIME_PASS
weather.setUnsupportedUNAVAILABLEWriteweather.setRUNTIME_REJECTED: immer OL_E_RUNTIME_SETTING_NOT_PERSISTENT (Sitzung 50a1f1ec)
weather.actual.readPublicExperimentalEXPERIMENTALReadweather.actual.readRUNTIME_PASS
map.readPublicStableBetaSTABLE_BETAReadmap.readRUNTIME_PASS: auf dem korrigierten Karten-Slot erneut validiert (Sitzung 9dd62626-94c6-4cd7-bb6f-0288327696f4, Grundorf) und in der Dokumentationserfassung auf Berlin-Spandau gelesen
camera.readPublicStableBetaSTABLE_BETAReadcamera.readRUNTIME_PASS
camera.setPublicExperimentalEXPERIMENTALWritecamera.setRUNTIME_PASS (FOV schreiben und zurücklesen)
camera.lockPublicExperimentalEXPERIMENTALActioncamera.lock, camera.unlockRUNTIME_PASS mit einem PlayerVehicle aus einer gespeicherten Situation (Runtime-Abschluss CAM01, Familien 0, 2 und 1 mit Rücklesen, danach Entsperren). Die eigene RuntimeValidation-Zeichenfolge der Registry lautet weiterhin STATICALLY_VALIDATED (Selbstauskunft des Produkts, in diesem Release nicht aktualisiert)
vehicles.listPublicStableBetaSTABLE_BETAReadroad-vehicles.listRoadVehicleRUNTIME_PASS
vehicles.getPublicStableBetaSTABLE_BETAReadroad-vehicle.readRoadVehicleRUNTIME_PASS; für die Erkennung veralteter Handles nach natürlichem Entfernen (RV-002) gibt es keinen sicheren Runtime-Erzeuger, sie ist offline validiert
vehicles.summaryPublicStableBetaSTABLE_BETAReadroad-vehicles.readRUNTIME_PASS
vehicles.spawnPublicExperimentalEXPERIMENTALActionroad-vehicles.spawnRoadVehicleRUNTIME_PASS RV-003 (Sitzung 5f641c8d, 2 -> 3, Handle rv-000003)
vehicles.place-randomPublicExperimentalEXPERIMENTALActionroad-vehicles.place-randomRUNTIME_PASS (Sammlung 2 -> 4)
player.readPublicStableBetaSTABLE_BETAReadplayer-vehicle.readRoadVehicleRUNTIME_PASS: present=false bei einem Headless-Start, der vollständige Snapshot mit einer gespeicherten Situation
humans.listPublicExperimentalEXPERIMENTALReadhumans.listHumanRUNTIME_PASS
humans.getPublicExperimentalEXPERIMENTALReadhuman.readHumanRUNTIME_PASS
humans.summaryPublicExperimentalEXPERIMENTALReadhumans.readRUNTIME_PASS
timetable.readPublicStableBetaSTABLE_BETAReadtimetable.read und die Familie timetable.*.list / timetable.logs.readRUNTIME_PASS (Fahrteinträge: 91 Datensätze auf Grundorf)
scripts.numericPublicExperimentalEXPERIMENTALWritevehicle.variables.list, vehicle.variable.get, vehicle.variable.setRoadVehicleRUNTIME_PASS (Refresh_Strings 0 -> 1 -> 0)
scripts.string.readPublicExperimentalEXPERIMENTALReadvehicle.string-variables.list, vehicle.string-variable.getRoadVehicleRUNTIME_PASS (nur Lesen; Schreiben BI-004)
constantsPublicStableBetaSTABLE_BETAReadvehicle.constants.list, vehicle.constant.getRoadVehicleRUNTIME_PASS
curvesPublicStableBetaSTABLE_BETAReadvehicle.curves.list, vehicle.curve.evaluateRoadVehicleRUNTIME_PASS
hof.readPublicStableBetaSTABLE_BETAReadvehicle.hofs.readRoadVehicleRUNTIME_PASS
drivers.readPublicExperimentalEXPERIMENTALReaddrivers.readRUNTIME_PASS
tickets.readPublicExperimentalEXPERIMENTALReadtickets.readRUNTIME_PASS
d3d.texturePublicExperimentalEXPERIMENTALActiond3d.status, d3d.texture.create, d3d.texture.describe, d3d.texture.update, d3d.texture.releaseD3DTextureRUNTIME_PASS für create/describe/update/release, Ablehnung freigegebener und veralteter Handles über Neuerstellung und Sitzungen hinweg (H02) sowie Geräte-Reset mit Invalidierung der Generation (RV-007, D01; lost selbst wurde nicht erzeugt)
internal.make-basicInternalOnlyINTERNALActioninternal.road-vehicles.make-basicNicht öffentlich. ExecuteRuntimeAsync lehnt sie vor jeder Sitzungssuche mit OL_E_RUNTIME_OPERATION_UNKNOWN ab; die CLI hat keine Route dafür.
calendar.set-actual-date-timeUnsupportedUNAVAILABLEWritekeineUNSUPPORTED (BI-002)
player.assign-headlessUnsupportedUNAVAILABLEActionkeineUNSUPPORTED (BI-007)

internal.road-vehicles.make-basic ist INTERNAL: Sie existiert im Plugin für Forschungszwecke (sie gibt eine native Adresse zurück) und wird an der API-Grenze und von der lokalen Steuerungsebene (Control Plane) abgelehnt, die beide den Operationsnamen zuerst gegen PublicRuntimeOperationIds prüfen.

Öffentliche Runtime-Operationen#

Dies ist die exakte Liste der Operations-IDs, die ein öffentliches Frontend weiterleiten darf (PublicCapabilityRegistry.PublicRuntimeOperationIds). Jede davon erfordert SessionState.Running; keine wird im Journal erfasst oder wiederhergestellt. Erforderliche Argumente werden von der Registry erzwungen, bevor die Mailbox verwendet wird (OL_E_RUNTIME_ARGUMENT_REQUIRED); optionale Argumente werden vom Plugin validiert. Gemeinsame Fehlercodes aller Operationen: OL_E_RUNTIME_OPERATION_UNKNOWN (nicht in dieser Liste), OL_E_SESSION_NOT_RUNNING, OL_E_RUNTIME_SESSION_MISMATCH, OL_E_RUNTIME_CHANNEL_BUSY, OL_E_RUNTIME_CHANNEL_CLOSED, OL_E_RUNTIME_REQUEST_TIMEOUT, OL_E_RUNTIME_REQUEST_ID_REUSED, OL_E_RUNTIME_RESPONSE_INVALID, OL_E_RUNTIME_RESPONSE_TOO_LARGE, OL_E_RUNTIME_OPERATION_UNAVAILABLE (das Plugin hat keine Implementierung), OL_E_RUNTIME_OPERATION_FAILED (unerwartete Ausnahme im Prozess; Werte detail und exception).

Zeit#

OperationArtArgumenteErgebnisschlüsselFehler
time.readReadkeinehour, minute, second, day, month, year
time.setWriteoptional hour (0..23), minute (0..59), second (0..59.999, Dezimalzahl); mindestens einesdie time.read-Schlüssel nach dem profilierten SetTimeOL_E_RUNTIME_ARGUMENT_REQUIRED, OL_E_RUNTIME_VALUE_OUT_OF_RANGE, OL_E_TIME_APPLY_FAILED

Wetter#

OperationArtArgumenteErgebnisschlüsselFehler
weather.readReadkeinefog_density, lightness, primary_light_factor, secondary_light_factor, ambient_light_factor, cloud_type, cloud_transparency, precipitation_set, wet_ground, wind_speed, wind_direction, relative_humidity, absolute_humidity, temperature, dew_point, pressure, precipitation, precipitation_rate
weather.setWritebeliebigkeineImmer OL_E_RUNTIME_SETTING_NOT_PERSISTENT (leere Argumente: OL_E_RUNTIME_ARGUMENT_REQUIRED). OMSI überschreibt beide profilierten Windkandidaten bei seinem nächsten Wetter-Tick.
weather.actual.readReadkeineactive, icao, last_downloaded, invalid_icao, counter, process

Karte#

OperationArtArgumenteErgebnisschlüsselFehler
map.readReadkeineloaded, loaded_tiles, left_hand_traffic, name, filename, friendly_name, description, max_speed, year_start, year_end

Kamera#

OperationArtArgumenteErgebnisschlüsselFehler
camera.readReadkeinefamily (0 Fahrer, 1 Fahrgast, 2 Außen, 3 Karte), name, field_of_view, normal_field_of_view, distance
camera.setWriteoptional family (0..3), field_of_view (10..170); mindestens einesdie camera.read-SchlüsselOL_E_RUNTIME_ARGUMENT_REQUIRED, OL_E_RUNTIME_VALUE_OUT_OF_RANGE
camera.lockActionerforderlich family (0..3); optional preset (0..255, nur mit Familie 0 oder 1)locked (true), family, preset, head_look (preserved), field_of_view (preserved)OL_E_RUNTIME_ARGUMENT_REQUIRED, OL_E_RUNTIME_VALUE_OUT_OF_RANGE, OL_E_CAMERA_PRESET_FAMILY_UNSUPPORTED, OL_E_RUNTIME_PLAYER_VEHICLE_UNAVAILABLE. Die Richtlinie wird alle 100 ms erneut angewendet, bis camera.unlock erfolgt; eine fehlschlagende erneute Anwendung löst das Ereignis camera.lock.degraded einmal pro unterschiedlichem Fehler aus.
camera.unlockActionkeinelocked (false)

Straßenfahrzeuge und Spieler#

OperationArtArgumenteErgebnisschlüsselFehler
road-vehicles.readReadkeinecount, ai_collection, player_index (OMSIs roher Spielerfahrzeug-Index, so gemeldet wie gelesen; verwenden Sie present aus player-vehicle.read, um zu erfahren, ob ein Spielerfahrzeug existiert)
road-vehicles.listReadkeinecount, vehicle.<n>.handle (rv-NNNNNN)
road-vehicle.readReaderforderlich handlehandle, runtime_index, tile, marked_for_killing, traffic_type, position_x, position_y, position_z, rotation_x, rotation_y, rotation_z, rotation_w, steering, tacho, ground_speed, kilometres, throttle, brake, clutch, ai_enabled, ai_mode, ai_light, ai_interior_light, ai_indicator_left, ai_indicator_right, ai_brake_lightOL_E_RUNTIME_OBJECT_HANDLE_REQUIRED, OL_E_RUNTIME_OBJECT_HANDLE_STALE
player-vehicle.readReadkeinepresent (false, wenn OMSI kein Spielerfahrzeug hat); bei true: player_index plus jeder road-vehicle.read-Schlüssel
road-vehicles.spawnActionerforderlich model (kanonisch Vehicles\...\*.bus, höchstens 240 Zeichen, kein .., muss unterhalb der Installation existieren)bus, created_handle, before_count, after_count, delta_count, raw_native_return, identity_validationOL_E_RUNTIME_ARGUMENT_REQUIRED, OL_E_RUNTIME_BUS_IDENTITY_INVALID, OL_E_MAKEVEHICLE_BUS_NOT_FOUND, OL_E_MAKEVEHICLE_DELTA_ZERO, OL_E_MAKEVEHICLE_DELTA_MULTIPLE, OL_E_MAKEVEHICLE_NATIVE_FAILED, OL_E_RUNTIME_CREATED_OBJECT_INVALID, OL_E_RUNTIME_CREATED_OBJECT_NOT_IN_COLLECTION. Weist das PlayerVehicle nicht zu. Dauert mehrere Sekunden; verwenden Sie das Client-Timeout von 30 s.
road-vehicles.place-randomActionoptional ai_type (0..255, Standard 0), group (0..65535, Standard 1), type (-1..65535, Standard -1), scheduled (0..1, Standard 0), tour (0..65535, Standard 0), line (0..65535, Standard 0)raw_return, before_count, after_count, delta_count, identity_validation (native-placement-return-is-diagnostic-only)OL_E_RUNTIME_VALUE_OUT_OF_RANGE, OL_E_PLACE_RANDOM_BUS_FAILED

Menschen#

OperationArtArgumenteErgebnisschlüsselFehler
humans.readReadkeinecount
humans.listReadkeinecount, human.<n>.handle (hb-NNNNNN)
human.readReaderforderlich handlehandle, runtime_index, human_index, tile, marked_for_killing, collision_type, position_x, position_y, position_z, target_x, target_y, target_z, target_station, pre_target_station, departure, enter_bus_at, seat_bus, seat_station, ticket_type, ticket_index, ticket_ready, state, speed, bus_index, station, ai_mode, ai_mode_ex, ai_sub_mode, collision_stateOL_E_RUNTIME_OBJECT_HANDLE_REQUIRED, OL_E_RUNTIME_OBJECT_HANDLE_STALE

Fahrplan, Fahrer, Fahrscheine#

Ergebnisse begrenzter Listen enthalten count (alle Datensätze in OMSI), returned_count (Zeilen in dieser Antwort) und truncated (true, wenn Zeilen ausgelassen wurden). Die Zeilen sind immer die ersten returned_count Datensätze, nummeriert ab 0. Die Zeilenlimits betragen 128 für Tracks, Trips, Linien, RV-Dateien, Haltestellen, Stationsverbindungen, Umläufe und Profile, 256 für Umlaufeinträge und 512 für Fahrteinträge. Wenn die nach diesem Limit zulässigen Zeilen die Mailbox von 64 KiB dennoch überschreiten (z. B. Fahrteinträge und Umlaufeinträge auf Berlin-Spandau), verwirft das Plugin die letzten Zeilen, bis die Antwort passt, und meldet das kleinere returned_count mit truncated=true (Dokumentationsaudit BUG-05; vor der Korrektur schlugen diese beiden Listen mit OL_E_RUNTIME_RESPONSE_TOO_LARGE fehl). timetable.logs.read ist keine begrenzte Liste: Sie gibt jeden Log-Eintrag zurück, und ein Log mit einigen hundert Einträgen überschreitet die Mailbox und schlägt mit OL_E_RUNTIME_RESPONSE_TOO_LARGE fehl.

OperationArtArgumenteErgebnisschlüsselFehler
timetable.readReadkeineinvalid (true/false) sowie die Datensatzanzahlen tracks, trips, bus_stops, station_links, lines, rv_files
timetable.tracks.listReadkeinecount, returned_count, truncated; track.<n>.filename, track.<n>.path, track.<n>.entries, track.<n>.length
timetable.trips.listReadkeinecount, returned_count, truncated; trip.<n>.filename, trip.<n>.chrono_origin, trip.<n>.target, trip.<n>.line, trip.<n>.track_index, trip.<n>.track_name, trip.<n>.bus_stops, trip.<n>.profiles, trip.<n>.train_reverse, trip.<n>.invalid
timetable.lines.listReadkeinecount, returned_count, truncated; line.<n>.name, line.<n>.chrono_origin, line.<n>.priority, line.<n>.tours, line.<n>.user_allowed
timetable.rv-files.listReadkeinecount, returned_count, truncated; rv_file.<n>.line, rv_file.<n>.number_tours, rv_file.<n>.start_date_rel_2000, rv_file.<n>.end_date_rel_2000, rv_file.<n>.type_line_files, rv_file.<n>.type_line_probability, rv_file.<n>.type_tours
timetable.track-entries.listReadkeinecount, returned_count, truncated; track_entry.<n>.track_index, track_entry.<n>.id, track_entry.<n>.path_index_on_object, track_entry.<n>.path_tile, track_entry.<n>.path_index, track_entry.<n>.relative_distance, track_entry.<n>.distance, track_entry.<n>.valid, track_entry.<n>.path_order_check, track_entry.<n>.allowed_fstrn, track_entry.<n>.chrono_origin, track_entry.<n>.bad_chronos
timetable.bus-stops.listReadkeinecount, returned_count, truncated; bus_stop.<n>.name, bus_stop.<n>.supplement, bus_stop.<n>.tile, bus_stop.<n>.id, bus_stop.<n>.parent_id, bus_stop.<n>.preset_alighting, bus_stop.<n>.index, bus_stop.<n>.starting_links, bus_stop.<n>.ending_links, bus_stop.<n>.chrono_origin
timetable.station-links.listReadkeinecount, returned_count, truncated; station_link.<n>.length, station_link.<n>.start_bus_stop_id, station_link.<n>.end_bus_stop_id, station_link.<n>.start_bus_stop, station_link.<n>.end_bus_stop, station_link.<n>.chrono_origin, station_link.<n>.valid, station_link.<n>.visible, station_link.<n>.track_entries, station_link.<n>.start_track_entry, station_link.<n>.end_track_entry
timetable.tours.listReadkeinecount, returned_count, truncated; tour.<n>.line_index, tour.<n>.name, tour.<n>.ai_group, tour.<n>.ai_group_index, tour.<n>.ai_type, tour.<n>.completed_day, tour.<n>.entries, tour.<n>.has_normal_vehicle, tour.<n>.invalid, tour.<n>.vehicle_indices, tour.<n>.vehicle_reservations
timetable.profiles.listReadkeinecount, returned_count, truncated; profile.<n>.trip_index, profile.<n>.name, profile.<n>.service_trip, profile.<n>.stop_times, profile.<n>.total_time, profile.<n>.track_entry_times
timetable.tour-entries.listReadkeinecount, returned_count, truncated; tour_entry.<n>.line_index, tour_entry.<n>.tour_index, tour_entry.<n>.trip, tour_entry.<n>.trip_index, tour_entry.<n>.profile_index, tour_entry.<n>.start_time, tour_entry.<n>.end_time, tour_entry.<n>.smooth_transition
timetable.logs.readReadkeinecount; log.<n>.bus_stop, log.<n>.estimated_arrival, log.<n>.estimated_departure, log.<n>.actual_arrival, log.<n>.actual_departure, log.<n>.arrival_ok, log.<n>.departure_ok (alle Einträge; nicht begrenzt)OL_E_RUNTIME_RESPONSE_TOO_LARGE bei einem langen Log
drivers.readReadkeinecount, selected_index; driver.<n>.filename, driver.<n>.name, driver.<n>.gender, driver.<n>.bus_stops, driver.<n>.crashes, driver.<n>.passengers, driver.<n>.tickets, driver.<n>.cash
tickets.readReadkeinefilename, voice_path, stamper_factor, buy_factor, chattiness, whinge_factor, count; ticket.<n>.name, ticket.<n>.display_name, ticket.<n>.value, ticket.<n>.maximum_stations, ticket.<n>.day_ticket

Fahrzeugskripte, Konstanten, Kurven, HOF (an ein Handle gebunden)#

OperationArtArgumenteErgebnisschlüsselFehler
vehicle.variables.listReaderforderlich handlehandle, count, returned_count, truncated (Limit 512), name.<n>OL_E_RUNTIME_OBJECT_HANDLE_REQUIRED, OL_E_RUNTIME_OBJECT_HANDLE_STALE, OL_E_RUNTIME_SCRIPT_OBJECT_UNAVAILABLE
vehicle.variable.getReaderforderlich handle, namehandle, name, valueOL_E_RUNTIME_VARIABLE_NOT_FOUND, OL_E_RUNTIME_VARIABLE_UNAVAILABLE
vehicle.variable.setWriteerforderlich handle, name, value (endlicher Float)handle, name, requested_value, value (zurückgelesen)OL_E_RUNTIME_VALUE_OUT_OF_RANGE, OL_E_RUNTIME_VARIABLE_NOT_FOUND
vehicle.string-variables.listReaderforderlich handlehandle, count, returned_count, truncated (Limit 512), name.<n>OL_E_RUNTIME_OBJECT_HANDLE_REQUIRED, OL_E_RUNTIME_OBJECT_HANDLE_STALE, OL_E_RUNTIME_SCRIPT_OBJECT_UNAVAILABLE
vehicle.string-variable.getReaderforderlich handle, namehandle, name, valueOL_E_RUNTIME_STRING_VARIABLE_NOT_FOUND
vehicle.constants.listReaderforderlich handlehandle, count, name.<n>OL_E_RUNTIME_CONSTANTS_UNAVAILABLE
vehicle.constant.getReaderforderlich handle, namehandle, name, valueOL_E_RUNTIME_CONSTANT_NOT_FOUND
vehicle.curves.listReaderforderlich handlehandle, count, name.<n>
vehicle.curve.evaluateReaderforderlich handle, name, x (endlicher Float; ein fehlendes oder nicht numerisches x ergibt OL_E_RUNTIME_ARGUMENT_REQUIRED)handle, name, x, value (lineare Interpolation)OL_E_RUNTIME_CURVE_NOT_FOUND, OL_E_RUNTIME_CURVE_EMPTY, OL_E_RUNTIME_CURVE_INVALID, OL_E_RUNTIME_CURVE_DEGENERATE
vehicle.hofs.readReaderforderlich handlehandle, count, hof.<n>.name, hof.<n>.service_tripOL_E_RUNTIME_HOF_UNAVAILABLE

Direct3D 9#

D3D-Operationen werden über die native Bridge auf OMSIs Haupt-/Render-Thread ausgeführt. Textur-Handles haben die Form d3dtex-<sessionId N>-<16 hex digits>.

OperationArtArgumenteErgebnisschlüsselFehler
d3d.statusReadkeineavailable, native_status, query_interface_hresult, cooperative_level_hresult, execution_thread_id, owned_device_references, state (NOT_READY, READY, LOST, RESETTING, STOPPING, STOPPED), transition, generation, live_textures, reset_hook_installed, last_reset_thread_id, binding
d3d.texture.createActionerforderlich width (1..4096), height (1..4096), format (A8R8G8B8, X8R8G8B8, R5G6B5, X1R5G5B5, A1R5G5B5, A4R4G4B4, A8, L8, A8L8); optional levels (0..16, Standard 1)handle, state (LIVE, RELEASED, STALE), device_state, generation, width, height, format, levels, level, level_width, level_height, hresult, execution_thread_idOL_E_D3D_INVALID_ARGUMENT, OL_E_D3D_INVALID_TEXTURE_FORMAT, OL_E_D3D_NOT_READY, OL_E_D3D_DEVICE_LOST, OL_E_D3D_RESET_IN_PROGRESS, OL_E_D3D_NATIVE_CALL_FAILED
d3d.texture.describeReaderforderlich handle; optional level (0..15, Standard 0)die 13 d3d.texture.create-Schlüssel für die angeforderte EbeneOL_E_D3D_STALE_RESOURCE_HANDLE, OL_E_D3D_RESOURCE_RELEASED sowie die Fehler von create
d3d.texture.updateActionerforderlich handle, width (1..4096), height (1..4096), pixels_base64 (dekodiert höchstens 48 KiB); optional level (0..15, Standard 0), x (0..4095, Standard 0), y (0..4095, Standard 0)die 13 d3d.texture.create-Schlüssel nach der AktualisierungOL_E_D3D_INVALID_PIXEL_BUFFER sowie die Fehler von describe
d3d.texture.releaseActionerforderlich handledie 13 d3d.texture.create-Schlüssel mit state = RELEASEDOL_E_D3D_RESOURCE_RELEASED bei wiederholter Freigabe, OL_E_D3D_STALE_RESOURCE_HANDLE

Fehlgeschlagene D3D-Operationen geben die Werte detail und native_status zurück. Die Erweiterungsmethoden von D3DRuntimeApi (GetD3DStatusAsync, CreateD3DTextureAsync, DescribeD3DTextureAsync, UpdateD3DTextureAsync, ReleaseD3DTextureAsync) kapseln diese Operationen für API-Nutzer.

GetCapabilitiesAsync-Namen#

IOmsiLaunch.GetCapabilitiesAsync(InstallationSpec) gibt eine statische Liste von Capability(Name, Available, EvidenceState, Reason)-Datensätzen zurück, die die Sicht des Hosts auf die Installation beschreiben. Diese Namen bilden ein eigenes, gröberes Vokabular als die obigen Registry-IDs: Die Registry ist der Vertrag für Operationen, die Capability-Liste ist eine maschinenlesbare Zusammenfassung für Integratoren. Die Beziehung ist in der letzten Spalte angegeben.

NameVerfügbarNachweisBeziehung
runtime.current-windows-x64plattformabhängigSTATICALLY_VALIDATEDKompatibilität
runtime.command-channeltrueSTATICALLY_VALIDATEDRuntime-Mailbox
runtime.time.read, runtime.time.writetrueRUNTIME_VALIDATEDtime.read, time.set
runtime.time.actual-date-time.writefalseRELEASE_IF_CLOSEDcalendar.set-actual-date-time
runtime.map.readtrueRUNTIME_VALIDATEDmap.read
runtime.weather.read, runtime.weather.actual.readtrueRUNTIME_VALIDATEDweather.read, weather.actual.read
runtime.weather.writefalseRUNTIME_PARTIALweather.set (abgelehnt)
runtime.camera.read, runtime.camera.writetrueRUNTIME_VALIDATEDcamera.read, camera.set
runtime.d3d.status, runtime.d3d.texture.create, runtime.d3d.texture.update, runtime.d3d.texture.describe, runtime.d3d.texture.releasetrueRUNTIME_VALIDATEDd3d.*
runtime.d3d.lifecycle.resettrueIMPLEMENTED_NOT_RUNTIME_VALIDATEDRV-007. Die Liste ist ein festes, selbst gemeldetes Verzeichnis: Dieser Eintrag wurde nicht aktualisiert, nachdem die Runde des Runtime-Abschlusses die Übergänge resetting/restored beobachtet hatte (D01); den Nachweis finden Sie unter Status der Runtime-Validierung
runtime.road-vehicles.read, runtime.road-vehicles.spawn, runtime.road-vehicles.place-randomtrueRUNTIME_VALIDATEDroad-vehicles.*
runtime.vehicle.variable.writetrueRUNTIME_VALIDATEDvehicle.variable.set
runtime.humans.read, runtime.timetable.read, runtime.timetable.track-entries.readtrueRUNTIME_VALIDATEDhumans.*, timetable.*
world.new-map, world.presented-entrypoint, world.saved-situationtrueRUNTIME_VALIDATEDWeltmodi von session.start
world.entrypoint-identityfalseRUNTIME_PARTIALBI-001
world.last-map-statefalseUNSUPPORTED_FOR_CURRENT_PROFILELastMapState (/last)
world.date.explicit, world.date.system, world.time.explicit, world.time.systemfalseSTATICALLY_PARTIAL/date, /time, /year; werden sie angefordert, ist der Plan nicht ausführbar
weather.preset, weather.icao, weather.real-currentfalseSTATICALLY_PARTIAL/weather*; werden sie angefordert, ist der Plan nicht ausführbar
player-vehicle.model, player-vehicle.repaint, player-vehicle.hof, player-vehicle.fleet-number, player-vehicle.registrationfalseSTATICALLY_PARTIAL/vehicle und zugehörige Flags; werden sie angefordert, ist der Plan nicht ausführbar
configuration.options.semantictrueSTATICALLY_VALIDATED/set, Profil-settings (RV-005 Runtime)
input.keyboard.patch, input.controller.active-ffscaletrueSTATICALLY_VALIDATEDDokumentparser existieren; InputSpec wird von einer Sitzung nicht angewendet (BI-005)
input.controller.axis-buttonsfalseSTATICALLY_PARTIALBI-005
content.maps, content.situations, content.vehicles, content.repaints, content.hofs, content.fleet-registration-sourcestrueSTATICALLY_VALIDATEDDiscoverAsync, /list

Der Planer meldet zusätzlich Capabilities pro Plan in SessionPlan.RequiredCapabilities und SessionPlan.UnsupportedRequestedFeatures (runtime.current-windows-x64, transaction.exact-restore, omsi.profile.OMSI23004, world.new-map, world.presented-entrypoint, world.entrypoint-identity, world.saved-situation, boot.headless-start, internet-textures.disabled, world.explicit-date, world.explicit-time, world.explicit-year, weather, player-vehicle.*, input.keyboard, input.controller, content.*).

Bekannte Einschränkungen#

  • Handles sind an die Sitzung gebunden; die Wiederverwendung einer Adresse wird über einen Objekt-Fingerabdruck erkannt (VMT plus Definitionszeiger bei Fahrzeugen, VMT plus Human-Index bei Menschen) und als OL_E_RUNTIME_OBJECT_HANDLE_STALE gemeldet. Verbleibender blinder Fleck: Ein Objekt derselben Klasse und derselben Definition, das zwischen zwei Listenlesevorgängen an derselben Adresse neu erzeugt wird, ist vom ursprünglichen Objekt nicht zu unterscheiden.
  • Ergebnisse sind auf die Mailbox von 64 KiB begrenzt; begrenzte Listen werden mit truncated=true gekürzt; timetable.logs.read ist nicht begrenzt und kann mit OL_E_RUNTIME_RESPONSE_TOO_LARGE fehlschlagen.
  • Kein kachelübergreifendes Versetzen von Fahrzeugen, kein Schreiben von String-Variablen, kein Schreiben des Kalenders, kein Schreiben des Wetters, keine Headless-Zuweisung des PlayerVehicle. Siehe bekannte Einschränkungen.