【解決済み】Vx Ace 複数属性使用時の属性有効度について

pommpommB
記事: 8
登録日時: 2019年5月18日(土) 18:20

【解決済み】Vx Ace 複数属性使用時の属性有効度について

投稿記事by pommpommB » 2019年5月18日(土) 18:27

初期状態では武器に複数属性を設定した場合、
一番効果の高い属性が反映されます。
これをスクリプトで、複数属性の有効度の平均値を反映するように変更したいです。


攻撃側→武器属性[斬,火]
防御側属性有効度→斬[100%]火[50%]
この場合、(100% + 50%) /2
の平均で75%のダメージ補正が反映されるようになってほしい。

恐らく、スクリプトの変更場所は
Game_Battler 内の

● 属性の最大修正値の取得
def elements_max_rate(elements)
elements.inject([0.0]) {|r, i| r.push(element_rate(i)) }.max
end

この部分を書き換えると良いと思うのですが、計算式が分かりません。
どなたかご教示頂けないでしょうか。
よろしくお願い致します。
最後に編集したユーザー pommpommB on 2019年5月18日(土) 20:36 [ 編集 1 回目 ]

ぽんぽこねるそん
記事: 53
登録日時: 2018年10月26日(金) 12:24

Re: Vx Ace 複数属性使用時の属性有効度について

投稿記事by ぽんぽこねるそん » 2019年5月18日(土) 19:23

pommpommBさん、こんにちは。

elements_max_rateの計算式をこう書きかえればスキルの属性が通常攻撃の時に
攻撃側のすべての通常攻撃属性に対する有効度の平均になるはずです。

コード: 全て選択

def elements_max_rate(elements)
    elements.inject(0.0) {|r, i| r + element_rate(i) } / elements.size
end
pommpommB
記事: 8
登録日時: 2019年5月18日(土) 18:20

Re: Vx Ace 複数属性使用時の属性有効度について

投稿記事by pommpommB » 2019年5月18日(土) 20:02

ぽんぽこねるそんさん、こんにちは!
早速のご回答ありがとうございます。

スクリプトエディタの▼ ゲームオブジェクトのGame_Battler 内を書き換えましたが、
変更前と同じように最も有効度の高い属性が反映されてしまいます……。

#--------------------------------------------------------------------------
# ● 属性の最大修正値の取得
# elements : 属性 ID の配列
# 与えられた属性の中で最も有効な修正値を返す
#--------------------------------------------------------------------------
def elements_max_rate(elements)
elements.inject(0.0) {|r, i| r + element_rate(i)} / elements.size
end

スクリプトは上記のように変更しました。

テスト環境は、
攻撃時属性[斬,火]の武器を装備したキャラクターで、
属性有効度 斬[100%] 火[10%]に設定した敵キャラクターを通常攻撃しております。
ぽんぽこねるそん
記事: 53
登録日時: 2018年10月26日(金) 12:24

Re: Vx Ace 複数属性使用時の属性有効度について

投稿記事by ぽんぽこねるそん » 2019年5月18日(土) 20:25

こちらの環境では問題なく平均値を返します。

考えられる原因は
・プロジェクトを保存していない
・通常攻撃の属性が通常攻撃になっていない
・スクリプトが競合している

ぐらいですかね。

以上を確認してみてください。
pommpommB
記事: 8
登録日時: 2019年5月18日(土) 18:20

Re: Vx Ace 複数属性使用時の属性有効度について

投稿記事by pommpommB » 2019年5月18日(土) 20:35

再度のご回答ありがとうございます。
原因はプロジェクトを保存していない事でした、すみませんm(_ _;m)

おかげ様で理想通りの変更がされました。
とても助かりました、ありがとうございます!

“VX / Ace:質問” へ戻る