ケイパビリティ

ドキュメントのバージョン v0.1.0-beta.3GitHub でソースを見る

このページは OmsiLaunch 0.1.0-beta3 の英語版の原文ページの翻訳です。規範となるのは英語版です。内容が異なる場合は、英語版のページとコードが優先されます。

このページは、OmsiLaunch 0.1.0-beta3 で何ができるかを示す規範的な一覧です。内容は PublicCapabilityRegistry(src/OmsiLaunch.Api/PublicCapabilityRegistry.cs)、プラグイン内のランタイム実装(src/OmsiLaunch.Plugin/CurrentRuntimeControl.cs と src/OmsiLaunch.Interop/OmsiRuntimeReaders.cs)、および OmsiLaunchService.GetCapabilitiesAsync から導いています。各ケイパビリティについて、分類、このドキュメント全体で使用する安定性レベル、Running セッションが必要かどうか、OMSI を変更するかどうか、引数と結果キー、エラー、ランタイム検証のエビデンスを示します。操作の呼び出し方法(CLI ルート、API エンベロープ、タイムアウト、ハンドル)はランタイム制御に、エビデンスの表はランタイム検証の状況に記載しています。

分類と安定性#

PublicCapabilityClassification には 4 つの値があります。これらは次のように安定性の用語に対応し、エビデンスが不完全な箇所では格下げされます。

分類意味安定性
PublicStableBeta公開、Beta の契約に含まれる、ランタイム検証済みSTABLE_BETA(注記のある箇所では PARTIAL に格下げ)
PublicExperimental公開、変更される可能性あり、ランタイム検証済みまたは静的検証済みEXPERIMENTAL(注記のある箇所では PARTIAL に格下げ)
InternalOnly調査用のプリミティブ。公開 API や CLI からは到達できませんINTERNAL
Unsupported診断のために認識されますが、拒否されるか存在しませんUNAVAILABLE

PublicCapabilityKind は Read、Write、Action、Event を区別します。すべてのランタイムケイパビリティには、Running セッションと完全一致するプロファイル Omsi23004_692EBFBF が必要です(レジストリの RequiresSession / RequiresExactProfile)。セッションを作成するセッションケイパビリティは、完全一致するプロファイルを必要としますが、セッションは必要としません。

ランタイムの結果は文字列の辞書です。internal_ で始まるキー、または _address、_pointer、_vmt で終わるキーは API 境界で削除され(ScrubInternalValues)、ここには記載していません。以下の操作表の結果キーは、製品が返す正確なキーの集合です。これらは実際のセッションですべての公開操作を実行して取得したものです(ランタイムクロージャーのドキュメント用キャプチャ、セッション f51dcb59-a723-4570-b6c5-b61e628a7993、situations\Linie 5.osn。リストの行は <row>.<n>.<field> と表記します)。

操作の失敗の報告方法(CurrentRuntimeControl.Execute):

失敗ErrorCodeValues
レジストリによる拒否(不明な操作または internal.* 操作、必須引数の欠落)OL_E_RUNTIME_OPERATION_UNKNOWN、OL_E_RUNTIME_ARGUMENT_REQUIREDなし
製品による意図的な拒否(weather.set)固有のコード(OL_E_RUNTIME_SETTING_NOT_PERSISTENT)detail(文)
D3D の失敗固有の OL_E_D3D_* コードdetail、native_status
その他のプラグイン側の失敗(失効したハンドル、不明な名前、範囲外の値、プレイヤー車両がない、など)OL_E_RUNTIME_OPERATION_FAILEDdetail(固有のコードで始まります。例: OL_E_RUNTIME_OBJECT_HANDLE_STALE または OL_E_RUNTIME_VALUE_OUT_OF_RANGE (Parameter 'minute'))、exception(.NET の型名)
64 KiB のメールボックスに収まらない結果OL_E_RUNTIME_RESPONSE_TOO_LARGE(上限付きリストは代わりに短縮されます。時刻表、運転士、乗車券を参照)なし

各表の「エラー」列(Errors)には固有のコードを記載しています。上記のとおり、ErrorCode または Values.detail の先頭トークンから読み取ってください。

セッションケイパビリティ#

ケイパビリティ分類安定性種類API ルートCLI ルート変更対象検証
session.planPublicStableBetaSTABLE_BETAActionPlanSessionAsync/plan、/validateなしRUNTIME_PASS(検証済みのすべてのセッションはプランから始まります)
session.startPublicStableBetaSTABLE_BETAActionStartSessionAsync起動フラグファイルシステム(トランザクション)、プロセスRUNTIME_PASS(NEW_MAP Grundorf、SAVED_SITUATION Berlin-Spandau)
session.statusPublicStableBetaSTABLE_BETAReadGetStatusAsyncsession statusなしRUNTIME_PASS
session.stopPublicStableBetaSTABLE_BETAActionStopAsync / CloseAsyncsession stop、トレイ、Ctrl+Cプロセス(TerminateProcess)、ファイルシステム(復元)RUNTIME_PASS。協調的なシャットダウンは未実装です
session.recoverPublicStableBetaSTABLE_BETAActionRecoverPendingAsync/recovery-status、/recoverファイルシステム(復元)RUNTIME_PASS: 早期終了時のリカバリ(RV-008)、オーナーの強制終了と次回開始時の早期リカバリ(S05)、復元失敗後の /recover(F01)、リース保持中・孤立した OMSI がある状態・PID 確定前の期間における拒否(S04、S04b)
events.readPublicExperimentalEXPERIMENTALEventGetStatusAsync().RuntimeEvents、コントロールの session.eventsevents read、events watchなしRUNTIME_PASS。最新値のみを保持するテレメトリスロットのため、バーストを取りこぼすことがあります

ランタイムケイパビリティ(レジストリエントリ)#

ケイパビリティ分類安定性種類操作ハンドル検証
time.readPublicStableBetaSTABLE_BETAReadtime.readRUNTIME_PASS(セッション e5454061)
time.setPublicExperimentalEXPERIMENTALWritetime.setRUNTIME_PASS(書き込み、SetTime、読み戻し)
weather.readPublicStableBetaSTABLE_BETAReadweather.readRUNTIME_PASS
weather.setUnsupportedUNAVAILABLEWriteweather.setRUNTIME_REJECTED: 常に OL_E_RUNTIME_SETTING_NOT_PERSISTENT(セッション 50a1f1ec)
weather.actual.readPublicExperimentalEXPERIMENTALReadweather.actual.readRUNTIME_PASS
map.readPublicStableBetaSTABLE_BETAReadmap.readRUNTIME_PASS: 修正後のマップスロットで再検証済み(セッション 9dd62626-94c6-4cd7-bb6f-0288327696f4、Grundorf)、ドキュメント用キャプチャで Berlin-Spandau でも読み取り
camera.readPublicStableBetaSTABLE_BETAReadcamera.readRUNTIME_PASS
camera.setPublicExperimentalEXPERIMENTALWritecamera.setRUNTIME_PASS(FOV の書き込みと読み戻し)
camera.lockPublicExperimentalEXPERIMENTALActioncamera.lock、camera.unlock保存済みシチュエーションの PlayerVehicle で RUNTIME_PASS(ランタイムクロージャー CAM01、ファミリー 0、2、1 を読み戻し付きで実行し、その後ロック解除)。レジストリ自身の RuntimeValidation 文字列は依然として STATICALLY_VALIDATED のままです(製品の自己申告であり、このリリースでは更新されていません)
vehicles.listPublicStableBetaSTABLE_BETAReadroad-vehicles.listRoadVehicleRUNTIME_PASS
vehicles.getPublicStableBetaSTABLE_BETAReadroad-vehicle.readRoadVehicleRUNTIME_PASS。自然な削除後の失効検出(RV-002)には安全なランタイム上の発生手段がなく、オフラインで検証されています
vehicles.summaryPublicStableBetaSTABLE_BETAReadroad-vehicles.readRUNTIME_PASS
vehicles.spawnPublicExperimentalEXPERIMENTALActionroad-vehicles.spawnRoadVehicleRUNTIME_PASS RV-003(セッション 5f641c8d、2 -> 3、ハンドル rv-000003)
vehicles.place-randomPublicExperimentalEXPERIMENTALActionroad-vehicles.place-randomRUNTIME_PASS(コレクション 2 -> 4)
player.readPublicStableBetaSTABLE_BETAReadplayer-vehicle.readRoadVehicleRUNTIME_PASS: ヘッドレス開始では present=false、保存済みシチュエーションでは完全なスナップショット
humans.listPublicExperimentalEXPERIMENTALReadhumans.listHumanRUNTIME_PASS
humans.getPublicExperimentalEXPERIMENTALReadhuman.readHumanRUNTIME_PASS
humans.summaryPublicExperimentalEXPERIMENTALReadhumans.readRUNTIME_PASS
timetable.readPublicStableBetaSTABLE_BETAReadtimetable.read と timetable.*.list / timetable.logs.read 系RUNTIME_PASS(路線エントリ(track entry): Grundorf で 91 レコード)
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(読み取りのみ。書き込みは 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.releaseD3DTexturecreate/describe/update/release、再作成およびセッションをまたいだ解放済み・失効ハンドルの拒否(H02)、世代の無効化を伴うデバイスリセット(RV-007、D01。lost 自体は発生しませんでした)について RUNTIME_PASS
internal.make-basicInternalOnlyINTERNALActioninternal.road-vehicles.make-basic非公開です。ExecuteRuntimeAsync はセッションを検索する前に OL_E_RUNTIME_OPERATION_UNKNOWN で拒否します。CLI にはこの操作のルートがありません。
calendar.set-actual-date-timeUnsupportedUNAVAILABLEWriteなしUNSUPPORTED(BI-002)
player.assign-headlessUnsupportedUNAVAILABLEActionなしUNSUPPORTED(BI-007)

internal.road-vehicles.make-basic は INTERNAL です。調査用にプラグイン内に存在し(ネイティブアドレスを返します)、API 境界とローカルコントロールプレーンで拒否されます。どちらも最初に操作名を PublicRuntimeOperationIds と照合して検証します。

公開ランタイム操作#

以下は、公開フロントエンドが転送してよい操作 id の正確な一覧です(PublicCapabilityRegistry.PublicRuntimeOperationIds)。いずれも SessionState.Running を必要とし、ジャーナルへの記録も復元も行われません。必須引数はメールボックスを使用する前にレジストリによって検査されます(OL_E_RUNTIME_ARGUMENT_REQUIRED)。省略可能な引数はプラグインが検証します。すべての操作に共通する失敗コード: OL_E_RUNTIME_OPERATION_UNKNOWN(この一覧にない)、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(プラグインに実装がない)、OL_E_RUNTIME_OPERATION_FAILED(プロセス内の予期しない例外。detail と exception の値を伴います)。

時刻#

操作種類引数結果キーエラー
time.readReadなしhour、minute、second、day、month、year
time.setWrite省略可能な hour(0..23)、minute(0..59)、second(0..59.999、小数)。少なくとも 1 つプロファイル済みの SetTime 実行後の time.read のキーOL_E_RUNTIME_ARGUMENT_REQUIRED、OL_E_RUNTIME_VALUE_OUT_OF_RANGE、OL_E_TIME_APPLY_FAILED

天候#

操作種類引数結果キーエラー
weather.readReadなしfog_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.setWrite任意なし常に OL_E_RUNTIME_SETTING_NOT_PERSISTENT(引数が空の場合: OL_E_RUNTIME_ARGUMENT_REQUIRED)。OMSI は次の天候ティックで、プロファイル済みの風の候補 2 つの両方を上書きします。
weather.actual.readReadなしactive、icao、last_downloaded、invalid_icao、counter、process

マップ#

操作種類引数結果キーエラー
map.readReadなしloaded、loaded_tiles、left_hand_traffic、name、filename、friendly_name、description、max_speed、year_start、year_end

カメラ#

操作種類引数結果キーエラー
camera.readReadなしfamily(0 運転士、1 乗客、2 外部、3 マップ)、name、field_of_view、normal_field_of_view、distance
camera.setWrite省略可能な family(0..3)、field_of_view(10..170)。少なくとも 1 つcamera.read のキーOL_E_RUNTIME_ARGUMENT_REQUIRED、OL_E_RUNTIME_VALUE_OUT_OF_RANGE
camera.lockAction必須の family(0..3)。省略可能な preset(0..255、ファミリー 0 または 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。このポリシーは camera.unlock まで 100 ms ごとに再適用されます。再適用が失敗すると、異なるエラーごとに 1 回ずつイベント camera.lock.degraded が発行されます。
camera.unlockActionなしlocked(false)

道路車両とプレイヤー#

操作種類引数結果キーエラー
road-vehicles.readReadなしcount、ai_collection、player_index(OMSI の生のプレイヤー車両インデックスを読み取ったまま報告します。プレイヤー車両が存在するかどうかは player-vehicle.read の present で確認してください)
road-vehicles.listReadなしcount、vehicle.<n>.handle(rv-NNNNNN)
road-vehicle.readRead必須の 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.readReadなしpresent(OMSI にプレイヤー車両がない場合は false)。true の場合: player_index とすべての road-vehicle.read のキー
road-vehicles.spawnAction必須の model(正規形の Vehicles\...\*.bus、240 文字以内、.. を含まない、インストール環境の配下に存在すること)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。PlayerVehicle は割り当てません。数秒かかるため、クライアントのタイムアウトは 30 s を使用してください。
road-vehicles.place-randomAction省略可能な ai_type(0..255、既定値 0)、group(0..65535、既定値 1)、type(-1..65535、既定値 -1)、scheduled(0..1、既定値 0)、tour(0..65535、既定値 0)、line(0..65535、既定値 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

人物オブジェクト#

操作種類引数結果キーエラー
humans.readReadなしcount
humans.listReadなしcount、human.<n>.handle(hb-NNNNNN)
human.readRead必須の 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

時刻表、運転士、乗車券#

上限付きリストの結果には、count(OMSI 内の全レコード数)、returned_count(この応答に含まれる行数)、truncated(行が省略された場合は true)が含まれます。行は常に先頭から returned_count 件のレコードで、0 から番号が振られます。行数の上限は、track、trip、line、rv-file、停留所、station link、ツアー、プロファイルが 128、ツアーエントリ(tour entry)が 256、路線エントリ(track entry)が 512 です。この上限で許される行数でも 64 KiB のメールボックスを超える場合(例: Berlin-Spandau の路線エントリとツアーエントリ)、プラグインは応答が収まるまで末尾の行を削除し、小さくなった returned_count を truncated=true とともに報告します(ドキュメント監査 BUG-05。修正前は、この 2 つのリストが OL_E_RUNTIME_RESPONSE_TOO_LARGE で失敗していました)。timetable.logs.read は上限付きリストではありません。すべてのログエントリを返すため、数百件のエントリを含むログはメールボックスを超え、OL_E_RUNTIME_RESPONSE_TOO_LARGE で失敗します。

操作種類引数結果キーエラー
timetable.readReadなしinvalid(true/false)、およびレコード数 tracks、trips、bus_stops、station_links、lines、rv_files
timetable.tracks.listReadなしcount、returned_count、truncated。track.<n>.filename、track.<n>.path、track.<n>.entries、track.<n>.length
timetable.trips.listReadなしcount、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.listReadなしcount、returned_count、truncated。line.<n>.name、line.<n>.chrono_origin、line.<n>.priority、line.<n>.tours、line.<n>.user_allowed
timetable.rv-files.listReadなしcount、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.listReadなしcount、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.listReadなしcount、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.listReadなしcount、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.listReadなしcount、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.listReadなしcount、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.listReadなしcount、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.readReadなしcount。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(全エントリ。上限なし)長いログでは OL_E_RUNTIME_RESPONSE_TOO_LARGE
drivers.readReadなしcount、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.readReadなしfilename、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

車両スクリプト、定数、カーブ、HOF(ハンドル単位)#

操作種類引数結果キーエラー
vehicle.variables.listRead必須の handlehandle、count、returned_count、truncated(上限 512)、name.<n>OL_E_RUNTIME_OBJECT_HANDLE_REQUIRED、OL_E_RUNTIME_OBJECT_HANDLE_STALE、OL_E_RUNTIME_SCRIPT_OBJECT_UNAVAILABLE
vehicle.variable.getRead必須の handle、namehandle、name、valueOL_E_RUNTIME_VARIABLE_NOT_FOUND、OL_E_RUNTIME_VARIABLE_UNAVAILABLE
vehicle.variable.setWrite必須の handle、name、value(有限の浮動小数点数)handle、name、requested_value、value(読み戻し値)OL_E_RUNTIME_VALUE_OUT_OF_RANGE、OL_E_RUNTIME_VARIABLE_NOT_FOUND
vehicle.string-variables.listRead必須の handlehandle、count、returned_count、truncated(上限 512)、name.<n>OL_E_RUNTIME_OBJECT_HANDLE_REQUIRED、OL_E_RUNTIME_OBJECT_HANDLE_STALE、OL_E_RUNTIME_SCRIPT_OBJECT_UNAVAILABLE
vehicle.string-variable.getRead必須の handle、namehandle、name、valueOL_E_RUNTIME_STRING_VARIABLE_NOT_FOUND
vehicle.constants.listRead必須の handlehandle、count、name.<n>OL_E_RUNTIME_CONSTANTS_UNAVAILABLE
vehicle.constant.getRead必須の handle、namehandle、name、valueOL_E_RUNTIME_CONSTANT_NOT_FOUND
vehicle.curves.listRead必須の handlehandle、count、name.<n>
vehicle.curve.evaluateRead必須の handle、name、x(有限の浮動小数点数。x が欠落しているか数値でない場合は OL_E_RUNTIME_ARGUMENT_REQUIRED)handle、name、x、value(線形補間)OL_E_RUNTIME_CURVE_NOT_FOUND、OL_E_RUNTIME_CURVE_EMPTY、OL_E_RUNTIME_CURVE_INVALID、OL_E_RUNTIME_CURVE_DEGENERATE
vehicle.hofs.readRead必須の handlehandle、count、hof.<n>.name、hof.<n>.service_tripOL_E_RUNTIME_HOF_UNAVAILABLE

Direct3D 9#

D3D 操作は、ネイティブブリッジを介して OMSI のメイン/レンダースレッド上で実行されます。テクスチャハンドルは d3dtex-<sessionId N>-<16 hex digits> の形式です。

操作種類引数結果キーエラー
d3d.statusReadなしavailable、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.createAction必須の width(1..4096)、height(1..4096)、format(A8R8G8B8、X8R8G8B8、R5G6B5、X1R5G5B5、A1R5G5B5、A4R4G4B4、A8、L8、A8L8)。省略可能な levels(0..16、既定値 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.describeRead必須の handle。省略可能な level(0..15、既定値 0)要求したレベルについての d3d.texture.create の 13 個のキーOL_E_D3D_STALE_RESOURCE_HANDLE、OL_E_D3D_RESOURCE_RELEASED、および create のエラー
d3d.texture.updateAction必須の handle、width(1..4096)、height(1..4096)、pixels_base64(デコード後 48 KiB 以内)。省略可能な level(0..15、既定値 0)、x(0..4095、既定値 0)、y(0..4095、既定値 0)更新後の d3d.texture.create の 13 個のキーOL_E_D3D_INVALID_PIXEL_BUFFER、および describe のエラー
d3d.texture.releaseAction必須の handlestate = RELEASED となった d3d.texture.create の 13 個のキー繰り返し解放した場合は OL_E_D3D_RESOURCE_RELEASED、OL_E_D3D_STALE_RESOURCE_HANDLE

失敗した D3D 操作は detail と native_status の値を返します。D3DRuntimeApi 拡張メソッド(GetD3DStatusAsync、CreateD3DTextureAsync、DescribeD3DTextureAsync、UpdateD3DTextureAsync、ReleaseD3DTextureAsync)は、API 利用者向けにこれらの操作をラップしています。

GetCapabilitiesAsync の名前#

IOmsiLaunch.GetCapabilitiesAsync(InstallationSpec) は、ホストから見たインストール環境を記述する Capability(Name, Available, EvidenceState, Reason) レコードの静的な一覧を返します。これらの名前は、上記のレジストリ id とは別の、より粒度の粗い用語体系です。操作の契約はレジストリであり、ケイパビリティ一覧はインテグレーター向けの機械可読な要約です。両者の関係は最後の列に示します。

名前利用可否エビデンス関係
runtime.current-windows-x64プラットフォームに依存STATICALLY_VALIDATED互換性
runtime.command-channeltrueSTATICALLY_VALIDATEDランタイムメールボックス
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(拒否されます)
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。この一覧は固定の自己申告による一覧です。このエントリは、ランタイムクロージャーのラウンドで resetting/restored の遷移が観測された(D01)後も更新されていません。エビデンスはランタイム検証の状況を参照してください
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_VALIDATEDsession.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。これらを要求するとプランは実行不可になります
weather.preset、weather.icao、weather.real-currentfalseSTATICALLY_PARTIAL/weather*。これらを要求するとプランは実行不可になります
player-vehicle.model、player-vehicle.repaint、player-vehicle.hof、player-vehicle.fleet-number、player-vehicle.registrationfalseSTATICALLY_PARTIAL/vehicle と関連フラグ。これらを要求するとプランは実行不可になります
configuration.options.semantictrueSTATICALLY_VALIDATED/set、プロファイルの settings(RV-005 ランタイム)
input.keyboard.patch、input.controller.active-ffscaletrueSTATICALLY_VALIDATEDドキュメントパーサーは存在しますが、InputSpec はセッションによって適用されません(BI-005)
input.controller.axis-buttonsfalseSTATICALLY_PARTIALBI-005
content.maps、content.situations、content.vehicles、content.repaints、content.hofs、content.fleet-registration-sourcestrueSTATICALLY_VALIDATEDDiscoverAsync、/list

プランナーは、さらにプランごとのケイパビリティを SessionPlan.RequiredCapabilities と 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.*)。

既知の制限事項#

  • ハンドルはセッション単位です。アドレスの再利用はオブジェクトのフィンガープリント(車両では VMT と定義ポインター、人物オブジェクトでは VMT と human インデックス)によって検出され、OL_E_RUNTIME_OBJECT_HANDLE_STALE として報告されます。残る死角: 2 回のリスト読み取りの間に、同じクラス・同じ定義のオブジェクトが同じアドレスに再作成された場合、元のオブジェクトと区別できません。
  • 結果は 64 KiB のメールボックスに制限されます。上限付きリストは truncated=true を付けて切り詰められます。timetable.logs.read には上限がなく、OL_E_RUNTIME_RESPONSE_TOO_LARGE で失敗することがあります。
  • タイルをまたいだ車両の移動、文字列変数の書き込み、カレンダーの書き込み、天候の書き込み、ヘッドレスでの PlayerVehicle の割り当てはいずれもできません。既知の制限事項を参照してください。