Znane ograniczenia

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.

Ta strona wymienia, na podstawie kodu, wszystko w OmsiLaunch 0.1.0-beta3, co jest UNAVAILABLE, PARTIAL lub stanowi zaakceptowane ryzyko, tak aby użytkownicy i integratorzy nie opierali się na zachowaniu, którego produkt nie zapewnia. Każdy wiersz podaje ograniczenie, jego stabilność, przyczynę oraz miejsce, w którym zostało szczegółowo udokumentowane. Dokumentacja angielska jest normatywna; zlokalizowane kopie w docs/localized/ nie są utrzymywane na tym samym poziomie i mogą być nieaktualne (zob. ostatnią sekcję).

Zgodność#

OgraniczenieStabilnośćSzczegóły
Obsługiwany jest wyłącznie Omsi23004_692EBFBF (692EBFBF...6243); skrót Steam LAA 7DAB063D...D759 znajduje się na liście dozwolonych; jego odcisk i plan zweryfikowano na kontrolowanej kopii, ale rozgrywka wymaga autentycznej instalacji Steam (obraz jest plikiem wykonywalnym Steam chronionym DRM)PARTIAL dla Steam LAAzgodność
Tylko Windows 10+ x64; brak Windows 7/8, brak XP, brak ARM64UNAVAILABLEzgodność
Wtyczka wymaga runtime .NET 6 w wersji x86 oprócz runtime x64 używanego przez kontrolerzgodność

Uruchamianie świata i opcje uruchomienia#

OgraniczenieStabilnośćSzczegóły
LAST_MAP_STATE (/last, WorldMode.LastMapState) nie jest zaimplementowany; nigdy nie jest podstawiany zastępczy plik .osn wybrany na podstawie znacznika czasuUNAVAILABLE (BI-006)Komunikat diagnostyczny planu OL_E_CAPABILITY_UNAVAILABLE
Jawna lub systemowa data, godzina i rok (/date, /time, /year, profil new.date/new.time/new.year, DateSpec/TimeSpec/YearSpec) są przenoszone w specyfikacji, ale sprawiają, że plan jest niemożliwy do uruchomienia; wtyczka odrzuca tryby inne niż UnsetUNAVAILABLE (STATICALLY_PARTIAL)profile sesji, launchspec
Ustawienie wstępne pogody, ICAO i bieżąca rzeczywista pogoda przy starcie (/weather*, new.weather)UNAVAILABLE (STATICALLY_PARTIAL, BI-003)jak wyżej
Model pojazdu gracza, malowanie, HOF, numer taborowy i numer rejestracyjny przy starcie (rodzina /vehicle, PlayerVehicleSpec) są rozwiązywane względem katalogu zawartości, ale nie są stosowane; ich żądanie sprawia, że plan jest niemożliwy do uruchomienia; deterministyczne przypisanie PlayerVehicle bez interakcji (headless) jest przyszłym rozszerzeniemUNAVAILABLE (BI-007)player.assign-headless w sekcji możliwości
Punkt wejścia według tożsamości (/entrypoint:<identity>) nie jest korelowany z listą prezentowaną przez OMSI; należy używać /entrypoint-indexPARTIAL (BI-001)możliwość planu world.entrypoint-identity = RUNTIME_PARTIAL
Nakładki (overlay) dokumentów klawiatury i kontrolerów (InputSpec, Environment.Keyboard, Environment.Controllers) są parsowane, ale nigdy nie są stosowane przez sesjęUNAVAILABLE (BI-005)możliwości input.*
LaunchBehaviorSpec.RestoreConfiguration i InstallationSpec.ExpectedExecutableSha256 są zadeklarowane, ale nigdy nie są odczytywaneUNAVAILABLElaunchspec
ShutdownTimeoutSeconds (/shutdown-timeout, profil shutdown-timeout) jest akceptowany i przenoszony, ale nie jest wykorzystywany przez nadzorcęACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTcykl życia sesji
/quiet i /serveACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTCLI
Flagi diagnostyki (/log, /logall, /omsi-logall, /verbose, /trace, /trace-process, /trace-plugin, /trace-native) wypełniają DiagnosticsSpec; widoczny efekt ogranicza się do śladu hosta w .omsilaunch\diagnosticsPARTIALCLI
/runtime-batch, /runtime-write-batch, /d3d-batch są harnessami walidacyjnymiINTERNALCLI

Zakończenie sesji i sterowanie procesem#

OgraniczenieStabilnośćSzczegóły
Zatrzymanie sesji jest wymuszonym zakończeniem: session.stop, „End session” w obszarze powiadomień, Ctrl+C i CloseAsync prowadzą do TerminateProcess. Procedura zamykania OMSI nie jest wykonywana, OMSI przy wyjściu nie zapisuje ponownie options.cfg ani swoich logów, a każdy niezapisany stan OMSI zostaje utracony. Jest to celowe: zapobiega nadpisaniu przywróconych plików przez OMSI.zgodnie z projektemcykl życia sesji
Kooperacyjne zamykanie przez WM_CLOSE z limitem czasu i awaryjnym wymuszonym zakończeniem nie jest zaimplementowaneUNAVAILABLE (decyzja produktowa, S-11; w rundzie domknięcia runtime OMSI zignorował WM_CLOSE wysłane do jego głównego okna)stan weryfikacji w runtime
Przy zamknięciu konsoli lub wylogowaniu właściciel ma budżet 4 s na zatrzymanie i przywrócenie; wszystko, co pozostanie, jest odzyskiwane z dziennika przy następnym uruchomieniuzamknięcie konsoli zweryfikowane w runtime; wylogowania nie sprawdzanotransakcje i odzyskiwanie

Transakcja, odzyskiwanie i dzierżawa#

OgraniczenieStabilnośćSzczegóły
Dzierżawa instalacji jest semaforem Local\: jeden właściciel na instalację w obrębie sesji logowania; nie jest egzekwowana między użytkownikami; nie jest zwalniana, dopóki inny proces trzyma uchwyt; dowolny proces tego samego użytkownika może zająć tę nazwęzaakceptowane ryzyko (S-18)transakcje i odzyskiwanie
Odzyskiwanie jest odrzucane (OL_E_INSTALLATION_BUSY), dopóki działa proces OMSI zapisany w dzienniku lub – w przypadku dziennika bez PID – jakikolwiek Omsi.exe z tego katalogu głównegozgodnie z projektemjak wyżej
Pierwotnie nieobecna ścieżka nakładki, której zawartość zmieniła się podczas sesji, blokuje przywracanie (OL_E_RECOVERY_ABSENT_OWNERSHIP_MISMATCH) do czasu jej sprawdzeniazgodnie z projektemjak wyżej
Dzienniki sprzed wprowadzenia odcisków własności może zamknąć tylko sesja z identycznymi zaplanowanymi bajtami (OL_E_RECOVERY_ABSENT_OWNERSHIP_UNVERIFIED)PARTIALjak wyżej
Przywracane są tylko ścieżki należące do sesji. Własne zapisy OMSI podczas sesji (options.cfg [last_map], gdy żadne ustawienie nie nakłada zmian na options.cfg, Texture\standard.ipr, pamięci podręczne, laststn.osn, profil kierowcy, logi) pozostają, tak jak po bezpośrednim uruchomieniu OMSIzgodnie z projektemtransakcje i odzyskiwanie
Usunięcie nieaktualnego closecheck przed sesją jest trwałe (zapisywane, nieprzywracane), gdy SuppressStaleClosecheckWarning ma wartość truezgodnie z projektemjak wyżej

Sterowanie runtime#

OgraniczenieStabilnośćSzczegóły
weather.set jest odrzucane (OL_E_RUNTIME_SETTING_NOT_PERSISTENT): OMSI nadpisuje obu profilowanych kandydatów wiatru przy następnym takcie pogodyUNAVAILABLEmożliwości
Zapisy kalendarza (SetActualDateTime)UNAVAILABLE (BI-002)calendar.set-actual-date-time
Zapisy zmiennych tekstowych, nazwane wyzwalacze, wyzwalacze dźwięku (własność zarządzanych ciągów Delphi)UNAVAILABLE (BI-004)scripts.string.read jest tylko do odczytu
Brak przenoszenia pojazdów, brak ponownego wiązania przestrzennego między kafelkami, brak bezpiecznego względem ODE uprawnienia do transformacji; pola pozycji są tylko do odczytuUNAVAILABLE (BI-008)road-vehicle.read
camera.lock / camera.unlock wymagają PlayerVehicle; uruchomienie NEW_MAP bez interakcji go nie zapewnia (zapewnia go zapisana sytuacja)zgodnie z projektem (BI-007)RV-004
Mutacje runtime (time.set, camera.set, camera.lock, vehicle.variable.set, spawn, place-random, tekstury D3D) nie są zapisywane w dzienniku ani przywracanezgodnie z projektemsterowanie runtime
Martwy punkt odcisku uchwytu: obiekt tej samej klasy i definicji utworzony ponownie pod tym samym adresem między dwoma odczytami listy nie jest wykrywany jako nieaktualny; czas życia przy naturalnym usunięciu (RV-002) nie ma bezpiecznego źródła w runtime i pozostaje tylko offlinePARTIALsterowanie runtime
Wyniki są ograniczone skrzynką 64 KiB: długie listy są obcinane (truncated=true); dane pikseli są ograniczone do 48 KiB na d3d.texture.updatezgodnie z projektemmożliwości
Kanał jednożądaniowy: jedno żądanie naraz na sesję; zajęty slot daje OL_E_RUNTIME_CHANNEL_BUSY; identyfikatorów żądań nie wolno używać ponowniezgodnie z projektemsterowanie runtime
Telemetria jest slotem ostatniej wartości: serie szybsze niż próbkowanie hosta co 100 ms mogą gubić zdarzenia pośrednie (numery sekwencji odróżniają identyczne kolejne zdarzenia; rozerwane próbki są pomijane)PARTIALstała wtyczka
Reset urządzenia D3D zaobserwowano w runtime (resetting, restored, unieważnienie generacji); odrębne przejście lost nie wystąpiło, ponieważ urządzenie OMSI przeszło bezpośrednio do DEVICENOTRESETPARTIAL (RV-007)stan weryfikacji w runtime
Wyniki list ograniczonych (operacje timetable.*.list, vehicle.variables.list, vehicle.string-variables.list) zwracają co najwyżej tyle wierszy, ile mieści się w slocie runtime 64 KiB; pozostałe są pomijane z truncated=true i mniejszą wartością returned_count (audyt dokumentacji BUG-05). W tym wydaniu nie ma stronicowaniazgodnie z projektemmożliwości
timetable.logs.read, road-vehicles.list, humans.list, vehicle.constants.list i vehicle.curves.list nie są ograniczone: wynik większy niż slot kończy się błędem OL_E_RUNTIME_RESPONSE_TOO_LARGE (na testowanych mapach nie zaobserwowano tego dla żadnej z nich)PARTIALmożliwości
Samodzielnie raportowane ciągi dowodów (PublicCapabilityRegistry RuntimeValidation, GetCapabilitiesAsync EvidenceState) nie zostały zaktualizowane po rundzie domknięcia runtime: camera.lock nadal podaje STATICALLY_VALIDATED, a runtime.d3d.lifecycle.reset – IMPLEMENTED_NOT_RUNTIME_VALIDATED. Rozstrzygająca jest strona stan weryfikacji w runtimeopóźnienie dokumentacji, nie różnica w zachowaniumożliwości
Niektóre zaawansowane pola grafu map/kafelków/ścieżek/obiektów nie są udostępniane; czytniki runtime to typowane migawki zależne od profilu, nigdy dowolny dostęp do pamięcizgodnie z projektemmożliwości
Odczyty pamięci w procesie działają na zasadzie „sprawdź, potem użyj” wobec działającego OMSI; równoczesna zmiana w OMSI między sprawdzeniem a odczytem może dać niespójną migawkę (OL_E_RUNTIME_OPERATION_FAILED)zaakceptowane ryzyko (S-33)

Lokalna płaszczyzna sterowania i model zaufania#

OgraniczenieStabilnośćSzczegóły
Model zaufania tego samego użytkownika: potok nazwany (CurrentUserOnly), mapowania pamięci handoff/telemetrii/runtime oraz semafor dzierżawy są dostępne dla każdego procesu tego samego użytkownika Windows. Taki proces może odczytać stan, zatrzymać sesję lub wykonywać operacje runtime, gdy tylko odczyta session_id.zaakceptowane ryzyko (S-06, S-30)lokalne sterowanie
Punkt końcowy sterowania istnieje tylko wtedy, gdy właściciel jest w stanie Running; klient otrzymuje OL_E_NO_ACTIVE_SESSION (kod wyjścia 4) podczas uruchamiania i po zakończeniu sesjizgodnie z projektemlokalne sterowanie
Jeśli inny proces jest już właścicielem nazwy potoku, właściciel sesji działa dalej bez punktu końcowego (ListenFault), a drugie uruchomienie może błędnie zgłosić OL_E_SESSION_ALREADY_ACTIVEzaakceptowane ryzykolokalne sterowanie
.omsilaunch\ dziedziczy listę ACL katalogu głównego OMSI; nie jest stosowana żadna jawna kontrola dostępuzaakceptowane ryzyko (S-31)transakcje i odzyskiwanie

Diagnostyka i dane wyjściowe#

OgraniczenieStabilnośćSzczegóły
Diagnostyka to wyłącznie pliki lokalne (.omsilaunch\diagnostics); nic nie jest wysyłane i nie ma zdalnego raportowaniazgodnie z projektemtransakcje i odzyskiwanie
Retencja obejmuje 50 najnowszych sesji; starsza diagnostyka z prefiksem sesji jest usuwana przy starcie nowej sesjizgodnie z projektemjak wyżej
Dane wyjściowe JSON i diagnostyka zawierają ścieżki instalacji (RootPath, katalogi zasobów, ścieżki .itx)zgodnie z projektem (dane lokalne)
Okno dialogowe błędu sesji w OmsiLaunchW.exe pokazuje jako komunikat ładunek błędu wtyczki (na przykład {"name":"world.failed",...}) zamiast zdania; wiersz Code: jest poprawnykosmetyczneobszar powiadomień Windows
Żądanie D3D odrzucone przez mostek natywny przed jakimkolwiek wywołaniem Direct3D poprawnie raportuje native_status, ale jego tekst detail podaje HRESULT 0x00000000kosmetycznemożliwości
Okno stanu w obszarze powiadomień jest migawką zaplanowanej sesji wykonaną w chwili jego otwarcia; nie odświeża się i nie pokazuje bieżących wartości OMSIzgodnie z projektemobszar powiadomień Windows

Dokumentacja#

Angielskie strony w docs/ są dokumentacją normatywną tego wydania. docs/localized/<locale>/ zawiera tłumaczenia tych samych stron 0.1.0-beta3 (zob. LOCALIZATION-MANIFEST.md); tam, gdzie tłumaczenie różni się od tekstu angielskiego, rozstrzygające są tekst angielski i kod. Wymienione tam strony historyczne i starsze (legacy) są dostępne tylko po angielsku.

Powiązane: możliwości, stan weryfikacji w runtime, błędy.