Der Roll20-API wurde eine neue Funktion hinzugefügt, um benutzerdefinierte Spielmarker 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, das zeigt, wie du damit die in deiner Kampagne verfügbaren Spielmarker finden kannst.
Füge dieses Skript zu deinem Spiel hinzu und diese Befehle werden verfügbar sein:
!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 Spielmarkers hinzu. Beachte, dass dies keine Validierung durchführt, um sicherzustellen, dass der Spielmarker existiert, sondern einfach den angegebenen Wert zu den Spielmarker hinzufügt.
!gettokenmarkers
gibt das Statusmarker-Attribut des aktuell ausgewählten Spielmarker 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);
}
});
});