토큰 상태 관리자
(Eric Dalquist가 기여함)
이 스크립트는 막대 값에 따라 상태 표시기를 자동으로 추가합니다. 스크립트는 0에서 1 사이의 비율에 대해 어떤 상태 표시기든 설정할 수 있도록 구성할 수 있습니다. 스크립트는 단일 인스턴스에서 여러 막대/토큰을 관리할 수 있습니다. 아래 예제는 값이 <= 50%일 때 빨간색 표시기를 설정하고 값이 <= 0일 때 죽은 표시기를 설정합니다.
* 바의 cur/max 비율에 따라 다양한 토큰 마커를 설정합니다.
*
* CONFIG 배열에는 임의의 수의 구성 개체가 있을 수 있습니다. 이 객체들
*는 순서대로 처리됩니다.
*
* barId - 바의 ID [1, 2, 3]
* barRatio - 최대 값에 대한 바 값의 비율, 상태 표시기를 설정하는데 사용됨 [0 - 1]
* status - 토글할 상태 표시기의 이름 [redmarker, bluemarker, greenmarker, brownmarker, purplemarker, dead]
* whenLow - 바 값이 <= 비율일 때의 상태 [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) && !isNaN(curValue)) {
var markerName = "status_" + opts.status;
if (curValue <= (maxValue * opts.barRatio)) {
obj.set(markerName, opts.whenLow);
}
else {
obj.set(markerName, !opts.whenLow);
}
}
});
});
임시 HP 관리자
(Eric Dalquist가 기여함)
임시 히트포인트를 자동으로 관리합니다. 토큰 바 중 하나가 임시 HP를 추적하는 데 사용되는 경우 이 스크립트는 메인 HP 바에서 제거되기 전에 임시 값에서 HP를 자동으로 차감할 수 있습니다.
* 임시 HP가 있는 경우 자동으로 제거합니다.
*
* 토큰의 HP가 감소하면 스크립트에서 사용 가능한
* 임시 HP가 있는지 확인합니다. 있는 경우 해당 임시 HP가 먼저 제거되고 실제 HP가 히트를 흡수하도록 업데이트됩니다.
*
* TEMP_BAR_ID - 임시 HP를 추적하는 바 [1, 2, 3]
* HP_BAR_ID - 실제 HP를 추적하는 바 [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: 이전 바 " + HP_BAR_ID + "에 숫자가 없습니다: '" + prevHpValStr + "'");
return;
}
var hpValStr = obj.get("bar" + HP_BAR_ID + "_value");
var hpVal = parseInt(hpValStr);
if (isNaN(hpVal)) {
log("WARN: 바 " + HP_BAR_ID + "에 숫자가 없습니다: '" + 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);
}
}
}
});
패트롤 토큰
//이벤트가 완전히 로드될 때까지 기다립니다.
//패트롤 토큰에 대한 참조를 가져옵니다.
var patroltoken = findObjs({_type: "graphic", name: "Guard A"})[0]; //캠페인에 "Guard A"라는 이름의 토큰이 있다고 가정합니다.
var direction = -70; //왼쪽으로 70픽셀 이동합니다.
var stepstaken = 0; //현재 방향으로 몇 걸음을 걸었는지 기록합니다.
setInterval(function() {
if(stepstaken > 3) {
//방향을 변경합니다!
direction = direction * -1; //걷는 방향을 바꿉니다.
stepstaken = 0; //걸음 수를 0으로 초기화합니다.
}
patroltoken.set("left", patroltoken.get("left") + direction); //걷기!
stepstaken++;
}, 5000); //5초마다 동작을 수행합니다.
});