Modスクリプト(API):高度な例

クックボックスには、簡単なスクリプトの例がいくつか用意されており、始めるのに役立ちます。 ご自由にこれらを取り入れ、ご自身のキャンペーンで使用するために修正してください。 また、 Mod (API) スクリプトフォーラム では、Mod(API)スクリプティングについて議論したり、コミュニティとスクリプトを共有したりできます。


コマ状態管理ツール 

(エリック・ダルクイストによる寄稿)

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