FOS Tablet System — Standard
Version 2.2.1 · benötigt FOS Essentials Core 1.3.0 oder neuer · benötigt außerdem FOS Localization 1.0.1, FOS Teleport 1.0.1
Ein Tablet, das sich Spielende vor sich holen: Teleport-Menü, lokale Schalter, Weltregeln und ein vollständiges Moderationspanel mit Rollen, Bewegungssperre, Isolation, Stummschaltung und synchronisiertem Protokoll.
Benötigt FOS Essentials Core 1.3.0, FOS Localization 1.0.0 und FOS Teleport 1.0.0.
Du steigst von einer älteren Fassung um? Lies zuerst CHANGELOG.md — ein Prefab, das du
verändert hast, wandert nicht von selbst mit.
Editionen
Abschnitt betitelt „Editionen“Dieses Pack erscheint in Editionen, jede in ihrem eigenen Ordner:
Assets/FOS/TabletSystem/└── Standard/ ← du bist hierEine künftige Pro-Edition liegt daneben unter Pro/, mit eigener Assembly und eigenen
Komponenten. Sie ergänzt Komponenten neben denen des Standard und spricht mit ihnen
über deren öffentliche API — sie ersetzt nie eine Komponente am Prefab. Ein Umstieg kostet
dich daher nie die bereits erledigte Verdrahtung.
Einrichtung
Abschnitt betitelt „Einrichtung“- Ziehe FOS Essentials > FOS Tablet System > Standard > FOSTabletSystem in deine Szene.
- Weise die Isolationszone zu: ein leeres Transform, irgendwo abseits. Ohne sie bewirkt das Isolieren einer Person nichts.
- Weise das Feld Spielerregister am Staff-Manager zu.
FOSPlayerRegistrystammt aus dem Core und lebt auf einem eigenen GameObject — nie am Staff-Manager selbst. VRChat wendet einen Sync-Modus je Objekt an, und das Register deklariertNoVariableSync: Auf demselben Objekt würde es die manuelle Synchronisierung des Staff-Managers mit herunterziehen. Das Feld ist optional, aber ohne es reserviert die Spielerliste bei jedem Beitritt und jedem Verlassen ein Array. - Trage die Rückstellwerte am Staff-Manager so ein, dass sie zu den Bewegungs- und Sprachwerten deiner Welt passen. Sie sind das, was jemand zurückbekommt, wenn die Sperre oder die Stummschaltung aufgehoben wird, und sie überschreiben das Vorherige.
- Trage deine Teleportziele, deine Schaltergruppen und deine Regeln ein.
Komponenten
Abschnitt betitelt „Komponenten“| Komponente | Aufgabe | Netzwerk |
|---|---|---|
FOSTabletManager |
Holt, platziert und schließt das Tablet | keines |
FOSTabletCaller |
Ruft das Tablet an einen festen Ständer zurück | keines |
FOSTabletSettings |
Persönliche Regler, Gemeinschaftseinstellungen, Regeln | manuell |
FOSTabletToggleGroup |
Objekte, die gemeinsam ein- und ausgeschaltet werden | keines |
FOSTabletToggleButton |
Schaltfläche, die eine Gruppe steuert | keines |
FOSTabletStaffManager |
Rollen, Sperre, Isolation, Stummschaltung, Autorität | manuell |
FOSTabletStaffRow |
Die Zeile einer Person im Staff-Panel | keines |
FOSTabletPermissions |
Sichtbarkeit von Objekten je Rolle | keines |
FOSTabletPermissionRow |
Die Zeile einer Person im Rollen-Panel | keines |
FOSTabletLogManager |
Synchronisiertes Moderationsprotokoll | manuell |
FOSTabletLogRow |
Eine Protokollzeile | keines |
Das Sicherheitsmodell
Abschnitt betitelt „Das Sicherheitsmodell“Das ist der Teil, den man lesen sollte, bevor man eine Welt damit veröffentlicht.
Der Besitzer des Staff-Managers ist die einzige Autorität. Jede Moderationsaktion ist
eine Anfrage an diesen Besitzer über Network Calling. Der Besitzer prüft die echte
aufrufende Person mit NetworkCalling.CallingPlayer, was sich nicht fälschen lässt, und
schreibt erst dann. Ein veränderter Client kann die Anfrage senden; sie wird abgelehnt.
Synchronisierte Variablen tragen Zustand, nie Befehle. Genau das macht spät
Hinzukommende sicher: Wer eintrifft, wendet den aktuellen Zustand an, statt veraltete
Aktionen zu wiederholen. Ein SendCustomNetworkEvent wird für sie nie wiederholt — und
genau deshalb lebt der Zustand nicht in Ereignissen.
Ownership bleibt dem Team vorbehalten. Verlässt der Besitzer die Instanz und legt VRChat das Objekt bei einer besuchenden Person ab, holt es sich das Teammitglied mit der niedrigsten Spieler-ID zurück — eine deterministische Regel, damit ein Client handelt und nicht alle auf einmal.
Der erste Admin ist die erste Person der Instanz, festgehalten über den Anzeigenamen. Dem Master zu vertrauen wäre eine Lücke: Der Master wechselt jedes Mal, wenn jemand geht, und die Admin-Rolle landete irgendwann bei einer fremden Person. Wer die Instanz erstellt, gilt ebenfalls als Admin, und die gründende Person kann nie herabgestuft werden — weder von einer Moderation noch von einem anderen Admin.
Die Prüfungen in den Zeilenkomponenten sind reine Oberflächenprüfungen. Sie vermeiden Anfragen, die ohnehin abgelehnt würden, und verhindern, dass Besuchende auf tote Schaltflächen klicken. Sie sind keine Sicherheitsbarriere und geben auch nicht vor, eine zu sein.
Was Isolation ist, und was nicht
Abschnitt betitelt „Was Isolation ist, und was nicht“Isolation ist eine zeitweilige Absonderung innerhalb der laufenden Instanz. Eine VRChat-Welt kann — und darf — keinen dauerhaften Bann durchsetzen. Ein erneuter Beitritt hebt sie auf, so ist es gedacht.
Eine isolierte Person wird in die Isolationszone teleportiert und alle zwei Sekunden zurückgeschickt, wenn sie deren Radius verlässt. Auch ein Respawn befreit sie nicht.
Die Rollen
Abschnitt betitelt „Die Rollen“| Rolle | Wert | Darf |
|---|---|---|
| Besucher | 0 | nichts |
| VIP | 1 | nichts weiter; die Rolle existiert für die Sichtbarkeitsregeln |
| Moderation | 2 | sperren, isolieren, stummschalten, Rollen bis zur Moderation vergeben |
| Admin | 3 | all das, dazu Admins ernennen und die Gemeinschaftseinstellungen |
Gleiche Ränge dürfen aufeinander wirken — zwei Moderierende können sich gegenseitig neutralisieren. Das ist eine bewusste Entscheidung für den Moment, in dem eine davon entgleist.
Verlässt der letzte Admin die Instanz, wird die erste Moderation automatisch befördert. Ohne diese Nachfolge verliert eine Instanz jede Moderation, bis sie neu gestartet wird.
Eine Rolle vergeben
Abschnitt betitelt „Eine Rolle vergeben“Jede Zeile des Rollen-Panels trägt vier Schaltflächen — Besucher, VIP, Moderation, Admin — und mehr braucht eine Welt mit den vier Standardrollen nicht.
Eine Welt, die eigene Rollen definiert, braucht etwas, das nicht mit deren Anzahl
wächst. FOS Essentials > FOS Tablet System > Build role selector fügt einer Zeile eines
hinzu: zwei Pfeile, eine Beschriftung, eine Übernehmen-Schaltfläche.
Es klont eine der Rollen-Schaltflächen, die bereits in dieser Zeile liegen, sodass die Auswahl deine Farben, deine Schrift und deine Maße erbt, statt mit unseren anzukommen. Positioniere die vier erzeugten Objekte und speichere.
Die Pfeile laufen durch alle Rollen; entschieden wird mit der Übernehmen-Schaltfläche. So sagt eine gesperrte Schaltfläche etwas Genaues — diese Rolle nicht, für diese Person — statt wie ein Defekt zu wirken. Sie bleibt gesperrt, solange die Auswahl die Rolle ist, die die Person bereits hat.
Die Beschriftung stammt aus der Rollenliste und folgt damit sowohl deinen Namen als auch der Sprache jeder Person.
Das Gedächtnis der Instanz
Abschnitt betitelt „Das Gedächtnis der Instanz“Die Rollen Moderation und Admin werden nur für die laufende Instanz gemerkt, über den Anzeigenamen. Wer aus dem Team abstürzt und in dieselbe Instanz zurückkehrt, erhält seine Rolle wieder.
Zwischen Sitzungen oder über Instanzen hinweg wird nichts gespeichert. Verschiedene Gruppen öffnen Instanzen derselben Welt, und Rechte aus der einen haben in der anderen nichts verloren. VIP wird nicht gemerkt, und Isolation bewusst ebenfalls nicht.
Sichtbarkeit je Rolle
Abschnitt betitelt „Sichtbarkeit je Rolle“FOSTabletPermissions zeigt und verbirgt Objekte je nach Rolle der lokalen Person.
Rollen sind kumulativ: Eine Rolle bekommt alles, was den darunterliegenden Rollen gezeigt wird. Ein Admin sieht die Objekte für Besucher, VIP und Moderation, ohne dass du sie in vier Listen kopierst — dieses Kopieren war der häufigste Konfigurationsfehler und der mühsamste rückgängig zu machen.
Die Listen „verborgen vor” sind Ausnahmen für eine Rolle, zuletzt angewandt. Ein Objekt, das nur in verborgen vor der Moderation auftaucht, ist für alle sichtbar außer für die Moderation.
Die beiden Team-Listen fragen nach einer Fähigkeit, nicht nach einem Rang. Gezeigt der Moderation heißt „jeder Rolle, die das Staff-Panel öffnen darf”, Gezeigt den Admins „jeder Rolle, die die Gemeinschaftseinstellungen bearbeiten darf”. Mit den vier Standardrollen ist das genau dasselbe. Es hört auf, dasselbe zu sein, sobald eine Welt eigene Rollen definiert: Eine begrüßende Rolle auf Stufe 2 würde sonst über einen Rangvergleich das Moderationspanel erben, ohne eine einzige seiner Befugnisse zu besitzen.
Das ist Darstellung, kein Schutz. Ein Objekt zu verbergen hindert niemanden daran, es anders zu erreichen.
Die Schalter
Abschnitt betitelt „Die Schalter“Eine FOSTabletToggleGroup hält eine Liste von Objekten und einen Zustand, der für
alle gilt. Ein FOSTabletToggleButton zeigt auf eine Gruppe — direkt, nicht über einen
Textschlüssel.
Die Schalter sind bewusst lokal. Eine Komforteinstellung hat keinen Grund, dem Rest der Instanz aufgezwungen zu werden, und sie zu synchronisieren verbrauchte Bandbreite für etwas, das niemand verlangt hat.
Mehrere Schaltflächen dürfen dieselbe Gruppe steuern: Sie melden sich bei ihr an, und ihre Anzeigen bleiben einig.
Texte und Übersetzungen
Abschnitt betitelt „Texte und Übersetzungen“Text im Spiel läuft über FOS Localization. Weise den Locale-Manager zu und gib die Übersetzungsschlüssel an:
| Wo | Schlüssel |
|---|---|
FOSTabletStaffManager |
vier Rollennamen, in dieser Reihenfolge: Besucher, VIP, Moderation, Admin |
FOSTabletSettings |
Standardregeln, Regeln für Erwachseneninhalte |
Ohne Locale-Manager werden die neben diesen Feldern hinterlegten Ersatztexte verwendet, und das Tablet arbeitet in einer Sprache.
Jede eigene Beschriftung ist ein FOSLocalizedText, wie überall sonst in deiner Welt.
Der Teleport
Abschnitt betitelt „Der Teleport“Die Teleport-Schaltflächen im Tablet sind Komponenten von FOS Teleport: ein
FOSTeleportButton je Ziel, mit seinem Ziel-Transform. Dieses Pack bringt keinen eigenen
Teleporter mit.
Die einzige Ausnahme ist der Teleport zu einer Person im Staff-Panel: FOS Teleport zielt auf ein festes Transform in der Szene, während dieses Ziel eine Person ist, die sich bewegt und zwischen Klick und Ankunft gehen kann. Hier bleibt es nativ und scheitert stillschweigend, wenn das Ziel weg ist.
Scripting
Abschnitt betitelt „Scripting“Jeder Einstiegspunkt unten kommt ohne Parameter aus, jedes Skript erreicht ihn also mit
SendCustomEvent.
| Aufruf | An | Wirkung |
|---|---|---|
SummonTablet() / CloseTablet() |
FOSTabletManager |
Öffnet oder schließt das Tablet |
RecallTablet() |
FOSTabletCaller |
Holt das Tablet an seinen Ständer zurück |
FOSToggle() |
FOSTabletToggleGroup / FOSTabletToggleButton |
Kippt eine Gruppe |
FOSRoleOf(id) / FOSIsStaff(id) / FOSIsAdmin(id) |
FOSTabletStaffManager |
Liest eine Rolle |
FOSRequestFreeze/Isolation/Mute(id) |
FOSTabletStaffManager |
Fordert eine Aktion an |
FOSRequestRole(id, role) |
FOSTabletStaffManager |
Fordert einen Rollenwechsel an |
FOSAdultContentIsOn() |
FOSTabletSettings |
Liest den Zustand der Erwachseneninhalte |
Erweiterungspunkte
Abschnitt betitelt „Erweiterungspunkte“Drei Komponenten veröffentlichen ihre Zustandsänderungen auf dieselbe Weise. Rufe an einer
davon FOSRegister(this) auf und stelle eine öffentliche parameterlose Methode mit
passendem Namen bereit:
| Sender | Bereitzustellendes Event |
|---|---|
FOSTabletStaffManager |
FOSApplyStaffState() |
FOSTabletToggleGroup |
FOSApplyToggleState() |
FOSLocaleManager |
FOSApplyLanguage() |
Wer zuhört, sollte sich außerdem einmal im eigenen Start selbst anwenden: Die Anmeldung
kann erfolgen, nachdem der Sender seinen Anfangszustand bereits gesetzt hat.
So dockt die Pro-Edition an, und so dockt auch alles an, was dieses Pack nicht abdeckt.
Hinweise und Grenzen
Abschnitt betitelt „Hinweise und Grenzen“- Ein Staff-Manager je Szene. Mehrere würden sich um dieselben Personen streiten.
- Nichts überdauert eine Sitzung. Rollen leben nur in der laufenden Instanz.
- Die Protokollgröße kostet Bandbreite. Jeder Eintrag wird synchronisiert; 30 ist ein sinnvoller Standardwert.
- Die Rückstellwerte überschreiben die Einstellungen der Person. Passe sie an deine Welt an.
- Quest und PC verhalten sich identisch: Es gibt keinen plattformspezifischen Code, und es könnte ihn nicht geben — Udon wird einmal für beide kompiliert.
