Esistono diversi tipi di eventi a cui è possibile rispondere utilizzando on(evento, callback). Esistono cinque tipi di eventi: ready, change, add, destroy e chat. Ad eccezione di “ready”, il nome include un tipo di oggetto (o un messaggio nel caso della chat), mentre “change” può includere una proprietà. Ogni evento viene attivato una volta per ogni oggetto che subisce una modifica. Se più di una proprietà dell’oggetto viene modificata contemporaneamente, viene attivato un solo evento “globale” (ad esempio change:graphic), oltre agli eventuali eventi specifici delle proprietà che avete associato.
Parametri di callback
Quando si ascolta un evento, si crea una funzione denominata “callback” che viene eseguita ogni volta che l’evento si verifica. La funzione di callback riceve dei parametri che indicano quali modifiche sono state apportate, in modo che possiate decidere come procedere.
| Evento | Argomenti |
|---|---|
pronto |
nessuna |
modifica |
obj (oggetto Roll20 dopo la modifica), prev (oggetto semplice con le proprietà precedenti) |
aggiungi |
obj (il nuovo oggetto) |
distruggere |
obj (l'oggetto rimosso; non si deve dare per scontato che esista ancora nella campagna) |
chat |
msg — si veda " Script per moderatori: Chat"
|
obj
L'oggetto che è stato modificato. Qualsiasi modifica apportata a questo oggetto verrà salvata anche nel gioco. Pertanto, se desidera spostare un oggetto grafico verso sinistra, dovrà modificare la proprietà "left" di " obj " utilizzando il comando "set".
-
obj.get("property")restituisce il valore corrente della proprietà. -
obj.set("property", "newvalue")imposta un nuovo valore per la proprietà. Se desidera modificare più proprietà contemporaneamente, può passare un oggetto:obj.set({left: 10, top: 20}).
precedente
Si tratta di un oggetto contenente le proprietà dell’oggetto “obj” così come erano prima che venissero apportate modifiche a seguito di questo evento. Utile per determinare “di quanto” è cambiata una proprietà.
NOTA: "prev " non è un oggetto Roll20. È possibile accedere alle proprietà utilizzando la notazione tra parentesi quadre o quella con il punto: prev["bar1_value"] oppure prev._id. Non è possibile richiamare i metodi get e set su tale chiave, né omettere il trattino basso nelle chiavi di sola lettura (prev.id non è prev._id).
Per quanto riguarda i personaggi e i materiali di gioco, i campi “bio”, “notes” e “gmnotes” in “prev” sono identificatori interni, non il testo. Anche il personaggio _defaulttoken è un blob. La variabile " gmnotes " di Graphic è una stringa normale. Se ne avete bisogno, memorizzate voi stessi nella cache i valori precedenti dei blob.
Ordine degli eventi
Gli eventi vengono attivati in modo sincrono (ogni funzione non verrà avviata finché quella precedente non sarà terminata) in ordine, dalla prima alla ultima associazione, nonché dalla proprietà specifica all’oggetto generale. Considerando quanto segue:
on("change:graphic", function1);
on("change:graphic", function2);
on("change:graphic:left", function3);
Se la proprietà "left" dell'oggetto dovesse cambiare, l'ordine sarebbe: funzione3, poi funzione1, poi funzione2.
Se nella Sua campagna sono presenti più script, questi vengono caricati nello stesso ordine in cui compaiono nella pagina delle impostazioni "Mod Scripts", da sinistra a destra.
Nota: il metodo set() di uno script non genera un evento di modifica per quella proprietà. Se un giocatore sposta un segnalino, viene visualizzato change:graphic. Se uno script modifica successivamente il valore di “left” con la funzione set(), tale modifica non attiva l’evento “change:graphic”. La creazione di un elemento grafico a partire da uno script attiva l'evento change:graphic. La funzione sendChat() invia chat:message, compresi i messaggi che iniziano con !. Le proprietà "status_*" virtuali non generano eventi propri; si raccomanda di monitorare l'evento " change:graphic:statusmarkers".
pronti
Questo evento viene attivato una volta ogni volta che la sandbox viene avviata, dopo che i dati della campagna sono stati caricati. Cercate gli oggetti già esistenti solo una volta che siete pronti. Se si imposta un binding per gli eventi “add” (come ad esempio “add:graphic”) prima che venga attivato l’evento “ready”, si riceveranno anche gli eventi “add” relativi agli oggetti che erano già presenti nella campagna. Gli script vengono caricati nell’ordine indicato nelle impostazioni di Mod Scripts, da sinistra a destra; gli handler “ready” vengono eseguiti nell’ordine in cui sono stati associati.
Parametri di callback: nessuno
on("ready", function() {
var tokenThatAlreadyExisted = getObj("graphic", "-ABc123");
});
Eventi in chat
chat:messaggio
Viene attivato ogni volta che viene ricevuto un nuovo messaggio di chat, compresi i messaggi inviati tramite sendChat(). La funzione di callback riceve un oggetto `msg`. I tipi di messaggio includono: generale, rollresult, gmrollresult, secretrollresult (/sr), supersecretrollresult (/ssr), emote, sussurro, descrizione, diretto e API. Messaggi che iniziano con ! hanno il tipo === "api" e non vengono visualizzati nella chat.
Parametri di callback: msg
Si veda la sezione " Mod Scripts: Chat " per l'elenco completo delle proprietà dei messaggi e la gestione dei risultati dei tiri di dado.
Eventi della campagna
L'oggetto "campagna" supporta i parametri change:campaign e change:campaign:PROPERTY per qualsiasi proprietà della campagna. Di seguito sono elencati quelli a cui la maggior parte degli script presta attenzione:
modifica:campagna:idpagina giocatore
Attivato ogni volta che cambia la pagina su cui si trovano attualmente i giocatori.
modifica:campagna:ordine di turno
Attivato ogni volta che cambia l'ordine di turno della campagna.
modifica:campagna:pagina dell'iniziativa
Attivato ogni volta che l'ordine di turno viene nascosto o mostrato per una pagina. Questo potrebbe non corrispondere all'ID della pagina attualmente attiva. Se questo parametro è impostato su "false " (anche nel caso in cui uno script di mod lo imposti su "false"), l'ordine di turno verrà chiuso per tutti i GM e i giocatori. Impostando un ID pagina valido, la pagina sarà accessibile a tutti i GM/giocatori.
Eventi oggetto
Ogni tipo di oggetto supporta:
aggiungere: TIPOmodifica: TIPOmodifica:TIPO:PROPRIETÀdistruggere:TIPO
È inoltre possibile associare l'operazione a un ID oggetto specifico: change:TYPE:ID, change:TYPE:ID:PROPERTY e destroy:TYPE:ID.
Si vedano gli script di modifica: “Oggetti” per le proprietà di ciascun tipo.
modifica:grafica
Viene attivato ogni volta che un oggetto grafico (praticamente qualsiasi oggetto presente sul tavolo di gioco, inclusi segnalini, mappe e carte) subisce una modifica.
Nota: gli oggetti grafici creati tramite script attiveranno questo evento al momento della creazione.
Parametri della funzione di callback: obj, prev
on("change:graphic", function(obj, prev) {
//Eseguire qui un'operazione con "obj". "prev" è un elenco di valori precedenti.
Si prega di notare che "obj" e "prev" sono tipi diversi di oggetti.
Per interagire con obj, è necessario utilizzare obj.get("name");
Per interagire con prev, è possibile utilizzare prev["name"];
});
modifica:grafica:(proprietà)
È inoltre possibile associare un evento a ciascuna proprietà specifica dell'oggetto. Pertanto, se disponete di uno script che desiderate eseguire solo quando cambia la rotazione, dovreste procedere come segue:
on("change:graphic:rotation", function(obj, prev) {
//Impostare sempre la rotazione su 0, in modo che nessuno possa ruotare gli oggetti.
obj.set("rotazione", 0);
});
aggiungere:grafico
Si attiva ogni volta che un oggetto grafico viene aggiunto al tavolo di gioco per la prima volta. Verrà chiamato anche per gli oggetti esistenti all’avvio del tavolo di gioco, qualora si associ questo evento al di fuori dell’evento “ready ”.
Parametri della funzione di callback: obj
var started = false;
on("add:graphic", function(obj) {
if (!started) return;
// Solo gli elementi grafici aggiunti dopo il completamento della caricamento.
});
on("ready", function() {
started = true;
});
distruggere:grafico
Viene attivato ogni volta che un oggetto grafico viene rimosso dal tavolo di gioco.
Parametri della funzione di callback: obj
Sottotipi grafici
Anche gli elementi grafici generano eventi utilizzando il proprio _subtype. Le mappe utilizzano il sottotipo “segnalino ”.
| Sottotipo | Eventi | Note |
|---|---|---|
segnalino |
aggiungere:segnalinomodifica:segnalinomodifica:token:PROPRIETÀeliminare:segnalino
|
Segnalini e grafica delle mappe. |
scheda |
aggiungi:schedamodifica:schedamodifica:scheda:PROPRIETÀelimina:scheda
|
Una carta posata sul tavolo di gioco (un'immagine). Si veda la nota riportata di seguito. |
dicetoken |
aggiungere:dicetokenmodifica:dicetokenmodifica:dicetoken:PROPRIETÀeliminare:dicetoken
|
I segnalini di dado sul tavolo di gioco. |
La scheda è sia un tipo di oggetto Roll20 sia un sottotipo grafico; pertanto, i gestori per l'evento "change:card " e per eventi simili devono distinguere il tipo di oggetto (ad esempio tramite obj.get("_type")) per assicurarsi che vengano attivati per il tipo di oggetto corretto.
Tutti i tipi di oggetto
Ciascuno dei tipi riportati di seguito supporta i comandi add:TYPE, change:TYPE, change:TYPE:PROPERTY e destroy:TYPE.
| Tipo | Esempi di eventi | Note |
|---|---|---|
abilità |
aggiungere:abilitàcapacità di modificacapacità di distruzione
|
|
attributo |
aggiungere:attributomodifica:attributoelimina:attributo
|
|
campagna |
modifica:campagnamodifica:campagna:id-pagina-giocatore
|
Esiste un unico oggetto di campagna; gli script in genere rilevano le modifiche, non le operazioni diaggiunta o eliminazione. |
scheda |
aggiungi:schedamodifica:schedaeliminare: carta
|
Oggetto "carta del mazzo". Si tratta inoltre di un sottotipo grafico — si prega di chiarire il significato di _type. |
personaggio |
aggiungere:personaggiomodifica:personaggiodistruggere:personaggio
|
|
custfx |
aggiungere:custfxmodifica:custfxeliminare:custfx
|
Effetti personalizzati. |
ponte |
aggiungere:mazzomodifica:mazzodistruggere:mazzo
|
|
porta |
aggiungere:portamodificare:portadistruggere:porta
|
Ultima versione del motore VTT. |
grafica |
aggiungi:immaginemodifica:graficaeliminare:grafica
|
Inoltre, genera eventi di sottotipo (segnalino, carta, dado-segnalino). |
mano |
aggiungere:manomodificare:manoeliminare:mano
|
|
materiale di gioco |
aggiungere: materiale di giocomodificare:materiale di giocoeliminare: materiale di gioco
|
|
brano del jukebox |
aggiungi:brano-jukeboxmodifica:brano-jukeboxeliminare: jukeboxtrack
|
|
macro |
aggiungi:macromodifica:macroeliminare:macro
|
|
pagina |
aggiungi:paginamodifica:paginaelimina:pagina
|
Le modifiche alla gerarchia attivano anche gli eventi change:page:_placement e change:page:_path. |
pageFolder |
aggiungi:pageFoldermodifica:pageFolderelimina:paginaCartella
|
Solo per Mod Script sandbox v1.5. |
path: |
aggiungere:percorsomodifica:percorsoelimina:percorso
|
Disegni classici da tavolo di gioco. |
pathv2 |
aggiungere:pathv2modifica:percorsov2elimina:pathv2
|
Ultima versione del motore VTT. |
spilla |
aggiungere:pinmodifica:pineliminare:pin
|
Ultima versione del motore VTT. |
giocatore/trice |
aggiungi:giocatoremodifica:giocatoreeliminare:giocatore
|
|
tavolo pieghevole |
aggiungere:tabella-a-scorrimentomodifica:tabella a scorrimentoeliminare:rollabletable
|
|
elemento della tabella |
aggiungi:voceTabellamodifica:voceTabellaeliminare:voceTabella
|
|
testo |
aggiungere:testomodifica:testoeliminare:testo
|
|
finestra |
aggiungi:finestramodifica:finestraeliminare:finestra
|
Ultima versione del motore VTT. |
Solo per Mod Script sandbox v1.5. Gli oggetti `pageFolder` dispongono di eventi `add:pageFolder`, `change:pageFolder`, `destroy:pageFolder` e di eventi relativi alle proprietà, quali ` change:pageFolder:name`. Le pagine generano inoltre gli eventi `change:page:_placement ` e `change:page:_path ` quando la gerarchia del menu della pagina subisce modifiche.
Jumpgate / Gli ultimi tipi di oggetti del motore VTT (pathv2, pin, window, door) sono funzionalità del motore VTT, non della versione sandbox. Un gioco in versione 1.0 basato sull'ultimo motore VTT presenta ancora tali tipi di oggetti e i relativi eventi.