Une nouvelle fonction a été ajoutée à l'API Roll20 pour prendre en charge les Marqueurs de Jeton personnalisés. Ces informations sont stockées sous le nœud de campagne sous le nom 'jetons_markers'. elles peuvent être consultées depuis l'API via
Campaign().get("jetons_markers");
Ces informations sont en lecture seule.
La valeur de retour sera un tableau JSON sérialisé contenant un objet pour chaque marqueur de jeton actuellement dans le jeu.
{
"id":59, // l'ID de la base de données pour le marqueur
"name":"Bane", // le nom (non unique) du marqueur
"tag":"Bane::59", // la façon dont le jeton est référencé en réalité
// cela inclura l'ID 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 du marqueur de jeton
}
Nous avons écrit un exemple de script pour montrer comment vous pouvez utiliser cela pour trouver les Marqueurs de Jeton disponibles dans votre Campagne.
Ajoutez ce script à votre jeu et ces commandes seront disponibles:
!markernames
affichera tous les marqueurs dans le chat avec l'image, le nom et l'ID
!markerids <name>
va afficher tous les marqueurs dans le chat qui correspondent au nom fourni
!settokenmarker <string>
ajoutera la chaîne fournie à la liste des marqueurs du jeton actuellement sélectionné. Notez que cela ne fait aucune validation pour s'assurer que le marqueur de jeton existe, cela ajoute simplement la valeur fournie aux marqueurs du jeton.
!gettokenmarkers
affiche 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("Token Markers", 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 || 'Unable to find any matching token markers'
sendChat("Token Markers", 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("Token Markers", currentMarkers);
}
});
});