【解決済】Yanflyさんのプラグインに関する質問

dematenota
記事: 11
登録日時: 2019年8月11日(日) 16:12

【解決済】Yanflyさんのプラグインに関する質問

投稿記事by dematenota » 2019年8月11日(日) 16:27

お力をお借りしたい事があり質問させていただきます。

Yanflyさんのプラグインを使わせてもらっていて
YEP_X_MessageEvalTextを使用してスキルの説明欄に威力などを変数で直接表記しています。

例)
会心率:\evalText<<Math.floor($gameActors.actor(5).cri*100)>>%
↓ゲーム上では
会心率:70%
いった具合です。

攻撃力や会心率などのツクール上ですでに用意されているものに関しては
$gameActors.actor(5).XXX
のXXXにcri,atkなどを挿入すればいいのですが、同じくYanflyさん製のプラグイン
・YEP_X_ArmorScaling
・YEP_LifeSteal
のそれぞれアーマー貫通値やライフスティール値などを同様に表記させようとするとどのように書いていいのかわかりません。
自分で何とかつたないJS知識で頑張ろうと表記しようとしたのですがエラーか数値がNoNなどになります。
どのように書けば表示されるのか教えていただきたいです。

面倒な内容で申し訳ありません。
以下に表記しようとして吐いたエラーを乗せさせていただきます。

----------------------------------------------------------------------------------------------------
LifeStealのhpPhysicalRateを表記させたかった場合(アクター5の例)

LS\}[\evalText<<Math.floor($gameActors.actor(5).obj.lifeSteal.hpPhysicalRate*100)>>%]\{,
LS\}[\evalText<<Math.floor($gameActors.actor(5).obj.lifeSteal[0]*100)>>%]\{,
LS\}[\evalText<<Math.floor($gameActors.actor(5).lifeSteal.hpPhysicalRate*100)>>%]\{,
LS\}[\evalText<<Math.floor($gameActors.actor(5).lifeSteal[0]*100)>>%]\{,
LS\}[\evalText<<Math.floor($gameActors.actor(5).hpPhysicalRate*100)>>%]\{,
LS\}[\evalText<<Math.floor($gameActors.actor(5).lifeSteal['PhysicalRate']*100)>>%]\{,
LS\}[\evalText<<Math.floor($gameActors.actor(5).lifeSteal['hpPhysicalRate']*100)>>%]\{,
LS\}[\evalText<<Math.floor($gameActors.actor(5).Param.LSHPOver(PhysicalRate)*100)>>%]\{,
LS\}[\evalText<<Math.floor($gameActors.actor(5).LSHPOver(PhysicalRate)*100)>>%]\{,

全部だめでした……
最後に編集したユーザー dematenota on 2019年8月25日(日) 16:46 [ 編集 1 回目 ]

アバター
しぐれん
記事: 972
登録日時: 2017年3月28日(火) 22:22
連絡を取る:

Re: Yanflyさんのプラグインに関する質問

投稿記事by しぐれん » 2019年8月12日(月) 01:49

ややこしい状況になっているようですので、一度変数に代入するのを成功させてからというのはどうでしょうか?
そうすれば、プラグインのエラーか式のエラーかがわかります。
現在、プラグイン依頼はお休み中です。
dematenota
記事: 11
登録日時: 2019年8月11日(日) 16:12

Re: Yanflyさんのプラグインに関する質問

投稿記事by dematenota » 2019年8月12日(月) 03:11

お返事ありがとうございます。

申し訳ありませんが、「一度変数に代入」というのはどのように行えばいいのでしょうか?
LifeStealの数値を代入すると言う事で相違ないでしょうか?

その場合でもどのように記述すればいいのかが分からないんです……。

LifeStealの値が
obj.lifeSteal.hpPhysicalRate
lifeSteal[0]
hpPhysicalRate
などのどれかに該当するのかと思うのですがJSのデータ内容を見ていき当てはまりそうなものを片っ端から当てはめていくのですがUndefieldやNoN、エラーとなります。

返事していただいたのに知識不足で申し訳ありません。

----------------------------------------------------------------------------------------------------------------------------------------------
$gameActors.actor(5).atk
$gameActors.actor(5).def
$gameActors.actor(5).cri

などのように「$gameActors.actor(5).」のドット以降のプラグインも含めた一覧を見れれば一番手っ取り早いと思うのですが……
アバター
しぐれん
記事: 972
登録日時: 2017年3月28日(火) 22:22
連絡を取る:

Re: Yanflyさんのプラグインに関する質問

投稿記事by しぐれん » 2019年8月12日(月) 04:21

イベントコマンドの「変数の操作」を試してみましょう。
そこにスクリプトという項目があります。

あとはVScodeを導入して、ステップ実行で探す方法があります。
現在、プラグイン依頼はお休み中です。
アバター
剣崎 宗二
記事: 678
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: Yanflyさんのプラグインに関する質問

投稿記事by 剣崎 宗二 » 2019年8月14日(水) 12:58

横から失礼します。
先ず、LifeSteal側の問題として、<Custom HP Life Steal Rate>タグで「敵の」ステータスをも参照できるという問題があります。また、スキル自体にもLifeSteal関連のタグがつけられます。
これらアクター関連以外の数値は、全て無視して宜しいという事でしょうか?(=Custom HP Life Steal Rateに於いてbやtargetを使用しない、スキルのタグによる部分は考慮しない)

であれば、LifeSteal側の仕様上、そういう表示用の関数を用意していないので、自前で改造する必要がございます。

コード: 全て選択

Game_Battler.prototype.calcLifeSteal = function(damage, type) {
    if (!type) return;
    var rate = 1;
    var flat = 0;
    var target = null;
    rate *= 1 - this.getLifeStealRate(type + 'Rate', target);
    flat += this.getLifeStealFlat(type + 'Flat', target);
    if (Yanfly.Param.LSHPNeg) {
      var lifeSteal = Math.floor(damage * (1 - rate) + flat);
    } else {
      var lifeSteal = Math.max(0, Math.floor(damage * (1 - rate) + flat));
    }
    if (Yanfly.Param.LSHPOver) lifeSteal = Math.min(lifeSteal, damage);
    if (lifeSteal <= 0) return;
    return lifeSteal;
};


というメソッドを該当のプラグインに付け加えた上で、
$gameActors.actor(5).calcLifeSteal(100, 'hpPhysical')
で数値を獲得できるかと考えます。

テストしていないのでバグがあったら申し訳ございません。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
dematenota
記事: 11
登録日時: 2019年8月11日(日) 16:12

Re: Yanflyさんのプラグインに関する質問

投稿記事by dematenota » 2019年8月15日(木) 19:12

お返事に加えて、態々コードまでありがとうございます。

言われて理解しました。そもそも引数にtargetが入っていたんですね。

これらアクター関連以外の数値は、全て無視して宜しいという事でしょうか?(=Custom HP Life Steal Rateに於いてbやtargetを使用しない、スキルのタグによる部分は考慮しない)
 ⇒それで相違ないです。
  あくまで装備などの現在のアクターの数値を表示したかったので。

早速書いていただいたコードを入れて動かしてみましたが、エラーになってしましました。
手掛かりになるのかわかりませんが、スクリーンショットを乗せておきます。
添付ファイル
キャプチャ.PNG
アバター
剣崎 宗二
記事: 678
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: Yanflyさんのプラグインに関する質問

投稿記事by 剣崎 宗二 » 2019年8月16日(金) 00:19

エラー自体は「) が足りない」と言う物ですが…
evaltextのタグに何をお書きになられたのか、コピペして頂けますでしょうか。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
dematenota
記事: 11
登録日時: 2019年8月11日(日) 16:12

Re: Yanflyさんのプラグインに関する質問

投稿記事by dematenota » 2019年8月16日(金) 23:04

お返事ありがとうございます。

おっしゃる通りでevaltextを見返したら閉じる括弧が1つ抜けていました。
付け足して再実行したところ無事に表記されました。

ややこしい案件にコードまで書いてくださり、本当にありがとうございました。


因みにYEP_X_ArmorScalingの方でのアーマー貫通値も同じ原因でやはりコードを追加しないと表記はされないんでしょうか?
以下で試したときはLifeStealと同じようにエラーだったです。

・物理貫通値レート
\evalText<<$gameActors.actor(5).physArmorPenRate*100>>
・物理貫通フラット
\evalText<<$gameActors.actor(5).physArmorPenFlat

何度も重ね重ね申し訳ありません。
アバター
剣崎 宗二
記事: 678
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: Yanflyさんのプラグインに関する質問

投稿記事by 剣崎 宗二 » 2019年8月17日(土) 12:40

YEP_X_ArmorScalingの方はフラットレートと乗算レートを別々で出してもいい、と言うならやや簡単になります。
そちらのでエラーが出ている理由は一重に使用コマンドが違うからかと考えますね。
$gameActors.actor(5).physicalArmorPenetrationRate()
$gameActors.actor(5).physicalArmorPenetrationFlat()
でそれぞれ数値をお試しください。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
dematenota
記事: 11
登録日時: 2019年8月11日(日) 16:12

Re: Yanflyさんのプラグインに関する質問

投稿記事by dematenota » 2019年8月17日(土) 15:30

重ね重ねありがとうございます。
無事に数値の反映を確認できました。

追加で一つ質問です。
色々お聞きして申し訳ありません。

作製中に確認したのですがLifeStealの取得値が1以上の場合は数値通りの値が代入されるのですが、
0の場合にのみ表記が「NaN」になってしまします。
数値がそもそも入って無いからかと思いアクターの設定欄に+0%を設定しましたが変らず0の時のみ「NaN」になってしまします。

アーマー貫通値の方は0の場合でも0と表記されました。

“MV:質問” へ戻る