【解決済み】敵の数に応じて自身に異なるステートを付与したい

返信する
womi
記事: 18
登録日時: 2024年5月31日(金) 21:05

【解決済み】敵の数に応じて自身に異なるステートを付与したい

投稿記事 by womi »

題名の通りです

敵一体の場合ステート1を付与
敵2体の場合ステート2を付与
敵三体以上の場合ステート3を付与

NUUNさんの条件ベースとNew Rpg projectさんのスキル連結を用いましたが、条件が無視されスキル連結されてしまったため、他の方法を探しています
よろしくお願いします!
最後に編集したユーザー womi [ 2024年6月01日(土) 17:16 ], 累計 1 回
すおう
記事: 38
登録日時: 2024年5月17日(金) 08:30

Re: 敵の数に応じて自身に異なるステートを付与したい

投稿記事 by すおう »

ステートがつくタイミングがいつなのか詳しく書いたほうがいいと思います
戦闘開始時? 魔法による効果? 敵の数が変わるたび? ターン終了後?
womi
記事: 18
登録日時: 2024年5月31日(金) 21:05

Re: 敵の数に応じて自身に異なるステートを付与したい

投稿記事 by womi »

すおう さんが書きました:ステートがつくタイミングがいつなのか詳しく書いたほうがいいと思います
戦闘開始時? 魔法による効果? 敵の数が変わるたび? ターン終了後?
ご指摘ありがとうございます
スキル発動時に敵の数を参照する形になります
よろしくお願いします
すおう
記事: 38
登録日時: 2024年5月17日(金) 08:30

Re: 敵の数に応じて自身に異なるステートを付与したい

投稿記事 by すおう »

ちょうど少し前に知ったばかりの「発動前コモン」プラグインが使えそうだなと思いました
https://plugin-mz.fungamemake.com/archives/1442

これを使って、敵の数別に『名前は同じだけど、効果が異なるスキル』を発動させれば
条件を満たせると思われます。なんだったら演出も変えられますしね

説明のため、便宜上以下の内容とします
敵が1人のときのスキル:ID:52
敵が2人のときのスキル:ID:53
敵が3人のときのスキル:ID:54
発動者インデックスID変数ID:21(発動前コモンで設定してください)
スキルID格納変数:25
敵の数格納変数:26

ID:54のスキルに発動前コモンのコモンIDを指定します。
コモンイベントには次の内容を実行させます
①敵の数を数える
②敵が1匹ならスキルID:52、2匹ならID:53が発動できるようにする。3匹以上ならコモンイベント中断
③コモンイベントが続いたなら『戦闘行動の強制』にて別のスキルを発動する
『戦闘行動の強制』でスキルを発動させると元のスキルは発動前にキャンセルされるので、これで3つのスキルを使い分けられます

以下、細かく説明します

①『敵の数格納変数』にスクリプトで生きている敵の数を代入します。

コード: 全て選択

$gameTroop.aliveMembers().length
②『敵の数格納変数』が3以上ならコモンイベントを中断します。これで通常のID:54スキルが発動します
敵の数が1匹以下なら52、そうでなければ53を『スキルID格納変数』に代入します

③『戦闘行動の強制』は変数で指定できないので、スクリプトで同様の処理を行います
参考:https://rpgmaker-script-wiki.xyz/battleaction_mz.php
まず発動者を特定します。『発動者インデックスID変数ID』の数値はPTの何番目の人がスキルを使ったか、
の数値が代入されているので、そこからアクターを特定し、アクターIDを求めます
const actor = $gameParty.battleMembers()[$gameVariables.value(21)];
const actorId = actor.actorId();

スキルは『スキルID格納変数』の値を使います
const skillId = $gameVariables.value(25);

自分に使用するスキルなので、対象者はなんでもいいです。ランダム対象の-1にでもしておきます
これらの変数を使って『戦闘行動の強制』を実行します。
this.iterateBattler(1, actorId, battler => {
if (!battler.isDeathStateAffected()) {
battler.forceAction(skillId, -1)
BattleManager.forceAction(battler)
this.setWaitMode('action')
}
})

まとめると下の通り

コード: 全て選択

const actor = $gameParty.battleMembers()[$gameVariables.value(21)];
const actorId = actor.actorId();
const skillId = $gameVariables.value(25);

this.iterateBattler(1, actorId, battler => {
  if (!battler.isDeathStateAffected()) {
    battler.forceAction(skillId, -1)
    BattleManager.forceAction(battler)
    this.setWaitMode('action')
  }
})
上記の『21』、『25』の部分はご自身が設定した変数に書き換えてください
これで敵の数別に異なるスキルが発動するようになりました
添付ファイル
test.png
ecf5DTTzl6h6lJj02
記事: 752
登録日時: 2018年12月23日(日) 13:55

Re: 敵の数に応じて自身に異なるステートを付与したい

投稿記事 by ecf5DTTzl6h6lJj02 »

こんにちは。

すおう さんが 発動前コモンイベント プラグインを使って、実行する方法を紹介されておりますが、
スキル変化条件設定プラグイン でも、出来そうなので、紹介しておきます。

鳥小屋様作 スキル変化条件設定プラグイン(TorigoyaMZ_SkillChangeTo.js)
https://torigoya-plugin.rutan.dev/battle/skillChangeTo/ (解説ページに飛びます)
※MV用とMZ用と別々になっているので、間違ってMV用をダウンロードしないように注意してください。

使い方は、解説ページの内容をよくお読みください。
補足として、
解説ページには条件式中に > を使うとエラーになるので、 > を使うようにという注意のみですが、
< も場合によってはおかしくなる可能性があるので、 代わりに < を使うようにしてください。

生存している敵の数は、すおうさんの返信の中にも書いてありますが、

コード: 全て選択

$gameTroop.aliveMembers().length
で取得できます。

ご確認ください。
womi
記事: 18
登録日時: 2024年5月31日(金) 21:05

Re: 敵の数に応じて自身に異なるステートを付与したい

投稿記事 by womi »

ありがとうございます!
仮にこれが「魅了」のステータスのついた敵の数になった場合、最初のスクリプトは
どのようになりますかね?
womi
記事: 18
登録日時: 2024年5月31日(金) 21:05

Re: 敵の数に応じて自身に異なるステートを付与したい

投稿記事 by womi »

やり方は今後のことを考えてすおうさんのやり方で行こうと思います!
すおう
記事: 38
登録日時: 2024年5月17日(金) 08:30

Re: 敵の数に応じて自身に異なるステートを付与したい

投稿記事 by すおう »

長くなりますが、特定ステートの敵の数を求めるスクリプト

コード: 全て選択

$gameTroop.members().filter(member => member.isStateAffected(ステートID)).length
味方の場合

コード: 全て選択

$gameParty.members().filter(member => member.isStateAffected(ステートID)).length
womi
記事: 18
登録日時: 2024年5月31日(金) 21:05

Re: 敵の数に応じて自身に異なるステートを付与したい

投稿記事 by womi »

ありがとうございます!
返信する

“MZ:質問”に戻る