API : Chat

Cette page présente les détails relatifs à l'API Roll20 en ce qui concerne les fonctions de chat.


Événements de chat

discussion : message

Déclenché chaque fois qu'un nouveau message instantané est reçu. Veuillez noter que si le message est de type « rollresult » ou « gmrollresult », il sera nécessaire d'appelerJSON.parse() sur le contenu du message afin d'obtenir un objet contenant les informations relatives aux résultats du jet de dé.

Remarque :Si un joueur saisit un message de chat commençant par un point d'exclamation (!), ce message sera de type « api » et ne sera visible par personne. Cette fonctionnalité est conçue pour fournir des commandes auxquelles les scripts Mod (API) répondent. Ainsi, si le message est de type « api », cela signifie qu'il n'a été montré à personne, et le joueur qui a envoyé le message de chat s'attend probablement à ce qu'un script Mod (API) fasse quelque chose en réponse à ce message.

Paramètre de rappel :

Propriété Valeur par défaut Remarques
qui "" Le pseudonyme du joueur ou du personnage qui a envoyé le message.
identifiant joueur   L'identifiant du joueur qui a envoyé le message.
type « général » L'un des éléments suivants : « general », « rollresult », « gmrollresult », « emote », « Chuchoter », « desc » ou « api ».
contenu "" Le contenu du message instantané. Sile typeest « rollresult », il s'agira d'une chaîne JSON contenant des données relatives au lancer.
origRoll   (Taper uniquement « rollresult » ou « gmrollresult »)Le texte original du jet, par exemple : « 2d10+5 dégâts de feu » lorsque le joueur tape « /r 2d10+5 dégâts de feu ». Cela équivaut à l'utilisation decontenudans des messages dont le type n'est ni « rollresult » ni « gmrollresult ».
Rouleaux de patins à roulettes   (le contenu comprend un ou plusieurs rouleaux intégrés uniquement)Tableau d'objets contenant des informations sur tous les rouleaux intégrés dans le message.
Modèle de rouleau   (le contenu comprend un ou plusieurs modèles de jet uniquement)Le nom du modèle spécifié.
cible   (type « Chuchoter » uniquement)L'identifiant du joueur à qui le message privé est envoyé. Si le chuchoter a été envoyé au MJ sans utiliser son pseudonyme (c'est-à-dire « /w gm texte » au lieu de « /w Riley texte » lorsque Riley est le MJ), ou si le chuchoter a été envoyé à un personnage sans joueur contrôleur, la valeur sera « gm ».
nom_cible   (type « Chuchoter » uniquement)Le pseudonyme du joueur ou du personnage auquel le message privé a été envoyé.
sélectionné   (type « api » uniquement)Tableau d'objets sélectionnés par l'utilisateur lors de la saisie de la commande.

Remarque : Il est probable que vous n'ayez pas besoin de toutes ces informations. Dans la plupart des cas, vous ne serez intéressé que par le résultat global du lancer (voir le bas du premier exemple). Cependant, toutes ces informations sont fournies si vous souhaitez approfondir les résultats d'un lancer.

 


Structure des résultats du tirage au sort Ex. 1

Après avoir appelé JSON.parse sur le content d'un message « rollresult » ou « gmrollresult », vous obtiendrez un objet au format suivant (il s'agit du résultat de la commande /roll {2d6}+5+1t[weather] Attaque !)

  "type":"V", //"V" = "Validated Roll" (ceci sera toujours "V" pour le moment)
  "rolls": [
    {
      "type":"G", //"G" indique un roll groupé. Un groupe est comparable à une série de « sous-rôles » au sein d'un rôle.
      « rolls » : [
        [
          {
            « type » : « R », //« R » = « Roll » (lancer)
            « dice » : 2, // Nombre de dés lancés (2dX signifie 2 dés)
            « sides » : 6, //Nombre de faces du dé (Xd6 signifie 6 faces)
            « mods » : {},
            « results » : [ //Tableau des résultats de chaque lancer.
             {
               "v":1 // Nous avons obtenu un 1 pour notre premier 2d6
             },
             {
               "v":5 //Nous avons obtenu un 5 pour notre deuxième 2d6
             }
            ]
          }
        ]
      ],
      "mods":{},
      "resultType":"sum", //Le résultat est une somme (par opposition à une vérification de réussite)
      "results": [
        {
          "v":6 // Dans ce cas, le résultat global (total) du groupe.
        }
      ]
    },
    {
      "type":"M", //"M" = Expression mathématique
      "expr":"+5+"
    },
    {
      "type":"R", //"R" = Lancer
      "dice":1,
      "table":"weather", //La propriété table est définie sur le nom de la table utilisée si ce jet a été effectué par rapport à une table.
      "mods":{},
      "sides":2, //Vous pouvez probablement ignorer cette propriété pour les jets de table.
      « résultats » : [
        {
          « v » : 0, //La « valeur » de l'article du tableau obtenu. Pour les tableaux de texte, cette valeur est toujours 0.
          « tableidx » : 1, //L'index de l'article dans le tableau qui a été généré.
          « tableArticle » : { //Une copie de l'objet table article tel qu'il existait lorsque la table a été déployée.
            « nom » : « pluvieux », 
            « avatar » : « », //Ceci sera une URL vers une image si la Table de jet utilise des icônes d'image
            "weight":1,
            "id":"-IpzPx2j_9piP09ceyOv"
          }
        }
      ]
    },
    {
      "type":"C", // "C" = Comment
      "text":" Attaquez !"
    
  ],
  "resultType":"sum", // Type de résultat global de l'ensemble du tirage
  "total":11 // Total global de l'ensemble du tirage (y compris tous les sous-groupes)
}

Structure des résultats du roulement. Exemple 2

Structure annotée pour le résultat de /roll {1d6!!>5}>6 (affichant les modifications explosives et les succès cibles) :

  "type":"V",
  "rolls": [
    {
      "type":"G",
      "rolls": [
        [
          {
            "type":"R",
            "dice":1,
            "sides":6,
            "mods": { //Modifications apportées au lancer
              "compounding": { //"compounding" = "Explosion combinée (!!)"
                « comp » : «>= », // Type de comparaison
                « point » : 5 // Point de comparaison
              }
            },
            « results » : [
              {
                « v » : 13 // Résultat global du dé. Veuillez noter que, puisqu'il s'agit d'une explosion composée, il n'y a qu'un seul résultat de dé.
              
            ]
          }
        ]
      ],
      "mods": {
        "success": {
          "comp":">=",
          "point":6
        }
      },
      "resultType":"sum",
      "results": [
        {
          "v":13
        }
      ]
    }
  ],
  "resultType":"success", // Dans ce cas, le résultat est le nombre de réussites
  "total":1 //Nombre total de réussites
}

Exemple d'événement de chat (mise en œuvre d'un type de rôle personnalisé)

on("chat:message", function(msg) {
  //Ceci permet aux joueurs de saisir !sr <nombre> pour lancer un nombre de dés d6 avec un objectif de 4.
  if(msg.type == "api" && msg.content.indexOf("!sr ") !== -1) {
    var numdice = msg.content.replace("!sr ", "");
    sendChat(msg.who, "/roll " + numdice + "d6>4");
  }
});

sendChat(speakingAs, input [,callback [, options]] )

Vous pouvez utiliser cette fonction pour envoyer un message instantané.

parler peut être l'un des suivants :

  • Toute chaîne de caractères, qui sera alors utilisée comme nom de la personne ayant envoyé le message. Par exemple. « Riley »
  • Identifiant d'un joueur, au format « joueur|-Abc123 », où « -Abc123 » correspond à l'identifiant du joueur. Si vous procédez ainsi, l'avatar et le nom du joueur seront automatiquement utilisés.
  • Identifiant d'un personnage, au format « personnage|-Abc123 ». Si vous procédez ainsi, l'avatar et le nom du personnage seront automatiquement utilisés.


entrée doit être une expression valide, similaire à celles utilisées dans l'application Roll20. Vous pouvez saisir du texte pour envoyer un message simple ou utiliser des commandes telles que « /roll », « /em », « /w », etc. De plus :

  • Vous pouvez utiliser les attributs de caractère au format@{CharacterName|AttributeName}.
  • Vous pouvez utiliser les caractéristiques des personnages au format suivant :%{CharacterName|AbilityName}.
  • Iln'est pas possibled'utiliser des macros.
  • Vous pouvez utiliser la commande « /direct <msg>» pour envoyer un message sans aucun traitement (par exemple, liaison automatique des URL), et vous pouvez utiliser les balises HTML suivantes dans le message :

 

<code><span><div><label><a><br><br /><p><b><i><del><strike><u><img>
<blockquote><mark><cite><small><ul><ol><li><hr><dl><dt><dd><sup>
<sub><big><pre><figure><figcaption><strong><em><table><tr><td><th>
<tbody><thead><tfoot><h1><h2><h3><h4><h5><h6>

callback est un troisième paramètre facultatif consistant en une fonction de rappel qui recevra les résultats de l'appelsendChat()au lieu d'envoyer les commandes au jeu. L'utilisation desendChat()de cette manière est asynchrone. Les résultats de la commandesendChat()seront un TABLEAU d'opérations, et chaque objet individuel sera similaire à un objet que vous recevez lors d'un événementchat:message(voir ci-dessus).

Vous pouvez utiliser cette fonctionnalité, par exemple, pour effectuer un lancer à l'aide du moteur de lancer Roll20, puis obtenir immédiatement les résultats du lancer. Vous pouvez ensuite apporter des modifications supplémentaires au dé avant de l'envoyer aux joueurs dans le jeu.

sendChat("Riley", "/roll 1d20+4", function(ops) {
    // ops sera un TABLEAU contenant les résultats de la commande.
    var rollresult = ops[0];
    //Maintenant, utilisez rollresult comme vous le feriez lors d'un événement chat:message...
});

options est un quatrième paramètre facultatif permettant de définir les options relatives au traitement du message. Les options sont spécifiées sous la forme d'un objet JavaScript dont les propriétés correspondent aux noms des options à définir et dont les valeurs correspondent à leurs paramètres, généralementvraiscar ils sont par défaut faux.

Options disponibles :

  • noarchive -- définissez cette option sur « true » pour empêcher le message d'être enregistré dans le journal du chat. Ceci est particulièrement utile pour les sorties qui ne font pas partie de l'histoire, telles que les menus des boutons Mod (API) et les informations d'état.
  • use3d-- Il est désormais possible de générer des lancers de dés en 3D à l'aide de la fonction sendChat(). La syntaxe est la suivante :sendChat("Nom", "Lancer [[3d6]]", null, {use3d: true}) ;Si vous transmettez un identifiant de joueur au paramètre « nom », par exemplesendChat("joueur|-ABC123",...), la couleur du joueur sera utilisée pour les dés. Dans le cas contraire, la couleur blanche par défaut sera utilisée. 

    Remarque :Les clientsne peuvent afficher que le résultat d'un seul lancer 3D à la fois. Il n'est donc pas utile d'effectuer plusieurs lancers 3D séparés à la suite. Veuillez également noter que l'utilisation des lancers 3D sollicite davantage le serveur Jet quantique. Nous vous recommandons donc de faire preuve de discernement et de ne pas effectuer 100 lancers 3D en une seconde. Utilisez les jets 3D lorsque le résultat du jet est significatif pour le joueur et a un impact sur le jeu.

    Si vous souhaitez ajuster ces options sans utiliser de paramètrede rappel(troisième paramètre - voir ci-dessus), vous pouvez simplement passernullà sa place :

 

sendChat("Statut", "Tous les joueurs sont connectés.", null, {noarchive:true});

Boutons de commande Mod (API)

Désormais disponible avec la mise à jour de Holding, vous pouvez utiliser le nouveau formatage du chat textuel (à la fois dans vos messages générés par l'API et ceux générés par des macros et des capacités) pour créer des « boutons Mod (API) » dans le chat.

Pour ce faire en utilisant le formatage Markdown :

[Jet d'attaque](!attackroll)

Le texte entre crochets apparaîtra dans le bouton, et la partie entre parenthèses correspond à la commande à exécuter. Vous pouvez inclure n'importe quel élément dans un rouleau normal (macros, capacités, requêtes, etc.), mais veuillez noter que la commande elle-même sera exécutée par le joueur qui clique dessus. Par exemple, veuillez ne pas inclure @{Character|AC} si toutes les personnes susceptibles de voir le message ne peuvent pas accéder à ce caractère. Veuillez plutôt inclure la valeur réelle telle qu'elle existait lorsque vous avez envoyé la commande en la saisissant vous-même avant d'envoyer le message de chat. Ces boutons fonctionnent pour tous les types de messages, qu'il s'agisse de messages généraux, de messages privés, de messages privés au GM, etc.

Veuillez noter que si vous utilisez /direct pour envoyer un message, nous n'effectuerons aucune analyse Markdown sur celui-ci. Vous devrez donc inclure vos propres balises <et> . Voici un exemple illustrant ce principe :

<a href="!attackroll">Jet d'attaque</a>

Inscription des boutons Mod (API) dans le chat

Vous pouvez également saisir des boutons Mod (API) de syntaxe Markdown dans le chat pour que d'autres puissent les utiliser. Étant donné qu'ils seront interprétés par l'analyseur syntaxique du chat, si vous souhaitez que les attributs, les requêtes et les jets soient développés lorsque vous cliquez sur le bouton, vous devez saisir certaines parties de la commande avec une syntaxe spéciale (entités HTML) :

Personnage Remplacement
 % &N° 37 ;
) &N° 41 ;
 ? &N° 63 ;
@ &N° 64 ;
[ &N° 91 ; ou &lbrack;
] &#93 ; ou &rbrack;

Cet exemple de bouton utilise certains d'entre eux :

[Jet d'attaque](!attackroll &#64;{target|token_id} &#91;[1d6+&#63;{Bonus|0}]&#93;)

Vous pouvez utiliser les boutons Mod (API) pour activer des Macro ou des Caractéristiques.

Personnage Remplacement
<retour chariot> &N° 13 ;

Pour ce faire, veuillez simplement commencer la partie commande par le code spécial!&#13 ;puis ajoutez l'appel de macro avec#ou l'appel de caractéristique avec&#37 ;(%) :

[Macro](!&#13;#MacroName)

[Caractéristique] (!&#13;&#37;{CharName|AbilityName})

Remarque : À l'heure actuelle, la réouverture d'une macro enregistrée sous l'onglet Collections de la barre latérale entraîne la restauration des entités HTML qu'elle contient ; si la macro est ensuite enregistrée, ces restaurations le sont également. Ce comportement n'est pas présent dans caractéristiques ou les boutons de commande de capacité.

Pour boutons de commande de capacité, si la caractéristique qui crée le bouton et la caractéristique à laquelle il fait référence se trouvent toutes deux sur la même feuille, la syntaxe est très simple :

[Caractéristique] (~AbilityName)

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