Page 2 of 5
Posted: Fri Sep 24, 2004 9:27 pm
by Neolesh
That should read.. /if ${Players}<1) {
sorry about that, was a small untested change I made before posting it >< Will edit original to fix.
Posted: Fri Sep 24, 2004 10:06 pm
by Clueless_Coder
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 :\
Posted: Fri Sep 24, 2004 11:22 pm
by Neolesh
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
Posted: Sat Sep 25, 2004 1:42 am
by Clueless_Coder
That fixed it.
Thanks :)
Posted: Sat Sep 25, 2004 8:56 am
by gabestah
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.
Posted: Sat Sep 25, 2004 10:17 am
by A_Druid_00
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.
Posted: Sat Sep 25, 2004 12:21 pm
by gabestah
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.
Posted: Sat Sep 25, 2004 6:13 pm
by Clueless_Coder
Ok I give up
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?
Posted: Sun Sep 26, 2004 1:55 pm
by Neolesh
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
Posted: Sun Sep 26, 2004 3:14 pm
by Cr4zyb4rd
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.
Posted: Sun Sep 26, 2004 9:11 pm
by Clueless_Coder
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.
Posted: Mon Sep 27, 2004 1:47 am
by Neolesh
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) ???????
Posted: Mon Sep 27, 2004 2:00 am
by Clueless_Coder
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

)
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.
Posted: Mon Sep 27, 2004 2:52 am
by Neolesh
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.
Posted: Mon Sep 27, 2004 5:27 am
by blueninja
Comparison uses 2 = instead of one.. It should be /if (${Players}==0) {