こんにちは。
シナマイ さんが書きました: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)と競合する可能性があります。ご了承ください。