Modo GM
El Modo GM es la forma de probar tu juego contra tu servidor en vivo.
Cuando el servidor es autoritativo, los trucos que usabas sin conexión dejan de funcionar. No puedes darte un monstruo de nivel 40 editando un archivo de guardado, porque el archivo de guardado ya no es donde vive la verdad: lo es el servidor. Si fijas el nivel localmente, la siguiente sincronización del equipo lo sobrescribe o, peor, no lo hace, y pasas una tarde persiguiendo un error que solo existe en tu máquina.
Esa es toda la razón de que exista. Una herramienta de depuración que escribe en el guardado local mientras el servidor es autoritativo no es una herramienta: es un generador de errores fantasma. Por eso cada acción de GM es una RPC del servidor, resuelta por el servidor, persistida por el servidor y visible para todos los clientes que pregunten.
El Modo GM es para la persona que opera el servidor: tú, durante el desarrollo, y quien ejecute tu juego después del lanzamiento. No es una función para jugadores, y no es un menú de trucos que se distribuya activado. Consulta Cerrarlo con llave.
Dos formas de entrar
Las mismas ocho RPC son accesibles desde dos lugares, porque dos tareas distintas las necesitan.
| Panel en el juego | Pestaña GM del Hub | |
|---|---|---|
| Dónde | Con el juego en marcha, F9 | Tools → MCE → OpenMon Hub → GM |
| Para | Probar mientras juegas | Operar sin lanzar el juego |
| Necesita | Una sesión en línea con la sesión iniciada | Su propio inicio de sesión con correo/contraseña |
El panel en el juego (F9)
El atajo se instala solo: no hay nada que arrastrar a una escena, y eso es deliberado: una herramienta de operador tiene que funcionar en cualquier escena, incluidas las que creas después de comprar el motor, y una escena cableada a mano se olvida en la siguiente.
No siempre fue así. GmModeHotkey se distribuía como un componente con cero referencias: ningún
prefab, ninguna escena, ningún asset lo nombraba, así que nada lo instanciaba nunca y F9 no podía
funcionar en ningún juego. Se encontró manejando el juego, no leyendo: al pulsar F9 en una sesión en línea en vivo,
con la sesión iniciada como un game master real, no se enviaba ningún gamemaster_status al servidor.

Ese es el panel sobre un mundo en línea en vivo, abierto con F9 en una cuenta que el servidor
reconoce. La línea de abajo, "10 verbos disponibles", no es una etiqueta que escribiera el
cliente: es la propia respuesta del servidor a gamemaster_status, y por eso una
cuenta sin el permiso ve que el panel se niega a abrirse en lugar de abrirse vacío.
F9 es el valor por defecto porque queda fuera del rango que usa MCE para jugar: las
teclas de movimiento, Z/X y los atajos del menú quedan intactos, de modo que el panel
no puede tragarse una entrada que el juego necesitaba. El atajo vive en GmModeHotkey.cs
y es un campo Key normal, así que puedes cambiarlo.
El panel solo aparece para una cuenta que el servidor considera game master. Pregunta:
no lo da por supuesto. Al abrirse llama a gamemaster_status, y la respuesta
es sobre quien llama: no hay forma de preguntar "¿es esa cuenta un GM?", y por eso
la RPC no se puede usar para enumerar quién tiene poder en tu servidor.
La pestaña GM del Hub

La pestaña del Hub inicia sesión con un correo y una contraseña, exactamente igual que un jugador, y recibe de vuelta un token de sesión real. Es una decisión deliberada y merece explicación, porque el resto del Hub no funciona así.
Todos los demás paneles del Hub que hablan con el servidor (la siembra, sobre todo) hablan de
servidor a servidor con el http_key del runtime de Nakama. Esa clave no tiene ningún usuario
asociado. Y los siete verbos de acción requieren ctx.userId, porque cada
uno escribe una fila que nombra quién lo hizo.
Podríamos haber agregado variantes de los verbos con http_key. Nos negamos, y el motivo cabe en
una frase: la fila de auditoría diría "el http_key lo hizo", y el registro
perdería su sujeto, que es lo único que cualquiera pregunta jamás a un registro de administración.
http_key no es un game masterSon dos credenciales con dos significados. Tener la clave de siembra te permite escribir en el almacenamiento de servidor a servidor. No te convierte en game master, y nunca concede un verbo de GM. No las confundas, y no pongas ninguna de las dos en tu repositorio.
La pestaña también distingue cuatro estados en lugar de reducirlos a un único fallo. "No has iniciado sesión", "iniciaste sesión y no eres un GM", "eres un GM pero este servidor tiene el interruptor de corte activado" y "listo" te envían a cuatro lugares distintos. Un único "no se pudo conectar" te mandaría a revisar las credenciales cuando lo que realmente necesitas es una concesión, o a sembrar un permiso que ya tienes cuando lo que necesitas es hablar con quien administra el servidor.
La pestaña no recuerda tu contraseña entre sesiones del editor. El host, el puerto, la clave del servidor y el correo persisten; la contraseña no.
Los ocho verbos
Uno hace una pregunta. Siete actúan.
| RPC | Qué hace |
|---|---|
gamemaster_status | ¿Soy game master? ¿Está habilitado el Modo GM aquí? ¿Qué verbos existen? |
gamemaster_mint_monster | Crea un monstruo de una especie dada, en el servidor, con un id asignado por el servidor |
gamemaster_set_level | Cambia el nivel de un monstruo |
gamemaster_set_hp | Fija el HP actual, incluso hasta cero, para llegar a los caminos de debilitamiento |
gamemaster_heal_party | Restaura por completo al equipo |
gamemaster_force_encounter | Fuerza el siguiente encuentro salvaje |
gamemaster_set_dex | Marca una especie como vista o capturada |
gamemaster_set_variable | Escribe una variable de juego |
gamemaster_mint_monster merece una nota. Crea el monstruo en el
servidor, y el servidor asigna el id. No hay ningún camino del cliente que pueda acuñar
uno: el enlace de subida puede actualizar los siete campos que un jugador cambia al jugar, y
eso es todo lo que puede hacer. Si necesitas que exista un monstruo, esta es la única puerta.
Por qué esto supera a repetir el contenido
gamemaster_set_level existe porque verificar una animación de evolución solía
costar 126 batallas. La función que reemplazó no era un atajo para esquivar las pruebas;
era la diferencia entre una prueba que se ejecuta y una que no.
Cerrarlo con llave
Tres cosas independientes deben cumplirse todas antes de que se ejecute un verbo. Con que una falle, se detiene.
1. La tabla de game masters. Una cuenta es GM solo si está en esa tabla. La tabla empieza vacía, y vacía significa nadie: no "todos", no "la primera cuenta", no "quien tenga una clave". Un servidor nuevo no tiene ningún game master.
2. El interruptor de corte. Establecer la variable de entorno
MCE_GM_MODE_DISABLED=true desactiva todos los verbos sin tocar la tabla. Úsalo
en un nodo de producción: las concesiones quedan exactamente como están y no se puede
invocar nada. Al volver a desactivarlo se restaura lo que ya tenías, así que nunca tienes que
reconstruir la tabla de memoria durante un incidente.
3. La puerta por verbo. requireGameMasterVerb se ejecuta en cada llamada, incluida
gamemaster_status. Una llamada rechazada también se registra.
Dos registros de auditoría, a propósito
Cada acción de GM escribe dos registros, y existen para dos lectores distintos.
gm_audit es el registro del operador. Es propiedad del sistema, nombra al game
master, el verbo y el objetivo, y se escribe en cada llamada, incluidas las
que fueron rechazadas. Un rechazo es exactamente el evento para el que sirve un registro de administración.
El segundo registro va bajo la propia cuenta del jugador objetivo, legible por ese jugador. Esta es la mitad que es fácil omitir y la que importa éticamente: un jugador siempre puede enterarse de que alguien con poder tocó sus datos. El estado "fueron tocados y nunca se les dijo" no es algo que este sistema pueda representar: la fila visible para el jugador viaja en la misma escritura de almacenamiento que el propio efecto, así que no hay ninguna ventana en la que uno llegara y el otro no.
Configurarlo
- Pon en marcha el servidor: consulta Configuración.
- Crea la cuenta con la que quieres operar (juega una vez o regístrate).
- Concédele game master en la tabla
game_masters. Un cliente no puede hacerlo: la llamada de servidor a servidormce_gamemaster_seedrecibe{ "grant": [userId, ...], "revoke": [userId, ...] }y necesita elhttp_keydel runtime de Nakama, como las demás llamadas de siembra. Es idempotente y nunca revoca una cuenta que no esté listada enrevoke. - Abre la pestaña GM del Hub, inicia sesión y confirma que la línea de estado dice que eres un GM.
- En el juego, pulsa F9.
Si el panel no aparece, la llamada de estado es lo que hay que leer: te dice cuál de las tres puertas te detuvo.
Antes de lanzar
- Establece
MCE_GM_MODE_DISABLED=trueen cualquier nodo al que puedan llegar los jugadores, salvo que quieras deliberadamente herramientas de GM en vivo en producción. - Mantén pequeña y auditada la tabla de game masters. Cada cuenta que contiene puede escribir en los datos de cualquier jugador.
- Lee
gm_auditdespués de los incidentes. Está escrito para ese momento exacto.