• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Problem - Check for live player before calling MQ2rez with combat rez

Status
Not open for further replies.

Lucent

Member
Joined
Jul 16, 2010
RedCents
35¢
So, yeah.

If your druid (or any other class presumably with a battlerez) has call of the wild with a cooldown equal to or less than the resurrection sickness debuff, and you use a cleric merc for other buffs/heals/rez, you will never get a rez.

CharacterX dies
Druid uses call of the wild on CharacterX, return him to his corpse
CharacterX comes back with rez sickness
druid uses call of the wild again as soon as it is available on the same corpse.
CharacterX once again has rez sickness
Healer Merc sees that CharacterX has rez sickness, and does not rez the corpse.

This could lead to major experience loss especially with the anti MQ2/KA crusade going on.

Now, this utilizes the MQ2rez plugin, but Kissassist is what is calling the plugin, so it's probably simplest to fix it here. I would like to see...

CharacterX dies
Druid uses call of the wild on CharacterX, return him to his corpse
CharacterX comes back with rez sickness
Druid's Call of the Wild refreshes. Druid sees a group member corpse. Druid does a check and sees that the CharacterX is within range already and doesn't need a battlerez. Druid chooses not to use call of the wild.
CharacterX's rez sickness wears off.
CharacterX gets a rez from the merc


If corpses have ID's i suppose you could just 'remember' the corpse ID, but if something happens and for some reason the dead character doesn't come back then it wouldn't try again (which could suck)

This should obviously only happen with 0 xp rez like call of the wild to likewise prevent not getting a real rez. So new code could only be applied if the chosen rez ability in the INI was Call of the Wild (or some other 0% rez if any exist)
 
There are a few ways to approach this. You could add code to check if the player is in zone and within RezDistance and the rez spell had Call OF in it's name then don't rez. The other would be to extend the RezTimer out more than the 5m current timer. I am not sure how long to set the timer before your merch will rez the corpses, but you would need to change the Green and Reg highlighted lines and make the following change in the last code section.

Rich (BB code):
    Sub RezCheck
    /if (!${AutoRezOn} || (${DMZ} && ${Me.InInstance}==FALSE) || ${Me.Hovering} || (${Me.Invis} && !${AggroTargetID})) /return
    /if (${DebugHeal}) /echo DEBUGHEALS RezCheck Enter
    /declare i int local
    /declare j int local
    /declare CorpseCount int local
    /declare RezMeID int local 
    /declare RezID int local
    /declare RezRadius int local 150
    | Do I have a Corpse
    /varset RezMeID ${Spawn[corpse ${Me} radius ${RezRadius} zradius 50].ID}
    /if (${RezMeID} && ${OOCRezTimer${RezMeID}}==0 && ${Cast.Ready[${AutoRezWith}]}) {
    /if (!${Defined[OOCRezTimer${RezMeID}]}) /declare OOCRezTimer${RezMeID} timer outer 1m
        /target id ${RezMeID}
        /delay 10 ${Target.ID}
        /if (${Target.Distance}>${CampRadius}) /corpse
        /delay 10
        /call  CastWhat "${AutoRezWith}" ${Target.ID}
        /if (${Macro.Return.Equal[CAST_SUCCESS]}) /varset OOCRezTimer${RezMeID} 3m
    }
    | Does Group Member have a corpse?
    /for i 1 to ${Group}
        /if (${DebugHeal}) /echo DEBUGHEALS RezCheck ${BattleRezTimer${i}}==0 && ${Spawn[${Group.Member[${i}].CleanName} corpse].Distance}<${RezRadius} ${Spawn[${Group.Member[${i}].CleanName} corpse].Deity.ID}  || !${Cast.Ready[${AutoRezWith}]}
        /if (!${Spawn[${Group.Member[${i}].CleanName} pccorpse].ID}  || !${Cast.Ready[${AutoRezWith}]}) /goto :NextChar
    
        | Check for group member corpses and battle rez
        /if (${BattleRezTimer${i}}==0 && ${Spawn[${Group.Member[${i}].CleanName} corpse].Distance}<${RezRadius}) {
            /squelch /tar id ${Spawn[${Group.Member[${i}].CleanName} corpse].ID}
            /delay 10 ${Target.ID}
            /if (${Target.Distance}<100) {
                /if (${Target.Distance}>${CampRadius} && !${Target.CleanName.Find[${MainAssist}]}) /corpse
                /delay 10
                /call CastWhat "${AutoRezWith}" ${Target.ID}
                /if (${Macro.Return.Equal[CAST_SUCCESS]}) {
                    /call BroadCast ${IRCOn} ${EQBCOn} o "BATTLE REZZED =>> ${Group.Member[${i}]} <<="
                    /varset BattleRezTimer${i} 3m
                    /if (${AutoRezWith.Find[Call of]}) /varset BattleRezTimer${i} 6m
                } else {
                    /if (${Group.Member[${i}].Name.NotEqual[${MainAssist}]}) /varset BattleRezTimer${i} 1m
                }
            }
        }
        :NextChar
    /next i
    | Out of Combat Rez | 
    /varset CorpseCount ${SpawnCount[corpse radius ${RezRadius} zradius 50]}
    /if (${CorpseCount}>0 && !${CombatStart}) {
        /for j 1 to ${CorpseCount}
            /varset RezID ${NearestSpawn[${j},pccorpse radius ${RezRadius} zradius 50].ID}
            /if (${Spawn[${RezID}].Type.Equal[corpse]} && ${OOCRezTimer${RezID}}==0 && ${Cast.Ready[${AutoRezWith}]} && (${Spawn[${RezID}].Guild.Equal[${Me.Guild}]} || ${Spawn[${Me.Fellowship.Member[${Spawn[${RezID}].CleanName.Left[-9]}]} pccorpse].ID} || ${XTarHeal} && ${Spawn[${RezID}].ID}==${Me.XTarget[${XTarHeal}].ID})) {
                /target id ${RezID}
                /delay 10 ${Target.ID}==${RezID}
                /if (!${Defined[OOCRezTimer${RezID}]}) /declare OOCRezTimer${RezID} timer outer 1m
                /if (${Target.Distance}<=${RezRadius}) {
                    /call  CastWhat "${AutoRezWith}" ${Target.ID}
                    /if (${Macro.Return.Equal[CAST_SUCCESS]}) {
                        /call BroadCast ${IRCOn} ${EQBCOn} o "Rezzing =>> ${Target.CleanName} <<="
                        /varset OOCRezTimer${RezID} 5m
                        /delay 30 !${Me.Casting.ID}
                    }
                }
            }
        /next j
    }
    /if (${DebugHeal}) /echo DEBUGHEALS RezCheck Leave
/Return

Make this change but change the timer if "call of" is in the rez spell. the timers new value will depend on how long of a wait you need for your merc to rez the corpse after call of the wild is used.

Rich (BB code):
    | Out of Combat Rez | 
    /varset CorpseCount ${SpawnCount[corpse radius ${RezRadius} zradius 50]}
    /if (${CorpseCount}>0 && !${CombatStart}) {
        /for j 1 to ${CorpseCount}
            /varset RezID ${NearestSpawn[${j},pccorpse radius ${RezRadius} zradius 50].ID}
            /if (${Spawn[${RezID}].Type.Equal[corpse]} && ${OOCRezTimer${RezID}}==0 && ${Cast.Ready[${AutoRezWith}]} && (${Spawn[${RezID}].Guild.Equal[${Me.Guild}]} || ${Spawn[${Me.Fellowship.Member[${Spawn[${RezID}].CleanName.Left[-9]}]} pccorpse].ID} || ${XTarHeal} && ${Spawn[${RezID}].ID}==${Me.XTarget[${XTarHeal}].ID})) {
                /target id ${RezID}
                /delay 10 ${Target.ID}==${RezID}
                /if (!${Defined[OOCRezTimer${RezID}]}) /declare OOCRezTimer${RezID} timer outer 1m
                /if (${Target.Distance}<=${RezRadius}) {
                    /call  CastWhat "${AutoRezWith}" ${Target.ID}
                    /if (${Macro.Return.Equal[CAST_SUCCESS]}) {
                        /call BroadCast ${IRCOn} ${EQBCOn} o "Rezzing =>> ${Target.CleanName} <<="

                        /if (${AutoRezWith.Find[Call of]}) {
                           /varset OOCRezTimer${RezID} 5m
                        } else {
                           /varset OOCRezTimer${RezID} 5m
                        }
                        /delay 30 !${Me.Casting.ID}
                    }
                }
            }
        /next j
    }

Does any one have a quick and easy way to test if someone is in zone? I know you can try and target the group member and then test for HP level.
 
Aha on the ball with some quick code. Much appreciated.

I do think checking for a live player in range (or even in zone in case its the puller!) is a better option though, rather than just extending the timer. If someone has died anyway its entirely possible the healer merc went down too and depending on the timing of things you might be waiting for the person who was rezzed (say the tank with his healer merc) to come back and pop his merc back out. And if you made the timer longer you couldn't you run into a situation where the battlerezzing druid has a CoTW available but wont use it because it thinks the timer is not refreshed?

Either way, what you posted should be very helpful in the short term at least. I can stick that in the macro no prob
 
I dont know how in depth it can get i mean, if a characte rwas bound on the other end of the zone but it 'in zone' you'd probably want them to get battle rezed lol. i'm just wondering if its possible not to battle rez the puller as soon as he walks out of range.

Or maybe a two sided solution - dont battle rez when the character is in range and alive, and puller role dont pull while waiting for a rez? (though not pulling while waiting for rez should be a toggle in case you know.. a rez isn't available? LOL)
 
I think the best thing to do for now is just do a check if there is a corpse and the character is alive and in rezradius and your using Call of the wild then don't rez. If Group watch is turned on most of the other issues will be taken care of..

- - - Updated - - -

Ok. Here is what I got. I have NOT been able to test this so could be some syntax errors but, it checks when battle rezzing if you are using Call OF the wild and the group member is not in the zone, then rez them.

In the normal rez check it checks that the corpse belongs to a group member and your using call of the wild and the character is not in zone, then rez them.

So Basically this code won't rez with "Call of the wild" if the group member is in zone. You tweak it as you see fit.

The highlighted lines are what I changed/Added.

Rich (BB code):
    Sub RezCheck
    /if (!${AutoRezOn} || (${DMZ} && ${Me.InInstance}==FALSE) || ${Me.Hovering} || (${Me.Invis} && !${AggroTargetID})) /return
    /if (${DebugHeal}) /echo DEBUGHEALS RezCheck Enter
    /declare i int local
    /declare j int local
    /declare CorpseCount int local
    /declare RezMeID int local 
    /declare RezID int local
    /declare RezRadius int local 150
    /declare GroupIdx int local 0
    | Do I have a Corpse
    /varset RezMeID ${Spawn[corpse ${Me} radius ${RezRadius} zradius 50].ID}
    /if (${RezMeID} && ${OOCRezTimer${RezMeID}}==0 && ${Cast.Ready[${AutoRezWith}]}) {
    /if (!${Defined[OOCRezTimer${RezMeID}]}) /declare OOCRezTimer${RezMeID} timer outer 1m
        /target id ${RezMeID}
        /delay 10 ${Target.ID}
        /if (${Target.Distance}>${CampRadius}) /corpse
        /delay 10
        /call  CastWhat "${AutoRezWith}" ${Target.ID}
        /if (${Macro.Return.Equal[CAST_SUCCESS]}) /varset OOCRezTimer${RezMeID} 3m
    }
    | Does Group Member have a corpse?
    /for i 1 to ${Group}
        /if (${DebugHeal}) /echo DEBUGHEALS RezCheck ${BattleRezTimer${i}}==0 && ${Spawn[${Group.Member[${i}].CleanName} corpse].Distance}<${RezRadius} ${Spawn[${Group.Member[${i}].CleanName} corpse].Deity.ID}  || !${Cast.Ready[${AutoRezWith}]}
        /if (!${Spawn[${Group.Member[${i}].CleanName} pccorpse].ID}  || !${Cast.Ready[${AutoRezWith}]}) /goto :NextChar
    
        | Check for group member corpses and battle rez
        /if (${BattleRezTimer${i}}==0 && (${Spawn[${Group.Member[${i}].CleanName} corpse].Distance}<${RezRadius} && !${AutoRezWith.Find[Call of]}) || (${AutoRezWith.Find[Call of]} && ${Group.Member[${i}].OtherZone})) {
            /squelch /tar id ${Spawn[${Group.Member[${i}].CleanName} corpse].ID}
            /delay 10 ${Target.ID}
            /if (${Target.Distance}<100) {
                /if (${Target.Distance}>${CampRadius} && !${Target.CleanName.Find[${MainAssist}]}) /corpse
                /delay 10
                /call CastWhat "${AutoRezWith}" ${Target.ID}
                /if (${Macro.Return.Equal[CAST_SUCCESS]}) {
                    /call BroadCast ${IRCOn} ${EQBCOn} o "BATTLE REZZED =>> ${Group.Member[${i}]} <<="
                    /varset BattleRezTimer${i} 3m
                    /if (${AutoRezWith.Find[Call of]}) /varset BattleRezTimer${i} 6m
                } else {
                    /if (${Group.Member[${i}].Name.NotEqual[${MainAssist}]}) /varset BattleRezTimer${i} 1m
                }
            }
        }
        :NextChar
    /next i
    | Out of Combat Rez | 
    /varset CorpseCount ${SpawnCount[corpse radius ${RezRadius} zradius 50]}
    /if (${CorpseCount}>0 && !${CombatStart}) {
        /for j 1 to ${CorpseCount}
            /varset RezID ${NearestSpawn[${j},pccorpse radius ${RezRadius} zradius 50].ID}
            /varset GroupIdx ${Group.Member[${Spawn[${RezID}].CleanName.Left[-9]}]}
            /if (${Spawn[${RezID}].Type.Equal[corpse]} && ${OOCRezTimer${RezID}}==0 && ${Cast.Ready[${AutoRezWith}]} && (${Spawn[${RezID}].Guild.Equal[${Me.Guild}]} || ${Spawn[${Me.Fellowship.Member[${Spawn[${RezID}].CleanName.Left[-9]}]} pccorpse].ID} || (${XTarHeal} && ${Spawn[${RezID}].ID}==${Me.XTarget[${XTarHeal}].ID}) || (${GroupIdx} && ${Group.Member[${GroupIdx}].OtherZone} && ${AutoRezWith.Find[Call of]}))) {
                /target id ${RezID}
                /delay 10 ${Target.ID}==${RezID}
                /if (!${Defined[OOCRezTimer${RezID}]}) /declare OOCRezTimer${RezID} timer outer 1m
                /if (${Target.Distance}<=${RezRadius}) {
                    /call  CastWhat "${AutoRezWith}" ${Target.ID}
                    /if (${Macro.Return.Equal[CAST_SUCCESS]}) {
                        /call BroadCast ${IRCOn} ${EQBCOn} o "Rezzing =>> ${Target.CleanName} <<="
                        /varset OOCRezTimer${RezID} 5m
                        /delay 30 !${Me.Casting.ID}
                    }
                }
            }
        /next j
    }
    /if (${DebugHeal}) /echo DEBUGHEALS RezCheck Leave
/Return
 
Thank you so very much, I'll test this out shortly.

- - - Updated - - -

Seems to be working fine. Which is fantastic because I lost a couple corpses permanently to this due to some EQ based bug when I got CoTW and cleric rez at the same time and instantly accepted. No exp but corpse poofed. "This is a 96% rez!.. but no xp... sucks!"

Thanks!
 
Seems to be working well FYI. Have not seen an issue - getting COTW rezes and then getting 96% rez when rez sickness wears off, from the merc. :)
 
I had same problems too, i put battle rezz off for now...and the puller wouldnt stop for a 96% rezz after some1 in group got battle rezz, cause the 96% rezz needs a full rested state...gonna keep an eye here
 
Is it possible to check for class on the rez portion of the ini... @ctaylor22 like we have class specific changes that are automatic in the ini where it looks for a say, how many heal slots in the ini based on if the characters class shortname is DRU CLR SHM PAL they get like 15 default, and else they get 5... for classes like the druid with a battle rez, it could give them two rez options "AutoRezWith" and "AutoCombatRezWith" and the code would be something along the lines of 'if in OOC regen, rez, otherwise, combatrez"

i am not sure if sham have the same rez capability but i think they do have COTW. Druids at the least now have an out of combat 96% rez with a 20s cooldown. It would be fabulous if it could tell the difference between battle and out of combat rez situations and act appropriately, and only a difference of two options.

And once a druid gets that 96% AA, no more needing to mem incarnate anew, which is doubly nice :P
 
Make sure you have groupwatch turned on for your puller..

It is on..never changed that line...

- - - Updated - - -

Is it possible to check for class on the rez portion of the ini... @ctaylor22 like we have class specific changes that are automatic in the ini where it looks for a say, how many heal slots in the ini based on if the characters class shortname is DRU CLR SHM PAL they get like 15 default, and else they get 5... for classes like the druid with a battle rez, it could give them two rez options "AutoRezWith" and "AutoCombatRezWith" and the code would be something along the lines of 'if in OOC regen, rez, otherwise, combatrez"

i am not sure if sham have the same rez capability but i think they do have COTW. Druids at the least now have an out of combat 96% rez with a 20s cooldown. It would be fabulous if it could tell the difference between battle and out of combat rez situations and act appropriately, and only a difference of two options.

And once a druid gets that 96% AA, no more needing to mem incarnate anew, which is doubly nice :P

where do u set the spell for the % rezz?? im putting it on the combat rezz line but isnt work vey good...
 
I want to incorporate this modification into production release of KA. Gotta check with lizardboy b4 he goes on vacation, but i don't think he will have issue with this. Keeping this marked as open for investigation, but locking ticket at this time. This will serve as a reminder to me to get this incorporated into production.
 
Problem - Check for live player before calling MQ2rez with combat rez
Status
Not open for further replies.

Users who are viewing this thread

Back
Top
Cart