セッションプロファイル

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

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

セッションプロファイルは宣言的な YAML パッケージです。コンテンツ作成者がマップやアドオンと一緒に配布し、エンドユーザーが 1 つのコマンド(OmsiLaunch.exe /predefined-profile:<id> /predefined-profile-index:<1..5> /new)で再現可能な OmsiLaunch セッションを開始できるようにします。このページは、src/OmsiLaunch.Core/SessionProfiles.cs の SessionProfileCompiler が実装する omsilaunch.session-profile/v1 形式、CLI が適用する優先順位のルール(tools/OmsiLaunch.Cli/Program.cs の CliInput.BuildSpecAsync と RejectProfileConflicts)、およびプロファイルが書き込める設定カタログ(ConfigurationCatalog)についての規範的なリファレンスです。プロファイルでできることはすべて、CLI フラグと LaunchSpec でも行えます。プロファイルはそれらの選択をパッケージにまとめるだけです。

安定性: 解析、検証、競合検出、および settings / presentation / internet-textures / behavior ブロックは STABLE_BETA です(オフラインテスト session-profiles.strict-compiler。オーバーレイと復元の経路は RV-005 と RV-006 でランタイム検証済みです。ランタイム検証の状況を参照してください)。new.date、new.time、new.year、new.weather の各キーは、このビルドでは UNAVAILABLE です(new ブロックを参照)。

パッケージの場所と命名#

項目ルール
パッケージディレクトリ<installation root>\.omsilaunch\session-profiles\<id>\
プロファイルファイル<package>\profile.yaml(名前は完全一致、ファイルは 1 つ)
アセットパッケージディレクトリ内の任意のファイルまたはディレクトリで、presentation.splash.assets と internet-textures.profile から相対パスで参照されます
id単純なディレクトリ名である必要があります。空または空白のみであってはならず、\、/、: を含んではならず、.. という並びを含んではなりません。違反は OL_E_SESSION_PROFILE_PATH_ESCAPE です。profile.yaml 内で宣言された id の値は、ディレクトリ名とバイト単位で一致する必要があります(大文字と小文字を区別します)。一致しない場合は OL_E_SESSION_PROFILE_INVALID です。
選択/predefined-profile:<id> を /predefined-profile-index:<n> と組み合わせて指定します。インデックスは必須です。/predefined-profile-index なしの /predefined-profile は OL_E_SESSION_PROFILE_PRESET_NOT_FOUND で失敗します。
パッケージがない場合OL_E_SESSION_PROFILE_NOT_FOUND
リリースのレイアウトリリースパッケージには .omsilaunch\examples\session-profiles\rmg-leste\ に例が同梱されています(パッケージングを参照)。例はプロファイルではありません。選択できるようにするには、パッケージを .omsilaunch\session-profiles\<id>\ にコピーしてください。

プロファイルのインストールと削除は、ユーザーまたはコンテンツ作成者が行います。OmsiLaunch がパッケージに書き込んだり、コピーしたり、削除したりすることはありません。パッケージディレクトリはどのトランザクションにも含まれません。

解析ルール#

ルール動作エラー
サイズ上限profile.yaml は 256 KiB(262,144 バイト)を超えてはなりませんOL_E_SESSION_PROFILE_INVALID
ドキュメントの形ルートノードがマッピングである YAML ドキュメントがちょうど 1 つOL_E_SESSION_PROFILE_INVALID
スキーマschema は正確に omsilaunch.session-profile/v1 である必要があります(大文字と小文字を区別します)OL_E_SESSION_PROFILE_SCHEMA_UNSUPPORTED
アンカーとエイリアスドキュメント内のどこかで YAML アンカー(&name)を持つノードは、検証の前に拒否されます。したがってエイリアス(*name)が現れることはありませんOL_E_SESSION_PROFILE_INVALID("YAML anchors are not supported.")
未知のキーすべてのマッピングは閉じています。以下の表でそのコンテキストに対して記載されていないキーは拒否されます("Unknown property in <context>: <key>")。キーは大文字と小文字を区別して照合されます(Schema: は未知のキーです)。唯一の開いたマッピングは settings で、そのキーは代わりに設定カタログに照らして検証されます。OL_E_SESSION_PROFILE_INVALID
スカラーすべての末端の値はスカラーである必要があります。スカラーが期待される場所のシーケンスやマッピングは拒否されます("<field> must be a scalar.")OL_E_SESSION_PROFILE_INVALID
数値整数はインバリアントカルチャで解析されます(1、30)。settings 内の小数は区切り文字に . を使いますOL_E_SESSION_PROFILE_INVALID
日付と時刻new.date.value は DateOnly.Parse、new.time.value は TimeOnly.Parse で、いずれもインバリアントカルチャで解析されます。ISO 形式 yyyy-MM-dd と HH:mm[:ss] を使ってくださいOL_E_SESSION_PROFILE_INVALID
YAML の構文エラーパーサーのメッセージとともに報告されますOL_E_SESSION_PROFILE_INVALID("Invalid YAML: ...")
実行可能なコンテンツYAML は YamlDotNet で表現ツリーとしてのみ解析されます。タグ、カスタム型、コード実行はサポートされていません

プレーン(引用符なし)スカラー内のバックスラッシュは文字どおりの文字です。Windows のパスはバックスラッシュ 1 つで書いてください(maps\Grundorf\global.cfg)。プレーンスカラー内で二重にしたバックスラッシュは、値の中でも二重のまま残ります。同梱の例を参照してください。

キーリファレンス#

コンテキストはコンパイラーでの名前をそのまま使っています。ここに記載されたキーはすべて受け付けられ、それ以外は受け付けられません。

profile(ルートマッピング)#

キー型必須説明
schemastringはいリテラル omsilaunch.session-profile/v1。
idstringはいパッケージ識別子。ディレクトリ名と一致する必要があります。
namestringはい表示名。SessionProfileMetadata.Name で報告されます。
authorstringはい作成者。SessionProfileMetadata.Author で報告されます。
versionstringはいパッケージのバージョン文字列(自由形式。引用符で囲んでください: "1.0")。SessionProfileMetadata.Version で報告されます。
compatibilitymappingいいえcompatibility を参照してください。
newmappingいいえNEW_MAP の既定値。new を参照してください。
presetsマッピングのシーケンスはい1 から 5 個のプリセットエントリ。0 個、5 個を超える、またはシーケンスでない値は OL_E_SESSION_PROFILE_INVALID です。

compatibility#

キー型必須説明
maps文字列のシーケンスいいえこのプロファイルが有効なマップ識別子(maps\<Map>\global.cfg)。/ は \ に正規化され、比較は大文字と小文字を区別しません。リストがない、または空の場合は「任意のマップ」を意味します。空でない場合、WorldMode.NewMap に対して(有効な new.map または /map と照合)、および WorldMode.SavedSituation に対して(選択された .osn が参照するマップを、コンテンツカタログを通じて解決したものと照合)強制されます。WorldMode.LastMapState ではマップを導出できないため、空でないリストは常に失敗します。失敗: OL_E_SESSION_PROFILE_MAP_MISMATCH。

new#

このブロックは存在する場合は常に読み取られて検証されますが、spec に適用されるのは、選択された world モードが NEW_MAP(/new、CLI の既定)の場合だけです。/saved:<file.osn> の下では、このブロックは無視されます。

キー型必須適用説明
mapstringいいえはい正規化された形式 maps\<Map>\global.cfg のマップ識別子(プランニングではこの形が厳密に要求されます: maps\ で始まり、\global.cfg で終わり、.. を含まない)。WorldSpec.MapIdentity を設定します。
entrypoint-indexintegerいいえはい提示されるエントリポイントのインデックス(OMSI のエントリポイント一覧における 0 始まりの位置)。PresentedEntrypointIndex を設定し、エントリポイント識別子をクリアします。
entrypointstringいいえはい生のエントリポイント識別子。EntrypointIdentity を設定し、提示インデックスをクリアします。entrypoint-index と entrypoint の両方がある場合、最後に適用される entrypoint が優先されます。エントリポイント識別子による選択は PARTIAL(BI-001)です。プランニングは world.entrypoint-identity を RUNTIME_PARTIAL として報告し、プランは実行不可になります。entrypoint-index を使用することを推奨します。
datemappingいいえいいえ(UNAVAILABLE)new.date を参照してください。
timemappingいいえいいえ(UNAVAILABLE)new.time を参照してください。
yearintegerいいえいいえ(UNAVAILABLE)明示的な年。
weathermappingいいえいいえ(UNAVAILABLE)new.weather を参照してください。

date、time、year、weather は、DateTimeMode.Explicit / 選択された WeatherMode を持つ DateSpec、TimeSpec、YearSpec、WeatherSpec にコンパイルされます。その後、セッションプランナー(src/OmsiLaunch.Core/SessionPlanner.cs)がケイパビリティ world.explicit-date、world.explicit-time、world.explicit-year、weather を STATICALLY_PARTIAL として報告し、プラン診断に OL_E_CAPABILITY_UNAVAILABLE を追加して、プランを実行不可とします。さらにプラグインは、日付または時刻のモードが Unset でないハンドオフを拒否します(plugin.request.unsupported)。このビルドでの結果として、これら 4 つのキーのいずれかを設定したプロファイルは /plan で検証はできますが、セッションを開始することはできません(終了コード 1、OL_E_PLAN_NOT_RUNNABLE)。実行を想定したプロファイルではこれらを省いてください。

new.date#

キー型必須説明
modestringはいexplicit である必要があります(大文字と小文字を区別しません)。それ以外の値は OL_E_SESSION_PROFILE_INVALID です("date must use explicit mode.")。
valuestringはいyyyy-MM-dd。

new.time#

キー型必須説明
modestringはいexplicit である必要があります。
valuestringはいHH:mm または HH:mm:ss。

new.weather#

キー型必須説明
modestringはいpreset、icao、real のいずれか(大文字と小文字を区別しません)。それ以外: OL_E_SESSION_PROFILE_INVALID("Unsupported weather mode")。
presetstringmode: preset の場合天候プリセット名。
icaostringmode: icao の場合ICAO 観測所コード。

preset(presets の各エントリ)#

キー型必須既定値説明
indexintegerはい1 から 5 で、プロファイル内で一意です。/predefined-profile-index で選択します。重複または範囲外: OL_E_SESSION_PROFILE_INVALID。プロファイルのどこにも存在しないインデックス: OL_E_SESSION_PROFILE_PRESET_NOT_FOUND。
idstringはいプリセット識別子。SessionProfileMetadata.PresetId として報告されます。
namestringはいプリセットの表示名。SessionProfileMetadata.PresetName として報告されます。
settingsmappingいいえなしセマンティックな options.cfg 設定。設定を参照してください。キーは大文字と小文字を区別せずにカタログと照合されます。
presentationmappingいいえ継承スプラッシュの表示。presentation を参照してください。ない場合、プリセットはベースライン(/spec の値、または CLI の既定値 Managed)を継承します。
internet-texturesmappingいいえ継承internet-textures を参照してください。
behaviormappingいいえ継承タイムアウト。behavior を参照してください。

適用されるのは選択されたプリセットだけです。ただし、すべてのプリセットが解析・検証されるため、プリセット 3 にエラーがあるとプリセット 1 の要求も失敗します。

presentation#

キー型必須説明
splashmappingはいpresentation がある場合は必須です("Presentation requires splash.")。presentation.splash を参照してください。

presentation.splash#

キー型必須既定値説明
modestringはいmanaged は、セッションの間 OmsiLaunch のスプラッシュビットマップをインストールします(SplashMode.Managed)。unset または native は OMSI 自身のスプラッシュファイルを保持します(SplashMode.Unset。Native は別名)。大文字と小文字を区別しません。それ以外: OL_E_SESSION_PROFILE_INVALID。
languagestringいいえENG2 つ目のスプラッシュターゲットのロケール: PTB、ENG、DEU、FRA(別名 PT-BR、EN、DE、FR。未知のものはすべてセッション構築時に ENG に解決されます)。mode: managed の場合、セッションは GUI\NewSplashscreen_ENG.bmp と GUI\NewSplashscreen_<language>.bmp をオーバーレイします。
assetsstringいいえパッケージ同梱のアセットパッケージからの相対ディレクトリで、ENG.bmp と、英語以外の language の場合は <language>.bmp を含みます。それぞれ 640x480、24 ビット BMP である必要があります。ディレクトリはプロファイル読み込み時に存在している必要があり(OL_E_SESSION_PROFILE_ASSET_MISSING)、ファイルはセッション開始時に検証されます(OL_E_SPLASH_ASSET_MISSING、OL_E_SPLASH_FORMAT_UNSUPPORTED)。パスの制限ルールが適用されます。省略した場合は、インストール環境の .omsilaunch\assets\splash(またはパッケージ同梱の既定値)が使われます。

プロファイルは SessionPresentationSpec.SuppressTrayIcon を設定できません。/spec で設定しない限り false のままです。

internet-textures#

キー型必須説明
modestringはいnative(InternetTexturesMode.Native、OMSI は通常どおり動作)、disabled(Disabled、プロファイル済みのプロセス内ダウンローダーをセッションの間抑止)、override(Override、セッションスコープの .itx プロファイルを Texture\standard.itx としてインストール)。大文字と小文字を区別しません。それ以外: OL_E_SESSION_PROFILE_INVALID。
profilestringoverride の場合は必須.itx ファイルのパッケージからの相対パス。override でキーがない場合: OL_E_SESSION_PROFILE_INVALID。ファイルがない場合: OL_E_SESSION_PROFILE_ASSET_MISSING。パスの制限ルールが適用されます。ファイルは http:// または https:// の URL を持つ URL / target の行ペアで構成されている必要があり(そうでなければ OL_E_ITX_PROFILE_INVALID)、すべてのターゲットは再解析ポイントを経由せずにインストール環境の Texture\ ディレクトリ配下に解決される必要があります(OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH)。列挙されたターゲットと Texture\standard.ipr はセッションによる削除対象になります(トランザクションとリカバリを参照)。

behavior#

キー型必須既定値説明
startup-timeoutinteger(秒)いいえ180プロセス開始から Running までに許容される時間。プロファイル読み込み時には正の値である必要があり、さらにセッション開始時には 1 から 600 である必要があります(そうでなければ OL_E_START_SESSION)。LaunchBehaviorSpec.StartupTimeoutSeconds に対応します。
shutdown-timeoutinteger(秒)いいえ30LaunchBehaviorSpec.ShutdownTimeoutSeconds に対応します。ACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECT: スーパーバイザーは OMSI を直接終了させ、この値を読み取ることはありません。

behavior ブロックがある場合、両方のタイムアウトが設定され(指定値または既定値)、ベースラインの LaunchBehaviorSpec 全体を置き換えます。これには RestoreConfiguration と SuppressStaleClosecheckWarning も含まれ、これらは既定値(true、true)に戻ります。

設定#

settings のキーは ConfigurationCatalog(src/OmsiLaunch.Configuration/ConfigurationCatalog.cs)のセマンティックな名前です。コンパイラーは、キーが存在し(OL_E_SESSION_PROFILE_SETTING_UNKNOWN)、書き込み可能である(OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLE)場合にのみ受け付けます。値は文字列として格納され、セッションがオーバーレイを構築するときに options.cfg のパッチに変換されます。そのため、無効な値が検出されるのはプロファイル読み込み時ではなく StartSessionAsync の時点であり、メッセージに OL_E_INVALID_SETTING_VALUE: <key> を含む OL_E_START_SESSION でセッションが失敗します。以下の設定はすべて options.cfg に書き込みます。いずれもセッションスコープであり、セッション終了後に正確に復元されます。

値の形式:

  • bool は true または false です(大文字と小文字を区別しません)。存在トークンの場合、トークンが追加または削除されます。反転トークン(no_*)の場合、true は否定トークンを削除します。
  • int / decimal は範囲に照らして検証されます。除数を持つ値は割った値で格納されます(たとえば graphics.minObjectScreenPercent: 5 は 0.05 を書き込みます)。
  • string はそのまま書き込まれます。
設定キーoptions.cfg トークン型範囲 / 値エビデンス
general.languagelanguagestring任意STATICALLY_VALIDATED
general.radioradiostring任意STATICALLY_VALIDATED
general.alternateViewaltViewbool(存在)STATICALLY_VALIDATED
general.showOwnDriversee_own_driverbool(存在)STATICALLY_VALIDATED
general.showErrorMessagesshowerrormessagesbool(存在)STATICALLY_VALIDATED
general.autoSavenoAutoSavebool(反転した存在)STATICALLY_VALIDATED
general.currentTimeuseActTimebool(存在)STATICALLY_VALIDATED
general.currentDateuseActDatebool(存在)STATICALLY_VALIDATED
general.currentYearuseActYearbool(存在)STATICALLY_VALIDATED
graphics.screenRatioscreenratiostring任意STATICALLY_VALIDATED
graphics.maxFPSmaxFPSint10..200STATICALLY_VALIDATED
graphics.tileDistanceperformance_tiledistmaxint1..20STATICALLY_VALIDATED
graphics.maxObjectDistanceMetersperformance_maxObjDistint20..5000STATICALLY_VALIDATED
graphics.minObjectScreenPercentperformance_minObjSizedecimal0..10、/100 で格納STATICALLY_VALIDATED
graphics.minReflectionObjectScreenPercentperformance_minObjSizeRefldecimal0..50、/100 で格納STATICALLY_VALIDATED
graphics.maxObjectComplexitymaxcomplexityint0..3STATICALLY_VALIDATED
graphics.maxMapComplexitymaxcomplexity_mapint0..2STATICALLY_VALIDATED
graphics.sunGlowsunglowbool(存在)STATICALLY_VALIDATED
graphics.loadAllTilesloadAllTilesbool(存在)STATICALLY_VALIDATED
graphics.stencilBufferno_stencilbufferbool(反転した存在)STATICALLY_VALIDATED
graphics.stencilShadowsshadow_stencilbool、on / off として書き込みSTATICALLY_VALIDATED
graphics.rainReflectionsno_rain_reflbool(反転した存在)STATICALLY_VALIDATED
graphics.humansInRainReflectionsno_humans_on_rain_reflbool(反転した存在)STATICALLY_VALIDATED
graphics.realTimeReflectionsperformance_realreflexionsstringeconomy または fullSTATICALLY_PARTIAL
graphics.particlessmokesystems(4 行のブロック)enabled,maxPerEmitter,playerVehicleOnly,inReflections(bool,int>=0,bool,bool)STATICALLY_VALIDATED
simulation.collisionno_collisionbool(反転した存在)STATICALLY_VALIDATED
simulation.collisionTerrainno_collision_terrainbool(反転した存在)STATICALLY_VALIDATED
simulation.collisionVehiclesno_collision_vehToVehbool(反転した存在)STATICALLY_VALIDATED
simulation.collisionPedestriansno_collision_pedastriansbool(反転した存在)STATICALLY_VALIDATED
simulation.ticketSellingticketsellingint0..2STATICALLY_VALIDATED
simulation.maintenancewear_lifespanint0..4STATICALLY_VALIDATED
simulation.disableAutomaticScheduleAnalysisPopupno_schedAnaPopUpbool(存在)STATICALLY_VALIDATED
simulation.ticketInfono_ticketinfo_visiblebool(反転した存在)STATICALLY_VALIDATED
simulation.automaticClutchno_automaticClutchbool(反転した存在)STATICALLY_VALIDATED
advanced.reducedMultithreadingno_multithreading_calculate + no_multithreading_texloadbool(両方とも存在トークン)RUNTIME_PROVEN
view.driverSmoothdriverview_smoothbool(存在)STATICALLY_VALIDATED
view.driverMovingdriverview_movingbool(存在)STATICALLY_VALIDATED
controls.autoCenterautoCenterbool(存在)STATICALLY_VALIDATED
controls.reducedSteeringSpeedredSteerSpdbool(存在)STATICALLY_VALIDATED
traffic.randomVehiclesAIMaxCountRandom の成分 0int0..1000STATICALLY_VALIDATED(RV-005 ランタイム)
traffic.humansAIMaxCountRandom の成分 1int0..1000STATICALLY_VALIDATED(RV-005 ランタイム)
traffic.factorPercentAIUnschedFactorint1..300STATICALLY_VALIDATED
traffic.parkedVehiclesPercentAIMaxCountParkedint0..100STATICALLY_VALIDATED
traffic.scheduledVehiclesAIMaxCountScheduledint0..1000STATICALLY_VALIDATED
traffic.scheduledLinePriorityAIPriorityScheduledint1..4STATICALLY_VALIDATED
traffic.passengerFactorPercentAIPassFactorint0..200STATICALLY_VALIDATED
sound.stereosound_stereoint0..100STATICALLY_VALIDATED
sound.maxSimultaneousSoundssound_maxcountint5..1000STATICALLY_VALIDATED
sound.masterVolumesound_vol_masterdecimal0..1STATICALLY_VALIDATED

カタログに存在するが書き込み不可のエントリ(OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLE で拒否されます): advanced.multithreadingCalculate、advanced.multithreadingTextureLoad(advanced.reducedMultithreading に置き換えられています)、graphics.texture、graphics.textureFilter。

パスの制限#

presentation.splash.assets と internet-textures.profile は Confined(package root, value) によって解決されます。

  1. ルート付きのパス(C:\...)、\ で始まるパス、および .. に等しいパスコンポーネントを含むパスは拒否されます。
  2. 完全パスが算出され、それはパッケージディレクトリで始まる必要があります。
  3. パッケージルートより下にある既存のすべてのコンポーネント(最終パスを含む)について、ReparsePoint 属性が検査されます。そのパス上のどこかにジャンクション、ディレクトリのシンボリックリンク、ファイルのシンボリックリンクがあると拒否されます。検査できないコンポーネント(IOException / UnauthorizedAccessException)も同様に拒否されます。

3 つの失敗はいずれも OL_E_SESSION_PROFILE_PATH_ESCAPE です。同じ再解析ポイントのルールが、セッション構築時に Texture\ 配下の .itx ターゲットにも適用されます。

優先順位と上書きの競合#

CliInput.BuildSpecAsync は次の順序で spec を組み立てます。

  1. 既定値(NEW_MAP、すべて未設定、タイムアウト 180 s / 30 s)。
  2. /spec:<file.json> が指定されている場合は、既定値を完全に置き換えます。
  3. インストールルート: 明示的なインストール引数は spec の RootPath より優先されます。. は実行ファイルを含むディレクトリを意味します。
  4. プロファイル(/predefined-profile + /predefined-profile-index): パッケージが読み込まれ、何かがマージされる前に、生の CLI 引数に対して RejectProfileConflicts が実行されます。次に、シードの world ブロックが、選択されたモードの空の WorldSpec にリセットされ(プロファイルを使う場合、/spec の world は破棄されます)、SessionProfileCompiler.Apply がプロファイルをシードに重ねます: new(NEW_MAP の場合のみ)、settings(シードの Environment.General の上にマージされ、キーごとにプロファイルが優先)、および presentation、internet-textures、behavior(それぞれ、プリセットが定義している場合にのみシードのブロックを置き換えます)。
  5. 残りの CLI 引数がその上に重ねられます: /map、/entrypoint、/entrypoint-index、/date、/time、/year、天候フラグ、車両フラグ、/set、スプラッシュフラグ、internet-textures フラグ、/startup-timeout、/shutdown-timeout。CLI のタイムアウトは指定された場合にのみ適用され、指定されない場合は spec/プロファイル/既定値の値がそのまま使われます。
  6. NEW_MAP 以外のモードに対する互換性チェック(ValidateCompatibility)。

選択されたプロファイルが所有するフィールドを対象とする CLI 引数は競合であり、OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT(終了コード 2、カテゴリ invalid_argument)で拒否されます。チェックは値単位ではなくフィールド単位です。プロファイル自身と同じ値を繰り返し指定しても競合になります。

CLI 引数プロファイルが次を定義している場合に競合対象モード
/mapnew.mapNEW_MAP
/entrypoint または /entrypoint-indexnew.entrypoint または new.entrypoint-indexNEW_MAP
/datenew.dateNEW_MAP
/timenew.timeNEW_MAP
/yearnew.yearNEW_MAP
/weather、/weather-icao、/weather-realnew.weatherNEW_MAP
/set:<key>=...プリセットの settings 内の同じ <key>(大文字と小文字を区別しない)すべて
/splash、/splash-language、/splash-assetspresentation(内容を問わず)すべて
/internet-textures、/internet-textures-profileinternet-textures(内容を問わず)すべて
/startup-timeout、/shutdown-timeoutbehavior(内容を問わず)すべて

競合にならないもの: プリセットが定義していない /set のキー(追加されます)、車両フラグ(/vehicle、/repaint、/hof、/fleet、/registration、/no-vehicle。プロファイルはプレイヤー車両を定義できません)、および /saved の下での world 引数(そこでは new ブロックは適用されません)。/map、/entrypoint、/entrypoint-index は、プロファイルの有無にかかわらず /saved と併用すると無効です(OL_E_INVALID_ARGUMENT)。

エラーコード#

コード発生条件CLI の終了コード
OL_E_SESSION_PROFILE_NOT_FOUND<root>\.omsilaunch\session-profiles\<id>\profile.yaml が存在しない2
OL_E_SESSION_PROFILE_PATH_ESCAPEid が単純なディレクトリ名でない。assets / profile がパッケージの外に出る、または再解析ポイントを経由する2
OL_E_SESSION_PROFILE_SCHEMA_UNSUPPORTEDschema が omsilaunch.session-profile/v1 でない2
OL_E_SESSION_PROFILE_INVALIDサイズ上限、ドキュメントの形、アンカー、未知のキー、必須キーの欠落、スカラーでない値、不正な数値/日付/時刻、id の不一致、プリセットの個数/インデックスのルール、サポートされていないモードの語、正でないタイムアウト、splash のない presentation、profile のない override2
OL_E_SESSION_PROFILE_PRESET_NOT_FOUND/predefined-profile-index がない、1..5 の範囲外、またはその index を持つプリセットがない2
OL_E_SESSION_PROFILE_SETTING_UNKNOWNsettings のキーがカタログにない2
OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLEsettings のキーがカタログにあるが読み取り専用2
OL_E_SESSION_PROFILE_ASSET_MISSINGassets ディレクトリまたは profile ファイルがパッケージ内に存在しない2
OL_E_SESSION_PROFILE_MAP_MISMATCHcompatibility.maps が空でなく、有効なマップが一覧にない(または導出できない)2
OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT明示的な CLI 引数がプロファイルの所有するフィールドを対象としている2

これらはすべて、コマンドラインのコンパイル中、プランニングの前に発生します。いずれも SessionProfileException(競合の場合は ArgumentException)であり、セッションが開始されることはありません。完全なカタログはエラーに、終了コードは終了コードにあります。

API におけるプロファイルの見え方#

読み込みに成功すると、spec は LaunchSpec.SessionProfile に SessionProfileMetadata レコードを持ちます。

フィールド取得元
Idid
Namename
Versionversion
Authorauthor
PresetId選択されたプリセットの id
PresetIndex選択されたプリセットの index
PresetName選択されたプリセットの name
PackagePathパッケージディレクトリの絶対パス

プランナーは、このような spec から構築されたすべての SessionPlan に、情報提供用の診断 session_profile.selected を追加します。データキーは session_profile.id、session_profile.name、session_profile.version、session_profile.author、session_profile.preset_id、session_profile.preset_index、session_profile.preset_name、session_profile.path です。これは実行可能性には影響しません。公開 API を直接使うインテグレーターは、OmsiLaunch.Core の SessionProfileCompiler.Load と SessionProfileCompiler.Apply を呼び出せます。YAML の表現が OmsiLaunch.Api に渡ることはありません。

例#

例 1: 設定のみのプロファイル、プリセット 1 つ#

<root>\.omsilaunch\session-profiles\quiet-evening\profile.yaml

schema: omsilaunch.session-profile/v1
id: quiet-evening
name: Quiet evening
author: Example author
version: "1.0"
presets:
  - index: 1
    id: default
    name: Low traffic, no autosave
    settings:
      traffic.randomVehicles: 40
      traffic.humans: 60
      general.autoSave: false
      sound.masterVolume: 0.6

実行: OmsiLaunch.exe /predefined-profile:quiet-evening /predefined-profile-index:1 /new /map:maps\Grundorf\global.cfg /entrypoint-index:0。プロファイルが new ブロックを定義していないため、マップとエントリポイントはコマンドラインから指定します。/set:graphics.maxFPS=60 を追加することは許可されますが、/set:traffic.humans=10 を追加すると競合になります。

例 2: マップに紐づき、3 つのプリセットと同梱アセットを持つプロファイル#

<root>\.omsilaunch\session-profiles\grundorf-tour\profile.yaml。パッケージ内に assets\splash\ENG.bmp、assets\splash\DEU.bmp、textures\offline.itx があります。

schema: omsilaunch.session-profile/v1
id: grundorf-tour
name: Grundorf guided tour
author: Example team
version: "2.1"
compatibility:
  maps:
    - maps\Grundorf\global.cfg
new:
  map: maps\Grundorf\global.cfg
  entrypoint-index: 0
presets:
  - index: 1
    id: low
    name: Low-end PC
    settings:
      graphics.maxFPS: 30
      graphics.tileDistance: 3
      graphics.rainReflections: false
    presentation:
      splash:
        mode: managed
        language: DEU
        assets: assets\splash
    internet-textures:
      mode: disabled
    behavior:
      startup-timeout: 300
  - index: 2
    id: mid
    name: Mid-range PC
    settings:
      graphics.maxFPS: 60
      graphics.tileDistance: 6
    internet-textures:
      mode: override
      profile: textures\offline.itx
  - index: 3
    id: high
    name: High-end PC
    settings:
      graphics.maxFPS: 120
      graphics.tileDistance: 10
      advanced.reducedMultithreading: false
    presentation:
      splash:
        mode: native

実行: OmsiLaunch.exe /predefined-profile:grundorf-tour /predefined-profile-index:2 /new。/saved:situations\mytrip.osn を使う場合、new ブロックはスキップされ、.osn は maps\Grundorf\global.cfg を参照している必要があります。

同梱の例#

リリースには docs/examples/session-profiles/rmg-leste/profile.yaml(表示)が同梱されています。これは構文的に有効で、スキーマに適合し、エラーなく読み込まれます。ただし、次の 2 つの性質により、このビルドでは変更なしでセッションを開始することはできません。

  1. new.date、new.time、new.weather を設定しており、これらはプランを実行不可にします(new ブロックを参照)。
  2. パスの値がバックスラッシュを二重にしたプレーンスカラー(maps\\RMG Leste\\global.cfg)です。YAML はそれらを二重のまま保持し、マップ識別子はテキストとして比較される(/ から \ への正規化のみ行った後)ため、new.map と compatibility.maps はカタログの識別子 maps\RMG Leste\global.cfg と一致しません(プランニング時に OL_E_MAP_NOT_FOUND)。assets の値は、Windows のパス正規化が二重の区切り文字を 1 つにまとめるため、それでも解決されます。

このビルドで実行可能な形は次のとおりです。

schema: omsilaunch.session-profile/v1
id: rmg-leste
name: RMG Leste
author: Equipe RMG
version: "1.0"
compatibility:
  maps:
    - maps\RMG Leste\global.cfg
new:
  map: maps\RMG Leste\global.cfg
  entrypoint-index: 3
presets:
  - index: 1
    id: weak
    name: PC fraco
    settings:
      graphics.maxFPS: 30
      graphics.tileDistance: 3
    presentation:
      splash:
        mode: managed
        language: PTB
        assets: assets\splash
    internet-textures:
      mode: disabled
  - index: 2
    id: medium
    name: PC medio
    settings:
      graphics.maxFPS: 40
      graphics.tileDistance: 5
  - index: 3
    id: strong
    name: PC forte
    settings:
      graphics.maxFPS: 60
      graphics.tileDistance: 8