diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/Chat/Chat messages.txt b/Chat/Chat messages.txt new file mode 100644 index 0000000..9126c94 --- /dev/null +++ b/Chat/Chat messages.txt @@ -0,0 +1,21 @@ +Print a string of your current target to chat log + +/run DEFAULT_CHAT_FRAME:AddMessage("Hello world! my target name is "..GetUnitName("target")) + + + +If your current target is a player then send a chat whisper to him/her + +/run if UnitExists("target") then SendChatMessage("This is a test but insert whatever you are casting here","WHISPER",nil,UnitName("target")) end + + + +The following will send your current location into PARTY chat: + +/run local x,y=GetPlayerMapPosition("player") SendChatMessage("I'm at "..GetZoneText().." - "..GetMinimapZoneText().." - "..math.floor((x*100)+0,5).." "..math.floor((y*100)+0,5),"PARTY") + + + +The following will do the same into BATTLEGROUND chat: + +/run local x,y=GetPlayerMapPosition("player") SendChatMessage("I'm at "..GetZoneText().." - "..GetMinimapZoneText().." - "..math.floor((x*100)+0,5).." "..math.floor((y*100)+0,5),"BATTLEGROUND") \ No newline at end of file diff --git a/Chat/Whisper.txt b/Chat/Whisper.txt new file mode 100644 index 0000000..5074a21 --- /dev/null +++ b/Chat/Whisper.txt @@ -0,0 +1,3 @@ +Whisper hi! to target (doesn't whisper yourself) + +/run if not UnitIsUnit("player","target") then SendChatMessage("hi!","WHISPER",nil,UnitName("target"))end \ No newline at end of file diff --git a/Druid/Aquatic Travel Form.txt b/Druid/Aquatic Travel Form.txt new file mode 100644 index 0000000..ffbfd30 --- /dev/null +++ b/Druid/Aquatic Travel Form.txt @@ -0,0 +1,8 @@ +Travel Form + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Druid_TravelForm" then x=1 end i=i+1 end if x==0 then CastSpellByName("Travel Form") else end + + +Aquatic / Travel Form + +/run UIErrorsFrame:UnregisterEvent"UI_ERROR_MESSAGE" for i = 2, GetNumShapeshiftForms(), 2 do local _, _, active = GetShapeshiftFormInfo(i) if not active then CastShapeshiftForm(i) end if i == 2 then UIErrorsFrame:RegisterEvent"UI_ERROR_MESSAGE" end end \ No newline at end of file diff --git a/Druid/Auto attack.txt b/Druid/Auto attack.txt new file mode 100644 index 0000000..b12ee8a --- /dev/null +++ b/Druid/Auto attack.txt @@ -0,0 +1,35 @@ +Spammable Auto Attack Macro w/ Melee and Ranged swapping (put Shoot or Auto Shot into action slot 1) + +/run if CheckInteractDistance("target", 3) and (not PlayerFrame.inCombat) then AttackTarget() elseif not IsAutoRepeatAction(1) then CastSpellByName("Auto Shot OR Shoot") end + +Replace Auto Shot or Shoot with your classes ranged auto attack + + + +Start Melee Attack + +/script if (not PlayerFrame.inCombat) then AttackTarget() end + + + +Auto Shot + +/script if not IsAutoRepeatAction(xx) then CastSpellByName("Auto Shot"); end + + + +Auto attack + +/run for z=1,172 do if IsAttackAction(z)then if not IsCurrentAction(z)then UseAction(z);end;end;end; + + + +Melee shoot + +/script local _,_,i=strfind(GetInventoryItemLink("player",18),"\124Hitem:(%d+)")local _,_,_,_,_,p=GetItemInfo(i)local t={}t.Bows="Bow"t.Guns="Gun"t.Crossbows="Crossbow"t.Thrown="Throw"CastSpellByName((string.gsub(t[p],"^([^T])","Shoot %1"))) + + + +Shoot (wand) Replace X with the Slot id of the skill on your hotbar + +/script if not IsAutoRepeatAction(X) then CastSpellByName("Shoot"); end \ No newline at end of file diff --git a/Druid/Bear.txt b/Druid/Bear.txt new file mode 100644 index 0000000..5842731 --- /dev/null +++ b/Druid/Bear.txt @@ -0,0 +1,15 @@ +Bear Form from any form, 2 clicks. + +/script local s,_ for i=1,5 do _,_,s=GetShapeshiftFormInfo(i)if s then CastShapeshiftForm(i)break end end if not s then CastShapeshiftForm(1) end + + + +Spammable bear form/feral charge + +/run local _, _, active = GetShapeshiftFormInfo(1) if not active or IsControlKeyDown() then CastShapeshiftForm(1) else CastSpellByName("Feral Charge")end + + + +Switch from any stance to Bear form, cast Bush + +/run local _, _, active = GetShapeshiftFormInfo(1) if not active or IsControlKeyDown() then for i = 2, 4 do _, _, active = GetShapeshiftFormInfo(i) if active then CastShapeshiftForm(i) return end end CastShapeshiftForm(1) else CastSpellByName"Bash" end \ No newline at end of file diff --git a/Druid/Brilliant Oil.txt b/Druid/Brilliant Oil.txt new file mode 100644 index 0000000..e6b3015 --- /dev/null +++ b/Druid/Brilliant Oil.txt @@ -0,0 +1,8 @@ +Enchant Brilliant Mana Oil on weapon + +/run for b=0,4 do for s=1,18 do local i=GetContainerItemLink if not(i(b,s)==nil)then if strfind(i(b,s), "Brilliant Mana Oil")then UseContainerItem(b,s)PickupInventoryItem(16)ReplaceEnchant()end end end end + + +Enchant Brilliant Wizard Oil on weapon + +/run for b=0,4 do for s=1,18 do local i=GetContainerItemLink if not(i(b,s)==nil)then if strfind(i(b,s), "Brilliant Wizard Oil")then UseContainerItem(b,s)PickupInventoryItem(16)ReplaceEnchant()end end end end \ No newline at end of file diff --git "a/Druid/Buff r\357\273\277ank depending on target's level .txt" "b/Druid/Buff r\357\273\277ank depending on target's level .txt" new file mode 100644 index 0000000..f0eeed5 --- /dev/null +++ "b/Druid/Buff r\357\273\277ank depending on target's level .txt" @@ -0,0 +1,21 @@ +Regrowth + +/script r=9;l={12,18,24,30,36,42,48,54,60};if not UnitIsFriend("player","target")thenTargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) thenCastSpellByName("Regrowth(Rank "..i..")");break;end;end + + + +Rejuvenation + +/script r=10;l={4,10,16,22,28,34,40,46,52,58};if not UnitIsFriend("player","target")thenTargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) thenCastSpellByName("Rejuvenation(Rank "..i..")");break;end;end + + + +Mark of the Wild + +/script r=7;l={1,10,20,30,40,50,60};if not UnitIsFriend("player","target")thenTargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) thenCastSpellByName("Mark of the Wild(Rank "..i..")");break;end;end + + + +Thorns + +/script r=6;l={6,14,24,34,44,54};if not UnitIsFriend("player","target")thenTargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) thenCastSpellByName("Thorns(Rank "..i..")");break;end;end \ No newline at end of file diff --git a/Druid/Caster form.txt b/Druid/Caster form.txt new file mode 100644 index 0000000..de7f06d --- /dev/null +++ b/Druid/Caster form.txt @@ -0,0 +1,9 @@ +Caster Form + +/run for i = 1, GetNumShapeshiftForms() do local _, _, active = GetShapeshiftFormInfo(i) if active then CastShapeshiftForm(i) return end end + + + +Unshift + +/run for i=1, GetNumShapeshiftForms() do _, name, active = GetShapeshiftFormInfo(i) if( active ~= nil ) then CastShapeshiftForm(i) break end end \ No newline at end of file diff --git a/Druid/Cat.txt b/Druid/Cat.txt new file mode 100644 index 0000000..e539dcb --- /dev/null +++ b/Druid/Cat.txt @@ -0,0 +1,58 @@ +Spammable cat form + +/run local _, _, active = GetShapeshiftFormInfo(3) if not active then CastShapeshiftForm(3)end + + + +Cat Form / Prowl + +/run local _, _, active = GetShapeshiftFormInfo(3) if not active or IsControlKeyDown() then CastShapeshiftForm(3) else CastSpellByName"Prowl" end + + + +One button pounce/rake + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Ambush" then x=1 end i=i+1 end if x==1 then CastSpellByName("Pounce") else CastSpellByName("Rake")end + + + +One button Rake/Claw + +/run local i,x=1,0 while UnitDebuff("target",i) do if UnitDebuff("target",i)=="Interface\\Icons\\Ability_Druid_Disembowel" then x=1 end i=i+1 end if x==0 then CastSpellByName("Rake") else CastSpellByName("Claw")end + + + +One button Prowl/Ravage + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Ambush" then x=1 end i=i+1 end if x==0 then CastSpellByName("Prowl") else CastSpellByName("Ravage")end + + + +One button ravage/shred + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Ambush" then x=1 end i=i+1 end if x==1 then CastSpellByName("Ravage") else CastSpellByName("Shred")end + + + +Rip/rake + +/run if ( GetComboPoints() >= 3 ) then CastSpellByName("Rip"); else if (UnitMana("player") >= 40 ) then CastSpellByName("Rake")end end + + + +Powershift/shred + +/script u=UnitMana('Player'); c=CastSpellByName; f=UnitPowerType("Player"); if (u<=30) and (f==3) then c"Cat Form"; elseif (f==0) then c"Cat Form"; end; +/cast Shred + + + +Unshift + cat + dash + +/run local f=0 for i=1,GetNumShapeshiftForms()do if({GetShapeshiftFormInfo(i)})[3]then f=i end end if f ~= 0 and f ~= 3 then CastShapeshiftForm(f) else if f == 3 then CastSpellByName("Dash") else CastShapeshiftForm(3) end end + + + +Unshift + cat + prowl + +/run local f=0 for i=1,GetNumShapeshiftForms()do if({GetShapeshiftFormInfo(i)})[3]then f=i end end if f ~= 0 and f ~= 3 then CastShapeshiftForm(f) else if f == 0 then CastShapeshiftForm(3) end end /cast [stance:3, nostealth] Prowl \ No newline at end of file diff --git a/Druid/Dismount shift.txt b/Druid/Dismount shift.txt new file mode 100644 index 0000000..d10b0b0 --- /dev/null +++ b/Druid/Dismount shift.txt @@ -0,0 +1,39 @@ +1. Dismount macro - not very useful by itself, but is used for other macros. I placed it into slot №27, see the action bar slot reference: + +ActionBar page 1: slots 1 to 12 +ActionBar page 2: slots 13 to 24 +ActionBar page 3 (Right ActionBar): slots 25 to 36 +ActionBar page 4 (Right ActionBar 2): slots 37 to 48 +ActionBar page 5 (Bottom Right ActionBar): slots 49 to 60 +ActionBar page 6 (Bottom Left ActionBar): slots 61 to 72 + + +/run local i=0 g=GetPlayerBuff while not (g(i) == -1) do if(strfind(GetPlayerBuffTexture(g(i)),"Mount"))then CancelPlayerBuff(g(i)) end i=i+1 end + +2. Dismount + switch to caster form - somewhat useful, but still mainly used by other macros. I placed it into slot №37. + +/run UseAction(27) +/run for i=1, GetNumShapeshiftForms() do _, name, active = GetShapeshiftFormInfo(i) if( active ~= nil ) then CastShapeshiftForm(i) break end end + +3. Cat form. + +It will dismount/cancel any other form and then switch to the cat form, and if you're already there, it will activate "Track Humanoids". + +/script c=CastSpellByName; f=UnitPowerType("Player"); if not (f==3) then UseAction(37); else c"Track Humanoids"; end; if (f==0) then c"Cat Form"; end; + +4. Bear form. +Same as above, but for dire bear form. You have to edit it if you only have normal bear form. + +/script c=CastSpellByName; f=UnitPowerType("Player"); if not (f==1) then UseAction(37); else end; if (f==0) then c"Dire Bear Form"; end; + +5. Travel form. + +Unlike other macros, it won't cancel any other form, so you have to use it while you're in caster form already. + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Druid_TravelForm" then x=1 end i=i+1 end if x==0 then CastSpellByName("Travel Form") else end + +You can place all those macros whenever you want, just make sure that commands like UseAction() link to a correct macro. + + + +Made by Oakenlix \ No newline at end of file diff --git a/Druid/Druid macros.txt b/Druid/Druid macros.txt new file mode 100644 index 0000000..005a721 --- /dev/null +++ b/Druid/Druid macros.txt @@ -0,0 +1,92 @@ +Innervate and whisper to target + +/cast Innervate +/run if UnitExists"target"then SendChatMessage("flavor text","WHISPER",nil,UnitName"target")end + + + + +Rebirth and yell + +/cast Rebirth(Rank 5) +/y Casting Rebirth on %T! + + + + +Nature's Swiftness and Max Healing Touch combo + +/cast Nature's Swiftness +/cast Healing Touch(Rank 11) + + + + +Barkskin with auto remove + +/run local i=0 g=GetPlayerBuff while not (g(i) == -1) do if(strfind(GetPlayerBuffTexture(g(i)),"Spell_Nature_StoneClawTotem"))then CancelPlayerBuff(g(i)) end i = i + 1; end; CastSpellByName("Barkskin") + +Clicking once casts Barkskin. Clicking again will remove it. + + + + +Faerie Fire in any form + +/script i=1;m=0;while(UnitBuff("player",i)~=nil) do if(strfind(UnitBuff("player",i),"Form")~=nil) then m=1; end;i=i+1;end; c=CastSpellByName; if(m==1) then c("Faerie Fire (Feral)()");else c("Faerie Fire(Rank 4)");end; + + + + +Bear, Cat, and Shapeshift Macros + + +Enrage with auto remove + +/run local i=0 g=GetPlayerBuff while not (g(i) == -1) do if(strfind(GetPlayerBuffTexture(g(i)),"Ability_Druid_Enrage"))then CancelPlayerBuff(g(i)) end i=i+1 end CastSpellByName("Enrage") + +Clicking once casts Enrage. Clicking again will remove it. + + + + +Ravage and Shred auto select + +/script i=1;m=0;while(UnitBuff("player",i)~=nil) do if(strfind(UnitBuff("player",i),"Ability_Ambush")~=nil) then m=1; end;i=i+1;end; c=CastSpellByName; if(m==1) then c("Ravage(rank 4)");else c("Shred(rank 5)");end; + + + + +Claw and Ferocious Bite combo + +/run if GetComboPoints()>=4 then CastSpellByName("Ferocious Bite") else CastSpellByName("Claw") end + +Change 4 to 5 if you want it to build to 5 combo points before Ferocious Bite casts + + + +Shred and Ferocious Bite combo + +/run if GetComboPoints()>=4 then CastSpellByName("Ferocious Bite") else CastSpellByName("Shred") end + +Change 4 to 5 if you want it to build to 5 combo points before Ferocious Bite casts + + + +Shred and Powershifting + +/cast Shred(Rank 5) +/script u=UnitMana('Player'); c=CastSpellByName; f=UnitPowerType("Player"); if (u<=30) and (f==3) then c"Cat Form"; elseif (f==0) then c"Cat Form"; end; + +Energy level is set to 30. Change to a different number for a different cutoff for when you shift to caster + + + +Shred, Ferocious Bite, and Powershifting one button brainless option + +/run if GetComboPoints()>=4 then CastSpellByName("Ferocious Bite") else CastSpellByName("Shred") end +/script u=UnitMana('Player'); c=CastSpellByName; f=UnitPowerType("Player"); if (u<=30) and (f==3) then c"Cat Form"; elseif (f==0) then c"Cat Form"; end; + + + +Made by Taladril \ No newline at end of file diff --git a/Druid/Faerie Fire.txt b/Druid/Faerie Fire.txt new file mode 100644 index 0000000..bb14eef --- /dev/null +++ b/Druid/Faerie Fire.txt @@ -0,0 +1,9 @@ +Feral Faerie Fire when shapeshifted, Faerie Fire if not + +/script i=1;m=0;while(UnitBuff("player",i)~=nil) do if(strfind(UnitBuff("player",i),"Form")~=nil) then m=1; end;i=i+1;end; c=CastSpellByName; if(m==1) then c("Faerie Fire (Feral)()");else c("Faerie Fire");end; + + + +Faerie Fire on targettarget if friendly target, else Faerie Fire + +/run if UnitCanAttack("player","target") == 1 then CastSpellByName("Faerie Fire")else TargetUnit("targettarget") CastSpellByName("Faerie Fire") TargetLastTarget() end \ No newline at end of file diff --git a/Druid/Feral Macros.txt b/Druid/Feral Macros.txt new file mode 100644 index 0000000..0ea5f93 --- /dev/null +++ b/Druid/Feral Macros.txt @@ -0,0 +1,42 @@ +Enrage + cancel buff + +The spell Enrage causes you to take more damage but is really nice when tanking if you’ve specced into it in talents. In order for it to be useful while tanking you have to remove the buff quickly enough. This is annoying when you have to click the buff with your mouse to cancel. This can be done quickly in one macro where you press it once to cast, and second to cancel the buff. + +/run local i=0 g=GetPlayerBuff while not (g(i) == -1) do if(strfind(GetPlayerBuffTexture(g(i)),"Ability_Druid_Enrage"))then CancelPlayerBuff(g(i)) end i=i+1 end CastSpellByName("Enrage") + + +Barkskin + cancel buff + +The spell Barkskin reduces damage taken but increases casting speed. Its useful if you accidentally catch aggro but can be dangerous when you need to heal, its a tradeoff. This macro helps you quickly cancel it. + +/run local i=0 g=GetPlayerBuff while not (g(i) == -1) do if(strfind(GetPlayerBuffTexture(g(i)),"Spell_Nature_StoneClawTotem"))then CancelPlayerBuff(g(i)) end i = i + 1; end; CastSpellByName("Barkskin") + + +Tiger’s Fury + Ravage combo spammable macro + +This macro will prevent accidentally overwriting Tiger’s Fury if its already active and also if it is active, attempt to use Ravage. + +/run i=0 m=0 c=CastSpellByName while not (GetPlayerBuff(i)==-1) do if (strfind(GetPlayerBuffTexture(GetPlayerBuff(i)),"Ability_Mount_JungleTiger")) then m=1 end i=i+1 end if m==0 then c("Tiger's Fury") else c("Ravage") end + + + +If you only want the Tiger’s Fury spammable without ravage you can get this one instead: + +/run i=0 m=0 c=CastSpellByName while not (GetPlayerBuff(i)==-1) do if (strfind(GetPlayerBuffTexture(GetPlayerBuff(i)),"Ability_Mount_JungleTiger")) then m=1 end i=i+1 end if m==0 then c("Tiger's Fury") end + + +Claw / Ferocious Bite spammable macro + +This macro serves as a replacement for your claw ability. When you have 5 combo points on your target it will cast Ferocious bite instead. + +/run if GetComboPoints()>=5 then CastSpellByName("Ferocious Bite") else CastSpellByName("Claw") end + + + +Same as above but with auto targeting + auto attack. + +/run if GetUnitName("target")==nil then TargetNearestEnemy() end if not IsCurrentAction(25) then UseAction(25) end if GetComboPoints()>=5 then CastSpellByName("Ferocious Bite") else CastSpellByName("Claw") end + + + +Made by Sandsten \ No newline at end of file diff --git a/Druid/Heal nearest friend.txt b/Druid/Heal nearest friend.txt new file mode 100644 index 0000000..d73e414 --- /dev/null +++ b/Druid/Heal nearest friend.txt @@ -0,0 +1,3 @@ +Heal friends in range who is low on hp(Set to react on < 90%) + +/script for i=1,40 do TargetNearestFriend(); if UnitHealth("target")/UnitHealthMax("target") < 0.9 then if UnitIsPlayer("target") then CastSpellByName("Healing Touch(Rank 3)"); end end end; TargetLastEnemy(); \ No newline at end of file diff --git a/Druid/Healing Macros.txt b/Druid/Healing Macros.txt new file mode 100644 index 0000000..bff88fc --- /dev/null +++ b/Druid/Healing Macros.txt @@ -0,0 +1,76 @@ +Faerie Fire spammable macro + +This will only cast if your current target is not already a victim to the spell. That way you can spam the spell without accidentally overwriting your fellow druids casting it. Always keep Faerie Fire up on raid bosses! This applies to the non-feral version. Don’t use this macro for casting Faerie Fire (Feral) from the feral talent tree. + +/run m=0 for i=1,40 do if(strfind(tostring(UnitDebuff("target",i)),"Spell_Nature_FaerieFire"))then m=1 end end if m==0 then CastSpellByName("Faerie Fire(Rank 4)") end + + +Combined Faerie Fire + Insect Swarm spammable macro + +The above can be compacted down into a combined macro for both Faerie Fire and Insect Swarm for resto druids: + +/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("e_FaerieF")then c("Faerie Fire(Rank 4)")elseif not b("e_InsectSw")then c("Insect Swarm(Rank 1)")end + + +Innervate overwrite prevention + +Allows you to check if Innervate is already active on your target. This does conflict with mage arcane power as it uses the same spell icon. It’s not a big issue though but keep it in mind. + +Really useful if you’re raiding together with several druids. Make sure that everyone use it and you will never waste an innervate again! + +/run n=0 for i=1,40 do if(strfind(tostring(UnitBuff("target",i)),"Spell_Nature_Lightning"))then n=1 end end if n==0 then CastSpellByName("Innervate")end + + + +Its also useful to combine with a whisper or a broadcast in your guild healing channel or raid chat. Unfortunately using LUA functions will far surpass the 255 character limit so just add this: + +/w %t <> you! +/5 <> %t! + + +Rejuvenation overwrite prevention macro + +Same as above but you can use this to spam heal your party/raid members without accidentally overwriting any active Rejuvenations heal over time buffs (HOTs). + +NOTE! It only works if you already have a target when clicking the spell. Clicking the spell first and then selecting your target wont work as this depends on checking initial conditions for any specific raidframe addon that you use. Know about this limitation and choose your target first. + +Rank 10 + +/run m=0 for i=1,40 do if(strfind(tostring(UnitBuff("target",i)),"Spell_Nature_Rejuvenation"))then m=1 end end if m==0 then CastSpellByName("Rejuvenation(Rank 10)") end + + + +Rank 4 + +/run m=0 for i=1,40 do if(strfind(tostring(UnitBuff("target",i)),"Spell_Nature_Rejuvenation"))then m=1 end end if m==0 then CastSpellByName("Rejuvenation(Rank 4)") end + + + +Rank 5 + +/run m=0 for i=1,40 do if(strfind(tostring(UnitBuff("target",i)),"Spell_Nature_Rejuvenation"))then m=1 end end if m==0 then CastSpellByName("Rejuvenation(Rank 5)") end + + +Rejuvenation / Swiftmend Combo + +Same as the above but instead of doing nothing when Rejuvenation is already active, it will cast Swiftmend (If you have learned it from the restoration talent tree) + +Rank 10 + +/run c=CastSpellByName m=0 for i=1,40 do if(strfind(tostring(UnitBuff("target",i)),"Spell_Nature_Rejuvenation"))then m=1 end end if m==0 then c("Rejuvenation(Rank 10)") else c("Swiftmend")end + + + +Rank 4 + +/run c=CastSpellByName m=0 for i=1,40 do if(strfind(tostring(UnitBuff("target",i)),"Spell_Nature_Rejuvenation"))then m=1 end end if m==0 then c("Rejuvenation(Rank 4)") else c("Swiftmend")end + + + +Rank 5 + +/run c=CastSpellByName m=0 for i=1,40 do if(strfind(tostring(UnitBuff("target",i)),"Spell_Nature_Rejuvenation"))then m=1 end end if m==0 then c("Rejuvenation(Rank 5)") else c("Swiftmend")end + + + +Made by Sandsten \ No newline at end of file diff --git a/Druid/Healing Touch.txt b/Druid/Healing Touch.txt new file mode 100644 index 0000000..c092696 --- /dev/null +++ b/Druid/Healing Touch.txt @@ -0,0 +1,15 @@ +Stopcast if target has more then 80%hp, else Healing Touch + +/script if CastingBarFrame:IsShown() and UnitHealth("target")/UnitHealthMax("target") > 0.8 then SpellStopCasting() elseif not CastingBarFrame:IsShown() then CastSpellByName("Healing Touch(Rank 6)") end + + + +Smart Touch + +/script r=10;H=UnitHealthMax("target")-UnitHealth("target");SR={140,350,640,1100,1500,1799,2004,2385,2600,3100};for i=r,1,-1 do if (H>(SR)) then CastSpellByName("Healing Touch(Rank "..i..")");break;end;end; + + + +Wrath/Healing Touch + +/run if UnitCanAttack("player","target") == 1 then CastSpellByName("Wrath") else CastSpellByName("Healing Touch") end \ No newline at end of file diff --git a/Druid/Hurricane.txt b/Druid/Hurricane.txt new file mode 100644 index 0000000..902b77a --- /dev/null +++ b/Druid/Hurricane.txt @@ -0,0 +1,3 @@ +Spammable Hurricane + +/run if not SpellIsTargeting() and not CastingBarFrame.channeling then CastSpellByName("Hurricane")end \ No newline at end of file diff --git a/Druid/Innervate.txt b/Druid/Innervate.txt new file mode 100644 index 0000000..c9cf31c --- /dev/null +++ b/Druid/Innervate.txt @@ -0,0 +1,20 @@ +This will Innervate weapon swap if you put your +spirit staff in the 1st slot of your backpack + +/script UseContainerItem(0,1) +/script TargetUnit("player") +/cast Innervate +/script TargetLastTarget() + + + +Innervate on yourself and retarget last target + +/script TargetUnit("player") +/cast Innervate +/script TargetLastTarget() + + + +No double-innervate (Useful for raids) + +/run t="target" p="player" b="Innervate" if (UnitIsFriend(p,t) and UnitManaMax(t)>200) then for i=1,16 do if UnitBuff(t,i) then if not string.find(UnitBuff(t,i), b) then CastSpellByName(b) end end end else ChatFrame1:AddMessage("Did not "..b.."!") end \ No newline at end of file diff --git a/Druid/Insect Swarm.txt b/Druid/Insect Swarm.txt new file mode 100644 index 0000000..35df708 --- /dev/null +++ b/Druid/Insect Swarm.txt @@ -0,0 +1,3 @@ +If missing cast Insect Swarm, else cast Moonfire + +/run local i,x=1,0 while UnitDebuff("target",i) do if UnitDebuff("target",i)=="Interface\\Icons\\Spell_Nature_InsectSwarm" then x=1 end i=i+1 end if x==0 then CastSpellByName("Insect Swarm") else CastSpellByName("Moonfire")end \ No newline at end of file diff --git a/Druid/Mark of the Wild.txt b/Druid/Mark of the Wild.txt new file mode 100644 index 0000000..7d2439f --- /dev/null +++ b/Druid/Mark of the Wild.txt @@ -0,0 +1,15 @@ +Adjust buff ranks due to target level + +/script Pre="Mark of the Wild(Rank " Sp={1,2,14,26,38,50} if (UnitLevel("target") ~= nil and UnitIsFriend("player","target")) then for i=5,1,-1 do if (UnitLevel("target") >= Sp) then CastSpellByName(Pre..i..")") return end end end + + + +Mark of the Wild, else Thorns + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Spell_Nature_Regeneration" then x=1 end i=i+1 end if x==0 then CastSpellByName("Mark of the Wild") else CastSpellByName("Thorns") end + + + +Mark of the Wild/Faerie Fire + +/run if UnitCanAttack("player","target") == 1 then CastSpellByName("Faerie Fire")else CastSpellByName("Mark of the Wild")end \ No newline at end of file diff --git a/Druid/Mob tagging.txt b/Druid/Mob tagging.txt new file mode 100644 index 0000000..5f8fe9e --- /dev/null +++ b/Druid/Mob tagging.txt @@ -0,0 +1,6 @@ +Moonfire closest mob + +/script ClearTarget(); +/run TargetNearestEnemy() +/run for z=1,172 do if IsAttackAction(z)then if not IsCurrentAction(z)then UseAction(z);end;end;end; +/cast Moonfire \ No newline at end of file diff --git a/Druid/Nature's Grace.txt b/Druid/Nature's Grace.txt new file mode 100644 index 0000000..065a4e0 --- /dev/null +++ b/Druid/Nature's Grace.txt @@ -0,0 +1,9 @@ +If buffed Nature's Grace cast HT4, else cast HT3 + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Spell_Nature_NaturesBlessing" then x=1 end i=i+1 end if x==0 then CastSpellByName("Healing Touch(Rank 3)") else CastSpellByName("Healing Touch(Rank 4)")end + + + +If buffed Nature's Grace cast HT3, else cast Regrowth 4 + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\Icons\Spell_Nature_NaturesBlessing" then x=1 end i=i+1 end if x==0 then CastSpellByName("Regrowth(Rank 4)") else CastSpellByName("Healing Touch(Rank 3)")end \ No newline at end of file diff --git a/Druid/Nature's Swiftness.txt b/Druid/Nature's Swiftness.txt new file mode 100644 index 0000000..63e1023 --- /dev/null +++ b/Druid/Nature's Swiftness.txt @@ -0,0 +1,18 @@ +Nature's Swiftness/Healing wave + +/script local x=0;for i=1,90 do if IsCurrentAction(i) then x=1 end end if x==0 then CastSpellByName("Nature's Swiftness");SpellStopCasting();CastSpellByName("Healing Touch") end + + + +Nature's Swiftness + Healing Touch - without global cooldown + +/cast Nature's Swiftness +/script SpellStopCasting(); +/cast Healing Touch(Rank 10) +/script if ( SpellIsTargeting() ) then SpellTargetUnit ("player"); end + + + +Nature's Swiftness, Wrath/Healing Touch + +/run CastSpellByName("Nature's Swiftness") if UnitCanAttack("player","target") == 1 then CastSpellByName("Wrath") else CastSpellByName("Healing Touch")end \ No newline at end of file diff --git a/Druid/Regrowth.txt b/Druid/Regrowth.txt new file mode 100644 index 0000000..1197013 --- /dev/null +++ b/Druid/Regrowth.txt @@ -0,0 +1,3 @@ +Unshift+Regrowth self/target + +/run local c,r,a,_=CastSpellByName,"Regrowth";for i=1,GetNumShapeshiftForms()do _,_,a=GetShapeshiftFormInfo(i)if(a)then CastShapeshiftForm(i)break end end if UnitIsFriend("player","target")then c(r)else c(r,1)end \ No newline at end of file diff --git a/Druid/Rejuvenation.txt b/Druid/Rejuvenation.txt new file mode 100644 index 0000000..fabb310 --- /dev/null +++ b/Druid/Rejuvenation.txt @@ -0,0 +1,17 @@ +Rejuvenation/Swiftmend + +/script i=1;x=0;m=0;c=CastSpellByName;while(UnitBuff("target",i)~=nil) do if(strfind(UnitBuff("target",i),"Spell_Nature_Rejuvenation")) then m=1;end;i=i+1;end;if (m~=1) then c"Rejuvenation";else c"Swiftmend";end; + + + +Rejuvenatio/healing Touch + +If you have this on your bar instead of rejuvination, you will NEVER replace another druid's (or your own) rejuv, conserving mana and making you a more efficient healer. + +/script i=1;x=0;m=0;c=CastSpellByName;while(UnitBuff("target",i)~=nil) do if(strfind(UnitBuff("target",i),"Spell_Nature_Rejuvenation")) then m=1;end;i=i+1;end;if (m~=1) then c"Rejuvenation";else c"Healing Touch(rank 3)";end; + + + +Rejuvenation self cast without losing target + +/run CastSpellByName("Rejuvenation",1) \ No newline at end of file diff --git a/Druid/Tanquility.txt b/Druid/Tanquility.txt new file mode 100644 index 0000000..a7874c2 --- /dev/null +++ b/Druid/Tanquility.txt @@ -0,0 +1,3 @@ +Spammable Tranquility + +/script if not CastingBarFrame.channeling then CastSpellByName("Tranquility") end \ No newline at end of file diff --git a/General/Action button and Spellbook ID.txt b/General/Action button and Spellbook ID.txt new file mode 100644 index 0000000..b3eac03 --- /dev/null +++ b/General/Action button and Spellbook ID.txt @@ -0,0 +1,25 @@ +Mouseover a action bar button and use this macro to get the ID + +/run local a=GetMouseFocus()message(ActionButton_GetPagedID(a)) + + +Here you can see where the actionID slots in your actionbars are: + +ActionBar page 1: slots 1 to 12 +ActionBar page 2: slots 13 to 24 +ActionBar page 3 (Right ActionBar): slots 25 to 36 +ActionBar page 4 (Right ActionBar 2): slots 37 to 48 +ActionBar page 5 (Bottom Right ActionBar): slots 49 to 60 +ActionBar page 6 (Bottom Left ActionBar): slots 61 to 72 + + + +Find SpellBookID (replace SpellName in "SpellName") + +/script for id = 1, 180, 1 do local spellName, subSpellName = GetSpellName(id, SpellBookFrame.bookType);if spellName and string.find(spellName, "SpellName", 1, true) then ChatFrame1:AddMessage("ID is "..id, 1.0, 1.0, 0.5); end; end; + + + +If you want to test you have the right spell type this into the chat window (replace X with the number you want to test) + +/script DEFAULT_CHAT_FRAME:AddMessage(GetSpellName(X,0)); \ No newline at end of file diff --git a/General/Auto attack.txt b/General/Auto attack.txt new file mode 100644 index 0000000..b12ee8a --- /dev/null +++ b/General/Auto attack.txt @@ -0,0 +1,35 @@ +Spammable Auto Attack Macro w/ Melee and Ranged swapping (put Shoot or Auto Shot into action slot 1) + +/run if CheckInteractDistance("target", 3) and (not PlayerFrame.inCombat) then AttackTarget() elseif not IsAutoRepeatAction(1) then CastSpellByName("Auto Shot OR Shoot") end + +Replace Auto Shot or Shoot with your classes ranged auto attack + + + +Start Melee Attack + +/script if (not PlayerFrame.inCombat) then AttackTarget() end + + + +Auto Shot + +/script if not IsAutoRepeatAction(xx) then CastSpellByName("Auto Shot"); end + + + +Auto attack + +/run for z=1,172 do if IsAttackAction(z)then if not IsCurrentAction(z)then UseAction(z);end;end;end; + + + +Melee shoot + +/script local _,_,i=strfind(GetInventoryItemLink("player",18),"\124Hitem:(%d+)")local _,_,_,_,_,p=GetItemInfo(i)local t={}t.Bows="Bow"t.Guns="Gun"t.Crossbows="Crossbow"t.Thrown="Throw"CastSpellByName((string.gsub(t[p],"^([^T])","Shoot %1"))) + + + +Shoot (wand) Replace X with the Slot id of the skill on your hotbar + +/script if not IsAutoRepeatAction(X) then CastSpellByName("Shoot"); end \ No newline at end of file diff --git a/General/Buff texture.txt b/General/Buff texture.txt new file mode 100644 index 0000000..64d0897 --- /dev/null +++ b/General/Buff texture.txt @@ -0,0 +1,15 @@ +To find "BUFF_TEXTURE" in certain macros use this macro (Target yourself while you have the buff) + +/script function m(s) DEFAULT_CHAT_FRAME:AddMessage(s); end for i=1,16 do s=UnitBuff("target", i); if(s) then m("B "..i..": "..s); end s=UnitDebuff("target", i); if(s) then m("D "..i..": "..s); end end + + + +Print GetShapeshiftFormInfo(1) in say + +/run local t,n,a=GetShapeshiftFormInfo(1)DEFAULT_CHAT_FRAME:AddMessage(t..","..n..","..(a and "active" or "")) + + + +Use the script to get the current Tracking Texture + +/run icon= GetTrackingTexture() DEFAULT_CHAT_FRAME:AddMessage(icon) \ No newline at end of file diff --git a/General/Camera.txt b/General/Camera.txt new file mode 100644 index 0000000..abae912 --- /dev/null +++ b/General/Camera.txt @@ -0,0 +1,9 @@ +Increase max camera distance + +/script SetCVar ("cameraDistancemax" ,50) + + + +Set default camera look speed + +/run SetCVar("cameraYawMoveSpeed",GetCVarDefault("cameraYawMoveSpeed")) \ No newline at end of file diff --git a/General/Change actionbar.txt b/General/Change actionbar.txt new file mode 100644 index 0000000..08b23b9 --- /dev/null +++ b/General/Change actionbar.txt @@ -0,0 +1,3 @@ +Change actionbar + +/run if (CURRENT_ACTIONBAR_PAGE == 1) then CURRENT_ACTIONBAR_PAGE = 2; ChangeActionBarPage(); elseif(CURRENT_ACTIONBAR_PAGE == 2) then CURRENT_ACTIONBAR_PAGE = 1; ChangeActionBarPage(); end; \ No newline at end of file diff --git a/General/Complete and accept quests.txt b/General/Complete and accept quests.txt new file mode 100644 index 0000000..db163f3 --- /dev/null +++ b/General/Complete and accept quests.txt @@ -0,0 +1,9 @@ +Complete/Accept quests with a keybind - not 100% effective if there are more than 1 quest reward + +/run AcceptQuest() +/run CompleteQuest() +/run i=GetNumQuestChoices() if i<2 then GetQuestReward(1) end +/run SelectAvailableQuest(1) +/run SelectGossipAvailableQuest(1) +/run SelectActiveQuest(1) +/run SelectGossipActiveQuest(1) \ No newline at end of file diff --git a/General/Disable error.txt b/General/Disable error.txt new file mode 100644 index 0000000..26a3a3f --- /dev/null +++ b/General/Disable error.txt @@ -0,0 +1,35 @@ +Disable Error Speech + +/run SetCVar("EnableErrorSpeech", 0) UIErrorsFrame:UnregisterEvent"UI_ERROR_MESSAGE" CastSpellByName"SPELLNAME" UIErrorsFrame:RegisterEvent"UI_ERROR_MESSAGE" SetCVar("EnableErrorSpeech", 1) + +or + +/console EnableErrorSpeech 0 +/run UIErrorsFrame:UnregisterEvent"UI_ERROR_MESSAGE" +/run CastSpellByName"SPELLNAME" +/run UIErrorsFrame:RegisterEvent"UI_ERROR_MESSAGE" +/console EnableErrorSpeech 1 + + + +Error sound + +/Console MasterSoundEffects 0 + +/Console MasterSoundEffects 1 + + + +Hide UIErrorsFrame + +/script UIErrorsFrame:Hide() + + + +Disable audio for macro to cast spell + +/console Sound_EnableSFX 0 +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/cast Fireball +/console Sound_EnableSFX 1 +/script UIErrorsFrame:Clear(); \ No newline at end of file diff --git a/General/Drink and eat.txt b/General/Drink and eat.txt new file mode 100644 index 0000000..ef68227 --- /dev/null +++ b/General/Drink and eat.txt @@ -0,0 +1,16 @@ +Uses any Conjured water/food (press it quick twice, to eat when you drink) + +/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Conjured"))then UseContainerItem(b,s,1)end end end + + +Food/Drink + +1. Drag your food in an action button and your drink in another. + +2. Use /run local a=GetMouseFocus()message(ActionButton_GetPagedID(a)) this command in your chat while hovering your mouse over the "food button" and then the "drink button" and make a note of the numbers it prints. + +3. + +/run local e,d,s,u,a,p,x,z,f,b,_="INV_Misc_Fork&Knife","INV_Drink_07",strfind,UnitBuff,UseAction,"player",115,116;for i=1,32 do f=(s((u(p,i))or"",e))if(f)then x=nil end;b=(s((u(p,i))or"",d))if(b)then z=nil end;end;_=((x)and a(x))or((z)and a(z)) + +This (all one line) will be your actual food/drink macro after you replace 115,116 with the food button id and drink button id you found above. This will drink if you're not already drinking and eat if you're not already eating.  \ No newline at end of file diff --git a/General/Get Mail.txt b/General/Get Mail.txt new file mode 100644 index 0000000..a80d948 --- /dev/null +++ b/General/Get Mail.txt @@ -0,0 +1,3 @@ +Picks up item and money from first mail in mailbox + +/script GetInboxText(1); TakeInboxItem(1); TakeInboxMoney(1); DeleteInboxItem(1); \ No newline at end of file diff --git a/General/Get name.txt b/General/Get name.txt new file mode 100644 index 0000000..96d078b --- /dev/null +++ b/General/Get name.txt @@ -0,0 +1,3 @@ +Mouseover and type the line to get name of an interface/addon object + +/run DEFAULT_CHAT_FRAME:AddMessage(GetMouseFocus():GetName()) \ No newline at end of file diff --git a/General/Increase tab range.txt b/General/Increase tab range.txt new file mode 100644 index 0000000..2126f72 --- /dev/null +++ b/General/Increase tab range.txt @@ -0,0 +1,18 @@ +Increase your tab target range (max value is 50 yards) + +/console targetNearestDistance 50 + +or add this line in your config.wtf : +SET targetNearestDistance "50" + + + +Change the farthest distance of "TAB" to 41 yards (maximum is 50, default is 35) + +/console SET targetNearestDistance "41" + + + +Use TAB to select the target behind you to set the maximum distance of 50 yards (maximum is 50, default is 10 yards) + +/console SET targetNearestDistanceRadius "50" \ No newline at end of file diff --git a/General/Mass learn from trainer.txt b/General/Mass learn from trainer.txt new file mode 100644 index 0000000..af23a8a --- /dev/null +++ b/General/Mass learn from trainer.txt @@ -0,0 +1,3 @@ +mass learn from trainer + +/script n=GetNumTrainerServices(); i = 1; while n >= i do BuyTrainerService(i); i=i+1; end; \ No newline at end of file diff --git a/General/Max graphics.txt b/General/Max graphics.txt new file mode 100644 index 0000000..c2ba8a8 --- /dev/null +++ b/General/Max graphics.txt @@ -0,0 +1,11 @@ +more than MAX graphics settings can be applied to the Config.wtf file however, depending on your server's restrictions this may or may not have an effect. + +/console groundEffectDensity 256 +/console groundEffectDist 170 +/console detailDoodadAlpha 100 +/console farclip 777 +/console horizonfarclip 6226 +/console smallcull 0 +/console maxLOD 3 +/console SkyCloudLOD 3 +/console characterAmbient 1 \ No newline at end of file diff --git a/General/Mouseover.txt b/General/Mouseover.txt new file mode 100644 index 0000000..79addb0 --- /dev/null +++ b/General/Mouseover.txt @@ -0,0 +1,25 @@ +Checks to see if your mouse cursor is hovering over an applicable target (party frames and nameplates work also) and casts the spell on said target if so. If your cursor is not hovering over an applicable target, it just casts the spell normally as it would if you weren't using a macro. + + +Offensive abilities (debuffs, CC, interrupts, DoTs, taunts, etc): + +/run c=CastSpellByName s="SPELLNAME" if UnitExists("mouseover") and UnitReaction("mouseover","player")<5 then TargetUnit("mouseover") c(s) TargetLastTarget() else c(s) end + + + +Friendly abilities (heals, cleanse, Rebirth, etc): + +/run c=CastSpellByName s="SPELLNAME" if UnitExists("mouseover") and UnitReaction("mouseover","player")>4 then TargetUnit("mouseover") c(s) TargetLastTarget() else c(s) end + + + +Both (ex: Paladin's Holy Shock - heals friendlies, hurts enemies): + +/run c=CastSpellByName s="SPELLNAME" if UnitExists("mouseover") then TargetUnit("mouseover") c(s) TargetLastTarget() else c(s) end + + +Simple mouseover macro + +/run TargetUnit("mouseover") +/cast spellname +/run TargetLastTarget() \ No newline at end of file diff --git a/General/Play sound file.txt b/General/Play sound file.txt new file mode 100644 index 0000000..cdacccf --- /dev/null +++ b/General/Play sound file.txt @@ -0,0 +1,3 @@ +Check that you have proper druid HoTs on you + +/script local i=0 g=GetPlayerBuff while not(g(i) == -1)do if(strfind(GetPlayerBuffTexture(g(i)), "Spell_Nature_Rejuvenation"))then PlaySoundFile("Sound\Creature\Ossirian\OssirianIAmRejuvenated.wav")end i=i+1 end \ No newline at end of file diff --git a/General/Quickswap.txt b/General/Quickswap.txt new file mode 100644 index 0000000..e2d351e --- /dev/null +++ b/General/Quickswap.txt @@ -0,0 +1,13 @@ +Weapons/Shield quickswap + +/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (string.find(n,"InsertMainHandName") or string.find(n,"InsertOffHandName"))then PickupContainerItem(b,s)EquipCursorItem(16, 17)break end end end + +One item got to be mainhand/offhand only, and swap 16 for 17 if both weapons go into main hand slot. + + + +Swap offhand's (Skull of Impending Doom and Misplaced Servo Arm) + +/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (string.find(n,"Skull of Impending Doom") or string.find(n,"Misplaced Servo Arm"))then PickupContainerItem(b,s)EquipCursorItem(17)break end end end + +strfind can replace string.find, using just a part of the item name works, and i don't think you need break. \ No newline at end of file diff --git a/General/Race specific.txt b/General/Race specific.txt new file mode 100644 index 0000000..823a42d --- /dev/null +++ b/General/Race specific.txt @@ -0,0 +1,3 @@ +Shadowmeld + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Ambush" then x=1 end i=i+1 end if x==0 then CastSpellByName("Shadowmeld")end \ No newline at end of file diff --git a/General/Send chat message.txt b/General/Send chat message.txt new file mode 100644 index 0000000..4de3b78 --- /dev/null +++ b/General/Send chat message.txt @@ -0,0 +1,3 @@ +Send chat message + +/run local s,m,c,=SendChatMessage,"";if UnitInRaid("player")then c="RAID" elseif UnitExists("party1")then c="PARTY" end;s(m,c) \ No newline at end of file diff --git a/General/Smart buff swap.txt b/General/Smart buff swap.txt new file mode 100644 index 0000000..bf114b8 --- /dev/null +++ b/General/Smart buff swap.txt @@ -0,0 +1,7 @@ +Uses BUFF_1 if the main buff is active, or else uses SPELL_2 + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Spell_Texture_Name" then x=1 end i=i+1 end if x==0 then CastSpellByName("BUFF") else CastSpellByName("SPELL") end + +You need to replace "BUFF_TEXTURE" with the TEXTURE of a particular buff and NOT it's name. For example A Rogue's Stealth skill and a Druid's Prowl skill both use the little icon texture called "Ability_Ambush". +Use this site to lookup your buff's texture: +http://wowwiki.wikia.com/Queriable_buff_effects \ No newline at end of file diff --git a/General/Sound channels.txt b/General/Sound channels.txt new file mode 100644 index 0000000..735e3e4 --- /dev/null +++ b/General/Sound channels.txt @@ -0,0 +1,25 @@ +Enter each of these commands in-game and then restart your client. + +/console SoundMemoryCache 128 +/console SoundMaxHardwareChannels 128 +/console SoundSoftwareChannels 128 + +put compatibility option to XP SP3 if you get sound issues + + + +You can add this one if you want too: + +/console SoundMixRate 48000 + + + +Set in game: + +/run SetCVar("Sound_NumChannels",128) + +Confirm its done: + +/dump GetCVar("Sound_NumChannels") + +You can add 2 lines to your config.wtf - that way you dont need a modified .exe - the lines to add are SET SoundMaxHardwareChannels "256" and "SET SoundSoftwareChannels "256" - change the number 256 to the channels you want. I have it set to the max of 256. \ No newline at end of file diff --git a/General/Summon random mount.txt b/General/Summon random mount.txt new file mode 100644 index 0000000..d46ec92 --- /dev/null +++ b/General/Summon random mount.txt @@ -0,0 +1,10 @@ +If youve got your 4 mounts in the first 4 slots of your first bag it would look like this + +/script UseContainerItem(0,math.random(1,4)); + + + +Dismount, summon random mount + +/run local i=0 g=GetPlayerBuff while not(g(i) == -1)do if(strfind(GetPlayerBuffTexture(g(i)), "Ability_Mount"))then CancelPlayerBuff(g(i))end i=i+1 end +/run UseContainerItem(0,math.random(1,4)); \ No newline at end of file diff --git a/General/Target stats.txt b/General/Target stats.txt new file mode 100644 index 0000000..73ac86d --- /dev/null +++ b/General/Target stats.txt @@ -0,0 +1,21 @@ +Display target's armor and resist in chat (only works on self and NPCs) + +/run local b={"Armor","Holy","Fire","Nature","Frost","Shadow","Arcane"} a=UnitName("target").."'s stats: " for i=0,6 do a = a..b[i+1]..": "..UnitResistance("target", i)..", " end SendChatMessage(a) + + + +Display target's armor and resist in say + +/script u=UnitResistance y="target" a=u(y ,0) h=u(y ,1) f=u(y ,2) n=u(y ,3) fr=u(y ,4) s=u(y ,5) z=u(y ,6) SendChatMessage(UnitName(y).." has "..a.." Armor, "..h.." HR, "..f.." FR, "..n.." NR, "..fr.." FrR, "..s.." SR and "..z.." AR.", SAY) + + + +Display target's Attack power in say + +/script u=UnitAttackPower y="target" a=u(y ,0) SendChatMessage(UnitName(y).." has "..a.." Attack Power. ", SAY) + + + +Display target's armor and dps in say + +/run lowDmg, highDmg=UnitDamage("target") SendChatMessage("%t hits for "..math.ceil((lowDmg+highDmg)/2).." damage every "..tostring(math.floor(UnitAttackSpeed("target")*100)/100).." seconds and has "..UnitResistance("target",0).." Armor.","SAY") \ No newline at end of file diff --git a/General/Target.txt b/General/Target.txt new file mode 100644 index 0000000..b01e6a5 --- /dev/null +++ b/General/Target.txt @@ -0,0 +1,60 @@ +Cast spell on enemy that matches name below EXACTLY. Useful when lvling to tag mobs first. + +/run TargetByName("REPLACE THIS TO NPC NAME", true) CastSpellByName("REPLACE THIS WITH INSTANT CAST SPELL") + + + +Target last target + +/run TargetLastTarget() + + + +Target last enemy + +/run TargetLastEnemy() + + +Target Nearest Friend + +/run TargetNearestFriend() + + + +Target nearest enemy + +/target NearestEnemy(); + + + +If no target, friendly target, or dead target, then target nearest enemy + +/script if UnitExists("target") == nil or not UnitIsEnemy("target", "player") or UnitIsDead("target") ~= nil then TargetNearestEnemy() end + + + +targettarget + +/run TargetUnit("targettarget") CastSpellByName(spell) TargetLastTarget() + + + +Put these lines ahead of your existing macro for auto-targeting + +/script if UnitHealth("target")==0 and UnitExists("target") then ClearTarget(); end +/run if GetUnitName("target")==nil then TargetNearestEnemy() end + + + +Spammable Wand Shoot w/ Auto Targeting + +/run --CastSpellByName("Shoot") end +/run if GetUnitName("target")==nil or UnitExists("target") and UnitReaction("target","player")>4 then TargetNearestEnemy() end +/script if not IsAutoRepeatAction(#) then CastSpellByName("Shoot"); end + + + +Autoshot and melee w/ Auto Targeting + +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/run if CheckInteractDistance("target", 3) and (not PlayerFrame.inCombat) then AttackTarget() elseif not IsAutoRepeatAction(3) then CastSpellByName("Auto Shot") end \ No newline at end of file diff --git "a/General/Use Juju Potion Banda\357\273\277g\357\273\277e.txt" "b/General/Use Juju Potion Banda\357\273\277g\357\273\277e.txt" new file mode 100644 index 0000000..9fa62f6 --- /dev/null +++ "b/General/Use Juju Potion Banda\357\273\277g\357\273\277e.txt" @@ -0,0 +1,21 @@ +Use any Juju on yourself, or friendly target (add full name if you want a specific Juju) + +/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Juju"))then UseContainerItem(b,s)SpellTargetUnit("player")end end end + + + +Use any bandage + +/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Bandage"))then UseContainerItem(b,s)SpellTargetUnit("player")end end end + + + +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 + + + +Use any Mana Potion + +/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Mana Potion"))then UseContainerItem(b,s)end end end \ No newline at end of file diff --git a/General/Use Trinket Offhand.txt b/General/Use Trinket Offhand.txt new file mode 100644 index 0000000..1f69694 --- /dev/null +++ b/General/Use Trinket Offhand.txt @@ -0,0 +1,17 @@ +Use trinket + +/script UseInventoryItem(13); + +/script UseInventoryItem(14); + + + +Use trinket if no cooldown + +/run if GetInventoryItemCooldown("player", 13)==0 then UseInventoryItem(13)end + + + +Use offhand + +/script UseInventoryItem(17); \ No newline at end of file diff --git a/General/Useful macros (1.0) b/General/Useful macros (1.0) new file mode 100644 index 0000000..8ef5b02 --- /dev/null +++ b/General/Useful macros (1.0) @@ -0,0 +1,667 @@ +This guide is from WoWWiki, so all credits go to them! + + + +Spells + +Casting spells no longer requires the (Rank x). So you can now have a macro that says: /cast Holy Light, and it’ll cast your highest rank of Holy Light. This macro will always cast the highest rank spell, and you will not be able to cast it on lower-level targets. +Self Cast Any Spell (without losing your target) + +/script CastSpellByName(‘Holy Light’, 1) + + + +Casting buffs + +Adapted from the above code, this is designed to cast buffs. If an enemy is selected, you will cast the buff on yourself, if nothing is selected, you will cast the buff on yourself, if you are selected, you will cast the buff on yourself but if your ally is selected they will be buffed. + + + +Example + +This macro will cast buffs on you unless an ally is selected (Mark of the Wild): + +/script if (UnitIsFriend(“player”, “target”) ) then CastSpellByName(“Mark of the Wild”) + else CastSpellByName(“Mark of the Wild”, 1); end + + + +Cast a spell based on target’s class + +You’ll need to target the person you want to buff first. Here’s an example for a paladin to use; note that it should all be on one line: + +/script class = UnitClass(“target”); if ( ( class == “Rogue” ) or ( class == “Warrior” ) ) then + CastSpellByName(“Blessing of Might”); else CastSpellByName(“Blessing of Wisdom”); end + + + +Cast a spell based on target’s level + +You’ll need to target the person you want to buff first. Here’s an example for a priest to use on an English language server. You have to alter the spell name according to the spell you want to cast and change i=6 by the number of ranks you currently have for that spell; note that it should all be on one line: + +/script Pre=”Power Word: Fortitude(Rank ” Sp={1,2,14,26,38,50} if (UnitLevel(“target”) ~= nil and UnitIsFriend(“player”,”target”)) then + for i=6,1,-1 do if (UnitLevel(“target”) >= Sp) then CastSpellByName(Pre..i..”)”) return end end end + + + +Cast a healing spell on nearby friends + +This will target all your nearby friendly player characters in turn and cast a heal on the first one it comes to with a health level that is below a certain percentage of maximum (in this example 70%). Repeated calls + +to the macro will step through all nearby friends needing heals until it targets you. The macro checks the health of up to 40 nearby friendly player characters. If a call to this macro casts no heal then neither nearby friendly player characters nor yourself have a health level below the threshold of 70% of maximum. + +/script for i=1,40 do TargetNearestFriend(); + if UnitHealth(“target”)/UnitHealthMax(“target”) < 0.7 then + if UnitIsPlayer(“target”) then CastSpellByName(“Lesser Healing Wave”) end end end; TargetLastEnemy(); + + + +Announcing spells and targets to your party + +Good for healing and crowd control spells. Example with a healing spell (Party member must be targeted first to make the party announcement work): + +/cast Healing Touch +/party Healing %t in 3.5 seconds + + + +Cast a spell on party member based on his location in party + +This will target the “first” member of your party, cast a healing spell on him, then return you to your previous target. To use on 2nd member of party change “party1″ to “party2″. + +/script TargetUnit(“party1″) +/cast Flash Heal +/script TargetLastTarget() + + + +Cast multiple buffs with smart buff recognition + +This script checks whether the target has a buff, if not you cast it, if so you cast a different buff. + +/script i=1;m=0;while(UnitBuff(“target”,i)~=nil) do + if(strfind(UnitBuff(“target”,i),”Regeneration”)~=nil) then m=1; end;i=i+1;end; c=CastSpellByName; + if(m==1) then c(“Mark of the Wild(Rank 10)”);else c(“Thorns(Rank 10)”);end; + +Modify the spell names to change the buff. + + + +Cast even more buffs with smart buff recognition + +A lightweight “smart buff” script allowing auto casting of 3 buffs based on your target’s buffs – Buff 3 is cast if you have no target. Requires knowledge of buff names and spell numbers (see Find Buff Name and Search For Spell Number). + +/script F,C,i,b,t,m,n=strfind,CastSpell,1,”",”target” if UnitName(t)~=nil then repeat + if F(b,”BNa1″) then m=1 elseif F(b,”BNa2″) then n=1 end b,i=UnitBuff(t,i),i+1 until b==nil if m==nil then + C(BNo1,0) elseif n==nil then C(BNo2,0) end end C(BNo3,0) + + + +Find Buff Name + +Smart buff recognition requires knowledge of the icon name of the appropriate buff, which may differ from the spell name significantly. The script below lists all buffs currently affecting your target, and these names can be used to modify a smart buffing script for better flexibility. + +/script i=1; while UnitBuff(“target”,i)~=nil do DEFAULT_CHAT_FRAME:AddMessage(UnitBuff(“target”,i)); + i=i+1; end + +Alternatively, this script taken from the Queriable buff effects page also lists debuffs present on your target. + +/script function m(s) DEFAULT_CHAT_FRAME:AddMessage(s); end for i=1,16 do s=UnitBuff(“target”, i); if(s) + then m(“B “..i..”: “..s); end s=UnitDebuff(“target”, i); if(s) then m(“D “..i..”: “..s); end end + + + +Find Spell Number + +Sometimes using the CastSpellByName function causes the script to exceed the 255 character limit. In such cases, it may be useful to reference the spell number as found within your spellbook and abilities. This script allows you to poke around looking for the spell number associated with a given spell. + +Spells are numbered beginning with all pages found in your general abilities, followed by all pages of your first talent tree then all pages of the second talent tree etc. If you learn new spells and have referenced spells by their number in a script, you may need to revisit this script to ensure you are casting the correct spell and rank. + +Guestimate approximately what the spell number might be and modify the number assigned to SpellNumber (26 in the example). + +Click the script to view a local display of the spell number, name and rank “Spell 26: Arcane Explosion Rank 6″. + +Line breaks (carriage returns or ) have been added for legibility only. When copied into WoW, make sure the script is one line only. + +/script SpellNumber=26; SpellName,SpellRank=GetSpellName(SpellNumber,”spell”); + M=format(“Spell %d: %s %s”,SpellNumber,SpellName,SpellRank); DEFAULT_CHAT_FRAME:AddMessage(M); + +Once you have the spell number, use CastSpell(spellnumber,0) to cast it. For example if Inner Fire was spell number 17 in your spellbook (as determined using the script above), you could use /script CastSpell(17,0) to cast it. + +If you want to ensure that it casts only on yourself, use /script CastSpell(17,0,1). + + + +Search For Spell Number + +This modified version of the above script searches for spell numbers that contain a substring defined by the variable f. + +/script i,s,S=1,”spell”,GetSpellName; f=”Shadow”; n,r=S(i,”spell”) repeat if strfind(n,f)~=nil + then m=format(“Spell %d: %s %s”,i,n,r); DEFAULT_CHAT_FRAME:AddMessage(m); end i=i+1; n,r=S(i,”spell”) + until n==nil + + + +Immediate Cast non-global cooldown Spell + +Some spells, such as Amplify Curse and Divine Favor, don’t activate the global cooldown, so it’s possible to immediately follow them with another spell. However, the user interface waits for confirmation of the spellcasting action before allowing you to cast a second spell, which can result in a pause if your connection has some lag. This macro avoids the need for a confirmation by following up with SpellStopCasting, so you can cast a second spell immediately, regardless of lag. Note that if you don’t have the listed spell (Divine Favor, in this example) in your spellbook, running this script will hang your client. + +/run –CastSpellByName(“Divine Favor”) +/run local a,i,s,t,j=CastSpellByName,0,”spell”,”Divine Favor”repeat + i=i+1;j=GetSpellName(i,s)until(j==t)j=GetSpellCooldown(i,s)if(j==0)then + a(t)SpellStopCasting()end + +The reason for the first line is so that the icon will show the current cooldown state for the spell correctly. + +This macro can be easily modified to allow following it with another spell – append ;CastSpellByName(name_of_spell), and change the starting CastSpellByName to match so you get the cooldown and in-range information for the final spell. + +/run –CastSpellByName(“Curse of Agony”) +/run local a,i,s,t,j=CastSpellByName,0,”spell”,”Amplify Curse”repeat + i=i+1;j=GetSpellName(i,s)until(j==t)j=GetSpellCooldown(i,s)if(j==0)then + a(t)SpellStopCasting()end;CastSpellByName(“Curse of Agony”) + + + +Equip an item + +/script PickupContainerItem(bag, slot); + +bag goes from 0 to 4, and slot from 1 to 20 (depending on bag size). + +For more information, go to Item equipping to see how to use items from backpacks, etc., and information on how to prevent accidental vendoring of items due to macros. + + +Change your boots to Globin Rocket Boots (by Gk-s2-) + +A really simple script made by myself who changes your boots anyboot you are using to Globin Rocket Boots. Note: Change the MainHandBag and MainBagSlot to where your item are located Note: This macro should be on one line. + +/script if ( not CursorHasItem() ) then PickupContainerItem(MainHandBag, MainBagSlot); + PickupInventoryItem(8); PickupInventoryItem(8); PickupContainerItem(MainHandBag, MainBagSlot); end + + + +Quick Self-Bandage (by Domandred) + +/target [Player Name] +/script UseContainerItem(#, #); +/script TargetLastEnemy(); + +Use: Really nice macro for duels or 1v1 pvp. You can stun/fear your enemy, press this and it’ll automatically bandage you without losing your target. + +Problem with macro above is losing combo points for rogues. This one will do the same thing without making you lose your combo points + +/script UseContainerItem(#, #) +/script SpellTargetUnit(“player”) + +Another quick self-bandage from me, Kingoomie. Remember, one line. + +/script if (not GetContainerItemLink(x,x)) then OpenBag([same bag number as before]); else + TargetUnit(“player”);UseContainerItem(3,15);TargetUnit(“playertarget”);if (UnitIsPlayer(“target”)) + then ClearTarget() end end + +Checks for an item in the slot, opens the bag if there isn’t one, uses the item (bandage, in this case) on you, targets your last target, or targets nothing if you either didn’t have a target or were targeting yourself. + + + +Quick Self-Bandage (by sjefen6) + +/script TargetUnit(“Player”) +/script UseAction(ActionID); +/script TargetLastEnemy(); + +For the ActionID, check out the table on the bottom of this chapter. In Basic this does the same as “Quick Self-Bandage by Domandred”, but finds the player automatically and uses ActionID instead of ContainerItem. + + +Use a Bandage + +/script UseAction(ActionID, 0, 1); +/script if( SpellIsTargeting() ) then SpellTargetUnit(“player”); end + +Bandage must be placed in the action bar at the slot given by ActionID. ActionID is a number from 1 to 120. Slot1-ActionBar1 is ActionID1, Slot12 is ActionID12, Slot1-ActionBar2 is ActionID13 and so on up to Slot12 of ActionBar10. This will bandage your target, or yourself if your current target is not a friendly target. + +Here’s a different version courtesy of post by Sarf on the forums. This one will always self-bandage, even if you have a friendly player targeted. It will also re-target your original target. Note that this must all be on one line, its just split up for readability: + +/script p=”player”;t=”target”;if(not UnitCanAttack(t, p))then ot=UnitName(t);TargetUnit(p); + else ot=nil;end;UseAction(ActionID);if(SpellIsTargeting())then SpellTargetUnit(p); + end if(ot) then TargetByName(ot);end + +Following is another example of self bandaging that does not use scripting. THIS WILL WORK FOR COSMOS USERS ONLY. Shift-clicking on the bandage (or other item in inventory) while editing your macro will insert its name into your macro. Placing the “target” command after the “use” command maintains your primary target and also maintains your combo points for that target if you’re a Rogue. + +/use Heavy Linen Bandage +/target player + +/script for b=0,4 do for s=1,GetContainerNumSlots(b) do if (string.find(GetContainerItemLink(b,s) or ” “, “Heavy Runecloth Bandage”)) + then TargetUnit(“player”); UseContainerItem(b,s, onSelf); TargetUnit(“playertarget”) b=4 break end end end + +Note: As of WoW UI version 1300, when you use the /target command use player not “player” to target yourself. Script command /target does NOT require Cosmos mod, but the /use command does. + +You may experience problems with the script above, because it uses non-standard commands. If you place your Heavy bandage in the second ActionBar slot 5 you can use this small macro to use the bandage on your self. This works regardless of whether Cosmos (or any other mod) is installed. + +/script TargetUnit(“player”); +/script UseAction(17); + +You have to use 17, because it is 2nd Actionbar and 5th slot ((2-1)*12+5=17). + +Reference ActionID’s: + +Actionbar Slot number +1: 1 2 3 4 5 6 7 8 9 10 11 12 +2: 13 14 15 16 17 18 19 20 21 22 23 24 +3: 25 26 27 28 29 30 31 32 33 34 35 36 +4: 37 38 39 40 41 42 43 44 45 46 47 48 +5: 49 50 51 52 53 54 55 56 57 58 59 60 +6: 61 62 63 64 65 66 67 68 69 70 71 72 + + + +Use a Trinket/Item + +/script UseInventoryItem(13) + +Use: Pops the trinket you have equipped in the first trinket slot. This way if you have several “on use” trinkets you can control any of them with a single button instead of creating multiple buttons for each trinket, as long as the trinket is in the appropriate slot. + +For the second trinket slot, substitute (14). + +For other “on use” inventory items, substitute the number corresponding to the InventorySlotId. + + + +Sharpen / Apply Poison to Weapon (by Arag) + +/script UseContainerItem (#,#); +/script PickupInventoryItem (16); + +Use: Simply press a button and use a Sharpening or Weight stone, or apply a poison. Example: Press a button, sharpen your weapon. Change the 16 or 17 to do it for a secondary weapon. For the #’s on the first line, please refer to “Understanding Location” in section 6. + +Sell all the poor items in your bags (by Haw) + + + +This macro will sell your poor items, when used at a vendor. Rember to put it in one line. + +/script for bag = 0,4,1 do for slot = 1, GetContainerNumSlots(bag), + 1 do local name = GetContainerItemLink(bag,slot); if name and + string.find(name,”ff9d9d9d”) then DEFAULT_CHAT_FRAME:AddMessage(“Selling “..name); + UseContainerItem(bag,slot) end; end; end + + + +Clean bags of poor items (by Flowers) + +This will delete all poor quality items from your bags. There will be no confirmation dialog – the items will simply vanish. Note that it needs to be on one line, as usual. (/run is a synonym for /script.) + +/run ClearCursor()local g,i,j,s,a,b=gsub;for i=0,4 do for + j=1,GetContainerNumSlots(i)do s=GetContainerItemLink(i,j)if(s)then + a,b,s=GetItemInfo(g(g(s,”.*\124H”,”"),”\124h.*”,”"))if(s==0)then + PickupContainerItem(i,j)DeleteCursorItem()end;end;end;end + + + +Strip all gear with durability (by Flowers) + +For those times when you’re not in combat, but about to die anyway (like falling a long distance), this will at least protect your gear (or as much of it as there’s room for in your bags (your backpack will not be used)). Also useful at the right sort of parties. Optimizers can rearrange the slot list to put the most expensive to repair items first. As usual, it needs to be one (really long) line – be careful entering it, as it’s exactly 255 characters long. + +/run ClearCursor()local k;for i=1,4 do for j=1,GetContainerNumSlots(i)do if(not + GetContainerItemLink(i,j))then repeat k,l=next({1,3,5,6,7,8,9,10,16,17,18},k)if(not + k)then return;end;PickupInventoryItem(l)until(CursorHasItem()) + PutItemInBag(i+19)end;end;end + + + +Switching Hotbars + +/script CURRENT_ACTIONBAR_PAGE = X; +/script ChangeActionBarPage(); + +Where X is the Hotbar number + +Example + +/script CURRENT_ACTIONBAR_PAGE = 1; +/script ChangeActionBarPage(); == Macro Frame Toggling == +/script if ( not MacroFrame:IsVisible() ) then ShowUIPanel(MacroFrame); + else HideUIPanel(MacroFrame); end; + + + +Set Video World Environment Variables + +Sometimes when you are in a high-traffic area (Ironforge or Orgrimmar in particular), RAM and processors get bogged down. One way to help your computer is to adjust the video settings to improve performance. You can put these macros into hot bars and bind to keys for easy switching, e.g. Shift-\, \, and Ctrl-\ for High, Medium, and Low Res. These don’t change the actual resolution of the screen, only the level of detail. low res is very good for the Auction House / Bank areas. Also, if your UI needs reset (the rendering isn’t working), just switch from one to another. + +HighRes: + +/z SetFarclip(777) +/z SetWorldDetail(2) +/z SetBaseMip(1) + +MediumRes: + +/z SetFarclip(477) +/z SetWorldDetail(1) +/z SetBaseMip(1) + +LowRes: + +/z SetFarclip(177) +/z SetWorldDetail(0) +/z SetBaseMip(0) + + + +Full-screen to windowed mode + +I found this handy for working on macros/scripts while having reference material next to me (ie these web pages and others ;). This will switch your game between full-screen, full-colour, and a smaller windowed mode. There are some assumptions, you need to replace the index numbers for your own setting – for me, I run WoW in 1600×1200 32bit full anti-aliasing when full-screen, 1024×768 16bit 1xanti-aliasing when in window. The index numbers can be calculated by going to video options and counting the items on the drop-down. + +Note: The bit between “/script” and “/console” must all be on one line (ie there should be a line starting “/script” and a line starting “/console” and that’s it), it’s broken up for readability. + +SwitchMode: + +/script currentRes = GetCurrentResolution(); if (currentRes == 3) + then SetScreenResolution(15); SetCVar(“gxWindow”, 0); SetMultisampleFormat(16); + else SetCVar(“gxWindow”, 1); SetScreenResolution(3); SetMultisampleFormat(1); end; + +Replace the “15″ in SetScreenResolution with your selected high-res index, the “16″ in SetMultisampleFormat with your selected colour depth/anti-aliasing, and the “3″ in Set/GetScreenResolution with your preferred windowed res. To finish this one off, drop it into a popup button and go to key bindings, link in “alt-enter”. That way, alt-enter will alternate between windowed and full-screen. You can also work in any of the above Farclip etc calls to further alter the settings between windowed and full-screen, depending on how your machine behaves – experiment and see. + +Note also, I’m using GetCurrentResolution. I’d rather use GetCVar(“gxWindow”), but I got very unreliable results from that – not sure why. + + +Toggle Name Display + +I like to shut off player names when I take screen shots, so here is what I use: + +/script if ( GetCVar(“UnitNamePlayer”) == “1″ ) then SetCVar(“UnitNamePlayer”,0) else SetCVar(“UnitNamePlayer”,1) end + +And for shutting off the NPC names I use this: + +/script if ( GetCVar(“UnitNameNPC”) == “1″ ) then SetCVar(“UnitNameNPC”,0) else SetCVar(“UnitNameNPC”,1) end + + + +Global Tell Variable + +If you have multiple scripts that send tells (“Sheeping Lynk”, “Heal Lynk”, etc.) it may be useful to have each script reference a global variable that is changed by a single script. Kind of a click once, change em all scenario. + +This script sets a global variable PR (Party/Raid) to an appropriate channel based on raid, party or solo membership. + +Just click the script to set a global variable that can be referenced by other scripts. + +Line breaks (carriage returns or ) have been added for legibility only. When copied into WoW, make sure the script is one line only. + +/script if (GetNumRaidMembers() > 0) then PR = “Raid”; elseif (GetNumPartyMembers() > 0) + then PR = “Party”; else PR = “Say”; end; + +In your scripts, transpose “Say”, “Raid”, “Party” for PR. + +/script SendChatMessage(“Lynk is a noob”,PR); + +Lynk – Gilneas + + + +Select and Auto-attack nearest enemy + +This macro is useful for all melee classes. Useful for selecting and auto attacking nearest target, equivalent of pressing Tab, then T by default key bindings with just one key stroke. Hit it multiple times to switch between engaged enemies. It’s useful enough to rebind Tab or Space bar to it. + +/script AttackTarget(); +/script TargetNearestEnemy(); + + + +Help Tank Character + +If you are in a group and fighting a larger group of enemies, and your group tank character is already fighting an enemy, you may not want to attack one which did not have Aggro yet. Select your group tank via key [F] and execute the following macro. + +/assist %t +/script AttackTarget(); + +If you’re a beginning macro user the above is ok, Better to skip the ‘F’ key and type in the player name in the above. Not sure the AttackTarget(); is safe. But that’s getting into Tactics, so see the Instance Grouping Guide Main Assist page. + +A more advanced method of this is to pre-select a player as the “main assist” and have your macro assist that player throughout the duration of the party. The simple method is to replace %t with the name of that player and edit your macro when needed. + +Main assist also works for everyday group play, but editing a macro and typing in a player’s name may not be possible in all situations. If you are willing to sacrifice two macros and action bar slots, you can automate things with the following two macros: + +—- Set Main Assist —- + +/script LeaderPlayerName = UnitName(“target”) or UnitName(“party1″) or “”; +/script DEFAULT_CHAT_FRAME:AddMessage(“######## Set main assist to: ” .. LeaderPlayerName); + +—- Assist Main Assist Player —- + +/script AssistByName(LeaderPlayerName or UnitName(“party1″) or UnitName(“player”)); +/script DEFAULT_CHAT_FRAME:AddMessage(“######## Assisting “.. LeaderPlayerName .. ” with target ” .. (UnitName(“target”) or “NO TARGET”)); + +Use the “Set” macro when you have your main assist player selected and want to switch your assist macro to use that player. If no player is selected and you are in a party, the first other party member will be selected. If you are not in a party and not target is selected, you will assist yourself, which is somewhat redundant, but harmless. + +To save macro and action bar space, you can combine the two macros in the following script. To set the main assist player, hold down the control key while activating this macro. The version that fits into a 255 character macro is given below and it is somewhat obfuscated: + +/script p=PAsi or”"u=UnitName;t=”target”c=IsControlKeyDown()if(c)then p=u(t)or u(“party1″)or”"else AssistByName(p)end;DEFAULT_CHAT_FRAME:AddMessage(“######## “..(c and(“Set assist: “..p)or(“Assisting “..p..” with “..(u(t)or”NO TARGET”))))PAsi=p + +Here’s the same script with extra spacing and punctuation added for clarity: + +—- Main Assist Utility (Version 1.0.1 by Tiga) —- + +/script +p=PAsi or""; +u=UnitName; +t="target"; +c=IsControlKeyDown(); + +if(c) then + p=u(t) or u("party1") or "" +else + AssistByName(p) +end; + +DEFAULT_CHAT_FRAME:AddMessage("######## ".. + (c and + ("Set assist: "..p) + or + ("Assisting "..p.." with "..(u(t) or "NO TARGET")))); + +PAsi=p; + + + +Assist Main Tank/Main Assist + +This script sets your Main Tank or Main Assist for assists and assists the MT/MA all-in-one. + +If no MT/MA has been set and you Click the script, you will receive a message stating so “Set MT Noob!”. + +If you click the script while holding down the Alt key, you will receive a message stating the MT/MA has been set: “MT Set: [Bob]“. + +If you have set your MT/MA and click the script, you will target your MT/MA’s target. + +(This macro should be on one line.) + +/script if (IsAltKeyDown() and UnitIsFriend(“player”,”target”)) then MT=UnitName(“target”); + DEFAULT_CHAT_FRAME:AddMessage(‘MT Set: ['..MT..']‘); elseif (MT ~= nil) then AssistByName(MT); + else DEFAULT_CHAT_FRAME:AddMessage(‘Set MT Noob!’); end; + +Lynk – Gilneas + + + +Target Memory + +The following macro memorizes players and mobs by name. Remembering mobs by name can be a problem if there are several with the exact same name in the area (you will often target the wrong mob). Because of this, this macro should only be used in PvP and when you are fighting a unique boss mob with unique sidekicks. + +Hold down control to memorize a target. + +To recall a memorized target, use the key without modifiers. + +Hold down shift to cast a Polymorph spell on the memorized target. + +Alt is ignored, so you can bind this to an alt key combination. + +To have multiple memorized targets, edit the Tg1 variable name in the three places where it is mentioned. Note that the short version below uses “ChatFrame1″ instead of “DEFAULT_CHAT_FRAME” to save a few characters to allow for longer spell and skill names than Polymorph. The human-readable version is given below the compact/obfuscated version. + +/script t=Tg1 or”"c=IsControlKeyDown()if(c)then t=UnitName(“target”)or”"else TargetByName(t)if(IsShiftKeyDown())then CastSpellByName(‘Polymorph’)end end ChatFrame1:AddMessage(“######## “..(c and(“Tg1 set to: “..t)or(“Targeting: “..t)))Tg1=t + +—- Target Memory Utility (Version 1.0.1 by Tiga) —- + +/script +t=Tg1 or"" +c=IsControlKeyDown() + +if(c) then + t=UnitName("target")or"" +else + TargetByName(t) + + if(IsShiftKeyDown()) then + CastSpellByName('Polymorph') + end +end + +DEFAULT_CHAT_FRAME:AddMessage("######## ".. + (c and + ("Tg1 set to: "..t) + or + ("Targeting: "..t))) + +Tg1=t + + + +Kill totems + +This can be used to destroy any totem, and is obviously designed for druids. Naturally you can change the last line to /shoot which is especially good for someone with a wand. Whether it will fit in the same macro or not, I’m not certain, but you might also want to add lines to target Dark Iron Dwarf mines as well. I can’t think of anything else like it. The following is from Talashandy, cited by Alex . + +/target Totem +/cast Moonfire(Rank 1) + +Here is a bit more programmy way of doing the same thing. Remember to remove the lines breaks. + +/script u=UnitName;s=strfind;t="target";for i = 1,10,1 do TargetNearestEnemy()if (not UnitCanAttack("player",t))then break;end;if ((s(u(t),"Totem") or s(u(t),"Ward")) and not s(UnitCreatureType(t),"Human")) then CastSpellByName("Shoot");break;end;end; + + + +Timer + +Simple script to track the time elapsed from a set point in time. + +1. Clicking the script while holding the Alt key down will begin the timer and state so. +E.g. "Timer Set: [Instance Start]". + +2. Clicking the script without any additional keys thereafter will yield the time elapsed. +E.g. "Time Elapsed - [Instance Start]: 00h:01m19s". + +If you click the script without holding the Alt key first, you will receive an interface error. If you log off for whatever reason, + +your timer will be erased. Change "Say" to whatever channel you want "Party", "Raid", "Guild", etc. + +/script if IsAltKeyDown() then L1=”Instance Start”; T1=GetTime(); M=format(“Timer Set [%s]“,L1); else N=GetTime(); D=N-T1; M=format(“Time Elapsed – [%s]: %02dh:%02dm:%02ds”,L1, D/3600,mod((D/60),60), mod(D,60)); end; SendChatMessage(M,”SAY”); + +About script variables + +L1 (Label) – Holds the label for the timer. If you have script space, you can copy this script and change L1 to L2, L3 etc. creating multiple timers each with different labels (Core Hound 1, Core Hound 2 etc.) + +T1 (Time) – Holds the base time from which time elapsed is computed. For multiple scripts, change T1 to T2, T3 etc. + +M (Message) – Temporary variable to hold message formatting. + +N (Now) – Temporary variable to hold the current time. Used in computation. + + + +Pet Attack + +/script PetAttack(); + +A useful extension of this is to have your pet begin assisting your main tank with one button. You could also add a fourth line that casts one of your spells so that you begin fighting too. + +/target player +/assist +/script PetAttack(); + +Attack with Dash: +(where Dash is the 4th icon on the pet bar) + +/script PetAttack(); CastPetAction(4); + + + +Pet Passive + +/script PetPassiveMode(); + +This is really useful in a Scatter Shot macro: + +/script PetPassiveMode(); +/cast Scatter Shot + +If you use above macro when 5 mobs are attacking your pet at the same time, you pet just comes running to you, so all the mobs will be out of gun/bow range. + +If you use the following macro, your pet will start attacking the first mob that attacks him (not the scattershotted one) and he should stay virtually in place. + +/script PetPassiveMode(); +/cast Scatter Shot +/script PetDefensiveMode(); + + + +Summary of Commands + +/script PetAggressiveMode(); +/script PetDefensiveMode(); +/script PetPassiveMode(); +/script PetFollow(); +/script PetAttack(); +/script PetStopAttack(); + +and + +/script CastPetAction(X); + +with X being a number on the pet’s action bar (1, 2, 3…) + + + +Local Server time + +/script hour,min=GetGameTime() +/script DEFAULT_CHAT_FRAME:AddMessage(format(“Server time is %s:%s”,hour,min)); + + + +Location + +/script px,py=GetPlayerMapPosition(“player”) +/script DEFAULT_CHAT_FRAME:AddMessage(format(“[ %s ] %s , %s”,GetZoneText(),px,py)); + +Value will be between 0,0 (Top Left corner of current map) and 1,1 (Bottom Right) + +A variant that gives a value between 0 and 100, and reduces it to 1 decimal place: + +/script px,py=GetPlayerMapPosition(“player”) +/script DEFAULT_CHAT_FRAME:AddMessage(format(“%s: %.1f, %.1f”,GetZoneText(),px*100,py*100)); + + + +Change Action Bar Page + +/script CURRENT_ACTIONBAR_PAGE = X; +/script ChangeActionBarPage(); + +Use: Replace “X” with the action bar page number, and by pressing this, it’ll automatically change. Example: You have two of these, both set on the “=” on page 1 and 2, and have page 1′s set to change to page 2, and vice versa. Whenever you press “=”, it’ll toggle between page 1 and 2. + +The below macro one does the same thing as the one above, but without the need for two separate macros. It will just switch back and forth between action bar 1 and action bar 4. + +/script if (CURRENT_ACTIONBAR_PAGE == 1) then CURRENT_ACTIONBAR_PAGE = 4; else CURRENT_ACTIONBAR_PAGE = 1; end; ChangeActionBarPage(); + + + +Say Quest Objectives + +/script i = GetNumQuestLeaderBoards(); for j = 1, i, 1 do a1, a2, a3 = GetQuestLogLeaderBoard(j); SendChatMessage(a1, “PARTY”); end; + +Use: Sends your current quest objectives to your party. This way, you don’t have to constantly type to party members how many of each creature you need to complete a quest. + + + +Turn In Quest Items + +/script SelectGossipAvailableQuest(1); CompleteQuest(); GetQuestReward(); + +Use: This is usable at almost any quest giver with a blue question mark. It’s especially useful for doing Dark Iron Residue turn ins for Thorium Brotherhood faction. Some of these quest givers offer multiple quests. To have the macro select a quest besides the first one, simply change the number in the parentheses. \ No newline at end of file diff --git a/Hunter/Actionbar page.txt b/Hunter/Actionbar page.txt new file mode 100644 index 0000000..ba6d414 --- /dev/null +++ b/Hunter/Actionbar page.txt @@ -0,0 +1,36 @@ +Aspect actionbar change + +/cast Aspect of the Hawk +/script CURRENT_ACTIONBAR_PAGE = Y; +/script ChangeActionBarPage(); +/script UIErrorsFrame:Clear() + +Set number of action bar u wanna switch to insted of Y letter. + + + +Swap to bar 2 if you got a target in melee range, else use Auto Shot (Put Auto Shot in action slot 48) + +/run if CheckInteractDistance("target",3) then CURRENT_ACTIONBAR_PAGE = 2; ChangeActionBarPage(); else if not IsAutoRepeatAction(48) then CastSpellByName("Auto Shot"); end end + + + +Swap to bar 2 if you got a target in melee range, else cast Concussive Shot + +/run if CheckInteractDistance("target",3) then CURRENT_ACTIONBAR_PAGE = 2; ChangeActionBarPage(); end +/cast Concussive Shot + + + +Swap to bar 1 if you don't have a target in melee range, else cast Raptor Strike and Mongoose Bite + +/run if not CheckInteractDistance("target",3) then CURRENT_ACTIONBAR_PAGE = 1; ChangeActionBarPage(); else if (not PlayerFrame.inCombat) then AttackTarget() end end +/cast Raptor Strike +/cast Mongoose Bite + + + +Swap to bar 1 if you don't have a melee target, else cast Wing clip + +/run if not CheckInteractDistance("target",3) then CURRENT_ACTIONBAR_PAGE = 1; ChangeActionBarPage(); end +/cast Wing clip \ No newline at end of file diff --git a/Hunter/Arcane Shot.txt b/Hunter/Arcane Shot.txt new file mode 100644 index 0000000..d85bb68 --- /dev/null +++ b/Hunter/Arcane Shot.txt @@ -0,0 +1,5 @@ +Arcane Shot/Auto + +/run if not GetUnitName("target")then TargetNearestEnemy()end +/cast Arcane Shot(rank 1) +/run if CheckInteractDistance("target", 3)and not PlayerFrame.inCombat then AttackTarget()elseif not IsAutoRepeatAction(3)then CastSpellByName("Auto Shot")end \ No newline at end of file diff --git a/Hunter/Aspect.txt b/Hunter/Aspect.txt new file mode 100644 index 0000000..db32ef2 --- /dev/null +++ b/Hunter/Aspect.txt @@ -0,0 +1,39 @@ +Aspect of the Hawk if not buffed, else Aimed Shot + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Spell_Nature_RavenForm" then x=1 end i=i+1 end if x==0 then CastSpellByName("Aspect of the Hawk") else CastSpellByName("Aimed Shot")end + + + +Aspect of the Hawk if not buffed, else Auto Shot (Put Auto Shot into action slot 48) + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Spell_Nature_RavenForm" then x=1 end i=i+1 end if x==0 then CastSpellByName("Aspect of the Hawk")else if not IsAutoRepeatAction(48) then UseAction(48)end end + + + +Aspect of the Monkey/Raptor Strike + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Hunter_AspectOfTheMonkey" then x=1 end i=i+1 end if x==0 then CastSpellByName("Aspect of the Monkey") else CastSpellByName("Raptor Strike")end + + + +Aspect of the Monkey if melee, else Aspect of the Hawk + +/run if CheckInteractDistance("target",3) then CastSpellByName("Aspect of the Monkey") else CastSpellByName("Aspect of the Hawk")end + + + +Aspect of the Cheetah, else Aspect of the Pack + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Mount_JungleTiger" then x=1 end i=i+1 end if x==0 then CastSpellByName("Aspect of the Cheetah") else CastSpellByName("Aspect of the Pack") end + + + +Aspect of the Cheetah if solo, Pack if party + +/run if GetNumPartyMembers()==0 and GetNumRaidMembers()==0 then CastSpellByName("Aspect of the Cheetah") else CastSpellByName("Aspect of the Pack") end + + + +Aspect of the Hawk/Monkey + +/run if(UnitBuff("player",1)==nil)then CastSpellByName("Aspect of the Hawk")elseif(string.find(UnitBuff("player",1), "Raven"))then CastSpellByName("Aspect of the Monkey")elseif(UnitBuff("player",1))then CastSpellByName("Aspect of the Hawk");end \ No newline at end of file diff --git a/Hunter/Auto attack.txt b/Hunter/Auto attack.txt new file mode 100644 index 0000000..b12ee8a --- /dev/null +++ b/Hunter/Auto attack.txt @@ -0,0 +1,35 @@ +Spammable Auto Attack Macro w/ Melee and Ranged swapping (put Shoot or Auto Shot into action slot 1) + +/run if CheckInteractDistance("target", 3) and (not PlayerFrame.inCombat) then AttackTarget() elseif not IsAutoRepeatAction(1) then CastSpellByName("Auto Shot OR Shoot") end + +Replace Auto Shot or Shoot with your classes ranged auto attack + + + +Start Melee Attack + +/script if (not PlayerFrame.inCombat) then AttackTarget() end + + + +Auto Shot + +/script if not IsAutoRepeatAction(xx) then CastSpellByName("Auto Shot"); end + + + +Auto attack + +/run for z=1,172 do if IsAttackAction(z)then if not IsCurrentAction(z)then UseAction(z);end;end;end; + + + +Melee shoot + +/script local _,_,i=strfind(GetInventoryItemLink("player",18),"\124Hitem:(%d+)")local _,_,_,_,_,p=GetItemInfo(i)local t={}t.Bows="Bow"t.Guns="Gun"t.Crossbows="Crossbow"t.Thrown="Throw"CastSpellByName((string.gsub(t[p],"^([^T])","Shoot %1"))) + + + +Shoot (wand) Replace X with the Slot id of the skill on your hotbar + +/script if not IsAutoRepeatAction(X) then CastSpellByName("Shoot"); end \ No newline at end of file diff --git a/Hunter/Castsequence.txt b/Hunter/Castsequence.txt new file mode 100644 index 0000000..91869a8 --- /dev/null +++ b/Hunter/Castsequence.txt @@ -0,0 +1,3 @@ +Cycle Hunter's Mark, Serpent Sting, and Concussive Shot + +/run s={"Hunter's Mark","Serpent Sting","Concussive Shot"} if q==nil then q=0 end q=q+1 if q>getn(s) then q=1 end CastSpellByName(s[q]) \ No newline at end of file diff --git a/Hunter/Feign Death.txt b/Hunter/Feign Death.txt new file mode 100644 index 0000000..d07c87a --- /dev/null +++ b/Hunter/Feign Death.txt @@ -0,0 +1,3 @@ +Spammable Feign Death + +/run local i,x,T=1,0,"player" while UnitBuff(T,i) do if string.find(UnitBuff(T,i), "Feign") then x=1 end i=i+1 end if x==0 then CastSpellByName("Feign Death") else end \ No newline at end of file diff --git a/Hunter/Flare.txt b/Hunter/Flare.txt new file mode 100644 index 0000000..7c95fe2 --- /dev/null +++ b/Hunter/Flare.txt @@ -0,0 +1,9 @@ +Track Hidden, else spammable flare + +/run local g,h=GetTrackingTexture(),"Ability_Stealth";if not strfind(g,h) then CastSpellByName("Track Hidden")else if not SpellIsTargeting() then CastSpellByName("Flare")end end + + + +Hunter's Mark if target can be attacked, else Flare + +/Script if UnitCanAttack("player","target") then CastSpellByName("Hunter's Mark") else CastSpellByName("Flare") end; \ No newline at end of file diff --git a/Hunter/Hunter Vanish.txt b/Hunter/Hunter Vanish.txt new file mode 100644 index 0000000..25f52be --- /dev/null +++ b/Hunter/Hunter Vanish.txt @@ -0,0 +1,10 @@ +NE Hunter Vanish + +/run PetFollow() PetPassiveMode() ClearTarget() if UnitAffectingCombat("player") then CastSpellByName("Feign Death") else CastSpellByName("Shadowmeld") CastSpellByName("Prowl")end + + + +Use any Invisibility potion, Feign Death if combat + +/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Invisibility Potion"))then UseContainerItem(b,s,1)end end end +/run if UnitAffectingCombat("player") then CastSpellByName("Feign Death") end \ No newline at end of file diff --git a/Hunter/Hunter macros.txt b/Hunter/Hunter macros.txt new file mode 100644 index 0000000..de9bbc0 --- /dev/null +++ b/Hunter/Hunter macros.txt @@ -0,0 +1,303 @@ +AUTO SHOT +As strange as it might sound to have a macro for something as simple as Auto Shot, this is actually pretty important. Auto Shot is the core of your abilities, used for everything from initiating on a new target (before Aimed Shot) to doing most of your damage in dungeons and raids. + +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/run if CheckInteractDistance("target", 3) and (not PlayerFrame.inCombat) then AttackTarget() elseif not IsAutoRepeatAction(3) then CastSpellByName("Auto Shot") end + + + +This two-line macro will: +- Automatically target anything in front of you if you don't have a target. +- Begin using Auto Shot if you're at the appropriate distance to strike. +- Prevent Auto Shot from being toggled off if you hit the key again. +- Swap to melee auto attack if you're too close to Auto Shot. + +Two important functions in particular are added: The automatic targeting, which will allow you to basically point and shoot with your right mouse and Auto Shot keybind, and the function that prevents Auto Shot from being toggled off. Auto Shot is on its own cooldown, independent of the GCD, so it's important to be able to enable it on demand. + +You will need to modify this macro if you place it on any key other than 3 on your primary action bar. Please reference this screenshot: +http://i.imgur.com/VGArn.jpg + +And change the 3 in THIS part of the script: +IsAutoRepeatAction(3) + +To the key corresponding with the location of the macro on your own interface. + +MELEE ATTACKS +This is just a basic macro to lump all of your offensive melee skills onto one bind. + +/script if (not PlayerFrame.inCombat) then AttackTarget() end +/cast Raptor Strike +/cast Counterattack +/cast Mongoose Bite + + + +The first line will begin your melee attack, regardless of distance to target. The next three lines cast abilities. Because Raptor Strike and Mongoose Bite function differently, they can be used simultaneously. Counterattack and Mongoose Bite cannot be used simultaneously, but Counterattack is a priority, so it's listed first. + +GENERAL SHOTS +Consider the macro below to be a default for all of your skill shots. This example casts Serpent Sting. + +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/cast Serpent Sting + + + +The first line is automatic targeting. The second line will cast your ability. + +If you also wish to initiate your Auto Shot alongside your other shots, as I prefer, use the following macro instead... if you have an addon that allows longer than 255 characters. + +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/cast Arcane Shot(rank 1) +/run if CheckInteractDistance("target", 3) and (not PlayerFrame.inCombat) then AttackTarget() elseif not IsAutoRepeatAction(3) then CastSpellByName("Auto Shot") end + + + +Just don't forget to change "IsAutoRepeatAction(3)" to correspond with your interface again. + +If you don't have an addon like that, use this one instead. The following shorter script will attempt to enable your Auto Shot, but will not switch to melee attack if you're too close to your target. + +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/cast Arcane Shot(rank 1) +/script if not IsAutoRepeatAction(3) then CastSpellByName("Auto Shot"); end + + + +BASIC PET MACROS +Controlling your pet effectively is quite important. Your pet can aggro mobs, establish CC or break it, and ought to be doing damage on just the right target, or be in the right place to do that damage. So, this section will go over a few basic pet control macros and what you can do with them. + +PET ATTACK +The following macro is a simple macro that'll send your pet at your target. + + +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/script CastPetAction(2); +/script CastPetAction(10); +/script PetAttack(target) +/cast Charge +/cast Dash + + + +This macro's six lines do the following: +- Automatic targeting. +- Pet will follow you when disengaged from combat. +- Pet will act passively when disengaged from combat. +- Pet will attack the target specified. +- If available, your boar will Charge the target specified. +- If Charge isn't available or possible, Dash will be enabled instead. + +One of the most useful scripts in this macro is the CastPetAction script. Your pet's action bar has 10 abilities on it, and Follow is on 2 by default and Passive is on 10 by default. Since Attack is ordered after these two lines, your pet will attack your target. The reason for setting your pet to follow and passive is that direct control over your pet's actions will help to prevent mistakes. When you need to give orders to your pet, it's best to have it under your complete control, so setting it to Follow and Passive every time you give an order is a safe default. + +The final two lines contribute to your control. If you leave Dash on auto cast, your pet will spam it on cooldown, and that wastes focus and is likely to either prevent your pet from catching up to a target you need to catch, or get your pet killed if you need Dash to pull it back to you faster. By ordering Dash on attack, you ensure that your pet will make the fastest run to a new enemy target. + +PET FOLLOW +When you loose your pet on something, you're going to want some way to bring it back to you, for instance if the enemy flees and your pet will attract more enemies if it stays on that enemy. This macro does that: + + +/script PetFollow("Raziya") +/script CastPetAction(10); +/cast Dash + + + +It's a very straightforward macro. Just change "Raziya" in between the parentheses to your name. The second line causes your pet to be passive, provided the passive command is in its default position on your pet's action bar, at 10. The third line will make your pet Dash back to you, which is convenient if you need to pull it out of danger quickly. + +PET STAY +Telling your pet to stay has various uses. You can use it to guard a flag, or fool people by Shadowmelding in a different bush than the one your pet is in, or maybe you need to leave it behind while you go pull the acolytes out of a Ziggurat in Strath UD. Whatever the case, having a keybind for your pet to stay is useful. Here it is: + + +/script CastPetAction(3); +/script CastPetAction(10); + + + +The first line will tell your pet to stay. The second line will make your pet act passively. + +PET GROWL +You'll probably have your Growl turned off sometimes, like in a dungeon or for PvP. If an enemy rushes for your healer, you can send your pet at the enemy, order it to Growl, and then send it back at the mobs near the tank, effectively bringing the mob back to the tank spot without having to stop your DPS. + + +/cast Growl +/run local i,g=1,0 while GetSpellName(i,"pet") do if GetSpellName(i,"pet")=="Growl" then g=i end i=i+1 end local _,y = GetSpellAutocast(g,"pet") if not y then ToggleSpellAutocast(g,"pet") end + + + +The first line commands your pet to Growl. The second line turns its auto cast on. If you want a script to turn Growl's auto cast off, one contributor posted this in the comments on this thread: + + +Etrigan wrote: +/script local i,g=1,0 while GetSpellName(i,"pet") do if GetSpellName(i,"pet")=="Growl" then g=i end i=i+1 end local _,y = GetSpellAutocast(g,"pet") if (y and UnitFactionGroup("target")) then ToggleSpellAutocast(g,"pet") end + + + +MISCELLANEOUS MACROS +Here are just a couple of macros which don't fall under other categories. One of them is Night Elf-specific. + +FEIGN DEATH +This macro will ensure that the only time you ever use Feign Death is while you're in combat. + +/script if UnitAffectingCombat("player") then CastSpellByName("Feign Death") end + + + +On its own, it's nothing special, but this script will be used in combination with other abilities later. + +SHADOWMELD +Shadowmeld is a great skill that can help you stay alive or set up kills, especially as a hunter. + + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Ambush" then x=1 end i=i+1 end if x==0 then CastSpellByName("Shadowmeld") else end + + + +This will prevent you from toggling your Shadowmeld off. I don't know any sort of macro that would do the same for Prowl, so... sorry! + +DETERRENCE / MONKEY + +/cast Deterrence +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Ability_Hunter_AspectOfTheMonkey" then x=1 end i=i+1 end if x==0 then CastSpellByName("Aspect of the Monkey") else end + + + +This Deterrence macro will cast Aspect of the Monkey and Deterrence. Aspect of the Monkey will not be toggled off. + + +FRIEND OR FOE +This script will cast one spell if your target is friendly. It'll cast a different spell if your target is hostile. + +/script if UnitIsFriend("player", "target") then CastSpellByName("Aspect of the Pack") else CastSpellByName("Aspect of the Cheetah") end + + + +This example will cast Pack if your target is friendly, but Cheetah under any other circumstances. That way, if you're in a group and you want to give Pack to people, just click an ally and you don't have to reserve another keybind for Pack! + +You can modify this to use items. For instance, here's my Scare Beast macro: + +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/script if UnitIsFriend("player", "target") then UseContainerItem(0, 16) else CastSpellByName("Scare Beast") end + + + +If targeting an ally, this will use the item in the lower-right corner of my backpack. That's where I keep my bandages. Experiment with the UseContainerItem parameters as needed. + +CC MACROS +Hunters have incredible crowd control, but several of our abilities can be tricky to use, such as traps, which require we be out of combat. I put together these macros to help make CC more easily maintained. + +SCATTER SHOT MACRO +This macro is awesome for abilities like Scatter Shot or Wyvern Sting. + +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/script if UnitExists("pettarget") and UnitIsUnit("target", "pettarget") then PetPassiveMode() CastPetAction(3); else end +/cast Scatter Shot + + + +After auto targeting, this macro will check if you and your pet are attacking the same target. If so, your pet will be set to passive and stay at its current position. If not, your pet will continue attacking its target. + +Just remember to give the attack order again after your enemy has recovered. + +FEIGN DEATH / TRAP +Since hunters can't use traps in combat, we need to rely on Feign Death to drop a trap in a pinch. This macro has proven to be very useful: + +/cast Immolation Trap +/script if UnitAffectingCombat("player") then CastSpellByName("Feign Death") end + + + +You need to hit this macro at least twice regardless of script order, so you might as well have your trap as the first line so your macro shows the tooltip for the trap, rather than Feign Death. + +FREEZING TRAP +The Freezing Trap can be broken by your pet too, so I went ahead and did this to mine: + +/cast Freezing Trap +/script if UnitAffectingCombat("player") then CastSpellByName("Feign Death") end +/script if UnitExists("pettarget") and CheckInteractDistance("target", 3) and UnitIsUnit("target", "pettarget") then PetPassiveMode(); else end + + + +Feign Death will be used if you're in combat. If you and your pet are targeting the same thing, and the enemy is close to you, then your pet will be pulled off of the enemy. The only drawback is that you'd need to be targeting the enemy you intend to trap, but in a 1v1 this works nicely. So, world PvP. + +ADVANCED MACROS +Here we get into some longer, cooler macros than the basic ones mentioned before this point. All of them will be focused on reducing keybinds based on situational parameters. + +COMBAT ASPECT SWAP / ASPECT SITUATIONAL +Aspect of the Hawk and Aspect of the Monkey are both important abilities to have bound, especially for a PvPer or a Ravager, but you'd need two keybinds. The following macros put them in one keybind. + +The first solution I came up with was a swap macro: + +/run local i,x=1,0 while UnitBuff("player",i) do if UnitBuff("player",i)=="Interface\\Icons\\Spell_Nature_RavenForm" then x=1 end i=i+1 end if x==0 then CastSpellByName("Aspect of the Hawk") else CastSpellByName("Aspect of the Monkey") end + + + +This macro uses a similar structure to the Shadowmeld macro. If you're in no aspect or in any other aspect, it'll toggle on Aspect of the Hawk. If you're in Aspect of the Hawk, it'll switch to Aspect of the Monkey. + +The second solution I came up with was a distance check: + +/run if CheckInteractDistance("target", 3) then CastSpellByName("Aspect of the Monkey") else CastSpellByName("Aspect of the Hawk") end + + + +This macro uses a similar structure to the Auto Shot macro. If you have no target or if your target is far away from you, it'll cast Aspect of the Hawk. If your target is close to you, it'll cast Aspect of the Monkey. + +Both macros function differently, but to the same end. Take whichever you like, if either. + +SITUATIONAL STING +You're never going to use Scorpid Sting on a mage, right? Or Viper Sting on a rogue. So, here's a macro that casts the right sting depending on the class of your target: + +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/script class=UnitClass("target"); if ((class=="Rogue") or (class=="Warrior")) then CastSpellByName("Scorpid Sting"); else CastSpellByName("Viper Sting"); end + + + +It also seems to work on NPCs. NPCs with mana get Viper Sting, and NPCs without mana get Scorpid Sting. Reportedly a few people have had trouble with it on druids shapeshifted into cat or bear form, but I think that may have been an issue on Nostalrius only. On Kronos II I've confirmed that this works properly all the time. + +ALL-IN-ONE PET MAINTENANCE +We have a lot of abilities that affect our pet. The following macro combines feed pet, call pet, dismiss pet, and revive pet. + +/run local c=CastSpellByName if UnitExists("pet") then if UnitHealth("pet")==0 then c("Revive Pet") elseif GetPetHappiness()~=nil and GetPetHappiness()~=3 then c("Feed Pet") PickupContainerItem(0, 13) else c("Dismiss Pet") end else c("Call Pet") end + + + +If your pet is dismissed, this macro will call it. If your pet is called and happy, this macro will dismiss it. If your pet is called and unhappy, this macro will feed it the item in the bottom left corner of your backpack. If your pet's dead, it'll be revived. + +You can change the bagslot this macro checks for food in by changing the "PickupContainerItem(0, 13)" part. The bags count from 0-4, starting from the Backpack, so 0, 13 there means the 13th slot in the backpack. + +MY PERSONAL MACROS +Due to popular demand, I'm dropping a few of my own personal macros here. See details below: + +MULTI-SHOT + +/script if GetUnitName("target")==nil then TargetNearestEnemy() end +/cast Multi-Shot(rank 1) +/cast Volley +/script if not IsAutoRepeatAction(3) then CastSpellByName("Auto Shot"); end + + + +This is a simple fall-through macro. If you hit it once, you target anything up to 40 yards in front of you, cast Multi-Shot, and toggle your Auto Shot on. Hit it again while Multi-Shot is on cooldown, and you'll cast Volley. Alternatively, if Multi never goes off, Volley will be selected immediately. + +Unless your Flare is on cooldown and you have the mana to spare to take a rogue out of invisibility, I don't really think you'll have any urgency to use Volley until you're AoEing something, and Multi-Shot is often the priority, hence the use of this macro. + +Remember to adjust the Auto Shot script according to your interface. See section 2.2.1 for more information. + +WING CLIP + +/script if (not PlayerFrame.inCombat) then AttackTarget() end +/cast Counterattack(Rank 1) +/cast Wing Clip +/cast Wing Clip(Rank 2) +/cast Wing Clip(Rank 1) + + + +This is a fall-through macro for Wing Clip. If you happen to be super low on mana for some reason and can't use maximum rank Wing Clip, a lower rank will be used instead. Counterattack is a priority over all ranks of Wing Clip. + +COORDINATES + +/script SetMapToCurrentZone() local x,y=GetPlayerMapPosition("player") DEFAULT_CHAT_FRAME:AddMessage(format("%s, %s: %.1f, %.1f",GetZoneText(),GetSubZoneText(),x*100,y*100)) + +This macro tells you your current coordinates. I keep it around to help mark locations on my map using Cartographer's note system. + + + +Macros by Raziya \ No newline at end of file diff --git a/Hunter/Hunter's Mark.txt b/Hunter/Hunter's Mark.txt new file mode 100644 index 0000000..f49129f --- /dev/null +++ b/Hunter/Hunter's Mark.txt @@ -0,0 +1,15 @@ +Hunter's Mark + +/run local i,x=1,0 while UnitDebuff("target",i) do if UnitDebuff("target",i)=="Interface\\Icons\\Ability_Hunter_SniperShot" then x=1 end i=i+1 end if x==0 then CastSpellByName("Hunter's Mark")end + + + +Hunter's Mark/Pet Attack + +/run local i,x=1,0 while UnitDebuff("target",i) do if UnitDebuff("target",i)=="Interface\\Icons\\Ability_Hunter_SniperShot" then x=1 end i=i+1 end if x==0 then CastSpellByName("Hunter's Mark") else PetAttack()end + + + +Hunter's Mark/Aimed Shot + +/run local i,x=1,0 while UnitDebuff("target",i) do if UnitDebuff("target",i)=="Interface\\Icons\\Ability_Hunter_SniperShot" then x=1 end i=i+1 end if x==0 then CastSpellByName("Hunter's Mark") else CastSpellByName("Aimed Shot")end \ No newline at end of file diff --git "a/Hunter/Nefaria\357\273\277n.txt" "b/Hunter/Nefaria\357\273\277n.txt" new file mode 100644 index 0000000..5660d01 --- /dev/null +++ "b/Hunter/Nefaria\357\273\277n.txt" @@ -0,0 +1,3 @@ +Make sure the very first slot in your backpack is open for this to work, your ranged weapon will be put there. + +/script PickupInventoryItem(18) if ( CursorHasItem() ) then PickupContainerItem(0, 1); else PickupContainerItem(0, 1); PickupInventoryItem(18);end \ No newline at end of file diff --git a/Hunter/Pet.txt b/Hunter/Pet.txt new file mode 100644 index 0000000..1140133 --- /dev/null +++ b/Hunter/Pet.txt @@ -0,0 +1,149 @@ +Pet bar macro (the skills are 1,2,3,4,5 from left to right) + +/script CastPetAction(5); + + + +Pet attack + +/script PetAttack() + + + +Passive pet + +/script PetPassiveMode(); + + + +Pet follow + +/script PetFollow(); + + + +Toggle Autocast (the skills are 1,2,3,4,5 from left to right) + +/script TogglePetAutocast(5) + + + +Insta dismiss + +/Script PetDismiss() + + + +One button pet follow/stay + +/run local _,_,_,_,x = GetPetActionInfo(2); if x then PetWait() else PetFollow() end + + + +Target/Tame Beast (edit Lupos for next pet name) + +/run TargetByName("Lupos", exactMatch); +/run if not CastingBarFrame.channeling then CastSpellByName("Tame Beast"); end; + + + +Adjust the automatic casting of pet based on target + +/script PetAttack() local x,p,j,e,_={1,1,1},UnitPowerType("target");if UnitIsPlayer("target") then if p==0 then x={nil,1,1};else x={nil,1,1};end;end;for j=4,7 do _,_,_,_,_,_,e=GetPetActionInfo(j);if x[j-3]~=e then TogglePetAutocast(j);end;end; + + + +Turn Autogrowl on + +/run local i,g=1,0 while GetSpellName(i,"pet") do if GetSpellName(i,"pet")=="Growl" then g=i end i=i+1 end local _,y = GetSpellAutocast(g,"pet") if not y then ToggleSpellAutocast(g,"pet") end + + + +Turn Autogrowl off + +/run local i,g=1,0 while GetSpellName(i,"pet") do if GetSpellName(i,"pet")=="Growl" then g=i end i=i+1 end local _,y = GetSpellAutocast(g,"pet") if y then ToggleSpellAutocast(g,"pet") end + + + +Disables growl whenever you tell your pet to attack a player in PvP + +/script local i,g=1,0 while GetSpellName(i,"pet") do if GetSpellName(i,"pet")=="Growl" then g=i end i=i+1 end local _,y = GetSpellAutocast(g,"pet") if (y and UnitFactionGroup("target")) then ToggleSpellAutocast(g,"pet") end +/script PetAttack(); + + + +Spammable Prowl + +/script local i,x=1,0 while UnitBuff("pet",i) do if string.find(UnitBuff("pet",i),"Prowl") then x=1 end i=i+1 end if x==0 then CastSpellByName("Prowl");end + + + +Feed Pet (edit Tender Wolf Steak) + +/run for b=0,4 do for s=1,GetContainerNumSlots(b,s)do local n=GetContainerItemLink(b,s)if n and (strfind(n,"Tender Wolf Steak"))then PickupContainerItem(b,s)CastSpellByName("Feed Pet")end end end + + + +Pet attack/follow (edit YOURNAMEHERE) + +/script if UnitExists("target") then if a==0 then PetAttack(target) a=1 else if UnitExists("pettarget") and UnitIsUnit("target", "pettarget") then PetFollow("YOURNAMEHERE") a=0 else PetAttack(target) end;end; else PetFollow("YOURNAMEHERE") a=0 end + + + +Call Pet, Revive Pet or Mend Pet + +/run if not UnitExists("pet") then CastSpellByName("Call Pet") else if UnitIsDead("pet") then CastSpellByName("Revive Pet") else CastSpellByName("Mend Pet") end end + + + +Call/dismiss/revive/heal/feed + +/run c=CastSpellByName p="pet" h=UnitHealth(p)if not UnitExists(p)then c("Call Pet")elseif h<1 then c("Revive Pet")elseif GetPetHappiness()<3 then c("Feed Pet")PickupContainerItem(3, 12)elseif h