• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->

News - Significant change to pet aggro rules (on test for now) (1 Viewer)

Inkie

Moderator
Joined
Jun 30, 2015
RedCents
3,963¢
https://forums.daybreakgames.com/eq/index.php?threads/test-update-12-04-15.228846/

- Adjusted how NPCs choose a melee target in relation to player pets:
- - It is now possible for a pet to be the target of an NPC's melee attacks if it has the highest aggro with other players in range.
- - This behavior can be adjusted on a per NPC basis and will currently be disabled for all current and previous raid difficulty NPCs.
- - It is additionally possible for some NPCs to ignore the hatred generated by pets and instead attribute a portion of that hatred toward the owner. This behavior will be in play on raid targets on progression servers.
- Adjusted how NPCs choose a melee target when they are rooted: NPCs will now choose to hit the target that they hate the most that is within melee range. Previously NPCs would simply hit the nearest hated target.
 
I wonder how this will play with Enchanter charmed pets. That could change everything! Something that has been an issue is if an enchanter and mage are grouped together, and the enchanter sends his pet in before the mage pet, the mob will attack the next person with the most hate or the owner of any of the pets. Basically... it's chaos until the mage pet can get enough aggro going. Let's see if they fix this.
 
I think this will change the usefulness of earth pets, honestly. Without hopping on test to check, I feel like there will be more ping-ponging with the new code and that root will prevent that. But now I can melee with my beastlord! Full pet group hells yes.
 
fun trio's to test now...
nec (or mage)/ shm / bard
nec / shm / rogue
nec / shm / monk
mage / ench / ranger

I'm not familiar with ench charm pets but that could be a big shift...
ench / ranger / rogue (or monk)

.... time to do some research
 
Running 2mag, 1 nec, 1 dru, 1 chant, 1 clr. Will be able to play tonight, hopefully I can shut down my other mag team.
 
Now, I guess I going to have to setup the healing section on my pet classes .....or teach the cleric how to heal pets....
 
Interested to see how war aggro pets come out of this as well. Phantom Aggressor is generally a few % ahead of me on hate, wonder if he can take a few rounds here and there, or if he's going to get rounded and cut the hate generation short.

The root/pet changes are pretty big changes, and will be interesting to see how they play out in game.
 
- Adjusted how NPCs choose a melee target when they are rooted: NPCs will now choose to hit the target that they hate the most that is within melee range. Previously NPCs would simply hit the nearest hated target.

Bah, now how will my cleric tank mobs while the group is looking for a replacement tank...
Flash of light is about to make an epic comeback to my spellbar. :p


Great pet changes though, those walls had to come down.
 
Last edited:
fun trio's to test now...
nec (or mage)/ shm / bard
nec / shm / rogue
nec / shm / monk
mage / ench / ranger

I'm not familiar with ench charm pets but that could be a big shift...
ench / ranger / rogue (or monk)

.... time to do some research

Try testing Enchanter with a charmed pet (maybe a rogue or SK) with a heavy DPS classes... could be fun to try. I doubt the aggro rules will apply like they do with mages...
 
Now, I guess I going to have to setup the healing section on my pet classes .....or teach the cleric how to heal pets....

I use a combination of MQ2bot and Kissassist to heal my pets. Use kiss to med and follow/buff on my priests and use mq2bot just for healing. It does a really good job.
I was attempting it with mq2heals but there is a significant amount of work Jimbob needs to do before I can switch to it permanently. It does a better job healing but needs alot of work to get it to be happy moving around/running oom ect without paying close attention to it and manually pausing all the time.

I would love it if Kiss would heal pets but I couldn't get it to do it. Now with this change can we get a re-write of kiss for pets? PLEASE?

I was surprised at some of the melee ranges mobs have when rooted now=p
 
OK. I have not tested this. It might have some syntax errors, but your welcome to try this. I added the logic so the healing check routine considers any pets. Try at your own risk.

Make a copy of your current macro before applying these mods. You have been warned!

Ok. Replace sub checkhealth with the following:

Rich (BB code):
    Sub CheckHealth
        /if (!${HealsOn}) /return
        /if (${DebugHeal}) /echo Sub CheckHealth Enter
        /declare i                  int         local       0
        /declare MostHurtName       string      local
        /declare MostHurtType       string      local
        /declare MostHurtID         int         local       0
        /declare MostHurtHP         int         local       100
        /declare MostHurtNo         int         local       0
        /declare GroupHealthAvg     string      local       0
        :CheckAgain
        /varset MostHurtName
        /varset MostHurtType
        /varset MostHurtID
        /varset MostHurtHP 100
        /varset MostHurtNo    0
        /varset HealAgain    0
        /varset GroupHealthAvg 0
        | Check self health
        /if (${Me.PctHPs} < 100) /call SingleHeal "${Me}" PC ${Me.PctHPs} 0
        | Call MA health check for only those that can heal others
        /if (${Select[${Me.Class.ShortName},BST,CLR,SHM,DRU,RNG,PAL]}) {
            | This is to target Main Assist out of group if class can heal
             /if (${Select[${HealsOn},1,3]} && ${Spawn[${MainAssist} ${MainAssistType}].ID} && ${Spawn[${MainAssist} ${MainAssistType}].Type.NotEqual[corpse]} && ${Spawn[${MainAssist}].ID}!=${Me.Pet.ID} && ${Spawn[${MainAssist}].ID}!=${Me.ID}) {
                /if ((!${Spawn[${MainAssist} ${MainAssistType} group].ID} && ${MainAssistType.NotEqual[pet]}) || (${Select[${Spawn[=${MainAssist}].Master},${Group.Member[1]},${Group.Member[2]},${Group.Member[3]},${Group.Member[4]},${Group.Member[5]}]}==0 && ${MainAssistType.Equal[pet]})) {
                    | Skip targeting tank if MA is defined to watch for heals in XTarget
                    /if (!${XTarHeal} || ${XTarHeal} && ${Me.XTarget[${XTarHeal}].ID}!=${Spawn[${MainAssist} ${MainAssistType}].ID}) {
                        /target id ${Spawn[${MainAssist} ${MainAssistType}].ID}
                        /delay 5
                    }
                }
                /if (${DebugHeal}) /echo DEBUGHEALS CheckHealth:  Tank OOG: ${Spawn[${MainAssist}].PctHPs} ${Spawn[${MainAssist} ${MainAssistType}].ID}  ${Spawn[${MainAssist} ${MainAssistType}].Type.NotEqual[corpse]}
                /if (${Spawn[${MainAssist} ${MainAssistType}].PctHPs} < 100 || (${MainAssistType.Equal[pet]} && ${Group.Member[${MAGOwnerNum}].Pet.PctHPs} < 100)) /call SingleHeal "${MainAssist}" "${MainAssistType}" ${Spawn[${MainAssist} ${MainAssistType}].PctHPs} 6
            }
           | Who is the most hurt
            /if (${Select[${HealsOn},1,2]} && ${Group} && !${JustZoned} && !${JoinedParty}) {
                /for i 0 to ${Group}
                    |/if (${Select[${HealsOn},2]} && ${Group.Member[${i}].ID}==${Spawn[${MainAssist} ${MainAssistType}].ID}) /goto :NextGMember
                    /if (${Select[${HealsOn},2]} && ${Select[${Spawn[${MainAssist} ${MainAssistType}].ID},${Group.Member[${i}].ID},${Group.Member[${i}].Pet.ID}]}>0) /goto :NextGMember
                    /if (${Group} && ${Group.Member[${i}].ID} && ${Group.Member[${i}].Type.NotEqual[corpse]} && ${Group.Member[${i}].PctHPs}>=1) {
                    /if (${DebugHeal}) /echo DEBUGHEALS CheckHealth:  -- Most Hurt:${i} ${MostHurtNo} ${MostHurtName} ${MostHurtID} ${MostHurtHP}
                        /if (${Group.Member[${i}].PctHPs} < ${MostHurtHP}) {
                            /varset MostHurtName ${Group.Member[${i}].CleanName}
                            /varset MostHurtType ${Group.Member[${i}].Type}
                            /varset MostHurtID ${Group.Member[${i}].ID}
                            /varset MostHurtHP ${Group.Member[${i}].PctHPs}
                            /varset MostHurtNo ${i}
                        }
                        /if (${Group.Member[${i}].Pet.ID}>0 && ${Group.Member[${i}].Pet.PctHPs} < ${MostHurtHP}) { 
                            /varset MostHurtName ${Group.Member[${i}].Pet.CleanName}
                            /varset MostHurtType Pet
                            /varset MostHurtID ${Group.Member[${i}].Pet.ID}
                            /varset MostHurtHP ${Group.Member[${i}].Pet.PctHPs}
                            /varcalc MostHurtNo ${i}+8
                        }
                    }
                :NextGMember
                /next i
                /if (${DebugHeal}) /echo DEBUGHEALS CheckHealth: (${MostHurtHP} < 100) /call SingleHeal "${MostHurtName}" "${MostHurtType}" ${MostHurtHP} ${MostHurtNo}
                /if (${MostHurtHP} < 100) /call SingleHeal "${MostHurtName}" "${MostHurtType}" ${MostHurtHP} ${MostHurtNo}
            }
        }
        | Group Heal Check only call for those clases that can group heal
        /if (${Select[${Me.Class.ShortName},BST,CLR,SHM,DRU,PAL]}) {
            /call GroupHealthCheck
            /varset GroupHealthAvg ${Macro.Return}
            /if (${DebugHeal}) /echo DEBUGHEALS CheckHealth: Group Health Average ${GroupHealthAvg}
            | Check for group heals
            /if (${GroupHealthAvg} < 100 && ${Group}) /call DoGrouopHealStuff ${GroupHealthAvg}
        }
        | Check xtarget health if on.
        /if (${XTarHeal}) {
            /if (${Select[${Spawn[${Me.XTarget[${XTarHeal}].ID}].Type},PC,Mercenary,Pet]} && ${Me.XTarget[${XTarHeal}].ID} && ${Spawn[${Me.XTarget[${XTarHeal}].ID}].PctHPs}<100) {
                /call SingleHeal "${Spawn[${Me.XTarget[${XTarHeal}].ID}].CleanName}" "${Spawn[${Me.XTarget[${XTarHeal}].ID}].Type}" ${Spawn[${Me.XTarget[${XTarHeal}].ID}].PctHPs} 7
                /if (${DebugHeal}) /echo DEBUGHEALS CheckHealth: SingleHeal "${MainAssist}" "${MainAssistType}" ${Spawn[${MainAssist} ${MainAssistType}].PctHPs} 7
            }
        }
        /if (${AutoRezOn}) /call RezCheck
        /if (${PetOn} && ${Me.Pet.ID} && ${Me.Pet.PctHPs} < 100) /call DoPetHealStuff
        /if (${HealAgain}) /goto :CheckAgain
        /if (${DebugHeal}) /echo Sub CheckHealth leave
        /call WriteDebuffs
    /return

In sub singleheal change the highlighted line.

Rich (BB code):
            /if (${Spell[SHealSpell].TargetType.Find[Group]})  /varset SHealRange ${Spell[${1stPart}].AERange}
            /if (!${SHealRange}) /varset SHealRange 100
            | Skip Heal if pet 
            /if (${SHealTag.Equal[pet]} && ${SHealType.NotEqual[pet]}) /goto :SNextHeal 
            | If tag MA/Mob and heal target not MA or tag !MA and heal target MA skip
            /if (${DebugHeal}) /echo DEBUGHEALS SingleHeal TAG: ${SHealTag.Equal[MA]} && ${SHealThem}!=${MainAssistID} || ${SHealTag.Equal[Mob]} && ${SHealThem}!=${MainAssistID} || ${SHealTag.Equal[!MA]} && ${SHealThem}==${MainAssistID} 
            /if ((${SHealTag.Equal[MA]} && ${SHealThem}!=${MainAssistID}) || (${SHealTag.Equal[Mob]} && ${SHealThem}!=${MainAssistID}) || (${SHealTag.Equal[!MA]} && ${SHealThem}==${MainAssistID})) /goto :SNextHeal


Replace Sub GroupHealthCheck with the following:

Rich (BB code):
    Sub GroupHealthCheck
        /if (${DebugHeal}) /echo DEBUGHEALS GroupHealthCheck Enter
        /declare j                  int     local   0
        /declare GroupHealthTl      float   local   .1
        /declare GroupHealthPct     float   local   100
        /declare NotDead            int     local   0
        /for j 0 to ${Group}
            /if (${Group} && ${Group.Member[${j}].ID} && ${Group.Member[${j}].Type.NotEqual[corpse]}) {
                | Calculate total group health for group heal spells
                /if (${Group.Member[${j}].Distance}<100) {
                    /if (${DebugHeal}) /echo DEBUGHEALS GroupHealthCheck Group Health: GM:${j} Health:${Group.Member[${j}].PctHPs}
                    /varcalc GroupHealthTl ${GroupHealthTl}+${Group.Member[${j}].PctHPs}
                    /varcalc NotDead ${NotDead}+1
                    |/varcalc GroupHealthPct ${GroupHealthTl}/${NotDead}
                }
                /if (${Group.Member[${j}].Pet.ID}>0 && ${Group.Member[${j}].Pet.Distance}<100) {
                    /if (${DebugHeal}) /echo DEBUGHEALS GroupHealthCheck Group Pet Health: GM:${j} Health:${Group.Member[${j}].Pet.PctHPs}
                    /varcalc GroupHealthTl ${GroupHealthTl}+${Group.Member[${j}].Pet.PctHPs}
                    /varcalc NotDead ${NotDead}+1
                    |/varcalc GroupHealthPct ${GroupHealthTl}/${NotDead}
                }
            }
        /next j
        /if (${GroupHealthTl} && ${NotDead}) /varcalc GroupHealthPct ${GroupHealthTl}/${NotDead}
        /if (${DebugHeal}) /echo DEBUGHEALS GroupHealthCheck Leave ${GroupHealthPct}
    /return ${GroupHealthPct}

Find Sub CreateTimersHeals and add the highlighted lines that follow:

Rich (BB code):
        /for j 1 to ${Heals.Size}
            | Group Heal duration timers
            /declare SpellGH${j}    timer   outer   0
            /for k 0 to 7
                | Self and MA duration heal timers for  out of group
                /declare Spell${j}GM${k}     timer   outer   0
                /varcalc q ${k}+8
                /declare Spell${j}GM${q}     timer   outer   0 
                /if (${Debug}) /echo DEBUG Group heal Timers Spell${j}GM${k} ${Spell${j}GM${k}} 
            /next k
        /next j

Ok I noticed an issue with the timers. currently the pets share the same time as their master. I am working to resolve the issue.

Made a small change in sub CheckHealth. I highlighted the change. I added 2 lines to sub CreateTimersHeals.

I had a "}" in the wrong place. The syntax error should be fixed, but the logic could still be a little iffy.

Keep testing it and let me know and we can get this working for pets.
 
Last edited:
Will give it a solid go tonight.
Will post progress

Thanks CT!

How bad was today's pet nerf?

Edit:wow significantly different once I saw the change.
 
Last edited:
The pet change is brutal -- they tank no matter what and die in 1-2 hits.

Yeah, this is a problem for me as an enchanter... My shiny bob tries to tank and well, he's lower than ranger class! Then a charmed mob takes over and tanks, but I don't play with a healer out so he ends up getting burned down. Normally this would be fine, but in TBM there aren't that many charm-able mobs so I try to keep my one pet for a while. Even if I'm marked as tank, and taunt is off, they still take over. 'Nother patch coming????
 
Using a Mage water pet dual yielding the jolt lower aggro swords with War as tank and pet was constantly stealing aggro and getting whacked. This is definitely game changing. Gonna have to really re-work how my War tanks, perhaps gonna have to go to the dreaded dual yield as warrior...And mage doesnt even have any Pet Focus items -(
 
Using a Mage water pet dual yielding the jolt lower aggro swords with War as tank and pet was constantly stealing aggro and getting whacked. This is definitely game changing. Gonna have to really re-work how my War tanks, perhaps gonna have to go to the dreaded dual yield as warrior...And mage doesnt even have any Pet Focus items -(

Just let the mage pet tank =P
 
OK. I have not tested this. It might have some syntax errors, but your welcome to try this. I added the logic so the healing check routine considers any pets. Try at your own risk.

Make a copy of your current macro before applying these mods. You have been warned!

Ok. Replace sub checkhealth with the following:

Rich (BB code):
    Sub CheckHealth
        /if (!${HealsOn}) /return
        /if (${DebugHeal}) /echo Sub CheckHealth Enter
        /declare i                  int         local       0
        /declare MostHurtName       string      local
        /declare MostHurtType       string      local
        /declare MostHurtID         int         local       0
        /declare MostHurtHP         int         local       100
        /declare MostHurtNo         int         local       0
        /declare GroupHealthAvg     string      local       0
        :CheckAgain
        /varset MostHurtName
        /varset MostHurtType
        /varset MostHurtID
        /varset MostHurtHP 100
        /varset MostHurtNo    0
        /varset HealAgain    0
        /varset GroupHealthAvg 0
        | Check self health
        /if (${Me.PctHPs} < 100) /call SingleHeal "${Me}" PC ${Me.PctHPs} 0
        | Call MA health check for only those that can heal others
        /if (${Select[${Me.Class.ShortName},BST,CLR,SHM,DRU,RNG,PAL]}) {
            | This is to target Main Assist out of group if class can heal
             /if (${Select[${HealsOn},1,3]} && ${Spawn[${MainAssist} ${MainAssistType}].ID} && ${Spawn[${MainAssist} ${MainAssistType}].Type.NotEqual[corpse]} && ${Spawn[${MainAssist}].ID}!=${Me.Pet.ID} && ${Spawn[${MainAssist}].ID}!=${Me.ID}) {
                /if ((!${Spawn[${MainAssist} ${MainAssistType} group].ID} && ${MainAssistType.NotEqual[pet]}) || (${Select[${Spawn[=${MainAssist}].Master},${Group.Member[1]},${Group.Member[2]},${Group.Member[3]},${Group.Member[4]},${Group.Member[5]}]}==0 && ${MainAssistType.Equal[pet]})) {
                    | Skip targeting tank if MA is defined to watch for heals in XTarget
                    /if (!${XTarHeal} || ${XTarHeal} && ${Me.XTarget[${XTarHeal}].ID}!=${Spawn[${MainAssist} ${MainAssistType}].ID}) {
                        /target id ${Spawn[${MainAssist} ${MainAssistType}].ID}
                        /delay 5
                    }
                }
                /if (${DebugHeal}) /echo DEBUGHEALS CheckHealth:  Tank OOG: ${Spawn[${MainAssist}].PctHPs} ${Spawn[${MainAssist} ${MainAssistType}].ID}  ${Spawn[${MainAssist} ${MainAssistType}].Type.NotEqual[corpse]}
                /if (${Spawn[${MainAssist} ${MainAssistType}].PctHPs} < 100 || (${MainAssistType.Equal[pet]} && ${Group.Member[${MAGOwnerNum}].Pet.PctHPs} < 100)) /call SingleHeal "${MainAssist}" "${MainAssistType}" ${Spawn[${MainAssist} ${MainAssistType}].PctHPs} 6
            }
           | Who is the most hurt
            /if (${Select[${HealsOn},1,2]} && ${Group} && !${JustZoned} && !${JoinedParty}) {
                /for i 0 to ${Group}
                    |/if (${Select[${HealsOn},2]} && ${Group.Member[${i}].ID}==${Spawn[${MainAssist} ${MainAssistType}].ID}) /goto :NextGMember
                    /if (${Select[${HealsOn},2]} && ${Select[${Spawn[${MainAssist} ${MainAssistType}].ID},${Group.Member[${i}].ID},${Group.Member[${i}].Pet.ID}]}>0) /goto :NextGMember
                    /if (${Group} && ${Group.Member[${i}].ID} && ${Group.Member[${i}].Type.NotEqual[corpse]} && ${Group.Member[${i}].PctHPs}>=1) {
                    /if (${DebugHeal}) /echo DEBUGHEALS CheckHealth:  -- Most Hurt:${i} ${MostHurtNo} ${MostHurtName} ${MostHurtID} ${MostHurtHP}
                        /if (${Group.Member[${i}].PctHPs} < ${MostHurtHP}) {
                            /varset MostHurtName ${Group.Member[${i}].CleanName}
                            /varset MostHurtType ${Group.Member[${i}].Type}
                            /varset MostHurtID ${Group.Member[${i}].ID}
                            /varset MostHurtHP ${Group.Member[${i}].PctHPs}
                            /varset MostHurtNo ${i}
                        }
                        /if (${Group.Member[${i}].Pet.ID>0} && ${Group.Member[${i}].Pet.PctHPs} < ${MostHurtHP}) {
                            /varset MostHurtName ${Group.Member[${i}].Pet.CleanName}
                            /varset MostHurtType Pet
                            /varset MostHurtID ${Group.Member[${i}].Pet.ID}
                            /varset MostHurtHP ${Group.Member[${i}].Pet.PctHPs}
                            /varcalc MostHurtNo ${i}+8
                        }
                    }
                :NextGMember
                /next i
                /if (${DebugHeal}) /echo DEBUGHEALS CheckHealth: (${MostHurtHP} < 100) /call SingleHeal "${MostHurtName}" "${MostHurtType}" ${MostHurtHP} ${MostHurtNo}
                /if (${MostHurtHP} < 100) /call SingleHeal "${MostHurtName}" "${MostHurtType}" ${MostHurtHP} ${MostHurtNo}
            }
        }
        | Group Heal Check only call for those clases that can group heal
        /if (${Select[${Me.Class.ShortName},BST,CLR,SHM,DRU,PAL]}) {
            /call GroupHealthCheck
            /varset GroupHealthAvg ${Macro.Return}
            /if (${DebugHeal}) /echo DEBUGHEALS CheckHealth: Group Health Average ${GroupHealthAvg}
            | Check for group heals
            /if (${GroupHealthAvg} < 100 && ${Group}) /call DoGrouopHealStuff ${GroupHealthAvg}
        }
        | Check xtarget health if on.
        /if (${XTarHeal}) {
            /if (${Select[${Spawn[${Me.XTarget[${XTarHeal}].ID}].Type},PC,Mercenary,Pet]} && ${Me.XTarget[${XTarHeal}].ID} && ${Spawn[${Me.XTarget[${XTarHeal}].ID}].PctHPs}<100) {
                /call SingleHeal "${Spawn[${Me.XTarget[${XTarHeal}].ID}].CleanName}" "${Spawn[${Me.XTarget[${XTarHeal}].ID}].Type}" ${Spawn[${Me.XTarget[${XTarHeal}].ID}].PctHPs} 7
                /if (${DebugHeal}) /echo DEBUGHEALS CheckHealth: SingleHeal "${MainAssist}" "${MainAssistType}" ${Spawn[${MainAssist} ${MainAssistType}].PctHPs} 7
            }
        }
        /if (${AutoRezOn}) /call RezCheck
        /if (${PetOn} && ${Me.Pet.ID} && ${Me.Pet.PctHPs} < 100) /call DoPetHealStuff
        /if (${HealAgain}) /goto :CheckAgain
        /if (${DebugHeal}) /echo Sub CheckHealth leave
        /call WriteDebuffs
    /return

In sub singleheal change the highlighted line.

Rich (BB code):
            /if (${Spell[SHealSpell].TargetType.Find[Group]})  /varset SHealRange ${Spell[${1stPart}].AERange}
            /if (!${SHealRange}) /varset SHealRange 100
            | Skip Heal if pet 
            /if (${SHealTag.Equal[pet]} && ${SHealType.NotEqual[pet]}) /goto :SNextHeal 
            | If tag MA/Mob and heal target not MA or tag !MA and heal target MA skip
            /if (${DebugHeal}) /echo DEBUGHEALS SingleHeal TAG: ${SHealTag.Equal[MA]} && ${SHealThem}!=${MainAssistID} || ${SHealTag.Equal[Mob]} && ${SHealThem}!=${MainAssistID} || ${SHealTag.Equal[!MA]} && ${SHealThem}==${MainAssistID} 
            /if ((${SHealTag.Equal[MA]} && ${SHealThem}!=${MainAssistID}) || (${SHealTag.Equal[Mob]} && ${SHealThem}!=${MainAssistID}) || (${SHealTag.Equal[!MA]} && ${SHealThem}==${MainAssistID})) /goto :SNextHeal


Replace Sub GroupHealthCheck with the following:

Rich (BB code):
    Sub GroupHealthCheck
        /if (${DebugHeal}) /echo DEBUGHEALS GroupHealthCheck Enter
        /declare j                  int     local   0
        /declare GroupHealthTl      float   local   .1
        /declare GroupHealthPct     float   local   100
        /declare NotDead            int     local   0
        /for j 0 to ${Group}
            /if (${Group} && ${Group.Member[${j}].ID} && ${Group.Member[${j}].Type.NotEqual[corpse]}) {
                | Calculate total group health for group heal spells
                /if (${Group.Member[${j}].Distance}<100) {
                    /if (${DebugHeal}) /echo DEBUGHEALS GroupHealthCheck Group Health: GM:${j} Health:${Group.Member[${j}].PctHPs}
                    /varcalc GroupHealthTl ${GroupHealthTl}+${Group.Member[${j}].PctHPs}
                    /varcalc NotDead ${NotDead}+1
                    |/varcalc GroupHealthPct ${GroupHealthTl}/${NotDead}
                }
                /if (${Group.Member[${j}].Pet.ID}>0 && ${Group.Member[${j}].Pet.Distance}<100) {
                    /if (${DebugHeal}) /echo DEBUGHEALS GroupHealthCheck Group Pet Health: GM:${j} Health:${Group.Member[${j}].Pet.PctHPs}
                    /varcalc GroupHealthTl ${GroupHealthTl}+${Group.Member[${j}].Pet.PctHPs}
                    /varcalc NotDead ${NotDead}+1
                    |/varcalc GroupHealthPct ${GroupHealthTl}/${NotDead}
                }
            }
        /next j
        /if (${GroupHealthTl} && ${NotDead}) /varcalc GroupHealthPct ${GroupHealthTl}/${NotDead}
        /if (${DebugHeal}) /echo DEBUGHEALS GroupHealthCheck Leave ${GroupHealthPct}
    /return ${GroupHealthPct}

Find Sub CreateTimersHeals and add the highlighted lines that follow:

Rich (BB code):
        /for j 1 to ${Heals.Size}
            | Group Heal duration timers
            /declare SpellGH${j}    timer   outer   0
            /for k 0 to 7
                | Self and MA duration heal timers for  out of group
                /declare Spell${j}GM${k}     timer   outer   0
                /varcalc q ${k}+8
                /declare Spell${j}GM${q}     timer   outer   0 
                /if (${Debug}) /echo DEBUG Group heal Timers Spell${j}GM${k} ${Spell${j}GM${k}} 
            /next k
        /next j

Ok I noticed an issue with the timers. currently the pets share the same time as their master. I am working to resolve the issue.

Made a small change in sub CheckHealth. I highlighted the change. I added 2 lines to sub CreateTimersHeals.

pethp.png



Also can we move this to the proper forum?
 
Using a Mage water pet dual yielding the jolt lower aggro swords with War as tank and pet was constantly stealing aggro and getting whacked. This is definitely game changing. Gonna have to really re-work how my War tanks, perhaps gonna have to go to the dreaded dual yield as warrior...And mage doesnt even have any Pet Focus items -(

Pet classes have a aa they can use to reduce their pet agro
 
Using a Mage water pet dual yielding the jolt lower aggro swords with War as tank and pet was constantly stealing aggro and getting whacked. This is definitely game changing. Gonna have to really re-work how my War tanks, perhaps gonna have to go to the dreaded dual yield as warrior...And mage doesnt even have any Pet Focus items -(

Make sure PET TAUNT is off.
Get PET FOCUS item.
Get a better agro tank (SK, PAL). OR learn to pet tank.
 
This works on TLP, I was using it last night with good results, just need to optimize the speed if possible.

Still working on determining if the |Pet arg is required. Will post results.

CTaylor is BOSS!
 
News - Significant change to pet aggro rules (on test for now)

Users who are viewing this thread

Back
Top