LaunchSpec リファレンス

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

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

このページは、1 つの OmsiLaunch セッションを記述する要求レコードである LaunchSpec の規範的なリファレンスです。対象は、C# での形(OmsiLaunch.Api)、CLI が読み込む JSON ファイル形式(/spec:<path>、tools/OmsiLaunch.Cli/LaunchSpecJson.cs)、各プロパティの型・既定値・検証ルール・現在の効果、プランを実行不可にする検証ルール、そして CLI フラグ、spec ファイル、セッションプロファイルの間の優先順位です。記載しているのは現在のコードが実際に行うことだけです。

関連ページ: 公開 API、CLI リファレンス、セッションプロファイル、エラーコード、セッションのライフサイクル、ケイパビリティ。

LaunchSpec の出どころ#

出どころLaunchSpec になるまで
APIインテグレーターがレコードを構築し、PlanSessionAsync に渡します。
CLI フラグCliInput.BuildSpecAsync が組み込みの既定値(NEW_MAP、すべて未設定、Behavior は既定値)から開始し、フラグを適用します。
/spec:<path> JSON ファイルLaunchSpecJson.LoadAsync で読み込まれ、CLI フラグが上書きする基点(シード)として使われます(優先順位を参照)。
セッションプロファイル(/predefined-profile:<id> /predefined-profile-index:<n>)SessionProfileCompiler.Apply がプロファイルの world、settings、presentation、internet-textures、behaviour をシードに書き込み、SessionProfile メタデータを記録します。

以下の完全な例はレコードの形に照らして検証済みです。最小構成の例のコピーが examples/release-session.example.json(リリースパッケージでは .omsilaunch\examples\release-session.example.json)として同梱されています。

JSON 形式#

ルール詳細
シリアライザーSystem.Text.Json を PropertyNameCaseInsensitive = true、ReadCommentHandling = Skip、AllowTrailingCommas = true で使用します。コンバーターは登録されていません。
プロパティ名C# のプロパティ名(Installation、RootPath、...)です。読み込み時の照合は大文字と小文字を区別しません。CLI は PascalCase で書き出します。
列挙型整数です(文字列列挙型のコンバーターはありません)。"Mode": 0 は有効で、"Mode": "NewMap" は不正な JSON として拒否されます。値は列挙型に記載しています。
OptionalValue<T>オブジェクト { "Presence": 0 | 1, "Value": <T or null> } です。Presence 0 = Unset(値は無視されます)、1 = Set(値が存在し、null でない必要があります。値が null の Set は検証されず、無効な値として振る舞います)。省略された OptionalValue メンバーは Unset です。読み取り専用の IsSet メンバーは CLI が書き出す出力に含まれ、読み込み時には受け付けられて無視されます。
任意のレコードYear、Weather、Input、Diagnostics、Presentation、InternetTextures、SessionProfile は null にするか省略できます。Effective* アクセサーが既定値で補います。
必須のレコードInstallation、World、Date、Time、Environment(8 つの辞書すべてを含む。空なら {} を使用)、Behavior はオブジェクトとして存在する必要があります。これらは検証されません。null または欠落している場合は後で null 参照により失敗し、CLI はそれを OL_E_INTERNAL(終了コード 10)または OL_E_INVALID_ARGUMENT(終了コード 2)として報告します。
未知のプロパティバインドの前に拒否されます: OL_E_SPEC_UNKNOWN_PROPERTY: $.Path.Name(パスにはファイルに書かれたとおりのメンバー名が使われます)。辞書の内容(Environment.*)はプロパティとしては検査されません。
ルートJSON オブジェクトである必要があります: OL_E_SPEC_INVALID。最大ネスト深さは 32 です。
ファイルサイズ最大 1 MiB(1 048 576 バイト): OL_E_SPEC_TOO_LARGE。ファイルが存在しない場合: OL_E_SPEC_NOT_FOUND。
コメントと末尾のカンマ// および /* */ のコメントと末尾のカンマは受け付けられます。
不正な JSONパーサーの例外は変換されません。CLI は OL_E_INTERNAL を終了コード 10 で報告します。
エンコーディングUTF-8(リーダーは BOM を許容します)。識別子内のバックスラッシュはエスケープする必要があります("maps\\Grundorf\\global.cfg")。マップ、シチュエーション、車両、HOF の識別子ではスラッシュも受け付けられます。

完全な例#

{
  // Comments and trailing commas are accepted. Enums are integers.
  "Installation": {
    "RootPath": ".",                          // "." = directory that contains OmsiLaunch.exe (CLI only)
    "ExpectedExecutableSha256": null          // carried, not consumed
  },
  "World": {
    "Mode": 0,                                // 0 NewMap, 1 SavedSituation, 2 LastMapState (unavailable)
    "MapIdentity": { "Presence": 1, "Value": "maps\\Grundorf\\global.cfg" },
    "SituationIdentity": { "Presence": 0, "Value": null },
    "PresentedEntrypointIndex": { "Presence": 1, "Value": 1 },
    "EntrypointIdentity": { "Presence": 0, "Value": null }
  },
  "Date": { "Mode": 0, "Value": { "Presence": 0, "Value": null } },
  "Time": { "Mode": 0, "Value": { "Presence": 0, "Value": null } },
  "Year": null,
  "Weather": null,
  "PlayerVehicle": { "Presence": 0, "Value": null },
  "Environment": {
    "General": {
      "traffic.randomVehicles": { "Presence": 1, "Value": "150" },
      "graphics.maxFPS": { "Presence": 1, "Value": "60" }
    },
    "Advanced": {}, "Graphics": {}, "AdvancedGraphics": {},
    "Sound": {}, "AiPassengers": {}, "Keyboard": {}, "Controllers": {}
  },
  "Behavior": {
    "RestoreConfiguration": true,             // carried, restore always happens
    "SuppressStaleClosecheckWarning": true,
    "StartupTimeoutSeconds": 180,             // 1..600
    "ShutdownTimeoutSeconds": 30              // carried, not consumed
  },
  "Input": null,
  "Diagnostics": null,
  "Presentation": {
    "Splash": 1,                              // 0 Unset/Native (keep OMSI files), 1 Managed
    "Language": { "Presence": 0, "Value": null },
    "CustomAssetDirectory": { "Presence": 0, "Value": null },
    "SuppressTrayIcon": false
  },
  "InternetTextures": {
    "Mode": 0,                                // 0 Native, 1 Disabled, 2 Override
    "OverrideProfilePath": { "Presence": 0, "Value": null }
  },
  "SessionProfile": null
}

明示的な日付は、ビルドが対応している場合、"Date": { "Mode": 1, "Value": { "Presence": 1, "Value": { "Year": 2024, "Month": 5, "Day": 1 } } } のように書き、時刻は { "Mode": 1, "Value": { "Presence": 1, "Value": { "Hour": 7, "Minute": 30, "Second": 0 } } } のように書きます。このビルドでは、どちらもプランを実行不可にします(下記参照)。

プロパティリファレンス#

「使用」列は、現在のコードがその値をどう扱うかを示します。安定性の表記は公開 API ページの用語に従います。

LaunchSpec(ルート)#

プロパティJSON 型必須省略時の既定値使用安定性
InstallationInstallationSpec オブジェクトはいなしはいSTABLE_BETA
WorldWorldSpec オブジェクトはいなしはいSTABLE_BETA
DateDateSpec オブジェクトはいなし検証されます。Unset 以外のモードは実行不可PARTIAL
TimeTimeSpec オブジェクトはいなし検証されます。Unset 以外のモードは実行不可PARTIAL
PlayerVehicleOptionalValue<PlayerVehicleSpec>いいえUnset診断のために解決されます。いずれかのフィールドが設定されていると実行不可PARTIAL
EnvironmentEnvironmentSpec オブジェクトはいなしはい(セマンティックな options.cfg オーバーレイ)STABLE_BETA
BehaviorLaunchBehaviorSpec オブジェクトはいなし一部(レコードを参照)STABLE_BETA / PARTIAL
YearYearSpec オブジェクトまたは nullいいえnull → EffectiveYear = モード UnsetUnset 以外のモードは実行不可PARTIAL
WeatherWeatherSpec オブジェクトまたは nullいいえnull → EffectiveWeather = モード UnsetUnset 以外のモードは実行不可PARTIAL
InputInputSpec オブジェクトまたは nullいいえnull → EffectiveInput = 両方とも未設定ドキュメントが 1 つでも設定されていると実行不可PARTIAL
DiagnosticsDiagnosticsSpec オブジェクトまたは nullいいえnull → EffectiveDiagnostics = 既定値保持されるのみPARTIAL
PresentationSessionPresentationSpec オブジェクトまたは nullいいえnull → EffectivePresentation = 管理されたスプラッシュ、言語なし、カスタムディレクトリなし、トレイ表示はいSTABLE_BETA
InternetTexturesInternetTexturesSpec オブジェクトまたは nullいいえnull → EffectiveInternetTextures = NativeはいSTABLE_BETA / EXPERIMENTAL
SessionProfileSessionProfileMetadata オブジェクトまたは nullいいえnull出自の記録のみ(session_profile.selected プラン診断)STABLE_BETA

読み取り専用アクセサー(CLI の JSON 出力に含まれ、読み込み時には無視されます): EffectiveYear、EffectiveWeather、EffectiveInput、EffectiveDiagnostics、EffectivePresentation、EffectiveInternetTextures。

InstallationSpec#

プロパティ型既定値有効な値使用安定性
RootPathstring必須Omsi.exe と plugins\ を含むディレクトリ。パスのルールを参照してください。空または空白のみ → OL_E_INSTALLATION_NOT_FOUND。はいSTABLE_BETA
ExpectedExecutableSha256string または nullnull任意の文字列。現在のコードには使用箇所がありません。ホストは常に Omsi.exe のハッシュを計算してビルドプロファイルと比較し、この値とは比較しません。PARTIAL(保持されるが、現在は効果なし)

WorldSpec#

プロパティ型既定値有効な値使用安定性
ModeWorldMode int必須0 NewMap、1 SavedSituation、2 LastMapState(LastSituation は同じ値 2 を持つ廃止済みの別名)。はい。LastMapState → OL_E_CAPABILITY_UNAVAILABLENewMap、SavedSituation: STABLE_BETA、LastMapState: UNAVAILABLE
MapIdentityOptionalValue<string>UnsetNewMap の場合は必須で、maps\<dir>\global.cfg の形式(大文字と小文字を区別しない、/ 可、.. 不可)であり、インストールされている必要があります。SavedSituation では無視されます(マップは .osn が提供します)。はい(ハンドオフ)STABLE_BETA
SituationIdentityOptionalValue<string>UnsetSavedSituation の場合は必須で、インストール済みの situations\...\<file>.osn 識別子(DiscoverAsync(Situations) / /list:situations が返すもの)です。はい(ハンドオフ)STABLE_BETA
PresentedEntrypointIndexOptionalValue<int>UnsetEntrypointIdentity のない NewMap の場合は必須で、>= 0 であり、そのマップについて OMSI が提示するエントリポイント一覧へのインデックスです。未設定の場合はプラグインに -1 として送られます。はい(ハンドオフ)STABLE_BETA
EntrypointIdentityOptionalValue<string>Unset生のエントリポイントラベルまたはディスカバリ識別子。設定するとプランが実行不可になります(world.entrypoint-identity、RUNTIME_PARTIAL、OL_E_CAPABILITY_UNAVAILABLE)。保持されるPARTIAL
EntrypointEntrypointSpec(読み取り専用)算出EntrypointIdentity が設定されていれば Mode = Identity、そうでなくインデックスが設定されていれば PresentedIndex、それ以外は Unset。PresentedIndex、Identity は入力をそのまま反映します。派生STABLE_BETA

DateSpec、TimeSpec、YearSpec#

プロパティ型既定値有効な値使用安定性
ModeDateTimeMode int必須(Year: レコードが null の場合は 0)0 Unset、1 Explicit、2 System。Explicit/System → unsupported エントリ(world.explicit-date、world.explicit-time、world.explicit-year、STATICALLY_PARTIAL)と OL_E_CAPABILITY_UNAVAILABLE。モードは起動ハンドオフにもコピーされ、Unset でない場合はプラグインが拒否します(プランが実行不可であるため、実際にそこへ到達することはありません)。PARTIAL
ValueOptionalValue<SemanticDate> / OptionalValue<SemanticTime> / OptionalValue<int>UnsetSemanticDate: Year、Month 1..12、Day 1..31。SemanticTime: Hour 0..23、Minute 0..59、Second 0..59。Mode が Explicit のときは設定されている必要があり(そうでなければ OL_E_DATE_TIME_APPLY_FAILED)、Mode が Explicit でないときは未設定である必要があります(OL_E_INVALID_ARGUMENT)。YearSpec.Value は検証されません。検証のみPARTIAL

WeatherSpec#

プロパティ型既定値有効な値使用安定性
ModeWeatherMode intレコードが null の場合は 00 Unset、1 Preset、2 Icao、3 RealCurrent。Unset 以外のモード → weather の unsupported エントリと OL_E_CAPABILITY_UNAVAILABLE。PARTIAL
PresetOptionalValue<string>Unsetプリセット名(検証されません)。保持されるPARTIAL
IcaoOptionalValue<string>UnsetICAO コード(検証されません)。保持されるPARTIAL

PlayerVehicleSpec(PlayerVehicle の内部)#

プロパティ型既定値有効な値使用安定性
ModelOptionalValue<string>Unsetインストール済みの Vehicles\...\<file>.bus 識別子。そうでなければ OL_E_VEHICLE_NOT_FOUND。ResolvedContent に解決され、その後 player-vehicle.model が unsupported → OL_E_CAPABILITY_UNAVAILABLEPARTIAL
RepaintOptionalValue<string>UnsetModel のリペイント識別子(<cti>#item:<n>)。そうでなければ OL_E_REPAINT_NOT_FOUND。Model が設定されている場合にのみ検査されます。同上PARTIAL
HofOptionalValue<string>Unsetインストール済みの Vehicles\...\<file>.hof。そうでなければ OL_E_HOF_NOT_FOUND。同上PARTIAL
FleetNumberOptionalValue<string>Unset任意の文字列。OL_E_CAPABILITY_UNAVAILABLEPARTIAL
RegistrationOptionalValue<string>Unset任意の文字列。OL_E_CAPABILITY_UNAVAILABLEPARTIAL
Enabledbool(読み取り専用)算出Model が設定されていれば true。ハンドオフが PlayerVehicleEnabled として運ぶのは PlayerVehicle.IsSet です。派生PARTIAL

Presence が 1 で、すべてのフィールドが未設定の PlayerVehicle は受け付けられ、効果はありません。このビルドでは、いずれかのフィールドが設定されているとプランは実行不可になります(STATICALLY_PARTIAL)。

EnvironmentSpec#

プロパティ型既定値使用安定性
General、Advanced、Graphics、AdvancedGraphics、Sound、AiPassengers、Keyboard、Controllersそれぞれ IReadOnlyDictionary<string, OptionalValue<string>>、必須(空の場合は {})なしはいSTABLE_BETA

8 つのグループは連結されます。キーをどのグループに置いても効果は変わりません。Presence が 1 の各エントリは ConfigurationCatalog(src/OmsiLaunch.Configuration/ConfigurationCatalog.cs)のセマンティックな設定です。キーによって対象ファイル(現在のすべてのキーで options.cfg)とトークンが決まります。プランニングではキーが存在すること(OL_E_UNKNOWN_SETTING)と書き込み可能であること(OL_E_SETTING_NOT_WRITABLE)を検査します。値は開始時にのみ検証されます(OL_E_INVALID_SETTING_VALUE。OL_E_START_SESSION を伴う Failed セッションとして報告されます)。キーは大文字と小文字を区別しません。未設定のエントリは無視されます。CLI の /set:<key>=<value> フラグは General に書き込みます。セッションプロファイルの settings も General にマージされます。

キー値備考
general.languagestring[language] トークン
general.radiostring
general.alternateView、general.showOwnDriver、general.showErrorMessages、general.autoSave、general.currentTime、general.currentDate、general.currentYeartrue / false存在トークン(autoSave は noAutoSave の逆)
graphics.screenRatiostring
graphics.maxFPS整数 10..200
graphics.tileDistance整数 1..20
graphics.maxObjectDistanceMeters数値 20..5000
graphics.minObjectScreenPercent数値 0..10100 で割って格納
graphics.minReflectionObjectScreenPercent数値 0..50100 で割って格納
graphics.maxObjectComplexity整数 0..3
graphics.maxMapComplexity整数 0..2
graphics.sunGlow、graphics.loadAllTiles、graphics.stencilBuffer、graphics.rainReflections、graphics.humansInRainReflectionstrue / false存在トークン
graphics.stencilShadowstrue / falseon / off として書き込み
graphics.realTimeReflectionseconomy / fullSTATICALLY_PARTIAL
graphics.particlesenabled,maxPerEmitter,playerVehicleOnly,inReflections(bool,int>=0,bool,bool)smokesystems ブロック 1 つ
simulation.collision、simulation.collisionTerrain、simulation.collisionVehicles、simulation.collisionPedestrians、simulation.disableAutomaticScheduleAnalysisPopup、simulation.ticketInfo、simulation.automaticClutchtrue / false存在トークン
simulation.ticketSelling整数 0..2
simulation.maintenance整数 0..4
advanced.reducedMultithreadingtrue / false2 つの OMSI トークンを同時に操作(RUNTIME_PROVEN)
view.driverSmooth、view.driverMoving、controls.autoCenter、controls.reducedSteeringSpeedtrue / false存在トークン
traffic.randomVehicles整数 0..1000複数行の AIMaxCountRandom ブロックの成分 0(ランタイム検証済み、マトリクス RV-005)
traffic.humans整数 0..1000AIMaxCountRandom の成分 1
traffic.factorPercent数値 1..300
traffic.parkedVehiclesPercent数値 0..100
traffic.scheduledVehicles数値 0..1000
traffic.scheduledLinePriority数値 1..4
traffic.passengerFactorPercent数値 0..200
sound.stereo数値 0..100
sound.maxSimultaneousSounds数値 5..1000
sound.masterVolume数値 0..1
advanced.multithreadingCalculate、advanced.multithreadingTextureLoad、graphics.texture、graphics.textureFilter拒否既知だが書き込み不可 → OL_E_SETTING_NOT_WRITABLE

パッチが適用されたファイルは、エンコーディング(Windows-1252 のバイトはそのまま保持し、BOM 付きの UTF-8/UTF-16 は尊重します)と改行コードを維持します。

LaunchBehaviorSpec#

プロパティ型既定値有効な値使用安定性
RestoreConfigurationbooltrue任意使用箇所なし: セッションが所有するファイルは常に正確に復元されます。PARTIAL(保持されるが、現在は効果なし)
SuppressStaleClosecheckWarningbooltrue任意true: セッション前から存在する closecheck ファイルは開始時に完全に削除されます(SHA-256 を伴う診断 closecheck.stale-removed、失敗時は OL_E_CLOSECHECK_REMOVE_FAILED)。false: 既存の closecheck はそのまま残され、セッションによる削除対象にはなりません。セッション中に OMSI が書き込む closecheck は、復元時に常に削除されます。STABLE_BETA
StartupTimeoutSecondsint1801..600(範囲外の場合は StartSessionAsync から ArgumentOutOfRangeException。CLI の /startup-timeout は 1..600 を強制し、プロファイルでは > 0 が必要)。スーパーバイザーの開始から Running までの時間枠です。期限を過ぎると、セッションは OL_E_STARTUP_TIMEOUT(プラグインが開始済みの場合)または OL_E_PLUGIN_NOT_LOADED で失敗します。はいSTABLE_BETA
ShutdownTimeoutSecondsint30任意の int(CLI の /shutdown-timeout は 1..600)使用箇所なし: スーパーバイザーは TerminateProcess で OMSI を即座に終了させます。協調的なシャットダウンの待機はありません。PARTIAL(保持されるが、現在は効果なし)

InputSpec#

プロパティ型既定値使用安定性
KeyboardDocumentOptionalValue<string>Unset設定 → input.keyboard が unsupported(STATICALLY_PARTIAL)となり OL_E_CAPABILITY_UNAVAILABLE。キーボードの PATCH/REPLACE の実行は未実装です。PARTIAL
ControllerDocumentOptionalValue<string>Unset設定 → input.controller が unsupported となり OL_E_CAPABILITY_UNAVAILABLE。PARTIAL

DiagnosticsSpec#

プロパティ型既定値使用安定性
Logbooltruesrc/ に使用箇所はありません。ホストトレース <root>\.omsilaunch\diagnostics\<sessionId>-host.log は常に書き込まれます。PARTIAL(保持されるが、現在は効果なし)
Verboseboolfalse使用箇所なし。PARTIAL
OmsiLogAllboolfalse使用箇所なし。PARTIAL
ProcessTraceboolfalse使用箇所なし。PARTIAL
PluginTraceboolfalse使用箇所なし。PARTIAL
NativeTraceboolfalse使用箇所なし。PARTIAL

CLI フラグ /log、/logall、/omsi-logall、/verbose、/trace、/trace-process、/trace-plugin、/trace-native がこれらのブール値を設定します(/logall は Verbose、ProcessTrace、PluginTrace、NativeTrace を設定します)。これらは spec の値と OR で結合されます。

SessionPresentationSpec#

プロパティ型既定値有効な値使用安定性
SplashSplashMode int1(Managed)0 Unset(別名 Native): OMSI 自身のスプラッシュファイルには手を加えません。1 Managed: OmsiLaunch がセッションの間 GUI\NewSplashscreen_ENG.bmp と GUI\NewSplashscreen_<LANG>.bmp をオーバーレイします(終了後に正確に復元されます)。はいSTABLE_BETA(マトリクス RV-006)
LanguageOptionalValue<string>UnsetPTB/PT-BR、ENG/EN、DEU/DE、FRA/FR(大文字と小文字を区別しない)。それ以外の値はすべて ENG に正規化されます。未設定の場合は、options.cfg の [language] の値を読み取り、同じ方法で正規化します。はい(管理されたスプラッシュの場合のみ)STABLE_BETA
CustomAssetDirectoryOptionalValue<string>UnsetENG.bmp と <LANG>.bmp(640×480、24 ビット BMP)を含むディレクトリ。パスのルールを参照してください。ディレクトリがない場合: OL_E_SPLASH_ASSET_DIRECTORY_MISSING。ファイルがない場合: OL_E_SPLASH_ASSET_MISSING。形式が不正な場合: OL_E_SPLASH_FORMAT_UNSUPPORTED。未設定の場合は <root>\.omsilaunch\assets\splash(パッケージから一度だけ初期配置されます)が使われ、それがなければパッケージ同梱の assets\splash が使われます。はい(管理されたスプラッシュの場合のみ)STABLE_BETA
SuppressTrayIconboolfalsetrue の場合、CLI オーナーの単独の Windows トレイ表示を抑止します。CLI オーナーのみ。API にはトレイがありません。CLI フラグはなく、spec ファイルからのみ指定できます。STABLE_BETA

InternetTexturesSpec#

プロパティ型既定値有効な値使用安定性
ModeInternetTexturesMode int0(Native)0 Native: 何も変更しません。1 Disabled: プラグインが OMSI のプロセス内ダウンローダーを抑止します(テレメトリ internet-textures.suppressed / internet-textures.suppression.failed)。2 Override: .itx プロファイルが Texture\standard.itx としてオーバーレイされ、そのターゲットファイルと Texture\standard.ipr はセッションによる削除対象になります。はいNative: STABLE_BETA、Disabled、Override: EXPERIMENTAL
OverrideProfilePathOptionalValue<string>UnsetOverride の場合は必須です(OL_E_ITX_PROFILE_REQUIRED)。2 行 1 組で構成されるテキストファイルで、1 行目は絶対 http/https URL、2 行目はインストールルートからの相対ターゲットパスです。ターゲットパスは Texture\ コンポーネントを含み、ルート付きでなく、.. を含まず、\ で始まらず、ジャンクション/シンボリックリンクを経由しない必要があります(OL_E_ITX_PROFILE_INVALID、OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH)。パスのルールを参照してください。はいEXPERIMENTAL

SessionProfileMetadata#

プロパティ型使用安定性
Id、Name、Version、Author、PresetId、PresetIndex、PresetName、PackagePath文字列 / intプラン診断 session_profile.selected(Data["session_profile.*"])に記録されます。それ以外では使用されません。通常は手作業ではなくセッションプロファイルコンパイラーが設定します。STABLE_BETA

列挙型#

列挙型値(JSON 整数)
WorldModeNewMap = 0、SavedSituation = 1、LastMapState = 2、LastSituation = 2(廃止済みの別名。OMSI ネイティブの「前回のマップ状態」分岐であり、最新の .osn を意味することはありません)
DateTimeModeUnset = 0、Explicit = 1、System = 2
WeatherModeUnset = 0、Preset = 1、Icao = 2、RealCurrent = 3
SplashModeUnset = 0、Native = 0(別名)、Managed = 1
InternetTexturesModeNative = 0、Disabled = 1、Override = 2
PresenceUnset = 0、Set = 1
EntrypointMode(読み取り専用の Entrypoint.Mode)Unset = 0、PresentedIndex = 1、Identity = 2

宣言された範囲外の整数はシリアライザーによってそのまま格納され、未知の値として振る舞います(たとえば未知の WorldMode は NEW_MAP でも SAVED_SITUATION でもなく、world ケイパビリティを持たないプランになります。プラグインはこれを拒否しますが、CLI はいずれにせよモードを置き換えます。優先順位を参照してください)。

検証ルールと実行不可の診断#

PlanSessionAsync は LaunchValidation.Validate を実行し、続いて SessionPlanner.PlanAsync を実行します。プランが実行可能であるのは、OL_E_ で始まる診断コードが 1 つもない場合に限ります。完全な一覧は次のとおりです。

診断条件発生元
OL_E_INSTALLATION_NOT_FOUNDInstallation.RootPath が空または空白のみLaunchValidation
OL_E_DATE_TIME_APPLY_FAILEDDate.Mode = Explicit で値が設定されていない、または月/日が範囲外。Time.Mode = Explicit で値が設定されていない、または時/分/秒が範囲外LaunchValidation
OL_E_INVALID_ARGUMENTモードが Explicit でないのに Date.Value または Time.Value が設定されているLaunchValidation
OL_E_MAP_NOT_FOUNDNewMap で MapIdentity が未設定、または maps\...\global.cfg の形式でない(検証)。NewMap で識別子がインストールされていない(プランナー)両方
OL_E_ENTRYPOINT_NOT_FOUNDNewMap で EntrypointIdentity がなく、PresentedEntrypointIndex が未設定または負LaunchValidation
OL_E_ENTRYPOINT_REQUIREDNewMap、マップはインストール済み、EntrypointIdentity なし、PresentedEntrypointIndex 未設定(world.presented-entrypoint が利用不可)SessionPlanner
OL_E_SITUATION_NOT_FOUNDSavedSituation で SituationIdentity がない(検証)、または識別子がインストールされていない(プランナー)両方
OL_E_SITUATION_MAP_NOT_FOUNDSavedSituation: .osn 内で指定されたマップがインストールされていないSessionPlanner
OL_E_UNSUPPORTED_OPERATING_SYSTEM「x64 OS 上の Windows 10 以降で、x64 のホストプロセスとして動作している」という条件を満たさない(runtime.current-windows-x64)SessionPlanner
OL_E_INSTALLATION_NOT_WRITABLEルートディレクトリが存在しない、読み取り専用属性が設定されている、または plugins\ サブディレクトリがない(transaction.exact-restore)SessionPlanner
OL_E_UNSUPPORTED_BUILDOmsi.exe が存在しない、またはそのサイズ/SHA-256 がプロファイルのフィンガープリント(692EBFBF...、8 503 440 バイト)とも許可リストのハッシュ(omsi.profile.OMSI23004)とも一致しないSessionPlanner
OL_E_CAPABILITY_UNAVAILABLEWorld.Mode = LastMapState。EntrypointIdentity が設定されている。Date/Time/Year のモードが Unset でない。Weather のモードが Unset でない。PlayerVehicle のいずれかのフィールドが設定されている。Input.KeyboardDocument または Input.ControllerDocument が設定されているSessionPlanner
OL_E_VEHICLE_NOT_FOUND、OL_E_REPAINT_NOT_FOUND、OL_E_HOF_NOT_FOUNDPlayerVehicle.Model / Repaint / Hof がインストールされていない(OL_E_CAPABILITY_UNAVAILABLE に加えて)SessionPlanner
OL_E_UNKNOWN_SETTING、OL_E_SETTING_NOT_WRITABLEカタログにない / 書き込み不可の Environment キーSessionPlanner
OL_E_SESSION_PRESENTATION_INVALIDスプラッシュ/ITX プランの構築中に例外が発生した。メッセージには OL_E_SPLASH_ASSET_DIRECTORY_MISSING、OL_E_SPLASH_ASSET_MISSING、OL_E_SPLASH_FORMAT_UNSUPPORTED、OL_E_ITX_PROFILE_REQUIRED、OL_E_ITX_PROFILE_MISSING、OL_E_ITX_PROFILE_INVALID、OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH のいずれかが含まれるSessionPlanner
OL_E_RUNTIME_ARTIFACT_MISSINGプラグインクロージャーの参照(OmsiLaunchRuntimePaths)またはリリースマニフェストを読み込めない(メッセージに OL_E_RELEASE_MANIFEST_INVALID が含まれる場合がある)OmsiLaunchService.PlanSessionAsync

プラン時には検証されないもの(開始時に OL_E_START_SESSION を伴う Failed セッションとして失敗します): 設定値(OL_E_INVALID_SETTING_VALUE)、常駐プラグインの整合性(OL_E_PERMANENT_PLUGIN_*)、リースの取得可否(OL_E_INSTALLATION_BUSY)、StartupTimeoutSeconds の範囲(StartSessionAsync がスローします)。

情報提供用のプラン診断: plugin.integrity.reference(メッセージは manifest または self)、session_profile.selected。

優先順位: CLI フラグ、spec ファイル、セッションプロファイル#

CliInput.BuildSpecAsync(tools/OmsiLaunch.Cli/Program.cs)は、次の順序で有効な spec を構築します。

  1. シード = 組み込みの既定値、または指定されている場合は /spec ファイル。
  2. インストールルート = 明示的なインストール引数が指定されていればそれ、なければシードの RootPath。その後、./空 → 実行ファイルのディレクトリとし、Path.GetFullPath を適用します。明示的なインストール引数は常に spec の RootPath より優先されます。
  3. セッションプロファイル(/predefined-profile + /predefined-profile-index): プロファイルが所有するフィールドに触れる明示的な CLI 引数は OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT で拒否されます(world フィールドは NEW_MAP モードの場合のみ、/set のキーはプリセットに存在する場合、スプラッシュのフラグはプリセットに presentation がある場合、internet-textures のフラグは internet-textures がある場合、タイムアウトは behavior がある場合)。シードの World は新しいものに置き換えられ(CLI の world モードだけが残ります)、その後、プロファイルの new: ブロック(NEW_MAP の場合のみ)、settings(General へ)、presentation、internet-textures、behavior、および SessionProfile メタデータが適用されます。compatibility.maps は NEW_MAP と SAVED_SITUATION に対して強制されます。
  4. World: CLI の world モードが常に優先されます(既定の /new、/saved:<osn>、/last)。spec ファイルの World.Mode は置き換えられます。spec から保存済みシチュエーションを実行するには /saved: を渡してください。/map と /entrypoint//entrypoint-index はシードを上書きします。CLI の /entrypoint 識別子はインデックスをクリアします。/saved を /map またはエントリポイントのフラグと併用すると OL_E_INVALID_ARGUMENT になります。
  5. /date、/time、/year、/weather* は、指定された場合にシードを上書きします(system は DateTimeMode.System を選択します)。
  6. /no-vehicle は PlayerVehicle をクリアします。個々の /vehicle、/repaint、/hof、/fleet、/registration は、シードのプレイヤー車両の個々のフィールドを上書きします。
  7. /set:<key>=<value> のエントリは Environment.General に追加されます(キーは検査され、値は検査されません)。残りの 7 つのグループはシードから変更されずに引き継がれます。
  8. /startup-timeout と /shutdown-timeout は、指定された場合にのみシードを上書きします。指定されない場合は spec、次にプロファイル、最後に既定値 180 s / 30 s が適用されます。ShutdownTimeoutSeconds はスーパーバイザーにおいて ACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECT です。
  9. /splash、/splash-language、/splash-assets、/internet-textures、/internet-textures-profile は、指定された場合にシードを上書きします。SuppressTrayIcon はシードからのみ取得されます。
  10. 診断フラグはシードと OR で結合されます。

結果: 明示的な CLI フラグ > セッションプロファイル > spec ファイル > 組み込みの既定値。ただし、プロファイルが所有するフィールドと競合する CLI フラグは、上書きではなくエラーになります。

パスのルール#

パスAPI での動作CLI での動作
Installation.RootPath指定されたとおりに使われます。相対パスはファイル操作においてプロセスの作業ディレクトリを基準に解決されます。絶対パスを渡してください。リース、ジャーナル、コンテンツカタログは Path.GetFullPath で正規化します。. または空 = OmsiLaunch.exe を含むディレクトリであり、呼び出し元の作業フォルダーになることはありません。明示的なインストール引数は spec より優先されます。結果は絶対パスに変換されます。
Presentation.CustomAssetDirectory絶対パス、または Installation.RootPath からの相対パス。存在している必要があります。同じです(/splash-assets)。セッションプロファイルの assets パスはプロファイルパッケージ内に制限され、絶対パスとして格納されます。
InternetTextures.OverrideProfilePathPath.GetFullPath で解決されます。つまり、インストールルートではなくプロセスの作業ディレクトリが基準です。存在している必要があります。同じです(/internet-textures-profile)。セッションプロファイルの profile パスはパッケージ内に制限され、絶対パスとして格納されます。
ITX のターゲット行インストールルートからの相対パス。Texture\ コンポーネントを含む必要があります。ルートなし、.. なし、先頭の \ なし、ジャンクション/シンボリックリンクのコンポーネントなし。同じです。
コンテンツ識別子(MapIdentity、SituationIdentity、PlayerVehicle.*)インストール環境からの相対パスで、大文字と小文字を区別せず、/ を受け付けます。絶対パスにはなりません。同じです。

保持されるが適用されないもの#

フィールド現在の効果安定性
Installation.ExpectedExecutableSha256なし(ホストは Omsi.exe のハッシュをビルドプロファイルと照合します)PARTIAL
Behavior.RestoreConfigurationなし(復元は常に実行されます)PARTIAL
Behavior.ShutdownTimeoutSecondsなし(強制終了。ACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECT)PARTIAL
Diagnostics.*なし(ホストトレースは常に書き込まれます)PARTIAL
Input.KeyboardDocument、Input.ControllerDocument設定されているとプランが実行不可PARTIAL
Date、Time、Year(Unset 以外のモード)プランが実行不可(STATICALLY_PARTIAL)PARTIAL
Weather(Unset 以外のモード)プランが実行不可(STATICALLY_PARTIAL)PARTIAL
PlayerVehicle.*(いずれかのフィールドが設定)診断のためにコンテンツは解決されるが、プランは実行不可(STATICALLY_PARTIAL)PARTIAL
World.EntrypointIdentityプランが実行不可(RUNTIME_PARTIAL)PARTIAL
World.Mode = LastMapState / LastSituationプランが実行不可(UNSUPPORTED_FOR_CURRENT_PROFILE)UNAVAILABLE
SessionProfile出自の診断のみSTABLE_BETA