• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

FastHeal 3.3 - Updated 4/6/2014

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
 
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
 
Re: FastHeal 3.2 - Updated 10/4/2013

great macro! one thing i would love to see is to buff with: Divine interposition rk. ii all the time

Agreed, I believe two more tank buff slots would fill this need, shining bastion, ward of certitude, di,
 
wtf ? this macro keeps shinning on wtf are you talking about ? u can set it to do shinning , DI , whatever u want it to cast in tank buff slot


Rich (BB code):
[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
 
I tried out fast heal its nice but till they fix beneficial buff extenion+promise line its hard to get the timing down for promise line to fire and recast instant, i kept overwriting the buff so it would not heal, how many tank buffs can it do?
Rich (BB code):
TankBuff1=spell
TankBuff2=spell?
or can it only hold one spell period
 
"Extended targets must be setup before launching macro".I set the first target in window to auto,is there more to setup?
 
The way mine is set up my promised works my shining works , please post your ini,s so i can

- - - Updated - - -

The way mine is set up my promised works my shining works , please post your ini,s so i can help

- - - Updated - - -

Make sure if u have any bots outside your group you assign them to ext window , but keeping ext 1 on auto hater for assist call , also looking to add another feature to this macro my doleash feature i added works flawless any idea post them will look into adding more tank buff slots again not my macro just adding my own tweaks to it and sharing
 
so here is my ini
Rich (BB code):
[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
i see 3 out of 5 times it will overwrite promise with promise due to eq extending the buff from 18s to 21s randomly
 
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



hey nood , not sure if you got my im with it but this is the same code , didn't change anything to your features or codes just added doleashtoon feature to your macro
 
Just a quick question, I have been using this macro for awhile and it's very good. I have tried to add a tankbuff2 to this which has worked to a degree. The problem I am facing is that it cast's DI every time the spell gem refreshes. All that I done was copy the original tankbuff1 part and for the second. Just letting you know I have little to no experience messing around with macro's so any help is greatly appreciated.
 
Yeah, I needed to revamp the tankbuff part, but I haven't touch this in over a year and need to get back to look at it. Quite a bit has changed since then and need to do another overhaul. Hopefully I'll get to it in the coming weeks.
 
Thanks a lot Noobhaxor, I'll put up with what I have for now. Looking forward to it.
 
With the revamp of MQ2Cast I will be releasing a FastHeal 4.0 very soon. I'm working on it as I type this.

- - - Updated - - -

Doing a final cleanup and will create a new thread for Fastheal 4. I took wannabe's code and cleaned that up and added heal priorities for fast switching when a bigger heal is needed. I'll release this tonight.
 
Yes I am calling it Divine Buff instead of Tankbuff 2. I am revamping the buff system to run off events instead of timers. This will prevent spamming of Divine spells or Shining Spell line and account for extended spell durations properly. I am working on the sub routines to match the spells to the wore off messages atm. Ex. Shining Bastion Rk. II = Shining Defense has worn off.... etc...
 
- Added RankName to the Spell TLO - Cred: petesampras,htw,maskoi
it returns a pSpellType rather than a pStringType, but since default is the .Name
and I think thats how most people will use it, its called "RankName"
Usage: /echo I have the ${Spell[Certitude].RankName} version of Certitude its ID is: ${Spell[Certitude].RankName.ID}
Output:
[MQ2] I have the Certitude Rk. II version of Ceritude its ID is:
Second example: Lets say you have Vinespur Rk. II in your spellbook (and memmed)
then doing a /cast "${Spell[Vinespur].RankName}" in your macro will cast it, since its
going to be resolved as /cast "Vinespur Rk. II"
This should decrease the edititing of inifiles everytime you buy a new rank of a spel
 
Very Nice, love that addition. I'm very close to releasing the 4.0 Beta, I just need to buy a couple stacks of emeralds and start testing Divine Line. I cleaned up the buff section considerably and should be quite a bit more reliable. Found a small bug in aura where if someone put aurabuff1 as Aura of Reverent it would probably fill up chat log with spam trying to recast. Also added lvl 80 Circle of Divinity checks.

I may add an auto feature where it just detects the spells in your book and uses them, eliminating the need for a lot of INI editing. Seeing the big jump in the set it and forget it macros, I might need to bring this one up-to-date.
 
FastHeal 3.3 - Updated 4/6/2014

Users who are viewing this thread

Back
Top
Cart