Raid Healer v1.3 - Heal your raid (Updated: 11-8-04)

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

Moderator: MacroQuest Developers

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Sat Nov 06, 2004 2:17 pm

Rusty is wise

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Sat Nov 06, 2004 2:19 pm

It's dismounting when it calls interrupt no matter what. We're casting a sub-3 second spell here and its dismounting. I'm guessing it's because we're calling it when the target is healed, not when the target dies. So your /dismount vs. move around logic isn't being used.

I didn't want to screw around in spell routines, so I fudged with my macro until it stopped chain dismounting me.
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

Neolesh
a hill giant
a hill giant
Posts: 231
Joined: Mon Aug 23, 2004 11:15 am

Post by Neolesh » Sat Nov 06, 2004 6:28 pm

I think the part that is trying to target a dead pc is this little snippet here..

Code: Select all

/for r ${Raid.Members} downto 0

  /if (${Spawn[${Raid.Member[${r}]}].ID} != NULL) {
     /target pc ${Raid.Member[${r}]}
     /call ClassCheck
  }
  
/next r
This is the basc targeting system I came up with.

Even though the spawn ID should be null when they die for some odd reason I don't think it is. Maybe their corpse keeps the ID? I'm not sure.. What I need here is an /if statement that will always be NULL when someone is not in the zone. I thought that was it but I guess not.

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Sat Nov 06, 2004 7:27 pm

Even though the spawn ID should be null when they die for some odd reason I don't think it is.
Why would their spawn ID be null when they die? Yes their corpse keeps the ID.

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Sat Nov 06, 2004 7:28 pm

Also use Raid.Member[x].Spawn.ID or somesuch, using Spawn[x].ID is begging to get the wrong spawn.

Neolesh
a hill giant
a hill giant
Posts: 231
Joined: Mon Aug 23, 2004 11:15 am

Post by Neolesh » Sat Nov 06, 2004 7:35 pm

Well I'm working off assumptions. I didn't know a corpse would keep ID.

Edit: Been thinking about it, going to try this if statement. Probably won't be able to test it tonight but will asap.

Code: Select all

  /if (${Spawn[pc ${Raid.Member[${r}]}].NotEqual[NULL]}) {

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Sat Nov 06, 2004 8:09 pm

I ended up adding a ${Target.Type.Equal[pc]} to the heal /if to ensure I'm not healing a corpse, but I haven't been able to test it yet since nobody died while we were working on our 7th Hammer flags tonight.
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

Neolesh
a hill giant
a hill giant
Posts: 231
Joined: Mon Aug 23, 2004 11:15 am

Post by Neolesh » Sat Nov 06, 2004 8:29 pm

Another one that should work is..

Code: Select all

/if ${Spawn[${Raid.Member[${r}]}].Type.NotEqual[Corpse]}
adding this before the /target command should fix it for sure.. several ways I think, just a matter of trying them out.

So the new sub I'm going to try next raid is..

Code: Select all

/for r ${Raid.Members} downto 0 

  /if (${Spawn[${Raid.Member[${r}]}].ID} != NULL && ${Spawn[${Raid.Member[${r}]}].Type.NotEqual[Corpse]}) { 
     /target pc ${Raid.Member[${r}]} 
     /call ClassCheck 
  }
/next r

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Sat Nov 06, 2004 10:23 pm

Been thinking about it, going to try this if statement. Probably won't be able to test it tonight but will asap.
So you're just intentionally ignoring what I said about Spawn[]?

I can't see why you'd risk a cast returning the wrong spawn when a spawn object is already provided as a member of the TLO, but I wish you the best.

Neolesh
a hill giant
a hill giant
Posts: 231
Joined: Mon Aug 23, 2004 11:15 am

Post by Neolesh » Sat Nov 06, 2004 11:02 pm

No I'm not ignoring it. I don't understand the "why" behind what you said. You just said it as a fact without any explanation. Which I will test it both ways and see what works in the end.. but without knowing the "why" I'm not going to dismiss my own ideas just because they don't jive with yours.

dman
a hill giant
a hill giant
Posts: 181
Joined: Fri Dec 05, 2003 12:54 pm

Post by dman » Sun Nov 07, 2004 6:59 am

Lets say you are trying to heal RaidMember[x] who happens to be named Joe.

Code: Select all

/if ${Spawn[${Raid.Member[${r}]}].Type.NotEqual[Corpse]}
The Spawn TLO when used searches and will return the nearest match to you it can find. In this case anyone standing closer to you than Joe with Joe as part of their name, such JoeHealer, JoeWarrior, LittleJoe and the 50+ other chars that happen to match will be the ones that are considered. This is why Crazy is telling you to not use it, as Raidmember will already allow you to access spawn data without the chance for confusion. In other words, why would you take an exact piece of data that will always be accurate and change it to something that might be accurate if there is a blue moon and the fearies are singing on Tuesday?
I didn't say you were at fault,
I said I was going to blame you.

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Sun Nov 07, 2004 1:13 pm

No I'm not ignoring it. I don't understand the "why" behind what you said. You just said it as a fact without any explanation.
hrm, the fact
Also use Raid.Member[x].Spawn.ID or somesuch,
and the explanation
using Spawn[x].ID is begging to get the wrong spawn.
I even put a comma in there to make spotting the transition easier. :(

Let's recap.
Well I'm working off assumptions.
You just said it as a fact without any explanation.
*magic hand-wave*
working off assumptions
said it as a fact
*again with the ju-ju stick*
assumptions
fact
assumptions
fact
assumptions
fact
hrm...which to choose?!?

Neolesh
a hill giant
a hill giant
Posts: 231
Joined: Mon Aug 23, 2004 11:15 am

Post by Neolesh » Sun Nov 07, 2004 1:43 pm

Thanks dman that makes sense.

Rusty~
a hill giant
a hill giant
Posts: 244
Joined: Wed Apr 14, 2004 2:55 pm

Post by Rusty~ » Sun Nov 07, 2004 2:35 pm

It's dismounting when it calls interrupt no matter what. We're casting a sub-3 second spell here and its dismounting. I'm guessing it's because we're calling it when the target is healed, not when the target dies. So your /dismount vs. move around logic isn't being used.

I didn't want to screw around in spell routines, so I fudged with my macro until it stopped chain dismounting me.
Whoops.. yeah Interrupt sub is for instant interrupts.. the whole strafe thing is built in if the target dies mid cast. I still say the best thing to do would be just add in code to remount at a less crucial time (or even between casting spells, since cast time on mount = 3 sec, and refresh on most spells is 2.25, you only lose 3/4 a sec if you mount between casts). I guess the best thing to do would be to change the CheckHP sub to something like:

Code: Select all

Sub CheckHP
   /if (${Target.PctHPs}>=83) {
     /if ( !${Me.Mount.ID} || ${castEndTime}>30 ) {
        /call Interrupt
     } else { 
        /varset castReturn CAST_CANCELLED
        /keypress forward hold
        /delay 6
        /keypress back hold
        /delay 4
        /keypress back
        /delay 15 !${Me.Moving}    
     }
   }
/return
That would strafe if the spell had under 3 secs left, else it would dismount and stop cast. You could change the 30 to something a bit higher, but really I think this is the best way to do it. Then you could add in code like this in the main macro:

With the rest of the event declarations:

Code: Select all

#event Indoors "You can only cast this spell in the outdoors#*#"
#event Indoors "You can not summon a mount#*#"
#event Indoors "You need to be in a more open area to summon a mount#*#"
At the top of main sub with rest of variable declarations:

Code: Select all

   /declare useMount int outer 1
Somewhere at the top of main loop:

Code: Select all

   /if ( ${useMount} && !${Me.Mount.ID} ) /call Cast "${InvSlot[ammo].Item.Name}" item
Somewhere in the actual casting loop:

Code: Select all

   /call cast "heal spell" gem1 0 CheckHP
   /if ( ${refreshTime}>20 && ${useMount} && !${Me.Mount.ID} ) /call Cast "${InvSlot[ammo].Item.Name}" item
Down with the rest of the event subs:

Code: Select all

Sub Event_Indoors
   /varset useMount 0
/return

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Sun Nov 07, 2004 5:41 pm

For the purpose of this macro though, the spells are all 3 secondish cast time or less. So, adding in the logic to call interrupt is >30 is pretty much moot. I'm going to steal the } else { portion and throw it into my sub though, thanks a ton man it's perfect.

Just for clarification, useMount will always attempt to summon your mount unless event_indoors tells it otherwise correct? I'd have to say 90% of the time, even outdoors, I don't use my mount; when I do it's because I'm LOM from AFK clerics not outhealing me. In those rare occasions, I summon my mount until I get to a manageable mana level again and then hop off and /stopcast again. Just putting in the else you provided will give me everything I need.
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]