RaitSpotHeal.mac 1.0 - For raid encounter boxed cleric

Post your completed (working) macros here. Only for macros using MQ2Data syntax!

Moderator: MacroQuest Developers

EQBot_man
a ghoul
a ghoul
Posts: 111
Joined: Mon May 17, 2004 6:35 pm

RaitSpotHeal.mac 1.0 - For raid encounter boxed cleric

Post by EQBot_man » Mon Jun 28, 2004 11:28 pm

This is a macro for a boxed cleric to spot heal a MA. If the MA dies the SA will be targeted. There is an optional Supernal Elixir and Bulwark of Vie chain cast. And you might want to put a | in front of the automatically detect yaulp command if you don't want it or you don't have a drogmor

Code: Select all

| raidspotheal.mac  1.0
| 6/10/04
| by: eqbot_man
|
|Usage:
|    /macro raidspotheal <MA> <SA> <percentage>
| i.e type this:
|	/macro raidspotheal warriorname1 warriorname2 80
|
| Will Continuous target <MA> and cast Superal Remedy(or another spell that you specify) under <percentage> hitpoints
| If <MA> dies will continuously target <SA>
| If <SA> dies...well you are prolly wiping but it will attemp to assist the nearest NPC for a target
| If any target is out of range you will move within range.
|
| Partial names for <MA> and <SA> can be used.
|
| There are a couple options you must manually set in here:
|	spellname (optional):
|		Defualt is Supernal Remedy but you can change it wtihout fucking up the script
|	keepdistancebit:
|		Defualt is 0, change to 1 if you need to keep an exact distance between you
|			and the person you are spoting, mainly to avoid an AE.  Defualt distance
|			is determined automatically by the range of the spell, but you can set
|			it manually in the sub below.
|		This sub when activated(via 1 setting the bit to 1) will keep distance to a set
|			Tolerance also setable below, defualt is 7, which worked fine.  For example
|			CH is 100 range.  Keepdistance will keep distance between 93 and 100.
|			But usually ends up around 96, so you'll be safe to avoid the AE.  Obviously
|			if you are in a decent guild you will be using an ER item in that case set
|			the Distance manually
|	Yaulping:
|		Delete the | in front of |/call Yaulp if you wish to keep Yualp VI in your buffs
|			(in other words, if you are not on a mount and NEED the extra mana).


#Event notinzone "#*#There are no spawns#*#"

Sub Main
/deletevar vie
/deletevar Healpct
/deletevar MA
/deletevar SA
/deletevar spellname
/deletevar death
/deletevar SEtimer
/deletevar oor
/deletevar VieElixir
/deletevar keepdistancebit

/declare vie timer global 5s
/declare Healpct int global
/declare MA string global
/declare SA string global
/declare death int global
/declare spellname string global
/declare SEtimer timer global
/declare oor int global
/declare keepdistancebit int global
/declare VieElixir int global

/varset MA ${Param0}
/varset SA ${Param1}
/varset Healpct ${Param2}
/varset death 0
/varset SEtimer 0
/varset VieElixir 0

|--------- Set Spell Name here -----
/varset spellname "Supernal Remedy"
|----------------------------
|---- Set to 1 if you need to keep a certain distance, 0 to disable.  To set Distance see the Sub Keepdistance ---|
/varset keepdistancebit 0
|-----------------------------
|---- Set to 1 if you want to keep Supernal Elixir and Bulwark of Vie on tank. 0 to disable. ---|
/varset VieElixir 0
|-----------------------------
/varset oor ${Math.Calc[${Spell[${spellname}].Range}-${Spell[${spellname}].Range}*.05]}


/echo Snytax: /macro raidspotheal <MA> <SA> <Heal Percentage>
/echo Spot Healing "${MA}" under ${Healpct}% hps.  If "${MA}" dies, "${SA}" will be targeted for healing under ${Healpct}% hps
/if (${keepdistance}==1) /echo Keeping Distance to tank has been enabled



:Continue
|------------ Enable/Disable Yaulping here by placing a '|' -----
/if (!${String[${Me.Buff["Summon Drogmor"]}].Find["Drogmor"]}>0) /call Yaulp
|---------------------------------------

/if (${String[${Zone.ShortName}].Find["Tranquility"]}>0) {
	/echo You died, WTG Ass Hole. . .
	/endmacro
	}

/if (${Me.Moving}) /goto :Continue


/if (${death}==0) {
	/target ${MA}
	/delay 2
} else /if (${death}==1) {
	/target ${SA}
	/delay 2
} else /if (${death}==2) {
	/echo You have run out of tanks, attemping to find one
	/target npc
	/delay 5
	/assist
	/delay 5
	/if (!${Target.Type.Equal["NPC"]}) {
		/echo Sorry, unable to find another tank.  Your raid is prolly wiping. /cry.
		/echo Please target the tank you wish to spot heal
		/varset death 3
		/goto :Continue
		}
} else /if (${death}==3) {
	/if (${Target.PctHPs}==NULL) {
		/echo You don't have a target to heal. Please Select a target
		/delay 1s
		/goto :Continue
	}
} else {
	/echo Sorry you've found a bug in my script. You should never see this. If you do please post what happened and maybe I can fix it
	/endmacro
}


/if (${String[${Target}].Find[${MA}]} && ${String[${Target}].Find["corpse"]}>0) {
	/echo ${MA} has died! oh noz! Switching to ${SA}
	/varset death 1
	/doevents notinzone
	/goto :Continue

	}

/if (${String[${Target}].Find[${SA}]} && ${String[${Target}].Find["corpse"]}>0) {
	/echo ${SA} has died! oh noz!
	/varset death 2
	/goto :Continue
	}
/if (${keepdistancebit}==1) /call keepdistance
/call oor


/if (${Target.PctHPs}==NULL) {
	/echo You don't have a target to heal. Re-targeting
	/delay 2
	/goto :Continue
}

/if (${Target.Type.Equal["NPC"]}) {
	/echo Your Target is an NPC
	/delay 5
	/goto :Continue
	}

/delay 1

/if (${Target.PctHPs}<${Healpct}) {
	/if (!${Me.SpellReady[${spellname}]}) /goto :Continue
	/cast ${spellname}
	/ooc  Remedy >> %t <<
}
|This nex section is an option section if you want to keep Elixir and Vie on the tank.
/if (${VieElixir}==1) {
	/if (${SEtimer}==0) {
		:SE
		/if (!${Me.SpellReady["Supernal Elixir"]}) /goto :SE
		/delay 2
		/echo SE for %t
		/cast "Supernal Elixir"
		/ooc Elixir for >> %t <<
		/varset SEtimer 240
		:vie
		/if (!${Me.SpellReady["Bulwark of Vie"]}) /goto :vie
		/cast "Bulwark of Vie"
		/ooc Vie for >> %t <<
		|**
		| This is to proc Pyronis RGC globe if you want for Xegony or PoEb Warlord
		| Obviously just get rid of the notes

		:rgc
		/if (!${Me.SpellReady["Bulwark of Vie"]}) /goto :rgc
		/itemnotify ranged rightmouseup
		**|
	}
}

/goto :Continue
/return
|-----------------------------------------------------------------
Sub Yaulp
/if (!${Me.Buff["Yaulp VI"].Name.Equal["Yaulp VI"]}) {
	/if (${Me.Moving}) /return
	/if (!${Me.SpellReady["Yaulp VI"]}) /return
	/delay 1
	/cast "Yaulp VI"
}


/return

|-------------------------------------------------------------------
Sub oor

/if (${Target.Distance}>${oor}) {
/echo ${Target} is oor! Moving toward him.
:oor

/if (${Target.Distance}>${oor}) {
	/face fast
	/keypress forward hold
	/goto :oor
} else {
/if (${Target.Distance}<${oor}) {
	/echo ${Target} is within range. Stopping movement
	/keypress forward
	/delay 1s
	/return 1
	}
}
}
/return
|-------------------------------------------------------------
Sub Event_notinzone
	/echo You have entered an invalid tank name.  This person is not in the zone
	/varset death 2
/return
|----------------------------------------------------------------------------


Sub keepdistance




/declare max int local
/declare min int local
/declare tolerance int local
/declare i int local
/declare timeout timer int local
/varset timeout 10


|----Set this shit Tolerance= 7 seemed good Change ${oor) } if you want to set it manually -------|
/varset max ${oor}
/varset tolerance 15
|----Set this shit-------|


/varset min ${Math.Calc[${max}-${tolerance}]}
/if (${Target.Distance}>${max} || ${Target.Distance}<${min}) {

   /echo ${Target} is too far away

	:Continue
	/if (${String[${Target}].Find[${Me}]}) {
		/echo You have yourself Targetted
		/delay 5
		/return
	}
	|/if (!${Target.Type.Equal["NPC"]}) /return


       		/face fast
      		/if (${Target.Distance}>${max}) /keypress forward hold
      		/if (${Target.Distance}<${max} && ${Target.Distance}>${min}) /keypress forward
      		/if (${Target.Distance}<${min}) /keypress Back hold
      		/if (${Target.Distance}>${min} && ${Target.Distance}<${max}) /keypress Back

	/if (!${timeout}==0) /goto :Continue

	/if (!${Me.Moving}) {
		/echo Distance was set from ${min} to ${max}.  Distance is ${Target.Distance}
		/return
	}

	/goto :Continue

} else {
/return
}
/return



Terramantian
a ghoul
a ghoul
Posts: 120
Joined: Thu May 13, 2004 6:20 pm

Post by Terramantian » Wed Jun 30, 2004 10:13 am

k... looks good, but shouldn't

Code: Select all

 
/if (!${Target.Type.Equal["NPC"]}) { 
      /echo Sorry, unable to find another tank.  Your raid is prolly wiping. /cry. 
      /echo Please target the tank you wish to spot heal 
      /varset death 3 
      /goto :Continue 
      } 
be

Code: Select all

 
/if (!${Target.Type.Equal["PC"]}) {
      /echo Sorry, unable to find another tank.  Your raid is prolly wiping. /cry. 
      /echo Please target the tank you wish to spot heal 
      /varset death 3 
      /goto :Continue 
      } 
?

Assisting a target npc should give you a PC... Also I don't know why you use globals, outers work just fine.

EQBot_man
a ghoul
a ghoul
Posts: 111
Joined: Mon May 17, 2004 6:35 pm

Post by EQBot_man » Fri Jul 02, 2004 1:30 pm

yeah I guess so, honestly we havn't had more than 2 tanks die when I've had to box my cleric for heals so that part of the macro is untested heh

EQBot_man
a ghoul
a ghoul
Posts: 111
Joined: Mon May 17, 2004 6:35 pm

Post by EQBot_man » Tue Jul 20, 2004 1:49 am

/bump

User avatar
Synergy
orc pawn
orc pawn
Posts: 19
Joined: Thu Nov 27, 2003 1:44 pm
Location: USA

Post by Synergy » Tue Sep 21, 2004 7:28 pm

I really liked this macro, was curious if any updates have been made to it since its release?

Thanks again!
I speak fluent Lorem Ipsum.

EQBot_man
a ghoul
a ghoul
Posts: 111
Joined: Mon May 17, 2004 6:35 pm

Post by EQBot_man » Thu Sep 23, 2004 4:51 am

Yeah I've got a bunch of cheesy macros to help keep tanks alive. One that I'm working on now keeps an eye on HoTT for anyone that shouldn't be there and spot heals them. Hasn't been much change to this macro. I wanted to keep it pretty straight forward..no tricks just std if health too low cast a heal