Scripts de mod : guide d'utilisation avancé

L'éditeur de script

Pour modifier les scripts de votre jeu, cliquez sur le lien « Mod Scripts » dans la page « Détails de la partie » de votre jeu (là où se trouvent également des options telles que « Journal du chat » et « Copier/Étendre le jeu »). Plusieurs fonctionnalités s'offriront à vous :

  • Une liste d'onglets en haut de l'écran. Votre jeu peut comporter plusieurs scripts, ce qui facilite son organisation. Veuillez noter que tous les scripts s'exécuteront toujours dans le même contexte ; cela signifie que vous ne devez pas avoir plusieurs scripts essayant de remplacer les mêmes valeurs en même temps, sous peine d'obtenir des résultats indésirables.
  • Un éditeur de code de script. Vous pouvez utiliser cet éditeur ou modifier vos scripts dans l'éditeur externe de votre choix, puis les coller ici.
  • Une console de sortie « Mod » située en bas (voir ci-dessous).

Chaque fois que vous cliquez sur le bouton « Enregistrer les scripts », le Bac à sable de votre jeu sera redémarré (ce qui entraînera la perte de toutes les données en mémoire qui n'ont pas été enregistrées dans l'objet d'état ou dans les objets Roll20). Cela s'applique également lorsque vous ajoutez un nouveau script, supprimez un script ou activez/désactivez un script.

La console de sortie Mod

La console de sortie Mod constitue la « fenêtre » sur vos scripts. Les scripts de mod fonctionnant dans un Bac à sable, vous n'avez pas accès directement à ceux-ci pendant leur exécution pour consulter les informations relatives à leurs résultats ou à leurs erreurs. La console de sortie Mod affiche ces informations en dehors du Bac à sable, ce qui vous permet de les consulter pendant que vous modifiez vos scripts. Toutes les commandes `log()` s'afficheront ici, ainsi que toutes les erreurs rencontrées lors de l'exécution de vos scripts. Pour plus d'informations, consultez l'article consacré au débogage des scripts.

Uniquement pour le script Mod Bac à sable v1.5. Dans la mesure du possible, les messages d'erreur incluent un objet de contexte afin que vous puissiez identifier l'objet Roll20 concerné (type et identifiant).

Scripts réactifs : écouter les événements, modifier les objets

La première utilisation (et la plus simple) d'un script de mod consiste à détecter les changements sur la table, puis à offrir des fonctionnalités supplémentaires pour les objets concernés. Ce type de script est constitué d'un ensemble de fonctions qui détectent les événements survenant pendant le jeu. Ensuite, il modifiera les objets qui sont transmis lors de ces événements, ce qui changera ce qui se passe sur table.

on("change:graphic", function(obj) {
  obj.set({
    left: obj.get("left") + 70
  });
});

Comme vous pouvez le constater, nous avons créé une fonction « on » simple qui sera exécutée chaque fois que l'événement « change:graphic » sera détecté. La fonction reçoit en paramètre l'objet graphique, obj. Pour effectuer une modification, il suffit de modifier obj à l'aide de la fonction set: toutes les propriétés que vous modifiez seront détectées et mises à jour sur la table.

Vous devez utiliser set et get pour définir et récupérer les valeurs actuelles des objets, sinon vos modifications ne seront pas enregistrées. (Voir les référence sur les objets pour obtenir la liste des types d’objets et de leurs propriétés, ainsi que la liste de tous les événements et des arguments transmis à chacun d’entre eux.)

Scripts proactifs : exécuter des tâches sans intervention de l'utilisateur

Outre la gestion des événements déclenchés par les utilisateurs, les scripts Mod vous permettent également d'effectuer automatiquement des actions qui ne sont pas liées à un événement spécifique provoqué par les joueurs. Prenons, par exemple, un jeton qui effectue des allers-retours sur la carte.

Remarque: bien que ce type de script ne nécessite aucune interaction de la part des utilisateurs, les scripts de modification de votre partie ne s'exécuteront que si au moins un joueur est connecté à votre partie.

on("ready", function() {
  //Attendez que l'événement « ready » se déclenche pour vous assurer que le jeu est entièrement chargé.
  //Obtenir une référence à notre jeton de patrouille.
  var patroltoken = findObjs({_type: "graphic", name: "Guard A"})[0]; //Nous savons qu'il existe un jeton dans le jeu appelé « Guard A ».
  var direction = -1*70; // Se déplacer de 70 pixels vers la gauche.
  var stepstaken = 0 ; //Combien de pas avons-nous effectués dans la direction actuelle ?
  setInterval(function() {
    if (nombreDePasFait > 3) {
      // Changez de direction !
      direction = direction * -1 ; // cela « inverse » la direction dans laquelle vous marchez
      stepstaken = 0 ; // réinitialise le nombre de pas à 0.
    }
    patroltoken.set("left", patroltoken.get("left") + direction); // Marchez !
    stepstaken++ ;
  }, 5000) ; // effectuer une action toutes les 5 secondes
 }) ;

Traité sur les fonctions asynchrones

Certaines valeurs ne sont pas disponibles immédiatement. Les champs relatifs aux personnages et aux documents à distribuer, tels que « bio », « notes », « gmnotes » et « _defaulttoken » du personnage, nécessitent une fonction de rappel lors de l'appel de la méthode get():

personnage.get("bio", function(bio) {
  log(bio);
});

La fonction `sendChat` peut accepter un callback facultatif afin que les résultats du lancer de dés soient renvoyés à votre script au lieu d'être affichés dans le chat. L'événement « onSheetWorkerCompleted » se déclenche une fois que la pile actuelle de scripts de feuille a terminé son exécution.

Uniquement pour le script Mod Bac à sable v1.5. La méthode `character.createToken ` est asynchrone, car elle doit récupérer ` _defaulttoken ` de manière asynchrone. L'élément graphique créé est transmis à une fonction de rappel ; il n'est pas renvoyé.

N'oubliez pas que les événements « prev on change » ne contiennent pas le texte de ces champs asynchrones. Si vous avez besoin de la valeur précédente du blob, mettez-la vous-même en cache.

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