API: Debugging

Ogni volta che scrivi programmi (dal più semplice al più avanzato), inevitabilmente ti imbatterai in errori che causano il malfunzionamento del programma. A causa della natura sandboxed dell'API di Roll20, può essere un po' difficile capire esattamente cosa sta succedendo. Ecco quindi alcuni consigli che puoi usare per aiutarti a diagnosticare i problemi con gli script.


Dal momento che non ha accesso diretto all'ambiente in cui vengono eseguiti gli script, può affidarsi alle numerose chiamate alogper capire cosa sta succedendo al suo programma. Ad esempio, se non sei sicuro del motivo per cui un token non si sta muovendo correttamente e vuoi ottenere una migliore comprensione dei valori in gioco, potresti fare così:

on("change:graphic:left", function(obj) {
   //Qual è il valore di sinistra dell'oggetto all'arrivo di questo?
   log(obj.get("left"));
   obj.set("left", obj.get("left") + 70);
   //Qual è ora?
   log(obj.get("left"));
   //Puoi anche eseguire il debug di interi oggetti per vedere un elenco dei loro attributi attuali
   log(obj);
});

Troverai l'output dei tuoi comandi di log nella Console API, che si trova nella pagina dell'Editor degli Script per la tua campagna.


Errori di blocco

L'API di Roll20 recupererà automaticamente da piccoli errori nel tuo script riavviando il tuo script se necessario. Tuttavia, se l'API rileva un errore grave da cui non può riprendersi, invece di riavviare il tuo script ripetutamente solo per continuare a generare errori, metterà un "blocco di errore" sulla tua Campagna che impedisce l'esecuzione dei tuoi script API fino a quando l'errore non viene risolto. Se i tuoi script sono bloccati a causa di un errore, vedrai un messaggio come questo nella pagina dell'Editor di script:

errore lock.png

Non preoccuparti! Apporta solo modifiche ai tuoi script per cercare di risolvere il problema, quindi clicca sul pulsante "Salva script". Quando lo fai, il blocco dell'errore verrà "eliminato" e l'API cercherà di eseguire nuovamente i tuoi script. Se si verifica un altro errore, il blocco dell'errore verrà riapplicato. Puoi ripetere questo processo tutte le volte necessarie per risolvere l'errore, l'API non ti impedirà mai di eliminare i blocchi di errore perché hai fallito troppe volte.


Errori comuni

Di seguito sono riportati alcuni errori più comuni:


myvar non è definito

on("ready", function() {
    var myVar;
    log (myvar);
});

Anche se il messaggio di errore dice "non definito", ciò che è realmente accaduto è che la variabile non è dichiarata. Una delle cause più comuni di questo è un errore di battitura nel nome di una delle tue variabili, come una lettera maiuscola mancante.


Impossibile leggere la proprietà 'myProperty' o Impossibile chiamare il metodo 'myMethod'

on("ready", function() {
    var myVar;
    log (myVar.myProperty);
    log (myVar.myMethod ());
});

myVarnon è definito, quindi lo script non può capire come gestire il tentativo di accedere a una proprietà di myVar. Ciò è probabilmente dovuto a uno dei motivi seguenti:

  • Hai provato a trovare un oggetto, ma il risultato era indefinito. Effettuare una verifica degli errori per assicurarsi che la variabile sia definita prima di accedere alle sue proprietà.
  • La tua variabile viene definita condizionalmente (con una serie di se o qualcosa di simile) e nessuna delle condizioni è stata soddisfatta, quindi la tua variabile è stata dichiarata ma non definita. Assicurati di avere delle condizioni per tutte le possibilità, o crea un'opzione predefinita o effettua una verifica degli errori per assicurarti che la tua variabile sia definita prima di accedere alle sue proprietà.

Token non previsto

Hai o mancato un carattere o hai un carattere di troppo. Ciò può essere causato dall'aver dimenticato una virgola tra un elenco di proprietà in un oggetto o elementi in un array, o dall'aver troppo o troppo poche parentesi chiuse alla fine di una chiamata di metodo nidificata complicata.


La maggior parte delle proprietà degli oggetti Roll20 devono essere accessibili attraverso i metodiget()eset(). Quando si utilizza il metodo get(), bisogna omettere l'underscore iniziale sulle proprietà in sola lettura.

Questo articolo ti è stato utile?
Utenti che ritengono sia utile: 14 su 104