Underscore.js
Zur Vereinfachung haben Sie Zugriff auf die Underscore.js-Bibliothek (über das globale Objekt_
). Underscore bietet Hilfsfunktionen für Dinge wie_.each
(um ein Array von Objekten zu durchlaufen). Weitere Informationen finden Sie in derUnderscore-Dokumentation.
Protokollierung
Protokoll (Nachricht)
Du kannst diese Funktion verwenden, um Ausgaben in die Mod (API) Konsole auf der Script Editor Seite zu protokollieren. Nützlich zum Debuggen deiner Skripte und um ein besseres Verständnis dafür zu bekommen, was im Mod (API) Sandbox passiert.
on("change:graphic", function(obj) { log("Änderung für Objekt-ID gehört: " + obj.id); });
Objektbestellung
toFront(obj)undtoBack(obj)
Diese beiden Funktionen verschieben ein Objekt auf der Tischplatte an die Vorderseite (oder Rückseite) der Ebene, auf der es sich gerade befindet. Beachten Sie, dass Sie ein tatsächliches Objekt übergeben müssen, z. B. eines, das Sie in einem Ereignisrückruf oder durch Aufruf vongetObj
oderfindObjs
erhalten.
Zufällige Zahlen
randomInteger(max)
Verwenden Sie diese Funktion für Würfel!Diese Funktion berücksichtigtModulo Bias, was sicherstellt, dass die resultierenden Zufallszahlen auch gleichmäßig zwischen 1 und MAX verteilt sind.
Gibt eine zufällige Ganzzahl zurück, wobei der niedrigste Wert 1 und der höchste Wertmax
ist. Dies ist die gleiche Funktionalität, die Roll20 für seine Würfelwürfe nutzt, und es wurde statistisch und rigoros nachgewiesen, dass diese Zahlen zufällig sind.
Math.random()
Du kannst Math.random() wie gewohnt in deinen Mod (API) Skripten aufrufen und darauf vertrauen, dass die Ergebnisse zufällig sind, weil das „Standard“ Math.random() in Javascript durch den kryptographisch sicheren PRNG ersetzt wurde, der Roll20 steuert. Daher können vorhandene Skripte, die Math.random() verwenden, mit der Gewissheit verwendet werden, dass die Ergebnisse tatsächlich so zufällig sind, wie es auf einem Computer möglich ist.
Verwenden Sie Math.random() nicht, wenn eine gleichmäßige Verteilung der Zahlen in einem Bereich gewünscht ist. Während Math.random() Ihnen eine ebenso gute Zufallszahl wie Roll20 liefert, ist die Mathematik, die diese Zufallszahl in einen Bereich mit gleichmäßiger Verteilung umwandelt (wie ein Würfelwurf), nicht so einfach wie die Multiplikation mit einem Modulo oder einem Floor Forderung. Verwenden Sie für diese FällerandomInteger(max).
Spieler ist GM
playerIsGM(playerid)
Die Funktion „Spieler ist GM“ gibt eine boolesche Antwort darauf zurück, ob ein Spieler im Spiel ein GM ist oder nicht. Die Funktion gibt immer die richtige Antwort abhängig vom aktuellen Moment zurück, also auch wenn ein SL beschließt, sich als Spieler erneut anzuschließen oder ein Spieler während des Spiels zum SL befördert wird, wird playerIsGM() entsprechend reagieren, ohne dass ein Cache geleert oder die Mod (API) Sandbox neu gestartet werden muss.
PC sheet
setDefaultTokenForCharacter( Zeichen, Token )
Setzt das Standard-Token für das bereitgestellte Zeichenobjekt auf die Details des bereitgestellten Token-Objekts. Beide Objekte müssen bereits vorhanden sein. Dadurch werden alle derzeit mit dem Charakter verknüpften Standard-Token überschrieben.
Spezialeffekte (FX)
spawnFx(x, y, Typ, Seiten-ID)
Erzeugt einen kurzen Effekt an der Position x,y des Typs. Wenn Sie die Seiten-ID weglassen oder „undefiniert“ übergeben, wird standardmäßig die Seite verwendet, auf der sich die Spieler gerade befinden („playerpageid“ im Kampagnenobjekt).
Für integrierte Effekte sollte der Typ eine Zeichenfolge sein und einer der folgenden Werte sein:beam-color
,bomb-color
,Breath-color
,bubbling-color
,burn-color
,Burst- Farbe
,Explosionsfarbe
,Leuchtfarbe
,Raketenfarbe
,Nova-Farbe
,Splatter-Farbe
Wobei „Farbe“ oben eines von:Säure
,Blut
,Zauber
,Tod
,Feuer
,Frost
,heilig
,Magie
,Schleim
,Rauch
ist ,Wasser
Bei benutzerdefinierten Effekten sollte der Typ die ID des custfx-Objekts für den benutzerdefinierten Effekt sein.
spawnFxBetweenPoints(point1, point2, type, pageid)
Funktioniert genauso wie spawnFx, aber statt eines einzelnen Punkts übergeben Sie zwei Punkte im Format {x: 100, y: 100}. Zum Beispiel: spawnFxBetweenPoints({x: 100, y: 100}, {x: 400, y: 400}, "beam-acid"); Der Effekt „wandert“ zwischen den beiden Punkten bei Effekten, die dies unterstützen (die gleichen, die eine Handlungsfähigkeit auf der Clientseite ermöglichen).
Die folgenden Effekttypen müssen immer spawnFxBetweenPoints anstelle von spawnFx verwenden:beam-color
,Breath-color
,Splatter-Color
spawnFxWithDefinition(x, y, definitionJSON, pageid)
Erzeugt einen benutzerdefinierten Ad-hoc-Effekt mithilfe von JSON für eine Effektdefinition an der Position x,y. Wenn Sie die Seiten-ID weglassen oder „undefiniert“ übergeben, wird standardmäßig die Seite verwendet, auf der sich die Spieler gerade befinden („playerpageid“ im Kampagnenobjekt).
definitionJSON ist ein Javascript-Objekt, das der JSON-Spezifikation fürCustom FXfolgt.
Jukebox-Playlists
playJukeboxPlaylist(playlistid)
Die Wiedergabefunktion übernimmt die Ordner-ID (erhalten Sie sie aus der Eigenschaft „_jukeboxfolder“ im Kampagnenobjekt) der Wiedergabeliste und beginnt mit der Wiedergabe dieser Wiedergabeliste für alle im Spiel.
stopJukeboxPlaylist()
Die Stop-Funktion erfordert keine Argumente und stoppt jede gerade abgespielte Playlist.
Verschiedenes
sendPing(left, top, pageid, (optional) playerid, (optional) moveAll, (optional) sichtbarTo)
Sendet einen „Ping“ an die Tischplatte (dasselbe, als ob ein Spieler seine Maustaste gedrückt hält). Sie müssen die oberen/linken Koordinaten und die Seiten-ID der Seite angeben, die angepingt werden soll. Sie können optional die ID eines Spielers angeben, der den Ping ausgeführt hat. Wenn Sie dies nicht tun, wird „API“ angenommen und der Ping wird gelb angezeigt.
Sie können „true“ für die Option „moveAll“ übergeben, wenn Sie die Ansichten der Spieler ebenfalls an diesen Ort verschieben möchten.
Sie können in „visibleTo“ die Spieler-IDs für die Spieler festlegen, die den Ping sehen oder von ihm bewegt werden können. Dies wird als einzelne Spieler-ID, als Array oder als durch Kommas getrennte Zeichenfolge dargestellt.
on("chat:message", function(msg) { // Geben Sie „!pingtest“ in den Chat ein, um den Test auszuführen if(msg.type == „api“ && msg.content.indexOf(“!pingtest ") !== -1) { // Um einen bestimmten Spieler zu erhalten, verwenden Sie findObjs({_type: "player"})[i].id anstelle von null für den 3. Parameter player = findObjs({_type: "player "}); Spieler1 = Spieler[1].id; Spieler2 = Spieler[2].id; // Erstelle ein Array aller Spieler-IDs var allPlayerIDs =players.map(function(player) { return player['id ']; }); // Pingen Sie alle auf dieser Seite an denselben Ort. sendPing(300, 300, Campaign().get('playerpageid'), null, true); setTimeout(function() { // Alle auf dieser Seite an denselben Ort pingen sendPing(1500, 500, Campaign().get('playerpageid'), msg.playerid, true, ""); }, 1000); setTimeout(function() { // Pinge nur den angegebenen Spieler an diesen Ort sendPing(1200, 500, Campaign().get('playerpageid'), null, true, player1); }, 2000); setTimeout(function() { // Ein Array von Spieler-IDs (Spieler 1 und 2) an diesen Ort pingen sendPing(900, 100, Campaign().get('playerpageid'), player2, true, [player1, Spieler2]); }, 3000); setTimeout(function() { // Eine durch Kommas getrennte Liste, die als String bereitgestellt wird, an diesen Ort senden sendPing(300, 300, Campaign().get('playerpageid'), player1, true, allPlayerIDs.join() ); }, 4000); } })
Ein Hinweis zu Abständen und Rastern in Roll20
In Roll20 beträgt eine „Einheit“ immer 70 Pixel auf dem Bildschirm. Die „Einheit“ ist der Baustein, auf dem die Distanz und das Raster aufgebaut sind. Standardmäßig:
- 1 Einheit = 5 Fuß
- 1 Einheit = 1 Planquadrat
- Daher ist 5 Fuß = 1 Einheit = 1 Quadrat
Der GM kann jedoch sowohl die Größe des Gitters als auch den Maßstab der Entfernung ändern. 1 Einheit ist immer 70 Pixel, aber der GM könnte die Einstellungen so ändern, dass 1 Einheit jetzt 10 Fuß groß ist (d. h. 70 Pixel = 10 Fuß) oder dass jeder Rasterraum 2 Einheiten groß ist (was bedeutet, dass jeder Rasterraum jetzt 140 Pixel groß ist).