#============================================================================== # RGSS2_逃走成功率の計算式改造 # 2011/09/01公開 # C Winter (http://ccwinter.blog.fc2.com/) #============================================================================== #============================================================================== # ■ Game_Unit #============================================================================== class Game_Unit #-------------------------------------------------------------------------- # ● 敏捷性平均値の計算 #-------------------------------------------------------------------------- def average_agi result = 0 n = 0 for member in members result += member.agi n += 1 end result /= n if n > 0 result = 1 if result == 0 return result end def average_agi_exist###生存メンバーの敏捷性平均値 result = 0 n = 0 for member in existing_members result += member.agi n += 1 end result /= n if n > 0 result = 1 if result == 0 return result end def max_agi###生存メンバー内の最高敏捷値 n = 0 for member in existing_members n = [n,member.agi].max end return n end def member_kazu###生存メンバーの数 n = 0 for member in existing_members n += 1 end return n end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias c_escape_start start def start c_escape_start @escape_bonus = 0 end #-------------------------------------------------------------------------- # ● 逃走の処理 #-------------------------------------------------------------------------- def process_escape make_escape_ratio### @info_viewport.visible = false @message_window.visible = true text = sprintf(Vocab::EscapeStart, $game_party.name) $game_message.texts.push(text) @escape_ratio += @escape_bonus### if $game_troop.preemptive success = true else success = (rand(100) < @escape_ratio) end Sound.play_escape if success wait_for_message battle_end(1) else @escape_bonus += 10###逃走に失敗すると成功率が10%上がる ###@escape_ratio += 10 $game_message.texts.push('\.' + Vocab::EscapeFailure) wait_for_message $game_party.clear_actions start_main end end #-------------------------------------------------------------------------- # ● 逃走成功率の作成 #-------------------------------------------------------------------------- def make_escape_ratio ###actors_agi = $game_party.average_agi ###enemies_agi = $game_troop.average_agi ###@escape_ratio = 150 - 100 * enemies_agi / actors_agi #元の式 max = $game_troop.max_agi## enemies_agi = $game_troop.average_agi_exist### member = $game_troop.member_kazu### enemies_agi_ex = (max * (member - 1) + enemies_agi) / member### actors_agi = $game_party.average_agi### @escape_ratio = 50 - enemies_agi_ex + actors_agi### #デフォルトでは、敵敏捷値 =敵の最高敏捷値×(敵の数−1)+敵の平均敏捷値 #最高値の影響が大きくなっています。先に速い敵を倒さないとなかなか逃げれません。 #↓この3行は参考用の表示です。テストプレイに使ってください。 p "敵の最高敏捷値=",max,"敵の平均敏捷値=",enemies_agi,"敵の生存数=",member, "敵グループの敏捷値(計算用)=",enemies_agi_ex, "味方の平均敏捷値(計算用)=",actors_agi,"計算結果=",@escape_ratio @escape_ratio = [@escape_ratio,10].max###成功率は最低でも10% @escape_ratio = [@escape_ratio,90].min###成功率は最高でも90% end end