Complex heal macro notes

These are the notes I took while building & testing the Complex heal macro. It's a little messy and I wouldn't use it to get a copy of the macro, but if you are learning to create WOW macros this might be useful. As you follow down the list you'll see how I move different commands around and try to find the right command or order to get something done. It is often useful to break a task down into smaller parts and try to solve them first as I do here with the friendly and nil target parts. Hope this helps and if you have any comments feel free to use the Talk:Complex heal macro notes page...

/UnitMana("unit")

/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

Original script /script if (UnitName("target") ~=nil and UnitIsFriend("player","target")) then CastSpellByName("Healing Touch(Rank 9)") SendChatMessage("Healing %T", "Party") else TargetUnit("player") CastSpellByName("Healing Touch(Rank 9)") TargetLastEnemy; end

First version - reduction - no mana check /run t="target" p="player" h="Healing Touch" if (UnitName(t) ~=nil and UnitIsFriend(p,t)) then CastSpellByName(h) SendChatMessage("Healing %T", "Party") else TargetUnit(p) CastSpellByName(h) TargetLastEnemy; end

second version - mana check /run t="target" p="player" h="Healing Touch" m=200 if UnitMana(p) > m then if (UnitName(t) ~=nil and UnitIsFriend(p,t)) then CastSpellByName(h) SendChatMessage("Healing %T", "Party") else TargetUnit(p) CastSpellByName(h) TargetLastEnemy return else SendChatMessage("/oom"); end

third version - (2nd too long removing oom emote)

/run t="target" p="player" h="Healing Touch" m=546 if UnitMana(p) > m then if (UnitName(t) ~=nil and UnitIsFriend(p,t)) then CastSpellByName(h) SendChatMessage("Healing %T", "Party") else TargetUnit(p) CastSpellByName(h) TargetLastEnemy return; end end

fourth version

/run t="target" p="player" h="Healing Touch" m="546" if UnitMana(p) > m then if (UnitName(t) ~=nil and UnitIsFriend(p,t)) then CastSpellByName(h) s="Healing %T" else TargetUnit(p) CastSpellByName(h) TargetLastEnemy return; else s="/oom" end SendChatMessage(s, "Party") end

fifth version /run t="target" p="player" h="Healing Touch" s="oom" m=546 if UnitMana(p) > m then if (UnitName(t) = nil or UnitIsEnemy(p,t)) then TargetUnit(p) return; CastSpellByName(h) s="Heal %T" TargetLastEnemy end SendChatMessage(s, "Party") end

test friendly /run t="target" p="player" if ((UnitName(t)=nil) or UnitIsEnemy(p,t)) then TargetUnit(p) SendChatMessage(p, "Party") end /run t="target" p="player" if (UnitName(t) = nil or UnitIsEnemy(p,t)) then TargetUnit(p) SendChatMessage(p, "Party") end /run t="target" p="player" if UnitIsEnemy(p,t) then TargetUnit(p) SendChatMessage(t, "Whisper", "Common", UnitName(p)) end

working half of friendly /run t="target" p="player" if UnitIsEnemy(p,t) then TargetUnit(p) end SendChatMessage(UnitName(t), "Whisper", "Common", UnitName(p))

test other half of friendly /run t="target" p="player" if (UnitName(t)=nil) then TargetUnit(p) end SendChatMessage(UnitName(t), "Whisper", "Common", UnitName(p))

test other half of friendly v2 /run t="target" p="player" if not (UnitName(t)) then TargetUnit(p) t="player" end SendChatMessage(UnitName(t), "Whisper", "Common", UnitName(p))

test - doesn't work - lua treats all values as non nil (even 0) /run t="target" p="player" if ((UnitName(t) or UnitIsEnemy(p,t)) then TargetUnit(p) end SendChatMessage(UnitName(t), "Whisper", "Common", UnitName(p))

It's having a problem with sending the message because the target name is nil /run t="target" p="player" if ((UnitName(t) or UnitIsEnemy(p,t)) then TargetUnit(p) t="player" end SendChatMessage(UnitName(t), "Whisper", "Common", UnitName(p))

Working second half of friendly /run t="target" p="player" if not (UnitName(t)) then TargetUnit(p) t="player" end SendChatMessage(UnitName(t), "Whisper", "Common", UnitName(p))

Merged friendly /run t="target" p="player" if not UnitName(t) or UnitIsEnemy(p,t) then TargetUnit(p) t="player" end SendChatMessage(UnitName(t), "Whisper", "Common", UnitName(p))

sixth version - IT WORKS!!!! /run t="target" p="player" h="Healing Touch" s="oom" m=546 if UnitMana(p) > m then if not UnitName(t) or UnitIsEnemy(p,t) then TargetUnit(p) t="player" end CastSpellByName(h) s="Heal %T" TargetLastEnemy end SendChatMessage(s, "Party")

Seventh version -removed spell name variable to add better text /run t="target" p="player" s="oom" m=546 if UnitMana(p) > m then if not UnitName(t) or UnitIsEnemy(p,t) then TargetUnit(p) t="player" end CastSpellByName("Healing Touch") s="Healing %T" TargetLastEnemy end SendChatMessage(s, "Party")

eighth version - trying to get emote /run t="target" p="player" s="oom" x="Emote" m=5546 if UnitMana(p) > m then if not UnitName(t) or UnitIsEnemy(p,t) then TargetUnit(p) t="player" end CastSpellByName("Healing Touch") x="Party" s="Healing %T" TargetLastEnemy end SendChatMessage(s, x) /run t="target" p="player" s="oom" c="Emote" m=5546 if UnitMana(p) > m then if not UnitName(t) or UnitIsEnemy(p,t) then TargetUnit(p) t="player" end CastSpellByName("Healing Touch") c="Party" s="Healing %T" TargetLastEnemy end SendChatMessage(c, "Party") /run t="target" p="player" m=3546 if UnitMana(p) > m then if not UnitName(t) or UnitIsEnemy(p,t) then TargetUnit(p) t="player" end CastSpellByName("Healing Touch") x="Party" s="Healing %T" TargetLastEnemy else s="oom" x="Emote" end SendChatMessage(s, x)

/run t="target" p="player" m=546 if UnitMana(p) > m then if not UnitName(t) or UnitIsEnemy(p,t) then TargetUnit(p) t="player" end CastSpellByName("Healing Touch") TargetLastEnemy SendChatMessage("Healing %T","Party") else DoEmote("oom") end

test mana /run p="player" SendChatMessage(UnitMana(p), "Whisper", "Common", UnitName(p));

test mana /run p="player" m=2000 if UnitMana(p) > m then SendChatMessage(UnitMana(p), "Whisper", "Common", UnitName(p)) else SendChatMessage("oom", "Whisper", "Common", UnitName(p)); end

test mana /run p="player" m=2000 s="oom" if UnitMana(p) > m then s=UnitMana(p); end SendChatMessage(s, "Whisper", "Common", UnitName(p))