Gestor de estado de tokens
(Contribución de Eric Dalquist)
Este script añade automáticamente marcadores de estado en función de los valores de las barras. La secuencia de comandos puede configurarse para realizar un seguimiento de cualquiera de las tres barras, establecer cualquiera de los marcadores de estado para cualquier relación entre 0 y 1. El script puede gestionar varias barras/tokens en una sola instancia. El ejemplo siguiente vigila la barra 1 y pone el marcador rojo cuando el valor es <= 50% y luego pone el marcador muerto cuando el valor es <= 0.
* Establecer varios marcadores de fichas en función de las relaciones cur/máx de la barra
*
* La matriz CONFIG puede tener cualquier número de objetos de configuración. Estos objetos
* se procesan en orden.
*
* barId - El ID de la barra para buscar los valores de [1, 2, 3]
* barRatio - La relación entre el valor de la barra y el valor máximo que activa el ajuste del marcador de estado [0 - 1]
* status - El nombre del marcador de estado para alternar [redmarker, bluemarker, greenmarker, brownmarker, purplemarker, dead]
* whenLow - El estado del marcador cuando el valor de la barra es <= la relación [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 + "_valor"));
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);
}
}
});
});
Gestor temporal de HP
(Contribución de Eric Dalquist)
Gestiona automáticamente los puntos de golpe temporales. Si una de las barras de fichas se utiliza para realizar un seguimiento de los CV temporales, este script puede deducir automáticamente los CV del valor temporal antes de que se eliminen de la barra principal de CV.
* Elimina automáticamente las HP temporales si existen.
*
* Cuando a una ficha se le reduce su HP el script comprueba si hay algún
* HP temporal disponible. Si lo hace, éstos se eliminan primero y los HP reales se
* actualizan para reflejar los HP temporales que absorben el golpe.
*
* TEMP_BAR_ID - La barra utilizada para realizar un seguimiento de los HP temporales [1, 2, 3]
* HP_BAR_ID - La barra utilizada para realizar un seguimiento de los HP reales [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 + " no contiene un número: '" + prevHpValStr + "'");
return;
}
var hpValStr = obj.get("barra" + HP_BAR_ID + "_valor");
var hpVal = parseInt(hpValStr);
if (isNaN(hpVal)) {
log("WARN: La barra " + HP_BAR_ID + " no contiene un número: '" + 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);
}
}
}
});
Ficha de patrulla
//Espere hasta que se dispare el evento ready para que sepamos que la campaña está completamente cargada.
//Obtener una referencia a nuestro token de patrulla.
var patroltoken = findObjs({_type: "graphic", name: "Guard A"})[0]; //Sabemos que existe un token en la Campaña llamado "Guard A".
var direction = -70; //Camine 70 píxeles a la izquierda.
var stepstaken = 0; //¿Cuántos pasos hemos dado en la dirección actual?
setInterval(function() {
if(stepstaken > 3) {
/ ¡Cambie de dirección!
direction = direction * -1; //dará "la vuelta" a la dirección en la que caminamos
stepstaken = 0; //restablecer los pasos a 0.
}
patroltoken.set("izquierda", patroltoken.get("izquierda") + dirección); //¡camina!
stepstaken++;
}, 5000); //realizar una acción cada 5 segundos
});