﻿#==============================================================================
# ★ ExCommand_Battle
#------------------------------------------------------------------------------
# 　「戰鬥處理」時可以從隨機遇敵列表中選取敵人，
#   還可以設置隱藏敵人和極少出現的敵人。。
#==============================================================================

# 隨機事件戰鬥的開關 ID。
# 當此號的開關打開時，使用「戰鬥處理」時會隨機從地圖設置的遇敵列表選擇敵人。
EXCMD_BATTLE_SID = 8

# 是否執行遇敵重設。
# 是否在「戰鬥處理」之後將開關重設為 OFF。
# (0:重設 1:不重設)
EXCMD_BATTLE_RESET = 0

# 隱藏敵人識別用文字。
# 將文字放在敵人隊伍的「名稱」欄內，只有當所設置的開關打開時才出現。
EXCMD_BATTLE_HIDDEN_SIGNATURE = "*HIDDEN"

# 極少出現的怪物 指定用文字。
# 在隊伍名稱中使用 指定用文字 + [開關 ID] 、
# 只有在指定的開關為ON時才會出現。
# 範例：當30號開關為 ON 出現的敵人 => *RARE[30]
EXCMD_BATTLE_RARE_SIGNATURE = "*RARE"

#------------------------------------------------------------------------------

class Game_Player
  #--------------------------------------------------------------------------
  # ● 生成遇敵隊伍 (重新定義)
  #--------------------------------------------------------------------------
  def make_encounter_troop_id
    encounter_list = $game_map.encounter_list.clone
    for area in $data_areas.values
      encounter_list += area.encounter_list if in_area?(area)
    end
    remove_troops = []
    sig1 = EXCMD_BATTLE_RARE_SIGNATURE
    sig2 = EXCMD_BATTLE_HIDDEN_SIGNATURE
    for i in encounter_list
      if $data_troops[i].name[/#{Regexp.quote sig1}\[(\d+)\]/].to_a[0]
        remove_troops.push(i) unless $game_switches[$1.to_i]
      end
      next if $game_switches[EXCMD_BATTLE_SID]
      remove_troops.push(i) if $data_troops[i].name.include?(sig2)
    end
    for i in remove_troops
      encounter_list.delete(i)
    end
    if encounter_list.empty?
      make_encounter_count
      return 0
    end
    return encounter_list[rand(encounter_list.size)]
  end
end

class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 戰鬥處理(重新定義)
  #--------------------------------------------------------------------------
  def command_301
    if $game_switches[EXCMD_BATTLE_SID]     # 地圖/區域內指定
      troop_id = $game_player.make_encounter_troop_id
      $game_switches[EXCMD_BATTLE_SID] = false if EXCMD_BATTLE_RESET == 1
    elsif @params[0] == 0                   # 直接指定
      troop_id = @params[1]
    else                                    # 使用變數指定
      troop_id = $game_variables[@params[1]]
    end
    if $data_troops[troop_id] != nil
      $game_troop.setup(troop_id)
      $game_troop.can_escape = @params[2]
      $game_troop.can_lose = @params[3]
      $game_temp.battle_proc = Proc.new { |n| @branch[@indent] = n }
      $game_temp.next_scene = "battle"
    end
    @index += 1
    return false
  end
end

