• 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

Bug - PullerPetTank pull issue when mob far from camp.

Joined
Sep 12, 2004
RedCents
720¢
Ever since I developed and wrote the portions of KissAssist for PullerPetTank role there was an apparent flaw in the logic with pet pulling across long distances.

Issue at hand:

All nearby mobs are pulled, but MaxRadius for pulling mobs is large enough to start looking for mobs further out of the pet's actual PetAttackRange. In this case, the normal pull code maneuvers the pet owner to move closer to the targeted mob to pull with pet, until the pet owner and pet are within the actual PetAttackRange (115) .. (Pet will not respond in EQ to an attack command if mob is further that that distance anyway).

So what ends up happening is... you and pet are away from camp... pet pulls mob gaining aggro... pet owner returns to camp (should always be using returntocamp in this role ).. but the pet stays far out of camp (out of heal range) tanking the mob until the pet owner returns to camp finally.. and THEN the pet is told to return.

This ends up in pet death many times... as the pet is out of heal range... especially if the pet owner takes too long to return to camp.

I've tracked down the issue to the call for CombatPet that is made in the DoWeMove sub.
It was NOT taking into consideration within it's logic if the pet was too far out from camp to receive healing while the owner returns.

I have been testing a perm fix for this... and wish to share it with the community until it is incorporated into the next official release patch.

Maskoi is aware of my work on this, but would rather I hold off on pushing an emergency patch right now.


So here it is.. replace the section that is bold/red within the Sub DoWeMove:

Rich (BB code):
| -------------------------------------------------------------------------------------
| SUB: Do We Move
| -------------------------------------------------------------------------------------
    Sub DoWeMove
        /if (!${ReturnToCamp} && !${ChaseAssist}) /return
        /doevents
        /call EndMacroIf
        /declare ZDist float local 0
        /if (${Target.ID} && ${Target.Type.Equal[npc]}) {
            /varcalc ZDist ${Math.Distance[${Target.Z}:${Me.Z}]}-(${Target.Height}-${Me.Height})
        }
        /declare circleDirection string local
        /if (${Debug}) /echo DEBUG DoWeMove: Enter
        | - Shuts off ReturnToCamp if a toon moves a big distance defined by CampRadiusExceed ie CoH !${Pulled} || ${Pulling}
        /if (${ReturnToCamp}) {
        /if (${DebugMove}) /echo DEBUG DoWeMove:(ReturnToCamp) My distance from camp is: (${Math.Distance[${CampYLoc},${CampXLoc}]}).
            /if (${Math.Distance[${CampYLoc},${CampXLoc}]} > ${CampRadiusExceed} && ${ReturnToCamp}==1) {
                /if (${DebugMove}) /echo DEBUG DoWeMove:(ReturnToCamp) CampRadiusExceed turning off ReturnToCamp.
                /varset ReturnToCamp 0
                /echo Leashing exceeded distance of ${CampRadiusExceed} turning off ReturnToCamp
                /return
            }
            /if (${Math.Distance[${CampYLoc},${CampXLoc}]} > 10) {
                /if (${DebugMove}) /echo DEBUG DoWeMove:(ReturnToCamp) Distance to camp > 10 and no adds in camp.
                | Prevent puller roles from returning to camphere spot and just pull from where they are if in camp radius.
                /if (${Select[${Role},puller,pullertank,pullerpettank]} && ${Math.Distance[${CampYLoc},${CampXLoc}]}<=${CampRadius} && !${Medding}) /return
                /if (${Navigation.MeshLoaded} && ${Math.Distance[${CampYLoc},${CampXLoc}]} > 15) {
                    /if (${DebugMove}) /echo DEBUG DoWeMove:(ReturnToCamp) Distance to camp > 15, MQ2Navigation return to camp.
                    :NotInCamp
                    /doevents
                    /nav ${CampXLoc} ${CampYLoc} ${CampZLoc}
                    :NavActive
                    | PullerPetTank - send in pet to attack on my way back to camp if not too far from camp.
                    /if (${Select[${Role},pullerpettank]} && ${Pulled}) {
                        /if (${Math.Distance[${Me.Pet.Y},${Me.Pet.X}:${CampYLoc},${CampXLoc}]}<=${PetAttackRange}) {
                            /call CombatPet
                        } else {
                            /pet back off
                        }
                    }                        
                    /delay 5
                    /if (${Navigation.Active} ) /goto :NavActive
                    /if (${Math.Distance[${CampYLoc},${CampXLoc}]} > 15) /goto :NotInCamp
                    | /if (!${Navigation.Active}) /nav stop
                } else {
                    /if (${DebugMove}) /echo DEBUG DoWeMove:(ReturnToCamp) Distance to camp > 15, MQ2MoveUtils return to camp.
                    /doevents
                    /look 0                    
                    /moveto mdist 10                 
                    /moveto loc ${CampYLoc} ${CampXLoc}
                    :StillMoving
                    | PullerPetTank - send in pet to attack on my way back to camp if not too far from camp.
                    /if (${Select[${Role},pullerpettank]} && ${Pulled}) {
                         /if (${Math.Distance[${Me.Pet.Y},${Me.Pet.X}:${CampYLoc},${CampXLoc}]}<=${PetAttackRange}) {
                             /call CombatPet
                         } else {
                             /pet back off
                         }
                    }
                    /delay 5
                    /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving
                    /delay 20 !${Me.Moving}
                }
                | Move down if Z distance more than 3 due to levitation
                /if (${Target.ID} && ${Select[${Target.Type},npc,corpse]})  /call ZAxisCheck ${ZDist} 3.1
                /if (!${AggroTargetID} && !${CombatStart} || ${Select[${Role},pullertank,puller,pullerpettank]}==0) /face heading ${LookForward}
                /look 0
                /if (${Select[${Role},hunter,hunterpettank]}) /varset ReturnToCamp 0
            }
        }
        /if (${ChaseAssist}) {
            /if (${Debug}) /echo DEBUG ChaseAssist
            /if (${DebugMove}) /echo DEBUG DoWeMove:(ChaseAssist) My distance from (${MainAssist}) is: (${Spawn[=${MainAssist}].Distance}).
            /if (${JustZoned}==0 && (${Spawn[=${MainAssist}].Distance} > ${CampRadiusExceed}) || (${Math.Calc[${Spawn[=${MainAssist}].Z}-${Me.Z}]}>100 && ${Math.Calc[${Spawn[=${MainAssist}].Z}-${Me.Z}]}<100)) {
                /if (${Debug} || ${DebugMove}) /echo DEBUG ChaseAssist exceed camp check
                /varset ChaseAssist 0
                /echo ChaseAssist distance exceeded: Turning off ChaseAssist
            }
            /if (${Spawn[=${MainAssist}].Distance} > ${ChaseDistance} && ${Spawn[=${MainAssist}].Distance} < ${CampRadiusExceed}) {
                /if (${Debug} || ${DebugMove}) /echo DEBUG ChaseAssist MA distance check
                /if (${Spawn[=${MainAssist}].Type.Equal[Pet]}) {
                    /target ${Spawn[=${MainAssist}].Master}
                    /delay 10
                    /stick ${ChaseDistance} id ${Target.ID} loose
                } else /if ( ${Spawn[=${MainAssist}].Type.Equal[mercenary]}) {
                    /target ${Spawn[=${MainAssist}].Owner}
                    /delay 10
                    /stick ${ChaseDistance} id ${Target.ID} loose
                } else {
                   /stick ${ChaseDistance} id ${Spawn[=${MainAssist}].ID} loose
                }
                :AreWeThere
                    /delay 10
                 /if (${Me.Moving}) /goto :AreWeThere
            }
        }
        /if (${Debug}) /echo DEBUG DoWeMove: Leave
    /return

- - - Updated - - -

I am leaving this OPEN until it is pushed to production as the official fix...

Yet another "Drive by" support issue by the Druid who loves Trees a little too much... lol

- - - Updated - - -

Updated logic to fix.
 
Last edited:
I tried copying in this sub replacing the original in 8.4.1 but all I get is a /if command error so as the sub is called....

2015/10/16 13:32:26] [MQ2] Looking for Close Range Mobs

[2015/10/16 13:32:27] [MQ2] PULLING-> an okiina vinethrasher <- ID:19985 at 209 feet.

[2015/10/16 13:32:35] Failed to parse /if command. Could not find command to execute.

[2015/10/16 13:32:35] kissassist.mac@1621 (DoWeMove): /if ((${Math.Distance[${Me.Pet.Y},${Me.Pet.X}:${CampYLoc},${CampXLoc}]}<=${PetAttackRange}) {

[2015/10/16 13:32:35] kissassist.mac@4461 (WaitForMob): /call DoWeMove

[2015/10/16 13:32:35] kissassist.mac@4447 (Pull): /call WaitForMob

[2015/10/16 13:32:35] kissassist.mac@4059 (FindMobToPull(int PullFlag)): /call Pull

[2015/10/16 13:32:35] kissassist.mac@714 (Main): /call FindMobToPull 1

[2015/10/16 13:32:35] The current macro has ended.

[2015/10/16 13:32:35] Usage: /if (<conditions>) <command>

[2015/10/16 13:32:36] [MQ2Navigation] Stopping
 
there is 1 to many "(" in the statement.

Here try this.

Rich (BB code):
| -------------------------------------------------------------------------------------
| SUB: Do We Move
| -------------------------------------------------------------------------------------
    Sub DoWeMove
        /if (!${ReturnToCamp} && !${ChaseAssist}) /return
        /doevents
        /call EndMacroIf
        /declare ZDist float local 0
        /if (${Target.ID} && ${Target.Type.Equal[npc]}) {
            /varcalc ZDist ${Math.Distance[${Target.Z}:${Me.Z}]}-(${Target.Height}-${Me.Height})
        }
        /declare circleDirection string local
        /if (${Debug}) /echo DEBUG DoWeMove: Enter
        | - Shuts off ReturnToCamp if a toon moves a big distance defined by CampRadiusExceed ie CoH !${Pulled} || ${Pulling}
        /if (${ReturnToCamp}) {
        /if (${DebugMove}) /echo DEBUG DoWeMove:(ReturnToCamp) My distance from camp is: (${Math.Distance[${CampYLoc},${CampXLoc}]}).
            /if (${Math.Distance[${CampYLoc},${CampXLoc}]} > ${CampRadiusExceed} && ${ReturnToCamp}==1) {
                /if (${DebugMove}) /echo DEBUG DoWeMove:(ReturnToCamp) CampRadiusExceed turning off ReturnToCamp.
                /varset ReturnToCamp 0
                /echo Leashing exceeded distance of ${CampRadiusExceed} turning off ReturnToCamp
                /return
            }
            /if (${Math.Distance[${CampYLoc},${CampXLoc}]} > 10) {
                /if (${DebugMove}) /echo DEBUG DoWeMove:(ReturnToCamp) Distance to camp > 10 and no adds in camp.
                | Prevent puller roles from returning to camphere spot and just pull from where they are if in camp radius.
                /if (${Select[${Role},puller,pullertank,pullerpettank]} && ${Math.Distance[${CampYLoc},${CampXLoc}]}<=${CampRadius} && !${Medding}) /return
                /if (${Navigation.MeshLoaded} && ${Math.Distance[${CampYLoc},${CampXLoc}]} > 15) {
                    /if (${DebugMove}) /echo DEBUG DoWeMove:(ReturnToCamp) Distance to camp > 15, MQ2Navigation return to camp.
                    :NotInCamp
                    /doevents
                    /nav ${CampXLoc} ${CampYLoc} ${CampZLoc}
                    :NavActive
                    | PullerPetTank - send in pet to attack on my way back to camp if not too far from camp.
                    /if (${Select[${Role},pullerpettank]} && ${Pulled}) {
                        /if (${Math.Distance[${Me.Pet.Y},${Me.Pet.X}:${CampYLoc},${CampXLoc}]}<=${PetAttackRange}) {
                            /call CombatPet
                        } else {
                            /pet back off
                        }
                    }                        
                    /delay 5
                    /if (${Navigation.Active} ) /goto :NavActive
                    /if (${Math.Distance[${CampYLoc},${CampXLoc}]} > 15) /goto :NotInCamp
                    | /if (!${Navigation.Active}) /nav stop
                } else {
                    /if (${DebugMove}) /echo DEBUG DoWeMove:(ReturnToCamp) Distance to camp > 15, MQ2MoveUtils return to camp.
                    /doevents
                    /look 0                    
                    /moveto mdist 10                 
                    /moveto loc ${CampYLoc} ${CampXLoc}
                    :StillMoving
                    | PullerPetTank - send in pet to attack on my way back to camp if not too far from camp.
                    /if (${Select[${Role},pullerpettank]} && ${Pulled}) {
                         /if (${Math.Distance[${Me.Pet.Y},${Me.Pet.X}:${CampYLoc},${CampXLoc}]}<=${PetAttackRange}) {
                             /call CombatPet
                         } else {
                             /pet back off
                         }
                    }
                    /delay 5
                    /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving
                    /delay 20 !${Me.Moving}
                }
                | Move down if Z distance more than 3 due to levitation
                /if (${Target.ID} && ${Select[${Target.Type},npc,corpse]})  /call ZAxisCheck ${ZDist} 3.1
                /if (!${AggroTargetID} && !${CombatStart} || ${Select[${Role},pullertank,puller,pullerpettank]}==0) /face heading ${LookForward}
                /look 0
                /if (${Select[${Role},hunter,hunterpettank]}) /varset ReturnToCamp 0
            }
        }
        /if (${ChaseAssist}) {
            /if (${Debug}) /echo DEBUG ChaseAssist
            /if (${DebugMove}) /echo DEBUG DoWeMove:(ChaseAssist) My distance from (${MainAssist}) is: (${Spawn[=${MainAssist}].Distance}).
            /if (${JustZoned}==0 && (${Spawn[=${MainAssist}].Distance} > ${CampRadiusExceed}) || (${Math.Calc[${Spawn[=${MainAssist}].Z}-${Me.Z}]}>100 && ${Math.Calc[${Spawn[=${MainAssist}].Z}-${Me.Z}]}<100)) {
                /if (${Debug} || ${DebugMove}) /echo DEBUG ChaseAssist exceed camp check
                /varset ChaseAssist 0
                /echo ChaseAssist distance exceeded: Turning off ChaseAssist
            }
            /if (${Spawn[=${MainAssist}].Distance} > ${ChaseDistance} && ${Spawn[=${MainAssist}].Distance} < ${CampRadiusExceed}) {
                /if (${Debug} || ${DebugMove}) /echo DEBUG ChaseAssist MA distance check
                /if (${Spawn[=${MainAssist}].Type.Equal[Pet]}) {
                    /target ${Spawn[=${MainAssist}].Master}
                    /delay 10
                    /stick ${ChaseDistance} id ${Target.ID} loose
                } else /if ( ${Spawn[=${MainAssist}].Type.Equal[mercenary]}) {
                    /target ${Spawn[=${MainAssist}].Owner}
                    /delay 10
                    /stick ${ChaseDistance} id ${Target.ID} loose
                } else {
                   /stick ${ChaseDistance} id ${Spawn[=${MainAssist}].ID} loose
                }
                :AreWeThere
                    /delay 10
                 /if (${Me.Moving}) /goto :AreWeThere
            }
        }
        /if (${Debug}) /echo DEBUG DoWeMove: Leave
    /return
 
Bug - PullerPetTank pull issue when mob far from camp.

Users who are viewing this thread

Back
Top
Cart