Cleric AEHealv1.4 - Heal everyone in range who needs it.

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

Moderator: MacroQuest Developers

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

Post by Neolesh » Fri Sep 24, 2004 9:27 pm

That should read.. /if ${Players}<1) {

sorry about that, was a small untested change I made before posting it >< Will edit original to fix.

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Fri Sep 24, 2004 10:06 pm

Ok. Fixed that and tested again.

Now I'm getting:

{} pairing ran into anther subroutine
aeheal.mac@76 (HealcheckTank): /if (${Target.PctHPs}<65) {
aeheal.mac@60 (Classcheck):/if (${TankList.Find[|${Target.Class}|]}&&${Target.Distance}<120) /call HealcheckTank
aeheal.mac@40 (Main) /call ClassCheck
The current macro has ended

Any other thoughts?

Sorry to be such a pain :\

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

Post by Neolesh » Fri Sep 24, 2004 11:22 pm

Clueless_Coder wrote:Ok. Fixed that and tested again.

Now I'm getting:

{} pairing ran into anther subroutine
aeheal.mac@76 (HealcheckTank): /if (${Target.PctHPs}<65) {
aeheal.mac@60 (Classcheck):/if (${TankList.Find[|${Target.Class}|]}&&${Target.Distance}<120) /call HealcheckTank
aeheal.mac@40 (Main) /call ClassCheck
The current macro has ended

Any other thoughts?

Sorry to be such a pain :\
It's my fault for not testing again after recent changes.. do this

redo the following subs..

Code: Select all

Sub ClassCheck

    /if (${CasterList.Find[|${Target.Class}|]}) /call HealcheckCaster

    /if (${TankList.Find[|${Target.Class}|]}) /call HealcheckTank

/return
and

Code: Select all

Sub HealcheckTank

    /if (${Target.PctHPs}<65)&&(${Target.Distance}<120) {
    /call Cast "Supernal Light"
    }

/return

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Sat Sep 25, 2004 1:42 am

That fixed it.

Thanks :)

gabestah
decaying skeleton
decaying skeleton
Posts: 2
Joined: Mon Sep 20, 2004 9:56 am

Post by gabestah » Sat Sep 25, 2004 8:56 am

Fantom409 wrote:When you target someone, you're qerying the server for the hp. Your client is not notified of PC HP within a given radius.
Actually, that's exactly what it does. Every second or so, your client retrieves HP updates for all NPCs and PCs within a given distance around you (I'm unsure of the actual distance, but it could be worked out - certainly higher than 350 units). This is exactly why you can target something or someone, and if you run to the other side of the zone, then they take damage, you will not receive an update on their HP until you get back within range. This is also why ShowEQ and the like cannot update mob HP percentages on mobs a great distance away from you - you will only see Mob01 at 100% then Mob01's Corpse 0%; unless you get within the client update range, at which point you'll get it's current HP the next client to server check.

Now, the arguments here seem to be that the HP returned from those around you and/or /targeting them is not "up to date." But it is in fact the most up to date information you can get as the client. When an NPC is attacking a PC, they swing in rounds of damage, right? Each round varies in the amount dealt, so the server must send an update at least once a round (which it does). In actuality, it sends updates a little faster than once a second, but no faster (due to limitations of bandwidth of course). Therefore, in some cases, as all Clerics should be able to attest, you will run into situations where someone's HPs seem to "instantly drop" from 30% or whatever, to dead. Does that mean the mob did THAT MUCH damage in one round? No. It means the client/server update packets were sent at exactly the wrong intervals (one sent just before the mobs first round connected, one just after the mobs second round connected), meaning two rounds of damage were calculated in a normal "single tick."

"Well that's all fine and good, but that doesn't prove using this macro would give up-to-date information," you say. Actually, it does prove just that. Up-to-date information, in EQ terms, is the most recent information available from the server. If the mob hits Tank01 for 500 damage one round, and then 600 damage the next, you will receive both updates at your client for a total of 1100 damage. By /assisting the mob to target Tank01, the number or update will not change intervals or force an update, because there's nothing to update with! There wasn't any additional damage dealt. Tank01 will still be down 1100 damage. The only thing that changed was your method of getting that information.

Rest assured, I agree that using this if you have any sort of worry about being caught or frowned upon by your guild mates is a bad idea, but the method is certainly viable and provides just as good information as any other method of targeting.

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 Sep 25, 2004 10:17 am

If that is the case, why was Neo unable to make this macro work without targetting each person individually? I mean, the HP updates are sitting there at the client just waiting to be polled right? Unless that PC is in your group, you aren't getting constant updates; at least that sure is my experience.
[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]

gabestah
decaying skeleton
decaying skeleton
Posts: 2
Joined: Mon Sep 20, 2004 9:56 am

Post by gabestah » Sat Sep 25, 2004 12:21 pm

Because targeting is the simplest form of verification within Macroquest? How else would you do it? There's no function, at least that I'm aware of, that retrieves HP information for an entity without a targeting method of some sort.

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Sat Sep 25, 2004 6:13 pm

Ok I give up :P

I made the corrections posted here last night and this morning it worked just fine. I was in PoT at the time so noone waas around that needed healing, but it definitely loaded error free and was obviously searching for targets.

Fast forward to 4 hours later. Same files, nothing has changed except now I'm in MPG and low and behold /macro aeheal 10 runs fine when there's noone around that needs healing, but as soon as it finds someone with low enough HP to cast on it returns the following:

Failed to parse /if command. Could not find command to execute.
aeheal.mac@76 (Healcheck Tank)
aeheal.mac@62 (Class Check)
aeheal.mac@48 (Main)

The current macro has ended.

Usage /if (<conditions>) <command>

Again, the only thing I've changed from the code posted in the initial post is I've substituted Holy Light for Supernal Light and Supernal Remedy for Pious Remedy.

Is there anything I need to do to the spellcast inc file maybe? or some other conditions I need to alter because of the spell changes maybe?

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

Post by Neolesh » Sun Sep 26, 2004 1:55 pm

Did you recopy from the new version shown on page 1? Usually I end up with this error when there is no space between the final ) and { in a given /if statement. So make sure HealcheckTank looks like this.

Code: Select all

Sub HealcheckTank 

    /if (${Target.PctHPs}<65)&&(${Target.Distance}<120) { 
    /call Cast "Supernal Light" 
    } 

/return

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

Post by Cr4zyb4rd » Sun Sep 26, 2004 3:14 pm

If that is the case, why was Neo unable to make this macro work without targetting each person individually?
He obviously doesn't have gab's "special" version of EQ that plays on the "special" server for "special" people.

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Sun Sep 26, 2004 9:11 pm

Neolesh wrote:Did you recopy from the new version shown on page 1? Usually I end up with this error when there is no space between the final ) and { in a given /if statement. So make sure HealcheckTank looks like this.
Step One: I opened the MQ2\Release\Macros folder and (using File -> New -> MacroQuest Macro) created a blank macro named AEHeals.mac

Step Two: I copied and pasted the entire code posted in the first post of this thread to that file. No modifiations, no changes.

Step Three: Downloaded and copied Spell_Routines.inc from the Snippets forum here to the MQ2\release\macros folder

Step Four: Loaded MQ2 and started EQ. Logged to my 70 cleric and typed /macro aeheals 10 to test the macro.

When I was in PoT with noone around me it showed no errors. Just rapidly scrolling announcements of searching for targets.

Once I went to MPG and tried to actually heal people around me, I got the errors I posted above.

Am I doing something wrong? If so I've n o idea what.

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

Post by Neolesh » Mon Sep 27, 2004 1:47 am

I need to see a little more. When you get these errors, what comes after each of these lines..

aeheal.mac@76 (Healcheck Tank) ????????
aeheal.mac@62 (Class Check) ????????
aeheal.mac@48 (Main) ???????

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Mon Sep 27, 2004 2:00 am

Sorry, I assumed that since the errors refferenced lines in the code you'd be able to identify it without my typing it in (Sorry - I'm a very lazy typist :P )
aeheal.mac@76 (Healcheck Tank) /if (${Target.PctHPs}<65)&&(${Target.Distance}<120) {
aeheal.mac@62 (Class Check) /if (${TankList.Find[|${Target.Class}|]})
aeheal.mac@48 (Main) /call ClassCheck /if (${Players}<1) {
I'm not sure if this makes any sense at all, or if it's even accurate, or just a fluke, but I've noticed that if I start the macro with no target it runs with no errors, reporting that there are no players within the the target radius.

However, as soon as it locks on a target (Other than myself) it crashes and displays the error message above. Ditto for if I startthe macro with a player targeted.

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

Post by Neolesh » Mon Sep 27, 2004 2:52 am

I'm a little baffled by this right now.. 2 things though.

#1 does your Sub HealcheckTank look like this?

Code: Select all

Sub HealcheckTank 

    /if (${Target.PctHPs}<65)&&(${Target.Distance}<120) { 
    /call Cast "Supernal Light" 
    } 

/return
Also have you made your spell_routines.inc?

found here http://www.macroquest2.com/phpBB2/viewtopic.php?t=7568

if that's not it, anyone else have any idea what's wrong? I'm still a newbie here myself.

User avatar
blueninja
a grimling bloodguard
a grimling bloodguard
Posts: 541
Joined: Thu Aug 28, 2003 7:03 am
Location: Göteborg, Sweden

Post by blueninja » Mon Sep 27, 2004 5:27 am

Comparison uses 2 = instead of one.. It should be /if (${Players}==0) {