#==============================================================================
#                   「セルフスイッチ操作ぷらす」(ACE) ver1.1  by奈々
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   このスクリプトを改変したり、改変したものを配布するなどは自由ですが
#   その場合も元のスクリプトの作成者として名前は載せて下さい。
#
#------------------------------------------------------------------------------
#
#   イベントでセルフスイッチを自在に切り替えるスクリプトです。
#   他のマップ、好きなイベントのセルフスイッチを操作可能なだけでなく
#   全てのマップ、全てのイベントといった指定も行えます。
#   
#   また、おまけとして
#   指定したスイッチ/変数を一括で変えるコマンド
#   指定したスイッチ/変数以外を一括で変えるコマンドが追加されます。
#   
#   
#   ◇使用方法
#   イベントコマンドの「スクリプト」から呼び出す。
#   
#   ・セルフスイッチの操作
#   adv_self_switches(マップID, イベントID, "スイッチ名", true / false)
#   
#   例1:
#   adv_self_switches(1, 1, "A", true)
#   マップ1番のイベント1番のセルフスイッチAをonにする。
#   
#   例2:[]で指定することで、複数のIDを指定できる。
#   adv_self_switches([1,2,3], 1, "A", true)
#   マップ1番と2番と3番のイベント1番のセルフスイッチAをonにする。
#   adv_self_switches(1, [2,5], ["A","C"], true)
#   マップ1番のイベント2番と5番のセルフスイッチACをonにする。
#
#   例3:"all"を指定することで、全てのIDを指定できる。
#   adv_self_switches("all", 1, "A", true)
#   全てのマップのイベント1番のセルフスイッチAをonにする。
#   adv_self_switches(1, "all", "all", true)
#   マップ1番の全てのイベントのセルフスイッチABCDをonにする。
#   adv_self_switches("all", "all", "all", false)
#   全てのセルフスイッチをoffにする。
#   
#   ・スイッチ/変数の一括操作
#   adv_switches(スイッチID, true / false)
#   adv_switches_rev(スイッチID, true / false)
#   adv_variables(変数ID, 数値)
#   adv_variables_rev(変数ID, 数値)
#   
#   IDは[]で複数指定可能。指定したIDを一括操作する。
#   revの方は指定したID「以外」を一括操作する。
#
#==============================================================================


#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● スイッチの上級操作
  #--------------------------------------------------------------------------
  def adv_switches(list, value)
    if list.is_a?(Numeric)
      list = [list]
    end
    $data_system.switches.each_index {|index|
    next if index == 0
    next if !list.include?(index)
    $game_switches[index] = value
    }
  end
  def adv_switches_rev(list, value)
    if list.is_a?(Numeric)
      list = [list]
    end
    $data_system.switches.each_index {|index|
    next if index == 0
    next if list.include?(index)
    $game_switches[index] = value
    }
  end
  #--------------------------------------------------------------------------
  # ● 変数の上級操作
  #--------------------------------------------------------------------------
  def adv_variables(list, value)
    if list.is_a?(Numeric)
      list = [list]
    end
    $data_system.variables.each_index {|index|
    next if index == 0
    next if !list.include?(index)
    $game_variables[index] = value
    }
  end
  def adv_variables_rev(list, value)
    if list.is_a?(Numeric)
      list = [list]
    end
    $data_system.variables.each_index {|index|
    next if index == 0
    next if list.include?(index)
    $game_variables[index] = value
    }
  end
  #--------------------------------------------------------------------------
  # ● セルフスイッチの上級操作
  #--------------------------------------------------------------------------
  def adv_self_switches(map_id, event_id, channel, value)
    #チャンネルのセット
    if channel == "all"
      channel = ["A","B","C","D"]
    elsif channel.is_a?(String)
      channel = [channel]
    end
    #マップIDのセット
    if map_id == "all"
      map_id = []
      $data_mapinfos.each_key{|key|
      map_id += [key]
      }
    elsif map_id.is_a?(Numeric)
      map_id = [map_id]
    end
    map_id.each{|mi|
    #イベントIDのセット(マップ毎)
    if event_id == "all"
      event_id2 = []
      map = load_data(sprintf("Data/Map%03d.rvdata2", mi))
      map.events.each_key{|key|
      event_id2 += [key]
      }
    elsif event_id.is_a?(Numeric)
      event_id2 = [event_id]
    else
      event_id2 = event_id
    end
    event_id2.each{|ei|
    channel.each{|ch|
    $game_self_switches[[mi, ei, ch]] = value
    }
    }
    }
  end
end