158 lines
6.8 KiB
Ruby
158 lines
6.8 KiB
Ruby
#==============================================================================
|
|
# ■ Game_ActionResult
|
|
#------------------------------------------------------------------------------
|
|
# 戦闘行動の結果を扱うクラスです。このクラスは Game_Battler クラスの内部で
|
|
# 使用されます。
|
|
#==============================================================================
|
|
|
|
class Game_ActionResult
|
|
#--------------------------------------------------------------------------
|
|
# ● 公開インスタンス変数
|
|
#--------------------------------------------------------------------------
|
|
attr_accessor :used # 使用フラグ
|
|
attr_accessor :missed # 命中失敗フラグ
|
|
attr_accessor :evaded # 回避成功フラグ
|
|
attr_accessor :critical # クリティカルフラグ
|
|
attr_accessor :success # 成功フラグ
|
|
attr_accessor :hp_damage # HP ダメージ
|
|
attr_accessor :mp_damage # MP ダメージ
|
|
attr_accessor :tp_damage # TP ダメージ
|
|
attr_accessor :hp_drain # HP 吸収
|
|
attr_accessor :mp_drain # MP 吸収
|
|
attr_accessor :added_states # 付加されたステート
|
|
attr_accessor :removed_states # 解除されたステート
|
|
attr_accessor :added_buffs # 付加された能力強化
|
|
attr_accessor :added_debuffs # 付加された能力弱体
|
|
attr_accessor :removed_buffs # 解除された強化/弱体
|
|
#--------------------------------------------------------------------------
|
|
# ● オブジェクト初期化
|
|
#--------------------------------------------------------------------------
|
|
def initialize(battler)
|
|
@battler = battler
|
|
clear
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● クリア
|
|
#--------------------------------------------------------------------------
|
|
def clear
|
|
clear_hit_flags
|
|
clear_damage_values
|
|
clear_status_effects
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 命中系フラグのクリア
|
|
#--------------------------------------------------------------------------
|
|
def clear_hit_flags
|
|
@used = false
|
|
@missed = false
|
|
@evaded = false
|
|
@critical = false
|
|
@success = false
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ダメージ値のクリア
|
|
#--------------------------------------------------------------------------
|
|
def clear_damage_values
|
|
@hp_damage = 0
|
|
@mp_damage = 0
|
|
@tp_damage = 0
|
|
@hp_drain = 0
|
|
@mp_drain = 0
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ダメージの作成
|
|
#--------------------------------------------------------------------------
|
|
def make_damage(value, item)
|
|
@critical = false if value == 0
|
|
@hp_damage = value if item.damage.to_hp?
|
|
@mp_damage = value if item.damage.to_mp?
|
|
@hp_drain = @hp_damage if item.damage.drain?
|
|
@mp_drain = @mp_damage if item.damage.drain?
|
|
@hp_drain = [@battler.hp, @hp_drain].min
|
|
@success = true if item.damage.to_hp? || @mp_damage != 0
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ステータス効果のクリア
|
|
#--------------------------------------------------------------------------
|
|
def clear_status_effects
|
|
@added_states = []
|
|
@removed_states = []
|
|
@added_buffs = []
|
|
@added_debuffs = []
|
|
@removed_buffs = []
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 付加されたステートをオブジェクトの配列で取得
|
|
#--------------------------------------------------------------------------
|
|
def added_state_objects
|
|
@added_states.collect {|id| $data_states[id] }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 解除されたステートをオブジェクトの配列で取得
|
|
#--------------------------------------------------------------------------
|
|
def removed_state_objects
|
|
@removed_states.collect {|id| $data_states[id] }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 何らかのステータス(能力値かステート)が影響を受けたかの判定
|
|
#--------------------------------------------------------------------------
|
|
def status_affected?
|
|
!(@added_states.empty? && @removed_states.empty? &&
|
|
@added_buffs.empty? && @added_debuffs.empty? && @removed_buffs.empty?)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 最終的に命中したか否かを判定
|
|
#--------------------------------------------------------------------------
|
|
def hit?
|
|
@used && !@missed && !@evaded
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● HP ダメージの文章を取得
|
|
#--------------------------------------------------------------------------
|
|
def hp_damage_text
|
|
if @hp_drain > 0
|
|
fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
|
|
sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
|
|
elsif @hp_damage > 0
|
|
fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
|
|
sprintf(fmt, @battler.name, @hp_damage)
|
|
elsif @hp_damage < 0
|
|
fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
|
|
sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
|
|
else
|
|
fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
|
|
sprintf(fmt, @battler.name)
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● MP ダメージの文章を取得
|
|
#--------------------------------------------------------------------------
|
|
def mp_damage_text
|
|
if @mp_drain > 0
|
|
fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
|
|
sprintf(fmt, @battler.name, Vocab::mp, @mp_drain)
|
|
elsif @mp_damage > 0
|
|
fmt = @battler.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss
|
|
sprintf(fmt, @battler.name, Vocab::mp, @mp_damage)
|
|
elsif @mp_damage < 0
|
|
fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
|
|
sprintf(fmt, @battler.name, Vocab::mp, -@mp_damage)
|
|
else
|
|
""
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● TP ダメージの文章を取得
|
|
#--------------------------------------------------------------------------
|
|
def tp_damage_text
|
|
if @tp_damage > 0
|
|
fmt = @battler.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss
|
|
sprintf(fmt, @battler.name, Vocab::tp, @tp_damage)
|
|
elsif @tp_damage < 0
|
|
fmt = @battler.actor? ? Vocab::ActorGain : Vocab::EnemyGain
|
|
sprintf(fmt, @battler.name, Vocab::tp, -@tp_damage)
|
|
else
|
|
""
|
|
end
|
|
end
|
|
end
|