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


