This is my home grown shaman macro. However, there's a problem. I'm trying to figure out the best place to put /stance passive after combat ends, and /stance assist when it begins. See, he doesn't start till the target mob is at 97%. This gives time to get the mob in camp and the tank to get agro. But it isn't working.
Shaman macro info:
* Go through it, replace "Shaman" with your Shaman's name
* Do the same for Tank
* At 97%, he will stand and cast slow, cripple, Lynx and 2 dots. He cannis and uses Ancestral Obligation with LOM.
* He has a number of trigger commands used in group:
--rc = radiant cure
--sow = SoW
--focus = Group Unity
--regen = group regen
--fh = fast heal
--hot = halcyon whisper
* He will auto check your clickies to reactivate the clickies. I haven't put in code for crack potions yet.
Should work fine for all.
Shaman macro info:
* Go through it, replace "Shaman" with your Shaman's name
* Do the same for Tank
* At 97%, he will stand and cast slow, cripple, Lynx and 2 dots. He cannis and uses Ancestral Obligation with LOM.
* He has a number of trigger commands used in group:
--rc = radiant cure
--sow = SoW
--focus = Group Unity
--regen = group regen
--fh = fast heal
--hot = halcyon whisper
* He will auto check your clickies to reactivate the clickies. I haven't put in code for crack potions yet.
Should work fine for all.
Code:
| Controller Macro
| Usage : /macro Controller
| Requirements:
|-spell_routines.inc
|-MQ2MoveUtils
|-MQ2ReachIt
|-MQ2AutoAcceptTrades
|-MQ2AutoGroup
|-MQ2Reward
|-MQ2Exchange
|-----------------------------------------------------------
#Event AE "Tank tells the group, 'AE'"
#Event Quest "Tank tells the group, 'Quest #1#'"
#Event QuestComplete "Your task #*# has been updated.
#Event Fade "Tank tells the group, 'FADE!'"
#Event OutDoor "You can not summon a mount here."
#Event OutDoor "#*#You can only cast this spell in the Outdoors#*#"
#Event OutDoor "#*#This spell does not work here.#*#"
#Event Move "Tank tells the group, 'Move'"
#Event Invis "Tank tells the group, 'Invis'"
#Event Halt "Tank tells the group, 'Halt'"
#Event Come "Tank tells the group, 'Come!'"
#Event Call2Fellowship "Tank tells the group, 'Come to Fellowship'"
#Event Gate "Tank tells the group, 'Gate'"
#Event Camp "Tank tells the group, 'Camp'"
#Event Zoning "LOADING, PLEASE WAIT..."
#Event GotAggro "#1#hits YOU for#*#"
#Event GotAggro "#1#slashes YOU for#*#"
#Event GotAggro "#1#crushes YOU for#*#"
#Event GotAggro "#1#bashes YOU for#*#"
#Event GotAggro "#1#kicks YOU for#*#"
#Event GotAggro "#1#smashes YOU for#*#"
#Event GotAggro "#1#mauls YOU for#*#"
#Event GotAggro "#1#gores YOU for#*#"
#Event GotAggro "#1#pierces YOU for#*#"
#Event GotAggro "#1#Slices YOU for#*#"
#Event GotAggro "#1#bites YOU for#*#"
#Event RageOn "#*#|${Target.CleanName}| has become ENRAGED#*#"
#Event RageOff "#*#|${Target.CleanName}| is no longer enraged#*#"
#Event Dead "You have been slain by #*#"
#Event Dead "You died."
#include spell_routines.inc
Sub Main
/declare tank string outer Tank
/declare shaman string outer SHaman
/declare nukedelay timer outer 5s
/declare FadeTimer timer outer 0
/declare OutDoors bool outer TRUE
/declare Mobile bool outer FALSE
/declare WGTimer timer outer
/declare HoTTimer timer outer
/if (${Me.Class.Name.Equal[Shaman]}) {
|configure slow spell here
/declare debuffspell1 string outer Balance of Discord
/declare debuffgem1 string outer gem1
/declare debuffspell2 string outer Crippling Spasm
/declare debuffgem2 string outer gem3
|configure dots here
/declare dot1 string outer Mojo
/declare dot1gem string outer gem9
/declare dot2 string outer Blood of Jaled'Dar Rk. II
/declare dot2gem string outer gem8
|configure mana to stop doting here
/declare stopmana int outer 20
/declare BuffSub int outer 1
/declare BuffSpells int outer 3
/declare BuffSpell1 string outer "Form of Endurance III"
/declare BuffSpell2 string outer "Geomantra"
/declare BuffSpell3 string outer "Reyfin's Random Musings"
/declare BuffSpellName1 string outer "Brass Facade"
/declare BuffSpellName2 string outer "Pyroclast of the Crystal Core"
/declare BuffSpellName3 string outer "Hollowed Bone Section"
/declare BuffSpellGem1 string outer item
/declare BuffSpellGem2 string outer item
/declare BuffSpellGem3 string outer item
/call Shaman
}
/echo Unusable class - ending.
/end
|--------------------------------------------------------------------------------
|Code: Shaman
|--------------------------------------------------------------------------------
Sub Shaman
/echo Starting Shaman Controller...
/declare TempID1 int inner 0
/declare TempID2 int inner 0
:topshaman
/doevents
/if (${Spawn[npc radius 100 zradius 50].ID}==0) /call ShamanBuffs
| /call HealGroup
/assist ${tank}
/if (!${Me.Mount.ID} && ${Me.State.Equal[STAND]} && ${Me.CombatState.NotEqual[COMBAT]}) /sit
/if (!${Target.ID} || ${Target.Type.NotEqual[NPC]} || ${Target.Distance}>150 || ${Target.PctHPs}>97) /goto :topshaman
|--------------------------------------------------------------------------------
|Code: Shaman Combat
|--------------------------------------------------------------------------------
|/alt activate 1041
/delay 2s
/pet kill
/stance assist
:combatshaman
/assist ${tank}
/doevents
/if (!${Target.ID} || ${Target.Type.NotEqual[NPC]} || ${Target.Distance}>150 || ${Target.PctHPs}>97) /goto :topshaman
/delay 4s ${Me.SpellReady[${debuffspell1}]}
/if (!${slowed${Target.ID}}) {
/call Cast "${debuffspell1}" "${debuffgem1}"
| /echo Slow spell returned ${castReturn}
/delay 3s
/if (${Macro.Return.Equal[CAST_IMMUNE]}) /declare slowed${Target.ID} timer outer 20m
/if (${Macro.Return.Equal[CAST_SUCCESS]}) {
/if (!${Defined[slowed${Target.ID}]}) /declare slowed${Target.ID} timer outer
/varset slowed${Target.ID} 1.5m
}
}
/if (!${crippled${Target.ID}} && ${Me.SpellReady[${debuffspell2}]}) {
/call Cast "${debuffspell2}" "${debuffgem2}"
/delay 1s
/if (${Macro.Return.Equal[CAST_SUCCESS]}) {
/if (!${Defined[crippled${Target.ID}]}) /declare crippled${Target.ID} timer outer
/varset crippled${Target.ID} 7.5m
}
}
/if (!${Me.Buff[Talisman of the Lynx].ID}) /call Cast "Talisman of the Lynx" gem6
|/if (${WGTimer}==0) {
| /varset TempID1 ${Target.ID}
| /target ${tank}
| /delay 2s
| :ReCast1
| /call Cast "Wild Growth Rk. II" gem5
| /if (${Macro.Return.Equal[CAST_FIZZLE]}) /goto :ReCast1
| /varset WGTimer 4m
| /target id ${TempID}
|}
/if (${Target.PctHPs}>10 && ${Me.PctMana}>${stopmana}) {
/if (!${dot1${Target.ID}} && ${Me.SpellReady[${dot1}]}) {
/call Cast "${dot1}" "${dot1gem}"
/if (!${Defined[dot1${Target.ID}]}) /declare dot1${Target.ID} timer outer
/varset dot1${Target.ID} 1m
}
/if (!${dot2${Target.ID}} && ${Me.SpellReady[${dot2}]}) {
/call Cast "${dot2}" "${dot2gem}"
/if (!${Defined[dot2${Target.ID}]}) /declare dot2${Target.ID} timer outer
/varset dot2${Target.ID} 1m
}
}
/call HealGroup
/goto :combatshaman
/return
|--------------------------------------------------------------------------------
|Code: Shaman Check BUffs
|--------------------------------------------------------------------------------
Sub ShamanBuffs
/if (${Me.Pet.Name.Equal[#Shaman`s_familiar00]}) /pet get lost
/if (${Me.Pet.ID}==0) {
/call Cast "Aina's Faithful Rk. II" gem10
/memspell 10 "Ancestral Obligation Rk. II"
/delay 2s
}
/if ((!${Me.Buff[Familiar: Emerald Sokokar].ID}) && (!${Me.Pet.ID}==0)) /call Cast "Familiar of the Emerald Jungle" item
/if ((${Me.PctHPs}>80) && (${Me.PctMana}<70)) /call Cast "Cannibalization" alt
/if ((${Me.PctHPs}>70) && (${Me.PctMana}<80)) /call Cast "Ancestral Obligation Rk. II" gem10
/if (${Me.PctHPs}<75) {
/tar ${shaman}
/call Cast "Halcyon Whisper Rk. II" gem4
}
/if (${Me.Buff[Darkpaw Focusing Rk. II].Duration}<5) {
/memspell "Talisman of Unity Rk. II" 7
/target Shaman
/call Cast "Talisman of Unity Rk. II"
/delay 8s
}
/if (${Me.Buff[Talisman of the Resolute Rk. II].Duration}<5) {
/call Cast "Talisman of the Resolute Rk. II" gem7
/delay 4s
}
/for BuffSub 1 to ${BuffSpells}
/if (${Me.Buff[${BuffSpell${BuffSub}}].Duration}<2) {
/target ${Me.Name}
/memspell ${BuffSpellName${BuffSub}} ${BuffSpellGem${BuffSub}}
/call Cast ${BuffSpellName${BuffSub}} ${BuffSpellGem${BuffSub}}
}
/next BuffSub
/return
|--------------------------------------------------------------------------------
|Code: Shaman Heal Group
|--------------------------------------------------------------------------------
Sub HealGroup
/declare TempID3 int inner 0
/declare i int local 0
/declare j int local 100
/declare k int local
/doevents
/for i 0 to ${Math.Calc[${Group.GroupSize}-1]}
|/echo ${i} ${Group.Member[${i}].PctHPs}
/if (${Group.Member[${i}].PctHPs} < (${j}-1)) {
|/echo less than ${j} - ${i} ${Group.Member[${i}].PctHPs}
/varset j ${Group.Member[${i}].PctHPs}
/varset k ${i}
}
/next i
/if (${j} > 60) {
|/echo ${Group.Member[${k}]} has ${j}% HP
|/echo Not missing enough to heal
/return
}
|/echo ${Group.Member[${k}]} has ${j}% HP
/if ((${Me.Gem[Dannal's Mending Rk. II]})&&(${Me.SpellReady[Dannal's Mending Rk. II]})) {
/gsay Healing ${Group.Member[${k}]}'s ass in ${Spell[Dannal's Mending Rk. II].MyCastTime} secs.
/varset TempID3 ${Target.ID}
/target ${Group.Member[${k}]}
/call Cast "Dannal's Mending Rk. II" gem2
/target id ${TempID3}
}
/return
|--------------------------------------------------------------------------------
|Code: Shaman Local Events
|--------------------------------------------------------------------------------
#Event rTellR "#1# tells the group, 'regen'"
Sub Event_rTellR(string line,string Requester)
/target pc ${Requester}
/gsay Buffing Talisman of the Resolute Rk. II.
/memspell "Talisman of the Resolute Rk. II" gem7
/call Cast "Talisman of the Resolute Rk. II" gem7
/delay 4s
/return
#Event rTellHot "#1# tells the group, 'hot'"
Sub Event_rTellHot(string line,string Requester)
/if ((${Me.Gem[Halcyon Whisper Rk. II]})&&(${Me.SpellReady[Halcyon Whisper Rk. II]})) {
/gsay HoT in ${Spell[Halcyon Whisper Rk. II].MyCastTime} secs.
/target pc ${Requester}
/call Cast "Halcyon Whisper Rk. II" gem4
}
/return
#Event rTellHl "#1# tells the group, 'fh'"
Sub Event_rTellHl(string line,string Requester)
/if ((${Me.Gem[Dannal's Mending Rk. II]})&&(${Me.SpellReady[Dannal's Mending Rk. II]})) {
/target ${Requester}
/gsay Healing %T's ass in ${Spell[Dannal's Mending Rk. II].MyCastTime} secs.
/declare TempID4 int inner 0
/varset TempID4 ${Target.ID}
/call Cast "Dannal's Mending Rk. II" gem2
/target id ${TempID4}
}
/return
#Event Slow "#1# tells the group, 'slow'"
Sub Event_Slow
/if (${Me.Class.Name.NotEqual[Shaman]}) /return
/assist ${tank}
/delay 1
/gsay SLOWING %T!
/if (!${slowed${Target.ID}} && ${Me.SpellReady[${debuffspell1}]}) {
/call Cast "${debuffspell1}" "${debuffgem1}"
/delay 1
/if (${Macro.Return.Equal[CAST_IMMUNE]}) /declare slowed${Target.ID} timer outer 20m
/if (${Macro.Return.Equal[CAST_SUCCESS]}) {
/if (!${Defined[slowed${Target.ID}]}) /declare slowed${Target.ID} timer outer
/varset slowed${Target.ID} 1.5m
/gsay SLOWED %T.
}
}
/return
#Event RCReq "#1# tells the group, 'rc'"
Sub Event_RCReq(string line,string Requester)
/alt activate 153
/delay 4s
/return
#Event rTellHa "#1# tells the group, 'haste'"
Sub Event_rTellHa(string line,string Requester)
/target ${Requester}
/memspell 7 "Talisman of Celerity"
/gsay Haste Inc.
/call Cast "Talisman of Celerity" gem7
/delay 4s
/return
#Event Focus "#1# tells the group, 'focus'"
Sub Event_Focus(string line,string Requester)
/tar ${Requester}
/gsay Buffing Talisman of Unity on %T.
/call Cast "Talisman of Unity Rk. II" gem7
/delay 10s
/return
#Event Shrink "#1# tells the group, 'shrink'"
Sub Event_Shrink(string line,string Requester)
/if (${Me.Class.Name.NotEqual[Shaman]}) /return
/memspell 8 "Shrink"
/if ((${Me.Gem[Shrink]})&&(${Me.SpellReady[Shrink]})) {
/target ${Requester}
/call Cast "Shrink" gem8
/delay 3s
/memspell 8 "Mojo"
/delay 2 ${Me.Gem[Mojo]}
}
/return
#Event SOW "#1# tells the group, 'sow'"
Sub Event_SOW(string line,string Requester)
/target ${Requester}
/memspell "Spirit of Bih`Li" gem7
/call Cast "Spirit of Bih`Li" gem7
}
/return
Sub Event_OutDoor
/echo This is an indoor zone. Sorry.
/varset OutDoors FALSE
/return