Modスクリプト:応用例

この『クックブック』には、初めての方でもすぐに始められるような簡単なスクリプトの例がいくつか掲載されています。ぜひこれらを自由に活用し、ご自身のキャンペーンに合わせてアレンジしてください。また、「Mod Scriptsフォーラム」もあり、そこでModスクリプトについて議論したり、自分のスクリプトをコミュニティと共有したりすることができます。

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

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

このスクリプトは、ゲージの値に基づいてステータスマーカーを自動的に追加します。このスクリプトは、3つのゲージのいずれかを追跡するように設定でき、0から1までの任意の比率に対して、ステータスマーカーを自由に設定することができます。このスクリプトは、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は
 となります。 * 攻撃を吸収した一時的なHPを反映するように更新しました。
 *
 * TEMP_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_GAGE_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);
      }
    }
  }
});

パトロートークン

on("ready", function() {
  //キャンペーンが完全に読み込まれたことを確認するため、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秒ごとにアクションを実行
});
この記事は役に立ちましたか?
45人中33人がこの記事が役に立ったと言っています