Możliwości

Dokumentacja wersji v0.1.0-beta.3Zobacz źródło na GitHubie

Tłumaczenie oryginalnej strony w języku angielskim dla OmsiLaunch 0.1.0-beta3. Wiążąca jest strona angielska: w razie rozbieżności obowiązują strona angielska i kod.

Jest to kanoniczny spis tego, co potrafi OmsiLaunch 0.1.0-beta3, opracowany na podstawie PublicCapabilityRegistry (src/OmsiLaunch.Api/PublicCapabilityRegistry.cs), implementacji runtime we wtyczce (src/OmsiLaunch.Plugin/CurrentRuntimeControl.cs i src/OmsiLaunch.Interop/OmsiRuntimeReaders.cs) oraz OmsiLaunchService.GetCapabilitiesAsync. Dla każdej możliwości (capability) podano klasyfikację, poziom stabilności stosowany w całej tej dokumentacji, informację, czy wymagana jest sesja w stanie Running, czy możliwość modyfikuje OMSI, argumenty i klucze wyniku, błędy oraz dowody weryfikacji w runtime. Sposób wywołania operacji (ścieżki poleceń CLI, koperta API, limity czasu, uchwyty) opisano w sterowaniu runtime; tabela dowodów znajduje się w stanie weryfikacji runtime.

Klasyfikacja i stabilność#

PublicCapabilityClassification ma cztery wartości. Odpowiadają one słownictwu stabilności w następujący sposób, z obniżeniem poziomu tam, gdzie dowody są niepełne:

KlasyfikacjaZnaczenieStabilność
PublicStableBetaPubliczna, objęta kontraktem Beta, zweryfikowana w runtimeSTABLE_BETA (obniżona do PARTIAL tam, gdzie to zaznaczono)
PublicExperimentalPubliczna, może się zmienić, zweryfikowana w runtime lub zweryfikowana statycznieEXPERIMENTAL (obniżona do PARTIAL tam, gdzie to zaznaczono)
InternalOnlyPrymityw badawczy; niedostępny przez publiczne API ani CLIINTERNAL
UnsupportedRozpoznawana na potrzeby diagnostyki, odrzucana lub nieobecnaUNAVAILABLE

PublicCapabilityKind rozróżnia Read, Write, Action i Event. Każda możliwość runtime wymaga sesji w stanie Running i dokładnie profilu Omsi23004_692EBFBF (RequiresSession / RequiresExactProfile w rejestrze); możliwości sesji, które tworzą sesję, wymagają dokładnego profilu, ale nie wymagają sesji.

Wyniki runtime są słownikami ciągów znaków. Klucze zaczynające się od internal_ lub kończące się na _address, _pointer albo _vmt są usuwane na granicy API (ScrubInternalValues) i nie zostały tu wymienione. Klucze wyniku w poniższych tabelach operacji są dokładnymi zestawami kluczy zwracanymi przez produkt: zostały przechwycone przez wykonanie każdej publicznej operacji w rzeczywistej sesji (przechwycenie dokumentacji w rundzie domknięcia runtime, sesja f51dcb59-a723-4570-b6c5-b61e628a7993, situations\Linie 5.osn; wiersze list zapisywane są jako <row>.<n>.<field>).

Sposób zgłaszania niepowodzenia operacji (CurrentRuntimeControl.Execute):

NiepowodzenieErrorCodeValues
Odrzucenie przez rejestr (nieznana operacja lub operacja internal.*, brak wymaganego argumentu)OL_E_RUNTIME_OPERATION_UNKNOWN, OL_E_RUNTIME_ARGUMENT_REQUIREDbrak
Celowe odrzucenie przez produkt (weather.set)konkretny kod (OL_E_RUNTIME_SETTING_NOT_PERSISTENT)detail (zdanie)
Niepowodzenie D3Dkonkretny kod OL_E_D3D_*detail, native_status
Każde inne niepowodzenie po stronie wtyczki (nieaktualny uchwyt, nieznana nazwa, wartość spoza zakresu, brak pojazdu gracza, ...)OL_E_RUNTIME_OPERATION_FAILEDdetail (zaczyna się od konkretnego kodu, na przykład OL_E_RUNTIME_OBJECT_HANDLE_STALE lub OL_E_RUNTIME_VALUE_OUT_OF_RANGE (Parameter 'minute')), exception (nazwa typu .NET)
Wynik, który nie mieści się w skrzynce 64 KiBOL_E_RUNTIME_RESPONSE_TOO_LARGE (listy ograniczone są zamiast tego skracane, patrz Rozkład jazdy, kierowcy, bilety)brak

Kolumna „Błędy” (Errors) każdej tabeli wymienia konkretne kody; należy je odczytywać z ErrorCode lub z pierwszego tokenu Values.detail, jak opisano powyżej.

Możliwości sesji#

MożliwośćKlasyfikacjaStabilnośćRodzajŚcieżka APIŚcieżka CLIModyfikujeWeryfikacja
session.planPublicStableBetaSTABLE_BETAActionPlanSessionAsync/plan, /validatenieRUNTIME_PASS (każda zweryfikowana sesja zaczyna się od planu)
session.startPublicStableBetaSTABLE_BETAActionStartSessionAsyncflagi uruchomieniasystem plików (transakcja), procesRUNTIME_PASS (NEW_MAP Grundorf, SAVED_SITUATION Berlin-Spandau)
session.statusPublicStableBetaSTABLE_BETAReadGetStatusAsyncsession statusnieRUNTIME_PASS
session.stopPublicStableBetaSTABLE_BETAActionStopAsync / CloseAsyncsession stop, obszar powiadomień, Ctrl+Cproces (TerminateProcess), system plików (przywracanie)RUNTIME_PASS; kooperacyjne zamykanie nie jest zaimplementowane
session.recoverPublicStableBetaSTABLE_BETAActionRecoverPendingAsync/recovery-status, /recoversystem plików (przywracanie)RUNTIME_PASS: odzyskiwanie po wczesnym zakończeniu (RV-008), zabity właściciel oraz wczesne odzyskiwanie przy następnym uruchomieniu (S05), nieudane przywracanie, a następnie /recover (F01), odmowa pod dzierżawą, przy osieroconym OMSI i w oknie przed PID (S04, S04b)
events.readPublicExperimentalEXPERIMENTALEventGetStatusAsync().RuntimeEvents, sterowanie session.eventsevents read, events watchnieRUNTIME_PASS; slot telemetrii przechowujący tylko najnowszą wartość może gubić serie zdarzeń

Możliwości runtime (wpisy rejestru)#

MożliwośćKlasyfikacjaStabilnośćRodzajOperacjeUchwytyWeryfikacja
time.readPublicStableBetaSTABLE_BETAReadtime.readRUNTIME_PASS (sesja e5454061)
time.setPublicExperimentalEXPERIMENTALWritetime.setRUNTIME_PASS (zapis, SetTime, odczyt kontrolny)
weather.readPublicStableBetaSTABLE_BETAReadweather.readRUNTIME_PASS
weather.setUnsupportedUNAVAILABLEWriteweather.setRUNTIME_REJECTED: zawsze OL_E_RUNTIME_SETTING_NOT_PERSISTENT (sesja 50a1f1ec)
weather.actual.readPublicExperimentalEXPERIMENTALReadweather.actual.readRUNTIME_PASS
map.readPublicStableBetaSTABLE_BETAReadmap.readRUNTIME_PASS: ponownie zweryfikowana na poprawionym slocie mapy (sesja 9dd62626-94c6-4cd7-bb6f-0288327696f4, Grundorf) i odczytana na Berlin-Spandau podczas przechwytywania dokumentacji
camera.readPublicStableBetaSTABLE_BETAReadcamera.readRUNTIME_PASS
camera.setPublicExperimentalEXPERIMENTALWritecamera.setRUNTIME_PASS (zapis FOV i odczyt kontrolny)
camera.lockPublicExperimentalEXPERIMENTALActioncamera.lock, camera.unlockRUNTIME_PASS z pojazdem PlayerVehicle z zapisanej sytuacji (domknięcie runtime CAM01, rodziny 0, 2 i 1 z odczytem kontrolnym, a następnie odblokowanie). Własny ciąg RuntimeValidation w rejestrze nadal brzmi STATICALLY_VALIDATED (samoopis produktu, niezaktualizowany w tym wydaniu)
vehicles.listPublicStableBetaSTABLE_BETAReadroad-vehicles.listRoadVehicleRUNTIME_PASS
vehicles.getPublicStableBetaSTABLE_BETAReadroad-vehicle.readRoadVehicleRUNTIME_PASS; wykrywanie nieaktualności po naturalnym usunięciu (RV-002) nie ma bezpiecznego źródła w runtime i jest zweryfikowane offline
vehicles.summaryPublicStableBetaSTABLE_BETAReadroad-vehicles.readRUNTIME_PASS
vehicles.spawnPublicExperimentalEXPERIMENTALActionroad-vehicles.spawnRoadVehicleRUNTIME_PASS RV-003 (sesja 5f641c8d, 2 -> 3, uchwyt rv-000003)
vehicles.place-randomPublicExperimentalEXPERIMENTALActionroad-vehicles.place-randomRUNTIME_PASS (kolekcja 2 -> 4)
player.readPublicStableBetaSTABLE_BETAReadplayer-vehicle.readRoadVehicleRUNTIME_PASS: present=false przy uruchomieniu bez pojazdu gracza (headless), pełna migawka przy zapisanej sytuacji
humans.listPublicExperimentalEXPERIMENTALReadhumans.listHumanRUNTIME_PASS
humans.getPublicExperimentalEXPERIMENTALReadhuman.readHumanRUNTIME_PASS
humans.summaryPublicExperimentalEXPERIMENTALReadhumans.readRUNTIME_PASS
timetable.readPublicStableBetaSTABLE_BETAReadtimetable.read oraz rodzina timetable.*.list / timetable.logs.readRUNTIME_PASS (wpisy trasy: 91 rekordów na 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 (tylko odczyt; zapisy 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 dla create/describe/update/release, odrzucania zwolnionych i nieaktualnych uchwytów po ponownym utworzeniu i między sesjami (H02) oraz resetu urządzenia z unieważnieniem generacji (RV-007, D01; sam stan lost nie został wywołany)
internal.make-basicInternalOnlyINTERNALActioninternal.road-vehicles.make-basicNiepubliczna. ExecuteRuntimeAsync odrzuca ją z OL_E_RUNTIME_OPERATION_UNKNOWN przed jakimkolwiek wyszukaniem sesji; CLI nie ma dla niej ścieżki polecenia.
calendar.set-actual-date-timeUnsupportedUNAVAILABLEWritebrakUNSUPPORTED (BI-002)
player.assign-headlessUnsupportedUNAVAILABLEActionbrakUNSUPPORTED (BI-007)

internal.road-vehicles.make-basic ma status INTERNAL: istnieje we wtyczce na potrzeby badań (zwraca adres natywny) i jest odrzucana na granicy API oraz przez lokalną płaszczyznę sterowania, które najpierw sprawdzają nazwę operacji względem PublicRuntimeOperationIds.

Publiczne operacje runtime#

Jest to dokładna lista identyfikatorów operacji, które publiczny frontend może przekazywać dalej (PublicCapabilityRegistry.PublicRuntimeOperationIds). Każda z nich wymaga SessionState.Running; żadna nie jest zapisywana w dzienniku ani przywracana. Wymagane argumenty są egzekwowane przez rejestr, zanim zostanie użyta skrzynka runtime (OL_E_RUNTIME_ARGUMENT_REQUIRED); argumenty opcjonalne weryfikuje wtyczka. Wspólne kody błędów dla wszystkich operacji: OL_E_RUNTIME_OPERATION_UNKNOWN (brak na tej liście), 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 (wtyczka nie ma implementacji), OL_E_RUNTIME_OPERATION_FAILED (nieoczekiwany wyjątek w procesie; wartości detail i exception).

Czas#

OperacjaRodzajArgumentyKlucze wynikuBłędy
time.readReadbrakhour, minute, second, day, month, year
time.setWriteopcjonalne hour (0..23), minute (0..59), second (0..59.999, dziesiętne); co najmniej jedenklucze time.read po profilowanym SetTimeOL_E_RUNTIME_ARGUMENT_REQUIRED, OL_E_RUNTIME_VALUE_OUT_OF_RANGE, OL_E_TIME_APPLY_FAILED

Pogoda#

OperacjaRodzajArgumentyKlucze wynikuBłędy
weather.readReadbrakfog_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.setWritedowolnebrakZawsze OL_E_RUNTIME_SETTING_NOT_PERSISTENT (puste argumenty: OL_E_RUNTIME_ARGUMENT_REQUIRED). OMSI nadpisuje obu profilowanych kandydatów wiatru przy następnym takcie pogody.
weather.actual.readReadbrakactive, icao, last_downloaded, invalid_icao, counter, process

Mapa#

OperacjaRodzajArgumentyKlucze wynikuBłędy
map.readReadbrakloaded, loaded_tiles, left_hand_traffic, name, filename, friendly_name, description, max_speed, year_start, year_end

Kamera#

OperacjaRodzajArgumentyKlucze wynikuBłędy
camera.readReadbrakfamily (0 kierowca, 1 pasażer, 2 zewnętrzna, 3 mapa), name, field_of_view, normal_field_of_view, distance
camera.setWriteopcjonalne family (0..3), field_of_view (10..170); co najmniej jedenklucze camera.readOL_E_RUNTIME_ARGUMENT_REQUIRED, OL_E_RUNTIME_VALUE_OUT_OF_RANGE
camera.lockActionwymagany family (0..3); opcjonalny preset (0..255, tylko z rodziną 0 lub 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. Polityka jest ponownie stosowana co 100 ms aż do camera.unlock; nieudane ponowne zastosowanie emituje zdarzenie camera.lock.degraded raz dla każdego odrębnego błędu.
camera.unlockActionbraklocked (false)

Pojazdy drogowe i gracz#

OperacjaRodzajArgumentyKlucze wynikuBłędy
road-vehicles.readReadbrakcount, ai_collection, player_index (surowy indeks pojazdu gracza w OMSI, zgłaszany tak, jak został odczytany; aby ustalić, czy pojazd gracza istnieje, należy użyć present z player-vehicle.read)
road-vehicles.listReadbrakcount, vehicle.<n>.handle (rv-NNNNNN)
road-vehicle.readReadwymagany 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.readReadbrakpresent (false, gdy OMSI nie ma pojazdu gracza); gdy true: player_index oraz każdy klucz road-vehicle.read
road-vehicles.spawnActionwymagany model (kanoniczna ścieżka Vehicles\...\*.bus, najwyżej 240 znaków, bez .., musi istnieć w obrębie instalacji)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. Nie przypisuje pojazdu PlayerVehicle. Trwa kilka sekund; należy użyć limitu czasu klienta 30 s.
road-vehicles.place-randomActionopcjonalne ai_type (0..255, domyślnie 0), group (0..65535, domyślnie 1), type (-1..65535, domyślnie -1), scheduled (0..1, domyślnie 0), tour (0..65535, domyślnie 0), line (0..65535, domyślnie 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

Postacie#

OperacjaRodzajArgumentyKlucze wynikuBłędy
humans.readReadbrakcount
humans.listReadbrakcount, human.<n>.handle (hb-NNNNNN)
human.readReadwymagany 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

Rozkład jazdy, kierowcy, bilety#

Wyniki list ograniczonych zawierają count (wszystkie rekordy w OMSI), returned_count (wiersze w tej odpowiedzi) i truncated (true, gdy część wierszy pominięto). Wiersze to zawsze pierwsze returned_count rekordów, numerowane od 0. Limity wierszy wynoszą 128 dla tras, kursów, linii, plików rv, przystanków, połączeń między przystankami, brygad i profili, 256 dla wpisów brygady i 512 dla wpisów trasy; gdy wiersze dopuszczone przez ten limit nadal przekraczają skrzynkę 64 KiB (na przykład wpisy trasy i wpisy brygady na Berlin-Spandau), wtyczka odrzuca ostatnie wiersze, aż odpowiedź się zmieści, i zgłasza mniejszą wartość returned_count z truncated=true (audyt dokumentacji BUG-05; przed poprawką te dwie listy kończyły się niepowodzeniem z OL_E_RUNTIME_RESPONSE_TOO_LARGE). timetable.logs.read nie jest listą ograniczoną: zwraca każdy wpis dziennika, a dziennik liczący kilkaset wpisów przekracza skrzynkę i kończy się niepowodzeniem z OL_E_RUNTIME_RESPONSE_TOO_LARGE.

OperacjaRodzajArgumentyKlucze wynikuBłędy
timetable.readReadbrakinvalid (true/false) oraz liczby rekordów tracks, trips, bus_stops, station_links, lines, rv_files
timetable.tracks.listReadbrakcount, returned_count, truncated; track.<n>.filename, track.<n>.path, track.<n>.entries, track.<n>.length
timetable.trips.listReadbrakcount, 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.listReadbrakcount, returned_count, truncated; line.<n>.name, line.<n>.chrono_origin, line.<n>.priority, line.<n>.tours, line.<n>.user_allowed
timetable.rv-files.listReadbrakcount, 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.listReadbrakcount, 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.listReadbrakcount, 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.listReadbrakcount, 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.listReadbrakcount, 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.listReadbrakcount, 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.listReadbrakcount, 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.readReadbrakcount; 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 (wszystkie wpisy; lista nieograniczona)OL_E_RUNTIME_RESPONSE_TOO_LARGE dla długiego dziennika
drivers.readReadbrakcount, 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.readReadbrakfilename, 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

Skrypty pojazdu, stałe, krzywe, HOF (w zakresie uchwytu)#

OperacjaRodzajArgumentyKlucze wynikuBłędy
vehicle.variables.listReadwymagany 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.getReadwymagane handle, namehandle, name, valueOL_E_RUNTIME_VARIABLE_NOT_FOUND, OL_E_RUNTIME_VARIABLE_UNAVAILABLE
vehicle.variable.setWritewymagane handle, name, value (skończona liczba zmiennoprzecinkowa)handle, name, requested_value, value (odczyt kontrolny)OL_E_RUNTIME_VALUE_OUT_OF_RANGE, OL_E_RUNTIME_VARIABLE_NOT_FOUND
vehicle.string-variables.listReadwymagany 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.getReadwymagane handle, namehandle, name, valueOL_E_RUNTIME_STRING_VARIABLE_NOT_FOUND
vehicle.constants.listReadwymagany handlehandle, count, name.<n>OL_E_RUNTIME_CONSTANTS_UNAVAILABLE
vehicle.constant.getReadwymagane handle, namehandle, name, valueOL_E_RUNTIME_CONSTANT_NOT_FOUND
vehicle.curves.listReadwymagany handlehandle, count, name.<n>
vehicle.curve.evaluateReadwymagane handle, name, x (skończona liczba zmiennoprzecinkowa; brakujący lub nienumeryczny x daje OL_E_RUNTIME_ARGUMENT_REQUIRED)handle, name, x, value (interpolacja liniowa)OL_E_RUNTIME_CURVE_NOT_FOUND, OL_E_RUNTIME_CURVE_EMPTY, OL_E_RUNTIME_CURVE_INVALID, OL_E_RUNTIME_CURVE_DEGENERATE
vehicle.hofs.readReadwymagany handlehandle, count, hof.<n>.name, hof.<n>.service_tripOL_E_RUNTIME_HOF_UNAVAILABLE

Direct3D 9#

Operacje D3D są wykonywane w wątku głównym/wątku renderowania OMSI za pośrednictwem mostka natywnego. Uchwyty tekstur mają postać d3dtex-<sessionId N>-<16 hex digits>.

OperacjaRodzajArgumentyKlucze wynikuBłędy
d3d.statusReadbrakavailable, 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.createActionwymagane width (1..4096), height (1..4096), format (A8R8G8B8, X8R8G8B8, R5G6B5, X1R5G5B5, A1R5G5B5, A4R4G4B4, A8, L8, A8L8); opcjonalny levels (0..16, domyślnie 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.describeReadwymagany handle; opcjonalny level (0..15, domyślnie 0)13 kluczy d3d.texture.create dla żądanego poziomuOL_E_D3D_STALE_RESOURCE_HANDLE, OL_E_D3D_RESOURCE_RELEASED oraz błędy create
d3d.texture.updateActionwymagane handle, width (1..4096), height (1..4096), pixels_base64 (najwyżej 48 KiB po zdekodowaniu); opcjonalne level (0..15, domyślnie 0), x (0..4095, domyślnie 0), y (0..4095, domyślnie 0)13 kluczy d3d.texture.create po aktualizacjiOL_E_D3D_INVALID_PIXEL_BUFFER oraz błędy describe
d3d.texture.releaseActionwymagany handle13 kluczy d3d.texture.create z state = RELEASEDOL_E_D3D_RESOURCE_RELEASED przy powtórnym zwolnieniu, OL_E_D3D_STALE_RESOURCE_HANDLE

Nieudane operacje D3D zwracają wartości detail i native_status. Metody rozszerzające D3DRuntimeApi (GetD3DStatusAsync, CreateD3DTextureAsync, DescribeD3DTextureAsync, UpdateD3DTextureAsync, ReleaseD3DTextureAsync) opakowują te operacje dla użytkowników API.

Nazwy GetCapabilitiesAsync#

IOmsiLaunch.GetCapabilitiesAsync(InstallationSpec) zwraca statyczną listę rekordów Capability(Name, Available, EvidenceState, Reason), opisujących instalację z perspektywy hosta. Te nazwy tworzą odrębne, mniej szczegółowe słownictwo niż powyższe identyfikatory rejestru; rejestr jest kontraktem dla operacji, a lista możliwości – odczytywalnym maszynowo podsumowaniem dla integratorów. Zależność między nimi podano w ostatniej kolumnie.

NazwaDostępnaDowodyZależność
runtime.current-windows-x64zależnie od platformySTATICALLY_VALIDATEDzgodność
runtime.command-channeltrueSTATICALLY_VALIDATEDskrzynka runtime
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 (odrzucana)
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. Lista jest stałym spisem zgłaszanym przez sam produkt: ten wpis nie został zaktualizowany po tym, jak runda domknięcia runtime zaobserwowała przejścia resetting/restored (D01); dowody opisano w stanie weryfikacji runtime
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_VALIDATEDtryby świata 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; zażądanie ich sprawia, że plan staje się niemożliwy do uruchomienia
weather.preset, weather.icao, weather.real-currentfalseSTATICALLY_PARTIAL/weather*; zażądanie ich sprawia, że plan staje się niemożliwy do uruchomienia
player-vehicle.model, player-vehicle.repaint, player-vehicle.hof, player-vehicle.fleet-number, player-vehicle.registrationfalseSTATICALLY_PARTIAL/vehicle i powiązane flagi; zażądanie ich sprawia, że plan staje się niemożliwy do uruchomienia
configuration.options.semantictrueSTATICALLY_VALIDATED/set, settings profilu (RV-005 w runtime)
input.keyboard.patch, input.controller.active-ffscaletrueSTATICALLY_VALIDATEDparsery dokumentów istnieją; InputSpec nie jest stosowany przez sesję (BI-005)
input.controller.axis-buttonsfalseSTATICALLY_PARTIALBI-005
content.maps, content.situations, content.vehicles, content.repaints, content.hofs, content.fleet-registration-sourcestrueSTATICALLY_VALIDATEDDiscoverAsync, /list

Planista dodatkowo zgłasza możliwości dla poszczególnych planów w SessionPlan.RequiredCapabilities i 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.*).

Znane ograniczenia#

  • Uchwyty mają zakres sesji; ponowne użycie adresu jest wykrywane na podstawie odcisku obiektu (VMT plus wskaźnik definicji dla pojazdów, VMT plus indeks postaci dla postaci) i zgłaszane jako OL_E_RUNTIME_OBJECT_HANDLE_STALE. Pozostały martwy punkt: obiektu tej samej klasy i tej samej definicji, ponownie utworzonego pod tym samym adresem między dwoma odczytami listy, nie da się odróżnić od oryginału.
  • Wyniki są ograniczone do skrzynki 64 KiB; listy ograniczone są obcinane z truncated=true; timetable.logs.read nie jest ograniczona i może zakończyć się niepowodzeniem z OL_E_RUNTIME_RESPONSE_TOO_LARGE.
  • Brak przenoszenia pojazdów między kafelkami, brak zapisu zmiennych tekstowych, brak zapisu kalendarza, brak zapisu pogody, brak przypisywania pojazdu PlayerVehicle w trybie headless. Patrz znane ograniczenia.