﻿#==============================================================================
# ★ 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

