API: Spielmarker

Der Roll20-API wurde eine neue Funktion hinzugefügt, um benutzerdefinierte Spielmarker zu unterstützen. Diese Informationen werden im Kampagnenknoten unter 'token_markers' gespeichert. Du kannst in der API so darauf zugreifen:

Campaign().get("token_markers");

Diese Informationen sind schreibgeschützt.

Der Rückgabewert ist ein stringifiziertes JSON-Array, das für jeden derzeit im Spiel befindlichen Spielmarker ein Objekt enthält.

{
    "id":59, // die Datenbank-ID für den
    "name":"Bane", // der Name (nicht eindeutig) des Spielmarkers
    "tag":"Bane::59", // wie der Spielmarker tatsächlich referenziert wird
        // das enthält die ID für benutzerdefinierte Spielmarker, jedoch nicht
        // für Standard-Spielmarker.
    "url":"https://s3.amazonaws.com/files.d20.io/images/59/yFnKXmhLTtbMtaq-Did1Yg/icon.png?1575153187"
    // ^die URL für das Bild des Spielmarkers
}

Wir haben ein Beispielskript geschrieben, um zu zeigen, wie du damit die in deiner Kampagne verfügbaren Spielmarker finden kannst.

Füge dieses Skript zu deinem Spiel hinzu, dann kannst du diese Befehle nutzen:

!markernames zeigt alle Spielmarker mit Bild, Name und ID im Chat an.

!markerids <name> zeigt im Chat alle Spielmarker an, die mit dem angegebenen Namen übereinstimmen.

!settokenmarker <string> fügt die angegebene Zeichenfolge zur Statusmarker-Liste des aktuell ausgewählten Spielmarkers hinzu. Beachte, dass hier keine Validierung stattfindet, ob der Spielmarker existiert; der angegebene Wert wird einfach zur Statusmarker-Liste hinzugefügt.

!gettokenmarkers zeigt das Statusmarker-Attribut des aktuell ausgewählten Spielmarkers im Chat an.

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?
9 von 38 fanden dies hilfreich