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

