doom0791
2011-01-23 19:30:35
I just came up with an idea for universal mapwalking. I'm considering writing the functions, but I want some input from more experienced RuneScape scripters.
Basically, grid the map off into an array of 15-Tile squares of the playable area. Now create a separate array of the squares that contain key locations (IE: Varrock East Bank, Falador west bank, Port Sarim, etc., etc.). Now write an algorithm to calculate the fastest path to those key locations.
I say 15-tile squares because the mini-map in game reaches out 18-tiles in each direction, this would allow for the tile randomization while walking.
I know this project is possible (There's a similar algorithm in RuneScape for just walking in general), but what I want to know is if it would be practical to write as a script for RuneScape and if not, why? This would allow you to resume autoing if your script failed a random that teleports you to a random location, and would also allow for higher-quality anti-ban.
Suggestions or comments?
Harry
2011-01-23 19:39:06
It might be cool if you have it use the lumby home teleport, then walk back to whatever location.
Problem is, you get 15 minute teleport penalized when failing a random. Most of the time when you fail, you get teleported to a top of a high building, so walking back from there would be very difficult.
mormonman
2011-01-23 19:39:56
From: Harry
It might be cool if you have it use the lumby home teleport, then walk back to whatever location.
Problem is, you get 15 minute teleport penalized when failing a random. Most of the time when you fail, you get teleported to a top of a high building, so walking back from there would be very difficult.
The actual walking back wouldn't be too hard, but hard coding all of the values for those places would be a pain in the ass.
doom0791
2011-01-23 19:50:40
From: Harry
It might be cool if you have it use the lumby home teleport, then walk back to whatever location.
Problem is, you get 15 minute teleport penalized when failing a random. Most of the time when you fail, you get teleported to a top of a high building, so walking back from there would be very difficult.
Didn't know it teleported you to the tops of buildings. The worst place I've been teleported (though I haven't failed many teleporting randoms) is the wizard's tower.
From: mormonman
The actual walking back wouldn't be too hard, but hard coding all of the values for those places would be a pain in the ass.
Yeah, I figured it'd be a tedious process, but since RuneScape tile locations don't change it might be worth it to do so. This would make the script-writing process quite a bit faster. :)
Maybe for a start I'll go ahead and code the free-world into it first? I don't have a members' account so coding the members' world will be a bit more difficult for me :). Maybe we can create a copy of the map that you can zoom in on and find tile locations from it?
Capricorn
2011-01-23 19:51:54
From: mormonman
The actual walking back wouldn't be too hard, but hard coding all of the values for those places would be a pain in the ass.
Considering the path maker in reflection doesn't work with the offsets (does anybody have the correct one)
Someone would have to walk around and collect a bunch of paths.
doom0791
2011-01-23 19:57:03
From: Capricorn
Considering the path maker in reflection doesn't work with the offsets (does anybody have the correct one)
Someone would have to walk around and collect a bunch of paths.
Writing algorithms to calculate any path shouldn't be too difficult, if you have an array of all of tiles in the playable area. The hardest part would probably be around areas like north-falador where the mountain blocks you, or lumbridge castle/swamp where you're blocked by walls and fences. In which case, you could probably split the array up into regions and have it set up so that you can only travel from region to region at specific spots.
From: Capricorn
Considering the path maker in reflection doesn't work with the offsets (does anybody have the correct one)
Someone would have to walk around and collect a bunch of paths.
AFAIK, the correct ones are in the ReadMe file with the pathmaker.
doom0791
2011-01-23 20:34:36
From: Hobbit
Webwalker?
http://villavu.com/forum/showthread.php?t=61663
That's the general idea, yes; however, it seems a webwalker would mean you have to walk to the "web" in order to walk. What I'm thinking is you'd be able to walk to any key location from (almost) any point in the playable area.
Train
2011-01-23 20:42:52
From: doom0791
That's the general idea, yes; however, it seems a webwalker would mean you have to walk to the "web" in order to walk. What I'm thinking is you'd be able to walk to any key location from (almost) any point in the playable area.
It walks from any point it knows to any other point it knows.
You can't make your idea of a web walker without knowing what or where it is, so your answer is here:
http://villavu.com/forum/showthread.php?t=61663.
doom0791
2011-01-23 20:52:38
From: Train
It walks from any point it knows to any other point it knows.
You can't make your idea of a web walker without knowing what or where it is, so your answer is here: http://villavu.com/forum/showthread.php?t=61663.
Yes, I read the post when Hobbit posted your link. My point was that, according to what you said in your post, the webwalker walks from any point that is programmed to it, to any other point that is programmed to it.
I apologize if you think I'm "taking" your idea - I honestly didn't even see that post before Hobbit posted here with the link. And if you didn't get it from my above posts, I'm considering creating a grid of the entire playable area and and then writing algorithms to walk from wherever you are (mostlikely using GetMe.Tile) to wherever you want to go.
3Garrett3
2011-01-23 21:04:40
I like the idea of having two options. Because then both people will strive to have the better one, and both will become (in theory) very good. :)
Boreas
2011-01-23 21:21:29
Since early 2007, I've always considered a webwalker to be like this:
A number of nodes, some of which are endpoint nodes, some are merely crossroads and corners etc.
Each node is connected to a number of certain other nodes (neighbor nodes).
Your start tile does not need to be a node. Your start node is the closest one to your start tile. You get from your start tile to your start node with random clicks heading in that direction.
Your destination tile does not need to be a node. Your destination node is the closest one to your destination tile. You get from your destination node to your destination tile with random clicks heading in that direction.
A node can be a tile, or a box of tiles.
The main part of the webwalker is an A* (A star) algorithm, or a Dijkstra algorithm, that choose the best sequence of nodes to go between your start node and destination node.
The connections between nodes can be a path of tiles (with randomness), or you can random click tiles heading in that direction if two nodes are within line of sight of each other. If you make the neighbor nodes close enough to each other so that there is a line of sight of walkable tiles, you don't need to define a path of tiles between each node. You just need nodes at crossroads, corners, doors, etc.
Nodes can have other attributes, such as minimum combat levels, and actions to take such as opening a gate or taking a boat. If you don't meet the required money/levels for these nodes, they are set to false before running through the algorithm.
I'll say this part again: You don't need to have each tile you click to be a node. You can just make random clicks heading towards the next node. You don't need to have nodes within minimap radius of each other. They can be further away from each other as long as is a clear line of walkable tiles between them. This means you will need less nodes in the web, and the algorithm will run faster. If you chose the nodes this way, you don't need to store a map and calculate around walkable tiles during runtime.
Train
2011-01-23 21:23:46
From: Boreas
Since early 2007, I've always considered a webwalker to be like this:
A number of nodes, some of which are endpoint nodes, some are merely crossroads and corners etc.
Each node is connected to a number of certain other nodes (neighbor nodes).
Your start tile does not need to be a node. Your start node is the closest one to your start tile. You get from your start tile to your start node with random clicks heading in that direction.
Your destination tile does not need to be a node. Your destination node is the closest one to your destination tile. You get from your destination node to your destination tile with random clicks heading in that direction.
A node can be a tile, or a box of tiles.
The main part of the webwalker is an A* (A star) algorithm, or a Dijkstra algorithm, that choose the best sequence of nodes to go between your start node and destination node.
The connections between nodes can be a path of tiles (with randomness), or you can random click tiles heading in that direction if two nodes are within line of sight of each other. If you make the neighbor nodes close enough to each other so that there is a line of sight of walkable tiles, you don't need to define a path of tiles between each node. You just need nodes at crossroads, corners, doors, etc.
Nodes can have other attributes, such as minimum combat levels, and actions to take such as opening a gate or taking a boat. If you don't meet the required money/levels for these nodes, they are set to false before running through the algorithm.
I'll say this part again: You don't need to have each tile you click to be a node. You can just make random clicks heading towards the next node. You don't need to have nodes within minimap radius of each other. They can be further away from each other as long as is a clear line of walkable tiles between them. This means you will need less nodes in the web, and the algorithm will run faster.
This is exactly how mine works.
n3ss3s
2011-01-23 22:18:19
From: doom0791
I just came up with an idea for universal mapwalking. I'm considering writing the functions, but I want some input from more experienced RuneScape scripters.
Basically, grid the map off into an array of 15-Tile squares of the playable area. Now create a separate array of the squares that contain key locations (IE: Varrock East Bank, Falador west bank, Port Sarim, etc., etc.). Now write an algorithm to calculate the fastest path to those key locations.
I say 15-tile squares because the mini-map in game reaches out 18-tiles in each direction, this would allow for the tile randomization while walking.
I know this project is possible (There's a similar algorithm in RuneScape for just walking in general), but what I want to know is if it would be practical to write as a script for RuneScape and if not, why? This would allow you to resume autoing if your script failed a random that teleports you to a random location, and would also allow for higher-quality anti-ban.
Suggestions or comments?
iBot has had one of these since what, 2006 :p
Boreas
2011-01-23 22:34:29
From: n3ss3s
iBot has had one of these since what, 2006 :p
If you mean aryanweb, I believe it was a few months after I posted about it there in early 2007.
Train
2011-01-23 22:55:57
From: Boreas
If you mean aryanweb, I believe it was a few months after I posted about it there in early 2007.
I would love to see aryanweb. ;P
Boreas
2011-01-23 22:58:34
From: Train
I would love to see aryanweb. ;P
I don't know if iBot is open source, but I know ruler put a lot work into it, adding new places every week at one point.
doom0791
2011-01-23 23:00:19
Thank you, Boreas, for clarifying. I now understand and I apologize to Train for thinking his worked differently. This is the first time I've heard the term WebWalker.
Since there's already one in progress I'll work on something else to be more productive :).
spicynachos2
2011-02-28 00:06:51
Though this would take a very long time, my thought is that you mark every point on the runescape map that a play can walk, then you use a function to generate a path between accessible point A, and accessible point B. Basically the function would just have to count tiles. However the function would eventually have to be taught to have Red, Yellow and Green tiles. Red being can't walk/never walk here. Yellow being avoid walking here less called for, or necessary, and green being use as needed. This system would be used to avoid monsters or dangerous areas. Also a priority use system ranking tiles could be used. This system might be really slow now that I think about it; that is a load for a computer to calculate.
Echo_
2011-02-28 12:47:25
The question is how would this deal with obstacles such as fences or walls?
Feroc1ty
2011-02-28 14:08:29
I have a decent start of a node walker somewhere posted on these forums (from a LONG time ago), it doesn't calculate fastest path just walks towards closest paths, i think its singly or doubly linked list for paths so it's quite cool
Boreas
2011-02-28 17:22:54
I was working on a system that picked a path around walls and fences and dangerous areas given that it knew which tiles were walkable, but then I realized that for RS, a node/web style walker is much better. All you need to do is have a low end function that walks the general direction of a target tile (even if it's off the minimap), given that there is a clear path between. Then you have a web of node tiles that have a clear line of sight between their neighbors (they can be further away from each other than the radius of the minimap). This way you only need to make nodes for popular destinations, and a some extras to create clear lines of sight between neighbor nodes. You don't need to make the typical reflection WalkPath(LongTPA). You get your start node and end node by whats closest to your start tile and end tile, and use A* or Dijkstra algo to pick the nodes, then use the low end function to walk between nodes. You can build in support for doors/stairs/teleports/etc as a part of the nodes.
There are several web walker projects around (cstrike made one I think), which are even more cool now that there are projects for a color version of GetMyPos (like SPS).