API: Token-Marker

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:

!markernamesgibt 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.

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

        }

    });

});
 
War dieser Beitrag hilfreich?
7 von 29 fanden dies hilfreich