API: Funzioni di utilità

Le funzioni di utilità sono fornite per aiutarla a lavorare con lo spazio di gioco Roll20 in modo coerente. Può chiamare una funzione di utilità da qualsiasi punto dei suoi script (all'interno di qualsiasi callback di evento, ad esempio).


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)

Può utilizzare questa funzione per registrare l'output nella console API nella pagina Script Editor. Utile per il debug dei suoi script e per capire meglio cosa succede all'interno della sandbox 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 API, fidandoti che i risultati saranno casuali, perché 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 riunirsi come un giocatore o un giocatore viene promosso a GM in mezzo al gioco, playerIsGM() risponderà di conseguenza senza alcuna necessità di cancellare una cache o riavviare l'API sandbox.


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-colorbomb-colorbreath-colorbubbling-colorburn-colorburst-colorexplode-colorglow-colormissile-colornova-colorsplatter-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).

Questo articolo ti è stato utile?
Utenti che ritengono sia utile: 11 su 18