MOD(API):高度な例

クックブックスでは、簡単なスクリプトの例をいくつか紹介しています。 ご自由にアレンジして、ご自身のキャンペーンにご活用ください。 またMOD(API)スクリプトフォーラム があり、MOD (API) スクリプトについて議論したり、あなたのスクリプトをコミュニティと共有することができます。


トークン・ステータス・マネージャー 

(寄稿:エリック・ダルキスト)

このスクリプトは、バーの値に基づいてステータス・マーカーを自動的に追加する。 スクリプトは、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秒ごとにアクションを取る
});
 
この記事は役に立ちましたか?
39人中27人がこの記事が役に立ったと言っています