VXAceの自動戦闘状態で仲間が単体HP回復技を使った時の事です。
パーティ2番目のHPが減った時に、自動戦闘状態の仲間が単体HP回復技の
行動をしてくれるのですが、2番目のHPが減っているのに、
満タンの1番目しかかけず困っています。
HPが減っている仲間に回復してくれるようにスクリプトを
作ってくれると嬉しいのですが可能でしょうか?
RPG探検隊のサイドビュースクリプトを使っております。
宜しくお願い致します。
自動戦闘状態の仲間が回復技を使うと1番目しかかけない
Re: 自動戦闘状態の仲間が回復技を使うと1番目しかかけない
デフォルトの自動戦闘だと、ダメージ計算式(スキルの右上の記入できるところ)しか読み取ってくれなくて、
結果、思ったように回復をかけてくれない、といったことが起こります。多分その類かなと。
結果、思ったように回復をかけてくれない、といったことが起こります。多分その類かなと。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
Re: 自動戦闘状態の仲間が回復技を使うと1番目しかかけない
返事ありがとうございます!
なるほど、そういう仕様になってしまっているんですね。
何か解決案があればいいのですが…
そのバグを直してくれる方が現れるのを待ってみます。
いなければ、諦めようと思います><
なるほど、そういう仕様になってしまっているんですね。
何か解決案があればいいのですが…
そのバグを直してくれる方が現れるのを待ってみます。
いなければ、諦めようと思います><
Re: 自動戦闘状態の仲間が回復技を使うと1番目しかかけない
あ、いや、誤解を与えてしまったかもしれませんが、
「使用効果」の回復効果が自動戦闘で考慮されないだけで、「ダメージ計算」の回復効果は適用されるはずです。
なので、割合回復とか定数回復とかしたければ、「計算式」に書けばいいだけです。
例:30%回復 → b.mhp * 30 / 100
500回復 → 500
で、「分散度」を0にすると、回復量にばらつきがなくなります。
※手元にあった「使用効果」を考慮するスクリプトなんですが、どう考えてもいらないと思うので
参考程度にどうぞ。
「使用効果」の回復効果が自動戦闘で考慮されないだけで、「ダメージ計算」の回復効果は適用されるはずです。
なので、割合回復とか定数回復とかしたければ、「計算式」に書けばいいだけです。
例:30%回復 → b.mhp * 30 / 100
500回復 → 500
で、「分散度」を0にすると、回復量にばらつきがなくなります。
※手元にあった「使用効果」を考慮するスクリプトなんですが、どう考えてもいらないと思うので
参考程度にどうぞ。
コード: 全て選択
#==============================================================================
# ■ Game_Action
#==============================================================================
class Game_Action
#--------------------------------------------------------------------------
# ● スキル/アイテムの評価
#--------------------------------------------------------------------------
def evaluate_item
return if item.for_all? && item_target_candidates.size == 1
return if item.is_a?(RPG::Item) && !$game_party.has_item?(item)
(0...item.target_num).to_a.inject(0){|r, i|
item_target_candidates.each do |target|
value = evaluate_item_with_target(target)
if item.for_all?
@value += value
elsif value > @value
@value = value
@target_index = target.index
end
end
@targets_index << @target_index
i == item.target_num - 1 ? @value += r : r + @value
}
end
#--------------------------------------------------------------------------
# ● スキル/アイテムの評価(ターゲット指定)
#--------------------------------------------------------------------------
def evaluate_item_with_target(target)
target.result.clear
target.make_damage_value_test(subject, item)
if item.for_opponent?
n = target.result.hp_damage.to_f / [target.hp, 1].max
item.effects.inject(n){|r, effect|
case effect.code
when 11
r + evaluate_recover_hp(target, item, effect) / [target.hp, 1].max
when 12
r + evaluate_recover_mp(target, item, effect) / [target.mp, 1].max
when 13
r + evaluate_gain_tp(target, item, effect)
when 21
r + evaluate_add_state(target, item, effect)
when 22
r + evaluate_remove_state(target, item, effect)
when 31
r + evaluate_add_buff(target, item, effect)
when 32
r + evaluate_add_debuff(target, item, effect)
when 33
r + evaluate_remove_buff(target, item, effect)
when 34
r + evaluate_remove_debuff(target, item, effect)
else
r
end
}
else
recovery = [-target.result.hp_damage, target.mhp - target.hp].min
n = recovery == 0.0 ? 0.0 :
[0.5 + (recovery.to_f / target.mhp) - target.hp_rate, 0].max
item.effects.inject(n){|r, effect|
case effect.code
when 11
r + evaluate_recover_hp(target, item, effect)
when 12
r + evaluate_recover_mp(target, item, effect)
when 13
r + evaluate_gain_tp(target, item, effect)
when 21
r + evaluate_add_state(target, item, effect)
when 22
r + evaluate_remove_state(target, item, effect)
when 31
r + evaluate_add_buff(target, item, effect)
when 32
r + evaluate_add_debuff(target, item, effect)
when 33
r + evaluate_remove_buff(target, item, effect)
when 34
r + evaluate_remove_debuff(target, item, effect)
else
r
end
}
end
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[HP 回復]
#--------------------------------------------------------------------------
def evaluate_recover_hp(target, item, effect)
return -0.25 if target.hp_rate > 0.9
value = (target.mhp * effect.value1 + effect.value2) * target.rec
value *= (item.is_a?(RPG::Item) ? @subject.pha : 1.0)
value = [value, target.mhp - target.hp].min
0.5 + value / target.mhp - target.hp_rate
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[MP 回復]
#--------------------------------------------------------------------------
def evaluate_recover_mp(target, item, effect)
value = (target.mmp * effect.value1 + effect.value2) * target.rec
value *= (item.is_a?(RPG::Item) ? @subject.pha : 1.0)
value = [value, target.mmp - target.mp].min
[0.25 + value / target.mmp - target.mp_rate, 0.001].max
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[TP 増加]
#--------------------------------------------------------------------------
def evaluate_gain_tp(target, item, effect)
effect.value1 / 100.0
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[ステート付加]
#--------------------------------------------------------------------------
def evaluate_add_state(target, item, effect)
if effect.data_id == 0
evaluate_add_state_attack(target, item, effect)
else
evaluate_add_state_normal(target, item, effect)
end
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[ステート付加]:通常攻撃
#--------------------------------------------------------------------------
def evaluate_add_state_attack(target, item, effect)
@subject.atk_states.inject(0.0) do |r, state_id|
chance = effect.value1
chance *= target.state_rate(state_id)
chance *= @subject.atk_states_rate(state_id)
chance *= target.luk_effect_rate(@subject)
r + chance
end
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[ステート付加]:通常
#--------------------------------------------------------------------------
def evaluate_add_state_normal(target, item, effect)
return 0.001 if effect.data_id == 9
chance = effect.value1
chance *= target.state_rate(effect.data_id) if target.opposite?(@subject)
chance *= target.luk_effect_rate(@subject) if target.opposite?(@subject)
chance
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[ステート解除]
#--------------------------------------------------------------------------
def evaluate_remove_state(target, item, effect)
target.state?(effect.data_id) ? effect.value1 : 0.0
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[能力強化]
#--------------------------------------------------------------------------
def evaluate_add_buff(target, item, effect)
target.buff_max?(effect.data_id) ? 0.0 : 0.25
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[能力弱体]
#--------------------------------------------------------------------------
def evaluate_add_debuff(target, item, effect)
return 0.0 if target.debuff_max?(effect.data_id)
target.debuff_rate(effect.data_id) * target.luk_effect_rate(@subject) *
0.001 * target.param_base(effect.data_id)
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[能力強化の解除]
#--------------------------------------------------------------------------
def evaluate_remove_buff(target, item, effect)
@buffs[effect.data_id] > 0 ? 0.5 : 0
end
#--------------------------------------------------------------------------
# ● 使用効果の評価[能力弱体の解除]
#--------------------------------------------------------------------------
def evaluate_remove_debuff(target, item, effect)
@buffs[effect.data_id] < 0 ? 0.5 : 0
end
end
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
Re: 自動戦闘状態の仲間が回復技を使うと1番目しかかけない
そういう意味だったんですね…!
勘違いしてしまい大変失礼致しました。
今は外にいて確認できませんが、
丁寧な返答ありがとうございました!
勘違いしてしまい大変失礼致しました。
今は外にいて確認できませんが、
丁寧な返答ありがとうございました!