API: Marcadores de Tokens

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.

!gettokenmarkersexibe 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);

        }

    });

});
 
Este artigo foi útil?
Utilizadores que acharam útil: 8 de 36