Complex heal macro notes
Talk1this wiki
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))