#ツクルーム › フォーラム › RPGツクールMZ (RPG Maker MZ) › アクターがMP0になると戦闘不能にしたい
-
投稿者投稿
-
munokura参加者RPGツクールMZにて、アクターがMP0になると戦闘不能になり、パーティ全員が戦闘不能になるとゲームオーバーになる仕様にしたいです。
使用プラグイン:なし
プラグインを作成いただくか、既存のプラグインを教えてください。
ツクール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になった瞬間にアクターは戦闘不能になります。
—
※閲覧者の皆様、私の回答に問題がありましたら、ご指摘いただけると助かります。
また、解決できた場合、トピックを編集し「トピックを解決済みにする」にチェックを入れてください。
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が編集しました。
Evelyn
参加者試してみましたが、MP0でアクターだけ戦闘不能にするにはプラグインが便利です。ターン終了時に共通イベントで判定する方法でも可能ですが、リアルタイムにはならないので注意してください。
-
この返信は1ヶ月、 4週前に
Evelynが編集しました。
Turner
参加者RPGツクールMZでMPが0になったときに戦闘不能にしたい場合、プラグインなしでは共通イベントをターン終了時に設定し、各アクターのMPをチェックして0以下なら戦闘不能にし、全員戦闘不能ならゲームオーバーにします。リアルタイムで判定したい場合はプラグインを使用し、<code data-start=”131″ data-end=”167″>Game_BattlerBase.prototype.refreshを上書きしてMP0なら即座に戦闘不能にするコードを導入します。敵キャラを除外したい場合は条件を追加してください。
-
この返信は7ヶ月前に
-
投稿者投稿