Cette page présente des informations détaillées concernant les scripts de mod en matière de fonctions de Chat.
Événements de chat
Chat:message
Se déclenche chaque fois qu'un nouveau message de Chat est reçu. Veuillez noter que si le message est de type « rollresult », « gmrollresult », « secretrollresult » ou « supersecretrollresult », vous devrez appeler la fonction JSON.parse() sur le contenu du message afin d'obtenir un objet contenant les informations relatives aux résultats du jet de dé.
Si un joueur envoie un message dans le Chat commençant par « ! », ce message est de type « api » et n'apparaît pas dans le Chat. Les scripts utilisent ce type pour les commandes. La fonction sendChat() déclenche également l'événement Chat:message, et ces messages ont pour identifiant de joueur « API ».
Paramètre de rappel :
| Propriété | Valeur par défaut | Remarques |
|---|---|---|
qui |
"" |
Le pseudonyme du joueur ou du personnage qui a envoyé le message. Pour un MJ, cela se termine par (MJ). Supprimez ce suffixe avant de transmettre le paramètre « who » à la fonction sendChat si vous ne souhaitez pas qu'il apparaisse dans le nom affiché. |
identifiant joueur |
L'identifiant du joueur qui a envoyé le message. Les messages créés par la fonction sendChat() utilisent l'« API ». |
|
type |
« général » |
L'une des valeurs suivantes : « general », « rollresult », « gmrollresult », « secretrollresult », « supersecretrollresult », « emote », « chuchoter », « desc », « direct » ou « api ». |
contenu |
"" |
Le contenu du message instantané. Si le type est « rollresult », « gmrollresult », « secretrollresult » ou « supersecretrollresult », il s'agira d'une chaîne JSON contenant des données relatives au jet de dé. |
origRoll |
(types de lancers uniquement) Le texte d'origine du lancer, par exemple : « 2d10+5 de dégâts de feu » lorsque le joueur tape /r 2d10+5 de dégâts de feu. Cela revient à utiliser du contenu dans des messages dont le type n'est pas un type de résultat de jet de dé. |
|
Rouleaux de patins à roulettes |
À afficher lorsque le contenu comporte des listes déroulantes intégrées. Dans un message « api », les rôles apparaissent dans le contenu sous la forme $[[0]], $[[1]], etc., et ce tableau contient les rôles analysés dans cet ordre. Une entrée peut comporter la valeur « secret : true ». |
|
Modèle de rouleau |
(le contenu ne comporte qu'un ou plusieurs Modèles de jet) Le nom du modèle spécifié. | |
cible |
(tapez Chuchoter uniquement) L'identifiant du joueur à qui le message chuchoté est envoyé. Si le message privé 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 message privé a été envoyé à un personnage sans joueur pour le contrôler, la valeur sera « gm ». |
|
nom_cible |
(tapez Chuchoter uniquement) Le pseudonyme du joueur ou du personnage à qui le message privé a été envoyé. |
|
sélectionné |
Afficher les commandes « api » du lecteur lorsqu'un élément est sélectionné. Chaque entrée est un objet simple {_id, _type}, et non un objet Roll20. Omis lorsque le message provient de la fonction sendChat(). |
|
secret |
false |
Cela vaut pour les documents et les messages classés « secret » et « très secret ». |
secret |
"publique" |
« public », « secret » ou « super ». |
Les rôles « secrets » et « ultra-secrets » utilisent ces commandes (disponibles sur les deux versions du Bac à sable) :
-
/secretrollou/sr—le typeest« secretrollresult »,« secret»est vrai,le niveau de confidentialitéest« secret». -
/supersecretrollou/ssr—le typeest« supersecretrollresult »,le secretest vrai,le niveau de confidentialitéest« super». -
/secretou/ssuivi d'un message (par exemple/secret [[1d6]]) —le typereste« général »,« secret»est vrai,le niveau de confidentialitéest« secret». Forme compacte et secrète d'un jet « chuchoté au MJ » : le MJ voit le résultat ; la personne qui lance le dé constate qu'un jet secret a eu lieu. -
/supersecretou/sssuivi d'un message —le typereste« général »,le secretest avéré,le niveau de confidentialitéest« super».
/sr et /ssr sont des commandes de roulis. Ce n'est pas le cas ! commandes. Un message qui commence par un point d'exclamation ! est de type « api ».
Remarque : Vous n'avez probablement pas besoin de toutes ces informations. Dans la plupart des cas, seul le résultat global du lancer vous intéressera (voir en 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é la méthode JSON.parse sur la propriété « content » d’un message de type « rollresult », « gmrollresult », « secretrollresult » ou « supersecretrollresult », 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 lors de notre premier jet de 2d6
},
{
"v":5 // Nous avons obtenu un 5 lors de notre deuxième jet de 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.
"name":"rainy",
"avatar":"", //Il s'agira d'une URL vers une image si le tableau déroulant utilise des icônes
"weight":1,
"id":"-IpzPx2j_9piP09ceyOv"
}
}
]
},
{
"type":"C", // "C" = Commentaire
"text":" Attaque !"
],
"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
Une structure annotée du résultat de /roll {1d6!!>5}>6 (indiquant les modifications dues à l'explosion et les succès de la cible) :
"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) {
// Les joueurs tapent « !d6 3 » pour lancer autant de dés à six faces (d6) contre un objectif de 4.
if (msg.type !== "api" || msg.content.indexOf("!d6 ") !== 0) return;
var numdice = parseInt(msg.content.substring(4), 10);
if (!numdice || numdice < 1) return;
var who = msg.who.replace(/ \(GM\)$/, "");
sendChat(who, "/roll " + numdice + "d6>4");
});
sendChat(speakingAs, input [,callback [, options]] )
Vous pouvez utiliser cette fonction pour envoyer un message instantané.
speakingAs peut être l’un des éléments suivants :
- Toute chaîne de caractères, qui sera alors utilisée comme nom de la personne ayant envoyé le message. Par exemple.
« Riley » - L'identifiant d'un joueur, au format
« player|-Abc123 », où-Abc123correspond à l'identifiant du joueur. Si vous procédez ainsi,l'avatardu joueur et son nom seront automatiquement utilisés. - L'identifiant d'un personnage, au format
« personnage|-Abc123». Si vous procédez ainsi,l'avataret le nom du personnage seront automatiquement utilisés.
entrée doit être une expression valide, tout comme celles utilisées dans l'application Roll20. Vous saisissez du texte pour envoyer un message simple, ou vous utilisez des commandes « / » telles que /roll, /em, /w, /secretroll (/sr), /supersecretroll (/ssr), /secret (/s), /supersecret (/ss), etc. De plus :
- Vous pouvez utiliser les attributs de caractère au format
@{CharacterName|AttributeName}. - Vous pouvez utiliser les caractéristiques des personnages en respectant le format suivant :
%{CharacterName|AbilityName}. - Vous ne pouvez pas lancer des macros depuis
sendChatde la même manière qu'un joueur tape#NomDeLaMacro. Un bouton peut exécuter une Macro lorsque l'on clique dessus :[Nom](! #MacroName). -
@{selected|...}n'est pas développé à l'intérieur desendChat. Lisez plutôt `msg.selected` dans le gestionnaire `chat:message`. - Les messages normaux et les messages privés peuvent contenir les tags HTML ci-dessous.
/direct <msg>envoie le message sans Markdown et sans création automatique de liens vers les URL, et permet d'utiliser les mêmes Tags :
<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 à laquelle seront transmis les résultats de l'appel sendChat() au lieu d'envoyer les commandes au jeu. L'utilisation de la fonction sendChat() de cette manière est asynchrone. La commande sendChat() renverra un TABLEAU d'opérations, et chaque objet individuel sera identique à un objet que vous recevez lors d'un événement « Chat: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] ;
// Vous pouvez désormais utiliser 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 définies sous la forme d'un objet JavaScript dont les propriétés correspondent aux noms des options à configurer et dont les valeurs correspondent à leurs paramètres ; celles-ci sont généralement définies sur « true », car leur valeur par défaut est « false ».
Options disponibles :
-
noarchive– définissez cette option sur « true » pour empêcher l'enregistrement du message dans le Journal du chat. Cela s'avère particulièrement utile pour les éléments qui ne font pas partie de l'histoire, tels que les menus des boutons de scripts Mod et les informations d'état. -
use3d– Vous pouvez désormais générer des lancers de dés en 3D à l'aide de la fonction sendChat(). La syntaxe est simple :sendChat("Nom", "Lancer [[3d6]]", null, {use3d: true});Si vous transmettez un identifiant de joueur au paramètre « nom », par exemplesendChat("player|-ABC123",...), la couleur de ce joueur sera utilisée pour les dés. Dans le cas contraire, la couleur blanche par défaut sera utilisée.
Remarque : Les clients ne peuvent afficher que le résultat d'un seul « roll » 3D à la fois ; il n'est donc pas utile de créer plusieurs « rolls » 3D distincts à la suite. Veuillez également noter que l'utilisation des rotations 3D sollicite un peu davantage le serveur Jet quantique ; faites donc preuve de bon sens et évitez d'effectuer 100 rotations 3D en l'espace d'une seconde. Utilisez les lancers en 3D lorsque ceux-ci ont une importance pour le joueur et qu'ils ont un impact sur le jeu.
Si vous souhaitez modifier ces options sans pour autant utiliser de paramètre de rappel (troisième paramètre – voir ci-dessus), il vous suffit de passer la valeur null à sa place :
sendChat("Statut", "Tous les joueurs sont connectés.", null, {noarchive:true});
Boutons de commande du script de mod
La mise en forme du chat textuel, dans les messages du script Mod ainsi que dans les macros et les caractéristiques, peut créer des boutons de commande 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, n'incluez pas @{Character|AC} si toutes les personnes pouvant voir le message n'ont pas accès à ce personnage. 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 dans les messages généraux, les messages privés et les messages privés adressés au MJ. Le clic est attribué au joueur qui clique, avec l'identifiant de ce joueur et celui-ci étant sélectionné.
/direct ignore le Markdown ; par conséquent, [Jet d'attaque](!attackroll) ne se transformera pas en bouton.
Saisie des boutons de script du mod dans le Chat
Vous pouvez également saisir des boutons de script Mod utilisant la syntaxe Markdown dans le Chat afin que les autres utilisateurs puissent s'en servir. É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 ; |
[ |
[ ; ou [
|
] |
] ; ou ]
|
{ |
{ |
} |
} |
| |
| |
, |
, ; |
Cet exemple de bouton utilise certains d'entre eux :
[Jet d'attaque](!attackroll @{target|token_id} [[1d6+?{Bonus|0}]])
Vous pouvez en effet utiliser les boutons « Mod Script » pour lancer des macros ou des caractéristiques.
| Personnage | Remplacement |
|---|---|
<retour chariot> |
&N° 13 ; |
Pour ce faire, il vous suffit de commencer la partie commande par le code spécial !
 ; puis d'ajouter l'appel de Macro avec # ou l'appel de Caractéristique avec % ; (%) :
[Macro](! #MacroName)
[Caractéristique] (! %{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 sont également enregistrées. Ce comportement n'est pas observé dans Les boutons de caractéristiques ni aux boutons de commande de caractéristiques.
Pour les boutons de compétence, si la Caractéristique qui crée le bouton et celle à laquelle il fait référence se trouvent toutes deux sur la même feuille, la syntaxe est très simple :
[Caractéristique] (~AbilityName)