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

Question - MQ2Nav -- pass path to macro? (1 Viewer)

joojoobee

A Member to Remember
Joined
May 15, 2016
RedCents
4,237¢
I have been away for several months, and I recall asking this question before, but never answered to my knowledge.

Was a way ever created by Brainiac to pass the PATH the puller is about to run back to the macro? The reason I ask is that in Kissassist, in the _info file for mobs to pull... if there is a MOB on the way to the target one could aggro that target accidentally.

I would like to get the path to check MOBs nearby the path to pull (or mez) first. Much of the base code is actually in Kissassist. It just needs to be repurposed (which I would like to do). If people recall, I wrote the small piece that reordered the mob pull list according to pathlength... so this will be pretty straightforward to do (famous last words! :) ).

JJB
 
Based on your existing code it -should- get the mob with the shortest pull path, which would drastically reduce the chance of this occuring in the first place. However, in my pull.mac that I use personally I have it set to return to camp in the event I have an XTarget (be it I gain aggro myself, or the group gains aggro). While not the answer you were looking for I do hope it aquires the same expected results. Alternately, while on your pull path you could have a new radius check for mez/lull targets using ${NearestSpawn[1,npc radius ## Zradius ## noalert # los].Distance} < ${Spell[mezspell].Range} type situation then break out of the loop. and target the same NearestSpawn String, cast the spell.

Rich (BB code):
| --------------------------------------------------------------------------------------------
| SUB: TargetShortest
| --------------------------------------------------------------------------------------------
Sub TargetShortest
	/declare PullTargetID int local 0
	/declare TargetDistance[20] int local 0
	/declare Shortest
	/squelch /target clear




	/if (!${Me.XTarget[1].ID}) {
		/declare i int local 0
		/for i 1 to 20
			/if (${NearestSpawn[${i},npc noalert 1 radius ${PullRange} zradius ${ZRange}].Name.NotEqual[NULL]}) {
				/declare Target${i}ID int local 0
				/if (${Navigation.PathExists[id ${NearestSpawn[${i},npc noalert 1 radius ${PullRange} zradius ${ZRange}].ID}]}) {
					/varset TargetDistance[${i}] ${Int[${Navigation.PathLength[id ${NearestSpawn[${i},npc noalert 1 radius ${PullRange} zradius ${ZRange}].ID}]}]}
					/varset Target${i}ID ${NearestSpawn[${i},npc noalert 1 radius ${PullRange} zradius ${ZRange}].ID}
				} else {
					/varset TargetDistance[${i}] 500000
				}


				/if (${i}==1) {
					/varset PullTargetID ${Target${i}ID}
					/varset Shortest ${TargetDistance[${i}]}
					/continue
				}
				/echo (${TargetDistance[${i}]} < ${Shortest})
				/if (${TargetDistance[${i}]} < ${Shortest}) {
					/varset PullTargetID ${Target${i}ID}
					/varset Shortest ${TargetDistance[${i}]}
					/echo Closest Target is now ${Spawn[id ${Target${i}ID}].Name}
				}
			}
		/next i
		/target id ${PullTargetID}
		/delay 2s ${Target.ID}
		/if (!${Target.ID} || !${PullTargetID}) {
			/if (${UseMQ2Nav}) {
				/call TargetShortest
			} else {
				/call TargetNPC
			}
		} else /if (!${Target.Type.Equal[NPC]}) {
			/squelch /target clear
			/if (${UseMQ2Nav}) {
				/call TargetShortest
			} else {
				/call TargetNPC
			}
		}
		/if (${PullTargetID}) /call ${getMob}
	} else	/if (!${Target.ID} || ${Target.Type.Equal[corpse]}) {
		/target id ${Me.XTarget[1].ID}
		/if (!${Target.Type.Equal[corpse]} && !${Target.Type.Equal[NULL]}) {
			/delay 2s ${Target.ID}
			/echo \arHandling Add, ${Target.Name}
			/call ${returnWait}
		}
		/if (${UseMQ2Nav}) {
			/call TargetShortest
		} else {
			/call TargetNPC
		}
	}


/return

Above is the code I use for selecting a target.
And below is the code I use to determine if I should stay inside the wait loop while navigating to the target.


Rich (BB code):
:GettingMobNav
	/if (${Navigation.Active} && ${Target.ID} && ${Target.Type.Equal[NPC]} && ${Target.Distance} > ${Me.MaxRange} && !${Me.XTarget[1]}) {
		/delay 5
		/goto :GettingMobNav

While I realize that the wait loop is pretty premitive compared to a macro like KA, I like to keep my situations pretty premitive.
In this case if I get an XTarget then it breaks the wait and moves to the "getMob" sub. You could add the check in that bit where it searches for a spawn within xx radius/zradius based on expected aggro range to allow you to cast the pacify/mez spell.

Alternately you could check ${NearestSpawn[1,npc a;sldkfjas].Heading} and compare it to your heading. While not all inclusive using that method (because the nav path could turn) it would be somewhat helpful to detection. IE: /if (${Math.Calc[${NearestSpawn[1, npc radius 70 zradius 70 noalert #].Heading}-${Me.Heading}]} I'm pretty sure there is an option for range between to check an arc in front of you.

If you're into calculus you could check if the mob is moving, and if so check their speed versus your heading and speed and see if the path will intersect etc.

As far as a way to pass the path's checkpoints from nav, not that I'm aware of.
 
Problem is with using the PULL script if you are trying to pull certain MOBs (Kissassist_INFO file)... that is where it screws up. It blows past mobs that might not be aggro when you run past them, but they build a train on the way back. Reason is I am trying to "force" the puller to pull placeholders (or the Named).

I will see how I can integrate your stuff with the Kissassist pull... Or maybe wrap it into auto_war! So thanks for that...

But, basically, having the path points for the run from Nav would let me "check ahead" to see if there was anything along the way. Calculus and trig is no problem once I get the path

JJB
 
I think perhaps I'm over explaining and could just point my finger at what I believe is the answer. Just make KA stop going to get that certain mob the second you have an XTarget make it break out of the wait loop and call the return loop. Make sure you of course make it switch from your current target to /target id ${Me.XTarget[1].ID . Then it'll pull everything between your camp and the target mob.
 
I think perhaps I'm over explaining and could just point my finger at what I believe is the answer. Just make KA stop going to get that certain mob the second you have an XTarget make it break out of the wait loop and call the return loop. Make sure you of course make it switch from your current target to /target id ${Me.XTarget[1].ID . Then it'll pull everything between your camp and the target mob.

I understand perfectly! Thanks for that idea. Easy to implement.

One of the other things I wanted to build for pulling complex groups (where 2 or 3 will aggro) would be to have the Bard of Enchanter run along with the puller and calm or enchant one of the nearby mobs before the pull. Or just enchant several with 'wave', and then have the puller pull. Of course, the 'chanter would be a target in that case so maybe just doing a "calm" is best.
 
This could obviously bit a lot more complicated to code. Bards don't require line of sight to pacify, nor do any class that pacifies if I'm still up to date on my EQ stuff (which is unlikely lol). So getting the cast range for the pacify song/spell and pacifying everything in an X radius around the target using a 2d distance for x y locations wouldn't be super hard to implement I don't guess. Though I haven't tried so I might be overstating myself.

Dist(p1, p2) = SqrRt((x1-x2)^2 + (y1-y2)^2)
Which I believe is the same as the Hypotenuse. A^2 + B^2 = C^2 followed of course by getting the Sqrt of C^2.

This is of course assuming their isn't a built in method for checking the distance of creatures in a radius around a set location. I feel there should be if there isn't, but even still.

Once you have your target ${Spawn[${TheTargetIWant}].X} ${Spawn[${TheTargetIWant}].Y}
Then check the radius around them using some other fun calculations like that of a circle with a set omega value (distance from center??) to calculate the circle around them. Then if a spawn falls in the RangeBetween then target and pacify them.
 
You can do a ${SpawnCount[loc ${Spawn[${PullID}].X} ${Spawn[${PullID}].Y} radius 50 npc]} to find out how many mobs are around the Pull target, and then use ${NearestSpawn[${i}, npc loc ${Spawn[${PullID}].X} ${Spawn[${PullID}].Y].ID} where you loop ${i} for the spawn count and paci each spawn ID

Then you just need to loop around the spawn count for your potential adds and cast pacify, obviously can become much more elaborate very quickly allowing to paci resists / add in check to avoid the PullID

I am sure this is how devestators macros used to do it, if you dig up his pull.inc since it was all released. His code should still work given almost all his code was written to work almost on the most basic MQ2 functionality
 
I've been personally heading up the repair of his macros and I can asure you the majority of his code was broken when I received it. His pull routines are messed up and distance pulling had to be fixed. Now in addition to that I have several classes that get stuck in the "combat" state for his own predefined aggro checks that aren't turning it off. I haven't really had time to put any effort into it as I've began classes again but I do enjoy the occasional back and forth on the forums when able.
 
Did any of this get integrated into KissAssist. I'm trying to have a Bard pull but have found since the bard is on mez duty it looks like if it gets 2+ while pulling it just stays out there trying to mez. A couple of these options would help significantly, returning to camp if there is agro before reaching the target to pull, also doing a pacify on nearby targets to the intended pull.

If any of this is in already, any tips on how to set it up?
 
To my knowledge none of this was implemented. Ctaylor and Maskoi work with development of KA and anything joojoobee does that isn't specifically approved by one of the latter wouldn't make it into the public build. I believe this was intended to be part of a private copy of the KA macro and not something intended for public release.

With that said I have been wrong before. Kissassist 11 was just pushed and I haven't been keeping up with the changes to be perfectly honest.
 
Not sure about all those changes either, but you could see eqmule's modded version of KA (kissassist1004e15.mac which is included in the RedGuides updates if you subscribe). It does have the ability for the puller to use calm/pacify as a UseCalm puller ini option.


  • UseCalm and CalmWith added to the [Pull] Section so that feature will actually work now... sorry...
    Note that this feature is for ae type calm spells, if you put a single target calm spell in there, your mileage may vary since it will only cast it on the mob closest to who you are about to pull.

My default KA puller does recognize if he gets aggro on the way to a pull. He'll target the mob he wants to pull, run to it and if he bumps something else and it appears on extended target, he'll turn around and just bring that aggro'd mob back.

While not part of KA, there is also a puller routine mod code from user joojoobee (who asked the original question in this thread) that will do some advanced pulling options like try to pull <2 mobs or FD out if it pulls 4+.
 
would it be possible to guesstimate your path, say 15feet ahead of you, check for mobs in 50 feet range of that not on your attention list, if so, target them check for con, if they ready to attack, assuyme they will aggro, and say aight, we stop our movement, and pick that target instead and then run back to camp.
 
I agree... that would help. I've been thinking of a couple of ways. Including first with the fact that MQ2Nav often runs the puller right up on top of the mob. Then it casts. Probably 1/2 of my deaths occur from that alone.

I've tried a ton of ways to try to stop the Nav from getting up that close-- including trying a /nav stop at 15 feet... But it seems the targeting and distance doesn't update fast enough and the nav still goes to the mob's exact location. So, my first implementation this weekend will be to compute a circle around the mob at diameter 30feet... Check for mobs, run to one of those places, see if LOS to target... if not move around circle diameter until so... then calm/pull.

Issues with this of course are Z height to compute circle. On hills this can cause problems. There might be a perfectly acceptable vantage to pull from, but you would get an error from MQ2Nav for a pathlength trying to get there.

So-- thinking it through still.

JJB
 
Question - MQ2Nav -- pass path to macro?

Users who are viewing this thread

Back
Top