Raid Healer v1.3 - Heal your raid (Updated: 11-8-04)
Posted: Fri Nov 05, 2004 2:29 am
This is a total revamp of my AEHeal macro and I thought it to have changed so much that it definately didn't fit in the old thread. This new version does a much better job in my opinion. Some will still think it targets too fast.. if so you can always slow it down. I'm pretty sure I have the spam totally cut out now. No more calculating target's per minute, no more attempting to target people who aren't there. If you come across any problems, please post them, as always.
Fair warning before using this macro - It will target very very rapidly, and anyone with HoTT will be able to see it. You have been warned.
You will need to have Spell_Routines.inc installed.
Fair warning before using this macro - It will target very very rapidly, and anyone with HoTT will be able to see it. You have been warned.
You will need to have Spell_Routines.inc installed.
Code: Select all
|**------------------------------------------------------
Version 1.3
Raid Healer
Usage /macro raidheal
This macro will target each individual who is in your
raid and in the same zone as you. After targeting them
it will check their hps and heal them appropriately. It is
also designed to double check your group.
If you're attacked by an NPC the macro will try to self
heal if self HPs are less than 75%. If self HPs drop
below 30% the macro will attempt to cast DA / DB.
Currently the macro will heal everyone including monks
who are FD.
Check the final subroutine for custom message when you
are attacked.
WARNING: This macro rapidly changes your target. Anyone
with HoTT will be able to see this. You have been warned.
------------------------------------------------------**|
#include spell_routines.inc
#event ImHit "#*#YOU for#*#"
Sub Main
/echo Raid Heal Macro Activated!
/declare CasterList string outer
/declare TankList string outer
/declare ChatSpam timer outer
/declare LomTimer timer outer 0
/declare HitTimer timer outer
/declare r int outer
/declare ii int outer
/varset TankList |Warrior|Shadow Knight|Paladin|
/varset CasterList |Necromancer|Wizard|Enchanter|Magician|Rogue|Druid|Cleric|Bard|Shaman|Beastlord|Berserker|Ranger|
:Start
/doevents
/doevents flush
/if (${Me.PctMana}<12) {
/call LowMana
/goto :start
}
/call CheckGroup
/for r ${Raid.Members} downto 0
/if (${Raid.Member[${r}].Spawn.ID} != NULL && ${Raid.Member[${r}].Spawn.Type.NotEqual[Corpse]}) {
/target ID ${Raid.Member[${r}].ID}
/call ClassCheck
}
/next r
/goto :Start
/return
Sub ClassCheck
/if (${CasterList.Find[|${Target.Class}|]}) {
/call HealcheckCaster
/return
}
/if (${TankList.Find[|${Target.Class}|]}) {
/call HealcheckTank
/return
}
/if (${String[${Target.Class}].Equal["Monk"]} && ${String[${Target.State}].Equal["feign"]} && ${Target.Distance}<215 && ${Target.PctHPs}<70) /call Cast "Pious Remedy" spell 2s CheckFD
/return
Sub HealcheckCaster
/if (${String[${Target.Class}].Equal["Shaman"]} && ${Target.PctHPs}>67) /return
/if (${Target.PctHPs}<79 && ${Target.Distance}<210 && ${Me.SpellReady["Pious Remedy"]}) {
/if (${ChatSpam}<1) {
/g Pious Remedy [ %t ]
/varset ChatSpam 70
}
/call Cast "Pious Remedy" spell 2s CheckHP
}
/return
Sub HealcheckTank
/if (${Target.PctHPs}<65 && ${Target.Distance}<120 && ${Me.SpellReady["Pious Light"]}) {
/if (${ChatSpam}<1) {
/g Pious Light [ %t ]
/varset ChatSpam 70
}
/call Cast "Pious Light" spell 2s CheckHP
}
/return
Sub CheckGroup
/for ii ${Group} downto 1
/if (${String[${Group[${ii}].Class}].Equal["Shaman"]} && ${Group[${ii}].PctHPs}>67) /next ii
/if (${CasterList.Find[|${Group[${ii}].Class}|]} && ${Group[${ii}].PctHPs}<79 && ${Group[${ii}].Distance}<220) {
/target ${Group[ii]}
/call Cast "Pious Rememdy" spell 2s CheckHP
}
/if (${TankList.Find[|${Group[${ii}].Class}|]} && ${Group[${ii}].PctHPs}<80 && ${Group[${ii}].Distance}<110) {
/target ${Group[${ii}]}
/call Cast "Pious Light" spell 2s CheckHP
}
/next ii
/return
Sub CheckHP
/if (${Target.PctHPs}>=83) /call Interrupt
/return
Sub CheckFD
/if (${String[${Target.State}].NotEqual["feign"]}) /call Interrupt
/return
Sub LowMana
/if (${LomTimer}<1) {
/varset LomTimer 300
/g LoM ${Me.PctMana}m
/rs LOM ${Me.PctMana}m
}
/return
Sub Event_ImHit
/varset HitTimer 200
|** Format message below to suit your needs **|
|** /rs I've been hit by ${NearestSpawn[NPC].CleanName} **|
:ImHitLoop
/if (${HitTimer}>1) {
/target ${Me}
/if (${Me.PctHPs}<30) {
/if (${Me.SpellReady["Divine Aura"]}) {
/call Cast "Divine Aura" spell 2s
} else {
/if (${Me.SpellReady["Divine Barrier"]}) /call Cast "Divine Barrier" spell 2s
}
/if (${Me.PctHPs}<75 && !${Me.Buff["Divine Barrier"].ID} && !${Me.Buff["Divine Aura"].ID}) /call Cast "Pious Remedy" spell 2s
}
/goto :ImHitLoop
}
/return