#============================================================================== # ■ VXAce-RGSS3-6 撃破数カウンタ [Ver.1.0.0] by Claimh #------------------------------------------------------------------------------ # 各アクターが倒したエネミーの数をカウントします。 #------------------------------------------------------------------------------ #・ウィンドウ上に表示させる #Widow_Statusなどに追記してください。 #<記述> # draw_defeat_count(actor_id, enemy_id, x, y) #   actor_id   :対象アクターID(0を指定すると全アクター) #   enemy_id   :対象エネミーID(0を指定すると全エネミー) #   x      :横方向の表示位置 #   y      :縦方向の表示位置 #------------------------------------------------------------------------------ #・変数に入れる #イベントのスクリプト上に記述してください。 #<記述> # input_defeat_count(actor_id, enemy_id, variable_id) #   actor_id   :対象アクターID(0を指定すると全アクター) #   enemy_id   :対象エネミーID(0を指定すると全エネミー) #   variable_id :撃破数を入れる変数 #============================================================================== module DefeatCounter ## 他スクリプトとの併用のために残す #-------------------------------------------------------------------------- # ● 指定アクターの撃破数 # actor_id :対象アクターID(0を指定すると全アクター) # enemy_id :対象エネミーID(0を指定すると全エネミー) #-------------------------------------------------------------------------- def self.defeat_count(actor_id=0, enemy_id=0) return $game_actors.defeat(enemy_id, actor_id) end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_defeat_count initialize def initialize(actor_id) initialize_defeat_count(actor_id) @defeat = {} end #-------------------------------------------------------------------------- # ● 撃破数取得 #-------------------------------------------------------------------------- def defeat(enemy_id=0) return defeat_all if enemy_id == 0 @defeat[enemy_id] = 0 unless @defeat.keys.include?(enemy_id) return @defeat[enemy_id] end #-------------------------------------------------------------------------- # ● 撃破数取得 #-------------------------------------------------------------------------- def defeat_all @defeat.keys.inject(0) { |n, id| n += @defeat[id] } end #-------------------------------------------------------------------------- # ● 撃破数カウント #-------------------------------------------------------------------------- def defeat_cnt(enemy_id) return if enemy_id == 0 @defeat[enemy_id] = 0 unless @defeat.keys.include?(enemy_id) @defeat[enemy_id] += 1 end end class Game_Actors #-------------------------------------------------------------------------- # ● 撃破数取得 #-------------------------------------------------------------------------- def defeat(enemy_id=0, actor_id=0) return defeat_all(enemy_id) if actor_id == 0 return self.[](actor_id).defeat(enemy_id) end #-------------------------------------------------------------------------- # ● 撃破数取得 #-------------------------------------------------------------------------- def defeat_all(enemy_id=0) @data.inject(0) { |n, actor| n += (actor.nil? ? 0 : actor.defeat(enemy_id)) } end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ● ダメージの処理 # 呼び出し前に @result.hp_damage @result.mp_damage @result.hp_drain # @result.mp_drain が設定されていること。 #-------------------------------------------------------------------------- alias execute_damage_defeat execute_damage def execute_damage(user) execute_damage_defeat(user) return if actor? or !dead? or user.enemy? return if $game_troop.enable_dead_count?(self.index) $game_troop.defeat_dead_count(self.index) user.defeat_cnt(self.enemy_id) end end #============================================================================== # ■ Game_Troop #============================================================================== class Game_Troop < Game_Unit #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias setup_defeat setup def setup(troop_id) setup_defeat(troop_id) @enemy_defeat = [] end #-------------------------------------------------------------------------- # ● 撃破時のカウント #-------------------------------------------------------------------------- def defeat_dead_count(index) @enemy_defeat[index] = true end #-------------------------------------------------------------------------- # ● 既にカウント済み? #-------------------------------------------------------------------------- def enable_dead_count?(index) @enemy_defeat[index] || false end end class Game_Interpreter #-------------------------------------------------------------------------- # ● 指定した変数にアクターの撃破数を格納する # actor_id :対象アクター(0を指定すると全アクター) # enemy_id :対象エネミー(0を指定すると全エネミー) # variable_id :撃破数を格納する変数 #-------------------------------------------------------------------------- def input_defeat_count(actor_id, enemy_id, variable_id) $game_variables[variable_id] = $game_actors.defeat(enemy_id, actor_id) return true end end class Window_Base < Window #-------------------------------------------------------------------------- # ● 指定した変数にアクターの撃破数を表示する # actor_id :対象アクター(0を指定すると全アクター) # enemy_id :対象エネミー(0を指定すると全エネミー) # x :横方向の表示位置 # y :縦方向の表示位置 #-------------------------------------------------------------------------- def draw_defeat_count(actor_id, enemy_id, x, y) draw_text(x, y, 200, line_height, $game_actors.defeat(enemy_id, actor_id), 2) end end