【RGSS3】HPが何%以下だとステートを付加出来るスキル
Posted: 2021年2月01日(月) 14:10
敵や味方のHPが少ない時にステートを付与出来るスキルを作りたいです。
よろしくお願いします。
よろしくお願いします。
コード: 全て選択
#==============================================================================
# ■ 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