Underscore.js
Zur Vereinfachung hast du Zugriff auf die Underscore.js-Bibliothek (über das globale Objekt _). Underscore bietet Werkzeugfunktionen für Dinge wie _.each (um ein Array von Objekten zu durchlaufen). Weitere Informationen findest du in der Underscore-Dokumentation.
Protokollierung
log(Nachricht)
Du kannst diese Funktion verwenden, um Ausgaben auf der Mod (API) Konsole auf der Seite Script Editor zu protokollieren. Nützlich zum Debuggen deiner Skripte und um besser zu verstehen, was im Mod (API) Sandkasten passiert.
on("change:graphic", function(obj) {
log("Änderung für Objekt-ID gehört: " + obj.id);
});
Objektanordnung
toFront(obj) und toBack(obj)
Diese beiden Funktionen verschieben ein Objekt auf dem Spieltisch an die Vorderseite (oder Rückseite) der Ebene, auf der es sich gerade befindet. Beachte, dass du ein tatsächliches Objekt übergeben musst, z. B. eines, das du in einem Ereignisrückruf oder durch Aufruf von getObj oder findObjs erhältst.
Zufällige Zahlen
randomInteger(max)
Verwende diese Funktion für Würfel! Diese Funktion berücksichtigt Modulo 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 Wert max 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 wie möglich auf einem Computer sind.
Verwenden Sie Math.random() nicht, wenn eine gleichmäßige Verteilung der Zahlen in einem Bereich gewünscht ist. Obwohl Math.random() eine ebenso gute Zufallszahl liefert wie Roll20, 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-Aufruf. Verwende für diese Fälle randomInteger(max).
Spieler ist SL
spielerIstSL(playerid)
Die Funktion „Spieler ist SL“ gibt eine boolesche Antwort darauf zurück, ob ein Spieler im Spiel ein SL 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 wieder anzuschließen oder ein Spieler während des Spiels zum SL befördert wird, reagiert playerIsGM() entsprechend, ohne dass ein Cache geleert oder der Mod (API) Sandkasten neu gestartet werden muss.
PC sheet
setDefaultTokenForCharacter( Charakter, Spielmarker )
Setzt den Standard-Spielmarker für das bereitgestellte Charakterobjekt auf die Details des bereitgestellten Spielmarker-Objekts. Beide Objekte müssen bereits vorhanden sein. Damit werden alle derzeit mit dem Charakter verknüpften Standard-Spielmarker überschrieben.
Effekte (FX)
spawnFx(x, y, typ, seitenid)
Erzeugt einen kurzen Effekt an der Position x,y des Typs. Wenn du die Seiten-ID weglässt oder „undefiniert“ übergibst, 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 sein: beam-color, bomb-color, breath-color, bubbling-color, burn-color, burst-color, explode-color, glow-color, missile-color, nova-color, splatter-color.
Wobei „farbe“ oben eines von: acid, blood, charm, death, fire, frost, holy, magic, slime, smoke, water ist.
Für benutzerdefinierte Effekte 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 du die Seiten-ID weglässt oder „undefiniert“ übergibst, 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.
Musikbox-Wiedergabelisten
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, seitenid, (optional) spielerid, (optional) moveAll, (optional) sichtbarFuer)
Sendet einen „Ping“ an den Spieltisch (dasselbe, als ob ein Spieler seine Maustaste gedrückt hält). Du musst die oberen/linken Koordinaten und die Seiten-ID der Seite angeben, die angepingt werden soll. Du kannst optional die ID eines Spielers angeben, der den Ping ausgeführt hat – wenn du das nicht tust, 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) {
// Gib „!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, verwende findObjs({_type: "player"})[i].id anstelle von null für den 3. Parameter
players = findObjs({_type: "player"});
player1 = players[1].id;
player2 = players[2].id;
// Erstellt ein Array aller Spieler-IDs
var allPlayerIDs = players.map(function(player) {
return player['id'];
});
// Ping alle auf dieser Seite an derselben Stelle.
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, player2]);
}, 3000);
setTimeout(function() {
// Eine durch Kommas getrennte Liste, die als String bereitgestellt wird, an diesen Ort pingen
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 Rasterquadrat
- Daher ist 5 Fuß = 1 Einheit = 1 Rasterquadrat
Der GM kann jedoch sowohl die Größe des Rasters als auch die Skalierung der Entfernung ändern. 1 Einheit ist immer 70 Pixel, aber der SL könnte die Einstellungen so ändern, dass 1 Einheit jetzt 10 Fuß 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).