Mod (API): Fortgeschrittene Beispiele

Die Cookboox bietet einige Beispiele für einfache Skripte, die dir den Einstieg erleichtern können. Du kannst sie gerne übernehmen und für deine eigenen Kampagnen abändern. Es gibt auch ein API Scripts Forum, in dem du über API Scripting diskutieren und deine Scripts mit der Community teilen kannst.


Spielmarker-Status-Manager 

(Beigetragen von Eric Dalquist)

Dieses Skript fügt automatisch Statusmarkierungen basierend auf den Balkenwerten hinzu. Das Skript kann so konfiguriert werden, dass es jeden der drei Balken verfolgt und beliebige Statusmarkierungen für jedes Verhältnis zwischen 0 und 1 setzt. Das Skript kann mehrere Barren/Tokens in einer einzigen Instanz verwalten. Das folgende Beispiel überwacht Balken 1 und setzt die rote Markierung, wenn der Wert <= 50 % ist, und setzt dann die tote Markierung, wenn der Wert <= 0 ist.

 * Legen Sie verschiedene Token-Markierungen basierend auf den Verhältnissen von Balkenstrom/Maximum fest.
 * 
 * Das Array CONFIG kann eine beliebige Anzahl von Konfigurationsobjekten enthalten. Diese Objekte
 * werden der Reihe nach verarbeitet.
 * 
 * barId – Die ID des Balkens, um die Werte für [1, 2, 3] anzuzeigen
 * barRatio – Das Verhältnis des Balkenwerts zum Maximalwert, der das Setzen der Statusmarkierung auslöst [0 – 1]
 * status – Der Name des umzuschaltenden Statusmarkers [Rotmarker, Blaumarker, Grünmarker, Braunmarker, Lilamarker, tot]
 * whenLow – Der Status des Markers, wenn der Balkenwert <= das Verhältnis [wahr, falsch]
 *
var CONFIG = ist [
    {barId: 1, barRatio: .5, Status: „redmarker“, whenLow: true},
    {barId: 1, barRatio: 0, Status: „dead“, whenLow: true}];


on("change:token", function(obj) {
    CONFIG.forEach(function(opts) {
        var maxValue = parseInt(obj.get("bar" + opts.barId + "_max"));
        var curValue = parseInt(obj.get("bar" + opts.barId + "_value"));
        log(opts.barId + ": " + curValue + "/" + maxValue);
    
        if (!isNaN(maxValue ) &&!isNaN(curValue)) {
            var markerName = "status_" + opts.status;
            if (curValue <= (maxValue * opts.barRatio)) {
                obj.set(markerName, opts.whenLow);
            }
            else {
                obj.set(markerName, !opts.whenLow);
            }
        }
    });
});

Temporärer HP-Manager

(Beigetragen von Eric Dalquist)

Verwaltet automatisch temporäre Hitpoints. Wenn einer der Token-Balken zum Verfolgen temporärer HP verwendet wird, kann dieses Skript HP automatisch vom temporären Wert abziehen, bevor sie aus der Haupt-HP-Leiste entfernt werden.

* Entfernt automatisch temporäre HP, falls vorhanden.
 * 
 * Wenn die HP eines Spielmarkers reduziert wurden, prüft das Skript, ob
 * temporäre HP verfügbar sind. Wenn dies der Fall ist, werden diese zuerst entfernt und die tatsächlichen HP werden auf
 * aktualisiert, um die temporären HP widerzuspiegeln, die den Treffer absorbieren.
 * 
 * TEMP_BAR_ID – Der Balken, der zum Verfolgen der temporären HP [1, 2, 3] verwendet wird.
 * HP_BAR_ID – Der Balken, der zum Verfolgen der tatsächlichen HP [1, 2, 3] verwendet wird.
 *
var TEMP_BAR_ID = 2;
var HP_BAR_ID = 1;
 
on("change:token", function(obj, prev) {
    var prevHpValStr = prev["bar" + HP_BAR_ID + "_value"];
    var prevHpVal = parseInt(prevHpValStr);
    if (isNaN(prevHpVal) ) {
        log("WARN: Previos bar " + HP_BAR_ID + " enthält keine Zahl: '" + prevHpValStr + "'");
        return;
    }
    
    var hpValStr = obj.get("bar" + HP_BAR_ID + "_value");
    var hpVal = parseInt(hpValStr);
    if (isNaN(hpVal)) {
        log("WARN: Bar " + HP_BAR_ID + " enthält keine Zahl: '" + hpValStr + "'" );
        return;
    }
    
    if (prevHpVal > hpVal) {
        var tmpHpVal = parseInt(obj.get("bar" + TEMP_BAR_ID + "_value"));
        log(prevHpVal + " - " + hpVal + " - " + tmpHpVal);
        if (!isNaN(tmpHpVal)) {
            var hpChange = prevHpVal - hpVal;
            var verbleibendenTmp = tmpHpVal - hpChange;
            if (remainingTmp > 0) {
                obj.set("bar" + TEMP_BAR_ID + "_value", verbleibenderTmp);
                obj.set("bar" + HP_BAR_ID + "_value", prevHpVal);
            }
            else {
                var verbleibenderHp = prevHpVal + verbleibenderTmp;
                obj.set("bar" + TEMP_BAR_ID + "_value", 0);
                obj.set("bar" + HP_BAR_ID + "_value", verbleibendeHp);
            }
        }
    }
});


Patrouillen-Token

//Warte, bis das Ready-Ereignis ausgelöst wird, damit wir wissen, dass die Kampagne vollständig geladen ist.
   //Erhalte eine Referenz zu unserem Patrouillen-Token.
   var patroltoken = findObjs({_type: "graphic", name: "Guard A"})[0]; //Wir wissen, dass es in der Kampagne einen Token namens „Guard A“ gibt.
   var Richtung = -70; //Gehe 70 Pixel nach links.
   varstepstaken = 0; //Wie viele Schritte sind wir in der aktuellen Richtung gegangen?
   setInterval(function() {
     if(stepstaken > 3) {
       //Richtung wechseln!
       Richtung = Richtung * -1; //wird die Richtung, in die wir gehen, „umdrehen“ 0stepstaken =
       ; //reset geht auf 0 zurück.
     }
     patroltoken.set("left", patroltoken.get("left") + Richtung); //gehen!
     Schritte gemacht++;
   }, 5000); //alle 5 Sekunden eine Aktion ausführen
});
 
War dieser Beitrag hilfreich?
28 von 40 fanden dies hilfreich