• 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 --->
MQ2AdvPath

Plugin - MQ2AdvPath (1 Viewer)

ctaylor22

Moderator
Joined
Mar 21, 2014
RedCents
24,986¢
OK Guy's and Gal's. I made a few changes to MQ2AdvPath. I will try and give some detail instructions on how this can be used, but it will not be all inclusive.

Here we go.

New Commands I added:

Rich (BB code):
    /advpath on|off  -  Toggles ${AdvPath.Active} true/false
    /advpath pull|nopull  -  Toggles ${AdvPath.Pulling} true/false
    /advpath flee|noflee  -  Toggles ${AdvPath.Fleeing} true/false
    /advpath help
  
    /play stop
    /play flee|noflee
    /play resetflags
    /play setflag1 n*
    /play setflag2 n*
    /play setflag3 n*
    /play setflag4 n*
    /play setflag5 n*
    /play setflag6 n*
    /play setflag7 n*
    /play setflag8 n*
    /play setflag9 n*
    /play help
  
* - Can be any alpha character Defaults to 'y'.


Here is the new TLO(${AdvPath.}):

Rich (BB code):
            Active
            State
            Waypoints
            NextWaypoint
            Y
            X
            Z
            Monitor
            Idle
            Length
            Following
            Playing
            Recording
            Status
            Paused
            WaitingWarp
            Path
            CheckPoint
            CustomPaths
            Pulling
            Direction
            Fleeing
            Flag1
            Flag2
            Flag3
            Flag4
            Flag5
            Flag6
            Flag7
            Flag8
            Flag9
            CustomSearch


Now here are some instruction on what you can do with this:

Rich (BB code):
This version of mq2advpath will check checkpoints to see if it is a command that can be executed. A normal path

checkpoint looks like the following:

   [apath1]
   1=766.86 514.00 -157.15
 
A path checkpoint with a named checkpoint looks like the following:
 
   [apath1]
   1=766.86 514.00 -157.15 Checkpoint1
 
Now a checkpoint used for executing a command looks like this:

   [apath1]
   1=766.86 514.00 -157.15 /docommand somecommand
 
   or
 
   [apath1]
   1=766.86 514.00 -157.15 /echo anything you want

   or

   [apath1]
   1=766.86 514.00 -157.15 /if (${AdvPath.Pulling}) ${If[!${AdvPath.Fleeing} && ${AdvPath.Direction.Equal[n]} &&

${AdvPath.Flag1.Equal[y]},/play stop apath2 normal,/echo Continuing]}


The first position of the checkpoint has to contain "/" for the plugin to execute it.

So with that said lets move on to how you would pull this all together.

I will try and keep this simple, so we will work with 3 paths. apath1, apath2, and apath3.

apath1 will be the main path and will branch out to apath2 and apath3.


                  apath2
                    |                                          
                    |                                          
                    |                                          
                    |                                          
                    |                                          
                    |                                          
                    |                                          
 B                  |                                          
 e                  |                                          
 g  -------------------------------------------------------------------------------------------------------------

 i  apath1
 n                                                                           |
                                                                             |
                                                                             |
                                                                             |
                                                                             |
                                                                             |
                                                                             |
                                                                             |
                                                                             |
                                                                             |
                                                                             |
                                                                             |
                                                                           apath3
 
 
Now what we want to do is to be able to /play normal apath1 and start playing apath1 to apath2, and then run apath2 in a loop(beginning to end, end to beginning). That is what the pulling mode(${AdvPath.Pulling}) does. Then when we get back to the beginning of apath2 we want to continue playing apath1 towards apath3. Then when we reach apath3 we want to do the same as apath2. Now when we get back to the beginning of apath3 we will want to continue running apath 1.

so here is a simple path file that contains all the checkpoints that will do what I just described above.

[apath1]
1=766.86 514.00 -157.15
2=770.61 626.22 -156.25
3=769.67 716.44 -156.25 /docommand ${If[${AdvPath.Pulling} && ${AdvPath.Direction.Equal[n]} && ${AdvPath.Flag1.Equal[y]},/play stop apath2 normal,/echo Continuing]}
4=760.46 811.97 -157.25
5=763.25 945.13 -157.25
6=764.66 1057.63 -156.25 /docommand ${If[${AdvPath.Pulling} && ${AdvPath.Direction.Equal[n]} && ${AdvPath.Flag2.Equal[y]},/play stop apath3 normal,/echo Continuing]}
7=791.19 1143.38 -156.25
8=792.85 1148.35 -156.25
9=824.54 1227.75 -157.25
[apath2]
1=728.23 714.80 -148.59 /docommand ${If[${AdvPath.Pulling},/play stop setflag1 n apath1 smart normal,/play off]}
2=718.46 714.41 -143.69
3=639.49 720.02 -116.25
4=613.05 718.25 -116.25
5=465.88 716.07 -125.25
6=460.63 716.01 -125.25
7=397.28 711.42 -125.25
[apath3]
1=759.69 1068.18 -156.25 /docommand ${If[${AdvPath.Pulling},/play stop setflag2 n apath1 smart normal,/play off]}
2=665.82 1064.70 -117.35
3=607.60 1067.44 -116.25
4=562.37 1065.06 -124.25
5=557.40 1064.35 -124.25
6=553.60 1060.95 -124.25
7=556.04 988.76 -124.25
8=550.15 900.34 -124.25
 
 
Now the above does not take into consideration pulling mobs and having aggro. Part of it is being handeled above in apath2 and apath3, but only the part when you run the path and return with no agro. See below:

1=728.23 714.80 -148.59 /docommand ${If[${AdvPath.Pulling},/play stop setflag1 n apath1 smart normal,/play off]}
1=759.69 1068.18 -156.25 /docommand ${If[${AdvPath.Pulling},/play stop setflag2 n apath1 smart normal,/play off]}

what shuts down the path from being run next time around is the "setflag1 n" this sets the internal advpath flag1=n. Now notice apath1 checkpoint #3's. checkpoint command:

/docommand ${If[${AdvPath.Pulling} && ${AdvPath.Direction.Equal[n]} && ${AdvPath.Flag1.Equal[y]},/play stop apath2 normal,/echo Continuing]}

there is a check for advpath flag1 ${AdvPath.Flag1.Equal[y]} by setting Flag1=n apath2 will be skipped until Flag1 gets set back to "y".

Same thing goes for apath3 just using a different flag. Flag2 is used for apath3.


OK. Now all that's fine and dandy, but how do we get this to work when we are actually pulling mobs, and we want to run the path back to camp and not away from camp. All the above paths do not take any of that into consideration. Well this is what the flee|noflee was created for. This sets an internal flag in advpath letting the plugin know not only are we running in a reverse direction, but we are doing so with a purpose.

This is what would need to be changed in the pathing file paths to take into consideration when we are fleeing.

[apath1]
1=766.86 514.00 -157.15
2=770.61 626.22 -156.25
3=769.67 716.44 -156.25 /docommand ${If[${AdvPath.Pulling} && !${AdvPath.Fleeing} && ${AdvPath.Direction.Equal[n]} && ${AdvPath.Flag1.Equal[y]},/play stop apath2 normal,/echo Continuing]}
4=760.46 811.97 -157.25
5=763.25 945.13 -157.25
6=764.66 1057.63 -156.25 /docommand ${If[${AdvPath.Pulling} && !${AdvPath.Fleeing} && ${AdvPath.Direction.Equal[n]} && ${AdvPath.Flag2.Equal[y]},/play stop apath3 normal,/echo Continuing]}
7=791.19 1143.38 -156.25
8=792.85 1148.35 -156.25
9=824.54 1227.75 -157.25
[apath2]
1=728.23 714.80 -148.59 /docommand ${If[${AdvPath.Pulling} && ${AdvPath.Fleeing},/play stop apath1 smart,/play stop setflag1 n apath1 smart normal]}
2=718.46 714.41 -143.69
3=639.49 720.02 -116.25
4=613.05 718.25 -116.25
5=465.88 716.07 -125.25
6=460.63 716.01 -125.25
7=397.28 711.42 -125.25
[apath3]
1=759.69 1068.18 -156.25 /docommand ${If[${AdvPath.Pulling} && ${AdvPath.Fleeing},/play stop apath1 smart,/play stop setflag2 n apath1 smart normal]}
2=665.82 1064.70 -117.35
3=607.60 1067.44 -116.25
4=562.37 1065.06 -124.25
5=557.40 1064.35 -124.25
6=553.60 1060.95 -124.25
7=556.04 988.76 -124.25
8=550.15 900.34 -124.25


Now in your macro you just have to write the pulling logic and start the pull with /play apath1 normal fast noflee. Somewhere along the path you have to stop to pull a mob (/play pause) and when you get agro /play flee unpause, or /play flee when your not paused.

Now an easy way to open up apath2 and apath3 would be to check when returning from apath1 and check if !{AdvPath.Fleeing}, this would only be true if I ran the full length of apath1 and never gained any aggro from a mob. /play resetflags, or /play setflag1 y setflag2 y, would then open up apath2 and apath3 for use again.



/play reverse and /play flee function are slightly different. /play reverse will start running in reverse after it reaches the current checkpoint. /play flee sets you in reverse, but it gets the previous checkpoint and sets you in that checkpoints direction.

With these changes, now most of the pathing logic can be managed in the pathing file. All you have to do is set it playing the path to start with, and this allows others to customize the pathing file as they see fit.

This is now part of the normal RG compile
 
Last edited:
Not sure what I broke but Pulling with KA and a path

with puller role set in ini before start

Rich (BB code):
/mac kissassist path ####

and

Rich (BB code):
/mac kissassist puller path ####

Both iterations just looking for a mob and wont play the path. What did I break?
I'm using the GUI to create the path and it plays fine when I hit play manually.
 
Not sure what I broke but Pulling with KA and a path

with puller role set in ini before start

Rich (BB code):
/mac kissassist path ####

and

Rich (BB code):
/mac kissassist puller path ####

Both iterations just looking for a mob and wont play the path. What did I break?
I'm using the GUI to create the path and it plays fine when I hit play manually.

Are you using KA 9.0?
 
Yes, latest (beta) release. It goes into the pull routine but just stands there cycling for a mob. It does state that the path was found and that it will use it when I fire it up.

Pull rad turned down to 50, camp rad @ 40.

Will post ini when I get home if need be.
 
There are a couple of things that can cause problems with pulling using advpath in KA. The biggest issue we found is the distance between waypoints. This is the reason we added the /record save pathname ##. This allows you to force advpath to save waypoints every ## units apart. ## would equal a number like 30 or whatever. if you DON'T use the ##, then advpath will save a waypoint when you change your heading. so it is possible to have a path made up of 2 waypoints of any distance. Lets use an example where you change your heading every 200 units and you record a path 2000 units long you will end up with around 10 waypoints. based on your Pullradius of 50 there may not be any mobs in range of the pullpath, even though there are plenty of mobs in the area.

The way KA searches for mobs is by using the individual waypoints and checking for a mobs within PullRadius from the WAYPOINT, and based on the example above the waypoints are 200 units apart so there is a lot of area between each waypoint that's not being included in the search. To fix this issue force advpath to save more waypoints along the way, by using the /record save pathname 30 and see if this helps.
 
backtracking or looping your path will also break advpath pulling. You have to make it in a line, and stop at the end, don't come back to camp.
 
Last edited:
This is not clear. Everyone tells me otherwise, I don't care, it isn't clear.

So... I tried /record save [name] 150 (just under the range of my range item) and nothing happened. So after futzin around I tried /record, ran my path, then tried the /record save [name] 150. That saved a path that shows up in /play list. Using /record by itself first I have not seen mentioned *shrug*. Give me a new avatar!

However trying /mac KA9 puller [name] 150 doesn't seem to have any effect on KA. Nor does /mac KA9 puller [name]. It does not walk the path, it pulls normal LOS like it always does without MQ2Nav. Just sayin... not clear...

Had to close the AdvPath window and re-open it for the path to show... not clear.

I can hit the play button, and it does run the path. KA does not. Should Eval be on? Loop? Do I need those settings for KA to do something? Or would they conflict? *shrug*
 
This is not clear. Everyone tells me otherwise, I don't care, it isn't clear.

So... I tried /record save [name] 150 (just under the range of my range item) and nothing happened. So after futzin around I tried /record, ran my path, then tried the /record save [name] 150. That saved a path that shows up in /play list. Using /record by itself first I have not seen mentioned *shrug*. Give me a new avatar!

However trying /mac KA9 puller [name] 150 doesn't seem to have any effect on KA. Nor does /mac KA9 puller [name]. It does not walk the path, it pulls normal LOS like it always does without MQ2Nav. Just sayin... not clear...

Had to close the AdvPath window and re-open it for the path to show... not clear.

I can hit the play button, and it does run the path. KA does not. Should Eval be on? Loop? Do I need those settings for KA to do something? Or would they conflict? *shrug*

NO! Maskoi has more than enough justification for giving you that avatar and you just keep proving it. lol.. All fun aside. What you need to do is go look at your pathing file for the zone. look at the recorded path and see how many waypoints were saved. One thing to consider is when saving the waypoints the distance may not be exactly 150, will most likely be 155, not that that will make much of a difference.

if you are going to pass the path via param use the /kissassist puller path pathname. The cleanest way to test this is to change the following in your kiss.ini file and then just use /mac ka9

Role=puller
pullpath=pathname

save the ini and go for it.

Steps for creating a path:
1. Stand in camp enter /record
2. run away from camp and at the furthest point or end of path stop and enter /record save pathname 30
3. run back to camp.
4. edit KA.ini file and change PullPath=pathname and save ini file
5. run kiss like normal.

Do not create a big circle ending the path close to where it started.
 
Will give this a shot tonight.

We were, using the GUI for all of it.

Putting in a patch name and hitting record and then creating checkpoints as we went. Then hitting save at the end of the path. Which worked to play the path and get kiss to recognize it but then to lie to me say its gonna use it, but then not. Looks like were just really bad at following directions.
 
Don't use the GUI just run the path and save it with the following command.
Rich (BB code):
/record save pathname 30
 
Like I said, it wasn't clear. I also didn't know to use the keyword 'path' in the parms. I don't like to edit the INI since there are times I need to fire it up quickly, under duress, say traveling thru hostile zones enroute to destination, and don't want to have to remember what is in each of the grp's INI. I like to keep the INI generic and when I want something else use parms.

I tested out the latest version, and since I was testing in a newbie zone (therefore not in real combat thinking) forgot I was on a mount, used pullertank, and got odd behavior. It said it would use the path, but didn't. Or, it would fire once, then cycled thru looking for close mobs. I would end it and restart it, sometimes it just stood there. Other times, if I hit a movement key, it would fire, but again, only once. It got late so I logged. I will try again with more normal settings (no mount, not pullertank). I used pullertank because I didn't want to have to bring in another toon to the newbie zone to assist. Like I said, it was just a test to see if I got the parms right, safer to do in test than trying in a real combat real content environment.

I wish I could create the path programmatically. I mean using an editor. It's not safe to run a path in a hostile zone with mobs same lvl as me until the camp/path is cleared. My luck, something respawns while creating path even if we cleared it. I would rather be able to look at the map, figure out my locs, and edit a path. Would save me from a rez...
 
I think most of the advpath testing was done in pullertank mode, so you should be fine. I would try without a mount first.
 
fyi for those needing to make a path but are worried about see invis, shroud a toon to a rogue, or log a rogue in, around lvl 60 sneak and hide and record your path and save it, then can run the same path after unshrouding. Just a protip.
 
fyi for those needing to make a path but are worried about see invis, shroud a toon to a rogue, or log a rogue in, around lvl 60 sneak and hide and record your path and save it, then can run the same path after unshrouding. Just a protip.

Badass tip! Thanks, man.
 
having the same issue, start ka with path and puller just stands there looking for close range mobs.....sometimes it says mob is OOR after targeting. trying again
 
Any one as ever been able to get this to work. i have the same issue my guy just stand in place and look for mob and keep complaining about out of range.

i did run /play name and he ran the path properly.
I tried in a few zones and all the same.
If one of you manage to get this to work mind posting some sort of tutorial :)

PS: using KA 9.07 now everything else work so far.
 
Any one as ever been able to get this to work. i have the same issue my guy just stand in place and look for mob and keep complaining about out of range.

i did run /play name and he ran the path properly.
I tried in a few zones and all the same.
If one of you manage to get this to work mind posting some sort of tutorial :)

PS: using KA 9.07 now everything else work so far.

The problem is not with MQ2AdvPath, it is most likely a setup issue within KissAssist. If the /play pathname works for you, then this plugin is working fine.
 
Any clue where to look i did try starting KA with the pullertank path name also try to hard code the value inside the ini at the proper location. i tried unloading and loading the Plugin. Any idea where i could look or anything i could try ?
 
Ok I have a wierd issue on my secondary PC. It lags when using /afollow, which I use the crap out of, but it is only does this on 2 of my 4 boxes. FPS and everything else is the same as my primary PC. I've tried CPULoad, FPS, background/foreground, but these 2 boxes always lag and it is driving me nuts. Anyone else run into this? This PC is my only troublemaker.
 
Noobhaxor,
First off I have red stick figure to reduce the load on the GUI.
As each instance appears I set the affinity to total less one. I set each new instance to the same three of the four available.

Of 0,1,2,3 I turned off 0 for all of my instances
eq affinity 161230.JPG



I do the "Invite" hotkey when all characters are online.

I then do a master setup with the following on a hotkey;
Rich (BB code):
/multiline ; /bcaa //mq2fps;/bcaa //fps on;/bcaa //fps mode absolute;/bcaa //fps 10,25
/multiline ; /bcaa //mq2viewport;/bcaa //vp on
/multiline ; /grouproles set ${Me.CleanName} 2;/grouproles set ${Me.CleanName} 3

My computer is not robust. Computing power and resources are well below average.
My typical running numbers look like this;
eq performance 161230.JPG


Also turned off Windows Defender to free up the cpu.
NOTE after the last patch this Windows Defender caused a lot of havoc.
Please see http://www.redguides.com/community/showthread.php/47557-Lag-problems-I-m-stuck
After all is said and done runs pretty smooth.

I hope that helps you.

As always,
Playbetter
 
BUG: MQ2AdvPath upon /play mypath will emulate /keypress forward hold behavior

That is MQ2AdvPath will go whichever direction you were facing and will not get to play the actual path.

You can see the path in the map as always, but MQ2AdvPath does not get to play the path because it is running into the wall.


Worst of it, it does not happen to all the characters thus the Heisenbug!

I can load up 4 characters and 1st and 4th will work fine and 2nd and 3rd will have this keypress hold down bug.

I am continuing testing but computer does not seem to matter, server does not seem to matter, class does not seem to matter.

Path does not seem to matter.

Zone does not seem to matter.

/unloading /loading does not seem to matter either

EDIT: Freaking mounts matter! http://www.macroquest2.com/phpBB3/viewtopic.php?f=31&t=16483&p=174216&hilit=MQ2AdvPath#p174216

No mount, no problem... well at least I can implement a workaround :)
 
Yea I noticed this yesterday too - I usually don't use mounts in EQ since their controls/mechanics are worse than anything I could imagine off the top of my head in video games.

Sadly you're kinda bad if you don't use mounts on the TLPs - so im sure many will be dealing with this bug. Hopefully that means it gets fixed soon!
 
Thanks for the post! I was going crazy trying to figure out why just my cleric had the need to wander off into the sunset.
 
When I record a path to use for Pulling, does the pull radius in Kiss assist still determine the radius for the recorded path? Or is there a parameter I need to use when I save the path?
I'm trying to set up a couple of pull paths in dungeons, but my puller keeps targeting mobs that are technically closer but they're through a wall/in another room Etc.

ideally, I'd like to have it so the radius is so small that the polar walks the path that only pulls the mobs that are basically right on it
 
The next version of kiss will allow you to better control that. The puller checks from the waypoints along the path finding mobs in ${PullRange}. You can tweak this in the SetPullRange Sub.

We have added a variable in the ini pull section, that will let you change this and not have to change the macro.
 
The next version of kiss will allow you to better control that. The puller checks from the waypoints along the path finding mobs in ${PullRange}. You can tweak this in the SetPullRange Sub.

We have added a variable in the ini pull section, that will let you change this and not have to change the macro.

So until the next KA I'll hAve to tweak the setpullrange sub? Is that in the main KA macro?
 
MQ2AdvPath - This plugin allows you to record and playback player movement, and follow more precisely

Commands:
/afollow [on|off] [slow|fast]
/afollow pause
/afollow unpause
/afollow spawn # [slow|fast]
/afollow [slow|fast] - default=fast.

/play [PathName|off] [slow|fast] [smart] [pause|unpause] - default=fast.
/play list - show paths in current zone. Added by Sym
/record
/record save <Name> ## (## is optional. Is used to save checkpoints at ## distance apart.)...

Read more about this resource...
 
Can something be done about warp detection and new bard speeds? My group constantly stops afollow due to "warp detection" on the bard, whom they're all following. The change to selos AA with ToV increased our run speed to the highest available song and it's been triggering MQ2's warp detection code ever since.
 
Redbot updated MQ2AdvPath with a new update entry:

Partial Code Cleanup

knightly:
  • Replaced all angels with angles, no more angels :(
  • Remove using namespace std;
  • Replace #define for constants
  • Replace NULL macro with appropriate constant
  • Removed end of line white space
  • Removed unused variables

alynel:
  • Switched to GetTickCount64
  • Replaced char* with const char* where appropriate
  • Fix InFront function Angle redeclaration
  • Update ReplaceWayPointWith to not change input
  • Fix return on string function
  • Output to...

Read the rest of this update entry...
 
This latest update seems to be causing several issues. Is anyone else having an issue with it? Is mq2nav recommended instead?

Characters following will veer off left and right repeatedly which means they are not directly following my path and so fall off ledges all the time now. Because they are not following my path it means characters are not able to keep up with my leader and seem to jump around strangely instead of following the direct path.

Not sure if it is an older zone problem but I also now have followers that are sometimes skipping past zone lines without moving to the next zone.
 
A minor point as well but the 'Output to chat if directory couldn't be created' change means that the plugin will now always trigger an error when it loads complaining it cannot create the directory, even when the directory already exists.
 
Apologies for the trouble. After testing with an older copy of the module and not seeing a difference, it seems like the issue was down to a problem that had set my background fps lower than normal. This caused the inconsistency in pathing and the above issues.
 
Plugin - MQ2AdvPath

Users who are viewing this thread

Back
Top