O objeto de campanha armazena a lista de marcadores de token disponíveis no jogo (predefinidos e personalizados). Esta informação é armazenada como _token_markers. É de leitura exclusiva. Aceda a esta funcionalidade a partir de um script de modificação com:
Campaign().get("_token_markers");
O valor devolvido é um array JSON convertido em cadeia de caracteres, que contém um objeto para cada marcador de token atualmente presente no jogo.
{
"id": 59, // o identificador da base de dados para o marcador
"name": "Bane", // o nome (não exclusivo) do marcador
"tag": "Bane::59", // a forma como o token é efetivamente referenciado
// isto incluirá o identificador para marcadores personalizados, mas não
// para marcadores predefinidos.
"url": "https://s3.amazonaws.com/files.d20.io/images/59/yFnKXmhLTtbMtaq-Did1Yg/icon.png?1575153187"
// ^a URL da imagem do marcador de token
}
Elaborámos um script de exemplo para demonstrar como pode utilizar isto para encontrar os marcadores de token disponíveis na sua campanha.
Adicione este script ao seu jogo e estes comandos estarão disponíveis:
!markernames irá apresentar todos os marcadores no chat, juntamente com a imagem, o nome e o ID
!markerids irá apresentar no chat todos os marcadores que correspondam ao nome indicado
!settokenmarker irá adicionar a cadeia de caracteres fornecida à lista de marcadores de estado do token atualmente selecionado. Observe que isso não realiza nenhuma validação para garantir que o marcador de token exista; simplesmente adiciona o valor fornecido aos marcadores de token.
!gettokenmarkers apresenta o atributo «statusmarkers» do token atualmente selecionado no 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 => {
se (marker.name.toLowerCase() === markerName) results.push(marker);
});
log(results);
let chatMessage = getChatMessageFromTokenMarkers(results);
chatMessage = chatMessage || 'Não foi possível encontrar quaisquer marcadores de token correspondentes'
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("Marcadores de Token", currentMarkers);
}
});
});