1) Нужен макрос, который по нажатию одной и той же кнопки, делал выстрелы по очереди с приоритетом...[/B]

Вот например есть макрос
/castsequence !Разрывной выстрел, !Прицельный выстрел
Проблема этого макроса в том, что нужно следовать очередности. Разрывной выстрел намного круче и я с ним хочу стрелять всегда по кд, а прицельным только тогда, когда разрывной не доступен, а получается так, что нужно ждать кд прицельного, а разрывной там стоит давно и ждет тебя, так-как кд у разрывного меньше, чем у прицельного и пока не выстрелишь прицельный, разрывной не тронешь.
Вот тебе такая ротация для сурфа. По возможности юзает киллшот. Держит на цели укус змеи и черную стрелу. По кулдауну юзаем разрывной->прицельный->стедик. Прок на изготовку юзается автоматически, но не перебивая 2сек дебафф от разрывного.

Скрытый текст

PHP код:
#showtooltip
/run locale GetLocale()
/
startattack
/petattack
/cancelaura Hand of Protection
/cancelaura Divine Intervention
/cast Kill Command
/cancelaura Длань защиты
/cancelaura Божественное вмешательство
/cast Команда "Взять!"
/run x=UnitHealth("target")/UnitHealthMax("target");
/
run if locale=="enUS" then y=GetSpellCooldown("Kill Shot") else y=GetSpellCooldown("Убийственный выстрел"end;
/
run if x>0.2 or not(y==0then ClearTarget() end;
/
cast [existsKill Shot
/cast [existsУбийственный выстрел
/stopmacro [exists]
/
targetlasttarget
/run if UnitDebuff("target","Serpent Sting",nil,"player") and locale=="enUS" then ClearTarget() end;
/
run if UnitDebuff("target","Укус змеи",nil,"player") and locale=="ruRU" then ClearTarget() end;
/
cast [existsSerpent Sting
/cast [existsУкус змеи
/stopmacro [exists]
/
targetlasttarget
/run if locale=="enUS" then y=GetSpellCooldown("Black Arrow") else y=GetSpellCooldown("Черная стрела"end;
/
run if not(y==0then ClearTarget() end;
/
cast [existsBlack Arrow
/cast [existsЧерная стрела
/stopmacro [exists]
/
targetlasttarget
/run if locale=="enUS" then y=GetSpellCooldown("Explosive Shot") else y=GetSpellCooldown("Разрывной выстрел"end;
/
run if not(y==0then ClearTarget() end;
/
run if UnitDebuff("target","Explosive Shot",nil,"player"then ClearTarget() end;
/
run if UnitDebuff("target","Разрывной выстрел",nil,"player"then ClearTarget() end;
/
cast [existsExplosive Shot
/cast [existsРазрывной выстрел
/stopmacro [exists]
/
targetlasttarget
/run if locale=="enUS" then y=GetSpellCooldown("Aimed Shot") else y=GetSpellCooldown("Прицельный выстрел"end;
/
run if not(y==0then ClearTarget() end;
/
cast [existsAimed Shot
/cast [existsПрицельный выстрел
/stopmacro [exists]
/
targetlasttarget
/cast Steady Shot
/cast Верный выстрел 
[свернуть]