「敵ランダム12体に攻撃」プラグインがうまく使えない

シナマイ
記事: 8
登録日時: 2023年11月30日(木) 13:29

「敵ランダム12体に攻撃」プラグインがうまく使えない

投稿記事by シナマイ » 2023年11月30日(木) 13:54

4体の敵に、ランダムで12回攻撃させるスキルを作りたいと思います。
(1体の敵に12回攻撃ではなく、1体目~4体目の中からランダムで12回攻撃)

「効果範囲拡張プラグイン(ScopeExtend.js)」を使い
スキルのメモ欄に「<SERandomNum:12>」と書くと、ランダム12回攻撃になるのですが

下記のダメージ計算式で、攻撃倍率を0.6倍にすると12回攻撃になるものの
Math.max(a.atk * 0.6 - b.def, 2 * Math.random() )

攻撃倍率を0.8倍にすると9回攻撃など少ない回数しか攻撃しなくなります。
Math.max(a.atk * 0.8 - b.def, 2 * Math.random() )

なお、他のランダム攻撃回数を変更する「RandomTargets」というプラグインで試しても
同じ現象が起きています。

どうすれば指定通りの回数をランダムに攻撃するようになるでしょうか。
よろしくお願いいたします。

ecf5DTTzl6h6lJj02
記事: 459
登録日時: 2018年12月23日(日) 13:55

Re: 「敵ランダム12体に攻撃」プラグインがうまく使えない

投稿記事by ecf5DTTzl6h6lJj02 » 2023年12月11日(月) 17:18

こんにちは。
シナマイ さんが書きました:4体の敵に、ランダムで12回攻撃させるスキルを作りたいと思います。
(1体の敵に12回攻撃ではなく、1体目~4体目の中からランダムで12回攻撃)

「効果範囲拡張プラグイン(ScopeExtend.js)」を使い
スキルのメモ欄に「<SERandomNum:12>」と書くと、ランダム12回攻撃になるのですが

下記のダメージ計算式で、攻撃倍率を0.6倍にすると12回攻撃になるものの
Math.max(a.atk * 0.6 - b.def, 2 * Math.random() )

攻撃倍率を0.8倍にすると9回攻撃など少ない回数しか攻撃しなくなります。
Math.max(a.atk * 0.8 - b.def, 2 * Math.random() )

なお、他のランダム攻撃回数を変更する「RandomTargets」というプラグインで試しても
同じ現象が起きています。

どうすれば指定通りの回数をランダムに攻撃するようになるでしょうか。
よろしくお願いいたします。

下記トピック
viewtopic.php?f=49&p=52393#p52393
で、プラグイン作成依頼も出ていますが、
この問題は、プラグインや、ダメージ計算式に原因があるというわけではなく、
通常の敵N体ランダムのスキルでも起こる、MVの仕様的な問題のため、
こちらで回答させていただきます。

どういうことなのかというと、
ツクールMVでは、
範囲が 敵N体ランダム に設定されているスキルの場合、
スキルの発動時に、すべてのターゲットが決定されます。
そして、途中でそのターゲットが死亡していても、
生存しているメンバーにターゲットを切り替えることがありません。
ターゲットが死亡していた場合は、スキップされてしまいます。
このため、N に指定されている回数よりも少ない回数しか攻撃していないという状況が生まれるわけです。

この問題を解決する場合、敵N体ランダム のスキルで、ターゲットが死亡していた場合に、生存メンバーにターゲットを切り替えるようなプラグインを作成して導入する必要があります。

ターゲーットを切り替えるためのコードを試作してみました。
以下のコードをプラグインとして保存して、導入してみてください。
(F8 もしくは F12 で表示されるウィンドウに、ログとして、プラグインの動作が表示されるようにしているので、
そちらを確認しながらテストしていただくと、何が起こっているかわかるかなぁ…と)

コード: 全て選択

(()=>{
    'use strict'

    const _BattleManager_startAction = BattleManager.startAction;
    BattleManager.startAction = function() {
        _BattleManager_startAction.apply(this, arguments);
        if (this._action.isForRandom() && this._action.isForOpponent()) {
            console.log('敵N体ランダム を対象とするスキルが発動しました。')
        }
    };

    BattleManager.updateAction = function() {
        let target = this._targets.shift();
        if (target) {
            if (this._action.isForRandom() && this._action.isForOpponent()) {
                if (target.isDead()) {
                    console.log(`攻撃対象【${target.name()}】は死亡しています。`)
                    if (!this._subject.opponentsUnit().isAllDead()) {
                        const targetUnit = this._subject.opponentsUnit().aliveMembers();
                        target = targetUnit[Math.randomInt(targetUnit.length)];
                        console.log(`攻撃対象を【${target.name()}】に変更。`);
                    } else {
                        console.log('敵グループに生存メンバーが存在しないため、攻撃対象を変更しません。')
                    }
                } else {
                    console.log(`攻撃対象【${target.name()}】は生存しています。`)
                }
            }
            this.invokeAction(this._subject, target);
        } else {
            this.endAction();
        }
    };
   
})();

狙われ率は考慮していません。
また、このコードはきちんと精査しているわけではないので、きちんと動作しなかったり、
ご使用のプラグイン(効果範囲拡張プラグイン や RandomTargets)と競合する可能性があります。ご了承ください。
シナマイ
記事: 8
登録日時: 2023年11月30日(木) 13:29

Re: 「敵ランダム12体に攻撃」プラグインがうまく使えない

投稿記事by シナマイ » 2023年12月14日(木) 21:14

プラグイン、どうもありがとうございます。
とても助かります。

RPGツクールMVのランダム攻撃の処理の仕方も、ありがとうございます。

書いていただいたプラグインですが
タイトルはどうつければいいですか?

プラグインは、タイトルは何でも同じでしょうか。
ecf5DTTzl6h6lJj02
記事: 459
登録日時: 2018年12月23日(日) 13:55

Re: 「敵ランダム12体に攻撃」プラグインがうまく使えない

投稿記事by ecf5DTTzl6h6lJj02 » 2023年12月14日(木) 21:26

こんばんは。
シナマイ さんが書きました:プラグイン、どうもありがとうございます。
とても助かります。

RPGツクールMVのランダム攻撃の処理の仕方も、ありがとうございます。

書いていただいたプラグインですが
タイトルはどうつければいいですか?

プラグインは、タイトルは何でも同じでしょうか。

プラグインパラメータがなく、プラグイン(ファイル)名を使用する部分がないので、
ファイル名は適当に付けてください。
(思いつかないようでしたら ResetTaget とかでどうぞ)
シナマイ
記事: 8
登録日時: 2023年11月30日(木) 13:29

Re: 「敵ランダム12体に攻撃」プラグインがうまく使えない

投稿記事by シナマイ » 2023年12月25日(月) 12:04

ご返信、ありがとうございます。
助かります。

頂いたコードをメモ帳にコピーし
「ResetTagetHosei」とファイル名を付け
プラグイン管理からonにして、バトルのテストを試してみましたが
12回攻撃のところ、10回攻撃で終わってしまいました。

「効果範囲拡張プラグイン 」や「 RandomTargets」の競合の可能性があるかもしれないのですが
どちらもoffにしてしまうと、スキルのメモ欄に、増やしたい回数を貼って増やすという
ランダム攻撃回数を増やすことが自体できないと思うのですが

確認なのですが、頂いたコードは単体でランダム攻撃回数を増やせるものではなく
「効果範囲拡張プラグイン 」や「 RandomTargets」の回数を補正するものと考えているのですが
その理解でよろしいでしょうか。
ecf5DTTzl6h6lJj02
記事: 459
登録日時: 2018年12月23日(日) 13:55

Re: 「敵ランダム12体に攻撃」プラグインがうまく使えない

投稿記事by ecf5DTTzl6h6lJj02 » 2023年12月25日(月) 13:11

こんにちは。
シナマイ さんが書きました:ご返信、ありがとうございます。
助かります。

頂いたコードをメモ帳にコピーし
「ResetTagetHosei」とファイル名を付け
プラグイン管理からonにして、バトルのテストを試してみましたが
12回攻撃のところ、10回攻撃で終わってしまいました。

「効果範囲拡張プラグイン 」や「 RandomTargets」の競合の可能性があるかもしれないのですが
どちらもoffにしてしまうと、スキルのメモ欄に、増やしたい回数を貼って増やすという
ランダム攻撃回数を増やすことが自体できないと思うのですが

確認なのですが、頂いたコードは単体でランダム攻撃回数を増やせるものではなく
「効果範囲拡張プラグイン 」や「 RandomTargets」の回数を補正するものと考えているのですが
その理解でよろしいでしょうか。

提示したコードは、

敵N体ランダムのスキルが使用されたとき、
ターゲットがすでに死亡している場合は、生存しているメンバーにターゲットを切り替える
(敵が全滅しているときは、ターゲットを切り替えられないので止まる)

という内容で制作したものです。
「効果範囲拡張プラグイン」や「RandomTargets」の回数を補正するもの、
という言い方をすると、ちょっと違うかなと。

また、こちらで、
トリアコンタン様作の
効果範囲拡張プラグイン(ScopeExtend.js ver 1.6.1)
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/ScopeExtend.js
を使用して確認する限りでは、きちんと動作しているように見えます。

F8 もしくは F12 で表示されるウィンドウ(Developer Tools)を開いて、
Console という画面を表示した時に、
デバッグ用のテキストが表示されるようになっているので、
どういう状況になっているかを確認するために、
ここに表示される内容(全体)を貼り付けて頂けないでしょうか。
(貼り付けるときは、上にある code というボタンを押して表示される、 [code][\code] の間に、貼ってください)
シナマイ
記事: 8
登録日時: 2023年11月30日(木) 13:29

Re: 「敵ランダム12体に攻撃」プラグインがうまく使えない

投稿記事by シナマイ » 2024年1月16日(火) 11:49

ご返信、どうもありがとうございます。

問題となるバトル中の当該スキルを実行時に
「Developer Tools」からを「Console」を開いてみたのですが
添付画像のような画面になりました。

もっといろいろ書かれてるものだと思っていましたので
これは本来[code][/code]で挟んで返信すべきものが、
うまく表示されていないのではないかという気がして
これで正常なのか判断できないところです。
添付ファイル
作品_コンソール.png
ecf5DTTzl6h6lJj02
記事: 459
登録日時: 2018年12月23日(日) 13:55

Re: 「敵ランダム12体に攻撃」プラグインがうまく使えない

投稿記事by ecf5DTTzl6h6lJj02 » 2024年1月16日(火) 16:09

こんにちは。
シナマイ さんが書きました:ご返信、どうもありがとうございます。

問題となるバトル中の当該スキルを実行時に
「Developer Tools」からを「Console」を開いてみたのですが
添付画像のような画面になりました。

もっといろいろ書かれてるものだと思っていましたので
これは本来

コード: 全て選択

で挟んで返信すべきものが、
うまく表示されていないのではないかという気がして
これで正常なのか判断できないところです。

敵 N 体ランダム のスキルが発動した場合、
001.jpg

という表示(赤枠で囲われている部分)がされるはずなので、
何も表示されていないということは、プラグインが、
うまく読み込まれていないものと、思われます。

プラグインファイルを開いて、

コード: 全て選択

'use strict'

と書いてある行の下に下記のコードを追加してください。

コード: 全て選択

    const pluginName = decodeURI(document.currentScript.src).replace(/.*\/(.*)\.js$/, '$1');
    if ($plugins.some(plugin => plugin.name === pluginName && plugin.status)) {
        console.log(`プラグイン ${pluginName} は正常に読み込まれています。`);
    }

このコードを追加すると、プラグインが正常に読み込まれている場合には、
コンソール(console)画面に、
プラグイン ResetTargetHosei は正常に読み込まれています。
という表示がでるはず(ResetTargetHosei の部分は、つけたファイル名で変わります)なので、
きちんと表示されることを確認してください。
シナマイ
記事: 8
登録日時: 2023年11月30日(木) 13:29

Re: 「敵ランダム12体に攻撃」プラグインがうまく使えない

投稿記事by シナマイ » 2024年3月12日(火) 13:35

コード: 全て選択

進展が無いままだったのですが
遅くなってしまい申し訳ありません。

無事解決いたしました。

頂いたプラグインに前回頂いたコードを追加し
テストを重ねてみた段階では
やはり指定回数未満の攻撃で終わり
コンソールの内容も前回と同じだったのですが

改めて確認したところ、いただいたプラグインを
プラグイン管理から入れるのを忘れていました。
初歩的なミスに気付かず、失礼いたしました。

プラグイン管理からプラグインを入れ、onにしてテストしたところ
無事、全てのテストで指定回数分の攻撃をする事ができました。

この問題で制作が全て止まったままだったので
非常に助かりました。

ご助力、ご協力頂き、お手数とお時間をおかけし
本当に、どうもありがとうございました。

添付ファイル
コンソール_戦闘時02.png

“MV:質問” へ戻る