Profils de session

Documentation de la version v0.1.0-beta.3Voir la source sur GitHub

Traduction de la page originale en anglais d’OmsiLaunch 0.1.0-beta3. La page anglaise fait foi : en cas de divergence, la page anglaise et le code prévalent.

Un profil de session est un paquet YAML déclaratif qu'un auteur de contenu livre avec une carte ou un add-on afin que les utilisateurs finaux puissent démarrer une session OmsiLaunch reproductible avec une seule commande (OmsiLaunch.exe /predefined-profile:<id> /predefined-profile-index:<1..5> /new). Cette page est la référence normative du format omsilaunch.session-profile/v1 tel qu'implémenté par SessionProfileCompiler dans src/OmsiLaunch.Core/SessionProfiles.cs, des règles de priorité appliquées par la CLI (CliInput.BuildSpecAsync et RejectProfileConflicts dans tools/OmsiLaunch.Cli/Program.cs) et du catalogue de paramètres qu'un profil peut écrire (ConfigurationCatalog). Tout ce qu'un profil peut faire, les options de la CLI et le LaunchSpec peuvent aussi le faire ; un profil ne fait qu'empaqueter ces choix.

Stabilité : STABLE_BETA pour l'analyse, la validation, la détection des conflits et les blocs settings / presentation / internet-textures / behavior (test hors ligne session-profiles.strict-compiler ; le chemin d'overlay et de restauration est validé à l'exécution par RV-005 et RV-006, voir l'état de la validation à l'exécution). Les clés new.date, new.time, new.year et new.weather sont UNAVAILABLE dans ce build (voir Le bloc new).

Emplacement et nommage du paquet#

ÉlémentRègle
Répertoire du paquet<installation root>\.omsilaunch\session-profiles\<id>\
Fichier de profil<package>\profile.yaml (nom exact, un seul fichier)
RessourcesTous fichiers ou répertoires situés dans le répertoire du paquet, référencés par un chemin relatif depuis presentation.splash.assets et internet-textures.profile
idDoit être un simple nom de répertoire : il ne doit pas être vide ni composé uniquement d'espaces, ne doit pas contenir \, / ou :, et ne doit pas contenir la séquence ... Les violations donnent OL_E_SESSION_PROFILE_PATH_ESCAPE. La valeur id déclarée dans profile.yaml doit être identique octet pour octet au nom du répertoire (sensible à la casse) ; sinon OL_E_SESSION_PROFILE_INVALID.
Sélection/predefined-profile:<id> accompagné de /predefined-profile-index:<n>. L'index est obligatoire : /predefined-profile sans /predefined-profile-index échoue avec OL_E_SESSION_PROFILE_PRESET_NOT_FOUND.
Paquet manquantOL_E_SESSION_PROFILE_NOT_FOUND
Disposition de la versionLe paquet de version livre un exemple sous .omsilaunch\examples\session-profiles\rmg-leste\ (voir empaquetage). Les exemples ne sont pas des profils : copiez un paquet dans .omsilaunch\session-profiles\<id>\ pour le rendre sélectionnable.

Un profil est installé et supprimé par l'utilisateur ou l'auteur du contenu. OmsiLaunch n'écrit jamais dans un paquet, ne le copie jamais et ne le supprime jamais. Le répertoire du paquet ne fait partie d'aucune transaction.

Règles d'analyse#

RègleComportementErreur
Limite de tailleprofile.yaml ne doit pas dépasser 256 KiB (262,144 octets)OL_E_SESSION_PROFILE_INVALID
Forme du documentExactement un document YAML dont le nœud racine est un mappingOL_E_SESSION_PROFILE_INVALID
Schémaschema doit valoir exactement omsilaunch.session-profile/v1 (sensible à la casse)OL_E_SESSION_PROFILE_SCHEMA_UNSUPPORTED
Ancres et aliasTout nœud portant une ancre YAML (&name) où que ce soit dans le document est rejeté avant la validation ; des alias (*name) ne peuvent donc pas apparaîtreOL_E_SESSION_PROFILE_INVALID (« YAML anchors are not supported. »)
Clés inconnuesChaque mapping est fermé : une clé qui n'est pas listée pour son contexte dans les tableaux ci-dessous est rejetée (« Unknown property in <context>: <key> »). Les clés sont comparées en respectant la casse (Schema: est une clé inconnue). Le seul mapping ouvert est settings, dont les clés sont validées par rapport au catalogue de paramètres.OL_E_SESSION_PROFILE_INVALID
ScalairesChaque valeur feuille doit être un scalaire ; les séquences et mappings placés là où un scalaire est attendu sont rejetés (« <field> must be a scalar. »)OL_E_SESSION_PROFILE_INVALID
NombresLes entiers sont analysés avec la culture invariante (1, 30) ; les décimaux dans settings utilisent . comme séparateurOL_E_SESSION_PROFILE_INVALID
Dates et heuresnew.date.value est analysée par DateOnly.Parse et new.time.value par TimeOnly.Parse, toutes deux avec la culture invariante ; utilisez les formes ISO yyyy-MM-dd et HH:mm[:ss]OL_E_SESSION_PROFILE_INVALID
Erreurs de syntaxe YAMLSignalées avec le message de l'analyseurOL_E_SESSION_PROFILE_INVALID (« Invalid YAML: ... »)
Contenu exécutableLe YAML est analysé avec YamlDotNet uniquement en arbre de représentation ; aucun tag, type personnalisé ni exécution de code n'est pris en charge

Les barres obliques inverses dans les scalaires simples (non entre guillemets) sont des caractères littéraux. Écrivez les chemins Windows avec une seule barre oblique inverse (maps\Grundorf\global.cfg). Une barre oblique inverse doublée dans un scalaire simple reste doublée dans la valeur ; voir L'exemple livré.

Référence des clés#

Les contextes sont nommés exactement comme le compilateur les nomme. Chaque clé listée ici est acceptée ; aucune autre ne l'est.

profile (mapping racine)#

CléTypeObligatoireDescription
schemachaîneouiLittéral omsilaunch.session-profile/v1.
idchaîneouiIdentifiant du paquet ; doit être égal au nom du répertoire.
namechaîneouiNom d'affichage ; reporté dans SessionProfileMetadata.Name.
authorchaîneouiAuteur ; reporté dans SessionProfileMetadata.Author.
versionchaîneouiChaîne de version du paquet (forme libre, mettez-la entre guillemets : "1.0") ; reportée dans SessionProfileMetadata.Version.
compatibilitymappingnonVoir compatibility.
newmappingnonValeurs par défaut NEW_MAP. Voir new.
presetsséquence de mappingsoui1 à 5 entrées de préréglage. Zéro, plus de cinq, ou une valeur qui n'est pas une séquence donne OL_E_SESSION_PROFILE_INVALID.

compatibility#

CléTypeObligatoireDescription
mapsséquence de chaînesnonIdentités de carte (maps\<Map>\global.cfg) pour lesquelles ce profil est valide. / est normalisé en \ ; la comparaison est insensible à la casse. Une liste absente ou vide signifie « n'importe quelle carte ». Lorsqu'elle n'est pas vide, elle est appliquée pour WorldMode.NewMap (par rapport au new.map effectif ou à /map) et pour WorldMode.SavedSituation (par rapport à la carte référencée par le .osn sélectionné, résolue via le catalogue de contenu). Pour WorldMode.LastMapState, aucune carte ne peut être déduite, si bien qu'une liste non vide échoue toujours. Échec : OL_E_SESSION_PROFILE_MAP_MISMATCH.

new#

Le bloc est lu et validé dès qu'il est présent, mais il n'est appliqué à la spécification que lorsque le mode de monde sélectionné est NEW_MAP (/new, la valeur par défaut de la CLI). Sous /saved:<file.osn>, le bloc est ignoré.

CléTypeObligatoireAppliquéeDescription
mapchaînenonouiIdentité de carte sous la forme normalisée maps\<Map>\global.cfg (la planification exige exactement cette forme : commence par maps\, se termine par \global.cfg, pas de ..). Définit WorldSpec.MapIdentity.
entrypoint-indexentiernonouiIndex du point d'entrée présenté (position à partir de 0 dans la liste des points d'entrée d'OMSI). Définit PresentedEntrypointIndex et efface toute identité de point d'entrée.
entrypointchaînenonouiIdentité brute du point d'entrée. Définit EntrypointIdentity et efface l'index présenté. Si entrypoint-index et entrypoint sont tous deux présents, entrypoint l'emporte car il est appliqué en dernier. La sélection par identité de point d'entrée est PARTIAL (BI-001) : la planification signale world.entrypoint-identity comme RUNTIME_PARTIAL et le plan n'est pas exécutable. Préférez entrypoint-index.
datemappingnonnon (UNAVAILABLE)Voir new.date.
timemappingnonnon (UNAVAILABLE)Voir new.time.
yearentiernonnon (UNAVAILABLE)Année explicite.
weathermappingnonnon (UNAVAILABLE)Voir new.weather.

date, time, year et weather sont compilés en DateSpec, TimeSpec, YearSpec et WeatherSpec avec DateTimeMode.Explicit / le WeatherMode sélectionné. Le planificateur de session (src/OmsiLaunch.Core/SessionPlanner.cs) signale alors les capacités world.explicit-date, world.explicit-time, world.explicit-year et weather comme STATICALLY_PARTIAL, ajoute OL_E_CAPABILITY_UNAVAILABLE aux diagnostics du plan et marque le plan comme non exécutable. Le plugin rejette en outre un handoff dont le mode de date ou d'heure ne vaut pas Unset (plugin.request.unsupported). Conséquence pour ce build : un profil qui définit l'une de ces quatre clés peut être validé avec /plan mais ne peut pas démarrer de session (code de sortie 1, OL_E_PLAN_NOT_RUNNABLE). Omettez-les dans les profils destinés à être exécutés.

new.date#

CléTypeObligatoireDescription
modechaîneouiDoit valoir explicit (insensible à la casse). Toute autre valeur donne OL_E_SESSION_PROFILE_INVALID (« date must use explicit mode. »).
valuechaîneouiyyyy-MM-dd.

new.time#

CléTypeObligatoireDescription
modechaîneouiDoit valoir explicit.
valuechaîneouiHH:mm ou HH:mm:ss.

new.weather#

CléTypeObligatoireDescription
modechaîneouipreset, icao ou real (insensible à la casse). Toute autre valeur : OL_E_SESSION_PROFILE_INVALID (« Unsupported weather mode »).
presetchaînelorsque mode: presetNom du préréglage météo.
icaochaînelorsque mode: icaoCode de station OACI.

preset (chaque entrée de presets)#

CléTypeObligatoireValeur par défautDescription
indexentieroui1 à 5, unique dans le profil. Sélectionné avec /predefined-profile-index. Doublon ou hors plage : OL_E_SESSION_PROFILE_INVALID ; un index qui n'existe nulle part dans le profil : OL_E_SESSION_PROFILE_PRESET_NOT_FOUND.
idchaîneouiIdentifiant du préréglage ; reporté dans SessionProfileMetadata.PresetId.
namechaîneouiNom d'affichage du préréglage ; reporté dans SessionProfileMetadata.PresetName.
settingsmappingnonaucuneParamètres sémantiques de options.cfg, voir Paramètres. Les clés sont comparées au catalogue sans tenir compte de la casse.
presentationmappingnonhéritéePrésentation de l'écran de démarrage, voir presentation. En son absence, le préréglage hérite de la base (valeur de /spec ou valeur par défaut de la CLI, Managed).
internet-texturesmappingnonhéritéeVoir internet-textures.
behaviormappingnonhéritéeTimeouts, voir behavior.

Seul le préréglage sélectionné est appliqué. Chaque préréglage est néanmoins analysé et validé, si bien qu'une erreur dans le préréglage 3 fait échouer une demande portant sur le préréglage 1.

presentation#

CléTypeObligatoireDescription
splashmappingouiObligatoire lorsque presentation est présent (« Presentation requires splash. »). Voir presentation.splash.

presentation.splash#

CléTypeObligatoireValeur par défautDescription
modechaîneouimanaged installe les bitmaps d'écran de démarrage d'OmsiLaunch pour la session (SplashMode.Managed). unset ou native préserve les fichiers d'écran de démarrage propres à OMSI (SplashMode.Unset ; Native est un alias). Insensible à la casse. Toute autre valeur : OL_E_SESSION_PROFILE_INVALID.
languagechaînenonENGLangue de la seconde cible d'écran de démarrage : PTB, ENG, DEU, FRA (alias PT-BR, EN, DE, FR ; toute valeur inconnue est résolue en ENG lors de la construction de la session). Avec mode: managed, la session applique en overlay GUI\NewSplashscreen_ENG.bmp et GUI\NewSplashscreen_<language>.bmp.
assetschaînenonressources du paquetRépertoire relatif au paquet, contenant ENG.bmp et, pour une language autre que l'anglais, <language>.bmp ; chacun doit être un BMP 640x480 en 24 bits. Le répertoire doit exister au chargement du profil (OL_E_SESSION_PROFILE_ASSET_MISSING) ; les fichiers sont validés au démarrage de la session (OL_E_SPLASH_ASSET_MISSING, OL_E_SPLASH_FORMAT_UNSUPPORTED). Les règles de confinement des chemins s'appliquent. En cas d'omission, le .omsilaunch\assets\splash de l'installation (ou les valeurs par défaut du paquet) est utilisé.

Un profil ne peut pas définir SessionPresentationSpec.SuppressTrayIcon ; la valeur reste false sauf si un /spec la définit.

internet-textures#

CléTypeObligatoireDescription
modechaîneouinative (InternetTexturesMode.Native, OMSI se comporte normalement), disabled (Disabled, le téléchargeur intégré au processus, profilé, est neutralisé pour la session), override (Override, un profil .itx limité à la session est installé sous Texture\standard.itx). Insensible à la casse ; toute autre valeur : OL_E_SESSION_PROFILE_INVALID.
profilechaîneobligatoire pour overrideChemin relatif au paquet du fichier .itx. Clé manquante avec override : OL_E_SESSION_PROFILE_INVALID ; fichier manquant : OL_E_SESSION_PROFILE_ASSET_MISSING. Les règles de confinement des chemins s'appliquent. Le fichier doit être composé de paires de lignes URL / target avec des URL http:// ou https:// (sinon OL_E_ITX_PROFILE_INVALID) et chaque cible doit se résoudre sous le répertoire Texture\ de l'installation sans traverser de point d'analyse (reparse point) (OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH). Les cibles listées et Texture\standard.ipr deviennent des suppressions de session (voir transactions et récupération).

behavior#

CléTypeObligatoireValeur par défautDescription
startup-timeoutentier (secondes)non180Temps accordé entre le démarrage du processus et Running. Doit être positif au chargement du profil ; la session exige en outre une valeur de 1 à 600 au démarrage (sinon OL_E_START_SESSION). Correspond à LaunchBehaviorSpec.StartupTimeoutSeconds.
shutdown-timeoutentier (secondes)non30Correspond à LaunchBehaviorSpec.ShutdownTimeoutSeconds. ACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECT : le superviseur termine OMSI directement et ne lit jamais cette valeur.

Lorsque le bloc behavior est présent, les deux timeouts sont définis (valeur fournie ou valeur par défaut) et remplacent entièrement le LaunchBehaviorSpec de base, y compris RestoreConfiguration et SuppressStaleClosecheckWarning, qui reviennent à leurs valeurs par défaut (true, true).

Paramètres#

Les clés de settings sont les noms sémantiques de ConfigurationCatalog (src/OmsiLaunch.Configuration/ConfigurationCatalog.cs). Le compilateur n'accepte une clé que si elle existe (OL_E_SESSION_PROFILE_SETTING_UNKNOWN) et qu'elle est accessible en écriture (OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLE). Les valeurs sont stockées sous forme de chaînes et converties en correctif de options.cfg lorsque la session construit ses overlays ; une valeur invalide est donc détectée lors de StartSessionAsync, et non au chargement du profil, et fait échouer la session avec OL_E_START_SESSION, dont le message porte OL_E_INVALID_SETTING_VALUE: <key>. Chaque paramètre ci-dessous écrit dans options.cfg ; tous sont limités à la session et restaurés à l'identique après la session.

Formes de valeurs :

  • bool vaut true ou false (insensible à la casse). Pour les jetons de présence, le jeton est ajouté ou retiré ; pour les jetons inversés (no_*), true retire le jeton négatif.
  • int / decimal sont validés par rapport à la plage ; les valeurs avec un diviseur sont stockées divisées (par exemple, graphics.minObjectScreenPercent: 5 écrit 0.05).
  • string est écrite telle quelle.
Clé de paramètreJeton options.cfgTypePlage / valeursPreuves
general.languagelanguagestringtoute valeurSTATICALLY_VALIDATED
general.radioradiostringtoute valeurSTATICALLY_VALIDATED
general.alternateViewaltViewbool (présence)STATICALLY_VALIDATED
general.showOwnDriversee_own_driverbool (présence)STATICALLY_VALIDATED
general.showErrorMessagesshowerrormessagesbool (présence)STATICALLY_VALIDATED
general.autoSavenoAutoSavebool (présence inversée)STATICALLY_VALIDATED
general.currentTimeuseActTimebool (présence)STATICALLY_VALIDATED
general.currentDateuseActDatebool (présence)STATICALLY_VALIDATED
general.currentYearuseActYearbool (présence)STATICALLY_VALIDATED
graphics.screenRatioscreenratiostringtoute valeurSTATICALLY_VALIDATED
graphics.maxFPSmaxFPSint10..200STATICALLY_VALIDATED
graphics.tileDistanceperformance_tiledistmaxint1..20STATICALLY_VALIDATED
graphics.maxObjectDistanceMetersperformance_maxObjDistint20..5000STATICALLY_VALIDATED
graphics.minObjectScreenPercentperformance_minObjSizedecimal0..10, stocké /100STATICALLY_VALIDATED
graphics.minReflectionObjectScreenPercentperformance_minObjSizeRefldecimal0..50, stocké /100STATICALLY_VALIDATED
graphics.maxObjectComplexitymaxcomplexityint0..3STATICALLY_VALIDATED
graphics.maxMapComplexitymaxcomplexity_mapint0..2STATICALLY_VALIDATED
graphics.sunGlowsunglowbool (présence)STATICALLY_VALIDATED
graphics.loadAllTilesloadAllTilesbool (présence)STATICALLY_VALIDATED
graphics.stencilBufferno_stencilbufferbool (présence inversée)STATICALLY_VALIDATED
graphics.stencilShadowsshadow_stencilbool, écrit sous la forme on / offSTATICALLY_VALIDATED
graphics.rainReflectionsno_rain_reflbool (présence inversée)STATICALLY_VALIDATED
graphics.humansInRainReflectionsno_humans_on_rain_reflbool (présence inversée)STATICALLY_VALIDATED
graphics.realTimeReflectionsperformance_realreflexionsstringeconomy ou fullSTATICALLY_PARTIAL
graphics.particlessmokesystems (bloc de 4 lignes)enabled,maxPerEmitter,playerVehicleOnly,inReflections (bool,int>=0,bool,bool)STATICALLY_VALIDATED
simulation.collisionno_collisionbool (présence inversée)STATICALLY_VALIDATED
simulation.collisionTerrainno_collision_terrainbool (présence inversée)STATICALLY_VALIDATED
simulation.collisionVehiclesno_collision_vehToVehbool (présence inversée)STATICALLY_VALIDATED
simulation.collisionPedestriansno_collision_pedastriansbool (présence inversée)STATICALLY_VALIDATED
simulation.ticketSellingticketsellingint0..2STATICALLY_VALIDATED
simulation.maintenancewear_lifespanint0..4STATICALLY_VALIDATED
simulation.disableAutomaticScheduleAnalysisPopupno_schedAnaPopUpbool (présence)STATICALLY_VALIDATED
simulation.ticketInfono_ticketinfo_visiblebool (présence inversée)STATICALLY_VALIDATED
simulation.automaticClutchno_automaticClutchbool (présence inversée)STATICALLY_VALIDATED
advanced.reducedMultithreadingno_multithreading_calculate + no_multithreading_texloadbool (deux jetons de présence)RUNTIME_PROVEN
view.driverSmoothdriverview_smoothbool (présence)STATICALLY_VALIDATED
view.driverMovingdriverview_movingbool (présence)STATICALLY_VALIDATED
controls.autoCenterautoCenterbool (présence)STATICALLY_VALIDATED
controls.reducedSteeringSpeedredSteerSpdbool (présence)STATICALLY_VALIDATED
traffic.randomVehiclesAIMaxCountRandom composante 0int0..1000STATICALLY_VALIDATED (RV-005 à l'exécution)
traffic.humansAIMaxCountRandom composante 1int0..1000STATICALLY_VALIDATED (RV-005 à l'exécution)
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

Entrées du catalogue qui existent mais ne sont pas accessibles en écriture (rejetées avec OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLE) : advanced.multithreadingCalculate, advanced.multithreadingTextureLoad (remplacées par advanced.reducedMultithreading), graphics.texture, graphics.textureFilter.

Confinement des chemins#

presentation.splash.assets et internet-textures.profile sont résolus par Confined(package root, value) :

  1. Les chemins enracinés (C:\...), les chemins commençant par \ et tout composant de chemin égal à .. sont rejetés.
  2. Le chemin complet est calculé et doit commencer par le répertoire du paquet.
  3. Chaque composant existant sous la racine du paquet, jusqu'au chemin final inclus, est inspecté à la recherche de l'attribut ReparsePoint. Une jonction, un lien symbolique de répertoire ou un lien symbolique de fichier situé n'importe où sur ce chemin est rejeté, de même qu'un composant qui ne peut pas être inspecté (IOException / UnauthorizedAccessException).

Ces trois échecs donnent tous OL_E_SESSION_PROFILE_PATH_ESCAPE. La même règle relative aux points d'analyse est appliquée aux cibles .itx sous Texture\ lors de la construction de la session.

Priorité et conflits de remplacement#

CliInput.BuildSpecAsync compose la spécification dans cet ordre :

  1. Valeurs par défaut (NEW_MAP, tout non défini, timeouts 180 s / 30 s).
  2. /spec:<file.json>, s'il est fourni, remplace entièrement les valeurs par défaut.
  3. Racine de l'installation : un argument d'installation explicite l'emporte sur le RootPath de la spécification ; . désigne le répertoire contenant l'exécutable.
  4. Profil (/predefined-profile + /predefined-profile-index) : le paquet est chargé et RejectProfileConflicts s'exécute sur les arguments bruts de la CLI avant toute fusion. Le bloc de monde de la base est ensuite réinitialisé en un WorldSpec vide du mode sélectionné (un monde issu de /spec est abandonné lorsqu'un profil est utilisé) et SessionProfileCompiler.Apply superpose le profil à la base : new (NEW_MAP uniquement), settings (fusionnés par-dessus le Environment.General de la base, le profil l'emportant clé par clé), ainsi que presentation, internet-textures, behavior (chacun ne remplaçant le bloc de la base que lorsque le préréglage le définit).
  5. Arguments restants de la CLI, superposés par-dessus : /map, /entrypoint, /entrypoint-index, /date, /time, /year, options météo, options de véhicule, /set, options d'écran de démarrage, options de textures Internet, /startup-timeout, /shutdown-timeout. Les timeouts de la CLI ne s'appliquent que lorsqu'ils sont fournis ; sinon, la valeur de la spécification, du profil ou par défaut est conservée.
  6. Vérification de compatibilité pour les modes autres que NEW_MAP (ValidateCompatibility).

Un argument de la CLI qui cible un champ détenu par le profil sélectionné constitue un conflit, rejeté avec OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT (code de sortie 2, catégorie invalid_argument). La vérification porte sur le champ, pas sur la valeur : répéter la valeur du profil lui-même reste un conflit.

Argument de la CLIEn conflit lorsque le profil définitUniquement dans le mode
/mapnew.mapNEW_MAP
/entrypoint ou /entrypoint-indexnew.entrypoint ou new.entrypoint-indexNEW_MAP
/datenew.dateNEW_MAP
/timenew.timeNEW_MAP
/yearnew.yearNEW_MAP
/weather, /weather-icao, /weather-realnew.weatherNEW_MAP
/set:<key>=...la même <key> dans les settings du préréglage (insensible à la casse)tous
/splash, /splash-language, /splash-assetspresentation (quelconque)tous
/internet-textures, /internet-textures-profileinternet-textures (quelconque)tous
/startup-timeout, /shutdown-timeoutbehavior (quelconque)tous

Ne constituent pas des conflits : les clés /set que le préréglage ne définit pas (elles sont ajoutées), les options de véhicule (/vehicle, /repaint, /hof, /fleet, /registration, /no-vehicle ; un profil ne peut pas définir de véhicule du joueur), et tout argument de monde sous /saved (le bloc new n'y est pas appliqué). /map, /entrypoint et /entrypoint-index sont invalides avec /saved, indépendamment des profils (OL_E_INVALID_ARGUMENT).

Codes d'erreur#

CodeLevé lorsqueSortie CLI
OL_E_SESSION_PROFILE_NOT_FOUND<root>\.omsilaunch\session-profiles\<id>\profile.yaml n'existe pas2
OL_E_SESSION_PROFILE_PATH_ESCAPEid n'est pas un simple nom de répertoire ; assets / profile sort du paquet ou traverse un point d'analyse2
OL_E_SESSION_PROFILE_SCHEMA_UNSUPPORTEDschema ne vaut pas omsilaunch.session-profile/v12
OL_E_SESSION_PROFILE_INVALIDlimite de taille, forme du document, ancres, clé inconnue, clé obligatoire manquante, valeur non scalaire, nombre/date/heure incorrect, id non concordant, règles de nombre/d'index des préréglages, mots de mode non pris en charge, timeout non positif, presentation sans splash, override sans profile2
OL_E_SESSION_PROFILE_PRESET_NOT_FOUND/predefined-profile-index manquant, hors de 1..5, ou aucun préréglage avec cet index2
OL_E_SESSION_PROFILE_SETTING_UNKNOWNune clé de settings n'est pas dans le catalogue2
OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLEune clé de settings est cataloguée mais en lecture seule2
OL_E_SESSION_PROFILE_ASSET_MISSINGle répertoire assets ou le fichier profile n'existe pas dans le paquet2
OL_E_SESSION_PROFILE_MAP_MISMATCHcompatibility.maps n'est pas vide et la carte effective n'y figure pas (ou ne peut pas être déduite)2
OL_E_SESSION_PROFILE_OVERRIDE_CONFLICTun argument explicite de la CLI cible un champ détenu par le profil2

Toutes ces erreurs sont levées pendant la compilation de la ligne de commande, avant la planification. Ce sont des SessionProfileException (ou ArgumentException pour le conflit) et elles ne démarrent jamais de session. Le catalogue complet se trouve dans erreurs ; les codes de sortie dans codes de sortie.

Apparence d'un profil dans l'API#

Après un chargement réussi, la spécification transporte un enregistrement SessionProfileMetadata dans LaunchSpec.SessionProfile :

ChampSource
Idid
Namename
Versionversion
Authorauthor
PresetIdid du préréglage sélectionné
PresetIndexindex du préréglage sélectionné
PresetNamename du préréglage sélectionné
PackagePathrépertoire absolu du paquet

Le planificateur ajoute un diagnostic informatif session_profile.selected à chaque SessionPlan construit à partir d'une telle spécification, avec les clés de données session_profile.id, session_profile.name, session_profile.version, session_profile.author, session_profile.preset_id, session_profile.preset_index, session_profile.preset_name et session_profile.path. Il n'affecte pas l'exécutabilité. Les intégrateurs qui utilisent directement l'API publique peuvent appeler SessionProfileCompiler.Load et SessionProfileCompiler.Apply depuis OmsiLaunch.Core ; la représentation YAML ne franchit jamais la frontière de OmsiLaunch.Api.

Exemples#

Exemple 1 : profil limité aux paramètres, un préréglage#

<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

Exécution : OmsiLaunch.exe /predefined-profile:quiet-evening /predefined-profile-index:1 /new /map:maps\Grundorf\global.cfg /entrypoint-index:0. La carte et le point d'entrée proviennent de la ligne de commande, car le profil ne définit pas de bloc new ; ajouter /set:graphics.maxFPS=60 est autorisé, ajouter /set:traffic.humans=10 est un conflit.

Exemple 2 : profil lié à une carte avec trois préréglages et des ressources empaquetées#

<root>\.omsilaunch\session-profiles\grundorf-tour\profile.yaml, avec assets\splash\ENG.bmp, assets\splash\DEU.bmp et textures\offline.itx dans le paquet :

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

Exécution : OmsiLaunch.exe /predefined-profile:grundorf-tour /predefined-profile-index:2 /new. Avec /saved:situations\mytrip.osn, le bloc new est ignoré et le .osn doit référencer maps\Grundorf\global.cfg.

L'exemple livré#

La version livre docs/examples/session-profiles/rmg-leste/profile.yaml (afficher). Il est syntaxiquement valide, conforme au schéma et se chargerait sans erreur. Deux propriétés l'empêchent de démarrer une session sans modification dans ce build :

  1. Il définit new.date, new.time et new.weather, qui rendent le plan non exécutable (voir Le bloc new).
  2. Ses valeurs de chemin sont des scalaires simples avec des barres obliques inverses doublées (maps\\RMG Leste\\global.cfg). YAML les conserve doublées, et les identités de carte sont comparées textuellement (après la seule normalisation de / en \), si bien que new.map et compatibility.maps ne correspondraient pas à l'identité du catalogue maps\RMG Leste\global.cfg (OL_E_MAP_NOT_FOUND lors de la planification). La valeur assets se résout néanmoins, car la normalisation des chemins Windows fusionne les séparateurs doublés.

La forme exécutable pour ce build est :

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