コマ状態管理ツール
(エリック・ダルクイストによる寄稿)
このスクリプトはゲージの値に基づいてステータスマーカーを自動的に追加します。 スクリプトは、3本のゲージのいずれかを追跡するように設定でき、0から1までの任意の比率でステータスマーカーを設定できます。 このスクリプトは単一インスタンスで複数のバー/トークンを管理できます。 以下の例は、ゲージ1を監視し、値が <= 50% のときに赤いマーカーを設定し、値が <= 0 のときにデッドマーカーを設定します。
* バー電流/最大電流比率に基づいて様々なコマ・マーカーを設定します
*
* 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マネージャー
(エリック・ダルクイストによる寄稿)
一時的なヒットポイントを自動的に管理します。 コマのゲージの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 gauge " + GAUGE_GAUGE_ID + " does not contain a number: '" + prevHpValStr + "'");
return;
}
var hpValStr = obj.get("ゲージ" + HP_BAR_ID + "_value");
var hpVal = parseInt(hpValStr);
if (isNaN(hpVal)) {
log("WARN: ゲージ " + 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秒ごとにアクションを実行
});