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
});