ページ 11

【解決済み】反撃率をステータスによって変動させたい

Posted: 2018年7月09日(月) 20:34
by btk
閲覧ありがとうございます。
当方ツクール触り始めて1か月程度の初心者のため、簡単な疑問であったらすみません。。

掲題の通り、反撃率を攻撃側、防御側のステータスによって変動させたい
(もしくは、攻撃側、防御側のステータスによって反撃率が変動するスキルを作りたい)、
と思い、トリアコンタン様、Yanfly様等反撃系プラグインを色々といじってみているのですが、
反撃条件等の指定については上記のプラグインで多様なものが実装できそうなのですが、
反撃率そのものを変動させたい、という当初の目的がうまく達成できずにおります。

イメージとしては、例えば
攻撃側:a.atk 50
防御側:b.atk 100
のとき、100-50=50% を防御側の反撃率にしたい、というものを想定しています。

どなたか上記を実現できるような良いお知恵をお貸しいただけたら幸いです。

Re: 反撃率をステータスによって変動させたい

Posted: 2018年7月09日(月) 23:03
by まっつUP
btk様

rpg_objects.js中のGame_Action.prototype.itemCntを
直接改変するのが単純でよいと思います。
Game_Actionなので行動主体と対象者の特定も簡単ですので
計算式を直接書き込むことになると思います。

Re: 反撃率をステータスによって変動させたい

Posted: 2018年7月10日(火) 23:51
by btk
まっつUP 様

アドバイスいただきありがとうございます。
Game_Action.prototype.itemCntの部分を切り出して色々と試してみているのですが、
何分直接スクリプトをいじった経験がなく、四苦八苦しております。

現状下記の通り切り出し・加筆してプラグイン化してみたのですが、
Game_Action.prototype.itemCnt = function(subject, target) {
if (this.isPhysical() && target.canMove()) {
return target.luk - subject.luk;
} else {
return 0;
}
};

テストプレイ中に攻撃ダメージが表示される手前で停止し、以下のエラーが出てしまいました。
rpg_managers.js:1756 TypeError: Cannot read property 'canMove' of undefined
at Game_Action.itemCnt (jisaku_CounterRateChange.js:2)
at Function.BattleManager.invokeAction (YEP_BattleEngineCore.js:2106)
at Function.<anonymous> (YEP_BattleEngineCore.js:2721)
at Array.forEach (<anonymous>)
at Function.BattleManager.actionActionEffect (YEP_BattleEngineCore.js:2718)
at Function.BattleManager.processActionSequence (YEP_BattleEngineCore.js:2314)
at Function.BattleManager.processActionSequence (YEP_X_ActSeqPack1.js:882)
at Function.BattleManager.processActionSequence (YEP_X_ActSeqPack2.js:602)
at Function.BattleManager.processActionSequence (YEP_X_ActSeqPack3.js:473)
at Function.BattleManager.processActionSequence (YEP_X_BattleSysCTB.js:1314)
SceneManager.catchException @ rpg_managers.js:1756

特に変更していないcanMoveがなぜundefinedとなってしまうのか、、当方では見当がつかず。。
重ねての質問で恐縮なのですが、ご助言いただけないでしょうか?

Re: 反撃率をステータスによって変動させたい

Posted: 2018年7月11日(水) 09:31
by 剣崎 宗二
btk様

横から失礼します。
この件、canMoveがundefinedになっているのではなく、targetがundefinedになっております。
理由としましては、btk様の方でfunctionのパラメーター群の並びを変更しているからです。
(元は
Game_Action.prototype.itemCnt = function(target) 
となっていた筈です。)

詳しい解説をしようとすると長くなるので知りたい場合は検索していただく形になりますが、この変更がある場合、元々targetに入っていた物が今回subjectに入る事になり、targetには何も入っていない…という事態を招きます。
subjectを取得したいのならば別の方法で行うべきかと。
(一例としてはGame_Action.prototype.itemHitで行われている方法をご参照ください。)

Re: 反撃率をステータスによって変動させたい

Posted: 2018年7月11日(水) 10:19
by しぐれん
subjectの取得、Game_Actionであれば、this.subject()が使えるので、これを使えばいいと思います。

Re: 反撃率をステータスによって変動させたい

Posted: 2018年7月11日(水) 18:31
by ぼた餅
こんにちは、btkさん。

横からすみません。
トリアコンタンさん制作の「CounterExtend」を使えば実現可能です。

コード: 全て選択

<CE_反撃条件:this.atk - target.atk &gt; Math.randomInt(100) + 1>

これを全キャラのメモ欄に貼っておけば、「防御側-攻撃側」の攻撃力%の確率で反撃が発動します。
その場合反撃率を100%に設定しておかないとうまく動かないのでご注意ください。

実際に動かしてないのでなにかあればご指摘ください。

Re: 反撃率をステータスによって変動させたい

Posted: 2018年7月12日(木) 01:07
by btk
剣崎 宗二 様
しぐれん 様

お二方ともご助言いただきありがとうございます。
以下の通り修正してみたところ、エラーも出ず処理が進みました!
Game_Action.prototype.itemCnt = function(target) {
if(this.isPhysical() && target.canMove() ) {
return target.atk - this.subject().atk ;
} else {
return 0;
}
};

何度かテストしてみたところ実際の発動率もステータスに依存した挙動になったかな?と思います。
しかしながら、攻撃側の攻撃力が防御側より高い場合、防御側でなく攻撃側がカウンターで追撃するようになってしまいました。。
やはり上記の記述でもいまいちなのでしょうか…?


ぼた餅 様

ありがとうございます、トリアコンタン様のプラグインで実現可能だったのですね!
まだまだ自分には使いこなせていなかったようです。。

とはいえ、自分の勉強のためにも、直接jsを記述して達成できるまで引き続き試行してみようと思います。

Re: 反撃率をステータスによって変動させたい

Posted: 2018年7月12日(木) 22:44
by 剣崎 宗二
btk様

当方の方で新規プロジェクトで同じコードを試してみましたが、問題が再現できませんでした(正常に動きました)
その為:

1.他のプラグインを全て一旦切ってみて、問題が続くかお試しいただけますでしょうか。
2.ツクールMV本体のバージョンを教えていただけますでしょうか。

Re: 反撃率をステータスによって変動させたい

Posted: 2018年7月13日(金) 23:17
by btk
剣崎 宗二 様

ご返信及びご助力感謝いたします。ありがとうございます。

プラグインをOFFにして影響を特定していくなかで、
Yanfly様のCounterControlでデフォルトカウンターが変更できることに思い至り、
デフォルトカウンターを通常攻撃以外のものに変更してみたところ、
攻撃側が追撃してきているのではなくて、
防御側として反撃の通常攻撃を行った後、攻撃側として通常攻撃を放っていたので、
攻撃が2回連続し、追撃しているように見えていたことが判明いたしました。
私がまだまだ不慣れな点が多く、お騒がせいたしました。

カウンターさせたくないキャラについては、
メモ欄でデフォルトカウンター回数を0にすることで望んでいた挙動が達成できました。

皆様のアドバイスのおかげです、ありがとうございました!