ページ 11

【解決済】TMPassiveSkill.jsの改変

Posted: 2017年3月02日(木) 06:01
by GGG
こんにちは。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が取得できず?うまく動作してくれません。
正しく動作させるためにはどのような記述が必要になるのでしょうか?
お教えいただければ幸いです。

Re: TMPassiveSkill.jsの改変

Posted: 2017年3月02日(木) 18:05
by まっつUP
GGG様
お世話になります。

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

Re: TMPassiveSkill.jsの改変

Posted: 2017年3月02日(木) 18:50
by GGG
まっつ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 とエラーが出ます。

問題解決のため、必要な情報が欠けていたらすみません。よろしければお教えいただければと思います。

Re: TMPassiveSkill.jsの改変

Posted: 2017年3月02日(木) 19:36
by フトコロ
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に変えます。

自分で試したわけではないので、無責任で申し訳ありませんが、どうでしょうかね。

Re: TMPassiveSkill.jsの改変

Posted: 2017年3月03日(金) 04:26
by GGG
フトコロ様
返信ありがとうございます。

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