【解決済】TMPassiveSkill.jsの改変

アバター
GGG
記事: 17
登録日時: 2017年2月03日(金) 12:59

【解決済】TMPassiveSkill.jsの改変

投稿記事by GGG » 2017年3月02日(木) 06:01

こんにちは。GGGと申します。
今回はtomoakyさん(http://hikimoki.sakura.ne.jp/)の
パッシヴスキルプラグイン、TMPassiveSkill.jsの改変について質問させていただきたく投稿します。

こちらのプラグインではパッシヴスキル発動条件として、アクターのTPを使用することができるのですが、
ここに更に残りHPの割合も発動条件に指定できるように改変したいと考えています。

コード: 全て選択

  Game_Actor.prototype.passiveWeapon = function(item) {
    if (item.meta.passive &&
        this.isPassiveSkillHpOk(item) &&   //追加
        this.isPassiveSkillTpOk(item) &&
        this.isPassiveSkillStateOk(item) &&
        this.isPassiveSkillTurnOk(item) &&
        (!DataManager.isSkill(item) || this.isSkillWtypeOk(item))) {
      return $dataWeapons[+item.meta.passive];
    }
    return null;
  };

コード: 全て選択

  Game_Actor.prototype.isPassiveSkillHpOk = function(item) { //追加
    if (item.meta.passiveHp) {
      var n = +item.meta.passiveHp;
      var hp = this.hp / this.mhp * 100;
      if ((n > 0 && n >= hp) || (n < 0 && -n <= hp)) return false;
    }
    return true;
  };


以上がこちらで行った改変なのですが、mhpが取得できず?うまく動作してくれません。
正しく動作させるためにはどのような記述が必要になるのでしょうか?
お教えいただければ幸いです。
最後に編集したユーザー GGG on 2017年3月03日(金) 04:26 [ 編集 1 回目 ]

アバター
まっつUP
記事: 1125
登録日時: 2016年8月11日(木) 15:38
お住まい: タケノコ王国

Re: TMPassiveSkill.jsの改変

投稿記事by まっつUP » 2017年3月02日(木) 18:05

GGG様
お世話になります。

この行が明らかに不自然では?
var n = +item.meta.passiveHp;
RPGで笑顔を・・・

ツイッター(ツクラーの巣窟)(閲覧は自己責任でお願いします)
https://twitter.com/mattuup

github
https://github.com/mattuup/RPGMakerMZ
アバター
GGG
記事: 17
登録日時: 2017年2月03日(金) 12:59

Re: TMPassiveSkill.jsの改変

投稿記事by GGG » 2017年3月02日(木) 18:50

まっつUP様
返信ありがとうございます。

var n = +item.meta.passiveHp; の行ですが、元々のプラグインにある 現TPを発動条件にする部分が
以下のような記述であったためHPの場合も上記の記述で問題ないかと判断しておりました

コード: 全て選択

 * メモ欄タグ(スキル):
 *   <passiveTp:75>   # 残りTPが 75 以上のときだけパッシヴ効果が適用される
 *   <passiveTp:-25>  # 残りTPが 25 未満のときだけパッシヴ効果が適用される

  Game_Actor.prototype.isPassiveSkillTpOk = function(item) {
    if (item.meta.passiveTp) {
      var n = +item.meta.passiveTp;
      var tp = this.tp;
      if ((n > 0 && n > tp) || (n < 0 && -n <= tp)) return false;
    }
    return true;
  };


お恥ずかしながら、var n = +item.meta.passiveHp; の不自然さがわかりません
一応、nを宣言直後にconsole.log("var n : " + n);で出力してみたところ、期待通りの値を出力することは出来ました
どのように記述すれば問題ないでしょうか?

また、mhpが取得できない事についてはどのように対処すればよろしいでしょうか?
console.log("this.hp : " + this.hp);は問題ないのですが、console.log("this.mhp : " + this.mhp);を記入すると
maximum call stack size exceeded とエラーが出ます。

問題解決のため、必要な情報が欠けていたらすみません。よろしければお教えいただければと思います。
アバター
フトコロ
記事: 1029
登録日時: 2017年2月06日(月) 21:32

Re: TMPassiveSkill.jsの改変

投稿記事by フトコロ » 2017年3月02日(木) 19:36

GGGさん

横から失礼します。

this.mhpでエラーになる理由は、passiveWeapon関数の処理が、paramPlusという関数内で行われているためです。

this.mhpは、実はparam(0)という関数を呼んでいるだけで、param関数でparamPlusを参照しています。

そのため、this.mhpをpassiveWeapon関数内で呼ぶとループしてしまいますので、エラーになります。

とりあえず、ちょっと思いついた対処法ですが、以下のコードを追加してみるといけるかもしれません。

コード: 全て選択

var _Game_Actor_initMembers = Game_Actor.prototype.initMembers;
Game_Actor.prototype.initMembers = function() {
    _Game_Actor_initMembers.call(this);
    this._mhp = 0;
};

var _Game_Actor_refresh = Game_Actor.prototype.refresh;
Game_Actor.prototype.refresh = function() {
   _Game_Actor_refresh.call(this);
   this._mhp = this.mhp;
};


その上で、passiveWeapon関数で、this.mhpのところを、this._mhpに変えます。

自分で試したわけではないので、無責任で申し訳ありませんが、どうでしょうかね。
---------------------------------------------------------------------------------------------------
プラグイン置き場(GitHub)
https://github.com/futokoro/RPGMaker/blob/master/README.md

検討中の内容は上記リンク先の「対応するかもしれないプラグインのメモ」を参照してください。
アバター
GGG
記事: 17
登録日時: 2017年2月03日(金) 12:59

Re: TMPassiveSkill.jsの改変

投稿記事by GGG » 2017年3月03日(金) 04:26

フトコロ様
返信ありがとうございます。

お教えいただいたコードを追加した所、期待通りの動作をさせることが出来ました!
ありがとうございます!

“MV:質問” へ戻る