Mod-Skripte (API): Fortgeschrittene Beispiele

Das Cookbook bietet einige Beispiele für einfache Skripte, die dir den Einstieg erleichtern können. Du kannst sie gerne nehmen und für deine eigenen Kampagnen anpassen. Es gibt auch ein Mod (API) Scripts Forum, in dem du über Mod (API) Scripting diskutieren und deine Scripts mit der Community teilen kannst.


Spielmarker-Status-Manager 

(Beitrag von Eric Dalquist)

Dieses Skript fügt automatisch Status-Spielmarker basierend auf den Leistenwerten hinzu. Das Skript kann so konfiguriert werden, dass es eine der drei Leisten verfolgt und beliebige Status-Spielmarker für jedes Verhältnis zwischen 0 und 1 setzt. Das Skript kann mehrere Leisten/Spielmarker in einer einzigen Instanz verwalten. Das folgende Beispiel beobachtet Leiste 1 und setzt den roten Spielmarker, wenn der Wert <= 50 % ist, und setzt dann den Tot-Spielmarker, wenn der Wert <= 0 ist.

 * Leg verschiedene Spielmarker basierend auf den Leistenverhältnissen (cur/max) fest
 * 
 * Das CONFIG-Array kann beliebig viele Konfigurationsobjekte haben. Diese Objekte
 * werden der Reihe nach bearbeitet.
 * 
 * barId – Die ID der Leiste, deren Werte betrachtet werden sollen [1, 2, 3]
 * barRatio – Das Verhältnis von Leistenwert zu Maximalwert, das das Setzen des Status-Spielmarkers auslöst [0 – 1]
 * status – Der Name des Status-Spielmarkers, der umgeschaltet werden soll [redmarker, bluemarker, greenmarker, brownmarker, purplemarker, dead]
 * whenLow – Der Zustand des Spielmarkers, wenn der Leistenwert <= dem Verhältnis entspricht [true, false]
 *
var CONFIG = [
    {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) &&a0!isNaN(curValue)) {
            var markerName = "status_" + opts.status;
            if (curValue <= (maxValue * opts.barRatio)) {
                obj.set(markerName, opts.whenLow);
            }
            else {
                obj.set(markerName,a0!opts.whenLow);
            }
        }
    });
});

Temporärer LP-Manager

(Beitrag von Eric Dalquist)

Verwaltet temporäre LP automatisch. Wenn eine der Spielmarker-Leisten zum Verfolgen der temporären LP genutzt wird, kann dieses Skript automatisch LP vom temporären Wert abziehen, bevor sie aus der Haupt-LP-Leiste entfernt werden.

* Entfernt temporäre LP automatisch, wenn sie vorhanden sind.
 * 
 * Wenn die LP eines Spielmarkers verringert werden, prüft das Skript, ob noch
 * temporäre LP verfügbar sind. Wenn ja, werden diese zuerst entfernt und die tatsächlichen LP werden
 * aktualisiert, um widerzuspiegeln, dass die temporären LP den Treffer abgefangen haben.
 * 
 * TEMP_BAR_ID – Die Leiste, die zum Verfolgen der temporären LP verwendet wird [1, 2, 3]
 * HP_BAR_ID – Die Leiste, die zum Verfolgen der tatsächlichen LP verwendet wird [1, 2, 3]
 *
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 + " does not contain a number: '" + prevHpValStr + "'");
        return;
    }
    
    var hpValStr = obj.get("bar" + HP_BAR_ID + "_value");
    var hpVal = parseInt(hpValStr);
    if (isNaN(hpVal)) {
        log("WARN: Bar " + HP_BAR_ID + " does not contain a number: '" + 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 remainingTmp = tmpHpVal - hpChange;
            if (remainingTmp > 0) {
                obj.set("bar" + TEMP_BAR_ID + "_value", remainingTmp);
                obj.set("bar" + HP_BAR_ID + "_value", prevHpVal);
            }
            else {
                var remainingHp = prevHpVal + remainingTmp;
                obj.set("bar" + TEMP_BAR_ID + "_value", 0);
                obj.set("bar" + HP_BAR_ID + "_value", remainingHp);
            }
        }
    }
});


Patrouillierender Spielmarker

Warte, bis das Ready-Ereignis ausgelöst wird, damit wir wissen, dass die Kampagne komplett geladen ist.
   //Hol dir eine Referenz auf unseren patrouillierenden Spielmarker.
   var patroltoken = findObjs({_type: "graphic", name: "Guard A"})[0]; //Wir wissen, dass es in der Kampagne einen Spielmarker namens „Guard A“ gibt.
   var direction = -70; //70 Pixel nach links gehen.
   var stepstaken = 0; //Wie viele Schritte haben wir in der aktuellen Richtung gemacht?
   setInterval(function() {
     if(stepstaken > 3) {
       //Richtung wechseln!
       direction = direction * -1; //dreht die Richtung, in die wir gehen, um
       stepstaken = 0; //setzt die Schritte auf 0 zurück.
     }
     patroltoken.set("left", patroltoken.get("left") + direction); //walk!
     stepstaken++;
   }, 5000); //alle 5 Sekunden eine Aktion ausführen
});
 
War dieser Beitrag hilfreich?
30 von 42 fanden dies hilfreich