【RGSS3】味方で一番HPが少ない対象を狙うスキル

感電地
記事: 23
登録日時: 2020年10月05日(月) 23:51

【RGSS3】味方で一番HPが少ない対象を狙うスキル

投稿記事by 感電地 » 2021年1月21日(木) 17:21

敵のスキルでHPが一番少ない味方を対象にするようにしたいです。

DEDEN
記事: 58
登録日時: 2018年8月25日(土) 15:06

Re: 【RGSS3】味方で一番HPが少ない対象を狙うスキル

投稿記事by DEDEN » 2021年1月23日(土) 12:12

アリッチ様こんにちは
スクリプトを作成してみました
スクリプト初心者なので至らぬところがあるかもしれませんが宜しければお使いください
なお現在HPの最小なのか最大HPと現在HPの割合が最小なのかわからなかったので両方実装してみました
スキルのメモ欄に@hp_min_targetと入力すると現在HPが最も少ない敵を自動で攻撃します
@hp_rate_min_targetと入力すると最大HPと現在HPの割合が最小の敵を攻撃します

コード: 全て選択

#==============================================================================
# ■ 最小HPターゲットスキル
#------------------------------------------------------------------------------
#  自動でHPが最も少ない敵を攻撃するスキルを作成します
#==============================================================================

#==============================================================================
#  〇使い方
#------------------------------------------------------------------------------
#  ●スキルの対象は敵単体にして下さい
#  ●スキルのメモ欄に@hp_min_targetと入力すると現在HPが最も少ない敵を攻撃します
#
#    例:敵AのHPが100、敵BのHPが50の場合は自動で敵Bを攻撃
#
#  ●スキルのメモ欄に@hp_rate_min_targetと入力するとHP割合が最も少ない敵を攻撃します
#
#    例:敵Aの現在HP/最大HPが100/300、敵Bの現在HP/最大HPが50/100の場合は自動で敵Aを攻撃
#==============================================================================
class Game_Action
  #--------------------------------------------------------------------------
  # ● 敵に対するターゲット
  #--------------------------------------------------------------------------
  def targets_for_opponents
    if item.for_random?
      Array.new(item.number_of_targets) { opponents_unit.random_target }
    elsif item.for_one?
      unless /^\@hp_/ =~ item.note
        num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
        if @target_index < 0
          [opponents_unit.random_target] * num
        else
          [opponents_unit.smooth_target(@target_index)] * num
        end
      else
        [hp_min_target]
      end
    else
      opponents_unit.alive_members
    end
  end
  #--------------------------------------------------------------------------
  # ● HPが少ない対象をターゲット
  #--------------------------------------------------------------------------
  def hp_min_target
    if /^\@hp_min_target/ =~ item.note
      opponents_unit.hp_min_target
    elsif /^\@hp_rate_min_target/ =~ item.note
      opponents_unit.hp_rate_min_target
    end
  end
end
  #--------------------------------------------------------------------------
class Game_Unit
  def hp_min_target
    target = alive_members.sort {|a,b|a.hp <=> b.hp}
    target[0]
  end
  def hp_rate_min_target
    target = alive_members.sort {|a,b|a.hp_rate <=> b.hp_rate}
    target[0]
  end
end
DEDEN
記事: 58
登録日時: 2018年8月25日(土) 15:06

Re: 【RGSS3】味方で一番HPが少ない対象を狙うスキル

投稿記事by DEDEN » 2021年1月25日(月) 21:13

度々すみません
せっかくなので味方側が使用した場合も正常に動作するようにしてみました
宜しければどうぞ
それに伴い対象を敵単体にする必要はなくなりました
どれにしても自動でHPが最小の敵を攻撃します

コード: 全て選択

#==============================================================================
# ■ 最小HPターゲットスキル Ver:1.01
#------------------------------------------------------------------------------
#  自動でHPが最も少ない敵を攻撃するスキルを作成します
#==============================================================================
#==============================================================================
#  〇使い方
#------------------------------------------------------------------------------
#  ●スキルのメモ欄に@hp_min_targetと入力すると現在HPが最も少ない敵を攻撃します
#
#    例:敵AのHPが100、敵BのHPが50の場合は自動で敵Bを攻撃
#
#  ●スキルのメモ欄に@hp_rate_min_targetと入力するとHP割合が最も少ない敵を攻撃します
#
#    例:敵Aの現在HP/最大HPが100/300、敵Bの現在HP/最大HPが50/100の場合は自動で敵Aを攻撃
#==============================================================================
#==============================================================================
#  〇更新履歴
#    Ver:1.01 味方も使用できるように改良
#==============================================================================
class Game_Action
  #--------------------------------------------------------------------------
  # ● 敵に対するターゲット
  #--------------------------------------------------------------------------
  def targets_for_opponents
    if item.for_random?
      Array.new(item.number_of_targets) { opponents_unit.random_target }
    elsif item.for_one?
      unless /^\@hp_/ =~ item.note
        num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
        if @target_index < 0
          [opponents_unit.random_target] * num
        else
          [opponents_unit.smooth_target(@target_index)] * num
        end
      else
        [hp_min_target]
      end
    else
      opponents_unit.alive_members
    end
  end
  #--------------------------------------------------------------------------
  # ● HPが少ない対象をターゲット
  #--------------------------------------------------------------------------
  def hp_min_target
    if /^\@hp_min_target/ =~ item.note
      opponents_unit.hp_min_target
    elsif /^\@hp_rate_min_target/ =~ item.note
      opponents_unit.hp_rate_min_target
    end
  end
end
  #--------------------------------------------------------------------------
class Game_Unit
  def hp_min_target
    target = alive_members.sort {|a,b|a.hp <=> b.hp}
    target[0]
  end
  def hp_rate_min_target
    target = alive_members.sort {|a,b|a.hp_rate <=> b.hp_rate}
    target[0]
  end
end
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● スキル[決定]
  #--------------------------------------------------------------------------
  def on_skill_ok
    @skill = @skill_window.item
    BattleManager.actor.input.set_skill(@skill.id)
    BattleManager.actor.last_skill.object = @skill
    if !@skill.need_selection? || /^\@hp_/ =~ @skill.note
      @skill_window.hide
      next_command
    elsif @skill.for_opponent?
      select_enemy_selection
    else
      select_actor_selection
    end
  end
end

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