Modo sin conexión
«Sin conexión» quiere decir dos cosas distintas en MCE, y confundirlas es la forma más rápida de pasarse una tarde depurando una conexión que nunca tuvo que existir.
| Qué es | Para quién | |
|---|---|---|
| Sin capa online | El motor se compila sin la definición MCE_ONLINE. La capa de Nakama no entra en la compilación. | Todo juego de un solo jugador. Es lo que viene por defecto. |
| Respaldo sin conexión | La capa online SÍ está compilada, pero ahora mismo no hay servidor que responda. | Un juego online con el servidor caído, o un jugador sin conexión. |
Un juego de un solo jugador no necesita nada de esta página: sin MCE_ONLINE no hay conexión que perder. El
resto de la página habla de la segunda columna.
Qué deja una sesión sin conexión
NakamaManager tiene una sola máquina de estados, y cuatro situaciones distintas la dejan en Offline:
| Situación | Qué pasa |
|---|---|
No se encontró el asset OnlineConfig | Offline, con No OnlineConfig found. Online features disabled. en el registro |
EnableOnline está apagado en la configuración | Offline, y la llamada de conexión devuelve false en lugar de lanzar una excepción |
La conexión falla y AllowOfflineFallback está encendido (lo que viene por defecto) | Offline, con Falling back to offline mode. en el registro |
La conexión falla y AllowOfflineFallback está apagado | Failed — un estado aparte, para un juego que prefiere detenerse antes que correr a medias |
Esa última fila es la razón de ser de la bandera. Un juego donde el progreso tiene que ser autoritativo —una
escalera competitiva, una economía compartida— está mejor negándose a arrancar que dejando al jugador jugar una
sesión que el servidor nunca va a aceptar. Un juego donde lo online es un extra quiere lo contrario. La bandera
está en el asset OnlineConfig, al lado de EnableOnline.
IsOffline es verdadero para Offline y para Disconnected, porque el código que pregunta «¿puedo mandar
esto?» quiere la misma respuesta en los dos casos.
Qué sigue funcionando
Todos los servicios online se pueden construir sin ningún manager. Eso no es un efecto secundario, es el contrato: los servicios se construyen al arrancar, antes de que nadie sepa si va a responder un servidor, y un servicio que lanzara una excepción en su constructor se llevaría el juego puesto.
Así que WorldSyncService, BattleMatchmaker, SpectatorService, RaidBattleService, FriendService,
TradeService, GTLService, WalletService, ShopService, CloudSaveService, HousingService y
ChannelManager existen en una sesión sin conexión. Lo que no hacen es hablar con nada: una llamada que necesita
el servidor informa el fallo en vez de quedarse colgada. CloudSaveService.HasCloudSave es false, y el sistema
de guardado local —el mismo que usa un juego de un solo jugador— mantiene el juego andando.
La prueba en modo edición OnlineServices_HandleOfflineMode es la que sostiene esa línea: construye los doce con
un manager nulo y falla si alguno lanza una excepción.
Volver a conectarse
DisconnectAsync vuelve enseguida cuando el estado ya es Disconnected u Offline, así que llamarlo en una
sesión sin conexión es seguro y barato. Reconectarse es una llamada de conexión común; no hay que desarmar nada
antes.
Qué no muestra esta página
Todavía no hay una captura de una sesión jugando con el respaldo sin conexión. Los estados, la bandera y los doce servicios salen del código y están cubiertos por la prueba nombrada arriba; la corrida capturada con el servidor detenido a propósito sigue pendiente.