/Walkto <zone> command

Macro requests from before the user variable changes that broke all macros

Moderator: MacroQuest Developers

Is this idea interesting?

yes
20
77%
no
6
23%
 
Total votes: 26

Shin Noir
a ghoul
a ghoul
Posts: 90
Joined: Tue Aug 05, 2003 8:18 pm

/Walkto <zone> command

Post by Shin Noir » Fri Aug 08, 2003 3:51 am

Ok, this has been a thought of mine for a while. It'd be a big task, and I'm not sure if anyone else has attempted to this to any extent, but to do what I keep thinking about it'd most likely require a recompile of MQ's core just to make the command work. (Meaning, you couldn't just make a simple *.mac to go as far as I want it to)

What I want is, literally: A /walkto command. It would have features such as..

1) Deducing the fastest route from your current location to your destination. You want to go from Soldungeon B to KaladimB? No problem! Your quickest route would be .. <calculate> SoldungeonB=>Lavastorm=>Neriak=>PoK=>ButcherBlock=>KaladimA=>KaladimB.

2) Handling KOS mobs. Probably the best route of doing this is having a couple flags to it. One is to have an extra syntax such as /walkto NKarana avoid, where avoid would make MQ literally avoid NPC's in the way that are aggressive while walking over. The other would be to simply keep running away (or attacking the NPC) if a creature attacks them!

3) Point to Point calculation. Since most zones have too many obsticles in the way there would need to be a very small AI formula dedicated to figuring out how to avoid all objects in EQ (Not to mention calculate where to move to go up the Z axis in some zones like stairs or floors). Since EQ doesn't change too much, this is pretty possible through C coding and a stored mapping system telling MQ where it can and cannot go to.

4) Event handling. Clicking doors and triggering objects to zone would be needed obviously.

There's some more things it'd obvliously need but I won't go into that just yet. I'm really considering starting this up if I can get these questions answered about it in my head:

Would anyone use it? (I'm curious if the effort would be worth it and supported by the community)

Is it against what Macroquest stands for? (I don't think it's enough by itself to be considered an AFK tool, in fact it's more a lazy tool for someone who has gone X route way too many times and wants it automated while they chat!)

Some other questions I'll ask later, feel free to bring light on this topic and tell me your thoughts.

EqMule
Developer
Developer
Posts: 2697
Joined: Fri Jan 03, 2003 9:57 pm
Contact:

Re: /Walkto <zone> command

Post by EqMule » Fri Aug 08, 2003 5:40 am

Shin Noir wrote:Would anyone use it? (I'm curious if the effort would be worth it and supported by the community)
I think alot of people, me included would use it.
Shin Noir wrote:
Is it against what Macroquest stands for?
Does Macroquest stand for something? I didnt know, I thought it was open source, and anyone was free to mod it in any fashion, they liked... at least thats what I have done... I see a feature I need for my personal gaming experiance, I add it(if I can) and sometimes my code even makes it to the cvs... maybe yours will to, and if not, just post it on the board so the people who do want to use it, can.
My status o/
If you like MQ2 and would like to contribute, please do. My goal is 25 donations per month.
So far I've received Image donations for this month's patches.

Bitcoin: 1Aq8ackjQ4f7AUvbUL7BE6oPfT8PmNP4Zq
Krono: PM me.
I can always use characters for testing, PM me if you can donate one.

Shin Noir
a ghoul
a ghoul
Posts: 90
Joined: Tue Aug 05, 2003 8:18 pm

Post by Shin Noir » Fri Aug 08, 2003 6:37 am

well put.

I have a small paranoia of getting flamed for an idea if it invokes insane amounts of botting... I'd post a bazillion ideas/scripts if it wasn't for that :P

Doodman
a ghoul
a ghoul
Posts: 124
Joined: Thu Jan 02, 2003 12:07 pm

Post by Doodman » Fri Aug 08, 2003 12:19 pm

It would be a lot of work.

Plus, this could be done with straight macros. There are macros/commands to go to a point, to avoid obstacles, to handle if you get attacked, to read entries from an INI file, etc.

These are perfect building blocks to make a macro to do this. Again, it would take a lot of work and a lot of investigation. Climbing stairs, etc could be accomplished with just series of goto x.y commands

Take claiming up the tower to PoG. You just need to:
1) move to the x,y location that is the door way to the tower.
2) move to x,y that is just inside.
3) A series of move x,x command to walk up the circular tower.
4) /move to a x,y that is near the stone on the top
5) /face x,y to face the stone
6) /click left x y to click on the stone.

Ba da bing, welcome to PoG. Similar things could be done with stairs, bridges (including "invisible" bridges), doors, etc.

I'd suggest defining an "entrance" point for entering each zone inside a certain zone. First you run to there and the execute the "gotozone" code for that zone (see the PoG example above).

No custom MQ stuff should be needed.

You'd have to "weight" the paths correctly to determine fastest vs shortest vs safest.

It might also include porting if you were a porting class. i.e. A melee class going from PoK to PoG would need to go PoK -> GD -> EW -> Kael -> WL -> PoG, but a druid/wiz could PoK->WL->PoG. It could also take into account a casters bind spot and/or egress/succor

It might also need to be configurable for which keys/flags you have.

It might also need to take care of invis, sneak, etc.

A lot of work and things to add to it if needed, but the point is. MQ can do this today.

Shin Noir
a ghoul
a ghoul
Posts: 90
Joined: Tue Aug 05, 2003 8:18 pm

Post by Shin Noir » Fri Aug 08, 2003 5:26 pm

Yea, doodman. When I first thought about this I was thinking about doing the script way. The problem with that suggestion is: Let's say I'm in Skyshrine. I'm up in the middle of the Hallway no where in specific. If I triggered your macro there to go to x,y of whatever the nearest zone out is, it'd have to know your current loc and find the nearest noteworthy loc, which would be a shit load of locs to move inside such a complex dungeon. Same with SolB, or any other dungeon that isn't open at that. It limits the macro a lot because you couldn't trigger it at ANY starting point, ONLY at open areas with no major walls\obsticles from you to the next point listed. It would be a lot easier to me I think to do with a plotter program, plotting out different areas in a X Y Z as "walkable" and "Not walkable". Ex.

x=not walkable
blank = walkable

Code: Select all

xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx              =>exit wanted
xxxxxxxxxxxxxxxx    xxxxxx
xxxxxxxxxxxxxxxx        xxxx
xxxxxxxxxxxxxxxxxxx   xxxx
xxxxxxxO                     xxxx
xxxxxxxxx   xxxxxxxxxxxxxx
xxxxxxxxx   xxxxxxxxxxxxxx
xxxxxxx          xxxxxxxxxxx
xxxxxxx    xx   xxxxxxxxxxx
xxxxxxx    xx   xxxxxxxxxxx
You start at point "O", you couldn't just say "Go to X,Y location that is the exit to the zone". You'd have to plot every single X,Y corner of the map and deduce from your current location to your destination what the nearest X,Y position needed. I've never seen a macro script load in an entire map plotter into a 3 multi-dimensional array to represet every single X,Y,Z location of EQ (and coord) (Would be pretty big in some zones) then from any location be able to deduce your nearest point of interest to get to the zone out. It to me sounds like 10x the work if you had to do in scripting unless you scratched the very feature I'd like to see in the first place.

What you could do instead is simply write some code in C to load a custom drawn *.rte file (specially customized where you grab an existing map of the world, then filled in unwalkable areas in black so the program can understand that it cannot go there) then plot out an entire zone to write your route out. If we did this the chances of the /walkto command getting stuck is a lot lower then.

But in the case that I can't get what I posted above to work, I may be ghetto and just start plotting out a basic X,Y point 1 to 2 map and hopefully get some help while doing this.

Doodman
a ghoul
a ghoul
Posts: 124
Joined: Thu Jan 02, 2003 12:07 pm

Post by Doodman » Sat Aug 09, 2003 9:18 am

True, but by the time all the zones were mapped out, no one would be playing EQ anymore or remember what it even was. :lol:

I was looking for a solution that would work in most situations with the tools as they we have today.

No trying to be a nay-sayer as your solution would be wonderful, but it involves remapping every zone in the game and using pretty complex path finding algorithms.

BrainDozer
a lesser mummy
a lesser mummy
Posts: 45
Joined: Sun Aug 03, 2003 2:10 pm

Post by BrainDozer » Mon Aug 11, 2003 12:25 am

If you’re really interested in a project like this, I’ll unload some ideas that I’ve had about a related project pertaining to zone navigation.

All object coordinate data can be extracted from EQ zone data files. Although it may not be perfect and depending on your approach, pathing similar to mob pathing can be machine generated using this coordinate information. Then you would need to load the pathing data and use a shortest path algorithm with a fuzzy set steering algorithm for navigation.

Even a scripting approach appears doable. But it isn’t trivial. Honestly, I can’t afford to lose more hair thinking about it.

User avatar
Coraz
a lesser mummy
a lesser mummy
Posts: 41
Joined: Mon Sep 09, 2002 11:24 pm

Post by Coraz » Sun Aug 24, 2003 7:06 am

Isn't it "dangerous" to zone with an active macro? Is that a thing of the past or just a myth?

User avatar
Imperfect
Macro Author
Macro Author
Posts: 319
Joined: Fri Jun 14, 2002 1:52 am

Post by Imperfect » Sun Aug 24, 2003 11:47 am

Myth although it was an issue at one time.

Consilium
Contributing Member
Contributing Member
Posts: 100
Joined: Wed Oct 02, 2002 10:42 pm

zoning with mq active

Post by Consilium » Sun Aug 24, 2003 2:51 pm

Aye I remember hearing stories of people loosing items et cetera when they would zone with MQ running. But recently I notice when I get disconnected it could be for hours and I will reconnect and the macro attempts to pick up where it left off. Everytime though nothing missing and no problems. I guess I could make a macro with a disconnect event that then deletes all your items on your char when you reconnect lol so it is possible for the scripts to do that.
-SH
+Student
digitalsavior.com

Bilge
decaying skeleton
decaying skeleton
Posts: 8
Joined: Fri Jan 10, 2003 3:01 am

Oh lord, where can I walk in this zone ?

Post by Bilge » Tue Sep 16, 2003 6:47 am

I'm back from hollydays, and I just read this thread.

I think I have an idea on how to determine where it is walkable in a zone :

How do you know where you can walk when you're walking in the snow ?
You walk using the foot steps people left in the snow when they walked before you...

So....

Code a function inside Macroquest that records every locations of every spawn inside the current zone lets say... every second. (And code it wisely so it doesn't slow down EQ nor MQ)
Just record X, Y and Z coords.

Enter a zone, launch your function, play while it records where mobs, players walk. Or while you're sleeping, connect a dummy character in a zone for a long time and wait for people / mobs to write your paths accross the zone... Oh wait don't use MQ while AFK, it's bad.

If you're afraid of having a too big file, use approximation to erase quite similar locations, have a sorting routine to make it faster.

Organize the data you collected in a way you can actually use it...

You could... create a file for each zone.
Make it linear short integers, and of the size of the zone...
Ex : Unrest would be (for example) 1200x560
You would have a file of 1200*560*2 = 1 344 000 bytes (ouch)
If an x,y loc isn't walkable, record it as being (max short int)
if it is walkable, record it as being height (z)
Since the file is big, like 1.2 Mb, you'll probably use zlib to
compress the file, the non_walkable locs will compress good.

You could calculate distances between locs and bresenham
algorythm to trace lines between them if they are pretty close,
so that you can recover the information you lost between each seconds
of loc polling...

To make files smaller you could even use approximation to lower the information resolution, if it's still enough for you.

Bah maybe i'll try it if I have some spare time.

Nanan
orc pawn
orc pawn
Posts: 29
Joined: Wed Jun 25, 2003 6:21 pm

Post by Nanan » Tue Sep 16, 2003 4:57 pm

Um to map out a walking path you could use the ingame map and add a path for every zone line.

Bilge
decaying skeleton
decaying skeleton
Posts: 8
Joined: Fri Jan 10, 2003 3:01 am

yup

Post by Bilge » Thu Sep 18, 2003 3:56 am

Errr, yup, it's the simpliest way, if you're patient enough to do it =)

But i prefer a program working on finding paths on a map while i'm playing EQ =)


Bilge


quote

User avatar
Curious
a ghoul
a ghoul
Posts: 88
Joined: Wed Aug 27, 2003 5:19 am

Re: Oh lord, where can I walk in this zone ?

Post by Curious » Thu Sep 18, 2003 7:16 am

Bilge wrote:...You could calculate distances between locs and bresenham
algorythm to trace lines between them if they are pretty close...
Would this cause a problem around walls where you can walk on both sides? Seems like your map would have to have a very good resolution to detect a simple wall :(

Bilge
decaying skeleton
decaying skeleton
Posts: 8
Joined: Fri Jan 10, 2003 3:01 am

Bilge

Post by Bilge » Thu Nov 20, 2003 5:24 am

Oh right, then you can use stats to determine the most used path: some paths are used more than some other paths.

On a map, some spots are walked a lot on, some other spots are rarely walked on.

Of course, some coords in your map data grid will be 'walked on' more than some others...

To determine the 'best' way, you can decide that the most common path is the best one.

This would 'only' require to increment a value for each coord in your grid each time someone walks on it.

Algorithm would probably look like this :
1) clean the map by finding :
- the Highest 'walked on' value
- the Average 'walked on' value
Use these to eliminate the insignificant 'walked on' coords.
You can tune this by lowering or augmenting the elimination percentage...
(and you could prolly make it better by using probability and statistics formulae)

2) find the Most 'walked on' coord in whole map and start from there
3) find the closest coord with similar 'walked on' value in a limited Range
4) calculate the average between the 2 spots, fill your data grid between the 2 coords with this average value (making a line in a grid, you can even interpolate the values instead of just using average value if you want, this could help when you'll want to dissociate different pathes, starting from any coord in the map)
5) go to 2) untill you can't find a sufficient 'walked on' value close to the last one.

6) you'll prolly finish with a nice map filled with pathes. If you don't, you can tweak the elimination percentage, the Range, or the way you eliminate insignificant values.

I think that even a thin wall can be easily avoided this way.
I trust people for not liking running too close to walls, usually.