自動戦闘状態の仲間が回復技を使うと1番目しかかけない

あーきゅ
記事: 45
登録日時: 2017年3月25日(土) 07:31

自動戦闘状態の仲間が回復技を使うと1番目しかかけない

投稿記事by あーきゅ » 2017年3月25日(土) 07:38

VXAceの自動戦闘状態で仲間が単体HP回復技を使った時の事です。

パーティ2番目のHPが減った時に、自動戦闘状態の仲間が単体HP回復技の
行動をしてくれるのですが、2番目のHPが減っているのに、
満タンの1番目しかかけず困っています。
HPが減っている仲間に回復してくれるようにスクリプトを
作ってくれると嬉しいのですが可能でしょうか?

RPG探検隊のサイドビュースクリプトを使っております。
宜しくお願い致します。

faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: 自動戦闘状態の仲間が回復技を使うと1番目しかかけない

投稿記事by faida » 2017年3月25日(土) 09:23

デフォルトの自動戦闘だと、ダメージ計算式(スキルの右上の記入できるところ)しか読み取ってくれなくて、
結果、思ったように回復をかけてくれない、といったことが起こります。多分その類かなと。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
あーきゅ
記事: 45
登録日時: 2017年3月25日(土) 07:31

Re: 自動戦闘状態の仲間が回復技を使うと1番目しかかけない

投稿記事by あーきゅ » 2017年3月25日(土) 09:49

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

なるほど、そういう仕様になってしまっているんですね。
何か解決案があればいいのですが…
そのバグを直してくれる方が現れるのを待ってみます。
いなければ、諦めようと思います><
faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: 自動戦闘状態の仲間が回復技を使うと1番目しかかけない

投稿記事by faida » 2017年3月25日(土) 10:50

あ、いや、誤解を与えてしまったかもしれませんが、
「使用効果」の回復効果が自動戦闘で考慮されないだけで、「ダメージ計算」の回復効果は適用されるはずです。

evaluate_place.png

なので、割合回復とか定数回復とかしたければ、「計算式」に書けばいいだけです。
例: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」と記名していただければ
利用可能です。
あーきゅ
記事: 45
登録日時: 2017年3月25日(土) 07:31

Re: 自動戦闘状態の仲間が回復技を使うと1番目しかかけない

投稿記事by あーきゅ » 2017年3月25日(土) 13:46

そういう意味だったんですね…!
勘違いしてしまい大変失礼致しました。
今は外にいて確認できませんが、
丁寧な返答ありがとうございました!

“VX / Ace:スクリプト素材のリクエスト” へ戻る