﻿#==============================================================================
# ★ ExParty_ChangePlayer
#------------------------------------------------------------------------------
# 　可以依照隊伍順序切換出現在地圖上的角色行走圖。
#==============================================================================

# 儲存領隊 ID 的變數 ID
# 可以在事件判定使用。 (不用的話指定為 0)
# 可以在文章內使用  \N[\V[n]] (n 為此變數 ID) 顯示當前領隊名稱。
EXPTY_CHGPLR_VID = 3

# 允許切換領隊的開關 ID。
# 打開時允許切換領隊。可以在事件中修改是否允許切換領隊。
EXPTY_CHGPLR_PERMISSION_SID = 3

# 隨菜單禁止。
# 當「禁止功能表選項」時，也同時禁止切換領隊。
# 既使上面設置的開關為 ON ，依然不能切換領隊。
# (0:不隨菜單禁止 1:隨菜單禁止)
EXPTY_CHGPLR_FOLLOW_MENU = 1

# 設定切換領隊的按鈕
# 在地圖畫面按下就會切換領隊的按鈕。
# 1: [L] 1→4→3→2→1 [R] 1→2→3→4→1
# 2: [X] 1→2→3→4→1
# 3: [Y] 1→2→3→4→1
# 4: [Z] 1→2→3→4→1
EXPTY_CHGPLR_KEYTYPE = 1

# 變更領隊時的 SE。
# 依次設置：SE 的名稱、音量、音調。
# 不想播放 SE 的話設為[]。
EXPTY_CHGPLR_ENABLE_SE = ["Decision1", 80, 100]

# 禁止變更領隊時的 SE。
# 依次設置：SE 的名稱、音量、音調。
# 不想播放 SE 的話設為[]。
EXPTY_CHGPLR_DISABLE_SE = ["Buzzer1", 80, 100]

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

class Game_Party
  alias _expchgplr_name name
  #--------------------------------------------------------------------------
  # ☆ 獲取隊員 (角色 ID)
  #--------------------------------------------------------------------------
  def actors
    return @actors
  end
  #--------------------------------------------------------------------------
  # ○ 獲取隊伍名稱 (追加定義)
  #    只有一人時，返回領隊名稱。
  #    多人時則返回 "XX的隊伍"（按照在Vocab裡的設定）XX為領隊名稱。
  #--------------------------------------------------------------------------
  def name
    return _expchgplr_name if ($BTEST or @actors.size == 0)
    if @actors.size == 1
      return $game_actors[$game_player.id].name
    else
      return sprintf(Vocab::PartyName, $game_actors[$game_player.id].name)
    end
  end
end

class Game_Player
  #--------------------------------------------------------------------------
  # ○ 刷新 (重新定義)
  #--------------------------------------------------------------------------
  def refresh
    if $game_party.members.size == 0
      @character_name = ""
      @character_index = 0
      @id = 0
    else
      unless $game_party.actors.include?(@id)
        @id = $game_party.members[0].id
      end
      actor = $game_actors[@id]
      @character_name = actor.character_name
      @character_index = actor.character_index
    end
    $game_variables[EXPTY_CHGPLR_VID] = @id
  end
  #--------------------------------------------------------------------------
  # ☆ 判斷是否允許替換領隊
  #--------------------------------------------------------------------------
  def enable_change_player?
    return false unless $game_switches[EXPTY_CHGPLR_PERMISSION_SID]
    return false if $game_system.menu_disabled and EXPTY_CHGPLR_FOLLOW_MENU
    return true
  end
  #--------------------------------------------------------------------------
  # ☆ 領隊替換
  #--------------------------------------------------------------------------
  def change_player(prev = false)
    if enable_change_player?
      se = EXPTY_CHGPLR_ENABLE_SE
      @id = $game_party.members[0].id if @id == 0
      index = $game_actors[@id].index
      if prev
        index += $game_party.members.size - 1
        index %= $game_party.members.size
      else
        index += 1
        index %= $game_party.members.size
      end
      @id = $game_party.members[index].id
      refresh
    else
      se = EXPTY_CHGPLR_DISABLE_SE
    end
    RPG::SE.new(se[0], se[1], se[2]).play unless se.empty?
  end
  #--------------------------------------------------------------------------
  # ☆ 強制變換領隊
  #     new_id : 角色 ID
  #--------------------------------------------------------------------------
  def force_change_player(new_id)
    @id = new_id
    refresh
  end
end

class Scene_Map
  alias _expchgplr_update update
  #--------------------------------------------------------------------------
  # ○ 更新畫面 (追加定義)
  #--------------------------------------------------------------------------
  def update
    _expchgplr_update
    update_call_change_player unless $game_message.visible
  end
  #--------------------------------------------------------------------------
  # ☆ 判斷按鍵切換領隊
  #--------------------------------------------------------------------------
  def update_call_change_player
    return if $game_map.interpreter.running?
    return if $game_party.members.size < 2
    case EXPTY_CHGPLR_KEYTYPE
    when 1
      $game_player.change_player(true) if Input.trigger?(Input::L)
      $game_player.change_player if Input.trigger?(Input::R)
    when 2
      $game_player.change_player if Input.trigger?(Input::X)
    when 3
      $game_player.change_player if Input.trigger?(Input::Y)
    when 4
      $game_player.change_player if Input.trigger?(Input::Z)
    end
  end
end


