Une nouvelle fonctionnalité a été ajoutée à l'API Roll20 afin de prendre en charge les icônes de jeton personnalisées. Ces informations sont stockées sous le nœud de campagne sous le nom « token_markers ». Il est possible d'y accéder depuis l'API via
Campaign().get("token_markers") ;
Ces informations sont en lecture seule.
La valeur renvoyée sera un tableau JSON sous forme de chaîne contenant un objet pour chaque icône de jeton actuellement dans le jeu.
{
"id":59, // l'identifiant de la base de données pour l'
"name":"Bane", // le nom (non unique) du marqueur
"tag":"Bane::59", // la manière dont le jeton est réellement référencé
// cela inclura l'identifiant pour les marqueurs personnalisés, mais pas
// pour les marqueurs par défaut.
« url » : « https://s3.amazonaws.com/files.d20.io/images/59/yFnKXmhLTtbMtaq-Did1Yg/icon.png?1575153187 »
// ^l'URL de l'image de l'icône de jeton
}
Nous avons rédigé un exemple de script pour vous montrer comment vous pouvez l'utiliser pour trouver les icônes de jeton disponibles dans votre campagne.
Veuillez ajouter ce script à votre jeu et les commandes suivantes seront disponibles :
!markernamesaffichera tous les marqueurs dans le chat avec l'image, le nom et l'identifiant.
!markerids <nom>affichera dans le chat tous les marqueurs correspondant au nom fourni.
!settokenmarker <string>ajoutera la chaîne fournie à la liste des marqueurs du jeton actuellement sélectionné. Veuillez noter que cela n'effectue aucune validation pour s'assurer que l'icône de jeton existe, cela ajoute simplement la valeur fournie aux icônes de jeton.
!gettokenmarkersaffiche l'attribut statusmarker du jeton actuellement sélectionné dans le chat.
on("ready", () => {
const tokenMarkers = JSON.parse(Campaign().get("token_markers"));
const getChatMessageFromTokenMarkers = markers => {
let chatMessage = '';
_.each(markers, marker => {
chatMessage += `<p><img src='${marker.url}'> ${marker.id}: ${marker.name}</p>`;
});
return chatMessage;
};
on("chat:message", msg => {
if(msg.content.split(" ")[0].toLowerCase() === '!markernames') {
let chatMessage = getChatMessageFromTokenMarkers(tokenMarkers);
sendChat("Icônes de jeton", chatMessage);
} else if(msg.content.split(" ")[0].toLowerCase() === '!markerids') {
const markerName = msg.content.split(" ")[1].toLowerCase();
let results = [];
} _.each(tokenMarkers, marker => {
if(marker.name.toLowerCase() === markerName) results.push(marker);
});
log(results);
let chatMessage = getChatMessageFromTokenMarkers(results);
chatMessage = chatMessage || 'Impossible de trouver des marqueurs de jetons correspondants'
sendChat("Icônes de jeton", chatMessage);
} else if(msg.content.split(" ")[0].toLowerCase() === '!settokenmarker') {
const markerName = msg.content.split(" ")[1].toLowerCase();
if (!msg.selected && msg.selected[0]._type == "graphic") return;
obj = getObj(msg.selected[0]._type, msg.selected[0]._id);
currentMarkers = obj.get("statusmarkers").split(',');
currentMarkers.push(markerName);
obj.set("statusmarkers", currentMarkers.join(','));
} else if(msg.content.split(" ")[0].toLowerCase() === '!gettokenmarkers') {
if (!msg.selected) return;
if (msg.selected[0]._type !== "graphic") return;
obj = getObj(msg.selected[0]._type, msg.selected[0]._id);
currentMarkers = obj.get("statusmarkers");
sendChat("Icônes de jeton", currentMarkers);
});
});
});