rebf-gaiden/Scripts/_.38.rb
2025-04-26 17:06:34 -05:00

193 lines
No EOL
6.8 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■ RGSS3 吸収通常攻撃特徴 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# ステート付加:通常攻撃の攻撃を行った際
# 一定確率でダメージのうち一定割合分のHPを吸収するか
# 自らのMPとして変換する特徴を作成できるようになります。
# HP吸収の場合はHP吸収発動率とHP吸収割合の設定が必要となります。
# 同様に、MP変換の場合はMP変換発動率とMP変換割合の設定が必要となります。
#
# 例1 特徴に下記のように書き込んだ場合
# <HP吸収発動率:50>
# <HP吸収割合:50>
#
# 50の確率でHPダメージのうち50を自らのHPとして吸収する。
#
# 例2 特徴に下記のように書き込んだ場合
# <MP変換発動率:25>
# <MP変換割合:100>
#
# 25の確率でHPダメージのうち100を自らのMPとして回復する。
#==============================================================================
module DRAIN_ATTACK
#HP吸収時のメッセージ表示方法をデフォルトから変更するか
M_C = true
#HP吸収攻撃発動率設定用キーワード変更不要
HPD = "HP吸収発動率"
#MP変換攻撃発動率設定用キーワード変更不要
MPD = "MP変換発動率"
#HP吸収割合設定用キーワード変更不要
HPDR = "HP吸収割合"
#MP変換割合設定用キーワード変更不要
MPDR = "MP変換割合"
#アクターMP吸収時メッセージ
MESS1 = "%sを %s 回復した!"
#エネミーMP吸収時メッセージ
MESS2 = "%sを %s 回復した!"
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● 使用効果[ステート付加]:通常攻撃
#--------------------------------------------------------------------------
alias item_effect_add_state_attack_drain item_effect_add_state_attack
def item_effect_add_state_attack(user, item, effect)
item_effect_add_state_attack_drain(user, item, effect)
return if user == nil or item == nil
if rand(100) < user.at_h_drain_execute_rate
if !DRAIN_ATTACK::M_C
@result.hp_drain = @result.hp_damage * user.h_drain_rate / 100
@result.hp_drain = [@result.hp_drain, @result.pre_hp].min
user.hp += @result.hp_drain if !user.dead?
else
@result.exhp_drain = @result.hp_damage * user.h_drain_rate / 100
@result.exhp_drain = [@result.exhp_drain, @result.pre_hp].min
user.hp += @result.exhp_drain if !user.dead?
end
end
if rand(100) < user.at_m_drain_execute_rate
if !DRAIN_ATTACK::M_C
@result.mp_drain = @result.hp_damage * user.m_drain_rate / 100
@result.mp_drain = [@result.mp_drain, @result.pre_hp].min
user.mp += @result.mp_drain if !user.dead?
else
@result.exmp_drain = @result.hp_damage * user.m_drain_rate / 100
@result.exmp_drain = [@result.exmp_drain, @result.pre_hp].min
user.mp += @result.exmp_drain if !user.dead?
end
end
end
def at_h_drain_execute_rate
rate = 0
feature_objects.each do |object|
data = object.note
data.each_line { |line|
memo = line.scan(/<#{DRAIN_ATTACK::HPD}[:](\S+)>/)
memo = memo.flatten
rate += memo[0].to_i if memo != nil && !memo.empty?
}
end
return rate
end
def at_m_drain_execute_rate
rate = 0
feature_objects.each do |object|
data = object.note
data.each_line { |line|
memo = line.scan(/<#{DRAIN_ATTACK::MPD}[:](\S+)>/)
memo = memo.flatten
rate += memo[0].to_i if memo != nil && !memo.empty?
}
end
return rate
end
def h_drain_rate
rate = 0
feature_objects.each do |object|
data = object.note
data.each_line { |line|
memo = line.scan(/<#{DRAIN_ATTACK::HPDR}[:](\S+)>/)
memo = memo.flatten
rate += memo[0].to_i if memo != nil && !memo.empty?
}
end
return rate
end
def m_drain_rate
rate = 0
feature_objects.each do |object|
data = object.note
data.each_line { |line|
memo = line.scan(/<#{DRAIN_ATTACK::MPDR}[:](\S+)>/)
memo = memo.flatten
rate += memo[0].to_i if memo != nil && !memo.empty?
}
end
return rate
end
end
class Game_ActionResult
attr_accessor :exhp_drain
attr_accessor :exmp_drain
attr_accessor :pre_hp
#--------------------------------------------------------------------------
# ● ダメージ値のクリア
#--------------------------------------------------------------------------
alias clear_damage_values_drain clear_damage_values
def clear_damage_values
clear_damage_values_drain
@exhp_drain = 0
@exmp_drain = 0
@pre_hp = 0
end
#--------------------------------------------------------------------------
# ● ダメージの作成
#--------------------------------------------------------------------------
alias make_damage_drain make_damage
def make_damage(value, item)
@pre_hp = @battler.hp
make_damage_drain(value, item)
end
#--------------------------------------------------------------------------
# ● HP 吸収の文章を取得
#--------------------------------------------------------------------------
def hp_damage_exdrain_text
fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
sprintf(fmt, @battler.name, Vocab::hp, @exhp_drain)
end
#--------------------------------------------------------------------------
# ● MP 吸収の文章を取得
#--------------------------------------------------------------------------
def mp_damage_exdrain_text
fmt = @battler.actor? ? DRAIN_ATTACK::MESS1 : DRAIN_ATTACK::MESS2
if !DRAIN_ATTACK::M_C
mpd = @mp_drain
else
mpd = @exmp_drain
end
sprintf(fmt, Vocab::mp, mpd, "")
end
end
class Window_BattleLog < Window_Selectable
#--------------------------------------------------------------------------
# ● HP ダメージ表示
#--------------------------------------------------------------------------
alias display_hp_damage_drain display_hp_damage
def display_hp_damage(target, item)
display_hp_damage_drain(target, item)
if target.result.exhp_drain > 0 && DRAIN_ATTACK::M_C
add_text(target.result.hp_damage_exdrain_text)
wait
end
if (target.result.mp_drain > 0 && !DRAIN_ATTACK::M_C) or
(target.result.exmp_drain > 0 && DRAIN_ATTACK::M_C)
add_text(target.result.mp_damage_exdrain_text)
wait
end
end
end