My Prot warrior 1 button macro.
There's a few talents and spells that it doesn't use, but I haven't optimized it when I dinged 90 yet.
If there's any requests that you want added in, tell me and I will (can be pretty much anything that isn't in it yet)
Macro named "Single"
Code:
/run a=IsUsableSpell; b=GetSpellCooldown; c=UnitPower; d=UnitHealth; dMax=UnitHealthMax; e=UnitBuff f=CastSpellByName; g=UnitDebuff; h=IsSpellInRange; uci=UnitCastingInfo; p="player"; t="target"; ss="Shield Slam"; R="Revenge"; bs="Battle Shout"; wb="Weakened Blows"; cs="Commanding Shout"; tc="Thunder Clap"; dv="Devastate"; wa="Weakened Armor"; hs="Heroic Strike"; sb="Shield Block"; er="Enraged Regeneration"; pm="Pummel"; ch="Charge"; ls="Last Stand"; vr="Victory Rush"; ht="Heroic Throw"; sw="Shield Wall"; cl="Cleave"; shw="Shockwave"; br="Berserker Rage"; ds="Demoralizing Shout"; um="Ultimatum";
/run if c(p)<10 and a(br)==1 and b(br)==0 and h(ss, t)==1 then f(br) elseif d(p)/dMax(p)<0.80 and a(vr)==1 and b(vr)==0 and h(vr, t)==1 then f(vr) elseif d(p)/dMax(p)<0.75 and a(ds)==1 and b(ds)==0 and h(ss, t)==1 then f(ds) elseif d(p)/dMax(p)<0.70 and not e(p, er) and c(p)>29 and a(er)==1 and b(er)==0 then f(er) elseif d(p)/dMax(p)<0.60 and not e(p, sb) and c(p)>59 and a(sb)==1 and b(sb)==0 then f(sb) elseif d(p)/dMax(p)<0.50 and a(sw)==1 and b(sw)==0 then f(sw) elseif d(p)/dMax(p)<0.40 and a(ls)==1 and b(ls)==0 then f(ls) end
/run if a(ch)==1 and b(ch)==0 and h(ch, t)==1 then f(ch) elseif uci("target") and a(pm)==1 and b(pm)==0 and h(ss, t)==1 then f(pm) elseif a(ss)==1 and b(ss)==0 and c("player")<90 and h(ss, t)==1 then f(ss) elseif a(R)==1 and b(R)==0 and h(ss, t)==1 and c("player")<90 then f(R) elseif c("player")>89 and a(hs)==1 and h(ss, t)==1 and b(hs)==0 then f(hs) elseif c("player")<40 and a(bs)==1 and h(ht, t)==1 and b(bs)==0 then f(bs) elseif not g("target", wb) and a(tc)==1 and b(tc)==0 and h(ss, t)==1 then f(tc) elseif a(dv)==1 and b(dv)==0 and h(ss, t)==1 then f(dv) elseif a(ht)==1 and b(ht)==0 then f(ht) end
Format:
Survival -
If under 10 rage, cast Berserker Rage
If under 80% hp, cast Victory Rush
If under 75% hp, cast Demoralizing Shout
If under 70% hp, cast Enraged Regeneration
If under 60% hp, cast Shield Block
If under 50% hp, cast Shield Wall
If under 40% hp, cast Last Stand
Single-
If in range of Charge (out of range of melee abilities), cast Charge
If target is casting, cast Pummel.
Cast Shield Slam
Cast Revenge
If more than 89 rage (to ensure there's always rage enough for Shield Barrier and Shield Block), cast Heroic Strike
If under 40 rage, cast Battle Shout
If Weakened Blows isn't applied to target, cast Thunder Clap
Cast Devastate
Cast Heroic Throw
AoE-macro
Code:
/run a=IsUsableSpell; b=GetSpellCooldown; c=UnitPower; d=UnitHealth; dMax=UnitHealthMax; e=UnitBuff f=CastSpellByName; g=UnitDebuff; h=IsSpellInRange; uci=UnitCastingInfo; p="player" t="target" ss="Shield Slam"; R="Revenge"; bs="Battle Shout"; wb="Weakened Blows"; cs="Commanding Shout"; tc="Thunder Clap"; dv="Devastate"; wa="Weakened Armor"; hs="Heroic Strike"; sb="Shield Block"; er="Enraged Regeneration"; pm="Pummel"; ch="Charge"; ls="Last Stand"; vr="Victory Rush"; ht="Heroic Throw"; sw="Shield Wall"; cl="Cleave"; shw="Shockwave"; br="Berserker Rage"; ds="Demoralizing Shout"; um="Ultimatum";
/run if e(p, um) and a(cl)==1 and b(cl)==0 and h(cl, t)==1 then f(cl) elseif a(shw)==1 and h(ss, t)==1 and b(shw)==0 then f(shw) elseif a(tc)==1 and h(ss, t)==1 and b(tc)==0 then f(tc) elseif c(p)>89 and a(cl)==1 and b(cl)==0 and h(cl, t)==1 then f(cl) else RunMacro("Single") end
(this one redirects to "single" after it's casted cleave, shockwave and thunderclap)
Cast Cleave if Ultimatum
Cast Shockwave
Cast Thunderclap
If more than 89 rage, Cast Cleave
RunMacro Single
You can also request macros but I'm gonna need you to fill out the "Format" thingy like I did.