#============================================================================== # ■ 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? @mp_damage = [@battler.mp, @mp_damage].min @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