Heh.
Ok, let's take a look on something more complex.
I suppose anyone who played serious PvP \ TBC arenas understand that Broken Tooth is useless against heal classes, druid flag carrier and etc. Scorpids are the best in such situations. We all know that.
If you want a great PvP pet for some serious stuff - move to Durotar and tame Death Flayer. He's lvl 11 and he has only 30min timer. Use old "arena" build with Bestial Swiftness so your scorpid may chase any target.
Why Death Flayer?
That's why:
All others scorpids have 2.0 attack speed. 1.6 attack speed is better for pushback spellcasts.
Okay, moving next.
Scorpids are way much harder to control, since their DoT must both protect ViperSting and not break our CC when it's need to be applied. Here comes absurdly insane macro to solve that problem:
Extension(requires SuperMacro):
function ScorpidSolver() class1 = UnitClass("mouseover"); class2 = UnitClass("target"); autocastable1, autostate1=GetSpellAutocast(
A,"pet"); autocastable2, autostate2=GetSpellAutocast(
B,"pet");nif ( ( ( class1 == "Druid" ) or ( class1 == "Shaman" ) or ( class1 == "Paladin" ) ) and ( autostate1==nil ) and ( autostate2==1 ) and ( UnitCanAttack("player","mouseover") ) ) then TogglePetAutocast(
D); TogglePetAutocast(
C); TargetUnit("mouseover");PetAttack();TargetLastTarget(); else if ( ( ( class1 == "Druid" ) or ( class1 == "Shaman" ) or ( class1 == "Paladin" ) ) and ( autostate1==nil ) and ( autostate2==nil ) and ( UnitCanAttack("player","mouseover") ) ) then TogglePetAutocast(
D); TargetUnit("mouseover");PetAttack();TargetLastTarget(); else if ( ( ( class1 == "Druid" ) or ( class1 == "Shaman" ) or ( class1 == "Paladin" ) ) and ( autostate1==1 ) and ( autostate2==1 ) and ( UnitCanAttack("player","mouseover") ) ) then TargetUnit("mouseover");TogglePetAutocast(
C);PetAttack();TargetLastTarget(); else if ( ( ( class1 == "Druid" ) or ( class1 == "Shaman" ) or ( class1 == "Paladin" ) ) and ( autostate1==1 ) and ( autostate2==nil ) and ( UnitCanAttack("player","mouseover") ) ) then TargetUnit("mouseover");PetAttack();TargetLastTarget(); else if ( ( ( not ( class1 == "Druid" ) ) and ( not ( class1 == "Shaman" ) ) and ( not ( class1 == "Paladin" ) ) ) and ( autostate1==1 ) and ( autostate2==nil ) and ( UnitCanAttack("player","mouseover") ) ) then TogglePetAutocast(
D);TogglePetAutocast(
C); TargetUnit("mouseover");PetAttack();TargetLastTarget(); else if ( ( ( not ( class1 == "Druid" ) ) and ( not ( class1 == "Shaman" ) ) and ( not ( class1 == "Paladin" ) ) ) and ( autostate1==1 ) and ( autostate2==1 ) and ( UnitCanAttack("player","mouseover") ) ) then TogglePetAutocast(
D); TargetUnit("mouseover");PetAttack();TargetLastTarget(); else if ( ( ( not ( class1 == "Druid" ) ) and ( not ( class1 == "Shaman" ) ) and ( not ( class1 == "Paladin" ) ) ) and ( autostate1==nil ) and ( autostate2==nil ) and ( UnitCanAttack("player","mouseover") ) ) then TargetUnit("mouseover"); TogglePetAutocast(
C); PetAttack(); TargetLastTarget(); else if ( ( ( not ( class1 == "Druid" ) ) and ( not ( class1 == "Shaman" ) ) and ( not ( class1 == "Paladin" ) ) ) and ( autostate1==nil ) and ( autostate2==1 ) and ( UnitCanAttack("player","mouseover") ) ) then TargetUnit("mouseover"); PetAttack(); TargetLastTarget(); else if ( ( ( class2 == "Druid" ) or ( class2 == "Shaman" ) or ( class2 == "Paladin" ) ) and ( autostate1==nil ) and ( autostate2==1 ) and ( UnitCanAttack("player","target") ) ) then TogglePetAutocast(
D);TogglePetAutocast(
C);PetAttack(); else if ( ( ( class2 == "Druid" ) or ( class2 == "Shaman" ) or ( class2 == "Paladin" ) ) and ( autostate1==nil ) and ( autostate2==nil ) and ( UnitCanAttack("player","target") ) ) then TogglePetAutocast(
D);PetAttack(); else if ( ( ( class2 == "Druid" ) or ( class2 == "Shaman" ) or ( class2 == "Paladin" ) ) and ( autostate1==1 ) and ( autostate2==1 ) and ( UnitCanAttack("player","target") ) ) then TogglePetAutocast(
C);PetAttack(); else if ( ( ( class2 == "Druid" ) or ( class2 == "Shaman" ) or ( class2 == "Paladin" ) ) and ( autostate1==1 ) and ( autostate2==nil ) and ( UnitCanAttack("player","target") ) ) then PetAttack(); else if ( ( ( not ( class2 == "Druid" ) ) and ( not ( class2 == "Shaman" ) ) and ( not ( class2 == "Paladin" ) ) ) and ( autostate1==1 ) and ( autostate2==1 ) and ( UnitCanAttack("player","target") ) ) then TogglePetAutocast(
D); PetAttack(); else if ( ( ( not ( class2 == "Druid" ) ) and ( not ( class2 == "Shaman" ) ) and ( not ( class2 == "Paladin" ) ) ) and ( autostate1==1 ) and ( autostate2==nil ) and ( UnitCanAttack("player","target") ) ) then TogglePetAutocast(
D); TogglePetAutocast(
C);PetAttack(); else if ( ( ( not ( class2 == "Druid" ) ) and ( not ( class2 == "Shaman" ) ) and ( not ( class2 == "Paladin" ) ) ) and ( autostate1==nil ) and ( autostate2==nil ) and ( UnitCanAttack("player","target") ) ) then TogglePetAutocast(
C);PetAttack(); else if ( ( ( not ( class2 == "Druid" ) ) and ( not ( class2 == "Shaman" ) ) and ( not ( class2 == "Paladin" ) ) ) and ( autostate1==nil ) and ( autostate2==1 ) and ( UnitCanAttack("player","target") ) ) then PetAttack(); else PetAttack(); end end end end end end end end end end end end end end end end end;
Call:
/script ScorpidSolver();
-----------------------------------------------------------------------------------------------------------------------------------
How to set this stuff:
A - index of Scorpid Poison in pet's spellbook. In my case it's 6.
B - index of Claw in pet's spellbook. In my case it's 2.
C - index of Claw at the PetAuctionBar. In my case it's 4.
D - index of Scorpid Poison at the PetAuctionBar. In my case it's 6.
Replace all variables in extension to set it on.
------------------------------------------------------------------------------------------------------------------------------------
Summary:
-If mouseover exists pet will attack mousover. Otherwise it will attack target.
-If current pet target is a druid, shaman or paladin - claw will be set off and scorpid poison will be set on(we set off claw because it has bigger autocast priority and because all we need is as much stacks as possible). Otherwise - the reverse: claw will be set on and scorpid poison will be set off.
##################################################################################
Okay, we have a great protection from dispel. Dispeller must dispel annoying stacks, he must waste his GCDs and waste mana for dispel, otherwise he'll lose all his mana because of Viper Sting. So now we need some Viper Sting plague, something smart and convenient.
Extension(requires SuperMacro):
function ViperStingSolver() x1=UnitMana("mouseover"); x2=UnitMana("target"); x3=UnitMana("player");if ( (UnitCanAttack("player","mouseover") ) and (x1>700) and (x3>=206) ) then TargetUnit("mouseover");CastSpellByName("Viper Sting(Rank 3)");TargetLastTarget(); else if ( (UnitCanAttack("player","mouseover") ) and (x1<=700) and (x1>500) and (x3>=168) ) then TargetUnit("mouseover");CastSpellByName("Viper Sting(Rank 2)");TargetLastTarget(); else if ( (UnitCanAttack("player","mouseover") ) and (x1<=500) and (x3>=129) ) then TargetUnit("mouseover");CastSpellByName("Viper Sting(Rank 1)");TargetLastTarget(); else if ( (UnitCanAttack("player","target") ) and (x2>700) and (x3>=206) ) then CastSpellByName("Viper Sting(Rank 3)"); else if ( (UnitCanAttack("player","target") ) and (x2<=700) and (x2>500) and (x3>=168) ) then CastSpellByName("Viper Sting(Rank 2)"); else CastSpellByName("Viper Sting(Rank 1)"); end end end end end end;
Call:
/script ViperStingSolver();
--------------------------------------------------------------------------------------------------------------------------------
Summary:
-If mouseover exists the Viper Sting will be launched in mouseover. Otherwise it will be launched in target.
-Macro optimizes rank of Viper Sting, considering mouseover's or target's amount of mana and your amount of mana. Since I am using 2\5 Efficiency, you may calibrate the values in this macro for your build.
Now go drain some paladins!
Have fun.