#============================================================================== # ■ XP-RGSS-40 自動エンカウントリスト [Ver.1.1.0] by Claimh #------------------------------------------------------------------------------ #【必須条件】エネミー設定(エネミーのレベル設定)が必須となります。 #------------------------------------------------------------------------------ # ・パーティーのレベルとトループのレベルに応じて、 # エンカウントリスト(戦闘するトループ)を自動生成します。 #【特別付加機能:エンカウントリストの指定】 # ・変数の値によって、エンカウントリストを指定できます。 #============================================================================== module Auto_EncounterList SERECT_ENC_LIST = [] #============================================================================== # □ カスタマイズSTART #============================================================================== # 自動エンカウントリスト機能を無効化するスイッチ # (このスイッチがONのときは自動エンカウントリスト機能は無効になります) AUTO_ENC_LIST_SW = 1 # 自動エンカウントリスト機能を無効にするマップ # (ここで指定したマップにはマップ設定のエンカウントリストが適応されます) # マップIDを配列に入れてください AUTO_ENC_LIST_MAP = [10, 12] # エンカウントリスト内から除外するトループ # (特定の戦闘にしか使用しないトループなどを入れてください) # トループIDを配列に入れてください NOT_LIST_TROOP = [30, 31, 32] # エンカウントリスト作成パターン # (パーティーとトループのレベル比較の基準になります) # 0:平均レベル # 1:最大レベル # 2:最小レベル ENC_LIST_PATTERN = 0 # 許容範囲レベル差(同等レベルと判断するレベル差) ENC_LIST_LV_DEF = 5 #---------------------------------------------------------------------------- #【特別付加機能:エンカウントリストの指定】 # 変数の値によってエンカウントリストを指定できます。 # 0 : 自動生成されたエンカウントリスト # 1〜: 変数値ごとのエンカウントリスト #---------------------------------------------------------------------------- # エンカウントリストの指定機能を使用する? USE_SERECT_ENC_LIST = false # エンカウントリスト指定用の変数ID SERECT_VARIABLE_ID = 1 # 変数値によるエンカウントリストの指定 # SERECT_ENC_LIST[変数値] = [トループID, トループID・・・] SERECT_ENC_LIST[0] = nil # 変数値=0はこのまま変更不可 SERECT_ENC_LIST[1] = [1, 2, 3] # 変数値=1以降ならばご自由に。 #============================================================================== # □ カスタマイズEND #============================================================================== module_function #-------------------------------------------------------------------------- # ● 自動エンカウントリスト機能が有効? #-------------------------------------------------------------------------- def use_auto_enc_list?(map_id) # 機能自体が無効? return false if $game_switches[AUTO_ENC_LIST_SW] # エンカウント無効マップか? return false if AUTO_ENC_LIST_MAP.include?(map_id) # 自動エンカウント有効 return true end #-------------------------------------------------------------------------- # ● 指定されたエンカウントリストを使用する #-------------------------------------------------------------------------- def serect_enc_list # エンカウントリストの指定機能が有効か? return nil unless USE_SERECT_ENC_LIST # 変数値の取得 value = $game_variables[SERECT_VARIABLE_ID] # 変数値が0か?(自動生成か?) return nil if value == 0 # 変数値に応じたエンカウントリストを返却 return SERECT_ENC_LIST[value] end #-------------------------------------------------------------------------- # ● トループレベルの取得 #-------------------------------------------------------------------------- def make_troop_level(troop_id) case ENC_LIST_PATTERN when 0 # 平均 ave_level = 0 for i in 0...$data_troops[troop_id].members.size # エネミーレベルの加算 ave_level += Enemy_Level.get_enemy_lv($data_troops[troop_id].members[i].enemy_id) end # 平均レベルを返却 return (ave_level / $data_troops[troop_id].members.size) when 1 # 最大 max_level = 0 for i in 0...$data_troops[troop_id].members.size # エネミーレベルを取得 level = Enemy_Level.get_enemy_lv($data_troops[troop_id].members[i].enemy_id) if max_level < level max_level = level end end # 最大レベルを返却 return max_level when 2 # 最小 min_level = 100 for i in 0...$data_troops[troop_id].members.size # エネミーレベルを取得 level = Enemy_Level.get_enemy_lv($data_troops[troop_id].members[i].enemy_id) if min_level > level min_level = level end end # 最小レベルを返却 return min_level else p "err:ENC_LIST_PATTERN setting" exit end end #-------------------------------------------------------------------------- # ● パーティーレベルの取得 #-------------------------------------------------------------------------- def make_party_level case ENC_LIST_PATTERN when 0 # 平均 ave_level = 0 for i in 0...$game_party.actors.size # パーティーレベルの加算 ave_level += $game_party.actors[i].level end # 平均レベルを返却 return (ave_level / $game_party.actors.size) when 1 # 最大 max_level = 0 for i in 0...$game_party.actors.size # エネミーレベルを取得 level = $game_party.actors[i].level if max_level < level max_level = level end end # 最大レベルを返却 return max_level when 2 # 最小 min_level = 100 for i in 0...$game_party.actors.size # エネミーレベルを取得 level = $game_party.actors[i].level if min_level > level min_level = level end end # 最小レベルを返却 return min_level else p "err:ENC_LIST_PATTERN setting" exit end end #-------------------------------------------------------------------------- # ● レベル差によるエンカウントリストの自動生成 #-------------------------------------------------------------------------- def make_lv_enc_list enc_list = [] # パーティーレベルの取得 party_level = make_party_level # 全トループを検索 for troop_id in 1...$data_troops.size # 自動エンカウント化が有効なトループか? unless NOT_LIST_TROOP.include?(troop_id) # トループメンバーが居ない場合は無視 if $data_troops[troop_id].members.size == 0 next end # トループレベルの取得 troop_level = make_troop_level(troop_id) # レベル差を算出 lv_def = (party_level - troop_level).abs # 許容範囲以内か? if ENC_LIST_LV_DEF > lv_def # エンカウントリストに加える enc_list.push(troop_id) end end end # エンカウントリストを返却 return enc_list end #-------------------------------------------------------------------------- # ● エンカウントリストの自動生成 #-------------------------------------------------------------------------- def make_auto_enc_list # 指定エンカウントリストの取得 user_serect_enclist = serect_enc_list # 指定エンカウントリストが無効 if user_serect_enclist.nil? # レベル差によるエンカウントリストの自動生成 return make_lv_enc_list end # 指定エンカウントリストを返却 return user_serect_enclist end end class Game_Map #-------------------------------------------------------------------------- # ● エンカウントリストの取得 #-------------------------------------------------------------------------- alias default_encounter_list encounter_list def encounter_list # 自動エンカウントリストが有効? if Auto_EncounterList.use_auto_enc_list?(@map_id) # エンカウントリストの自動生成 return Auto_EncounterList.make_auto_enc_list else # マップ設定のエンカウントリストを使用する return default_encounter_list end end end