Foi adicionada uma nova função à API do Roll20 para suportar Marcadores de Token personalizados. Essas informações são armazenadas sob o nó da campanha como 'token_markers'. elas podem ser acessadas através da api via
Campaign().get("token_markers");
Essas informações são apenas para leitura.
O valor de retorno será uma matriz JSON convertida em string contendo um objeto para cada marcador de token atualmente no jogo.
{
"id":59, // o id do banco de dados para o
"name":"Bane", // o nome (não único) do marcador
"tag":"Bane::59", // como o token é referenciado
// isso incluirá o id para marcadores personalizados, mas não
// para marcadores padrão.
"url":"https://s3.amazonaws.com/files.d20.io/images/59/yFnKXmhLTtbMtaq-Did1Yg/icon.png?1575153187"
// ^a url da imagem do marcador de token
}
Nós escrevemos um exemplo de script para mostrar como você pode usar isso para encontrar Marcadores de Token disponíveis em sua Campanha.
Adicione este Script ao seu jogo e esses comandos estarão disponíveis:
!markernames
irá exibir todos os marcadores no chat com a imagem, nome e id
!markerids <name>
irá exibir no chat todos os marcadores que correspondem ao nome fornecido
!settokenmarker <string>
irá adicionar a string fornecida à lista de marcadores do token atualmente selecionado. Observe que isso não faz nenhuma validação para garantir que o Marcador de Token exista, simplesmente adiciona o valor fornecido aos marcadores do token.
!gettokenmarkers
exibe no chat o atributo statusmarker do token atualmente selecionado
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);
}
});
});