- Joined
- Dec 14, 2010
- RedCents
- 189¢
I have actually added a DoleashToon feature to this macro and also tweaked the healing to be more on point for raids send me a im if you want me to share it I have to get noobx approval before I post it
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.

#Chat group
#Chat tell
#Chat raid
#Event GainSomething "#*#You have gained|#1#|"
#Event GoMana "You have been granted a gift of#*#"
#Event GoMoff "Your gift of#*#mana fades."
#Event Nomount "#*#You are already on a mount#*#"
#Event Nomount "#*#You can not summon a mount#*#"
#Event Nomount "#*#You can only cast this spell in the outdoors#*#"
#Event Nomount "#*#You must have both the horse#*#"
#Event TaskUpdate "#*#Your task |#1#| has been updated#*#"
#Event Zoned "You have entered#*#"
#Event Zoned "LOADING, PLEASE WAIT#*#"
Sub Main
/declare MacroName string outer FastHeal3
/declare IniFileName string outer ${MacroName}_${Me.CleanName}.ini
| Grab Spell Info
/call LoadIni Spells healspell string "Reverent Light Rk. III"
/call LoadIni Spells patchheal string "Gracefull Remedy Rk. III"
/call LoadIni Spells groupheal string "Word of Reformation Rk. III"
/call LoadIni Spells promheal string "Promised Reformation Rk. III"
/call LoadIni Spells splashheal string "Reforming Splash Rk. III"
/call LoadIni Spells yaulpspell string "Yaulp XIII Rk. III"
/call LoadIni Spells bigheal1 string "Fraught Renewal Rk. III"
/call LoadIni Spells epicshield string "Aegis of Superior Divinity"
| Grab Options
/call LoadIni General AutoRez int 1
/call LoadIni General healpoint int 80
/call LoadIni General nukehealpoint int 0
/call LoadIni General grouphealpoint int 75
/call LoadIni General bighealpoint int 60
/call LoadIni General pethealpoint int 0
/call LoadIni General patchhealpoint int 45
/call LoadIni General clickhealpoint int 30
/call LoadIni General selfhealpoint int 75
/call LoadIni General Manatonuke int 40
/call LoadIni General DPSMode int 0
/call LoadIni General DoLeashToon int 0
/call LoadIni General DoLeashToonName string "|"
| Grab Buff Info
/call LoadIni Buffs SelfBuff string "Armor of the Reverent Rk. III"
/call LoadIni Buffs GroupBuff string "Unified Hand of Certitude Rk. III"
/call LoadIni Buffs GroupBuffCheck string "Blessing of Fervor Rk. III"
/call LoadIni Buffs TankBuff string "Shining Bastion Rk. III"
/call LoadIni Buffs SymbolBuff string "Unified Hand of Gezat Rk. III"
/call LoadIni Buffs aurabuff string "Aura of Divinity Rk. III"
/call LoadIni Buffs aurabuff2 string "Aura of the Reverent Rk. III"
|--------------------------------------------------------------------
|----INI Finished Load-----------------------------------------------
|--------------------------------------------------------------------
| Macro Setup Variables and Stuff
/declare CastResult string outer
/declare DurationMod float outer 1
| Set AA DurationMod for various timer from Spell Casting Reinforcement AA
/if (${Me.AltAbility[Spell Casting Reinforcement]}==6) /varset DurationMod 1.15
/if (${Me.AltAbility[Spell Casting Reinforcement]}==12) /varset DurationMod 1.3
/if (${Me.AltAbility[Spell Casting Reinforcement]}==20) /varset DurationMod 1.5
/if (${Me.AltAbility[Spell Casting Reinforcement]}==28) /varset DurationMod 1.7
| Syntax for Buff timer (${Spell[${Buffs[Spell Name]}].Duration.TotalSeconds}*${DurationMod})*10
/declare PromisedTimer timer outer 0
/declare OutDoors int outer 1
/declare healspellrange int outer ${Spell[${healspell}].Range}
/declare bighealspellrange int outer ${Spell[${bigheal1}].Range}
/declare patchhealrange int outer ${Spell[${patchheal}].Range}
/declare promhealrange int outer ${Spell[${promheal}].Range}
/declare hotspellrange int outer ${Spell[${hotspell}].Range}
/declare grouphealrange int outer ${Spell[${groupheal}].AERange}
/declare tankname string outer ${Target}
/declare GoMana int outer 0
| Declare timers for Rez duration spells
/declare m int local
/for m 1 to 5
/declare RezTimer${m} timer outer 0
/next m
/declare TankBuffTimer timer outer 0
/declare xtargetpcs[10] string outer
/declare ExtendedTargets int outer 0
/declare xt int local
/for xt 1 to 10
/if (${Me.XTarget[${xt}].Type.Equal[Specific PC]}) {
/varset xtargetpcs[${xt}] ${Me.XTarget[xt].Name}
/echo ${Me.XTarget[${xt}].Name} Detected in Extended Target Added to Heals
/varset ExtendedTargets ${Math.Calc[${ExtendedTargets}+1]}
} else {
/varset xtargetpcs[${xt}] NULL
}
/next xt
}
|-----Clean Aura to remove Rk 2 and 3
/declare cleanaura1 string outer Aura of Divinity
/declare cleanaura2 string outer Aura of the Reverent
| Strip the Rk II/III out of the spell to check against aura window
/if (${aurabuff.Find[Circle of Divinity]}) /varset cleanaura1 Circle of Divinity
/if (${aurabuff2.Find[Aura of the Reverent]}) /varset cleanaura2 Reverent Aura
/if (${Defined[Param0]}) /varset healpoint ${Param0}
/echo Casting ${healspell} on ${tankname} at ${healpoint}% HP
/echo Keep Extended Target 1 On Auto Hater or Main assist Target!
/echo Extended Targets must be setup before launching macro.
/call CheckPlugin MQ2Cast
/call CheckPlugin MQ2Exchange
/call CheckPlugin MQ2Rez
/call CheckPlugin MQ2BuffTool
/squelch /rez accept on
|--------------------------------------------------------------------
|----MAIN LOOP STARTS------------------------------------------------
|--------------------------------------------------------------------
:targetwatchloop
/doevents
/if (${Bool[${Me.Song["Touch of the Divine"]}]}) /call DALogic
/if ((${Me.PctAggro}>90)&&(!${Me.Buff.Find["Sanctuary"]})) /call AggroCheck
/if (${Me.Hovering}) /call DeadHealer
/if (${Me.PctHPs}<=${selfhealpoint}) /call HealSelf
/if (${ExtendedTargets}>0) /call HealExtended
/if ((${Spawn[${tankname}].ID})&&(!${Spawn[${tankname}].Hovering})) {
/call HealTank
/if ((${Me.PctMana}>=${Manatonuke})&&(${Me.XTarget[1].ID})&&(${Spawn[${tankname}].PctHPs}>${healpoint})&&(${ExtendedTargets}==0)&&(!${Raid.Members})) /call Nukeing
}
/if (${Group}>0) /call HealGroup
/if (${Group}>0 && ${pethealpoint}>=1) /call HealPet
/if (${Me.PctMana}<=98) /call MedTime
/if ((${AutoRez}==1)&&(!${Me.Invis})) /call RezCheck
/if ((${Me.PctMana}>=50)&&(!${Me.Casting.ID})&&(!${Me.XTarget[1].ID})&&(!${Me.Invis})) /call BuffCheck
/if (${DoLeashToon}) /call DoLeashPerson
/goto :targetwatchloop
/return
|----------------------------------------------------------------------------
| SUB: DoLeashToon
|----------------------------------------------------------------------------
Sub DoLeashPerson
/declare lsLeashToon string local
/declare a int local
/if (${DoLeashToonName.Find[[]}>1) /varset DoLeashToonName ${DoLeashToonName.Right[-${Math.Calc[${DoLeashToonName.Find[[]}-1]}]}
/for a 1 to ${DoLeashToonName.Count[[]}
/varset lsLeashToon ${DoLeashToonName.Arg[${a},[].Left[-1]}
/if (${Spawn[${lsLeashToon}].ID} && ${Spawn[${lsLeashToon}].LineOfSight}) {
/goto :FollowToon
}
/next a
:FollowToon
/if (${Me.Dead}) /return
/if (${lsLeashToon.NotEqual[NULL]} && ${Spawn[pc ${lsLeashToon}].ID} && ${Spawn[pc ${lsLeashToon}].Distance}>25 && !${Spawn[pc ${lsLeashToon}].Dead}) {
/target id ${Spawn[pc ${lsLeashToon}].ID}
/delay 1s ${Target.CleanName.Equal[${lsLeashToon}]}
/face fast
/squelch /stick 8
/delay 2s ${Spawn[pc ${lsLeashToon}].Distance}<10
/squelch /stick off
/if (${Spawn[pc ${lsLeashToon}].Distance}<25) /target clear
} else /if (!${Spawn[pc ${lsLeashToon}].ID} || ${Spawn[pc ${lsLeashToon}].Dead}) {
|=BLANK
}
/return
|----------------------------------------------------------------------------
| SUB: SpellQueue
|----------------------------------------------------------------------------
Sub SpellQueue(string nextspell,int nextid)
/if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]${nextspell} =>> ${Spawn[${nextid}]} <<=[+x+]
/if (${EQBC.Connected}) /docommand /bc [+o+]${nextspell} =>> ${Spawn[${nextid}]} <<=[+x+]
/if ( !${Me.Gem[${nextspell}]} ) {
/echo Memming Spell ${nextspell}
/memorize "${nextspell}" 10
/delay 25
}
/delay 25 ${Me.SpellReady[${nextspell}]}
/if (${Me.SpellReady[${nextspell}]}) /casting "${nextspell}" -targetid|${nextid}
/varset CastResult ${Cast.Result}
/delay 4s !${Me.Casting.ID}
/return ${CastResult}
|----------------------------------------------------------------------------
| SUB: BurstofLife
|----------------------------------------------------------------------------
Sub BurstofLife(int nextid)
/if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Burst of Life =>> ${Spawn[${nextid}]} <<=[+x+]
/if (${EQBC.Connected}) /docommand /bc [+o+]Burst of Life =>> ${Spawn[${nextid}]} <<=[+x+]
/if (${Me.Casting.ID}) /interrupt
/delay 1s !${Me.Casting.ID}
/casting "Burst of Life" alt -targetid|${nextid}
/return
|----------------------------------------------------------------------------
| SUB: Veturika's Perseverance
|----------------------------------------------------------------------------
Sub Veturika
/if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Veturika's Perseverance =>> ${Spawn[${Me.ID}]} <<=[+x+]
/if (${EQBC.Connected}) /docommand /bc [+o+]Veturika's Perseverance =>> ${Spawn[${Me.ID}]} <<=[+x+]
/delay 3s !${Me.Casting.ID}
/casting "Veturika's Perseverance" alt -targetid|${Me.ID}
/return
|----------------------------------------------------------------------------
| SUB: Quiet Miracle
|----------------------------------------------------------------------------
Sub QuietMiracle(int nextid)
/if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Quiet Miracle =>> ${Spawn[${nextid}]} <<=[+x+]
/if (${EQBC.Connected}) /docommand /bc [+o+]Quiet Miracle =>> ${Spawn[${nextid}]} <<=[+x+]
/delay 3s !${Me.Casting.ID}
/target id ${nextid}
/delay 1s ${Target.ID}==${nextid}
/casting "Quiet Miracle" alt -targetid|${Spawn[${nextid}]}
/return
|----------------------------------------------------------------------------
| SUB: DivineAlt
|----------------------------------------------------------------------------
Sub DivineAlt
/if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Divine Arbitration Used on Group[+x+]
/if (${EQBC.Connected}) /docommand /bc [+o+]Divine Arbitration Used on Group[+x+]
/if (${Me.Casting.ID}) /interrupt
/delay 1s !${Me.Casting.ID}
/casting "Divine Arbitration" alt
/return
|----------------------------------------------------------------------------
| SUB: EpicClick
|----------------------------------------------------------------------------
Sub EpicClick
/if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Epic Click Used on Group[+x+]
/if (${EQBC.Connected}) /docommand /bc [+o+]Epic Click Used on Group[+x+]
/if (${Me.Casting.ID}) /interrupt
/delay 1s !${Me.Casting.ID}
/nomodkey /itemnotify ${FindItem[${epicshield}].InvSlot} rightmouseup
/return
|----------------------------------------------------------------------------
| SUB: HealTank
|----------------------------------------------------------------------------
Sub HealTank
/if ((${Me.AltAbilityReady[Burst of Life]})&&(${Spawn[${tankname}].PctHPs}<=${clickhealpoint})) {
/call BurstofLife ${Spawn[${tankname}].ID}
} else /if ((${Spawn[${tankname}].PctHPs}<=${clickhealpoint})&&(${Me.AltAbilityReady[Divine Arbitration]})) {
/call DivineAlt
} else /if ((${FindItem[${epicshield}].ID}) && (${Cast.Ready[${epicshield}]}) && (${Spawn[${tankname}].PctHPs}<=${clickhealpoint})) {
/call EpicClick
} else /if ((${PromisedTimer}==0)&&!${Me.Casting.ID}&&(${Spawn[${tankname}].Distance}<=${promhealrange})&&${Me.XTarget[1].ID}) {
/call SpellQueue "${promheal}" ${Spawn[${tankname}].ID}
/if ((${Macro.Return.Equal[CAST_SUCCESS]})||(${Macro.Return.Equal[CAST_TAKEHOLD]})) /varset PromisedTimer 21s
} else /if ((${Spawn[NPC los ${Me.XTarget[1].Name}].Distance}<150)&&(${Spawn[NPC los ${Me.XTarget[1].Name}].ID})&&(${Spawn[${tankname}].PctHPs}<=${nukehealpoint})) {
/if ((${Me.SpellReady[${healnuke}]})&&(${Spawn[${tankname}].Distance}<${Spell[${healnuke}].Range})&&) /call SpellQueue "${healnuke}" ${Spawn[${tankname}].ID}
/if ((${Me.SpellReady[${nukeheal}]})&&(${Spawn[${Me.XTarget[1].Name}].Distance}<${Spell[${nukeheal}].Range})) /call SpellQueue "${nukeheal}" ${Spawn[NPC ${Me.XTarget[1].Name}].ID}
} else /if (!${Me.Casting.ID}&&(${Spawn[${tankname}].Distance}<=${patchhealrange})&&(${Spawn[${tankname}].PctHPs}<${patchhealpoint})&&(${Spawn[${tankname}].PctHPs}>=1)) {
/call SpellQueue "${patchheal}" ${Spawn[${tankname}].ID}
} else /if (!${Me.Casting.ID}&&(${Spawn[${tankname}].Distance}<=${bighealspellrange})&&(${Spawn[${tankname}].PctHPs}<=${bighealpoint})) {
/if (${Me.SpellReady[${bigheal1}]}) /call SpellQueue "${bigheal1}" ${Spawn[${tankname}].ID}
/if (${Me.SpellReady[${bigheal2}]}) /call SpellQueue "${bigheal1}" ${Spawn[${tankname}].ID}
} else /if (!${Me.Casting.ID}&&(${Spawn[${tankname}].Distance}<=${healspellrange})&&(${Spawn[${tankname}].PctHPs}<=${healpoint})&&(${Spawn[${tankname}].PctHPs}>=${patchhealpoint})) {
/call SpellQueue "${healspell}" ${Spawn[${tankname}].ID}
}
/return
|----------------------------------------------------------------------------
| SUB: HealSelf
|----------------------------------------------------------------------------
Sub HealSelf
/if ((${Me.AltAbilityReady[Divine Peace]})&&(${Me.PctHPs}<=${clickhealpoint})) {
/if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Divine Peace =>> ${Spawn[${Me.ID}]} <<=[+x+]
/if (${EQBC.Connected}) /docommand /bc [+o+]Divine Peace =>> ${Spawn[${Me.ID}]} <<=[+x+]
/delay 1s !${Me.Casting.ID}
/casting "Divine Peace" alt
} else /if ((${Me.AltAbilityReady[Burst of Life]})&&(${Me.PctHPs}<=${clickhealpoint})) {
/call BurstofLife ${Me.ID}
} else /if ((${Me.PctHPs}<=${clickhealpoint})&&(${Me.AltAbilityReady[Divine Arbitration]})) {
/call DivineAlt
} else /if ((${FindItem[${epicshield}].ID}) && (${Cast.Ready[${epicshield}]}) && (${Me.PctHPs}<=${clickhealpoint})) {
/call EpicClick
} else /if (!${Me.Casting.ID} && (${Me.PctHPs}<=${selfhealpoint})) {
/call SpellQueue "${healspell}" ${Me.ID}
}
/return
|----------------------------------------------------------------------------
| SUB: HealExtended
|----------------------------------------------------------------------------
Sub HealExtended
/declare worsthurtid int local 0
/declare worsthp int local 100
/declare gmember int local 0
/declare GroupHealthTl float local .1
/declare GroupHealthPct float local 0
/declare NotDead int local 0
/for gmember 1 to 10
/if (${Spawn[${xtargetpcs[${gmember}]}].ID}) {
/if (${Spawn[${xtargetpcs[${gmember}]}].Hovering} || ${Spawn[${xtargetpcs[${gmember}]}].Type.Equal[Corpse]}) /goto :nextxmember
/if (${Spawn[${xtargetpcs[${gmember}]}].Distance}<=${healspellrange}) {
/if ((${Spawn[${xtargetpcs[${gmember}]}].PctHPs}<=${worsthp}) && (${Spawn[${xtargetpcs[${gmember}]}].PctHPs}>=1)) {
/varset worsthurtid ${Spawn[${xtargetpcs[${gmember}]}].ID}
/varset worsthp ${Spawn[${xtargetpcs[${gmember}]}].PctHPs}
/varcalc GroupHealthTl ${GroupHealthTl}+${Group.Member[${gmember}].PctHPs}
/varcalc NotDead ${NotDead}+1
/varcalc GroupHealthPct ${GroupHealthTl}/${NotDead}
}
}
}
:nextxmember
/next gmember
/if ((${Me.AltAbilityReady[Burst of Life]})&&(${worsthp}<=${clickhealpoint})) {
/call BurstofLife ${worsthurtid}
} else /if ((${GroupHealthPct}<75)&&(${NotDead}>2)&&(${Me.SpellReady[${splashheal}]})) {
/call SpellQueue "${splashheal}" ${worsthurtid}
/look -120
/delay 5
/click left center
} else /if (!${Me.Casting.ID}&&(${worsthp}<=${grouphealpoint})) {
/call SpellQueue "${healspell}" ${worsthurtid}
}
/return
|----------------------------------------------------------------------------
| SUB: HealGroup
|----------------------------------------------------------------------------
Sub HealGroup
/declare worsthurtid int local 0
/declare worsthp int local 100
/declare gmember int local 0
/declare GroupHealthTl float local .1
/declare GroupHealthPct float local 0
/declare NotDead int local 0
/for gmember 1 to ${Group}
/if (${Spawn[${Group.Member[${gmember}]}].Type.NotEqual[Mercenary]} && (${Spawn[${Group.Member[${gmember}]}].Hovering} || ${Spawn[${Group.Member[${gmember}]}].Type.Equal[Corpse]})) /goto :nextmember
/if (!${Bool[${Spawn[${Group.Member[${gmember}]}]}]}) /goto :nextmember
/if (${Group.Member[${gmember}].Distance}<=${healspellrange}) {
/if ((${Select[${Group.Member[${gmember}].Class.ShortName},CLR,DRU,SHM,WIZ,MAG]}>0)&&(${Me.PctMana}>60)&&(${DPSMode}!=1)) {
/if ((${Group.Member[${gmember}].CurrentMana}<=40) && (${Group.Member[${gmember}].CurrentMana}>=1) && (${Me.AltAbilityReady[Quiet Miracle]})) /call QuietMiracle ${Group.Member[${gmember}].ID}
}
/if ((${Group.Member[${gmember}].PctHPs}<100) && (${Group.Member[${gmember}].PctHPs}>=1)) {
/if (${Group.Member[${gmember}].PctHPs}<=${worsthp}) {
/varset worsthurtid ${Group.Member[${gmember}].ID}
/varset worsthp ${Group.Member[${gmember}].PctHPs}
}
/if (${Group.Member[${gmember}].Distance}<100) {
/varcalc GroupHealthTl ${GroupHealthTl}+${Group.Member[${gmember}].PctHPs}
/varcalc NotDead ${NotDead}+1
/varcalc GroupHealthPct ${GroupHealthTl}/${NotDead}
}
}
}
:nextmember
/next gmember
/if ((${Me.AltAbilityReady[Burst of Life]})&&(${worsthp}<=${clickhealpoint})) {
/call BurstofLife ${worsthurtid}
} else /if ((${worsthp}<=${clickhealpoint})&&(${Me.AltAbilityReady[Divine Arbitration]})) {
/call DivineAlt
} else /if ((${FindItem[${epicshield}].ID}) && (${Cast.Ready[${epicshield}]}) && (${worsthp}<=${clickhealpoint})) {
/call EpicClick
} else /if ((${GroupHealthPct}<80)&&(${NotDead}>2)) {
/call SpellQueue "${groupheal}" ${Me.ID}
} else /if (!${Me.Casting.ID}&&(${worsthp}<=${grouphealpoint})) {
/call SpellQueue "${healspell}" ${worsthurtid}
} else /if (!${Bool[${Me.Song[${hotspell}]}]} && ${Me.XTarget[1].ID} && ${Spell[${hotspell}].Stacks} && ${Me.Gem[${hotspell}]}) {
/call SpellQueue "${hotspell}" ${Me.ID}
}
/return
|----------------------------------------------------------------------------
| SUB: HealPet
|----------------------------------------------------------------------------
Sub HealPet
/declare worsthurtid int local 0
/declare worsthp int local 100
/declare gmember int local 0
/for gmember 0 to ${Group}
/if (${Group.Member[${gmember}].Pet.ID}) {
/if (${Group.Member[${gmember}].Pet.Distance}<=${healspellrange}) {
/if ((${Group.Member[${gmember}].Pet.PctHPs}<=${worsthp})&&(${Group.Member[${gmember}].Pet.PctHPs}<=${pethealpoint})) {
/varset worsthurtid ${Group.Member[${gmember}].Pet.ID}
/varset worsthp ${Group.Member[${gmember}].Pet.PctHPs}
}
}
}
/next gmember
/if (!${Me.Casting.ID}&&(${worsthp}<=${pethealpoint})) /call SpellQueue "${healspell}" ${worsthurtid}
/return
|----------------------------------------------------------------------------
| SUB: MedTime
|----------------------------------------------------------------------------
Sub MedTime
:oomwait
/doevents
/if ((${Me.AltAbilityReady[Veturika's Perseverance]})&&(${Me.PctMana}<=60)) /call Veturika
/if ((${Me.AltAbilityReady[Quiet Miracle]})&&(${Me.PctMana}<=45)) /call QuietMiracle ${Me.ID}
/if ((${Me.PctMana}<=98)&&(!${Me.Casting.ID})) {
/if ((${Me.Standing})&&(${Me.CombatState.NotEqual[COMBAT]})&&(!${Me.Moving})&&(${Stick.Status.Equal[OFF]})&&(${NearestSpawn[NPC targetable].Distance}>30) && (${OutDoors}==0)) /sit
/if ((${Me.Sitting})&&(!${Window[SpellBookWnd].Open})&&(${Me.CombatState.Equal[COMBAT]})&&(${NearestSpawn[NPC targetable].Distance}<=30)) /stand
/if ((${Me.AltAbility[Yaulp]}==5)&&(${Me.Standing})&&(!${Me.Mount.ID})&&(${Me.AltAbilityReady[Yaulp]})&&(!${Me.Buff[Yaulp].ID})) {
/if (${Me.Sitting}) /stand
/delay 2s ${Me.Standing}
/casting "Yaulp" alt
} else /if ((${GoMana}==0)&&(${Me.Standing})&&(!${Me.Mount.ID})&&(${Me.SpellReady[${yaulpspell}]})&&(!${Me.Buff[${yaulpspell}].ID})&&(${Spell[${yaulpspell}].Stacks})) {
/if (${Me.Sitting}) /stand
/delay 2s ${Me.Standing}
/casting "${yaulpspell}"
}
/if (!${Me.Mount.ID} && (${OutDoors}!=0) && ${FindItem[${mountitem}].InvSlot} && !${Me.XTarget[1].ID}) {
/if (${Me.Sitting}) /stand
/delay 2s ${Me.Standing}
/casting "${mountitem}"|item
/if (${Cast.Result.Equal[CAST_OUTDOORS]}) /varset OutDoors 0
/doevents
/delay 4s !${Me.Casting.ID}
}
}
/if (${Me.PctHPs}<=${selfhealpoint}) /return
/if (${Me.PctMana}<=8) /goto :oomwait
/return
|----------------------------------------------------------------------------
| SUB: Nuking Sub
|----------------------------------------------------------------------------
Sub Nukeing
/if ((${Spawn[NPC los ${Me.XTarget[1].Name}].Distance}<150)&&(${Spawn[NPC los ${Me.XTarget[1].Name}].ID})&&(${Me.PctHPs}>${selfhealpoint})&&(${Spawn[NPC ${Me.XTarget[1].Name}].PctHPs}<90)) {
/if ((${DPSMode}!=1)||${Spawn[${Me.XTarget[1].Name}].Named}) {
/if ((${Me.SpellReady[${twinnuke}]})&&(${Spawn[${Me.XTarget[1].Name}].Distance}<${Spell[${twinnuke}].Range})) /call SpellQueue "${twinnuke}" ${Spawn[NPC ${Me.XTarget[1].Name}].ID}
} else {
/if ((${Me.SpellReady[${dpsnuke}]})&&(${Spawn[${Me.XTarget[1].Name}].Distance}<${Spell[${dpsnuke}].Range})) /call SpellQueue "${dpsnuke}" ${Spawn[NPC ${Me.XTarget[1].Name}].ID}
}
}
/return
|-------------------------------------------------------------------------------------
| SUB: Rez Check
|-------------------------------------------------------------------------------------
Sub RezCheck
/declare i int local
/declare j int local
/declare CorpseCount int local
/declare RezID int local
/if (!${Me.Hovering}) {
/for i 0 to ${Group}
/if ((${Group.Member[${i}].Type.NotEqual[corpse]})&&(!${Group.Member[${i}].Hovering})) /goto :NextChar
| Check for group member corpses and battle rez
/if ((${Group.Member[${i}].Type.Equal[corpse]}||(${Group.Member[${i}].Hovering})) && ${RezTimer${i}}==0) {
/if (${Group.Member[${i}].Distance}<100) {
/if (${Target.Distance}<100) {
/if (!${Me.Casting.ID} && (${Me.AltAbilityReady[Blessing of Resurrection]})) /casting "Blessing of Resurrection" alt -targetid|${Group.Member[${i}].ID}
/if (${Macro.Return.Equal[CAST_SUCCESS]}) {
/echo BATTLE REZZED =>> ${Group.Member[${i}]} <<=
/if (${EQBC.Connected}) /docommand /bc [+o+]BATTLE REZZED =>> ${Group.Member[${i}]} <<=[+x+]
/varset RezTimer${i} 3m
} else {
/varset RezTimer${i} 1m
}
}
}
}
:NextChar
/next i
}
/Return
|----------------------------------------------------------------------------
| SUB: BuffCheck
|----------------------------------------------------------------------------
Sub BuffCheck
/if (!${Bool[${Me.Buff[${SelfBuff}]}]} &&(!${Me.Casting.ID})&&(${Spell[${SelfBuff}].Stacks})) {
/call SpellQueue "${SelfBuff}" ${Me.ID}
} else /if (!${Bool[${Me.Buff[${GroupBuffCheck}]}]} &&(!${Me.Casting.ID})&&(${Spell[${GroupBuffCheck}].Stacks})) {
/call SpellQueue "${GroupBuff}" ${Me.ID}
} else /if ((${TankBuffTimer}==0)&&(!${Me.Casting.ID})&&(${Spell[${healspell}].Range}>${Spawn[${tankname}].Distance})&&(${Spawn[${tankname}].ID})&&(!${Spawn[${tankname}].Hovering})) {
/call SpellQueue "${TankBuff}" ${Spawn[${tankname}].ID}
/varset TankBuffTimer 5m
} else /if (${Bool[${aurabuff}]} && (!${Me.Casting.ID}) && !${Me.Aura[1].Find[${cleanaura1}]} && !${Me.Aura[2].Find[${cleanaura1}]}) {
/call SpellQueue "${aurabuff}" ${Me.ID}
} else /if (${Bool[${aurabuff2}]} && (!${Me.Casting.ID}) && !${Me.Aura[1].Find[${cleanaura2}]} && !${Me.Aura[2].Find[${cleanaura2}]}) {
/call SpellQueue "${aurabuff2}" ${Me.ID}
}
/return
|----------------------------------------------------------------------------
| SUB: DA Logic
|----------------------------------------------------------------------------
Sub DALogic
/echo Touch of the Divine detected!
:WaitOnDA
/Clickoff "Touch of the Divine"
/delay 10
/if (${Bool[${Me.Song["Touch of the Divine"]}]}) /goto :WaitOnDA
/if (${Me.AltAbilityReady[Divine Peace]}) {
/casting "Divine Peace" alt
} else /if (${Me.AltAbilityReady[Improved Sanctuary]}) {
/casting "Improved Sanctuary" alt
} else /if (${Me.AltAbilityReady[Blessing of Sanctuary]}) {
/casting "Blessing of Sanctuary" alt
} else /if (${Me.AltAbilityReady[Sanctuary]}) {
/casting "Sanctuary" alt
}
/return
|----------------------------------------------------------------------------
| SUB: Aggro Check
|----------------------------------------------------------------------------
Sub AggroCheck
/if (${Me.AltAbilityReady[Divine Peace]}) {
/casting "Divine Peace" alt
} else /if (${Me.AltAbilityReady[Improved Sanctuary]}) {
/casting "Improved Sanctuary" alt
} else /if (${Me.AltAbilityReady[Blessing of Sanctuary]}) {
/casting "Blessing of Sanctuary" alt
} else /if (${Me.AltAbilityReady[Sanctuary]}) {
/casting "Sanctuary" alt
}
/return
|----------------------------------------------------------------------------
| SUB: Death Sub
|----------------------------------------------------------------------------
Sub DeadHealer
/echo Dead... waiting on rez
:WaitOnRez
/if (!${Me.Hovering}) /return
/delay 10
/goto :WaitOnRez
/return
|----------------------------------------------------------------------------
| SUB: Check Plugin
|----------------------------------------------------------------------------
Sub CheckPlugin(string pluginname)
/if (!${Bool[${Plugin[${pluginname}]}]}) {
/squelch /plugin ${pluginname}
/echo ${pluginname} not detected! This macro requires it! Loading ...
}
/return
|----------------------------------------------------------------------------
| SUB: Misc Events
|----------------------------------------------------------------------------
Sub Event_Nomount
/echo This is an indoor zone. Sorry.
/varset OutDoors 0
/return
Sub Event_GoMana
/varset GoMana 1
/timed 180 /varset GoMana 0
/call Healgroup
/return
Sub Event_GoMoff
/varset GoMana 0
/return
|----------------------------------------------------------------------------
| SUB: Event Zoned
|----------------------------------------------------------------------------
Sub Event_Zoned
/echo Just zoned... waiting for Tank
:wait4tank
/delay 10
/if (!${Spawn[${tankname}].ID}) /goto :wait4tank
/return
|----------------------------------------------------------------------------
| SUB: Event Gain Something - EQBC message
|----------------------------------------------------------------------------
Sub Event_GainSomething(string Line,string text)
/if (!${EQBC.Connected}) /return
/if (${Line.Find["ABILITY POINT!"]}) {
/docommand /bc [+w+]${Me.Name} gained an AA, now has ${Me.AAPoints} unspent[+x+]
} else /if (${Line.Find[LEVEL]}) {
/docommand /bc [+w+]${Me.Name} gained a level, now is Level ${Me.Level}[+x+]
} else /if (${Line.Find[GROUP LEADERSHIP]}) {
/docommand /bc [+w+]${Me.Name} gained group leadership, now has ${Me.GroupLeaderPoints} unspent[+x+]
}
/return
|----------------------------------------------------------------------------
| SUB: Event Task Update - EQBC message
|----------------------------------------------------------------------------
Sub Event_TaskUpdate(Line,name)
/if (${EQBC.Connected}) /docommand /bc [+t+]Task updated...(${name})[+x+]
/return
|----------------------------------------------------------------------------
| SUB: Symbol
|----------------------------------------------------------------------------
Sub Event_Chat(string ChatType,string ChatSender,string ChatText)
/if (${Spawn[${ChatSender.Right[-2].Left[-1]}].ID}) {
/if (${Select[${ChatText},symbol,Symbol,SYMBOL]} && (${Spawn[${ChatSender.Right[-2].Left[-1]}].Distance}<100)) /call SpellQueue "${SymbolBuff}" ${Spawn[${ChatSender.Right[-2].Left[-1]}].ID}
}
/return
|----------------------------------------------------------------------------
| SUB: Load Ini
|----------------------------------------------------------------------------
Sub LoadIni(string sectionName, string varName, string varType, string varValue, string varArray)
/if (${${varArray}.Size}>0) {
/declare i int local
/for i 1 to ${${varArray}.Size}
/if (!${Ini[${IniFileName},${sectionName},${varArray}${i}].Length}) /ini "${IniFileName}" "${sectionName}" "${varArray}${i}" "${varValue}"
/if (${Ini[${IniFileName},${sectionName},${varArray}${i}].Length}) /varset ${varArray}[${i}] ${Ini[${IniFileName},${sectionName},${varArray}${i}]}
/next i
/return
} else {
/if (!${Defined[${varName}]} && ${Defined[varType]}) /declare ${varName} ${varType} outer
/if (!${Ini[${IniFileName},${sectionName},${varName}].Length}) {
/if (${varValue.Length}) {
/ini "${IniFileName}" "${sectionName}" "${varName}" "${varValue}"
/varset ${varName} ${varValue}
DEBUG Sub Loadini /varset ${varName} ${varValue}
}
} else {
/varset ${varName} ${Ini[${IniFileName},${sectionName},${varName}]}
}
}
/return
great macro! one thing i would love to see is to buff with: Divine interposition rk. ii all the time
[Buffs]
SelfBuff=Armor of the Reverent Rk. III
GroupBuff=Unified Hand of Certitude Rk. III
GroupBuffCheck=Blessing of Fervor Rk. III
TankBuff=Shining Bastion Rk. III
SymbolBuff=Unified Hand of Gezat Rk. III
aurabuff=Aura of Divinity Rk. III
aurabuff2=Aura of the Reverent Rk. III
TankBuff1=spell
TankBuff2=spell?
[Spells]
healspell=Reverent Light
patchheal=Gracefull Remedy
groupheal=Word of Reformation
promheal=Promised Reformation
splashheal=Reforming Splash
yaulpspell=Yaulp XIII
bigheal1=Fraught Renewal Rk. II
epicshield=Aegis of Superior Divinity
[General]
AutoRez=1
healpoint=80
nukehealpoint=0
grouphealpoint=75
bighealpoint=60
pethealpoint=0
patchhealpoint=45
clickhealpoint=30
selfhealpoint=75
Manatonuke=40
DPSMode=0
DoLeashToon=0
DoLeashToonName=
[Buffs]
SelfBuff=Armor of the Reverent Rk. II
GroupBuff=Unified Hand of Certitude Rk. II
GroupBuffCheck=Blessing of Fervor Rk. II
TankBuff=Shining Bastion Rk. II
SymbolBuff=Unified Hand of Gezat Rk. III
aurabuff=Aura of Divinity Rk. II
aurabuff2=Aura of the Reverent
Rich (BB code):#Chat group #Chat tell #Chat raid #Event GainSomething "#*#You have gained|#1#|" #Event GoMana "You have been granted a gift of#*#" #Event GoMoff "Your gift of#*#mana fades." #Event Nomount "#*#You are already on a mount#*#" #Event Nomount "#*#You can not summon a mount#*#" #Event Nomount "#*#You can only cast this spell in the outdoors#*#" #Event Nomount "#*#You must have both the horse#*#" #Event TaskUpdate "#*#Your task |#1#| has been updated#*#" #Event Zoned "You have entered#*#" #Event Zoned "LOADING, PLEASE WAIT#*#" Sub Main /declare MacroName string outer FastHeal3 /declare IniFileName string outer ${MacroName}_${Me.CleanName}.ini | Grab Spell Info /call LoadIni Spells healspell string "Reverent Light Rk. III" /call LoadIni Spells patchheal string "Gracefull Remedy Rk. III" /call LoadIni Spells groupheal string "Word of Reformation Rk. III" /call LoadIni Spells promheal string "Promised Reformation Rk. III" /call LoadIni Spells splashheal string "Reforming Splash Rk. III" /call LoadIni Spells yaulpspell string "Yaulp XIII Rk. III" /call LoadIni Spells bigheal1 string "Fraught Renewal Rk. III" /call LoadIni Spells epicshield string "Aegis of Superior Divinity" | Grab Options /call LoadIni General AutoRez int 1 /call LoadIni General healpoint int 80 /call LoadIni General nukehealpoint int 0 /call LoadIni General grouphealpoint int 75 /call LoadIni General bighealpoint int 60 /call LoadIni General pethealpoint int 0 /call LoadIni General patchhealpoint int 45 /call LoadIni General clickhealpoint int 30 /call LoadIni General selfhealpoint int 75 /call LoadIni General Manatonuke int 40 /call LoadIni General DPSMode int 0 /call LoadIni General DoLeashToon int 0 /call LoadIni General DoLeashToonName string "|" | Grab Buff Info /call LoadIni Buffs SelfBuff string "Armor of the Reverent Rk. III" /call LoadIni Buffs GroupBuff string "Unified Hand of Certitude Rk. III" /call LoadIni Buffs GroupBuffCheck string "Blessing of Fervor Rk. III" /call LoadIni Buffs TankBuff string "Shining Bastion Rk. III" /call LoadIni Buffs SymbolBuff string "Unified Hand of Gezat Rk. III" /call LoadIni Buffs aurabuff string "Aura of Divinity Rk. III" /call LoadIni Buffs aurabuff2 string "Aura of the Reverent Rk. III" |-------------------------------------------------------------------- |----INI Finished Load----------------------------------------------- |-------------------------------------------------------------------- | Macro Setup Variables and Stuff /declare CastResult string outer /declare DurationMod float outer 1 | Set AA DurationMod for various timer from Spell Casting Reinforcement AA /if (${Me.AltAbility[Spell Casting Reinforcement]}==6) /varset DurationMod 1.15 /if (${Me.AltAbility[Spell Casting Reinforcement]}==12) /varset DurationMod 1.3 /if (${Me.AltAbility[Spell Casting Reinforcement]}==20) /varset DurationMod 1.5 /if (${Me.AltAbility[Spell Casting Reinforcement]}==28) /varset DurationMod 1.7 | Syntax for Buff timer (${Spell[${Buffs[Spell Name]}].Duration.TotalSeconds}*${DurationMod})*10 /declare PromisedTimer timer outer 0 /declare OutDoors int outer 1 /declare healspellrange int outer ${Spell[${healspell}].Range} /declare bighealspellrange int outer ${Spell[${bigheal1}].Range} /declare patchhealrange int outer ${Spell[${patchheal}].Range} /declare promhealrange int outer ${Spell[${promheal}].Range} /declare hotspellrange int outer ${Spell[${hotspell}].Range} /declare grouphealrange int outer ${Spell[${groupheal}].AERange} /declare tankname string outer ${Target} /declare GoMana int outer 0 | Declare timers for Rez duration spells /declare m int local /for m 1 to 5 /declare RezTimer${m} timer outer 0 /next m /declare TankBuffTimer timer outer 0 /declare xtargetpcs[10] string outer /declare ExtendedTargets int outer 0 /declare xt int local /for xt 1 to 10 /if (${Me.XTarget[${xt}].Type.Equal[Specific PC]}) { /varset xtargetpcs[${xt}] ${Me.XTarget[xt].Name} /echo ${Me.XTarget[${xt}].Name} Detected in Extended Target Added to Heals /varset ExtendedTargets ${Math.Calc[${ExtendedTargets}+1]} } else { /varset xtargetpcs[${xt}] NULL } /next xt } |-----Clean Aura to remove Rk 2 and 3 /declare cleanaura1 string outer Aura of Divinity /declare cleanaura2 string outer Aura of the Reverent | Strip the Rk II/III out of the spell to check against aura window /if (${aurabuff.Find[Circle of Divinity]}) /varset cleanaura1 Circle of Divinity /if (${aurabuff2.Find[Aura of the Reverent]}) /varset cleanaura2 Reverent Aura /if (${Defined[Param0]}) /varset healpoint ${Param0} /echo Casting ${healspell} on ${tankname} at ${healpoint}% HP /echo Keep Extended Target 1 On Auto Hater or Main assist Target! /echo Extended Targets must be setup before launching macro. /call CheckPlugin MQ2Cast /call CheckPlugin MQ2Exchange /call CheckPlugin MQ2Rez /call CheckPlugin MQ2BuffTool /squelch /rez accept on |-------------------------------------------------------------------- |----MAIN LOOP STARTS------------------------------------------------ |-------------------------------------------------------------------- :targetwatchloop /doevents /if (${Bool[${Me.Song["Touch of the Divine"]}]}) /call DALogic /if ((${Me.PctAggro}>90)&&(!${Me.Buff.Find["Sanctuary"]})) /call AggroCheck /if (${Me.Hovering}) /call DeadHealer /if (${Me.PctHPs}<=${selfhealpoint}) /call HealSelf /if (${ExtendedTargets}>0) /call HealExtended /if ((${Spawn[${tankname}].ID})&&(!${Spawn[${tankname}].Hovering})) { /call HealTank /if ((${Me.PctMana}>=${Manatonuke})&&(${Me.XTarget[1].ID})&&(${Spawn[${tankname}].PctHPs}>${healpoint})&&(${ExtendedTargets}==0)&&(!${Raid.Members})) /call Nukeing } /if (${Group}>0) /call HealGroup /if (${Group}>0 && ${pethealpoint}>=1) /call HealPet /if (${Me.PctMana}<=98) /call MedTime /if ((${AutoRez}==1)&&(!${Me.Invis})) /call RezCheck /if ((${Me.PctMana}>=50)&&(!${Me.Casting.ID})&&(!${Me.XTarget[1].ID})&&(!${Me.Invis})) /call BuffCheck /if (${DoLeashToon}) /call DoLeashPerson /goto :targetwatchloop /return |---------------------------------------------------------------------------- | SUB: DoLeashToon |---------------------------------------------------------------------------- Sub DoLeashPerson /declare lsLeashToon string local /declare a int local /if (${DoLeashToonName.Find[[]}>1) /varset DoLeashToonName ${DoLeashToonName.Right[-${Math.Calc[${DoLeashToonName.Find[[]}-1]}]} /for a 1 to ${DoLeashToonName.Count[[]} /varset lsLeashToon ${DoLeashToonName.Arg[${a},[].Left[-1]} /if (${Spawn[${lsLeashToon}].ID} && ${Spawn[${lsLeashToon}].LineOfSight}) { /goto :FollowToon } /next a :FollowToon /if (${Me.Dead}) /return /if (${lsLeashToon.NotEqual[NULL]} && ${Spawn[pc ${lsLeashToon}].ID} && ${Spawn[pc ${lsLeashToon}].Distance}>25 && !${Spawn[pc ${lsLeashToon}].Dead}) { /target id ${Spawn[pc ${lsLeashToon}].ID} /delay 1s ${Target.CleanName.Equal[${lsLeashToon}]} /face fast /squelch /stick 8 /delay 2s ${Spawn[pc ${lsLeashToon}].Distance}<10 /squelch /stick off /if (${Spawn[pc ${lsLeashToon}].Distance}<25) /target clear } else /if (!${Spawn[pc ${lsLeashToon}].ID} || ${Spawn[pc ${lsLeashToon}].Dead}) { |=BLANK } /return |---------------------------------------------------------------------------- | SUB: SpellQueue |---------------------------------------------------------------------------- Sub SpellQueue(string nextspell,int nextid) /if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]${nextspell} =>> ${Spawn[${nextid}]} <<=[+x+] /if (${EQBC.Connected}) /docommand /bc [+o+]${nextspell} =>> ${Spawn[${nextid}]} <<=[+x+] /if ( !${Me.Gem[${nextspell}]} ) { /echo Memming Spell ${nextspell} /memorize "${nextspell}" 10 /delay 25 } /delay 25 ${Me.SpellReady[${nextspell}]} /if (${Me.SpellReady[${nextspell}]}) /casting "${nextspell}" -targetid|${nextid} /varset CastResult ${Cast.Result} /delay 4s !${Me.Casting.ID} /return ${CastResult} |---------------------------------------------------------------------------- | SUB: BurstofLife |---------------------------------------------------------------------------- Sub BurstofLife(int nextid) /if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Burst of Life =>> ${Spawn[${nextid}]} <<=[+x+] /if (${EQBC.Connected}) /docommand /bc [+o+]Burst of Life =>> ${Spawn[${nextid}]} <<=[+x+] /if (${Me.Casting.ID}) /interrupt /delay 1s !${Me.Casting.ID} /casting "Burst of Life" alt -targetid|${nextid} /return |---------------------------------------------------------------------------- | SUB: Veturika's Perseverance |---------------------------------------------------------------------------- Sub Veturika /if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Veturika's Perseverance =>> ${Spawn[${Me.ID}]} <<=[+x+] /if (${EQBC.Connected}) /docommand /bc [+o+]Veturika's Perseverance =>> ${Spawn[${Me.ID}]} <<=[+x+] /delay 3s !${Me.Casting.ID} /casting "Veturika's Perseverance" alt -targetid|${Me.ID} /return |---------------------------------------------------------------------------- | SUB: Quiet Miracle |---------------------------------------------------------------------------- Sub QuietMiracle(int nextid) /if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Quiet Miracle =>> ${Spawn[${nextid}]} <<=[+x+] /if (${EQBC.Connected}) /docommand /bc [+o+]Quiet Miracle =>> ${Spawn[${nextid}]} <<=[+x+] /delay 3s !${Me.Casting.ID} /target id ${nextid} /delay 1s ${Target.ID}==${nextid} /casting "Quiet Miracle" alt -targetid|${Spawn[${nextid}]} /return |---------------------------------------------------------------------------- | SUB: DivineAlt |---------------------------------------------------------------------------- Sub DivineAlt /if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Divine Arbitration Used on Group[+x+] /if (${EQBC.Connected}) /docommand /bc [+o+]Divine Arbitration Used on Group[+x+] /if (${Me.Casting.ID}) /interrupt /delay 1s !${Me.Casting.ID} /casting "Divine Arbitration" alt /return |---------------------------------------------------------------------------- | SUB: EpicClick |---------------------------------------------------------------------------- Sub EpicClick /if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Epic Click Used on Group[+x+] /if (${EQBC.Connected}) /docommand /bc [+o+]Epic Click Used on Group[+x+] /if (${Me.Casting.ID}) /interrupt /delay 1s !${Me.Casting.ID} /nomodkey /itemnotify ${FindItem[${epicshield}].InvSlot} rightmouseup /return |---------------------------------------------------------------------------- | SUB: HealTank |---------------------------------------------------------------------------- Sub HealTank /if ((${Me.AltAbilityReady[Burst of Life]})&&(${Spawn[${tankname}].PctHPs}<=${clickhealpoint})) { /call BurstofLife ${Spawn[${tankname}].ID} } else /if ((${Spawn[${tankname}].PctHPs}<=${clickhealpoint})&&(${Me.AltAbilityReady[Divine Arbitration]})) { /call DivineAlt } else /if ((${FindItem[${epicshield}].ID}) && (${Cast.Ready[${epicshield}]}) && (${Spawn[${tankname}].PctHPs}<=${clickhealpoint})) { /call EpicClick } else /if ((${PromisedTimer}==0)&&!${Me.Casting.ID}&&(${Spawn[${tankname}].Distance}<=${promhealrange})&&${Me.XTarget[1].ID}) { /call SpellQueue "${promheal}" ${Spawn[${tankname}].ID} /if ((${Macro.Return.Equal[CAST_SUCCESS]})||(${Macro.Return.Equal[CAST_TAKEHOLD]})) /varset PromisedTimer 21s } else /if ((${Spawn[NPC los ${Me.XTarget[1].Name}].Distance}<150)&&(${Spawn[NPC los ${Me.XTarget[1].Name}].ID})&&(${Spawn[${tankname}].PctHPs}<=${nukehealpoint})) { /if ((${Me.SpellReady[${healnuke}]})&&(${Spawn[${tankname}].Distance}<${Spell[${healnuke}].Range})&&) /call SpellQueue "${healnuke}" ${Spawn[${tankname}].ID} /if ((${Me.SpellReady[${nukeheal}]})&&(${Spawn[${Me.XTarget[1].Name}].Distance}<${Spell[${nukeheal}].Range})) /call SpellQueue "${nukeheal}" ${Spawn[NPC ${Me.XTarget[1].Name}].ID} } else /if (!${Me.Casting.ID}&&(${Spawn[${tankname}].Distance}<=${patchhealrange})&&(${Spawn[${tankname}].PctHPs}<${patchhealpoint})&&(${Spawn[${tankname}].PctHPs}>=1)) { /call SpellQueue "${patchheal}" ${Spawn[${tankname}].ID} } else /if (!${Me.Casting.ID}&&(${Spawn[${tankname}].Distance}<=${bighealspellrange})&&(${Spawn[${tankname}].PctHPs}<=${bighealpoint})) { /if (${Me.SpellReady[${bigheal1}]}) /call SpellQueue "${bigheal1}" ${Spawn[${tankname}].ID} /if (${Me.SpellReady[${bigheal2}]}) /call SpellQueue "${bigheal1}" ${Spawn[${tankname}].ID} } else /if (!${Me.Casting.ID}&&(${Spawn[${tankname}].Distance}<=${healspellrange})&&(${Spawn[${tankname}].PctHPs}<=${healpoint})&&(${Spawn[${tankname}].PctHPs}>=${patchhealpoint})) { /call SpellQueue "${healspell}" ${Spawn[${tankname}].ID} } /return |---------------------------------------------------------------------------- | SUB: HealSelf |---------------------------------------------------------------------------- Sub HealSelf /if ((${Me.AltAbilityReady[Divine Peace]})&&(${Me.PctHPs}<=${clickhealpoint})) { /if (!${EQBC.Connected} || !${Bool[${Plugin[MQ2EQBC]}]}) /docommand /echo [+o+]Divine Peace =>> ${Spawn[${Me.ID}]} <<=[+x+] /if (${EQBC.Connected}) /docommand /bc [+o+]Divine Peace =>> ${Spawn[${Me.ID}]} <<=[+x+] /delay 1s !${Me.Casting.ID} /casting "Divine Peace" alt } else /if ((${Me.AltAbilityReady[Burst of Life]})&&(${Me.PctHPs}<=${clickhealpoint})) { /call BurstofLife ${Me.ID} } else /if ((${Me.PctHPs}<=${clickhealpoint})&&(${Me.AltAbilityReady[Divine Arbitration]})) { /call DivineAlt } else /if ((${FindItem[${epicshield}].ID}) && (${Cast.Ready[${epicshield}]}) && (${Me.PctHPs}<=${clickhealpoint})) { /call EpicClick } else /if (!${Me.Casting.ID} && (${Me.PctHPs}<=${selfhealpoint})) { /call SpellQueue "${healspell}" ${Me.ID} } /return |---------------------------------------------------------------------------- | SUB: HealExtended |---------------------------------------------------------------------------- Sub HealExtended /declare worsthurtid int local 0 /declare worsthp int local 100 /declare gmember int local 0 /declare GroupHealthTl float local .1 /declare GroupHealthPct float local 0 /declare NotDead int local 0 /for gmember 1 to 10 /if (${Spawn[${xtargetpcs[${gmember}]}].ID}) { /if (${Spawn[${xtargetpcs[${gmember}]}].Hovering} || ${Spawn[${xtargetpcs[${gmember}]}].Type.Equal[Corpse]}) /goto :nextxmember /if (${Spawn[${xtargetpcs[${gmember}]}].Distance}<=${healspellrange}) { /if ((${Spawn[${xtargetpcs[${gmember}]}].PctHPs}<=${worsthp}) && (${Spawn[${xtargetpcs[${gmember}]}].PctHPs}>=1)) { /varset worsthurtid ${Spawn[${xtargetpcs[${gmember}]}].ID} /varset worsthp ${Spawn[${xtargetpcs[${gmember}]}].PctHPs} /varcalc GroupHealthTl ${GroupHealthTl}+${Group.Member[${gmember}].PctHPs} /varcalc NotDead ${NotDead}+1 /varcalc GroupHealthPct ${GroupHealthTl}/${NotDead} } } } :nextxmember /next gmember /if ((${Me.AltAbilityReady[Burst of Life]})&&(${worsthp}<=${clickhealpoint})) { /call BurstofLife ${worsthurtid} } else /if ((${GroupHealthPct}<75)&&(${NotDead}>2)&&(${Me.SpellReady[${splashheal}]})) { /call SpellQueue "${splashheal}" ${worsthurtid} /look -120 /delay 5 /click left center } else /if (!${Me.Casting.ID}&&(${worsthp}<=${grouphealpoint})) { /call SpellQueue "${healspell}" ${worsthurtid} } /return |---------------------------------------------------------------------------- | SUB: HealGroup |---------------------------------------------------------------------------- Sub HealGroup /declare worsthurtid int local 0 /declare worsthp int local 100 /declare gmember int local 0 /declare GroupHealthTl float local .1 /declare GroupHealthPct float local 0 /declare NotDead int local 0 /for gmember 1 to ${Group} /if (${Spawn[${Group.Member[${gmember}]}].Type.NotEqual[Mercenary]} && (${Spawn[${Group.Member[${gmember}]}].Hovering} || ${Spawn[${Group.Member[${gmember}]}].Type.Equal[Corpse]})) /goto :nextmember /if (!${Bool[${Spawn[${Group.Member[${gmember}]}]}]}) /goto :nextmember /if (${Group.Member[${gmember}].Distance}<=${healspellrange}) { /if ((${Select[${Group.Member[${gmember}].Class.ShortName},CLR,DRU,SHM,WIZ,MAG]}>0)&&(${Me.PctMana}>60)&&(${DPSMode}!=1)) { /if ((${Group.Member[${gmember}].CurrentMana}<=40) && (${Group.Member[${gmember}].CurrentMana}>=1) && (${Me.AltAbilityReady[Quiet Miracle]})) /call QuietMiracle ${Group.Member[${gmember}].ID} } /if ((${Group.Member[${gmember}].PctHPs}<100) && (${Group.Member[${gmember}].PctHPs}>=1)) { /if (${Group.Member[${gmember}].PctHPs}<=${worsthp}) { /varset worsthurtid ${Group.Member[${gmember}].ID} /varset worsthp ${Group.Member[${gmember}].PctHPs} } /if (${Group.Member[${gmember}].Distance}<100) { /varcalc GroupHealthTl ${GroupHealthTl}+${Group.Member[${gmember}].PctHPs} /varcalc NotDead ${NotDead}+1 /varcalc GroupHealthPct ${GroupHealthTl}/${NotDead} } } } :nextmember /next gmember /if ((${Me.AltAbilityReady[Burst of Life]})&&(${worsthp}<=${clickhealpoint})) { /call BurstofLife ${worsthurtid} } else /if ((${worsthp}<=${clickhealpoint})&&(${Me.AltAbilityReady[Divine Arbitration]})) { /call DivineAlt } else /if ((${FindItem[${epicshield}].ID}) && (${Cast.Ready[${epicshield}]}) && (${worsthp}<=${clickhealpoint})) { /call EpicClick } else /if ((${GroupHealthPct}<80)&&(${NotDead}>2)) { /call SpellQueue "${groupheal}" ${Me.ID} } else /if (!${Me.Casting.ID}&&(${worsthp}<=${grouphealpoint})) { /call SpellQueue "${healspell}" ${worsthurtid} } else /if (!${Bool[${Me.Song[${hotspell}]}]} && ${Me.XTarget[1].ID} && ${Spell[${hotspell}].Stacks} && ${Me.Gem[${hotspell}]}) { /call SpellQueue "${hotspell}" ${Me.ID} } /return |---------------------------------------------------------------------------- | SUB: HealPet |---------------------------------------------------------------------------- Sub HealPet /declare worsthurtid int local 0 /declare worsthp int local 100 /declare gmember int local 0 /for gmember 0 to ${Group} /if (${Group.Member[${gmember}].Pet.ID}) { /if (${Group.Member[${gmember}].Pet.Distance}<=${healspellrange}) { /if ((${Group.Member[${gmember}].Pet.PctHPs}<=${worsthp})&&(${Group.Member[${gmember}].Pet.PctHPs}<=${pethealpoint})) { /varset worsthurtid ${Group.Member[${gmember}].Pet.ID} /varset worsthp ${Group.Member[${gmember}].Pet.PctHPs} } } } /next gmember /if (!${Me.Casting.ID}&&(${worsthp}<=${pethealpoint})) /call SpellQueue "${healspell}" ${worsthurtid} /return |---------------------------------------------------------------------------- | SUB: MedTime |---------------------------------------------------------------------------- Sub MedTime :oomwait /doevents /if ((${Me.AltAbilityReady[Veturika's Perseverance]})&&(${Me.PctMana}<=60)) /call Veturika /if ((${Me.AltAbilityReady[Quiet Miracle]})&&(${Me.PctMana}<=45)) /call QuietMiracle ${Me.ID} /if ((${Me.PctMana}<=98)&&(!${Me.Casting.ID})) { /if ((${Me.Standing})&&(${Me.CombatState.NotEqual[COMBAT]})&&(!${Me.Moving})&&(${Stick.Status.Equal[OFF]})&&(${NearestSpawn[NPC targetable].Distance}>30) && (${OutDoors}==0)) /sit /if ((${Me.Sitting})&&(!${Window[SpellBookWnd].Open})&&(${Me.CombatState.Equal[COMBAT]})&&(${NearestSpawn[NPC targetable].Distance}<=30)) /stand /if ((${Me.AltAbility[Yaulp]}==5)&&(${Me.Standing})&&(!${Me.Mount.ID})&&(${Me.AltAbilityReady[Yaulp]})&&(!${Me.Buff[Yaulp].ID})) { /if (${Me.Sitting}) /stand /delay 2s ${Me.Standing} /casting "Yaulp" alt } else /if ((${GoMana}==0)&&(${Me.Standing})&&(!${Me.Mount.ID})&&(${Me.SpellReady[${yaulpspell}]})&&(!${Me.Buff[${yaulpspell}].ID})&&(${Spell[${yaulpspell}].Stacks})) { /if (${Me.Sitting}) /stand /delay 2s ${Me.Standing} /casting "${yaulpspell}" } /if (!${Me.Mount.ID} && (${OutDoors}!=0) && ${FindItem[${mountitem}].InvSlot} && !${Me.XTarget[1].ID}) { /if (${Me.Sitting}) /stand /delay 2s ${Me.Standing} /casting "${mountitem}"|item /if (${Cast.Result.Equal[CAST_OUTDOORS]}) /varset OutDoors 0 /doevents /delay 4s !${Me.Casting.ID} } } /if (${Me.PctHPs}<=${selfhealpoint}) /return /if (${Me.PctMana}<=8) /goto :oomwait /return |---------------------------------------------------------------------------- | SUB: Nuking Sub |---------------------------------------------------------------------------- Sub Nukeing /if ((${Spawn[NPC los ${Me.XTarget[1].Name}].Distance}<150)&&(${Spawn[NPC los ${Me.XTarget[1].Name}].ID})&&(${Me.PctHPs}>${selfhealpoint})&&(${Spawn[NPC ${Me.XTarget[1].Name}].PctHPs}<90)) { /if ((${DPSMode}!=1)||${Spawn[${Me.XTarget[1].Name}].Named}) { /if ((${Me.SpellReady[${twinnuke}]})&&(${Spawn[${Me.XTarget[1].Name}].Distance}<${Spell[${twinnuke}].Range})) /call SpellQueue "${twinnuke}" ${Spawn[NPC ${Me.XTarget[1].Name}].ID} } else { /if ((${Me.SpellReady[${dpsnuke}]})&&(${Spawn[${Me.XTarget[1].Name}].Distance}<${Spell[${dpsnuke}].Range})) /call SpellQueue "${dpsnuke}" ${Spawn[NPC ${Me.XTarget[1].Name}].ID} } } /return |------------------------------------------------------------------------------------- | SUB: Rez Check |------------------------------------------------------------------------------------- Sub RezCheck /declare i int local /declare j int local /declare CorpseCount int local /declare RezID int local /if (!${Me.Hovering}) { /for i 0 to ${Group} /if ((${Group.Member[${i}].Type.NotEqual[corpse]})&&(!${Group.Member[${i}].Hovering})) /goto :NextChar | Check for group member corpses and battle rez /if ((${Group.Member[${i}].Type.Equal[corpse]}||(${Group.Member[${i}].Hovering})) && ${RezTimer${i}}==0) { /if (${Group.Member[${i}].Distance}<100) { /if (${Target.Distance}<100) { /if (!${Me.Casting.ID} && (${Me.AltAbilityReady[Blessing of Resurrection]})) /casting "Blessing of Resurrection" alt -targetid|${Group.Member[${i}].ID} /if (${Macro.Return.Equal[CAST_SUCCESS]}) { /echo BATTLE REZZED =>> ${Group.Member[${i}]} <<= /if (${EQBC.Connected}) /docommand /bc [+o+]BATTLE REZZED =>> ${Group.Member[${i}]} <<=[+x+] /varset RezTimer${i} 3m } else { /varset RezTimer${i} 1m } } } } :NextChar /next i } /Return |---------------------------------------------------------------------------- | SUB: BuffCheck |---------------------------------------------------------------------------- Sub BuffCheck /if (!${Bool[${Me.Buff[${SelfBuff}]}]} &&(!${Me.Casting.ID})&&(${Spell[${SelfBuff}].Stacks})) { /call SpellQueue "${SelfBuff}" ${Me.ID} } else /if (!${Bool[${Me.Buff[${GroupBuffCheck}]}]} &&(!${Me.Casting.ID})&&(${Spell[${GroupBuffCheck}].Stacks})) { /call SpellQueue "${GroupBuff}" ${Me.ID} } else /if ((${TankBuffTimer}==0)&&(!${Me.Casting.ID})&&(${Spell[${healspell}].Range}>${Spawn[${tankname}].Distance})&&(${Spawn[${tankname}].ID})&&(!${Spawn[${tankname}].Hovering})) { /call SpellQueue "${TankBuff}" ${Spawn[${tankname}].ID} /varset TankBuffTimer 5m } else /if (${Bool[${aurabuff}]} && (!${Me.Casting.ID}) && !${Me.Aura[1].Find[${cleanaura1}]} && !${Me.Aura[2].Find[${cleanaura1}]}) { /call SpellQueue "${aurabuff}" ${Me.ID} } else /if (${Bool[${aurabuff2}]} && (!${Me.Casting.ID}) && !${Me.Aura[1].Find[${cleanaura2}]} && !${Me.Aura[2].Find[${cleanaura2}]}) { /call SpellQueue "${aurabuff2}" ${Me.ID} } /return |---------------------------------------------------------------------------- | SUB: DA Logic |---------------------------------------------------------------------------- Sub DALogic /echo Touch of the Divine detected! :WaitOnDA /Clickoff "Touch of the Divine" /delay 10 /if (${Bool[${Me.Song["Touch of the Divine"]}]}) /goto :WaitOnDA /if (${Me.AltAbilityReady[Divine Peace]}) { /casting "Divine Peace" alt } else /if (${Me.AltAbilityReady[Improved Sanctuary]}) { /casting "Improved Sanctuary" alt } else /if (${Me.AltAbilityReady[Blessing of Sanctuary]}) { /casting "Blessing of Sanctuary" alt } else /if (${Me.AltAbilityReady[Sanctuary]}) { /casting "Sanctuary" alt } /return |---------------------------------------------------------------------------- | SUB: Aggro Check |---------------------------------------------------------------------------- Sub AggroCheck /if (${Me.AltAbilityReady[Divine Peace]}) { /casting "Divine Peace" alt } else /if (${Me.AltAbilityReady[Improved Sanctuary]}) { /casting "Improved Sanctuary" alt } else /if (${Me.AltAbilityReady[Blessing of Sanctuary]}) { /casting "Blessing of Sanctuary" alt } else /if (${Me.AltAbilityReady[Sanctuary]}) { /casting "Sanctuary" alt } /return |---------------------------------------------------------------------------- | SUB: Death Sub |---------------------------------------------------------------------------- Sub DeadHealer /echo Dead... waiting on rez :WaitOnRez /if (!${Me.Hovering}) /return /delay 10 /goto :WaitOnRez /return |---------------------------------------------------------------------------- | SUB: Check Plugin |---------------------------------------------------------------------------- Sub CheckPlugin(string pluginname) /if (!${Bool[${Plugin[${pluginname}]}]}) { /squelch /plugin ${pluginname} /echo ${pluginname} not detected! This macro requires it! Loading ... } /return |---------------------------------------------------------------------------- | SUB: Misc Events |---------------------------------------------------------------------------- Sub Event_Nomount /echo This is an indoor zone. Sorry. /varset OutDoors 0 /return Sub Event_GoMana /varset GoMana 1 /timed 180 /varset GoMana 0 /call Healgroup /return Sub Event_GoMoff /varset GoMana 0 /return |---------------------------------------------------------------------------- | SUB: Event Zoned |---------------------------------------------------------------------------- Sub Event_Zoned /echo Just zoned... waiting for Tank :wait4tank /delay 10 /if (!${Spawn[${tankname}].ID}) /goto :wait4tank /return |---------------------------------------------------------------------------- | SUB: Event Gain Something - EQBC message |---------------------------------------------------------------------------- Sub Event_GainSomething(string Line,string text) /if (!${EQBC.Connected}) /return /if (${Line.Find["ABILITY POINT!"]}) { /docommand /bc [+w+]${Me.Name} gained an AA, now has ${Me.AAPoints} unspent[+x+] } else /if (${Line.Find[LEVEL]}) { /docommand /bc [+w+]${Me.Name} gained a level, now is Level ${Me.Level}[+x+] } else /if (${Line.Find[GROUP LEADERSHIP]}) { /docommand /bc [+w+]${Me.Name} gained group leadership, now has ${Me.GroupLeaderPoints} unspent[+x+] } /return |---------------------------------------------------------------------------- | SUB: Event Task Update - EQBC message |---------------------------------------------------------------------------- Sub Event_TaskUpdate(Line,name) /if (${EQBC.Connected}) /docommand /bc [+t+]Task updated...(${name})[+x+] /return |---------------------------------------------------------------------------- | SUB: Symbol |---------------------------------------------------------------------------- Sub Event_Chat(string ChatType,string ChatSender,string ChatText) /if (${Spawn[${ChatSender.Right[-2].Left[-1]}].ID}) { /if (${Select[${ChatText},symbol,Symbol,SYMBOL]} && (${Spawn[${ChatSender.Right[-2].Left[-1]}].Distance}<100)) /call SpellQueue "${SymbolBuff}" ${Spawn[${ChatSender.Right[-2].Left[-1]}].ID} } /return |---------------------------------------------------------------------------- | SUB: Load Ini |---------------------------------------------------------------------------- Sub LoadIni(string sectionName, string varName, string varType, string varValue, string varArray) /if (${${varArray}.Size}>0) { /declare i int local /for i 1 to ${${varArray}.Size} /if (!${Ini[${IniFileName},${sectionName},${varArray}${i}].Length}) /ini "${IniFileName}" "${sectionName}" "${varArray}${i}" "${varValue}" /if (${Ini[${IniFileName},${sectionName},${varArray}${i}].Length}) /varset ${varArray}[${i}] ${Ini[${IniFileName},${sectionName},${varArray}${i}]} /next i /return } else { /if (!${Defined[${varName}]} && ${Defined[varType]}) /declare ${varName} ${varType} outer /if (!${Ini[${IniFileName},${sectionName},${varName}].Length}) { /if (${varValue.Length}) { /ini "${IniFileName}" "${sectionName}" "${varName}" "${varValue}" /varset ${varName} ${varValue} DEBUG Sub Loadini /varset ${varName} ${varValue} } } else { /varset ${varName} ${Ini[${IniFileName},${sectionName},${varName}]} } } /return
- - - Updated - - -
If it doesn't load the doleashtoon=0 on the ini let me know ill fix it , but that is the file I am using right now
