reaper.Undo_BeginBlock() --call to start a new block
---------------------------------------------------------
toggle_state = reaper.GetToggleCommandState(reaper.NamedCommandLookup("_S&M_DUMMY_TGL1"),0) -- получаем 0 если отключенно , и 1 если включенно
local counttracks = reaper.CountTracks(0) -- даёт значение кол-ва треков
if counttracks == nil then return end -- если треков нет, то и ни чего не делать :)
for i=1, counttracks do -- создаём цикл опроса по каждому треку
  local track = reaper.GetTrack(0,i-1) -- получаем объект Медиа Трек для каждого порядкового номера трека
  countFX =  reaper.TrackFX_GetCount( track ) -- для каждого трека получаем кол-во FX-ов на нём
  if countFX == nil then return end -- если FX нет, то и ни чего не делать :)
  for i=1, countFX do -- создаём цикл опроса по каждому FX-у на треке
    instrument = reaper.TrackFX_GetInstrument( track ) -- если не инструмент текущий FX, то получим значение = -1
    if instrument ~= i-1 then -- делаем условие, что если индекс FX-а не равен индексу инструмента, то -
      if toggle_state == 0 then -- тут как и раньше, если state = 0 то делать вот это
        reaper.TrackFX_SetEnabled(track, i-1, 1 ) -- Unbypass FX
        ComandID = "_S&M_DUMMY_TGL1" --
        reaper.Main_OnCommand(reaper.NamedCommandLookup(ComandID),0) -- переключаем state Dummy Экшина
        --------------------------------------------------------------------------------------------------
      else -- в противном случае
        reaper.TrackFX_SetEnabled(track, i-1, 0) -- Bypass FX
        ComandID = "_S&M_DUMMY_TGL1" --
        reaper.Main_OnCommand(reaper.NamedCommandLookup(ComandID),0) -- переключаем state Dummy Экшина
        ---------------------------------------------------------------------
      end
    end
  end
end
----------------------------------------------------------------------------------------------------
reaper.Undo_EndBlock("Bypass all FX (except VSTi) for all tracks",1)
reaper.PreventUIRefresh(1)