Macro Shaman Heal/Dot Bot

Joined
Dec 21, 2016
Messages
5
Reaction score
0
Points
1
Hello Everyone! I've been running a shaman quite a bit since coming back and threw together a little macro to help me be lazy. This is very much a work in progress still!

Features:
- Everything is configurable via the INI.
- Will use Slow AA or Slow Spell
- Will Heal the Group.
- Will Spam Group versions of heals if enabled.
- Will Dot.
- Will Nuke.

Code:
|------------------------------------------------------------|
|		    Shaman.mac
|
|		Last Modified by: TheDroidUrLookingFor
|
|------------------------------------------------------------|
#turbo
|------------------------------------------------------------|
|		    Includes
|------------------------------------------------------------|
|#include advpath.inc 
|#include advpath2.inc 
#include spell_routines.inc 
|#define CHATMETHOD "/if (${UseIRC}) /i say"
#define CHATMETHOD "/if (${UseEQBC}) /bc"
#define CHATMETHOD1 "/echo"
|------------------------------------------------------------|
|		    Events
|------------------------------------------------------------|
#Event BuffWornOff "Your #1# spell has worn off of #2#." 
#Event SlowNow "<#1#> slow" 
|------------------------------------------------------------| 
|          Main Rountine 
|------------------------------------------------------------| 
Sub Main  
/call Declares
/popup ALL VARIABLES LOADED: Check Mq2 Window for Errors.

/if (${UseIRC}) /iconnect ${IRCServerAddr} ${IRCPort} ${IRCChannel} ${Me}
/if (${UseEQBC}) /bccmd connect ${EQBCServerAddr} ${EQBCPort} ${EQBCPassword}

/if (!${Target.ID}) { 
		CHATMETHOD1 [SB]: Target your Master when you run this macro. [SB] 
	    CHATMETHOD1 [SB]: No assist set. [SB] 
        CHATMETHOD1 [SB]: Shutting down [SB] 
		/end 
} else { 
 /if (${Target.Type.Equal[PC]}) { 
	/varset M_Assist ${Target}
	/varset M_Assist_ID ${Target.ID}
	} else {
	/if (${Target.Type.Equal[NPC]}) {
		CHATMETHOD1 [SB]: Target your Master when you run this macro not an NPC. [SB] 
	    CHATMETHOD1 [SB]: No assist set. [SB] 
        CHATMETHOD1 [SB]: Shutting down [SB] 
	/end
	} 
}
}

CHATMETHOD1 [SB]+ Initialized  +[SB] 
CHATMETHOD1 [SB]+ Zone type (${Zone.Type}) :: Horse Item (${HorseItem}) +[SB] 
CHATMETHOD [SB]++ SHAMAN SCRIPT STARTED ++[SB]
CHATMETHOD [SB]++ Master is (${M_Assist}) ++[SB]

| --- MAIN LOOP ---|
:MainLoop 

/doevents
/call Checks
/if (${Assist}) /call Assist
/call Follow
/delay 1s

/goto :MainLoop
| --- MAIN STOP ---| 
/return
|------------------------------------------------------------| 
|          End Main Rountine 
|------------------------------------------------------------| 
|------------------------------------------------------------| 
|          Other Rountines
|------------------------------------------------------------|
Sub Checks
/call MountCheck
/call HPCheck
/call MPCheck
/if (${DoHealGroup}) /call GroupHeals
/if (${DoGroupHeals}) /call HealSpam
/if (${DoPet}) /call PetCheck
/if (${DoPet}) /call PetHPCheck
/if (${DoPet}) /call PetBuffCheck
/return

Sub Declares
	/Declare botversion			outer	"1.0"
	/if (${Ini[ShamanBot.${Me}.Settings.ini,General,Version].NotEqual[${botversion}]}) /call MakeDefaultIni
	/if (!${Ini[ShamanBot.${Me}.Settings.ini,General,Version].Length}) /call MakeDefaultIni
	/if (${Ini[ShamanBot.${Me}.Settings.ini,General,RemakeINI]}) /call MakeDefaultIni
   |-----------SPELLS------------------------------------------|
	/Declare DoSlowSpell  		string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoSlowSpell]}
	/Declare DoSlowAA  			string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoSlowAA]}
	/Declare Slow   			string outer ${Ini[ShamanBot.${Me}.Settings.ini,OtherSpells,SlowSpell]}
	/Declare SlowAA  			string outer ${Ini[ShamanBot.${Me}.Settings.ini,OtherSpells,SlowAA]}
	/Declare SlowAAEffectName	string outer ${Ini[ShamanBot.${Me}.Settings.ini,OtherSpells,SlowAAEffectName]}
	/Declare DoMalo   			string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoMalo]}
	/Declare Malo   			string outer ${Ini[ShamanBot.${Me}.Settings.ini,OtherSpells,Malo]}
	/Declare CanniSpell   		string outer ${Ini[ShamanBot.${Me}.Settings.ini,OtherSpells,CanniSpell]}
	/Declare CanniAA   			string outer ${Ini[ShamanBot.${Me}.Settings.ini,OtherSpells,CanniAA]}
    /Declare HealHoT 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,HealSpells,HealHoT]}
    /Declare HealFast    		string outer ${Ini[ShamanBot.${Me}.Settings.ini,HealSpells,HealFast]}
	/Declare GroupHealHoT 		string outer ${Ini[ShamanBot.${Me}.Settings.ini,HealSpells,GroupHealHoT]}
    /Declare GroupHealFast    	string outer ${Ini[ShamanBot.${Me}.Settings.ini,HealSpells,GroupHealFast]}
    /Declare DotOne  			string outer ${Ini[ShamanBot.${Me}.Settings.ini,DamageSpells,DotOne]}
    /Declare DotTwo 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,DamageSpells,DotTwo]}
    /Declare DotThree    		string outer ${Ini[ShamanBot.${Me}.Settings.ini,DamageSpells,DotThree]}
    /Declare DotFour  			string outer ${Ini[ShamanBot.${Me}.Settings.ini,DamageSpells,DotFour]}
	/Declare DotFive  			string outer ${Ini[ShamanBot.${Me}.Settings.ini,DamageSpells,DotFive]}
	/Declare NukeOne  			string outer ${Ini[ShamanBot.${Me}.Settings.ini,DamageSpells,NukeOne]}
    /Declare NukeTwo 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,DamageSpells,NukeTwo]}
    /Declare NukeThree    		string outer ${Ini[ShamanBot.${Me}.Settings.ini,DamageSpells,NukeThree]}
    /Declare NukeFour  			string outer ${Ini[ShamanBot.${Me}.Settings.ini,DamageSpells,NukeFour]}
	/Declare NukeFive  			string outer ${Ini[ShamanBot.${Me}.Settings.ini,DamageSpells,NukeFive]}
	/Declare DoPet	 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoPet]}
    /Declare PetSummon 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,PetSpells,PetSummon]}
	/Declare PetHaste         	string outer ${Ini[ShamanBot.${Me}.Settings.ini,PetSpells,PetHaste]}
	|-----------Items--------------------------------------------------|
	/declare HorseItem 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,Items,Horse]} 
	/declare UseHorse 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,Items,UseHorse]}
	|-----------IRC---------------------------------------------|
	/Declare UseIRC				string outer ${Ini[ShamanBot.${Me}.Settings.ini,IRC,UseIRC]}
	/Declare IRCServerAddr		string outer ${Ini[ShamanBot.${Me}.Settings.ini,IRC,Address]}
	/Declare IRCPort			string outer ${Ini[ShamanBot.${Me}.Settings.ini,IRC,Port]}
	/Declare IRCChannel			string outer ${Ini[ShamanBot.${Me}.Settings.ini,IRC,Channel]}
	|-----------EQBC--------------------------------------------|
	/Declare UseEQBC			string outer ${Ini[ShamanBot.${Me}.Settings.ini,EQBC,UseEQBC]}
	/Declare EQBCServerAddr		string outer ${Ini[ShamanBot.${Me}.Settings.ini,EQBC,EQBCServerAddr]}
	/Declare EQBCPort			string outer ${Ini[ShamanBot.${Me}.Settings.ini,EQBC,EQBCPort]}
	/Declare EQBCPassword		string outer ${Ini[ShamanBot.${Me}.Settings.ini,EQBC,EQBCPassword]}  
	|-----------Other---------------------------------------------|
	/declare AssistAt 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,Percent,AssistAt]}
	/declare SlowAt 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,Percent,SlowAt]}
	/declare MaloAt 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,Percent,MaloAt]}
	/declare CanniAt 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,Percent,CanniAt]}
	/Declare Assist           	string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,Assist]}
	/Declare Follow	     		string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,Follow]}
	/Declare Rebuff	     		string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,Rebuff]}
	/Declare RemakeINI     		string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,RemakeINI]}
	/declare DotAt 				string outer ${Ini[ShamanBot.${Me}.Settings.ini,Percent,DotAt]}
	/declare NukeAt 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,Percent,NukeAt]}
	/declare HealAt 			string outer ${Ini[ShamanBot.${Me}.Settings.ini,Percent,HealAt]}
	/declare HotAt 				string outer ${Ini[ShamanBot.${Me}.Settings.ini,Percent,HotAt]}
	/declare DoNuke				string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoNuke]}
	/declare DoDot				string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoDot]}
	/declare DoMeleeAssist		string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoMeleeAssist]}
	/declare DoHotHeal			string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoHotHeal]}
	/declare DoFastHeal			string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoFastHeal]}
	/declare DoGroupHeals		string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoGroupHeals]}
	/declare DoHealGroup		string outer ${Ini[ShamanBot.${Me}.Settings.ini,General,DoHealGroup]}
	/declare HoTTimer			timer outer 0
	/declare GHoTTimer			timer outer 0
	/declare GHealTimer			timer outer 0
	/declare DurationMod		int outer 2.5
	/declare M_Assist 			string outer
	/declare M_Assist_ID		string outer
/return

Sub MakeDefaultIni
	  /call SetIni General Version ${botversion}
	  /call SetIni General RemakeINI FALSE
	  /call SetIni General Follow FALSE
	  /call SetIni General Assist TRUE
	  /call SetIni General Rebuff TRUE
	  /call SetIni General DoDot TRUE
	  /call SetIni General DoNuke TRUE
	  /call SetIni General DoMeleeAssist FALSE
	  /call SetIni General DoSlowSpell FALSE
	  /call SetIni General DoSlowAA TRUE
	  /call SetIni General DoMalo FALSE
	  /call SetIni General DoPet FALSE
	  /call SetIni General DoHealGroup TRUE
	  /call SetIni General DoFastHeal TRUE
	  /call SetIni General DoHotHeal TRUE
	  /call SetIni General DoGroupHeals TRUE
	  /call SetIni Percent HealAt 90
	  /call SetIni Percent HotAt 95
	  /call SetIni Percent DotAt 97
	  /call SetIni Percent NukeAt 90
	  /call SetIni Percent AssistAt 98
	  /call SetIni Percent SlowAt 98
	  /call SetIni Percent MaloAt 98
	  /call SetIni Percent CanniAt 60
	  /call SetIni HealSpells HealHoT "Halcyon Bluster Rk. II"
	  /call SetIni HealSpells HealFast "Krasir's Mending Rk. II"
	  /call SetIni HealSpells GroupHealHoT "Shear of Renewal"
	  /call SetIni HealSpells GroupHealFast "Krasir's Recourse Rk. II"
	  /call SetIni DamageSpells NukeOne "Reefmaw's Bite"
	  /call SetIni DamageSpells NukeTwo "Serisaria's Spear of Venom Rk. II"
	  /call SetIni DamageSpells NukeThree ""
	  /call SetIni DamageSpells NukeFour ""
	  /call SetIni DamageSpells NukeFive ""
	  /call SetIni DamageSpells DotOne "Sraskus' Curse"
	  /call SetIni DamageSpells DotTwo "Serpentil's Venom Rk. II"
	  /call SetIni DamageSpells DotThree "Reef Crawler Blood"
	  /call SetIni DamageSpells DotFour "Nectar of Woe"
	  /call SetIni DamageSpells DotFive "Livio's Malosenia Rk. II"
	  /call SetIni OtherSpells SlowSpell "Turgur's Insects"
	  /call SetIni OtherSpells SlowAA "Turgur's Swarm"
	  /call SetIni OtherSpells SlowAAEffectName "Turgur's Swarm VI"
	  /call SetIni OtherSpells Malo "Malosenia"
	  /call SetIni OtherSpells CanniSpell "Tribal Pact Rk. II"
	  /call SetIni OtherSpells CanniAA "Cannibalization"
	  /call SetIni PetSpells PetSummon "Olesira's Faithful"
	  /call SetIni PetSpells PetHaste "Spirit Quickening"
	  /call SetIni Items UseHorse TRUE
	  /call SetIni Items Horse "Jungle Raptor Saddle"
	  /call SetIni IRC UseIRC FALSE
	  /call SetIni IRC Address "192.168.1.251"
	  /call SetIni IRC Port "6667"
	  /call SetIni IRC Channel "#Bot"
	  /call SetIni EQBC UseEQBC TRUE
	  /call SetIni EQBC EQBCServerAddr "192.168.1.251"
	  /call SetIni EQBC EQBCPort "2112"
	  /call SetIni EQBC EQBCPassword ""
	  CHATMETHOD1 [SB]++ Please Edit your INI file now! It is in your Macro's folder named "ShamanBot.${Me}.Settings.ini"!!!! ++[SB]
	  /end	  
/return
Sub SetIni(string section, string option, string value)
  /ini "ShamanBot.${Me}.Settings.ini" "${section}" "${option}" "${value}"
/return

Sub MountCheck
/if (!${Me.Mount.ID} && ${UseHorse} && ${Zone.Type}==1) /call cast "${HorseItem}" item
/if (!${Me.Mount.ID} && ${UseHorse} && ${Zone.Type}!=1 && !${Me.Sitting} && !${Me.Combat}) /sit
/return

Sub HPCheck
/if (${Me.PctHPs}<=${HealAt}) {
/target myself
/delay 1s ${Me.ID}==${Target.ID} 
/call cast "${HealFast}" gem2
}
/return

Sub MPCheck
/if (${Me.SpellReady[${CanniSpell}]} && ${Me.PctMana}<=${CanniAt} && ${Me.PctHPs}>=${HealAt}) /call Cast "${CanniSpell}" gem3
/if (${Me.AltAbilityReady[${CanniAA}]} && ${Me.PctMana}<=${CanniAt} && ${Me.PctHPs}>=${HealAt}) /aa act ${CanniAA}
/return

Sub PetCheck
:MakePet_Loop
/if (!${Me.Pet.ID}) {
	CHATMETHOD1 Summoning your pet with spell: ${PetSummon}
	/call Cast "${PetSummon}" gem12
		/delay 1s !${Me.Casting.ID}
			/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :MakePet_Loop
			/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :MakePet_Loop
}
/return

Sub PetHPCheck
/if (${Me.Pet.ID}) { 
:PetHeal_Loop
/if (${Me.Pet.PctHPs}<${PetHealAt}) {
	CHATMETHOD1 Healing your pet with spell: ${Heal}
		/call Cast "${Heal}" gem1
			/delay 1s !${Me.Casting.ID}
				/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :PetHeal_Loop
				/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :PetHeal_Loop	
	}
} 
/return

Sub PetBuffCheck
:PetBuff 
/if (${Me.Pet.ID} && !${Me.PetBuff[${PetHaste}]}) {
/target ${Me.Pet}
CHATMETHOD1 Pet needed "${PetHaste}"
/call cast "${PetHaste}" gem10 15s
	/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :PetBuff
	/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :PetBuff
}
/return

Sub Follow
/if (${Follow} && !${Me.Sitting} && ${Stick.Status.Equal[OFF]}) {
	/target ${M_Assist} pc
		/delay 5
			/squelch /stick hold
}
/return

Sub Assist
/assist group
/delay 1s ${Target.ID}
/if (${Target.Type.Equal[NPC]} && ${Target.PctHPs}<${AssistAt}) /call NukeAssist
/return

Sub NukeAssist
/if (${DoMeleeAssist}) {
/if (!${Me.Combat} && ${Target.Type.Equal[NPC]} && ${Target.Distance} <= 20 && ${Target.PctHPs} <= ${AssistAt}) /attack on
/if (${Stick.Status.Equal[OFF]} && ${Me.Combat} && ${Target.Type.Equal[NPC]} && ${Target.Distance} <= 40) /stick hold 15
}

/if (${DoSlowSpell} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${SlowAt} && ${Target.Distance} <= ${Spell[${Slow}].MyRange} && !${Target.Buff[${Slow}].Name.Equal[${Slow}]}) /call Slow "${Slow}"
/if (${DoSlowAA} && ${Me.AltAbilityReady[${SlowAA}]} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${SlowAt} && !${Target.Buff[${SlowAAEffectName}].Name.Equal[${SlowAAEffectName}]}) /aa act ${SlowAA}
/if (${DoMalo} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${MaloAt} && ${Target.Distance} <= ${Spell[${Malo}].MyRange} && !${Target.Buff[${Malo}].Name.Equal[${Malo}]}) /call Malo "${Malo}"

/if (${DoDot} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${DotAt} && ${Target.Distance} <= ${Spell[${DotOne}].MyRange} && !${Target.Buff[${DotOne}].Name.Equal[${DotOne}]}) /call Dot "${DotOne}"
/if (${DoDot} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${DotAt} && ${Target.Distance} <= ${Spell[${DotTwo}].MyRange} && !${Target.Buff[${DotTwo}].Name.Equal[${DotTwo}]}) /call Dot "${DotTwo}"
/if (${DoDot} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${DotAt} && ${Target.Distance} <= ${Spell[${DotThree}].MyRange} && !${Target.Buff[${DotThree}].Name.Equal[${DotThree}]}) /call Dot "${DotThree}"
/if (${DoDot} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${DotAt} && ${Target.Distance} <= ${Spell[${DotFour}].MyRange} && !${Target.Buff[${DotFour}].Name.Equal[${DotFour}]}) /call Dot "${DotFour}"
/if (${DoDot} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${DotAt} && ${Target.Distance} <= ${Spell[${DotFive}].MyRange} && !${Target.Buff[${DotFive}].Name.Equal[${DotFive}]}) /call Dot "${DotFive}"

/if (${DoNuke} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${NukeAt} && ${Target.Distance} <= ${Spell[${NukeOne}].MyRange}) /call Nuke "${NukeOne}"
/if (${DoNuke} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${NukeAt} && ${Target.Distance} <= ${Spell[${NukeTwo}].MyRange}) /call Nuke "${NukeTwo}"
/if (${DoNuke} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${NukeAt} && ${Target.Distance} <= ${Spell[${NukeThree}].MyRange}) /call Nuke "${NukeThree}"
/if (${DoNuke} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${NukeAt} && ${Target.Distance} <= ${Spell[${NukeFour}].MyRange}) /call Nuke "${NukeFour}"
/if (${DoNuke} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs} <= ${NukeAt} && ${Target.Distance} <= ${Spell[${NukeFive}].MyRange}) /call Nuke "${NukeFive}"
/return

Sub GroupHeals 
   /declare i int local 1 
   /for i 1 to ${Group} 

   /if (${Group.Member[${i}].PctHPs}<=${HealAt} && ${Spawn[${Group.Member[${i}]}].Type.Equal[PC]} && ${Target.Distance}<=${Spell[${HealFast}].MyRange}) {
      /target pc ${Group.Member[${i}]} 
	  	/delay 10s ${Target.ID}==${Group.Member[${i}].ID} && ${Target.BuffsPopulated}==TRUE
		/if (${DoHotHeal} && ${Group.Member[${i}].PctHPs}<=${HotAt} &&  ${Target.Distance} <= ${Spell[${HealHoT}].MyRange} && ${Me.SpellReady[${HealHoT}]} && ${HoTTimer}==0) /call Hot "${HealHoT}"
		/if (${DoFastHeal} && ${Group.Member[${i}].PctHPs}<=${HealAt} &&  ${Target.Distance} <= ${Spell[${HealFast}].MyRange} && ${Me.SpellReady[${HealFast}]}) /call Heal "${HealFast}"
      }
   }
   /next i 
/return 

Sub HealSpam
   /declare i int local 1 
   /for i 1 to ${Group} 

   /if (${Group.Member[${i}].PctHPs}<=${HealAt} && ${Spawn[${Group.Member[${i}]}].Type.Equal[PC]} && ${Target.Distance}<=${Spell[${GroupHealFast}].MyRange}) {
		/target pc ${Group.Member[${i}]} 
	  	/delay 10s ${Target.ID}==${Group.Member[${i}].ID} && ${Target.BuffsPopulated}==TRUE
		/if (${DoHotHeal} && ${Group.Member[${i}].PctHPs}<=${HotAt} &&  ${Target.Distance} <= ${Spell[${GroupHealHoT}].MyRange} && ${Me.SpellReady[${GroupHealHoT}]} && ${GHoTTimer}==0) /call GroupHot "${GroupHealHoT}"
		/if (${DoFastHeal} && ${Group.Member[${i}].PctHPs}<=${HealAt} &&  ${Target.Distance} <= ${Spell[${GroupHealFast}].MyRange} && ${Me.SpellReady[${GroupHealFast}]} && ${GHealTimer}==0) /call GroupHeal "${GroupHealFast}"
      }
   }
   /next i 
/return

Sub Dot(string DotToCast)
:Dot_Loop
/if (${DoDot} && ${Target.Type.Equal[NPC]} && ${Target.Distance} <= ${Spell[${DotToCast}].MyRange} && ${Me.SpellReady[${DotToCast}]} && !${Target.Buff[${DotToCast}].Name.Equal[${DotToCast}]}) {
/if (!${Me.Pet.Combat} && ${Me.Pet.ID}) /pet attack
	/call cast "${DotToCast}" gem1
	/delay 1s !${Me.Casting.ID}
		/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Dot_Loop
}
/return

Sub Malo(string MaloToCast)
:Malo_Loop
/if (${DoMalo} && ${Target.Type.Equal[NPC]} && ${Target.Distance} <= ${Spell[${MaloToCast}].MyRange} && ${Me.SpellReady[${MaloToCast}]} && !${Target.Buff[${MaloToCast}].Name.Equal[${MaloToCast}]}) {
/if (!${Me.Pet.Combat} && ${Me.Pet.ID}) /pet attack
	/call cast "${MaloToCast}" gem4
	/delay 1s !${Me.Casting.ID}
		/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Malo_Loop
}
/return

Sub Slow(string SlowToCast)
:Slow_Loop
/if (${DoSlowSpell} && ${Target.Type.Equal[NPC]} && ${Target.Distance} <= ${Spell[${SlowToCast}].MyRange} && ${Me.SpellReady[${SlowToCast}]} && !${Target.Buff[${SlowToCast}].Name.Equal[${SlowToCast}]}) {
/if (!${Me.Pet.Combat} && ${Me.Pet.ID}) /pet attack
	
	/call cast "${SlowToCast}" gem5
	/delay 1s !${Me.Casting.ID}
		/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Slow_Loop
}
/return

Sub Nuke(string NukeToCast)
:Nuke_Loop
/if (${DoNuke} && ${Target.Type.Equal[NPC]} && ${Target.Distance} <= ${Spell[${NukeToCast}].MyRange} && ${Me.SpellReady[${NukeToCast}]}) {
/if (!${Me.Pet.Combat} && ${Me.Pet.ID}) /pet attack
	/call cast "${NukeToCast}" gem6
	/delay 1s !${Me.Casting.ID}
		/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Nuke_Loop
}
/return

Sub Hot(string HotToCast)
:Hot_Loop
/if (${DoHotHeal} && ${Target.Distance} <= ${Spell[${HotToCast}].MyRange} && ${Me.SpellReady[${HotToCast}]} && ${HoTTimer}==0) {
	CHATMETHOD Casting -- ${HotToCast} -- ${Target}(${Target.PctHPs})
	/call cast "${HotToCast}" gem2
	/delay 1s !${Me.Casting.ID}
	/varcalc HoTTimer ${Spell[${HotToCast}].Duration.TotalSeconds}*${DurationMod}*10
		/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Hot_Loop
}
/return

Sub Heal(string HealToCast)
:Heal_Loop
/if (${DoFastHeal} && ${Target.Distance} <= ${Spell[${HealToCast}].MyRange} && ${Me.SpellReady[${HealToCast}]}) {
	CHATMETHOD Casting -- ${HealToCast} -- ${Target}(${Target.PctHPs})
	/call cast "${HealToCast}" gem1
	/delay 1s !${Me.Casting.ID}
		/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Heal_Loop
}
/return

Sub GroupHot(string HotToCast)
:Hot_Loop
/if (${DoHotHeal} && ${Target.Distance} <= ${Spell[${HotToCast}].MyRange} && ${Me.SpellReady[${HotToCast}]} && ${GHoTTimer}==0) {
	CHATMETHOD Casting -- ${HotToCast} -- ${Target}(${Target.PctHPs})
	/call cast "${HotToCast}" gem2
	/delay 1s !${Me.Casting.ID}
	/varcalc GHoTTimer ${Spell[${HotToCast}].Duration.TotalSeconds}*${DurationMod}*10
		/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Hot_Loop
}
/return

Sub GroupHeal(string HealToCast)
:Heal_Loop
/if (${DoHotHeal} && ${Target.Distance} <= ${Spell[${HealToCast}].MyRange} && ${Me.SpellReady[${HealToCast}]} && ${GHealTimer}==0) {
	CHATMETHOD Casting -- ${HealToCast} -- ${Target}(${Target.PctHPs})
	/call cast "${HealToCast}" gem2
	/delay 1s !${Me.Casting.ID}
	/varcalc GHealTimer ${Spell[${HealToCast}].Duration.TotalSeconds}*${DurationMod}*10
		/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Heal_Loop
}
/return
|------------------------------------------------------------| 
|          End Other Rountines
|------------------------------------------------------------|
|------------------------------------------------------------| 
|          Events 
|------------------------------------------------------------|
Sub Event_BuffWornOff(Line, string SpellWornOff, string ChatSender)
/if (${Rebuff}) {
:Buff_Request
	/if (${ChatSender.Equal[${M_Assist}]}) {
   /target ${ChatSender}
   /delay 1s ${Target.ID}
   /call Cast "${SpellWornOff}" gem6 12s 
   /if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Buff_Request
   /if (${Macro.Return.Equal["CAST_NOTARGET"]}) /return
   }
}
/return

Sub Event_SlowNow(Line, string ChatSender)
/return
|------------------------------------------------------------| 
|          End Events 
|------------------------------------------------------------|