アクターを選ぶための選択肢(MV版)

フォーラムルール
素材の利用規約を決めたいけど、どんなことを書けばいいのか分からない場合は、
素材のテンプレートをご利用下さい。
アバター
KPoal
記事: 6
登録日時: 2017年10月14日(土) 13:10

アクターを選ぶための選択肢(MV版)

投稿記事by KPoal » 2017年11月24日(金) 13:04

コード: 全て選択

//=============================================================================
// ChoiceActors.js
// ver1.00 2017/11/01
//=============================================================================

/*:
 * @plugindesc アクター選択肢作成プラグイン
 * @author KPoal
 *
 *
 *
 * @param AChoiceVariableNumber
 * @type number
 * @desc 選択したアクターのアクターIDを受け取る変数番号です。
 * @default 30
 *
 * @param CancelChoiceMessage
 * @desc cancelchoiceで追加できる、キャンセル用選択肢の内容です。
 * @default キャンセル
 *
 *
 * @help
 * 条件を満たすアクターのみで選択肢を作り、
 * 選択されたアクターのアクターIDを変数に取得するプラグインです。
 * 選択肢がキャンセルされた場合は0を取得します。
 *
 * ・基本プラグインコマンド
 * ChoiceActors all   全てのアクターで選択肢を作ります。
 * ChoiceActors party パーティにいるアクターで選択肢を作ります。
 * ChoiceActors alive パーティにいて生存しているアクターで選択肢を作ります。
 * ChoiceActors dead  パーティにいて死亡しているアクターで選択肢を作ります。
 *
 * ・追加プラグインコマンド(基本コマンドの直前に実行して下さい)
 * ChoiceActors 文              :選択肢の前に文を表示します。
 *                               文の途中に半角スペースを入れる事で改行できます。
 * ChoiceActors nocancel        :選択肢でのキャンセルを禁止します。
 * ChoiceActors position left   :選択肢を左側に表示します。
 * ChoiceActors position center :選択肢を中央に表示します。
 * ChoiceActors back dark       :選択肢の背景を暗くします。
 * ChoiceActors back clear      :選択肢の背景を透明にします。
 * ChoiceActors cancelchoice    :選択肢の最後にキャンセル用選択肢を追加します。
 * ChoiceActors allclear        :追加プラグインコマンドによる全ての設定をリセットします。
 *
 * ・条件付きプラグインコマンド例(アクターを条件で絞り込む場合)
 * ChoiceActors all actor.isStateAffected(4) :ステート4番になっている全てのアクター
 * ChoiceActors party actor.mhp>5000&&actor.mmp>100 :最大HP5000以上、最大MP100以上のパーティメンバー
 * ChoiceActors alive !actor.isLearnedSkill(12) :スキル12番を覚えていない生存メンバー
 *
 *
 * 使用例
 * 「アクターを選択してください」という文章を表示した上で、
 * ステート10番になっていないパーティメンバーのみで選択肢を作り、
 * 選択肢のキャンセルを禁止する場合
 * -------------------------------------------------
 * ChoiceActors アクターを選択してください
 * ChoiceActors nocancel
 * ChoiceActors party !actor.isStateAffected(10)
 * -------------------------------------------------
 *
 * このプラグインはMITライセンスです。
 *
 */

(function() {
    var parameters = PluginManager.parameters('ChoiceActors');
    var ChoiceActorvariableId = Number(parameters.AChoiceVariableNumber);
    var CCMessage = String(parameters.CancelChoiceMessage);
    var choices =[];
    var choiceAtype = 0;
    var PrereqA='true';
    var ActorChoice = false;
    var coiceMessage= [];
    var ACcancelType= -2;
    var ACpositionType=2;
    var ACbackground= 0;
    var ChoiceCancel=false;

    var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command === 'ChoiceActors') {
    if (args[1]){
        PrereqA=String(args[1]);
    }else{
        PrereqA='true';
    }
    switch (args[0]) {
    case 'all':
        choiceAtype = 0;
        this.setupChoiceActors();
        this.setWaitMode('message');
        break;
    case 'party':
        choiceAtype = 1;
        this.setupChoiceActors();
        this.setWaitMode('message');
        break;
    case 'alive':
        choiceAtype = 2;
        this.setupChoiceActors();
        this.setWaitMode('message');
        break;
    case 'dead':
        choiceAtype = 3;
        this.setupChoiceActors();
        this.setWaitMode('message');
        break;
    case 'nocancel':
        ACcancelType= -1;
        break;
    case 'position':
        if(args[1]=="left"){
            ACpositionType=0;
        }else if(args[1]=="center"){
            ACpositionType=1;
        }else{
            ACpositionType=2;
        }
        break;
    case 'back':
        if(args[1]=="dark"){
            ACbackground=1;
        }else if(args[1]=="clear"){
            ACbackground=2;
        }else{
            ACbackground=0;
        }
        break;
    case 'cancelchoice':
        ChoiceCancel=true;
        break;
    case 'allclear':
        coiceMessage= [];
        ACcancelType= -2;
        ACpositionType=2;
        ACbackground= 0;
        ChoiceCancel=false;
        break;
    default:
        coiceMessage[1] = String(args[0]);
        for (var i = 1; i <= 4; i++) {
          if (args[i]){
            coiceMessage[i+1] = String(args[i]);
         }
        }
        break;
       
    }
 }
};

    Game_Interpreter.prototype.ChoiceAllActors = function() {   
        for (var i = 1; i <= $dataActors.length-1; i++) {
            var actor = $gameActors.actor(i)
            if(actor){
                if(eval(PrereqA)){
               choices.push(actor.name());
                }
           }
        }
    }

    Game_Interpreter.prototype.ChoicePartyMembers = function() {   
        for (var i = 0; i <= $gameParty.size(); i++) {
          var actor = $gameParty.members()[i]
          if(actor){
            if(eval(PrereqA)){
            choices.push(actor.name());
            }
         }
        }
    }

    Game_Interpreter.prototype.ChoicePartyDead = function() {   
        for (var i = 0; i <= $gameParty.deadMembers().length-1; i++) {
          var actor = $gameParty.deadMembers()[i]
          if(actor){
            if(eval(PrereqA)){
            choices.push(actor.name());
            }
         }
        }
    }
    Game_Interpreter.prototype.ChoicePartyAlive = function() {   
        for (var i = 0; i <= $gameParty.aliveMembers().length-1; i++) {
          var actor = $gameParty.aliveMembers()[i]
          if(actor){
            if(eval(PrereqA)){
            choices.push(actor.name());
            }
         }
        }
    }

    Game_Interpreter.prototype.setupChoiceActors = function() {
        for (var i = 1; i <= 4; i++) {
         if(coiceMessage[i]){
           $gameMessage.add(coiceMessage[i]);
         }
        }
        coiceMessage =[];
        choices =[];
        ActorChoice = true;
        switch (choiceAtype) {
    case 0:
        this.ChoiceAllActors();
        break;
    case 1:
        this.ChoicePartyMembers();
        break;
    case 2:
        this.ChoicePartyAlive();
        break;
    case 3:
        this.ChoicePartyDead();
        break;
        }
        if(ChoiceCancel){
            choices.push(CCMessage);
        }
        var cancelType = ACcancelType;
        //var defaultType = params.length > 2 ? params[2] : 0;
        var defaultType = 0;
        var positionType = ACpositionType;
        //var background = params.length > 4 ? params[4] : 0;
        var background = ACbackground;
        if (cancelType >= choices.length) {
            cancelType = -2;
        }
        ACcancelType = -2;
        ACpositionType= 2;
        ACbackground= 0;
        ChoiceCancel=false;       
        $gameMessage.setChoices(choices, defaultType, cancelType);
        $gameMessage.setChoiceBackground(background);
        $gameMessage.setChoicePositionType(positionType);
        $gameMessage.setChoiceCallback(function(n) {
            this._branch[this._indent] = n;
        }.bind(this));
    };

    var _Window_ChoiceList_prototype_callOkHandler = Window_ChoiceList.prototype.callOkHandler;
    Window_ChoiceList.prototype.callOkHandler = function() {
        if(ActorChoice){
            $gameVariables.setValue(ChoiceActorvariableId, 0);
            for (var i = 1; i <= $dataActors.length-1; i++) {
                var actor = $gameActors.actor(i);
                if(actor){
                   if (choices[this.index()]==actor.name()){
                    $gameVariables.setValue(ChoiceActorvariableId, actor.actorId());
                   }
               }
            }
        }
            ActorChoice = false;
            _Window_ChoiceList_prototype_callOkHandler.call(this);
       
    };
    var _Window_ChoiceList_prototype_callCancelHandler = Window_ChoiceList.prototype.callCancelHandler;
    Window_ChoiceList.prototype.callCancelHandler = function() {
        if(ActorChoice){
        $gameVariables.setValue(ChoiceActorvariableId, 0);
        }
        ActorChoice = false;
        _Window_ChoiceList_prototype_callCancelHandler.call(this);
    };
   

    })();
   


画像
画像
画像
画像

先にツクールwebフォーラムの方で投稿していました、
条件を満たすアクターだけで選択肢を作り、
選択されたアクターのアクターIDを変数に取得するというプラグインです。

イベントコマンドで自作のシステムを組む際、
アクターから一人選ばせて~などという動作をする事も多いでしょう。
そのとき、条件分岐の多さにうんざりしたという経験を持つ方は、
決して少なくないと思います。

そんなとき、こちらのプラグインを入れておけば、
僅か数行のプラグインコマンドだけで
自由に条件を選んで簡単に選択肢が作れるため、
長いイベントの簡略化に一役買ってくれる事と思います。

詳しい使い方は、ヘルプをご一読下さい。
添付ファイル
ChoiceActors.js
(9.2 KiB) ダウンロード数: 236 回

白詰草
記事: 3
登録日時: 2021年2月26日(金) 01:32

Re: アクターを選ぶための選択肢(MV版)

投稿記事by 白詰草 » 2021年2月26日(金) 01:35

導入してみました。
これはとんでもなく便利ですね!! :shock:
ありがたく使わせていただきます! :D

“MV:プラグイン素材” へ戻る