Se ha añadido una nueva función a la API de Roll20 para admitir marcadores de tokens personalizados. Esta información se almacena en el nodo de la campaña como «token_markers». Se puede acceder a él desde la API a través de
Campaña().obtener("marcadores_de_token");
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 ficha que se encuentra actualmente en el juego.
{
"id":59, // el id de la base de datos para el
"name":"Bane", // el nombre (no único) del marcador
"tag":"Bane::59", // cómo se hace referencia al token
// esto incluirá el id para los marcadores personalizados, pero no
// para los marcadores predeterminados.
"url":"https://s3.amazonaws.com/files.d20.io/images/59/yFnKXmhLTtbMtaq-Did1Yg/icon.png?1575153187"
// ^la URL de la imagen del marcador del token
}
Hemos escrito un script de ejemplo para mostrar cómo puede utilizar esto para encontrar los marcadores de token disponibles en su campaña.
Añada este script a su juego y tendrá disponibles los siguientes comandos:
!markernamesmostrará todos los marcadores en el chat con la imagen, el nombre y el ID.
!markerids <name> mostrará en el chat todos los marcadores que coincidan con el nombre proporcionado.
!settokenmarker <string> añadirá la cadena proporcionada a la lista de marcadores del token seleccionado actualmente. Tenga en cuenta que esto no realiza ninguna validación para asegurarse de que el marcador de token existe, simplemente añade el valor proporcionado a los marcadores de token.
!gettokenmarkersmuestra el atributo statusmarker 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("Marcadores de token", 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 || 'No se han encontrado marcadores de token coincidentes'
sendChat("Marcadores de token", 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);
}
});
});