API: Depuração

Sempre que estiver a escrever programas (dos mais simples aos mais avançados), inevitavelmente encontrará erros que causam o mau funcionamento do programa. Devido à natureza isolada da API Roll20, pode ser um pouco difícil determinar exatamente o que está a ocorrer. Aqui estão algumas sugestões que podem ser úteis para diagnosticar problemas com os seus scripts.


Como não tem acesso direto ao ambiente onde os scripts estão a ser executados, pode confiar em uma grande quantidade de chamadasde logpara saber o que está a acontecer com o seu programa. Por exemplo, se não tiver a certeza do motivo pelo qual um token não está a funcionar corretamente e desejar obter algumas informações sobre os valores que estão a ser manipulados, pode fazer o seguinte:

on("change:graphic:left", função(obj) {
   //Qual é o valor esquerdo do objeto que está a entrar aqui?
   log(obj.get("left"));
   obj.set("left", obj.get("left") + 70);
   //Qual é o valor atual?
   log(obj.get("left"));
   //Também é possível depurar objetos inteiros para visualizar uma lista de seus atributos atuais
   log(obj);
});

Encontrará a saída dos seus comandos de registo na Consola Mod (API), que se encontra na página Editor de Scripts da sua Campanha.


Bloqueios de erro

A API Roll20 recuperará automaticamente pequenos erros no seu script, reiniciando-o conforme necessário. No entanto, se a API detectar um erro grave que não possa ser recuperado, em vez de reiniciar o seu script repetidamente, apenas para que ele continue a apresentar erros, ela colocará um "bloqueio de erro" na sua campanha, o que fará com que os seus scripts Mod (API) não sejam executados até que o erro seja resolvido. Se os seus scripts estiverem bloqueados devido a erros, será exibida uma mensagem como esta na página do Editor de Scripts:

Erro lock.png

Não se preocupe! Basta fazer alterações nos seus scripts para tentar resolver o problema e, em seguida, clicar no botão «Guardar Script». Ao realizar essa ação, o bloqueio de erro será "limpo" e a API tentará executar os seus scripts novamente. Caso ocorra outro erro, o bloqueio de erros será reaplicado. É possível repetir este processo quantas vezes forem necessárias para corrigir o erro. A API não impedirá que você limpe os bloqueios de erro por ter falhado muitas vezes.


Erros comuns

Abaixo estão alguns erros mais comuns:


myvar não está definido

on("ready", função() {
    var myVar;
    log(myvar);
});

Embora a mensagem de erro indique "não definido", o que realmente ocorreu é que a variável não foideclarada. Uma das causas mais comuns para isso é um erro ortográfico no nome de uma das suas variáveis, como a falta de uma letra maiúscula.


Não é possível ler a propriedade 'myProperty' ou não é possível chamar o método 'myMethod'.

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

myVarnão está definido, portanto, o script não consegue determinar como lidar com a sua tentativa de acessar uma propriedade demyVar. Isso provavelmente se deve a um dos seguintes motivos:

  • O senhor tentou localizar um objeto, mas o resultado foi indefinido. Realize algumas verificações de erros para garantir que a sua variável esteja definida antes de aceder às suas propriedades.
  • A sua variável está a ser definida condicionalmente (com uma série de instruçõesifou algo semelhante), e nenhuma das suas condições correspondeu, portanto, a sua variável permaneceu declarada, mas nunca foi definida. Certifique-se de que possui condições para todas as possibilidades, crie uma opção padrão ou execute uma verificação de erros para garantir que a sua variável esteja definida antes de aceder às suas propriedades.

Token inesperado

Está a faltar um caractere ou há um caractere a mais. Isso pode ocorrer devido à omissão de uma vírgula entre uma lista de propriedades em um objeto ou elementos em uma matriz, ou devido ao excesso ou falta de parênteses de fechamento no final de uma chamada de método aninhado complexo.


A maioria das propriedades nos objetos Roll20 precisa ser acessada através dos métodosget()eset(). Ao utilizarget(), deve-se omitir o sublinhado inicial nas propriedades somente leitura.

Este artigo foi útil?
20 de 122 acharam isto útil