Ir al contenido

FOS Tablet System — Standard

Versión 2.2.1 · requiere FOS Essentials Core 1.3.0 o posterior · también requiere FOS Localization 1.0.1, FOS Teleport 1.0.1

Una tableta que el jugador hace aparecer delante de él: menú de teletransporte, interruptores locales, normas del mundo y un panel de moderación completo con roles, inmovilización, aislamiento, silencio y registro sincronizado.

Requiere FOS Essentials Core 1.3.0, FOS Localization 1.0.0 y FOS Teleport 1.0.0.

¿Vienes de una versión anterior? Lee antes CHANGELOG.md: un prefab que hayas modificado no se traslada por sí solo.


Este pack se entrega en ediciones, cada una en su carpeta:

Assets/FOS/TabletSystem/
└── Standard/ ← estás aquí

Una futura edición Pro se coloca al lado, en Pro/, con su propio ensamblado y sus propios componentes. Añade componentes junto a los del Standard y habla con ellos por su API pública: nunca sustituye un componente del prefab. Actualizar no te cuesta por tanto el cableado ya hecho.


  1. Coloca FOS Essentials > FOS Tablet System > Standard > FOSTabletSystem en tu escena.
  2. Asigna la zona de aislamiento: un Transform vacío, en algún sitio apartado. Sin ella, aislar a un jugador no hace nada.
  3. Asigna el campo registro de jugadores del staff manager. FOSPlayerRegistry viene del Core y vive en su propio GameObject, nunca en el propio staff manager. VRChat aplica un solo modo de sincronización por objeto, y el registro declara NoVariableSync: en el mismo objeto arrastraría consigo la sincronización manual del staff manager. El campo es opcional, pero sin él la lista de jugadores reserva un array en cada entrada y cada salida.
  4. Rellena los valores restaurados del staff manager para que coincidan con los ajustes de movimiento y voz de tu mundo. Son los que recupera un jugador al ser liberado o devuelto el micrófono, y sobrescriben los que tuviera.
  5. Rellena tus destinos de teletransporte, tus grupos de interruptores y tus normas.

Componente Función Red
FOSTabletManager Invoca, coloca y cierra la tableta ninguna
FOSTabletCaller Devuelve la tableta a un soporte fijo ninguna
FOSTabletSettings Deslizadores personales, ajustes comunitarios, normas manual
FOSTabletToggleGroup Objetos encendidos y apagados juntos ninguna
FOSTabletToggleButton Botón que gobierna un grupo ninguna
FOSTabletStaffManager Roles, inmovilización, aislamiento, silencio, autoridad manual
FOSTabletStaffRow La fila de un jugador en el panel de staff ninguna
FOSTabletPermissions Visibilidad de objetos por rol ninguna
FOSTabletPermissionRow La fila de un jugador en el panel de roles ninguna
FOSTabletLogManager Registro de moderación sincronizado manual
FOSTabletLogRow Una línea de registro ninguna

Esta es la parte que conviene leer antes de publicar un mundo con este pack.

El propietario del staff manager es la única autoridad. Cada acción de moderación es una petición enviada a ese propietario mediante Network Calling. El propietario comprueba al jugador real que llama con NetworkCalling.CallingPlayer, que no se puede falsificar, y solo entonces escribe. Un cliente modificado puede enviar la petición; será rechazada.

Las variables sincronizadas llevan estado, nunca órdenes. Eso es lo que hace seguros a quienes llegan tarde: quien entra aplica el estado actual en lugar de repetir acciones caducadas. Un SendCustomNetworkEvent nunca se les repite, y por eso precisamente el estado no vive en eventos.

La propiedad queda restringida al staff. Si el propietario se va y VRChat deja el objeto en manos de un visitante, lo reclama el miembro del staff con el identificador de jugador más bajo: una regla determinista, para que actúe un cliente y no todos a la vez.

El primer admin es el primer jugador de la instancia, fijado por su nombre visible. Fiarse del master sería un agujero: el master cambia cada vez que alguien se va, y el admin acabaría recayendo en un desconocido. Quien crea la instancia también se reconoce como admin, y al fundador no se le puede degradar nunca, ni por un moderador ni por otro admin.

Las comprobaciones de los componentes de fila son comprobaciones de interfaz. Evitan enviar una petición que va a ser rechazada e impiden que un visitante pulse botones muertos. No son una barrera de seguridad y no pretenden serlo.

El aislamiento es un confinamiento temporal dentro de la instancia actual. Un mundo de VRChat no puede —ni debe— imponer un baneo persistente. Volver a entrar lo borra, por diseño.

A un jugador aislado se le teletransporta a la zona de aislamiento y se le devuelve cada dos segundos si sale de su radio. Reaparecer tampoco lo libera.


Rol Valor Puede
Visitante 0 nada
VIP 1 nada más; el rol existe para las reglas de visibilidad
Moderador 2 inmovilizar, aislar, silenciar, asignar roles hasta moderador
Admin 3 todo eso, además de promover admins y los ajustes comunitarios

Los rangos iguales pueden actuar entre sí: dos moderadores pueden neutralizarse. Es una elección deliberada, para el momento en que uno de ellos se desmadre.

Si se va el último admin, el primer moderador asciende automáticamente. Sin esa sucesión, una instancia pierde toda moderación hasta que se reinicia.

Cada fila del panel de roles lleva cuatro botones —visitante, VIP, moderador, admin— y eso es todo lo que necesita un mundo con los cuatro roles por defecto.

Un mundo que define sus propios roles necesita algo que no crezca con su número. FOS Essentials > FOS Tablet System > Build role selector añade uno a una fila: dos flechas, una etiqueta y un botón de aplicar.

Clona uno de los botones de rol que ya hay en esa fila, así que el selector hereda tus colores, tu tipografía y tus dimensiones en lugar de llegar con los nuestros. Coloca los cuatro objetos que crea y guarda.

Las flechas recorren todos los roles; el botón de aplicar es el que decide. Así, un botón bloqueado dice algo preciso —ese rol no, a esa persona— en vez de parecer una avería. Sigue bloqueado mientras la selección sea el rol que el jugador ya tiene.

La etiqueta sale de la lista de roles, así que sigue tanto a tus nombres como al idioma de cada jugador.

Los roles de moderador y admin se recuerdan solo durante la instancia actual, por nombre visible. Un miembro del staff que se cuelga y vuelve a la misma instancia recupera su rol.

Nada se guarda entre sesiones ni entre instancias. Grupos distintos abren instancias del mismo mundo, y los permisos de una no tienen por qué filtrarse a otra. El VIP no se recuerda, y el aislamiento tampoco, deliberadamente.


FOSTabletPermissions muestra y oculta objetos según el rol del jugador local.

Los roles son acumulativos: un rol obtiene todo lo que se muestra a los roles inferiores. Un admin ve los objetos de visitante, VIP y moderador sin que los copies en cuatro listas; esa copia era el error de configuración más común y el más pesado de deshacer.

Las listas de «oculto para» son excepciones para un rol, aplicadas en último lugar. Un objeto que solo aparece en oculto para moderadores es visible para todos menos para los moderadores.

Las dos listas de staff piden una capacidad, no un rango. Mostrado a moderadores significa «a cualquier rol autorizado a abrir el panel de staff»; Mostrado a admins, «a cualquier rol autorizado a editar los ajustes comunitarios». Con los cuatro roles por defecto es exactamente lo mismo. Deja de serlo el día en que un mundo define sus propios roles: un recepcionista situado en el nivel 2 heredaría si no el panel de moderación por comparación de rangos, sin tener ni uno solo de sus poderes.

Esto es presentación, no protección. Ocultar un objeto no impide que nadie lo alcance por otra vía.


Un FOSTabletToggleGroup guarda una lista de objetos y un estado, aplicado a todos. Un FOSTabletToggleButton apunta a un grupo, directamente y no por una clave de texto.

Los interruptores son locales a propósito. Un ajuste de comodidad no tiene por qué imponerse al resto de la instancia, y sincronizarlo gastaría ancho de banda en algo que nadie ha pedido.

Varios botones pueden gobernar el mismo grupo: se registran en él y sus indicadores se mantienen de acuerdo.


El texto que se ve en el juego pasa por FOS Localization. Asigna el locale manager y da las claves de traducción:

Dónde Claves
FOSTabletStaffManager cuatro nombres de rol, en orden: visitante, VIP, moderador, admin
FOSTabletSettings normas estándar, normas para adultos

Sin locale manager se usan los textos de reserva escritos junto a esos campos, y la tableta funciona en un solo idioma.

Cualquier etiqueta tuya es un FOSLocalizedText, como en cualquier otro sitio de tu mundo.


Los botones de teletransporte de la tableta son componentes de FOS Teleport: un FOSTeleportButton por destino, con su Transform de destino. Este pack no trae su propio teletransportador.

La única excepción es el teletransporte a un jugador del panel de staff: FOS Teleport apunta a un Transform fijo de la escena, mientras que ese destino es un jugador que se mueve y puede irse entre el clic y la llegada. Ahí sigue siendo nativo, y falla en silencio si el objetivo ya no está.


Todos los puntos de entrada siguientes son sin parámetros, así que cualquier script puede alcanzarlos con SendCustomEvent.

Llamada En Efecto
SummonTablet() / CloseTablet() FOSTabletManager Abre o cierra la tableta
RecallTablet() FOSTabletCaller Trae la tableta de vuelta a su soporte
FOSToggle() FOSTabletToggleGroup / FOSTabletToggleButton Invierte un grupo
FOSRoleOf(id) / FOSIsStaff(id) / FOSIsAdmin(id) FOSTabletStaffManager Lee un rol
FOSRequestFreeze/Isolation/Mute(id) FOSTabletStaffManager Pide una acción
FOSRequestRole(id, role) FOSTabletStaffManager Pide un cambio de rol
FOSAdultContentIsOn() FOSTabletSettings Lee el estado del contenido para adultos

Tres componentes publican sus cambios de estado de la misma manera. Llama a FOSRegister(this) en uno de ellos y expón un método público sin parámetros con el nombre correspondiente:

Emisor Evento que exponer
FOSTabletStaffManager FOSApplyStaffState()
FOSTabletToggleGroup FOSApplyToggleState()
FOSLocaleManager FOSApplyLanguage()

Quien escucha debería además aplicarse una vez en su propio Start: puede registrarse después de que el emisor ya haya fijado su estado inicial.

Así es como se enchufa la edición Pro, y así es como se enchufa todo lo que este pack no cubre.


  • Un staff manager por escena. Varios se pelearían por los mismos jugadores.
  • Nada persiste entre sesiones. Los roles viven solo en la instancia actual.
  • El tamaño del registro cuesta ancho de banda. Cada entrada se sincroniza; 30 es un valor por defecto sensato.
  • Los valores restaurados sobrescriben los ajustes del jugador. Ajústalos a tu mundo.
  • Quest y PC se comportan igual: no hay código específico de plataforma, ni podría haberlo, porque Udon se compila una sola vez para ambas.