Se ha agregado una nueva función a la API de Roll20 para admitir Marcadores personalizados de tokens. Esta información se almacena bajo el nodo de campaña como 'token_markers'. puede accederse a ella desde la API a través de
Campaign().get("token_markers");
Esta información es de solo lectura.
El valor devuelto será una matriz JSON convertida en cadena que contiene un objeto para cada marcador de token actualmente en el juego.
{
"id":59, // el id de la base de datos para el
"nombre":"Bane", // el nombre (no único) del marcador
"etiqueta":"Bane::59", // cómo se referencia realmente el token
// esto incluirá el id para marcadores personalizados, pero no
// para marcadores predeterminados.
"url":"https://s3.amazonaws.com/files.d20.io/images/59/yFnKXmhLTtbMtaq-Did1Yg/icon.png?1575153187"
// ^la URL de la imagen del marcador de token
}
Hemos escrito un script de ejemplo para mostrar cómo puedes usar esto para encontrar los Marcadores de Token disponibles en tu Campaña.
Agrega este Script a tu juego y estos comandos estarán disponibles:
!markernames
mostrará todos los marcadores en el chat con la imagen, nombre e id
!markerids <name>
mostrará en el chat todos los marcadores que coincidan con el nombre proporcionado
!settokenmarker <string>
agregará a la lista de marcadores del token seleccionado actualmente la cadena proporcionada Tenga en cuenta que esto no realiza ninguna validación para asegurarse de que el Marcador de Token exista, simplemente agrega el valor proporcionado a los marcadores del token
!gettokenmarkers
mostrará el atributo de estado del token seleccionado actualmente en el 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);
}
});
});