FOS Tablet System — Standard
Version 2.2.1 · exige FOS Essentials Core 1.3.0 ou plus récent · exige aussi FOS Localization 1.0.1, FOS Teleport 1.0.1
Une tablette que le joueur fait apparaître devant lui : menu de téléportation, interrupteurs locaux, règlement du monde, et un panneau de modération complet avec rôles, immobilisation, isolement, coupure micro et journal synchronisé.
Exige FOS Essentials Core 1.3.0, FOS Localization 1.0.0 et FOS Teleport 1.0.0.
Vous venez d’une version antérieure ? Lisez d’abord CHANGELOG.md — un prefab que vous
avez modifié ne se reporte pas tout seul.
Éditions
Section intitulée « Éditions »Ce pack est livré en éditions, chacune dans son dossier :
Assets/FOS/TabletSystem/└── Standard/ ← vous êtes iciUne future édition Pro se place à côté, sous Pro/, avec sa propre assembly et ses
propres composants. Elle ajoute des composants aux côtés de ceux du Standard et
dialogue avec eux par leur API publique — elle ne remplace jamais un composant du prefab.
La mise à niveau ne vous coûte donc jamais le câblage déjà fait.
Mise en place
Section intitulée « Mise en place »- Posez FOS Essentials > FOS Tablet System > Standard > FOSTabletSystem dans votre scène.
- Affectez la zone d’isolement : un Transform vide, quelque part à l’écart. Sans elle, isoler un joueur ne fait rien.
- Affectez le champ registre de joueurs du staff manager.
FOSPlayerRegistryvient du Core et vit sur son propre GameObject — jamais sur le staff manager lui-même. VRChat applique un seul mode de synchro par objet, et le registre déclareNoVariableSync: posé sur le même objet, il entraînerait la synchro manuelle du staff manager avec lui. Le champ est facultatif, mais sans lui la liste de joueurs alloue un tableau à chaque arrivée et à chaque départ. - Renseignez les valeurs restaurées du staff manager pour qu’elles correspondent aux réglages de déplacement et de voix de votre monde. Ce sont elles qu’un joueur récupère quand on le libère ou qu’on lui rend le micro, et elles écrasent ce qu’il avait.
- Renseignez vos destinations de téléportation, vos groupes d’interrupteurs et votre règlement.
Composants
Section intitulée « Composants »| Composant | Rôle | Réseau |
|---|---|---|
FOSTabletManager |
Fait apparaître, place et ferme la tablette | aucun |
FOSTabletCaller |
Rappelle la tablette sur un support fixe | aucun |
FOSTabletSettings |
Curseurs personnels, réglages communautaires, règlement | manuel |
FOSTabletToggleGroup |
Objets allumés et éteints ensemble | aucun |
FOSTabletToggleButton |
Bouton pilotant un groupe | aucun |
FOSTabletStaffManager |
Rôles, immobilisation, isolement, micro, autorité | manuel |
FOSTabletStaffRow |
La ligne d’un joueur dans le panneau staff | aucun |
FOSTabletPermissions |
Visibilité des objets par rôle | aucun |
FOSTabletPermissionRow |
La ligne d’un joueur dans le panneau des rôles | aucun |
FOSTabletLogManager |
Journal de modération synchronisé | manuel |
FOSTabletLogRow |
Une ligne de journal | aucun |
Le modèle de sécurité
Section intitulée « Le modèle de sécurité »C’est la partie à lire avant de livrer un monde équipé de ce pack.
Le propriétaire du staff manager est la seule autorité. Chaque action de modération est
une requête envoyée à ce propriétaire via Network Calling. Le propriétaire vérifie le
vrai joueur appelant avec NetworkCalling.CallingPlayer, qui ne peut pas être falsifié,
et n’écrit qu’ensuite. Un client modifié peut envoyer la requête ; elle sera refusée.
Les variables synchronisées portent un état, jamais des commandes. C’est ce qui rend
les arrivants tardifs sûrs : un joueur qui arrive applique l’état courant au lieu de
rejouer des actions périmées. Un SendCustomNetworkEvent ne leur est jamais rejoué, et
c’est précisément pourquoi l’état ne vit pas dans des événements.
L’ownership est réservé au staff. Si le propriétaire part et que VRChat dépose l’objet sur un visiteur, le membre du staff au plus petit identifiant de joueur le récupère — une règle déterministe, pour qu’un seul client agisse et non tous à la fois.
Le premier admin est le premier joueur de l’instance, verrouillé par son nom affiché. Faire confiance au master serait une faille : le master change chaque fois que quelqu’un part, et l’admin finirait par échoir à un inconnu. Le créateur de l’instance est également reconnu comme admin, et le fondateur ne peut jamais être rétrogradé — ni par un modérateur, ni par un autre admin.
Les vérifications dans les composants de ligne sont des vérifications d’interface. Elles évitent d’envoyer une requête qui sera refusée et empêchent un visiteur de cliquer sur des boutons morts. Ce ne sont pas des barrières de sécurité et elles ne prétendent pas l’être.
Ce qu’est l’isolement, et ce qu’il n’est pas
Section intitulée « Ce qu’est l’isolement, et ce qu’il n’est pas »L’isolement est un confinement temporaire dans l’instance en cours. Un monde VRChat ne peut pas — et ne doit pas — imposer un bannissement persistant. Rejoindre à nouveau l’efface, et c’est voulu.
Un joueur isolé est téléporté dans la zone d’isolement et y est renvoyé toutes les deux secondes s’il sort de son rayon. Réapparaître ne le libère pas non plus.
Les rôles
Section intitulée « Les rôles »| Rôle | Valeur | Peut |
|---|---|---|
| Visiteur | 0 | rien |
| VIP | 1 | rien de plus ; le rôle existe pour les règles de visibilité |
| Modérateur | 2 | immobiliser, isoler, couper le micro, attribuer les rôles jusqu’à modérateur |
| Admin | 3 | tout cela, plus promouvoir des admins et les réglages communautaires |
Les rangs égaux peuvent agir les uns sur les autres — deux modérateurs peuvent se neutraliser. C’est un choix délibéré, pour le moment où l’un d’eux dérape.
Si le dernier admin part, le premier modérateur est promu automatiquement. Sans cette succession, une instance perd toute modération jusqu’à son redémarrage.
Attribuer un rôle
Section intitulée « Attribuer un rôle »Chaque ligne du panneau des rôles porte quatre boutons — visiteur, VIP, modérateur, admin — et c’est tout ce dont a besoin un monde qui garde les quatre rôles par défaut.
Un monde qui définit ses propres rôles a besoin de quelque chose qui ne grandit pas
avec leur nombre. FOS Essentials > FOS Tablet System > Build role selector en ajoute un à
une ligne : deux flèches, une étiquette, un bouton d’application.
Il clone l’un des boutons de rôle déjà présents sur la ligne, si bien que le sélecteur hérite de vos couleurs, de votre police et de vos dimensions plutôt que d’arriver avec les nôtres. Positionnez les quatre objets qu’il crée, et sauvegardez.
Les flèches parcourent tous les rôles ; c’est le bouton d’application qui tranche. Ainsi, un bouton verrouillé dit quelque chose de précis — pas ce rôle-là, à cette personne-là — au lieu de passer pour une panne. Il reste verrouillé tant que la sélection est le rôle que le joueur détient déjà.
L’étiquette vient de la liste des rôles : elle suit donc à la fois vos noms et la langue de chaque joueur.
La mémoire de l’instance
Section intitulée « La mémoire de l’instance »Les rôles de modérateur et d’admin sont mémorisés pour l’instance en cours seulement, par nom affiché. Un membre du staff qui plante et revient dans la même instance retrouve son rôle.
Rien n’est conservé entre les sessions ni d’une instance à l’autre. Des groupes différents ouvrent des instances du même monde, et les permissions de l’une n’ont rien à faire dans l’autre. Le VIP n’est pas mémorisé, et l’isolement ne l’est délibérément pas non plus.
Visibilité par rôle
Section intitulée « Visibilité par rôle »FOSTabletPermissions affiche et masque des objets selon le rôle du joueur local.
Les rôles sont cumulatifs : un rôle obtient tout ce qui est montré aux rôles inférieurs. Un admin voit les objets visiteur, VIP et modérateur sans que vous les recopiiez dans quatre listes — cette recopie était l’erreur de configuration la plus fréquente et la plus fastidieuse à défaire.
Les listes « masqué pour » sont des exceptions pour un rôle, appliquées en dernier. Un objet qui n’apparaît que dans masqué pour les modérateurs est visible par tout le monde sauf les modérateurs.
Les deux listes staff demandent une capacité, pas un rang. Montré aux modérateurs signifie « à tout rôle autorisé à ouvrir le panneau staff », Montré aux admins « à tout rôle autorisé à modifier les réglages communautaires ». Avec les quatre rôles par défaut, c’est exactement la même chose. Ça cesse de l’être le jour où un monde définit ses propres rôles : un accueillant placé au niveau 2 hériterait sinon du panneau de modération par comparaison de rangs, sans détenir un seul de ses pouvoirs.
C’est de la présentation, pas de la protection. Masquer un objet n’empêche personne de l’atteindre autrement.
Les interrupteurs
Section intitulée « Les interrupteurs »Un FOSTabletToggleGroup porte une liste d’objets et un état, appliqué à tous. Un
FOSTabletToggleButton pointe vers un groupe — directement, pas par une clé texte.
Les interrupteurs sont locaux à dessein. Un réglage de confort n’a aucune raison d’être imposé au reste de l’instance, et le synchroniser dépenserait de la bande passante pour quelque chose que personne n’a demandé.
Plusieurs boutons peuvent piloter le même groupe : ils s’y enregistrent et leurs voyants restent d’accord.
Textes et traductions
Section intitulée « Textes et traductions »Le texte affiché en jeu passe par FOS Localization. Affectez le locale manager et donnez les clés de traduction :
| Où | Clés |
|---|---|
FOSTabletStaffManager |
quatre noms de rôles, dans l’ordre : visiteur, VIP, modérateur, admin |
FOSTabletSettings |
règlement standard, règlement adulte |
Sans locale manager, les textes de repli écrits à côté de ces champs sont utilisés, et la tablette fonctionne dans une seule langue.
Toute étiquette qui vous appartient est un FOSLocalizedText, comme partout ailleurs dans
votre monde.
La téléportation
Section intitulée « La téléportation »Les boutons de téléportation de la tablette sont des composants FOS Teleport : un
FOSTeleportButton par destination, avec son Transform cible. Ce pack ne livre pas son
propre téléporteur.
L’unique exception est la téléportation vers un joueur du panneau staff : FOS Teleport vise un Transform fixe dans la scène, alors que cette destination est un joueur qui se déplace et peut partir entre le clic et l’arrivée. Elle reste native ici, et échoue en silence si la cible n’est plus là.
Scripting
Section intitulée « Scripting »Chaque point d’entrée ci-dessous est sans paramètre : n’importe quel script peut donc
l’atteindre avec SendCustomEvent.
| Appel | Sur | Effet |
|---|---|---|
SummonTablet() / CloseTablet() |
FOSTabletManager |
Ouvre ou ferme la tablette |
RecallTablet() |
FOSTabletCaller |
Ramène la tablette sur son support |
FOSToggle() |
FOSTabletToggleGroup / FOSTabletToggleButton |
Inverse un groupe |
FOSRoleOf(id) / FOSIsStaff(id) / FOSIsAdmin(id) |
FOSTabletStaffManager |
Lit un rôle |
FOSRequestFreeze/Isolation/Mute(id) |
FOSTabletStaffManager |
Demande une action |
FOSRequestRole(id, role) |
FOSTabletStaffManager |
Demande un changement de rôle |
FOSAdultContentIsOn() |
FOSTabletSettings |
Lit l’état du contenu adulte |
Points d’extension
Section intitulée « Points d’extension »Trois composants publient leurs changements d’état de la même façon. Appelez
FOSRegister(this) sur l’un d’eux, et exposez une méthode publique sans paramètre au nom
correspondant :
| Émetteur | Événement à exposer |
|---|---|
FOSTabletStaffManager |
FOSApplyStaffState() |
FOSTabletToggleGroup |
FOSApplyToggleState() |
FOSLocaleManager |
FOSApplyLanguage() |
Un écouteur devrait aussi s’appliquer une fois dans son propre Start : il peut
s’enregistrer après que l’émetteur a déjà posé son état initial.
C’est ainsi que se branche l’édition Pro, et ainsi que se branche tout ce que ce pack ne couvre pas.
Notes et limites
Section intitulée « Notes et limites »- Un staff manager par scène. Plusieurs se disputeraient les mêmes joueurs.
- Rien ne persiste entre les sessions. Les rôles ne vivent que dans l’instance en cours.
- La taille du journal coûte de la bande passante. Chaque entrée est synchronisée ; 30 est une valeur par défaut raisonnable.
- Les valeurs restaurées écrasent les réglages du joueur. Accordez-les à votre monde.
- Quest et PC se comportent à l’identique : il n’y a pas de code spécifique à une plateforme, et il ne pourrait pas y en avoir — Udon est compilé une seule fois pour les deux.
