(解決済み)属性毎にMP消費率を変える方法を知りたいです。

あきまり
記事: 48
登録日時: 2018年2月04日(日) 06:45

(解決済み)属性毎にMP消費率を変える方法を知りたいです。

投稿記事by あきまり » 2021年12月28日(火) 13:28

質問失礼します。
タイトルにある通り属性毎にMP消費率を変える方法を知りたいです。

ふんわりした説明で申し訳ないのですが
例えば炎属性が得意なキャラは炎魔法の消費MPが低く、氷属性の消費MPが高くなるみたいな動作をさせたいです。
そして出来ればこの特徴をパッシブスキルプラグインの様な形で後付けで追加したり削除したいです。

以上お知恵がある方お願いいたします。
最後に編集したユーザー あきまり on 2021年12月29日(水) 22:20 [ 編集 1 回目 ]

アバター
なぴぃ
記事: 41
登録日時: 2021年12月19日(日) 19:47
連絡を取る:

Re: 属性毎にMP消費率を変える方法を知りたいです。

投稿記事by なぴぃ » 2021年12月28日(火) 15:15

トリアコンタンさんの「動的データベース構築プラグイン」で実現できると思います。
このプラグインを使ってスキルのメモ欄に<DD消費MP: Javascript計算式 >という形で計算式を書くとそのスキルの計算式が反映された消費MPになります。

後から装備やパッシブスキル等で変更する事を考えるとMP消費率の管理には属性有効度を利用するのがいいんじゃないかと思います。

手順
1.エディターのデータベース>タイプ から新しい属性「炎MP消費率」「氷MP消費率」等各属性の設定を追加する。

2. a.elementRate(属性ID)でスキル使用者の属性有効度が取得できるので炎属性スキルのメモ欄に先ほど用意した「炎MP消費率」を利用した計算式を作る。他の属性も同様に作る。

3.MP消費率を変更したい装備やパッシブスキルでは先ほどの「炎MP消費率」等を設定して増減するようにする。

これで実現できると思います。


属性有効度を利用する場合、全ての効果が割合でかかってくるので、例えば消費MPが半分になる装備を2つ装備すると半分の半分で25%になります。-50%を2つで0みたいな加算式を利用したい場合はこの方法は使えません。(やろうとするとかなり難易度が高くなる気がします)

参考 炎スキルのメモ欄のスクリプト(炎MP消費率の属性IDが10の例)

コード: 全て選択

<DD消費MP: prev*a.elementRate(10)>

prevがエディターで設定した元の消費MPです。属性有効度100%の場合a.elementRateは1になるのでそのままかければOKです。
なぴぃ
Twitter: https://twitter.com/napiiey
プラグイン置き場: https://napiiey.github.io/plugins/
あきまり
記事: 48
登録日時: 2018年2月04日(日) 06:45

Re: 属性毎にMP消費率を変える方法を知りたいです。

投稿記事by あきまり » 2021年12月28日(火) 16:48

なぴぃ様返信ありがとうございます。

書いて頂いた通り
動的データベース構築プラグインを導入し
エディターに専用の属性を作りスキルのメモ欄に<DD消費MP: prev*a.elementRate(10)>
50%を軽減率としてキャラクターに付与しテストプレイしてみたのですが

キャラクターのスキル欄を開くと
ReferenceError
a is not defined
と出てしまい確認できませんでした、一応新しいプロジェクトでも確認しましたがエラーが起きてしまいました
アバター
なぴぃ
記事: 41
登録日時: 2021年12月19日(日) 19:47
連絡を取る:

Re: 属性毎にMP消費率を変える方法を知りたいです。

投稿記事by なぴぃ » 2021年12月28日(火) 18:45

失礼いたしました。動的データベース構築プラグインではaの変数使えなかったみたいですね。
トリアコンタンさんの別のプラグインとごっちゃになっていたみたいです。

となるとBattleManager.actor()で現在操作してるアクターが取得できるので

コード: 全て選択

<DD消費MP: prev*BattleManager.actor().elementRate(10)>

これで戦闘中にMPが反映されるようになります。

ただこれだと戦闘中以外に参照された時エラーが出てしまうので戦闘中とメニューで処理を分ける必要がありました。
$gameParty.menuActor()で現在メニューで表示されているアクターが取得できるのでそれを利用して最終的なコードはこうなります。

炎スキルのメモ欄のスクリプト(炎MP消費率の属性IDが10の例)

コード: 全て選択

<DD消費MP: if(BattleManager.actor()){prev*BattleManager.actor().elementRate(10)}else{prev*$gameParty.menuActor().elementRate(10)}>

ちょっとややこしくなっちゃいましたね。
プラグインを作ってやるような内容だったかもしれません。
なぴぃ
Twitter: https://twitter.com/napiiey
プラグイン置き場: https://napiiey.github.io/plugins/
名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: 属性毎にMP消費率を変える方法を知りたいです。

投稿記事by 名無し蛙 » 2021年12月29日(水) 00:02

横からの上に動的プラグインに詳しくないので恐縮ですが動作不良を起こす気がしますね…
BattleManager.actor()は現在、コマンド選択中のアクターを取得するメソッドです。
スキルウィンドウ上は正しく表示されるかも知れませんがmp消費が発生するのは実際に行動する直前です。
そしてturnフェイズに入った時点で_actorIndexに-1が代入されるので参照する時にactor()はnullを返すようになると思います。

前者のコードだけならまだエラー落ちすると思うんですけど
後者のコードだと更に$gameParty.menuActor()の方に移行して余計意図から外れた処理になるのではないかなぁと
動作検証まではしていないので間違ってたらすみません
あきまり
記事: 48
登録日時: 2018年2月04日(日) 06:45

Re: 属性毎にMP消費率を変える方法を知りたいです。

投稿記事by あきまり » 2021年12月29日(水) 00:14

なぴぃ様返信ありがとうございます。

書いて頂いた文章で実行した結果
メニュー画面、戦闘画面、消費MP、全部に軽減増減を追加できましたありがとうございます。
あきまり
記事: 48
登録日時: 2018年2月04日(日) 06:45

Re: 属性毎にMP消費率を変える方法を知りたいです。

投稿記事by あきまり » 2021年12月29日(水) 00:20

名無し蛙様返信ありがとうございます。

なぴぃ様に教えて頂いた文の通り 属性「炎MP消費率」30、70、200で試してみましたがちゃんと増減していましたもしかしてしばらくするとエラーを起こす様になるのでしょうか?
名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: 属性毎にMP消費率を変える方法を知りたいです。

投稿記事by 名無し蛙 » 2021年12月29日(水) 00:26

流石に口を出す以上は自分の目で確かめないと失礼でしたね
ちょっと動的プラグイン落として動作検証してみます
名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: 属性毎にMP消費率を変える方法を知りたいです。

投稿記事by 名無し蛙 » 2021年12月29日(水) 00:55

やはり予想通りの結果になりました。

あきまり さんが書きました:なぴぃ様に教えて頂いた文の通り 属性「炎MP消費率」30、70、200で試してみましたがちゃんと増減していましたもしかしてしばらくするとエラーを起こす様になるのでしょうか?

スキル選択ウィンドウ上では想定通りの消費MPコストを表示すると思います。
しかしそれは見せかけで実際に消費するタイミングになると
直前にメニュー>スキル画面を開いたアクターのMP消費率を適用します。
一度も選択せずにテストした場合はパーティ先頭キャラの消費率が適用。
もしも表示と実際に消費されるコストが一致したのならそれはたまたまじゃないかなぁと。

ここから手直しするとしたら…どうしましょうかね
これ以上計算式を複雑化させるのも何なのでやはり簡単なプラグインでも作った方が良い気がしますね
あまり横からしゃしゃるのも何なので一度なぴぃ氏にお返しします
それまでちょっと解決報告は保留にしてください
アバター
なぴぃ
記事: 41
登録日時: 2021年12月19日(日) 19:47
連絡を取る:

Re: 属性毎にMP消費率を変える方法を知りたいです。

投稿記事by なぴぃ » 2021年12月29日(水) 01:15

名無し蛙 さん
検証頂きありがとうございます。
ご指摘の通りテストした時に偶然一致していただけだったようで、複数のアクターを別の倍率にして同時に行動させたところ消費量がおかしくなってしまいました。
MP消費の処理はターンフェイズに入ってから行われるのですね。
そのあたり詳しくなかったのでご指摘頂けてありがたかったです。
となるとこの方法は無理がありそうですね。

あきまりさん
そういう事のようで無理のあるやり方だったみたいです。
申し訳ございません。
なぴぃ
Twitter: https://twitter.com/napiiey
プラグイン置き場: https://napiiey.github.io/plugins/

“MV:質問” へ戻る