Mod-Skripte: Sandkastenmodell

Der Roll20-Mod-Skript-Sandkasten betreibt für jede Kampagne eine serverseitige virtuelle Maschine. Skripte werden nicht auf den Computern der Spieler ausgeführt. Der Sandkasten sorgt dafür, dass die Skripte einer Kampagne keine Auswirkungen auf eine andere Kampagne haben, und verhindert, dass ein Skript endlos läuft.

Mod-Skript-Sandkasten v1.0 und v1.5 verwenden dasselbe Modell. Version 1.5 fügt Zugriff auf den Beacon-Bogen (getComputed, setComputed, performAction und zugehörige Charaktermethoden) sowie weitere Funktionen hinzu. Welchen Sandkasten ein Spiel nutzt, ist unabhängig davon, ob der Spieltisch Jumpgate ist.

Wie es funktioniert

Wenn du neugierig auf die technischen Details bist, wie der Sandkasten funktioniert, findest du hier ein kurzes Diagramm:

Vom Benutzer geschriebene Skripte ===> Mod-Skript-Server ===> Kampagnen-Sandkasten <===> Echtzeit-Synchronisierungsserver

Der Mod-Skript-Server überwacht die Aktivitäten in deiner Kampagne. Wenn jemand im Spiel ist, wird ein Sandkasten gestartet und die Mod-Skripte dieses Spiels werden geladen. Wenn das Spiel leer ist, wird der Sandkasten angehalten. Wenn du den Sandkasten speicherst und neu startest, werden die Skripte erneut ausgeführt, ready wird erneut ausgelöst und ausstehende setTimeout-Timer werden verworfen. Der Sandkasten sendet und empfängt Daten über den Echtzeit-Synchronisierungsserver. So reagiert er auf Ereignisse und ändert das Spiel.

Jedes Skript in einem Spiel nutzt denselben globalen Geltungsbereich. Ein var oder eine function am Anfang eines Skripts ist für die anderen sichtbar, und zwei Skripte, die denselben Namen verwenden, überschreiben sich gegenseitig. Schließe ein Skript in eine IIFE ein, wenn seine Namen privat bleiben sollen. state wird ebenfalls von allen Skripten gemeinsam genutzt und bleibt zwischen Sitzungen erhalten. Campaign().nodeVersion gibt die Node.js-Version an. Es gibt kein require, kein DOM und kein console.log – benutze log(). Ein nicht abgefangener Fehler kann den Sandkasten für jedes Skript im Spiel anhalten; siehe Mod-Skripte: Debugging.

Einschränkungen durch normales Javascript

Auch wenn Roll20-Skripte in JavaScript geschrieben sind, gibt es einige Einschränkungen, die du beachten solltest, wenn du es gewohnt bist, JavaScript für Websites zu programmieren. Roll20-Skripte werden in einer separaten Sandbox von der Roll20-Site ausgeführt. Dies bietet eine zusätzliche Trennungs- und Sicherheitsebene für unser System und Ihre Spieler. Diese Sandbox bedeutet Folgendes:

  • Sie können keine HTTP-Anfragen (AJAX) stellen.
  • Du kannst keine externen Skripte oder Bibliotheken (zum Beispiel jQuery) laden. Underscore.js ist bereits als globale Variable _ verfügbar. Siehe underscorejs.org.
  • Die Umgebung ist JavaScript, aber sie ist keine Browserumgebung, daher gibt es kein DOM, keine Seitenelemente, kein CSS, kein document, kein window usw.
War dieser Beitrag hilfreich?
40 von 56 fanden dies hilfreich