API: Depuración

Cada vez que escribas programas (desde los más simples hasta los más avanzados), inevitablemente te encontrarás con errores que hacen que el programa no funcione correctamente. Debido a la naturaleza enraizada del API de Roll20, puede ser un poco difícil saber exactamente qué está sucediendo. Aquí hay algunos consejos que puedes utilizar para ayudar a diagnosticar problemas con tus scripts.


Dado que no tiene acceso directo al entorno en el que se están ejecutando los scripts, puede confiar en las copiosas cantidades de llamadas al registropara saber qué está pasando con su programa. Por ejemplo, si no estás seguro de por qué un token no se está moviendo correctamente y quieres obtener una idea de los valores que se están manipulando, puedes hacer lo siguiente:

on("change:graphic:left", function(obj) {
   //¿Cuál es el valor izquierdo del objeto al entrar aquí?
   log(obj.get("left"));
   obj.set("left", obj.get("left") + 70);
   //¿Cuál es ahora?
   log(obj.get("left"));
   //También puedes depurar objetos completos para ver una lista de sus atributos actuales
   log(obj);
});

Encontrarás la salida de tus comandos de registro en la Consola del Mod (API), que se encuentra en la página del Editor de Scripts para tu Campaña.


Bloqueo de error

La API de Roll20 se recuperará automáticamente de pequeños errores en tu script reiniciándolo según sea necesario. Sin embargo, si la API detecta un error grave del que no puede recuperarse, en lugar de reiniciar tu script una y otra vez solo para que siga dando errores, pondrá un "bloqueo de error" en tu Campaña que hace que tus Scripts del Mod (API) no se ejecuten hasta que se resuelva el error. Si tus scripts han sido bloqueados por error, verás un mensaje como este en la página del Editor de Scripts:

Error lock.png

¡No te preocupes! Simplemente realiza cambios en tus scripts para intentar resolver el problema y luego haz clic en el botón "Guardar Script". Cuando hagas eso, el bloqueo de error se "eliminará" y la API intentará ejecutar tus scripts nuevamente. Si hay otro error, se volverá a aplicar el bloqueo de error. Puedes repetir este proceso tantas veces como sea necesario para solucionar el error, la API nunca te impedirá eliminar tus bloqueos de error porque hayas fallado demasiadas veces.


Errores comunes

A continuación se muestran algunos errores más comúnmente encontrados:


myvar no está definido

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

Aunque el mensaje de error dice "no está definido", lo que ha ocurrido en realidad es que la variable no está declarada. Una de las causas más comunes de esto es un error tipográfico en el nombre de una de tus variables, como faltar una letra mayúscula.


No se puede leer la propiedad 'myProperty' o No se puede llamar al método 'myMethod'

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

myVar no está definido, por lo que el script no puede determinar cómo manejar tu intento de acceder a una propiedad de myVar. Esto probablemente se deba a una de las siguientes razones:

  • Intentaste encontrar un objeto, pero el resultado fue indefinido. Realiza algunas comprobaciones de errores para asegurarte de que la variable esté definida antes de acceder a sus propiedades.
  • Tu variable se define condicionalmente (con una serie de declaracionessi o algo similar), y ninguna de las condiciones coincide, por lo que tu variable se declara pero nunca se define. Asegúrate de tener condiciones para todas las posibilidades, o crea una opción predeterminada, o realiza comprobaciones de errores para asegurarte de que la variable esté definida antes de acceder a sus propiedades.

Token inesperado

Te falta un carácter o tienes uno de más. Esto puede suceder si olvidaste una coma entre una lista de propiedades en un objeto o elementos en un arreglo, o si tienes uno de más o de menos paréntesis de cierre al final de una llamada a un método anidado complicado.


La mayoría de las propiedades de los objetos de Roll20 deben ser accedidas a través de los métodos get() y set(). Cuando uses get(), omite el guión bajo inicial en las propiedades de solo lectura.

¿Fue útil este artículo?
Usuarios a los que les pareció útil: 14 de 107