Warlock Macros
Amplify Curse
Amplify Curse if cooldown is ready or Fear
/run local c,s=CastSpellByName,"Amplify Curse";local i=nil;for j=1,180 do local n=GetSpellName(j,BOOKTYPE_SPELL);if n and strfind(n,s) then i=j;break;end end if i then if GetSpellCooldown(i,BOOKTYPE_SPELL)<1 then c(s)else c("Curse of Agony")end end
Banish
Says what raid mark target you're Banishing
/run i=GetRaidTargetIndex("target");s={"Star","Circle","Diamond","Green","Moon","Square","Cross","Skull"};if UnitName("target") and i then SendChatMessage("Banishing "..s[i],"SAY",nil); end
Banish / Fear
/run local CT = UnitCreatureType("target") if CT == "Demon" or CT == "Elemental" then CastSpellByName("Banish") else CastSpellByName("Fear") end
Castsequence
Siphon Life, CoA, Corruption
/run s={"Siphon Life","Curse of Agony","Corruption"} if not q then q=1 end CastSpellByName(s[q]) q=q+1 if q>table.getn(s) then q=1 end
Siphon Life, CoA, Corruption, Immolate
/run local _gspells = { "Siphon Life", "Curse of Agony", "Corruption", "Immolate"} if GetSpellCooldown(4,"BOOKTYPE_SPELL")==0 then _gi=_gi and _gi > 0 and _gi or 1 CastSpellByName(_gspells[_gi]) _gi = math.mod(1+_gi, 1+table.getn(_gspells))end
Detect Inivisibility
Buff Detect Inivisibility, Unending Breath
/run local _gspells = { "Detect Invisibility", "Unending Breath"} if GetSpellCooldown(4,"BOOKTYPE_SPELL")==0 then _gi=_gi and _gi > 0 and _gi or 1 CastSpellByName(_gspells[_gi]) _gi = math.mod(1+_gi, 1+table.getn(_gspells))end
Curse of Agony
Curse of Agony and pet attack. If not set to passive or currently attacking.
/run local _,_,_,_,isActive=GetPetActionInfo(10) if not isActive and not GetUnitName("pettarget") then PetAttack() end
/cast Curse of Agony
Curse of Tongues
Curse of Tongues if target got mana, else Curse of Weakness
/run if (UnitMana("target")>0) then CastSpellByName("Curse of Tongues") else CastSpellByName("Curse of Weakness") end
Death Coil
Death Coil if cooldown is ready or Fear
/run local c,s=CastSpellByName,"Death Coil";local i=nil;for j=1,180 do local n=GetSpellName(j,BOOKTYPE_SPELL);if n and strfind(n,s) then i=j;break;end end if i then if GetSpellCooldown(i,BOOKTYPE_SPELL)<1 then c(s)else c("Fear")end end
DoT Rotation
This macro will apply DoT debuffs when needed. There are the same drawbacks to this as Priest Mind Flay above that it can’t distinguish between your own debuffs and fellow warlocks. Still, its quite useful for grinding or when you’re the lone warlock in group. Another limitation is the length of the macro. In order to fit the 255 character limit the debuff names have to be shortened, this could cause conflicts in case a debuff with a similar name is already applied. Example:
Curse of Agony = Spell_Shadow_CurseOfSargeras
Corruption = Spell_Shadow_AbominationExplosion
Siphon Life = Spell_Shadow_Requiem
Order Alternative a) 1) Corruption, 2) Curse of Agony, 3) Siphon Life
/run c=CastSpellByName function b(k)for i=1,16 do if strfind(tostring(UnitDebuff("target",i)),k)then return 1 end end end if not b("ionExp")then c("Corruption(Rank 6)")elseif not b("eOfSar")then c("Curse of Agony(Rank 6)")else c("Siphon Life(Rank 4)")end
Order alternative b) 1) Siphon Life, 2) Corruption, 3) Curse of agony
/run c=CastSpellByName function b(k)for i=1,16 do if strfind(tostring(UnitDebuff("target",i)),k)then return 1 end end end if not b("w_Requ")then c("Siphon Life(Rank 4)")elseif not b("ionExp")then c("Corruption(Rank 6)")else c("Curse of Agony(Rank 6)")end
Order alternative c) 1) Siphon Life, 2) Curse of agony, 3) Corruption
/run c=CastSpellByName function b(k)for i=1,16 do if strfind(tostring(UnitDebuff("target",i)),k)then return 1 end end end if not b("w_Requ")then c("Siphon Life(Rank 4)")elseif not b("eOfSarg")then c("Curse of Agony(Rank 6)")else c("Corruption(Rank 6)")end
Drain Life
Using Drain Life repeatedly is a DPS loss because of the way the spell works, so you need this complicated macro to gain an extra tick of the spell
/run local f=CnlSpam if not f then f=CreateFrame("Frame")local s,r="SPELLCAST_CHANNEL_ST",f.RegisterEvent r(f,s.."ART")r(f,s.."OP")f:SetScript("OnEvent",function()this.c=event~=s.."OP"end)CnlSpam=f end if not f.c then CastSpellByName("Drain Life")end
Drain Mana
Spammable Drain Mana
/run if not CastingBarFrame.channeling then CastSpellByName("Drain Mana") end
Drain Soul
Drain Soul, pet passive, delete Soul Shard
/cast Drain Soul(Rank 1)
/run PetPassiveMode()local a=GetBagName(4); if a=="Core Felcloth Bag" or a=="Felcloth Bag" or a=="Soul Pouch" or a=="Box of Souls" or a=="Small Soul Pouch" then PickupContainerItem(4,GetContainerNumSlots(4))DeleteCursorItem()end
Enslave Demon
Enslave demon if you don't have yet or attack and use the demons abilities if you have.<syntaxhighlight lang="lua"> /run if not HasPetUI() then CastSpellByName("Enslave Demon");end CastPetAction(1);CastPetAction(4);CastPetAction(5);PetAttack() </syntaxhighlight>
Healthstone
Use any Healthstone/Healing Potion
/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Healthstone") or strfind(n,"Healing Potion"))then UseContainerItem(b,s,1)end end end
Create/use Healthstone
/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Healthstone"))then UseContainerItem(b,s,1)end end end
/cast Create Healthstone (Major)()
Trade Healthstone
/run for b=0,4 do for s=1,GetContainerNumSlots(b,s) do local n=GetContainerItemLink(b,s) if n and string.find(n,"Healthstone") then PickupContainerItem(b,s); DropItemOnUnit("target"); AcceptTrade(); break; end; end; end
Rain of Fire
Spammable Rain of Fire
/run if not SpellIsTargeting() and not CastingBarFrame.channeling then CastSpellByName("Rain of Fire")end
Life Tap
Life Tap/Demon Armor
/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Spell_Shadow_RagingScream" then x=1 end i=i+1 end if x==0 then CastSpellByName("Demon Armor") else CastSpellByName("Life Tap")end
Melee weaving
Shoot (Mouse wheel up)
/run for i=1,120 do if IsAutoRepeatAction(i) then return end end CastSpellByName("Shoot")
Attack (Mouse wheel down)
/run for i=1,120 do if IsCurrentAction(i) then return end end if CheckInteractDistance("target", 3) then CastSpellByName("Attack")end
Shadowburn
Tagging closest mob
/run ClearTarget();
/run TargetNearestEnemy()
/run for z=1,172 do if IsAttackAction(z)then if not IsCurrentAction(z)then UseAction(z);end;end;end;
/cast Shadowburn
Siphon Life
Siphon Life / target next enemy
/run z=0;for i=1,16 do GameTooltipTextLeft1:SetText(nil);GameTooltip:SetUnitDebuff("target",i);if GameTooltipTextLeft1:GetText()=="Siphon Life" then z=1;end;end;if z==1 then TargetNearestEnemy();else CastSpellByName("Siphon Life");end
Summoning
Summoning if friendly target, else Banish
/run if UnitIsFriend("player", "target") then SendChatMessage("Summoning %t" ,"emote") CastSpellByName("Ritual of Summoning") else CastSpellByName("Banish")end
Summoning and announce who in party / raid
/script local a = " - 2 people pls click the portal."; local b = UnitName("target"); if (GetNumRaidMembers() > 0) then SendChatMessage("Summoning "..b..a, "RAID"); else SendChatMessage("Summoning "..b..a, "PARTY"); end
/cast Ritual of Summoning
Shadow Bolt
Shadow Bolt + Top Trinket
/run if UnitAffectingCombat("player") and GetInventoryItemCooldown("player", 13)==0 then UseInventoryItem(13)CastSpellByName("Shadow Bolt")else CastSpellByName("Shadow Bolt")end
Curse of Shadow, else Shadow Bolt
/run local i,x=1,0 while UnitDebuff("target",i) do if UnitDebuff("target",i)=="Interface\\Icons\\Spell_Shadow_CurseOfAchimonde" then x=1 end i=i+1 end if x==0 then CastSpellByName("Curse of Shadow") else CastSpellByName("Shadow Bolt")end
Shoot
Start auto Shoot with the wand
/run for i=1,120 do if IsAutoRepeatAction(i) then return end end CastSpellByName("Shoot")
Soul Fire
Soul Fire/Curse of the Elements
/run local i,x=1,0 while UnitDebuff("target",i) do if UnitDebuff("target",i)=="Interface\\Icons\\Spell_Shadow_ChillTouch" then x=1 end i=i+1 end if x==0 then CastSpellByName("Curse of the Elements") else CastSpellByName("Soul Fire") end
Soul Fire if off cooldown else Searing Pain<syntaxhighlight lang="lua">
/run local c,s=CastSpellByName,"Soul Fire";local i=nil;for j=1,180 do local n=GetSpellName(j,BOOKTYPE_SPELL);if n and strfind(n,s) then i=j;break;end end if i then if GetSpellCooldown(i,BOOKTYPE_SPELL)<1 then c(s)else c("Searing Pain")end end
</syntaxhighlight>
Soulstone
Create Major Soulstone, else use any Soulstone
/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Soulstone"))then UseContainerItem(b,s,1)end end end
/cast Create Soulstone (Major)()
Felstone
Create Felstone, use Felstone<syntaxhighlight lang="lua"> /run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Felstone"))then UseContainerItem(b,s,1)end end end /cast Create Felstone </syntaxhighlight>
Wrathstone
Create Wrathstone, use Wrathstone<syntaxhighlight lang="lua"> /run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Wrathstone"))then UseContainerItem(b,s,1)end end end /cast Create Wrathstone </syntaxhighlight>
Firestone
Create Firestone, use Firestone<syntaxhighlight lang="lua"> /run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Firestone"))then UseContainerItem(b,s,1)end end end /cast Create Firestone </syntaxhighlight>
Spellstone
Create Spellstone, use Spellstone<syntaxhighlight lang="lua"> /run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Spellstone"))then UseContainerItem(b,s,1)end end end /cast Create Spellstone </syntaxhighlight>
Soul Shard
This should only delete Soul Shards and you can specify a number of stacks you wish to keep (i.e. n=>3). Use at own risk.<syntaxhighlight lang="lua"> /run local n=0; for i=0, 4 do for j=1, GetContainerNumSlots(i) do local x=GetContainerItemLink(i, j); if x and string.find(x, "item:6265:") then if n>=3 then PickupContainerItem(i, j); DeleteCursorItem() else n=n+1 end end end end </syntaxhighlight>