API: Débogage

Chaque fois que vous écrivez des programmes (du plus simple au plus avancé), vous rencontrerez inévitablement des bugs qui provoquent un dysfonctionnement du programme. En raison de la nature sandboxed de l'API Roll20, il peut être un peu difficile de savoir exactement ce qui se passe. Voici donc quelques astuces que vous pouvez utiliser pour diagnostiquer les problèmes avec vos scripts.


Comme vous n'avez pas d'accès direct à l'environnement dans lequel les scripts sont exécutés, vous pouvez vous fier à une grande quantité d'appels au journalpour savoir ce qui se passe avec votre programme. Par exemple, si vous n'êtes pas sûr de la raison pour laquelle un jeton ne se déplace pas correctement et que vous voulez avoir un aperçu des valeurs qui sont transmises, vous pouvez faire:

on("change:graphic:left", function(obj) {
   // Quelle est la valeur de gauche de l'objet lors de son entrée ici?
   log(obj.get("left"));
   obj.set("left", obj.get("left") + 70);
   // Quelle est la valeur maintenant?
   log(obj.get("left"));
   // Vous pouvez également déboguer des objets entiers pour voir une liste de leurs attributs actuels
   log(obj);
});

Vous trouverez la sortie de vos commandes de journal dans la Console Mod (API), qui se trouve sur la page Éditeur de scripts de votre Campagne.


Erreurs de verrouillage

L'API Roll20 récupérera automatiquement les petites erreurs de votre script en redémarrant votre script selon les besoins. Cependant, si l'API détecte une erreur grave dont elle ne peut pas récupérer, au lieu de redémarrer votre script encore et encore pour qu'il continue à générer des erreurs, elle mettra un "verrou d'erreur" sur votre Campagne, ce qui empêchera l'exécution de vos Scripts Mod (API) jusqu'à ce que l'erreur soit résolue. Si vos scripts sont verrouillés en raison d'erreurs, vous verrez un message comme celui-ci sur la page de l'Éditeur de scripts :

error lock.png

Ne vous inquiétez pas ! Apportez simplement des modifications à vos scripts pour essayer de résoudre le problème, puis cliquez sur le bouton "Enregistrer le script". Lorsque vous faites cela, le verrou d'erreur sera "effacé" et l'API essaiera d'exécuter à nouveau vos scripts. S'il y a une autre erreur, le verrou d'erreur sera réappliqué. Vous pouvez répéter ce processus autant de fois que nécessaire pour résoudre l'erreur, l'API ne vous empêchera jamais de lever les verrous d'erreur parce que vous avez échoué trop de fois.


Erreurs courantes

Voici quelques erreurs couramment rencontrées :


maVariable n'est pas définie

on("ready", function() {
    var maVar;
    log(mavar);
});

Bien que le message d'erreur dise "non définie", ce qui s'est en réalité produit est que la variable n'est pas déclarée. Une des causes les plus courantes de cela est une faute de frappe dans le nom de l'une de vos variables, comme l'omission d'une majuscule.


Impossible de lire la propriété 'maPropriété' ou d'appeler la méthode 'maMéthode'

on("ready", function() {
    var maVar;
    log(maVar.maPropriété);
    log(maVar.maMéthode());
});

maVar n'est pas définie, donc le script ne peut pas savoir comment gérer votre tentative d'accéder à une propriété de maVar. Cela est probablement dû à l'une des raisons suivantes :

  • Vous avez essayé de trouver un objet, mais le résultat était indéfini. Effectuez une vérification d'erreur pour vous assurer que votre variable est définie avant d'accéder à ses propriétés.
  • Votre variable est définie conditionnellement (avec une série desidéclarations ou quelque chose de similaire), et aucune de vos conditions n'a correspondu, donc votre variable est restée déclarée mais jamais définie. Assurez-vous d'avoir des conditions pour toutes les possibilités, ou créez une option par défaut, ou effectuez une vérification d'erreur pour vous assurer que votre variable est définie avant d'accéder à ses propriétés.

Jeton inattendu

Vous avez soit oublié un caractère, soit vous en avez un de trop. Cela peut être le résultat d'un oubli d'une virgule entre une liste de propriétés dans un objet ou d'éléments dans un tableau, ou d'avoir un de trop ou trop peu de parenthèses fermantes à la fin d'un appel de méthode imbriqué compliqué.


La plupart des propriétés des objets Roll20 doivent être accessibles via les méthodes get() et set(). Lors de l'utilisation de get(), vous devez omettre le trait d'union initial sur les propriétés en lecture seule.

Cet article vous a-t-il été utile ?
Utilisateurs qui ont trouvé cela utile : 14 sur 107