【RGSS3】HPが何%以下だとステートを付加出来るスキル

いおん
記事: 27
登録日時: 2020年5月18日(月) 23:57

【RGSS3】HPが何%以下だとステートを付加出来るスキル

投稿記事by いおん » 2021年2月01日(月) 14:10

敵や味方のHPが少ない時にステートを付与出来るスキルを作りたいです。
よろしくお願いします。

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

Re: 【RGSS3】HPが何%以下だとステートを付加出来るスキル

投稿記事by DEDEN » 2021年2月02日(火) 03:31

ルーと様、こんばんは
スクリプトを作成しましたので宜しければお使いください
使用者のHP割合を参照するのかスキル対象のHP割合を参照するのか分からなかったので
両方実装してみました
スキルかアイテムのメモ欄に@add_state_rate_self[n]と入力すると
使用者のHP割合がn%以下の場合のみステート付与処理を行います
スキルかアイテムのメモ欄に@add_state_rate_target[n]と入力すると
対象のHP割合がn%以下の場合のみステート付与処理を行います

コード: 全て選択

#==============================================================================
# ■ HP割合一定以下でステート付与 Ver:1.00
#------------------------------------------------------------------------------
#  自身/対象のHP割合が一定以下の場合のみステート付与処理を行う
#   スキル/アイテムを作成できます
#==============================================================================
#==============================================================================
#  〇使い方
#------------------------------------------------------------------------------
#  ●スキル/アイテムのメモ欄に@add_state_rate_self[n]と入力すると
#    使用者のHP割合がn%以下の場合のみステート付与処理を行います
#
#  ●スキル/アイテムのメモ欄に@add_state_rate_target[n]と入力すると
#    対象のHP割合がn%以下の場合のみステート付与処理を行います
#==============================================================================
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 使用効果[ステート付加]:通常攻撃
  #--------------------------------------------------------------------------
  def item_effect_add_state_attack(user, item, effect)
    user.atk_states.each do |state_id|
      chance = effect.value1
      chance *= state_rate(state_id)
      chance *= user.atk_states_rate(state_id)
      chance *= luk_effect_rate(user)
      if rand < chance
        add_state(state_id,item)
        @result.success = true
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 使用効果[ステート付加]:通常
  #--------------------------------------------------------------------------
  def item_effect_add_state_normal(user, item, effect)
    chance = effect.value1
    chance *= state_rate(effect.data_id) if opposite?(user)
    chance *= luk_effect_rate(user)      if opposite?(user)
    if rand < chance
      add_state(effect.data_id,item,user)
      @result.success = true
    end
  end
  #--------------------------------------------------------------------------
  # ● ステートの付加
  #--------------------------------------------------------------------------
  def add_state(state_id,item = nil,user = nil)
    if state_addable?(state_id,item,user)
      add_new_state(state_id) unless state?(state_id)
      reset_state_counts(state_id)
      @result.added_states.push(state_id).uniq!
    end
  end
  #--------------------------------------------------------------------------
  # ● ステートの付加可能判定
  #--------------------------------------------------------------------------
  def state_addable?(state_id,item,user = nil)
    alive? && $data_states[state_id] && !state_resist?(state_id) &&
      !state_removed?(state_id) && !state_restrict?(state_id) && hp_rate_check(item,user)
  end
  #--------------------------------------------------------------------------
  # ● HP割合チェック
  #--------------------------------------------------------------------------
  def hp_rate_check(item,user)
    return true if item.nil?
    if /^\@add_state_rate_self\[(\d+)\]/ =~ item.note
      rate = $1.to_i / 100.0
      user.hp_rate <= rate ? true : false
    elsif /^\@add_state_rate_target\[(\d+)\]/ =~ item.note
      rate = $1.to_i / 100.0
      self.hp_rate <= rate ? true : false
    else
      true
    end
  end
end

“VX / Ace:質問” へ戻る