API: Debug

Quando si scrivono programmi (dai più semplici ai più avanzati), è inevitabile incontrare bug che causano il malfunzionamento del programma. A causa della natura sandbox dell'API Roll20, può risultare leggermente complesso comprendere esattamente cosa sta accadendo. Di seguito sono riportati alcuni suggerimenti che possono essere utili per diagnosticare eventuali problemi con gli script.


Poiché non si dispone di accesso diretto all'ambiente in cui vengono eseguiti gli script, è possibile fare affidamento su un numero considerevole di chiamatedi logper comprendere cosa sta accadendo con il proprio programma. Ad esempio, se non si è certi del motivo per cui un segnalino non si muove correttamente e si desidera ottenere maggiori informazioni sui valori che vengono scambiati, si potrebbe procedere come segue:

on("change:graphic:left", function(obj) {
   //Qual è il valore sinistro dell'oggetto che entra in questo?
   log(obj.get("left"));
   obj.set("left", obj.get("left") + 70);
   //Qual è il valore attuale?
   log(obj.get("left"));
   //È inoltre possibile eseguire il debug di interi oggetti per visualizzare un elenco dei loro attributi attuali
   log(obj);
});

Troverete l'output dei vostri comandi di log nella console Mod (API), che si trova nella pagina Scripts Editor della vostra campagna.


Blocchi di errore

L'API Roll20 risolverà automaticamente piccoli errori presenti nello script riavviando lo script secondo necessità. Tuttavia, se l'API rileva un errore grave che non può essere risolto, invece di riavviare ripetutamente lo script causando un errore continuo, applicherà un "blocco di errore" alla campagna, impedendo l'esecuzione degli script Mod (API) fino alla risoluzione dell'errore. Se i Suoi script sono stati bloccati a causa di un errore, visualizzerà un messaggio simile al seguente nella pagina Script Editor:

Errore lock.png

Non preoccuparti! Si prega di apportare le modifiche necessarie agli script per risolvere il problema, quindi fare clic sul pulsante "Salva script". In tal modo, il blocco dell'errore verrà "cancellato" e l'API tenterà nuovamente di eseguire gli script. Qualora si verificasse un altro errore, il blocco errori verrà nuovamente applicato. È possibile ripetere questa procedura tutte le volte necessarie per risolvere l'errore; l'API non impedirà mai di cancellare i blocchi di errore a causa di un numero eccessivo di tentativi falliti.


Errori comuni

Di seguito sono riportati alcuni degli errori più comuni:


myvar non è definito

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

Sebbene il messaggio di errore indichi "non definito", in realtà la variabile non è statadichiarata. Una delle cause più comuni di questo problema è un errore di battitura nel nome di una delle variabili, ad esempio l'omissione di una lettera maiuscola.


Impossibile leggere la proprietà "myProperty" o impossibile richiamare il metodo "myMethod".

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

myVarnon è definito, pertanto lo script non è in grado di determinare come gestire il tentativo di accedere a una proprietà dimyVar. Ciò è probabilmente dovuto a uno dei seguenti motivi:

  • Si è tentato di individuare un oggetto, ma il risultato non è stato definito. Si prega di eseguire un controllo degli errori per assicurarsi che la variabile sia definita prima di accedere alle sue proprietà.
  • La variabile viene definita in modo condizionale (con una serie di istruzioniifo simili) e nessuna delle condizioni è stata soddisfatta, pertanto la variabile è rimasta dichiarata ma non definita. Assicurarsi di disporre delle condizioni per tutte le possibilità, oppure creare un'opzione predefinita, o eseguire un controllo degli errori per verificare che la variabile sia definita prima di accedere alle sue proprietà.

Señalino inatteso

È possibile che manchi un personaggio o che ce ne sia uno in eccesso. Ciò può verificarsi se si omette una virgola tra un elenco di proprietà in un oggetto o elementi in un array, oppure se si utilizza una parentesi chiusa in eccesso o in difetto alla fine di una chiamata di metodo annidata complessa.


È necessario accedere alla maggior parte delle proprietà degli oggetti Roll20 tramite i metodiget()eset(). Quando si utilizzaget(), è opportuno omettere il trattino basso iniziale nelle proprietà di sola lettura.

Questo articolo ti è stato utile?
Utenti che ritengono sia utile: 20 su 122