Der Roll20-API wurde eine neue Funktion hinzugefügt, um benutzerdefinierte Token-Marker zu unterstützen. Diese Informationen werden unter dem Kampagnenknoten als „token_markers“ gespeichert. Der Zugriff erfolgt über die API
Campaign().get("token_markers");
Diese Informationen sind schreibgeschützt.
Der Rückgabewert ist ein JSON-Array mit Zeichenfolgen, das ein Objekt für jeden aktuell im Spiel befindlichen Token-Marker enthält.
{
„id“:59, // die Datenbank-ID für
„name“: „Bane“, // der Name (nicht eindeutig) des Markers
„tag“: „Bane::59“, // wie auf das Token tatsächlich verwiesen wird
// Dies schließt die ID für benutzerdefinierte Markierungen ein, nicht jedoch
// für Standardmarkierungen.
„url“: „https://s3.amazonaws.com/files.d20.io/images/59/yFnKXmhLTtbMtaq-Did1Yg/icon.png?1575153187“
// ^die URL für das Bild des Token-Markers
}
Wir haben ein Beispielskript geschrieben, um zu zeigen, wie Sie damit in Ihrer Kampagne verfügbare Token-Marker finden können.
Fügen Sie dieses Skript zu Ihrem Spiel hinzu und diese Befehle sind verfügbar:
!markernames
gibt alle Markierungen im Chat mit Bild, Name und ID aus
!markerids <name>
gibt alle/alle Markierungen im Chat aus, die mit dem angegebenen Namen übereinstimmen
!settokenmarker <string>
fügt die bereitgestellte Zeichenfolge zur Markierungsliste des aktuell ausgewählten Tokens hinzu. Beachten Sie, dass hierbei keine Validierung durchgeführt wird, um sicherzustellen, dass der Token-Marker vorhanden ist, sondern lediglich der bereitgestellte Wert zu den Token-Markern hinzugefügt wird.
!gettokenmarkers
gibt das Statusmarker-Attribut des aktuell ausgewählten Tokens an den Chat aus
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);
}
});
});