トークン・ステータス・マネージャー
(寄稿:エリック・ダルキスト)
このスクリプトは、バーの値に基づいてステータス・マーカーを自動的に追加する。 スクリプトは、3つのバーのいずれかを追跡し、0から1の間の任意の比率のステータスマーカーを設定するように構成することができる。 スクリプトは1つのインスタンスで複数のバー/トークンを管理できる。 以下の例では、バー1を監視し、 <= 50% のときに赤マーカーを設定し、 <= 0 のときにデッドマーカーを設定している。
*
*
* CONFIG配列は、任意の数の設定オブジェクトを持つことができます。
* これらのオブジェクトは順番に処理される。
*
* barId - [1、2、3] の値を見るバーの ID
* 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マネージャー
(寄稿:エリック・ダルキスト)
一時的なヒットポイントを自動的に管理する。 トークンバーの1つが臨時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: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);
}.
}
}
});
パトロール・トークン
//キャンペーンが完全にロードされたことを知るために、readyイベントが発生するまで待つ。
//パトロール中のトークンへの参照を取得する。
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秒ごとにアクションを取る
});