Sessieprofielen

Documentatie voor versie v0.1.0-beta.3Bron bekijken op GitHub

Vertaling van de oorspronkelijke Engelse pagina voor OmsiLaunch 0.1.0-beta3. De Engelse pagina is normatief: bij verschillen gelden de Engelse pagina en de code.

Een sessieprofiel is een declaratief YAML-pakket dat een contentauteur met een kaart of add-on meelevert, zodat eindgebruikers met één opdracht een reproduceerbare OmsiLaunch-sessie kunnen starten (OmsiLaunch.exe /predefined-profile:<id> /predefined-profile-index:<1..5> /new). Deze pagina is de normatieve referentie voor het formaat omsilaunch.session-profile/v1 zoals geïmplementeerd door SessionProfileCompiler in src/OmsiLaunch.Core/SessionProfiles.cs, voor de voorrangsregels die de CLI toepast (CliInput.BuildSpecAsync en RejectProfileConflicts in tools/OmsiLaunch.Cli/Program.cs) en voor de catalogus van instellingen die een profiel mag schrijven (ConfigurationCatalog). Alles wat een profiel kan, kunnen de CLI-vlaggen en de LaunchSpec ook; een profiel verpakt alleen die keuzes.

Stabiliteit: STABLE_BETA voor parsing, validatie, conflictdetectie en de blokken settings / presentation / internet-textures / behavior (offline test session-profiles.strict-compiler; het overlay- en herstelpad is runtime-gevalideerd door RV-005 en RV-006, zie status van de runtimevalidatie). De sleutels new.date, new.time, new.year en new.weather zijn in deze build UNAVAILABLE (zie Het new-blok).

Locatie en naamgeving van het pakket#

OnderdeelRegel
Pakketmap<installation root>\.omsilaunch\session-profiles\<id>\
Profielbestand<package>\profile.yaml (exacte naam, één bestand)
AssetsWillekeurige bestanden of mappen binnen de pakketmap, waarnaar met een relatief pad wordt verwezen vanuit presentation.splash.assets en internet-textures.profile
idMoet een gewone mapnaam zijn: niet leeg of alleen witruimte, zonder \, / of : en zonder de reeks ... Overtredingen geven OL_E_SESSION_PROFILE_PATH_ESCAPE. De id-waarde die in profile.yaml is gedeclareerd, moet byte voor byte gelijk zijn aan de mapnaam (hoofdlettergevoelig); anders OL_E_SESSION_PROFILE_INVALID.
Selectie/predefined-profile:<id> samen met /predefined-profile-index:<n>. De index is verplicht: /predefined-profile zonder /predefined-profile-index mislukt met OL_E_SESSION_PROFILE_PRESET_NOT_FOUND.
Ontbrekend pakketOL_E_SESSION_PROFILE_NOT_FOUND
Indeling van de releaseHet releasepakket bevat een voorbeeld onder .omsilaunch\examples\session-profiles\rmg-leste\ (zie packaging). Voorbeelden zijn geen profielen: kopieer een pakket naar .omsilaunch\session-profiles\<id>\ om het selecteerbaar te maken.

Een profiel wordt geïnstalleerd en verwijderd door de gebruiker of de contentauteur. OmsiLaunch schrijft nooit in een pakket, kopieert het nooit en verwijdert het nooit. De pakketmap maakt geen deel uit van een transactie.

Parseerregels#

RegelGedragFout
Groottelimietprofile.yaml mag niet groter zijn dan 256 KiB (262,144 bytes)OL_E_SESSION_PROFILE_INVALID
DocumentvormPrecies één YAML-document waarvan het hoofdknooppunt een mapping isOL_E_SESSION_PROFILE_INVALID
Schemaschema moet exact omsilaunch.session-profile/v1 zijn (hoofdlettergevoelig)OL_E_SESSION_PROFILE_SCHEMA_UNSUPPORTED
Anchors en aliassenElk knooppunt met een YAML-anchor (&name), waar dan ook in het document, wordt vóór de validatie geweigerd; aliassen (*name) kunnen daardoor niet voorkomenOL_E_SESSION_PROFILE_INVALID ("YAML anchors are not supported.")
Onbekende sleutelsElke mapping is gesloten: een sleutel die in de tabellen hieronder niet voor de betreffende context wordt vermeld, wordt geweigerd ("Unknown property in <context>: <key>"). Sleutels worden hoofdlettergevoelig vergeleken (Schema: is een onbekende sleutel). De enige open mapping is settings, waarvan de sleutels in plaats daarvan worden gevalideerd tegen de catalogus van instellingen.OL_E_SESSION_PROFILE_INVALID
ScalarsElke bladwaarde moet een scalar zijn; sequences en mappings waar een scalar wordt verwacht, worden geweigerd ("<field> must be a scalar.")OL_E_SESSION_PROFILE_INVALID
GetallenGehele getallen worden geparseerd met de invariante cultuur (1, 30); decimale getallen in settings gebruiken . als scheidingstekenOL_E_SESSION_PROFILE_INVALID
Datums en tijdennew.date.value wordt geparseerd door DateOnly.Parse en new.time.value door TimeOnly.Parse, beide met de invariante cultuur; gebruik de ISO-vormen yyyy-MM-dd en HH:mm[:ss]OL_E_SESSION_PROFILE_INVALID
YAML-syntaxisfoutenGemeld met het bericht van de parserOL_E_SESSION_PROFILE_INVALID ("Invalid YAML: ...")
Uitvoerbare inhoudYAML wordt met YamlDotNet alleen geparseerd naar een representatieboom; tags, aangepaste typen of code-uitvoering worden niet ondersteund

Backslashes in plain (niet-geciteerde) scalars zijn letterlijke tekens. Schrijf Windows-paden met één backslash (maps\Grundorf\global.cfg). Een dubbele backslash in een plain scalar blijft dubbel in de waarde; zie Het meegeleverde voorbeeld.

Sleutelreferentie#

Contexten worden precies zo genoemd als de compiler ze noemt. Elke hier vermelde sleutel wordt geaccepteerd; niets anders.

profile (hoofdmapping)#

SleutelTypeVerplichtBeschrijving
schemastringjaLetterlijk omsilaunch.session-profile/v1.
idstringjaPakket-id; moet gelijk zijn aan de mapnaam.
namestringjaWeergavenaam; gerapporteerd in SessionProfileMetadata.Name.
authorstringjaAuteur; gerapporteerd in SessionProfileMetadata.Author.
versionstringjaVersiestring van het pakket (vrije vorm, zet deze tussen aanhalingstekens: "1.0"); gerapporteerd in SessionProfileMetadata.Version.
compatibilitymappingneeZie compatibility.
newmappingneeStandaardwaarden voor NEW_MAP. Zie new.
presetssequence van mappingsja1 tot 5 presetvermeldingen. Nul, meer dan vijf of een waarde die geen sequence is, geeft OL_E_SESSION_PROFILE_INVALID.

compatibility#

SleutelTypeVerplichtBeschrijving
mapssequence van stringsneeKaartidentiteiten (maps\<Map>\global.cfg) waarvoor dit profiel geldig is. / wordt genormaliseerd naar \; de vergelijking is niet hoofdlettergevoelig. Een ontbrekende of lege lijst betekent "elke kaart". Wanneer de lijst niet leeg is, wordt deze afgedwongen voor WorldMode.NewMap (tegen de effectieve new.map of /map) en voor WorldMode.SavedSituation (tegen de kaart waarnaar de geselecteerde .osn verwijst, opgelost via de inhoudscatalogus). Voor WorldMode.LastMapState kan geen kaart worden afgeleid, dus een niet-lege lijst mislukt altijd. Fout: OL_E_SESSION_PROFILE_MAP_MISMATCH.

new#

Het blok wordt gelezen en gevalideerd zodra het aanwezig is, maar wordt alleen op de spec toegepast wanneer de geselecteerde wereldmodus NEW_MAP is (/new, de standaard van de CLI). Onder /saved:<file.osn> wordt het blok genegeerd.

SleutelTypeVerplichtToegepastBeschrijving
mapstringneejaKaartidentiteit in de genormaliseerde vorm maps\<Map>\global.cfg (het plannen vereist precies deze vorm: begint met maps\, eindigt op \global.cfg, geen ..). Stelt WorldSpec.MapIdentity in.
entrypoint-indexintegerneejaIndex van het getoonde instappunt (0-gebaseerde positie in de lijst met instappunten van OMSI). Stelt PresentedEntrypointIndex in en wist een eventuele instappuntidentiteit.
entrypointstringneejaOnbewerkte instappuntidentiteit. Stelt EntrypointIdentity in en wist de getoonde index. Als zowel entrypoint-index als entrypoint aanwezig zijn, wint entrypoint omdat die als laatste wordt toegepast. Selectie op instappuntidentiteit is PARTIAL (BI-001): het plannen rapporteert world.entrypoint-identity als RUNTIME_PARTIAL en het plan is niet uitvoerbaar. Gebruik bij voorkeur entrypoint-index.
datemappingneenee (UNAVAILABLE)Zie new.date.
timemappingneenee (UNAVAILABLE)Zie new.time.
yearintegerneenee (UNAVAILABLE)Expliciet jaar.
weathermappingneenee (UNAVAILABLE)Zie new.weather.

date, time, year en weather worden gecompileerd naar DateSpec, TimeSpec, YearSpec en WeatherSpec met DateTimeMode.Explicit / de geselecteerde WeatherMode. De sessieplanner (src/OmsiLaunch.Core/SessionPlanner.cs) rapporteert vervolgens de capabilities world.explicit-date, world.explicit-time, world.explicit-year en weather als STATICALLY_PARTIAL, voegt OL_E_CAPABILITY_UNAVAILABLE toe aan de plandiagnoses en markeert het plan als niet uitvoerbaar. De plugin weigert bovendien een handoff waarvan de datum- of tijdmodus niet Unset is (plugin.request.unsupported). Gevolg voor deze build: een profiel dat een van deze vier sleutels instelt, kan met /plan worden gevalideerd maar kan geen sessie starten (exitcode 1, OL_E_PLAN_NOT_RUNNABLE). Laat ze weg uit profielen die bedoeld zijn om te starten.

new.date#

SleutelTypeVerplichtBeschrijving
modestringjaMoet explicit zijn (niet hoofdlettergevoelig). Elke andere waarde geeft OL_E_SESSION_PROFILE_INVALID ("date must use explicit mode.").
valuestringjayyyy-MM-dd.

new.time#

SleutelTypeVerplichtBeschrijving
modestringjaMoet explicit zijn.
valuestringjaHH:mm of HH:mm:ss.

new.weather#

SleutelTypeVerplichtBeschrijving
modestringjapreset, icao of real (niet hoofdlettergevoelig). Al het andere: OL_E_SESSION_PROFILE_INVALID ("Unsupported weather mode").
presetstringbij mode: presetNaam van de weerpreset.
icaostringbij mode: icaoICAO-stationscode.

preset (elke vermelding van presets)#

SleutelTypeVerplichtStandaardBeschrijving
indexintegerja1 tot 5, uniek binnen het profiel. Geselecteerd met /predefined-profile-index. Dubbel of buiten bereik: OL_E_SESSION_PROFILE_INVALID; een index die nergens in het profiel voorkomt: OL_E_SESSION_PROFILE_PRESET_NOT_FOUND.
idstringjaPreset-id; gerapporteerd als SessionProfileMetadata.PresetId.
namestringjaWeergavenaam van de preset; gerapporteerd als SessionProfileMetadata.PresetName.
settingsmappingneegeenSemantische instellingen van options.cfg, zie Instellingen. Sleutels worden niet hoofdlettergevoelig vergeleken met de catalogus.
presentationmappingneeoverervenPresentatie van het opstartscherm, zie presentation. Wanneer afwezig, erft de preset de basislijn (waarde uit /spec of de standaard van de CLI, Managed).
internet-texturesmappingneeoverervenZie internet-textures.
behaviormappingneeoverervenTimeouts, zie behavior.

Alleen de geselecteerde preset wordt toegepast. Elke preset wordt wel geparseerd en gevalideerd, dus een fout in preset 3 laat een aanvraag voor preset 1 mislukken.

presentation#

SleutelTypeVerplichtBeschrijving
splashmappingjaVerplicht wanneer presentation aanwezig is ("Presentation requires splash."). Zie presentation.splash.

presentation.splash#

SleutelTypeVerplichtStandaardBeschrijving
modestringjamanaged installeert voor de sessie de opstartschermbitmaps van OmsiLaunch (SplashMode.Managed). unset of native behoudt de eigen opstartschermbestanden van OMSI (SplashMode.Unset; Native is een alias). Niet hoofdlettergevoelig. Al het andere: OL_E_SESSION_PROFILE_INVALID.
languagestringneeENGTaal van het tweede opstartschermdoel: PTB, ENG, DEU, FRA (aliassen PT-BR, EN, DE, FR; alles wat onbekend is, wordt bij het opbouwen van de sessie ENG). Met mode: managed plaatst de sessie een overlay van GUI\NewSplashscreen_ENG.bmp en GUI\NewSplashscreen_<language>.bmp.
assetsstringneemeegeleverde assetsMap relatief aan het pakket met ENG.bmp en, voor een niet-Engelse language, <language>.bmp; elk bestand moet een 640x480, 24-bits BMP zijn. De map moet bestaan bij het laden van het profiel (OL_E_SESSION_PROFILE_ASSET_MISSING); de bestanden worden bij de start van de sessie gevalideerd (OL_E_SPLASH_ASSET_MISSING, OL_E_SPLASH_FORMAT_UNSUPPORTED). De regels voor padbeperking zijn van toepassing. Wanneer weggelaten, worden .omsilaunch\assets\splash van de installatie (of de meegeleverde standaardbestanden) gebruikt.

Een profiel kan SessionPresentationSpec.SuppressTrayIcon niet instellen; de waarde blijft false, tenzij een /spec deze instelt.

internet-textures#

SleutelTypeVerplichtBeschrijving
modestringjanative (InternetTexturesMode.Native, OMSI gedraagt zich normaal), disabled (Disabled, de geprofileerde in-process downloader wordt voor de sessie onderdrukt), override (Override, een sessiegebonden .itx-profiel wordt geïnstalleerd als Texture\standard.itx). Niet hoofdlettergevoelig; al het andere: OL_E_SESSION_PROFILE_INVALID.
profilestringverplicht voor overridePad relatief aan het pakket van het .itx-bestand. Ontbrekende sleutel bij override: OL_E_SESSION_PROFILE_INVALID; ontbrekend bestand: OL_E_SESSION_PROFILE_ASSET_MISSING. De regels voor padbeperking zijn van toepassing. Het bestand moet bestaan uit regelparen URL / target met URL's die met http:// of https:// beginnen (anders OL_E_ITX_PROFILE_INVALID), en elk doel moet onder de map Texture\ van de installatie uitkomen zonder een reparsepunt te doorlopen (OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH). De vermelde doelen en Texture\standard.ipr worden sessieverwijderingen (zie transacties en recovery).

behavior#

SleutelTypeVerplichtStandaardBeschrijving
startup-timeoutinteger (seconden)nee180Toegestane tijd vanaf de processtart tot Running. Moet positief zijn bij het laden van het profiel; de sessie vereist bij de start bovendien 1 tot 600 (anders OL_E_START_SESSION). Komt overeen met LaunchBehaviorSpec.StartupTimeoutSeconds.
shutdown-timeoutinteger (seconden)nee30Komt overeen met LaunchBehaviorSpec.ShutdownTimeoutSeconds. ACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECT: de supervisor beëindigt OMSI direct en leest deze waarde nooit.

Wanneer het behavior-blok aanwezig is, worden beide timeouts ingesteld (opgegeven waarde of standaard) en vervangen ze de LaunchBehaviorSpec van de basislijn volledig, inclusief RestoreConfiguration en SuppressStaleClosecheckWarning, die terugvallen op hun standaardwaarden (true, true).

Instellingen#

De sleutels van settings zijn de semantische namen uit ConfigurationCatalog (src/OmsiLaunch.Configuration/ConfigurationCatalog.cs). De compiler accepteert een sleutel alleen als die bestaat (OL_E_SESSION_PROFILE_SETTING_UNKNOWN) en schrijfbaar is (OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLE). Waarden worden als strings opgeslagen en omgezet in een patch van options.cfg wanneer de sessie haar overlays opbouwt; een ongeldige waarde wordt daarom pas bij StartSessionAsync gedetecteerd, niet bij het laden van het profiel, en laat de sessie mislukken met OL_E_START_SESSION, waarvan het bericht OL_E_INVALID_SETTING_VALUE: <key> bevat. Elke onderstaande instelling schrijft naar options.cfg; ze zijn allemaal sessiegebonden en worden na de sessie exact hersteld.

Waardevormen:

  • bool is true of false (niet hoofdlettergevoelig). Bij aanwezigheidstokens wordt het token toegevoegd of verwijderd; bij omgekeerde tokens (no_*) verwijdert true het negatieve token.
  • int / decimal worden gevalideerd tegen het bereik; waarden met een deler worden gedeeld opgeslagen (graphics.minObjectScreenPercent: 5 schrijft bijvoorbeeld 0.05).
  • string wordt letterlijk geschreven.
InstellingssleutelToken in options.cfgTypeBereik / waardenBewijs
general.languagelanguagestringelkeSTATICALLY_VALIDATED
general.radioradiostringelkeSTATICALLY_VALIDATED
general.alternateViewaltViewbool (aanwezigheid)STATICALLY_VALIDATED
general.showOwnDriversee_own_driverbool (aanwezigheid)STATICALLY_VALIDATED
general.showErrorMessagesshowerrormessagesbool (aanwezigheid)STATICALLY_VALIDATED
general.autoSavenoAutoSavebool (omgekeerde aanwezigheid)STATICALLY_VALIDATED
general.currentTimeuseActTimebool (aanwezigheid)STATICALLY_VALIDATED
general.currentDateuseActDatebool (aanwezigheid)STATICALLY_VALIDATED
general.currentYearuseActYearbool (aanwezigheid)STATICALLY_VALIDATED
graphics.screenRatioscreenratiostringelkeSTATICALLY_VALIDATED
graphics.maxFPSmaxFPSint10..200STATICALLY_VALIDATED
graphics.tileDistanceperformance_tiledistmaxint1..20STATICALLY_VALIDATED
graphics.maxObjectDistanceMetersperformance_maxObjDistint20..5000STATICALLY_VALIDATED
graphics.minObjectScreenPercentperformance_minObjSizedecimal0..10, opgeslagen /100STATICALLY_VALIDATED
graphics.minReflectionObjectScreenPercentperformance_minObjSizeRefldecimal0..50, opgeslagen /100STATICALLY_VALIDATED
graphics.maxObjectComplexitymaxcomplexityint0..3STATICALLY_VALIDATED
graphics.maxMapComplexitymaxcomplexity_mapint0..2STATICALLY_VALIDATED
graphics.sunGlowsunglowbool (aanwezigheid)STATICALLY_VALIDATED
graphics.loadAllTilesloadAllTilesbool (aanwezigheid)STATICALLY_VALIDATED
graphics.stencilBufferno_stencilbufferbool (omgekeerde aanwezigheid)STATICALLY_VALIDATED
graphics.stencilShadowsshadow_stencilbool, geschreven als on / offSTATICALLY_VALIDATED
graphics.rainReflectionsno_rain_reflbool (omgekeerde aanwezigheid)STATICALLY_VALIDATED
graphics.humansInRainReflectionsno_humans_on_rain_reflbool (omgekeerde aanwezigheid)STATICALLY_VALIDATED
graphics.realTimeReflectionsperformance_realreflexionsstringeconomy of fullSTATICALLY_PARTIAL
graphics.particlessmokesystems (blok van 4 regels)enabled,maxPerEmitter,playerVehicleOnly,inReflections (bool,int>=0,bool,bool)STATICALLY_VALIDATED
simulation.collisionno_collisionbool (omgekeerde aanwezigheid)STATICALLY_VALIDATED
simulation.collisionTerrainno_collision_terrainbool (omgekeerde aanwezigheid)STATICALLY_VALIDATED
simulation.collisionVehiclesno_collision_vehToVehbool (omgekeerde aanwezigheid)STATICALLY_VALIDATED
simulation.collisionPedestriansno_collision_pedastriansbool (omgekeerde aanwezigheid)STATICALLY_VALIDATED
simulation.ticketSellingticketsellingint0..2STATICALLY_VALIDATED
simulation.maintenancewear_lifespanint0..4STATICALLY_VALIDATED
simulation.disableAutomaticScheduleAnalysisPopupno_schedAnaPopUpbool (aanwezigheid)STATICALLY_VALIDATED
simulation.ticketInfono_ticketinfo_visiblebool (omgekeerde aanwezigheid)STATICALLY_VALIDATED
simulation.automaticClutchno_automaticClutchbool (omgekeerde aanwezigheid)STATICALLY_VALIDATED
advanced.reducedMultithreadingno_multithreading_calculate + no_multithreading_texloadbool (beide aanwezigheidstokens)RUNTIME_PROVEN
view.driverSmoothdriverview_smoothbool (aanwezigheid)STATICALLY_VALIDATED
view.driverMovingdriverview_movingbool (aanwezigheid)STATICALLY_VALIDATED
controls.autoCenterautoCenterbool (aanwezigheid)STATICALLY_VALIDATED
controls.reducedSteeringSpeedredSteerSpdbool (aanwezigheid)STATICALLY_VALIDATED
traffic.randomVehiclesAIMaxCountRandom component 0int0..1000STATICALLY_VALIDATED (RV-005 runtime)
traffic.humansAIMaxCountRandom component 1int0..1000STATICALLY_VALIDATED (RV-005 runtime)
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

Catalogusvermeldingen die bestaan maar niet schrijfbaar zijn (geweigerd met OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLE): advanced.multithreadingCalculate, advanced.multithreadingTextureLoad (vervangen door advanced.reducedMultithreading), graphics.texture, graphics.textureFilter.

Padbeperking#

presentation.splash.assets en internet-textures.profile worden opgelost door Confined(package root, value):

  1. Geroote paden (C:\...), paden die met \ beginnen en elk padcomponent dat gelijk is aan .. worden geweigerd.
  2. Het volledige pad wordt berekend en moet met de pakketmap beginnen.
  3. Elk bestaand component onder de pakketroot, tot en met het uiteindelijke pad, wordt gecontroleerd op het kenmerk ReparsePoint. Een junction, symbolische koppeling naar een map of symbolische koppeling naar een bestand waar dan ook op dat pad wordt geweigerd, evenals een component dat niet kan worden gecontroleerd (IOException / UnauthorizedAccessException).

Alle drie de fouten geven OL_E_SESSION_PROFILE_PATH_ESCAPE. Dezelfde regel voor reparsepunten wordt bij het opbouwen van de sessie toegepast op .itx-doelen onder Texture\.

Voorrang en overschrijvingsconflicten#

CliInput.BuildSpecAsync stelt de spec in deze volgorde samen:

  1. Standaardwaarden (NEW_MAP, alles niet ingesteld, timeouts 180 s / 30 s).
  2. /spec:<file.json>, indien opgegeven, vervangt de standaardwaarden volledig.
  3. Installatiemap: een expliciet installatieargument heeft voorrang op de RootPath van de spec; . betekent de map die het uitvoerbare bestand bevat.
  4. Profiel (/predefined-profile + /predefined-profile-index): het pakket wordt geladen en RejectProfileConflicts wordt uitgevoerd tegen de onbewerkte CLI-argumenten, voordat er iets wordt samengevoegd. Het wereldblok van de basis wordt daarna teruggezet naar een lege WorldSpec van de geselecteerde modus (een /spec-wereld wordt verworpen wanneer een profiel wordt gebruikt) en SessionProfileCompiler.Apply legt het profiel over de basis: new (alleen NEW_MAP), settings (samengevoegd over Environment.General van de basis, het profiel wint per sleutel), en presentation, internet-textures, behavior (elk vervangt het blok van de basis alleen wanneer de preset het definieert).
  5. Overige CLI-argumenten worden daarbovenop gelegd: /map, /entrypoint, /entrypoint-index, /date, /time, /year, weervlaggen, voertuigvlaggen, /set, splash-vlaggen, internettexture-vlaggen, /startup-timeout, /shutdown-timeout. Timeouts uit de CLI gelden alleen wanneer ze zijn opgegeven; anders blijft de waarde uit spec, profiel of standaard staan.
  6. Compatibiliteitscontrole voor modi anders dan NEW_MAP (ValidateCompatibility).

Een CLI-argument dat een veld raakt dat het geselecteerde profiel beheert, is een conflict en wordt geweigerd met OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT (exitcode 2, categorie invalid_argument). De controle is per veld, niet per waarde: het herhalen van de eigen waarde van het profiel is nog steeds een conflict.

CLI-argumentConflicteert wanneer het profiel dit definieertAlleen in modus
/mapnew.mapNEW_MAP
/entrypoint of /entrypoint-indexnew.entrypoint of new.entrypoint-indexNEW_MAP
/datenew.dateNEW_MAP
/timenew.timeNEW_MAP
/yearnew.yearNEW_MAP
/weather, /weather-icao, /weather-realnew.weatherNEW_MAP
/set:<key>=...dezelfde <key> in settings van de preset (niet hoofdlettergevoelig)elke
/splash, /splash-language, /splash-assetspresentation (elke)elke
/internet-textures, /internet-textures-profileinternet-textures (elke)elke
/startup-timeout, /shutdown-timeoutbehavior (elke)elke

Geen conflicten: /set-sleutels die de preset niet definieert (ze worden toegevoegd), voertuigvlaggen (/vehicle, /repaint, /hof, /fleet, /registration, /no-vehicle; een profiel kan geen spelersvoertuig definiëren) en elk wereldargument onder /saved (het new-blok wordt daar niet toegepast). /map, /entrypoint en /entrypoint-index zijn ongeldig in combinatie met /saved, ongeacht profielen (OL_E_INVALID_ARGUMENT).

Foutcodes#

CodeWanneer gegenereerdCLI-exitcode
OL_E_SESSION_PROFILE_NOT_FOUND<root>\.omsilaunch\session-profiles\<id>\profile.yaml bestaat niet2
OL_E_SESSION_PROFILE_PATH_ESCAPEid is geen gewone mapnaam; assets / profile verlaat het pakket of doorloopt een reparsepunt2
OL_E_SESSION_PROFILE_SCHEMA_UNSUPPORTEDschema is niet omsilaunch.session-profile/v12
OL_E_SESSION_PROFILE_INVALIDgroottelimiet, documentvorm, anchors, onbekende sleutel, ontbrekende verplichte sleutel, niet-scalaire waarde, ongeldig getal/datum/tijd, id komt niet overeen, regels voor aantal/index van presets, niet-ondersteunde moduswoorden, niet-positieve timeout, presentation zonder splash, override zonder profile2
OL_E_SESSION_PROFILE_PRESET_NOT_FOUND/predefined-profile-index ontbreekt, ligt buiten 1..5, of er is geen preset met die index2
OL_E_SESSION_PROFILE_SETTING_UNKNOWNeen sleutel in settings staat niet in de catalogus2
OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLEeen sleutel in settings staat in de catalogus maar is alleen-lezen2
OL_E_SESSION_PROFILE_ASSET_MISSINGde map assets of het bestand profile bestaat niet binnen het pakket2
OL_E_SESSION_PROFILE_MAP_MISMATCHcompatibility.maps is niet leeg en de effectieve kaart staat er niet in (of kan niet worden afgeleid)2
OL_E_SESSION_PROFILE_OVERRIDE_CONFLICTeen expliciet CLI-argument raakt een veld dat het profiel beheert2

Al deze fouten worden gegenereerd terwijl de opdrachtregel wordt gecompileerd, vóór het plannen. Het zijn SessionProfileException (of ArgumentException voor het conflict) en ze starten nooit een sessie. De volledige catalogus staat in foutcodes; exitcodes in exitcodes.

Hoe een profiel in de API verschijnt#

Na een geslaagde lading bevat de spec een SessionProfileMetadata-record in LaunchSpec.SessionProfile:

VeldBron
Idid
Namename
Versionversion
Authorauthor
PresetIdid van de geselecteerde preset
PresetIndexindex van de geselecteerde preset
PresetNamename van de geselecteerde preset
PackagePathabsolute pakketmap

De planner voegt aan elk SessionPlan dat uit zo'n spec wordt opgebouwd een informatieve diagnose session_profile.selected toe, met de gegevenssleutels session_profile.id, session_profile.name, session_profile.version, session_profile.author, session_profile.preset_id, session_profile.preset_index, session_profile.preset_name en session_profile.path. Deze heeft geen invloed op de uitvoerbaarheid. Integrators die de openbare API rechtstreeks gebruiken, kunnen SessionProfileCompiler.Load en SessionProfileCompiler.Apply uit OmsiLaunch.Core aanroepen; de YAML-representatie komt nooit in OmsiLaunch.Api terecht.

Voorbeelden#

Voorbeeld 1: profiel met alleen instellingen, één preset#

<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

Uitvoeren: OmsiLaunch.exe /predefined-profile:quiet-evening /predefined-profile-index:1 /new /map:maps\Grundorf\global.cfg /entrypoint-index:0. De kaart en het instappunt komen van de opdrachtregel omdat het profiel geen new-blok definieert; /set:graphics.maxFPS=60 toevoegen is toegestaan, /set:traffic.humans=10 toevoegen is een conflict.

Voorbeeld 2: kaartgebonden profiel met drie presets en meegeleverde assets#

<root>\.omsilaunch\session-profiles\grundorf-tour\profile.yaml, met assets\splash\ENG.bmp, assets\splash\DEU.bmp en textures\offline.itx binnen het pakket:

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

Uitvoeren: OmsiLaunch.exe /predefined-profile:grundorf-tour /predefined-profile-index:2 /new. Met /saved:situations\mytrip.osn wordt het new-blok overgeslagen en moet de .osn verwijzen naar maps\Grundorf\global.cfg.

Het meegeleverde voorbeeld#

De release bevat docs/examples/session-profiles/rmg-leste/profile.yaml (bekijken). Het is syntactisch geldig, voldoet aan het schema en zou zonder fouten laden. Twee eigenschappen verhinderen dat het in deze build ongewijzigd een sessie start:

  1. Het stelt new.date, new.time en new.weather in, waardoor het plan niet uitvoerbaar is (zie Het new-blok).
  2. De padwaarden zijn plain scalars met dubbele backslashes (maps\\RMG Leste\\global.cfg). YAML laat ze dubbel en kaartidentiteiten worden tekstueel vergeleken (alleen na normalisatie van / naar \), zodat new.map en compatibility.maps niet overeenkomen met de catalogusidentiteit maps\RMG Leste\global.cfg (OL_E_MAP_NOT_FOUND bij het plannen). De waarde assets wordt wel opgelost, omdat de Windows-padnormalisatie dubbele scheidingstekens samenvoegt.

De uitvoerbare vorm voor deze build is:

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