Profili di sessione

Documentazione della versione v0.1.0-beta.3Vedi il sorgente su GitHub

Traduzione della pagina originale in inglese di OmsiLaunch 0.1.0-beta3. La pagina inglese è normativa: in caso di differenze prevalgono la pagina inglese e il codice.

Un profilo di sessione è un pacchetto YAML dichiarativo che un autore di contenuti distribuisce con una mappa o un add-on affinché gli utenti finali possano avviare una sessione OmsiLaunch riproducibile con un solo comando (OmsiLaunch.exe /predefined-profile:<id> /predefined-profile-index:<1..5> /new). Questa pagina è il riferimento normativo per il formato omsilaunch.session-profile/v1 così come è implementato da SessionProfileCompiler in src/OmsiLaunch.Core/SessionProfiles.cs, per le regole di precedenza applicate dalla CLI (CliInput.BuildSpecAsync e RejectProfileConflicts in tools/OmsiLaunch.Cli/Program.cs) e per il catalogo delle impostazioni che un profilo può scrivere (ConfigurationCatalog). Tutto ciò che un profilo può fare è possibile anche con i flag della CLI e con LaunchSpec; un profilo si limita a impacchettare quelle scelte.

Stabilità: STABLE_BETA per l'analisi, la validazione, il rilevamento dei conflitti e i blocchi settings / presentation / internet-textures / behavior (test offline session-profiles.strict-compiler; il percorso di overlay e ripristino è validato a runtime da RV-005 e RV-006, vedere stato della validazione a runtime). Le chiavi new.date, new.time, new.year e new.weather sono UNAVAILABLE in questo build (vedere Il blocco new).

Posizione e denominazione del pacchetto#

ElementoRegola
Directory del pacchetto<installation root>\.omsilaunch\session-profiles\<id>\
File del profilo<package>\profile.yaml (nome esatto, un solo file)
AssetQualsiasi file o directory all'interno della directory del pacchetto, referenziati tramite percorso relativo da presentation.splash.assets e internet-textures.profile
idDeve essere un semplice nome di directory: non deve essere vuoto o composto solo da spazi, non deve contenere \, / o : e non deve contenere la sequenza ... Le violazioni producono OL_E_SESSION_PROFILE_PATH_ESCAPE. Il valore id dichiarato in profile.yaml deve essere uguale al nome della directory byte per byte (con distinzione tra maiuscole e minuscole); altrimenti OL_E_SESSION_PROFILE_INVALID.
Selezione/predefined-profile:<id> insieme a /predefined-profile-index:<n>. L'indice è obbligatorio: /predefined-profile senza /predefined-profile-index fallisce con OL_E_SESSION_PROFILE_PRESET_NOT_FOUND.
Pacchetto mancanteOL_E_SESSION_PROFILE_NOT_FOUND
Struttura del rilascioIl pacchetto di rilascio include un esempio in .omsilaunch\examples\session-profiles\rmg-leste\ (vedere packaging). Gli esempi non sono profili: copiare un pacchetto in .omsilaunch\session-profiles\<id>\ per renderlo selezionabile.

Un profilo viene installato e rimosso dall'utente o dall'autore dei contenuti. OmsiLaunch non scrive mai in un pacchetto, non lo copia mai e non lo elimina mai. La directory del pacchetto non fa parte di alcuna transazione.

Regole di analisi#

RegolaComportamentoErrore
Limite di dimensioneprofile.yaml non deve superare 256 KiB (262,144 byte)OL_E_SESSION_PROFILE_INVALID
Forma del documentoEsattamente un documento YAML il cui nodo radice è un mappingOL_E_SESSION_PROFILE_INVALID
Schemaschema deve essere esattamente omsilaunch.session-profile/v1 (con distinzione tra maiuscole e minuscole)OL_E_SESSION_PROFILE_SCHEMA_UNSUPPORTED
Anchor e aliasQualsiasi nodo che porta un anchor YAML (&name) in qualunque punto del documento viene rifiutato prima della validazione; di conseguenza gli alias (*name) non possono comparireOL_E_SESSION_PROFILE_INVALID ("YAML anchors are not supported.")
Chiavi sconosciuteOgni mapping è chiuso: una chiave non elencata per il suo contesto nelle tabelle seguenti viene rifiutata ("Unknown property in <context>: <key>"). Le chiavi vengono confrontate con distinzione tra maiuscole e minuscole (Schema: è una chiave sconosciuta). L'unico mapping aperto è settings, le cui chiavi vengono invece validate rispetto al catalogo delle impostazioni.OL_E_SESSION_PROFILE_INVALID
ScalariOgni valore foglia deve essere uno scalare; sequenze e mapping dove è atteso uno scalare vengono rifiutati ("<field> must be a scalar.")OL_E_SESSION_PROFILE_INVALID
NumeriGli interi vengono analizzati con la cultura invariante (1, 30); i decimali in settings usano . come separatoreOL_E_SESSION_PROFILE_INVALID
Date e orarinew.date.value viene analizzato da DateOnly.Parse e new.time.value da TimeOnly.Parse, entrambi con cultura invariante; usare le forme ISO yyyy-MM-dd e HH:mm[:ss]OL_E_SESSION_PROFILE_INVALID
Errori di sintassi YAMLSegnalati con il messaggio del parserOL_E_SESSION_PROFILE_INVALID ("Invalid YAML: ...")
Contenuto eseguibileIl YAML viene analizzato con YamlDotNet solo in un albero di rappresentazione; non sono supportati tag, tipi personalizzati o esecuzione di codice

Le barre rovesciate negli scalari plain (senza virgolette) sono caratteri letterali. Scrivere i percorsi Windows con una sola barra rovesciata (maps\Grundorf\global.cfg). Una barra rovesciata doppia in uno scalare plain resta doppia nel valore; vedere L'esempio incluso nel pacchetto.

Riferimento delle chiavi#

I contesti sono denominati esattamente come li denomina il compilatore. Ogni chiave elencata qui è accettata; nient'altro lo è.

profile (mapping radice)#

ChiaveTipoObbligatoriaDescrizione
schemastringasìLetterale omsilaunch.session-profile/v1.
idstringasìIdentificatore del pacchetto; deve essere uguale al nome della directory.
namestringasìNome visualizzato; riportato in SessionProfileMetadata.Name.
authorstringasìAutore; riportato in SessionProfileMetadata.Author.
versionstringasìStringa di versione del pacchetto (formato libero, racchiuderla tra virgolette: "1.0"); riportata in SessionProfileMetadata.Version.
compatibilitymappingnoVedere compatibility.
newmappingnoValori predefiniti per NEW_MAP. Vedere new.
presetssequenza di mappingsìDa 1 a 5 voci di preset. Zero, più di cinque o un valore che non è una sequenza producono OL_E_SESSION_PROFILE_INVALID.

compatibility#

ChiaveTipoObbligatoriaDescrizione
mapssequenza di stringhenoIdentità delle mappe (maps\<Map>\global.cfg) per cui questo profilo è valido. / viene normalizzato in \; il confronto non distingue maiuscole e minuscole. Un elenco assente o vuoto significa «qualsiasi mappa». Quando non è vuoto viene imposto per WorldMode.NewMap (rispetto al new.map effettivo o a /map) e per WorldMode.SavedSituation (rispetto alla mappa referenziata dal file .osn selezionato, risolta tramite il catalogo dei contenuti). Per WorldMode.LastMapState non è possibile derivare alcuna mappa, quindi un elenco non vuoto fallisce sempre. Errore: OL_E_SESSION_PROFILE_MAP_MISMATCH.

new#

Il blocco viene letto e validato ogni volta che è presente, ma viene applicato alla specifica solo quando la modalità del mondo selezionata è NEW_MAP (/new, il valore predefinito della CLI). Con /saved:<file.osn> il blocco viene ignorato.

ChiaveTipoObbligatoriaApplicataDescrizione
mapstringanosìIdentità della mappa nella forma normalizzata maps\<Map>\global.cfg (la pianificazione richiede esattamente questa forma: inizia con maps\, termina con \global.cfg, nessun ..). Imposta WorldSpec.MapIdentity.
entrypoint-indexinteronosìIndice del punto di ingresso presentato (posizione a base 0 nell'elenco dei punti di ingresso di OMSI). Imposta PresentedEntrypointIndex e azzera qualsiasi identità del punto di ingresso.
entrypointstringanosìIdentità grezza del punto di ingresso. Imposta EntrypointIdentity e azzera l'indice presentato. Se sono presenti sia entrypoint-index sia entrypoint, prevale entrypoint perché viene applicato per ultimo. La selezione tramite identità del punto di ingresso è PARTIAL (BI-001): la pianificazione segnala world.entrypoint-identity come RUNTIME_PARTIAL e il piano non è eseguibile. Preferire entrypoint-index.
datemappingnono (UNAVAILABLE)Vedere new.date.
timemappingnono (UNAVAILABLE)Vedere new.time.
yearinteronono (UNAVAILABLE)Anno esplicito.
weathermappingnono (UNAVAILABLE)Vedere new.weather.

date, time, year e weather vengono compilati in DateSpec, TimeSpec, YearSpec e WeatherSpec con DateTimeMode.Explicit / il WeatherMode selezionato. Il planner di sessione (src/OmsiLaunch.Core/SessionPlanner.cs) segnala quindi le capability world.explicit-date, world.explicit-time, world.explicit-year e weather come STATICALLY_PARTIAL, aggiunge OL_E_CAPABILITY_UNAVAILABLE alla diagnostica del piano e contrassegna il piano come non eseguibile. Il plugin rifiuta inoltre un handoff la cui modalità di data o di orario non sia Unset (plugin.request.unsupported). Conseguenza per questo build: un profilo che imposta una qualsiasi di queste quattro chiavi può essere validato con /plan ma non può avviare una sessione (codice di uscita 1, OL_E_PLAN_NOT_RUNNABLE). Ometterle nei profili destinati a essere eseguiti.

new.date#

ChiaveTipoObbligatoriaDescrizione
modestringasìDeve essere explicit (senza distinzione tra maiuscole e minuscole). Qualsiasi altro valore produce OL_E_SESSION_PROFILE_INVALID ("date must use explicit mode.").
valuestringasìyyyy-MM-dd.

new.time#

ChiaveTipoObbligatoriaDescrizione
modestringasìDeve essere explicit.
valuestringasìHH:mm o HH:mm:ss.

new.weather#

ChiaveTipoObbligatoriaDescrizione
modestringasìpreset, icao o real (senza distinzione tra maiuscole e minuscole). Qualsiasi altro valore: OL_E_SESSION_PROFILE_INVALID ("Unsupported weather mode").
presetstringaquando mode: presetNome del preset meteo.
icaostringaquando mode: icaoCodice ICAO della stazione.

preset (ogni voce di presets)#

ChiaveTipoObbligatoriaPredefinitoDescrizione
indexinterosìDa 1 a 5, univoco all'interno del profilo. Selezionato con /predefined-profile-index. Duplicato o fuori intervallo: OL_E_SESSION_PROFILE_INVALID; un indice che non esiste in alcun punto del profilo: OL_E_SESSION_PROFILE_PRESET_NOT_FOUND.
idstringasìIdentificatore del preset; riportato come SessionProfileMetadata.PresetId.
namestringasìNome visualizzato del preset; riportato come SessionProfileMetadata.PresetName.
settingsmappingnonessunoImpostazioni semantiche di options.cfg, vedere Impostazioni. Le chiavi vengono confrontate con il catalogo senza distinzione tra maiuscole e minuscole.
presentationmappingnoereditatoPresentazione della splash screen, vedere presentation. Se assente, il preset eredita la base (valore di /spec o il valore predefinito della CLI, Managed).
internet-texturesmappingnoereditatoVedere internet-textures.
behaviormappingnoereditatoTimeout, vedere behavior.

Viene applicato solo il preset selezionato. Ogni preset viene comunque analizzato e validato, quindi un errore nel preset 3 fa fallire una richiesta per il preset 1.

presentation#

ChiaveTipoObbligatoriaDescrizione
splashmappingsìObbligatoria quando presentation è presente ("Presentation requires splash."). Vedere presentation.splash.

presentation.splash#

ChiaveTipoObbligatoriaPredefinitoDescrizione
modestringasìmanaged installa le bitmap della splash screen di OmsiLaunch per la sessione (SplashMode.Managed). unset o native preserva i file della splash screen di OMSI (SplashMode.Unset; Native è un alias). Senza distinzione tra maiuscole e minuscole. Qualsiasi altro valore: OL_E_SESSION_PROFILE_INVALID.
languagestringanoENGLingua della seconda destinazione della splash screen: PTB, ENG, DEU, FRA (alias PT-BR, EN, DE, FR; qualsiasi valore sconosciuto viene risolto in ENG alla costruzione della sessione). Con mode: managed la sessione applica in overlay GUI\NewSplashscreen_ENG.bmp e GUI\NewSplashscreen_<language>.bmp.
assetsstringanoasset del pacchettoDirectory relativa al pacchetto, contenente ENG.bmp e, per una language diversa dall'inglese, <language>.bmp; ciascuno deve essere un BMP 640x480 a 24 bit. La directory deve esistere al caricamento del profilo (OL_E_SESSION_PROFILE_ASSET_MISSING); i file vengono validati all'avvio della sessione (OL_E_SPLASH_ASSET_MISSING, OL_E_SPLASH_FORMAT_UNSUPPORTED). Si applicano le regole di confinamento dei percorsi. Se omessa, vengono usati .omsilaunch\assets\splash dell'installazione (o i valori predefiniti del pacchetto).

Un profilo non può impostare SessionPresentationSpec.SuppressTrayIcon; resta false a meno che non lo imposti un /spec.

internet-textures#

ChiaveTipoObbligatoriaDescrizione
modestringasìnative (InternetTexturesMode.Native, OMSI si comporta normalmente), disabled (Disabled, il downloader in-process profilato viene soppresso per la sessione), override (Override, un profilo .itx limitato alla sessione viene installato come Texture\standard.itx). Senza distinzione tra maiuscole e minuscole; qualsiasi altro valore: OL_E_SESSION_PROFILE_INVALID.
profilestringaobbligatoria per overridePercorso relativo al pacchetto del file .itx. Chiave mancante con override: OL_E_SESSION_PROFILE_INVALID; file mancante: OL_E_SESSION_PROFILE_ASSET_MISSING. Si applicano le regole di confinamento dei percorsi. Il file deve essere composto da coppie di righe URL / target con URL http:// o https:// (altrimenti OL_E_ITX_PROFILE_INVALID) e ogni destinazione deve risolversi al di sotto della directory Texture\ dell'installazione senza attraversare un reparse point (OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH). Le destinazioni elencate e Texture\standard.ipr diventano eliminazioni della sessione (vedere transazioni e recupero).

behavior#

ChiaveTipoObbligatoriaPredefinitoDescrizione
startup-timeoutintero (secondi)no180Tempo concesso dall'avvio del processo a Running. Deve essere positivo al caricamento del profilo; la sessione richiede inoltre un valore da 1 a 600 all'avvio (altrimenti OL_E_START_SESSION). Corrisponde a LaunchBehaviorSpec.StartupTimeoutSeconds.
shutdown-timeoutintero (secondi)no30Corrisponde a LaunchBehaviorSpec.ShutdownTimeoutSeconds. ACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECT: il supervisore termina OMSI direttamente e non legge mai questo valore.

Quando il blocco behavior è presente, entrambi i timeout vengono impostati (valore indicato o predefinito) e sostituiscono interamente il LaunchBehaviorSpec di base, inclusi RestoreConfiguration e SuppressStaleClosecheckWarning, che tornano ai loro valori predefiniti (true, true).

Impostazioni#

Le chiavi di settings sono i nomi semantici di ConfigurationCatalog (src/OmsiLaunch.Configuration/ConfigurationCatalog.cs). Il compilatore accetta una chiave solo se esiste (OL_E_SESSION_PROFILE_SETTING_UNKNOWN) ed è scrivibile (OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLE). I valori vengono memorizzati come stringhe e convertiti in una modifica di options.cfg quando la sessione costruisce i propri overlay; un valore non valido viene quindi rilevato in StartSessionAsync, non al caricamento del profilo, e fa fallire la sessione con OL_E_START_SESSION, il cui messaggio contiene OL_E_INVALID_SETTING_VALUE: <key>. Ogni impostazione seguente scrive options.cfg; tutte sono limitate alla sessione e vengono ripristinate in modo esatto dopo la sessione.

Forme dei valori:

  • bool è true o false (senza distinzione tra maiuscole e minuscole). Per i token di presenza il token viene aggiunto o rimosso; per i token invertiti (no_*) true rimuove il token negativo.
  • int / decimal vengono validati rispetto all'intervallo; i valori con un divisore vengono memorizzati divisi (ad esempio graphics.minObjectScreenPercent: 5 scrive 0.05).
  • string viene scritto testualmente.
Chiave dell'impostazioneToken di options.cfgTipoIntervallo / valoriEvidenza
general.languagelanguagestringqualsiasiSTATICALLY_VALIDATED
general.radioradiostringqualsiasiSTATICALLY_VALIDATED
general.alternateViewaltViewbool (presenza)STATICALLY_VALIDATED
general.showOwnDriversee_own_driverbool (presenza)STATICALLY_VALIDATED
general.showErrorMessagesshowerrormessagesbool (presenza)STATICALLY_VALIDATED
general.autoSavenoAutoSavebool (presenza invertita)STATICALLY_VALIDATED
general.currentTimeuseActTimebool (presenza)STATICALLY_VALIDATED
general.currentDateuseActDatebool (presenza)STATICALLY_VALIDATED
general.currentYearuseActYearbool (presenza)STATICALLY_VALIDATED
graphics.screenRatioscreenratiostringqualsiasiSTATICALLY_VALIDATED
graphics.maxFPSmaxFPSint10..200STATICALLY_VALIDATED
graphics.tileDistanceperformance_tiledistmaxint1..20STATICALLY_VALIDATED
graphics.maxObjectDistanceMetersperformance_maxObjDistint20..5000STATICALLY_VALIDATED
graphics.minObjectScreenPercentperformance_minObjSizedecimal0..10, memorizzato /100STATICALLY_VALIDATED
graphics.minReflectionObjectScreenPercentperformance_minObjSizeRefldecimal0..50, memorizzato /100STATICALLY_VALIDATED
graphics.maxObjectComplexitymaxcomplexityint0..3STATICALLY_VALIDATED
graphics.maxMapComplexitymaxcomplexity_mapint0..2STATICALLY_VALIDATED
graphics.sunGlowsunglowbool (presenza)STATICALLY_VALIDATED
graphics.loadAllTilesloadAllTilesbool (presenza)STATICALLY_VALIDATED
graphics.stencilBufferno_stencilbufferbool (presenza invertita)STATICALLY_VALIDATED
graphics.stencilShadowsshadow_stencilbool, scritto come on / offSTATICALLY_VALIDATED
graphics.rainReflectionsno_rain_reflbool (presenza invertita)STATICALLY_VALIDATED
graphics.humansInRainReflectionsno_humans_on_rain_reflbool (presenza invertita)STATICALLY_VALIDATED
graphics.realTimeReflectionsperformance_realreflexionsstringeconomy o fullSTATICALLY_PARTIAL
graphics.particlessmokesystems (blocco di 4 righe)enabled,maxPerEmitter,playerVehicleOnly,inReflections (bool,int>=0,bool,bool)STATICALLY_VALIDATED
simulation.collisionno_collisionbool (presenza invertita)STATICALLY_VALIDATED
simulation.collisionTerrainno_collision_terrainbool (presenza invertita)STATICALLY_VALIDATED
simulation.collisionVehiclesno_collision_vehToVehbool (presenza invertita)STATICALLY_VALIDATED
simulation.collisionPedestriansno_collision_pedastriansbool (presenza invertita)STATICALLY_VALIDATED
simulation.ticketSellingticketsellingint0..2STATICALLY_VALIDATED
simulation.maintenancewear_lifespanint0..4STATICALLY_VALIDATED
simulation.disableAutomaticScheduleAnalysisPopupno_schedAnaPopUpbool (presenza)STATICALLY_VALIDATED
simulation.ticketInfono_ticketinfo_visiblebool (presenza invertita)STATICALLY_VALIDATED
simulation.automaticClutchno_automaticClutchbool (presenza invertita)STATICALLY_VALIDATED
advanced.reducedMultithreadingno_multithreading_calculate + no_multithreading_texloadbool (entrambi token di presenza)RUNTIME_PROVEN
view.driverSmoothdriverview_smoothbool (presenza)STATICALLY_VALIDATED
view.driverMovingdriverview_movingbool (presenza)STATICALLY_VALIDATED
controls.autoCenterautoCenterbool (presenza)STATICALLY_VALIDATED
controls.reducedSteeringSpeedredSteerSpdbool (presenza)STATICALLY_VALIDATED
traffic.randomVehiclesAIMaxCountRandom componente 0int0..1000STATICALLY_VALIDATED (RV-005 runtime)
traffic.humansAIMaxCountRandom componente 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

Voci del catalogo che esistono ma non sono scrivibili (rifiutate con OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLE): advanced.multithreadingCalculate, advanced.multithreadingTextureLoad (sostituite da advanced.reducedMultithreading), graphics.texture, graphics.textureFilter.

Confinamento dei percorsi#

presentation.splash.assets e internet-textures.profile vengono risolti da Confined(package root, value):

  1. I percorsi radicati (C:\...), i percorsi che iniziano con \ e qualsiasi componente del percorso uguale a .. vengono rifiutati.
  2. Viene calcolato il percorso completo, che deve iniziare con la directory del pacchetto.
  3. Ogni componente esistente al di sotto della radice del pacchetto, fino al percorso finale incluso, viene ispezionato per verificare l'attributo ReparsePoint. Una junction, un collegamento simbolico a directory o un collegamento simbolico a file in qualunque punto di quel percorso viene rifiutato, così come un componente che non può essere ispezionato (IOException / UnauthorizedAccessException).

Tutti e tre gli errori producono OL_E_SESSION_PROFILE_PATH_ESCAPE. La stessa regola sui reparse point viene applicata alle destinazioni .itx sotto Texture\ alla costruzione della sessione.

Precedenza e conflitti di sovrascrittura#

CliInput.BuildSpecAsync compone la specifica in questo ordine:

  1. Valori predefiniti (NEW_MAP, tutto non impostato, timeout 180 s / 30 s).
  2. /spec:<file.json>, se indicato, sostituisce interamente i valori predefiniti.
  3. Radice dell'installazione: un argomento di installazione esplicito prevale sul RootPath della specifica; . indica la directory che contiene l'eseguibile.
  4. Profilo (/predefined-profile + /predefined-profile-index): il pacchetto viene caricato e RejectProfileConflicts viene eseguito sugli argomenti grezzi della CLI prima che venga unito qualsiasi elemento. Il blocco del mondo della base viene quindi reimpostato a un WorldSpec vuoto della modalità selezionata (un mondo di /spec viene scartato quando si usa un profilo) e SessionProfileCompiler.Apply sovrappone il profilo alla base: new (solo NEW_MAP), settings (unite sopra l'Environment.General della base, il profilo prevale per ogni chiave) e presentation, internet-textures, behavior (ciascuno sostituisce il blocco della base solo quando il preset lo definisce).
  5. Argomenti della CLI rimanenti vengono sovrapposti: /map, /entrypoint, /entrypoint-index, /date, /time, /year, flag meteo, flag del veicolo, /set, flag della splash, flag delle internet-textures, /startup-timeout, /shutdown-timeout. I timeout della CLI si applicano solo quando indicati; altrimenti resta valido il valore della specifica/del profilo/predefinito.
  6. Controllo di compatibilità per le modalità diverse da NEW_MAP (ValidateCompatibility).

Un argomento della CLI che punta a un campo di proprietà del profilo selezionato è un conflitto, rifiutato con OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT (codice di uscita 2, categoria invalid_argument). Il controllo è per campo, non per valore: ripetere lo stesso valore del profilo è comunque un conflitto.

Argomento della CLIÈ in conflitto quando il profilo definisceSolo in modalità
/mapnew.mapNEW_MAP
/entrypoint o /entrypoint-indexnew.entrypoint o new.entrypoint-indexNEW_MAP
/datenew.dateNEW_MAP
/timenew.timeNEW_MAP
/yearnew.yearNEW_MAP
/weather, /weather-icao, /weather-realnew.weatherNEW_MAP
/set:<key>=...la stessa <key> nelle settings del preset (senza distinzione tra maiuscole e minuscole)qualsiasi
/splash, /splash-language, /splash-assetspresentation (qualsiasi)qualsiasi
/internet-textures, /internet-textures-profileinternet-textures (qualsiasi)qualsiasi
/startup-timeout, /shutdown-timeoutbehavior (qualsiasi)qualsiasi

Non sono conflitti: le chiavi /set che il preset non definisce (vengono aggiunte), i flag del veicolo (/vehicle, /repaint, /hof, /fleet, /registration, /no-vehicle; un profilo non può definire un veicolo del giocatore) e qualsiasi argomento del mondo con /saved (lì il blocco new non viene applicato). /map, /entrypoint e /entrypoint-index non sono validi insieme a /saved indipendentemente dai profili (OL_E_INVALID_ARGUMENT).

Codici di errore#

CodiceGenerato quandoUscita CLI
OL_E_SESSION_PROFILE_NOT_FOUND<root>\.omsilaunch\session-profiles\<id>\profile.yaml non esiste2
OL_E_SESSION_PROFILE_PATH_ESCAPEid non è un semplice nome di directory; assets / profile esce dal pacchetto o attraversa un reparse point2
OL_E_SESSION_PROFILE_SCHEMA_UNSUPPORTEDschema non è omsilaunch.session-profile/v12
OL_E_SESSION_PROFILE_INVALIDlimite di dimensione, forma del documento, anchor, chiave sconosciuta, chiave obbligatoria mancante, valore non scalare, numero/data/orario non valido, id non corrispondente, regole su numero/indice dei preset, parole di modalità non supportate, timeout non positivo, presentation senza splash, override senza profile2
OL_E_SESSION_PROFILE_PRESET_NOT_FOUND/predefined-profile-index mancante, fuori da 1..5 o nessun preset con quell'index2
OL_E_SESSION_PROFILE_SETTING_UNKNOWNuna chiave di settings non è nel catalogo2
OL_E_SESSION_PROFILE_SETTING_NOT_WRITABLEuna chiave di settings è nel catalogo ma è di sola lettura2
OL_E_SESSION_PROFILE_ASSET_MISSINGla directory assets o il file profile non esiste all'interno del pacchetto2
OL_E_SESSION_PROFILE_MAP_MISMATCHcompatibility.maps non è vuoto e la mappa effettiva non è elencata (o non può essere derivata)2
OL_E_SESSION_PROFILE_OVERRIDE_CONFLICTun argomento esplicito della CLI punta a un campo di proprietà del profilo2

Tutti questi errori vengono generati durante la compilazione della riga di comando, prima della pianificazione. Sono SessionProfileException (o ArgumentException per il conflitto) e non avviano mai una sessione. Il catalogo completo si trova in errori; i codici di uscita in codici di uscita.

Come appare un profilo nell'API#

Dopo un caricamento riuscito la specifica contiene un record SessionProfileMetadata in LaunchSpec.SessionProfile:

CampoOrigine
Idid
Namename
Versionversion
Authorauthor
PresetIdid del preset selezionato
PresetIndexindex del preset selezionato
PresetNamename del preset selezionato
PackagePathdirectory assoluta del pacchetto

Il planner aggiunge una voce di diagnostica informativa session_profile.selected a ogni SessionPlan costruito da una tale specifica, con le chiavi di dati session_profile.id, session_profile.name, session_profile.version, session_profile.author, session_profile.preset_id, session_profile.preset_index, session_profile.preset_name e session_profile.path. Non influisce sull'eseguibilità. Gli integratori che usano direttamente l'API pubblica possono chiamare SessionProfileCompiler.Load e SessionProfileCompiler.Apply da OmsiLaunch.Core; la rappresentazione YAML non attraversa mai il confine verso OmsiLaunch.Api.

Esempi#

Esempio 1: profilo con sole impostazioni, un 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

Esecuzione: OmsiLaunch.exe /predefined-profile:quiet-evening /predefined-profile-index:1 /new /map:maps\Grundorf\global.cfg /entrypoint-index:0. La mappa e il punto di ingresso provengono dalla riga di comando perché il profilo non definisce alcun blocco new; aggiungere /set:graphics.maxFPS=60 è consentito, aggiungere /set:traffic.humans=10 è un conflitto.

Esempio 2: profilo legato a una mappa con tre preset e asset nel pacchetto#

<root>\.omsilaunch\session-profiles\grundorf-tour\profile.yaml, con assets\splash\ENG.bmp, assets\splash\DEU.bmp e textures\offline.itx all'interno del pacchetto:

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

Esecuzione: OmsiLaunch.exe /predefined-profile:grundorf-tour /predefined-profile-index:2 /new. Con /saved:situations\mytrip.osn il blocco new viene saltato e il file .osn deve referenziare maps\Grundorf\global.cfg.

L'esempio incluso nel pacchetto#

Il rilascio include docs/examples/session-profiles/rmg-leste/profile.yaml (visualizza). È sintatticamente valido, rispetta lo schema e verrebbe caricato senza errori. Due caratteristiche gli impediscono di avviare una sessione senza modifiche in questo build:

  1. Imposta new.date, new.time e new.weather, che rendono il piano non eseguibile (vedere Il blocco new).
  2. I suoi valori di percorso sono scalari plain con barre rovesciate doppie (maps\\RMG Leste\\global.cfg). YAML le mantiene doppie e le identità delle mappe vengono confrontate testualmente (solo dopo la normalizzazione da / a \), quindi new.map e compatibility.maps non corrisponderebbero all'identità di catalogo maps\RMG Leste\global.cfg (OL_E_MAP_NOT_FOUND in fase di pianificazione). Il valore assets viene comunque risolto perché la normalizzazione dei percorsi di Windows comprime i separatori doppi.

La forma eseguibile per questo build è:

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