Underscore.js
Ha accesso alla libreria Underscore.js (tramite l'oggetto globale_
) per facilitare le cose. Underscore fornisce funzioni di aiuto per cose come_.each
(per iterare un array di oggetti). Per maggiori informazioni, consulti la documentazione diUnderscore.
Registrazione
log(messaggio)
Puoi utilizzare questa funzione per registrare l'output sulla console Mod (API) nella pagina Editor script. Utile per il debug dei tuoi script e per avere una migliore comprensione di cosa sta succedendo all'interno del sandbox Mod (API).
on("change:graphic", function(obj) { log("Sentito cambiamento per ID oggetto: " + obj.id); });
Ordine oggetti
mettiInFondo(obj) e mettiInCima(obj)
Queste due funzioni sposteranno un oggetto sul tavolo da gioco all'inizio (o alla fine) dello strato su cui si trova attualmente. Nota che devi passare un vero oggetto, come quelli che ricevi in un callback di evento o chiamando getObj
o findObjs
.
Numeri casuali
randomIntero(massimo)
Utilizzi questa funzione per i dadi!Questa funzione tiene conto diModulo Biasche assicura che i numeri casuali risultanti siano distribuiti uniformemente tra 1 e MAX.
Restituisce un numero casuale intero, con il valore minimo di 1 e il valore massimo di massimo
. Questa funzionalità è la stessa che Roll20 utilizza per generare i suoi tiri dei dadi, e tali numeri sono stati provati statisticamente e rigorosamente per essere casuali.
Math.random()
Puoi chiamare Math.random() normalmente nei tuoi script Mod (API), fidandoti che i risultati saranno casuali, poiché il Math.random() predefinito in Javascript è stato sostituito con il PRNG crittograficamente sicuro che alimenta Roll20. Quindi gli script esistenti che utilizzano Math.random() possono essere utilizzati sapendo che i risultati sono davvero casuali come è possibile ottenere su un computer.
Non utilizzare Math.random() se si desidera una distribuzione uniforme dei numeri in un intervallo. Sebbene Math.random() fornisca un buon numero casuale, trasformare quel numero casuale in un intervallo con distribuzione uniforme (come un lancio di un dado) non è così semplice come una moltiplicazione con un modulo o una chiamata a floor. UsarandomInteger(max)per quei casi.
Player È GM
playerIsGM(playerid)
La funzione Player È GM restituisce una risposta booleana su se un giocatore nel gioco è un GM o meno. La funzione restituirà sempre la risposta corretta a seconda del momento attuale, quindi anche se un GM sceglie di rientrare come giocatore o un giocatore viene promosso a GM durante la partita, playerIsGM() risponderà di conseguenza senza la necessità di cancellare una cache o riavviare il sandbox Mod (API).
Personaggio
setDefaultTokenForCharacter( character, token )
Imposta il token predefinito per l'oggetto Personaggio fornito con i dettagli dell'oggetto Token fornito. Entrambi gli oggetti devono già esistere. Ciò sovrascriverà qualsiasi token predefinito attualmente associato al personaggio.
Effetti speciali (FX)
spawnFx(x, y, type, pageid)
Crea un effetto breve nella posizione x, y di tipo. Se ometti il pageid o passi 'undefined', allora verrà utilizzata la pagina in cui si trovano attualmente i giocatori ('playerpageid' nell'oggetto Campagna) come predefinita.
Per gli effetti incorporati, il tipo deve essere una stringa e deve essere uno dei seguenti:beam-color
, bomb-color
, breath-color
, bubbling-color
, burn-color
, burst-color
, explode-color
, glow-color
, missile-color
, nova-color
, splatter-color
Dove "colore" sopra è uno dei:acido
,sangue
,fascino
,morte
,fuoco
,gelo
,sacro
,magia
,melma
,fumo
,acqua
Per gli effetti personalizzati, il tipo dovrebbe essere l'ID dell'oggetto custfx per l'effetto personalizzato.
spawnFxBetweenPoints(punto1, punto2, tipo, pageid)
Funziona come spawnFx, ma invece di un singolo punto passi due punti nel formato {x: 100, y: 100}. Ad esempio: spawnFxBetweenPoints({x: 100, y: 100}, {x: 400, y: 400}, "beam-acid"); L'effetto "viaggerà" tra i due punti per gli effetti che lo supportano (gli stessi che consentono l'agenzia sul lato client).
I seguenti tipi di effetto devono sempre utilizzare spawnFxBetweenPoints anziché spawnFx:beam-color
,breath-color
,splatter-color
spawnFxWithDefinition(x, y, definitionJSON, pageid)
Crea un effetto personalizzato ad hoc utilizzando il JSON per una definizione di effetto in una determinata posizione (x,y). Se ometti la pageid o passi 'undefined', verrà utilizzata per impostazione predefinita la pagina su cui si trovano attualmente i giocatori ("playerpageid" nell'oggetto Campaign).
definitionJSON è un oggetto JavaScript che segue le specifiche JSON per effetto personalizzato.
Elenco di riproduzione del Jukebox
playJukeboxPlaylist(playlistid)
La funzione play richiede l'ID della cartella (ottiene quello dalla proprietà "_jukeboxfolder" nell'oggetto Campaign) dell'elenco di riproduzione e inizierà a riprodurre quell'elenco di riproduzione per tutti nel gioco.
stopJukeboxPlaylist()
La funzione stop non richiede argomenti e fermerà qualsiasi elenco di riproduzione attualmente in esecuzione.
Vario
sendPing(destra, in alto, idPagina, (facoltativo) idGiocatore, (facoltativo) muoviTutto, (facoltativo) visibileA)
Invia un "ping" sul tavolo da gioco (come se un giocatore tiene premuto il pulsante del mouse). Devi specificare le coordinate in alto/sinistra e l'idPagina della pagina su cui fare il ping. Puoi opzionalmente specificare l'ID di un giocatore che ha effettuato il ping - se non lo fai, verrà assunto "api" e il ping sarà di colore giallo.
Puoi passare "true" per l'opzione muoviTutto se vuoi spostare anche le viste dei giocatori in quella posizione.
Puoi impostare gli ID dei giocatori in visibileA per i giocatori che possono vedere o essere spostati dal ping. Viene presentato come un singolo ID di giocatore, un array o una stringa separata da virgole.
on("chat:message", function(msg) { // Inserisci "!pingtest" nella chat per eseguire il test if(msg.type == "api" && msg.content.indexOf("!pingtest") !== -1) { // per ottenere un giocatore specifico, usa findObjs({_type: "player"})[i].id invece di null per il terzo parametro players = findObjs({_type: "player"}); player1 = players[1].id; player2 = players[2].id; // Crea un array di tutti gli ID dei giocatori var allPlayerIDs = players.map(function(player) { return player['id']; }); // Invia un ping a tutti sulla stessa pagina nella stessa posizione. sendPing(300, 300, Campaign().get('playerpageid'), null, true); setTimeout(function() { // Ping everyone on this page to the same location sendPing(1500, 500, Campaign().get('playerpageid'), msg.playerid, true, ""); }, 1000); setTimeout(function() { // Ping only the specified player to this location sendPing(1200, 500, Campaign().get('playerpageid'), null, true, player1); }, 2000); setTimeout(function() { // Ping an array of player IDs (player 1 and 2) to this location sendPing(900, 100, Campaign().get('playerpageid'), player2, true, [player1, player2]); }, 3000); setTimeout(function() { // Ping a comma-separated list supplied as a string to this location sendPing(300, 300, Campaign().get('playerpageid'), player1, true, allPlayerIDs.join()); }, 4000); } })
A Note on Distances and Grids in Roll20
In Roll20, a "unit" is always 70 pixels on the screen. The "unit" is the building block that distance and the grid are built on top of. By default:
- 1 unità = 5 piedi
- 1 unità = 1 quadrato della griglia
- Quindi, 5 piedi = 1 unità = 1 quadrato
Tuttavia, il GM può cambiare sia la dimensione della griglia che la scala della distanza. 1 unità è sempre di 70 pixel, ma il GM potrebbe cambiare le impostazioni in modo che 1 unità sia ora di 10 piedi (significando che 70 pixel = 10 piedi), o che ogni spazio della griglia sia di 2 unità (significando che ogni spazio della griglia è ora di 140 pixel).