#============================================================================== # ■ Numset #------------------------------------------------------------------------------ #  定数全般のモジュールです。 #============================================================================== module Numset EXP_NAME = "EXP" # EXPの名称 TREASURE_NAME = "ドロップ" # トレジャーの名称(ちと違うが) FINISH_PERCENT = 30 # フィニッシュボーナス TREASURE_MAX = 0 # 1回で獲得可能なトレジャーの数(1以上で有効) end #============================================================================== # ■ Game_Enemy #------------------------------------------------------------------------------ #  エネミーを扱うクラスです。このクラスは Game_Troop クラス ($game_troop) の # 内部で使用されます。 #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :finish # 止めを刺したバトラー #-------------------------------------------------------------------------- # ● HP の変更 # hp : 新しい HP #-------------------------------------------------------------------------- def hp=(hp) @hp = [[hp, maxhp].min, 0].max # 戦闘不能を付加または解除 for i in 1...$data_states.size if $data_states[i].zero_hp if self.dead? @finish = $scene.active_battler add_state(i) else @finish = nil remove_state(i) end end end end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :active_battler # アクティブなバトラー #-------------------------------------------------------------------------- # ● 獲得金額の補正 #-------------------------------------------------------------------------- def revisioned_gold(gold) percent = 0 amount = 0 for actor in $game_party.actors if Game_Battler.method_defined?("multy_element_set") set = actor.multy_element_set else set = actor.equip_element_set end returnar = XRXS.element_check(set, "獲得#{$data_system.words.gold}") if returnar[0] percent += returnar[2] amount += returnar[1] end end gold = gold * (100 + percent) / 100 gold += amount return gold end #-------------------------------------------------------------------------- # ● トレジャー獲得率の補正 #-------------------------------------------------------------------------- def revisioned_prob(prob) percent = 0 amount = 0 for actor in $game_party.actors if Game_Battler.method_defined?("multy_element_set") set = actor.multy_element_set else set = actor.equip_element_set end returnar = XRXS.element_check(set, "#{Numset::TREASURE_NAME}率") if returnar[0] percent += returnar[2] amount += returnar[1] end end prob = prob * (100 + percent) / 100 prob += amount return prob end #-------------------------------------------------------------------------- # ● アフターバトルフェーズ開始 #-------------------------------------------------------------------------- def start_phase5 # フェーズ 5 に移行 @phase = 5 # バトル終了 ME を演奏 $game_system.me_play($game_system.battle_end_me) # バトル開始前の BGM に戻す $game_system.bgm_play($game_temp.map_bgm) # EXP、ゴールド、トレジャーを初期化 exp = 0 gold = 0 treasures = [] # ループ for enemy in $game_troop.enemies if Game_Enemy.method_defined?("overkill") and enemy.overkill enemy = $data_enemies[enemy.over[1]] end # エネミーが隠れ状態でない場合 unless enemy.hidden # 獲得 EXP、ゴールドを追加 exp += enemy.exp gold += enemy.gold # トレジャー獲得率に補正をつけて返す treasure_prob = revisioned_prob(enemy.treasure_prob) # トレジャー出現判定 if rand(100) < treasure_prob if enemy.item_id > 0 treasures.push($data_items[enemy.item_id]) end if enemy.weapon_id > 0 treasures.push($data_weapons[enemy.weapon_id]) end if enemy.armor_id > 0 treasures.push($data_armors[enemy.armor_id]) end end end end # 獲得金額に補正をかける gold = self.revisioned_gold(gold) gold_p = gold / $game_party.actors.size # トレジャーの最大数を 0 以外にした場合、その数までに限定 treasures = treasures[0..Numset::TREASURE_MAX] if Numset::TREASURE_MAX > 0 # EXP 獲得 for i in 0...$game_party.actors.size actor = $game_party.actors[i] if actor.cant_get_exp? == false last_level = actor.level if Game_Battler.method_defined?("multy_element_set") set = actor.multy_element_set else set = actor.equip_element_set end returnar = XRXS.element_check(set, "獲得#{Numset::EXP_NAME}") for enemy in $game_troop.enemies if enemy.finish == actor actor_exp = exp * (100 + Numset::FINISH_PERCENT) / 100 else actor_exp = exp end end actor_exp = actor_exp * (100 + returnar[2]) / 100 actor_exp += returnar[1] returnar = XRXS.element_check(set, "#{Numset::EXP_NAME}+#{$data_system.words.gold}") if returnar[0] gold_m = gold_p * returnar[2] / 100 gold_m += returnar[1] gold -= [gold_m, gold_p].max actor_exp += [gold_m, gold_p].max end returnar = XRXS.element_check(set, "#{$data_system.words.gold}+#{Numset::EXP_NAME}") if returnar[0] exp_m = actor_exp * returnar[2] / 100 exp_m += returnar[1] gold += [exp_m, actor_exp].max actor_exp -= [exp_m, actor_exp].max end actor.exp += actor_exp if actor.level > last_level @status_window.level_up(i) end end end # ゴールド獲得 $game_party.gain_gold(gold) # トレジャー獲得 for item in treasures case item when RPG::Item $game_party.gain_item(item.id, 1) when RPG::Weapon $game_party.gain_weapon(item.id, 1) when RPG::Armor $game_party.gain_armor(item.id, 1) end end # バトルリザルトウィンドウを作成 @result_window = Window_BattleResult.new(exp, gold, treasures) # ウェイトカウントを設定 @phase5_wait_count = 100 end end