アクターがMP0になると戦闘不能にしたい

#ツクルーム フォーラム RPGツクールMZ (RPG Maker MZ) アクターがMP0になると戦闘不能にしたい

  • このトピックには4件の返信、4人の参加者があり、最後にPema23により1ヶ月、 2週前に更新されました。
6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • 投稿者
    投稿
  • #691 返信
    munokura
    参加者

    RPGツクールMZにて、アクターがMP0になると戦闘不能になり、パーティ全員が戦闘不能になるとゲームオーバーになる仕様にしたいです。

    使用プラグイン:なし

    プラグインを作成いただくか、既存のプラグインを教えてください。

    #692 返信
    ツクールAI君
    メンバー

    ## RPGツクールMZでアクターがMP0になると戦闘不能に

    – **実現したいこと**
    – アクターのMPが0になると戦闘不能状態にする。
    – パーティ全員が戦闘不能になるとゲームオーバー。
    – **試したこと**
    – イベントコマンドでの状態変化の操作を検討。
    – プラグイン無しでの実現方法を模索。
    – **試用プラグイン**
    – なし
    – **問題点**
    – イベントコマンドでは戦闘中のリアルタイムなMP監視が難しい。
    – JavaScriptの知識が必要な模様。

    投稿者様、こちらの要約は意図通りでしょうか?不明点が補足・追記いただけると回答が得やすくなると思われます。

    ### 回答

    プラグインなしで実現するには、戦闘中のターン終了時に共通イベントを起動し、各アクターのMPをチェックする方法が考えられます。

    1. **共通イベントの作成:**
    – トリガーを「ターン終了時」に設定。
    2. **イベントコマンドの設定:**
    – 条件分岐:アクター1のMPが0以下
    – アクター1を戦闘不能にする
    – 条件分岐:アクター2のMPが0以下
    – アクター2を戦闘不能にする
    – (以下、パーティメンバー全員分繰り返す)
    – 条件分岐:全パーティメンバーが戦闘不能
    – ゲームオーバー

    **具体的なイベントコマンド例 (アクター1の場合):**

    “`
    ◆条件分岐:#0001 アクター1 の MP が 0 以下
    ◆戦闘行動:戦闘不能にする:#0001 アクター1

    :分岐終了
    “`

    この方法では、MPが0になった瞬間に戦闘不能になるのではなく、ターン終了時に戦闘不能になります。

    よりリアルタイムな処理や複雑な条件を追加したい場合は、プラグインの開発が必要になります。以下は、この機能を実現するプラグインのコード例です。

    “`javascript
    /*:
    * @plugindesc MPが0になると戦闘不能になるプラグイン
    * @author あなたの名前
    *
    * @help MPが0になるとアクターは戦闘不能になります。
    */

    Game_BattlerBase.prototype.refresh = function() {
    this._hp = this._hp.clamp(0, this.mhp);
    this._mp = this._mp.clamp(0, this.mmp);
    this._tp = this._tp.clamp(0, this.maxTp());
    if (this.isAlive() && this._mp === 0) {
    this.die();
    }
    };

    BattleManager.checkBattleEnd = function() {
    if (this._phase) {
    if ($gameParty.isAllDead()) {
    this.processDefeat();
    return true;
    }
    // else if ($gameTroop.isAllDead()) { // 敵全滅の判定はそのまま
    // this.processVictory();
    // return true;
    // }
    }
    return false;
    };
    “`

    このプラグインを導入することで、MPが0になった瞬間にアクターは戦闘不能になります。

    ※閲覧者の皆様、私の回答に問題がありましたら、ご指摘いただけると助かります。
    また、解決できた場合、トピックを編集し「トピックを解決済みにする」にチェックを入れてください。

    #693 返信
    munokura
    参加者

    プラグインを試したところ、アクターだけでなく、敵キャラもMPが0になったら戦闘不能になるようですね。
    また、マップ画面でもMP0で戦闘不能になるようです。
    また、イベント戦闘で「負けたとき」の処理がなくゲームオーバーになるようです。

    このままでも良ければ、不要なコードを整理して下記のようにしたほうが良いと思います。

    /*:
    * @target MZ
    * @plugindesc MPが0になると戦闘不能になるプラグイン
    * @author munokura
    *
    * @help
    * # 機能
    * MPが0になるとアクター・敵キャラは戦闘不能になります。
    */
    
    (() => {
    
        const _Game_BattlerBase_refresh = Game_BattlerBase.prototype.refresh;
        Game_BattlerBase.prototype.refresh = function () {
            _Game_BattlerBase_refresh.call(this);
            if (this.isAlive() && this._mp === 0) {
                this.die();
            }
        };
    
    })();

    また、このままだと戦闘不能を解除するスキル・アイテムを作成してもHPしか回復しないため、再び戦闘不能になると予想できます。
    ここの仕様も検討する必要がありますね。

    • この返信は7ヶ月前にmunokuraが編集しました。
    #770 返信
    Evelyn
    参加者

    試してみましたが、MP0でアクターだけ戦闘不能にするにはプラグインが便利です。ターン終了時に共通イベントで判定する方法でも可能ですが、リアルタイムにはならないので注意してください。

    • この返信は1ヶ月、 4週前にEvelynが編集しました。
    #780 返信
    Turner
    参加者

    RPGツクールMZでMPが0になったときに戦闘不能にしたい場合、プラグインなしでは共通イベントをターン終了時に設定し、各アクターのMPをチェックして0以下なら戦闘不能にし、全員戦闘不能ならゲームオーバーにします。リアルタイムで判定したい場合はプラグインを使用し、<code data-start=”131″ data-end=”167″>Game_BattlerBase.prototype.refreshを上書きしてMP0なら即座に戦闘不能にするコードを導入します。敵キャラを除外したい場合は条件を追加してください。

    #781 返信
    Pema23
    参加者

    結論としては、リアルタイム判定が必要ならプラグインが最適です。Game_BattlerBase.refresh内でアクターかどうかを判定し、かつ戦闘中のみMP0判定を行えば、敵やマップ上への影響、イベント戦闘の不具合も防げます。共通イベント方式は簡単ですが即時性はありません。

    • この返信は1ヶ月、 2週前にPema23が編集しました。
    • この返信は1ヶ月、 2週前にPema23が編集しました。
6件の投稿を表示中 - 1 - 6件目 (全6件中)
返信先: アクターがMP0になると戦闘不能にしたい
あなたの情報:




ゲスト