• 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 - Proposed fix for a Hunter mode pulling issue

toadwart

Seasoned veteran member
Joined
Aug 13, 2018
RedCents
12,119¢
Version of KissAssist.mac?
11.003
When did your problem start?
Found at least since the addition of the FindMobNAV function in v11.000
Character Role?
  1. Hunter
What class is having this issue?
  1. Warrior
How often does this issue occur?
Always
Can you reproduce the issue?
Easiest to see if you set MaxRadius in your character ini to a large distance in a wide open zone, like oceangreen village or hills and use a distance of say 1300 feet. Then run in hunter mode
I have found that when running my tank in hunter mode, while in a large open zone like Oceangreen village, and I have my MaxRadius quite large, in this case 1350 feet, as I'm hunting basically the entire upper 2/3rds of the zone, my tank will very frequently ignore mobs that are 50 feet away to pursue a mob that is upwards of 1000 feet away. I've certainly seen it with a smaller radius before, and while it was annoying, it was less of a concern, but when I started farming larger areas it really stood out that there was something not right with the sub-routine.

After a bit of time poring through KA's routines I stumbled on what appears to be two lines missing from an if statement that control the actions of your hunter mode character's target acquisition. In version 11.003 from the pinned thread on discord two days ago it was found at line 7378. Effectively it resides within the Sub FindMobNAV, within this for loop and set of if statements:

Code:
        /for p 1 to ${ECount}
            /if (${PRole.Find[hunter]}) {
                /varset PathArray[${p}] ${NearestSpawn[${p}, npc loc ${Me.X} ${Me.Y} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1].ID}
            } else {
                /varset PathArray[${p}] ${NearestSpawn[${p}, npc loc ${CampXLoc} ${CampYLoc} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1].ID}
            }
            /varset PullMob ${PathArray[${p}]}
            /if (${PRole.Find[hunter]}) {
                /if (${Navigation.PathExists[id ${PullMob}]}) {
                    /if (${Navigation.PathLength[id ${PullMob}]}>=${PullRange}) {
                        /varset PathDistance[${p}] 10000
                        DEBUGPULL hunter mob outside of pull range >>${Navigation.PathLength[id ${PullMob}]}<< skipping.
                    }
                }
            }  else /if (${Navigation.PathExists[id ${PullMob}]}) {
                /varset PathDistance[${p}] ${Navigation.PathLength[id ${PullMob}]}
                DEBUGPULL Succsesfully Added ${Navigation.PathExists[id ${PullMob}]} (dist :${PathDistance[${p}]}) to the pull array.
            } else {
                /varset PathDistance[${p}] 100000
            }
        /next p

There is currently no varset defined when you have an existing nav path to a mob, and it IS within PullRange. There is only one defined if it's outside of your PullRange, and it sets it to 10000. Through some echos within the sub I tracked it down to the final mob selection not being chosen based on distance from the hunter as it should be. I also found that the sub-routine FindMobHunter is never called anywhere in the Macro. I'm of the opinion it belonged in this Sub.

I fixed the issue the following way, and through testing it appears to be working pretty much perfectly now for me by adding two lines:

Code:
                    /call FindMobHunter
                    /varset PathDistance[${p}] ${Navigation.PathLength[id ${PullMob}]}

to the above for loop to end up with this:


Code:
        /for p 1 to ${ECount}
            /if (${PRole.Find[hunter]}) {
                /varset PathArray[${p}] ${NearestSpawn[${p}, npc loc ${Me.X} ${Me.Y} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1].ID}
            } else {
                /varset PathArray[${p}] ${NearestSpawn[${p}, npc loc ${CampXLoc} ${CampYLoc} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1].ID}
            }
            /varset PullMob ${PathArray[${p}]}
            /if (${PRole.Find[hunter]}) {
                /if (${Navigation.PathExists[id ${PullMob}]}) {
                    /if (${Navigation.PathLength[id ${PullMob}]}>=${PullRange}) {
                        /varset PathDistance[${p}] 10000
                        DEBUGPULL hunter mob outside of pull range >>${Navigation.PathLength[id ${PullMob}]}<< skipping.
                    }
                    /call FindMobHunter
                    /varset PathDistance[${p}] ${Navigation.PathLength[id ${PullMob}]}
                }
            }  else /if (${Navigation.PathExists[id ${PullMob}]}) {
                /varset PathDistance[${p}] ${Navigation.PathLength[id ${PullMob}]}
                DEBUGPULL Succsesfully Added ${Navigation.PathExists[id ${PullMob}]} (dist :${PathDistance[${p}]}) to the pull array.
            } else {
                /varset PathDistance[${p}] 100000
            }
        /next p

Through an hour of hunter mode farming I've found that at least as far as I can tell, the hunter will always go to the mob with the shortest Nav path length now.

Having said this, I also feel that the Sub FindMobHunter is essentially redundant, and the FindMobNAV routine works fine without the call entirely. I do not upon review find that the second sub adds anything positive to the assessment routine and seems redundant to the functions in the FindMobNAV, although I may be overlooking something.

Toadwart
 
Last edited:
Cosmetic Addendum:

I also think there should be clarification in the PullCheck Sub to match the other subs when reporting information. Currently when in Hunter mode and you are chasing a mob it will report out of the PullCheck Sub at about line 7522 the distance of your target away, but it is reporting it as distance from camp, regardless of mode and without clarity. I modified the broadcast to have two scenarios to report distance from yourself if in hunter mode, and distance from camp for other modes.

Code:
/call BroadCast ${IRCOn} ${EQBCOn} t "PULLING-> ${Spawn[${PullMob}].CleanName} <- ID:${PullMob} at ${Int[${Math.Distance[${Spawn[${PullMob}].Y},${Spawn[${PullMob}].X}:${CampYLoc},${CampXLoc}]}]} feet."

To changed version:

Code:
            /if (${Role.Equal[hunter]}) {
                /call BroadCast ${IRCOn} ${EQBCOn} t "PULLING-> ${Spawn[${PullMob}].CleanName} <- ID:${PullMob} at ${Int[${Math.Distance[${Spawn[${PullMob}].Y},${Spawn[${PullMob}].X}:${Me.Y},${Me.X}]}]} feet from me."
            } else {
                /call BroadCast ${IRCOn} ${EQBCOn} t "PULLING-> ${Spawn[${PullMob}].CleanName} <- ID:${PullMob} at ${Int[${Math.Distance[${Spawn[${PullMob}].Y},${Spawn[${PullMob}].X}:${CampYLoc},${CampXLoc}]}]} feet from Camp."
            }
 
I'm working on another issue whereby your hunter may stand in place targeting a whole list of mobs that are within your MaxRadius, but outside of your PullRange. The Hunter currently stands still and keeps cycling through mobs until a wanderer gets close I think. I'm trying to figure out what's causing this, it's not a Z value, but it's something I'm trying to solve.
 
Navigation.PathExists may be returning false. When this is happening, pause the macro and target one of the mobs and use the /echo command and test the Navigation.PathExists to your target.
 
you mean using something like windbg? I'll try. been trying to catch my zerker crashes lately, as they seem to have a much higher incident rate, and I'm not attaching to all 6 processes, I just pick one.
 
Problem - Proposed fix for a Hunter mode pulling issue

Users who are viewing this thread

Back
Top
Cart