![]() |
Behold Pathfinding!
1 Attachment(s)
Alrighty, I was working on pathfinding. I haven't touched this script up, so it is a direct integration of A* pathfinding...or in other words, I haven't optimized the script to the best of my abilities yet, mainly because of the errors I am going to tell you about soon.
Anyway, I am posting this because 1) If not a scripter, be amazed by pathfinding and 2) If a scripter, and want to help make a pathfinding function for people to use, then you have a chance. I've done all the hard parts (I think) on this pathfinding script, but I ran into a few problems I will outline here. The biggest problem, as you will see in the script, is that the while loops are not functioning correctly. If I do not place a sleep 0.05 after the while, then the while loops oddly end early, among other strange effects. But if I put a sleep 0.05 after the while, the script obviously takes ages to complete calculation (about 3 minutes on average, actually). It is tricky, and if you have a solution please tell me. Another error, though not nearly as large as the above, is moving the Start location around. I haven't found a pattern yet, but if you move it to the right of the level is skips most of the loops, and well, it is just weird. Have a look yourself. Another error, though not so much a error as a little glitch, is the "diagnal movement" stuff. You'll see...it is caused by the script when going backwards from the end point choosing a random direction of a smaller number, when it choose there are usually about 3 possible choices, usually 1 of which being straight up and done, and 2 of which being diagnal. Anyway, you'll see. This pathfinding script is currently far from usable, but we could all learn a thing of turn making it work (and would make me very happy =P). Well, I actually do need to get it to work for my own projects of course, but the reason I've posted this rather then using my sources on AIM, is so people can use this. After working on this pathfinding, I have discovered it to be a rather complicated script to complete, and I doubt many people wanted this could do it. So as a benefit to graal, here it is...(though I am warning once again, it is needing to be completed so it works 100% nicely). Thats about it...though I know I forgot something. Be patient, in its current state it will take a few minutes to calculate as I said before. |
I don t really understand it sorry.. Some nice scripting tho;)
Sorry, i'm not good at scripting so i carnt help :( |
I can't open this zip folder... Im not a scripter but im still interested...
|
Quote:
|
Quote:
Also, why didn't I think to look for open source pathfinding code? C'est la vie. Well, my little lost newbie script will certainly work well enough for marketplaces and such. Lastly, if you can do this, I am surprised you needed to call on my services at all for SA, good work. [edit] What the? n 0 0 b is censored? [/edit] |
This would work well if we could get Stefan to implement it serverside and clientside (for speed reasons).
|
I couldnt see anything, whats it doing.
|
At the beginning it's calculating the path, because Graal Script is very slow (and the 0.05 delay), it takes about 5 minutes before the NPC starts walking.
|
I hate you Soul-Blade :( .
|
1 Attachment(s)
The diagonal pathing bug really shows :p
|
Quote:
In any case, tile-by-tile methods are horribly inefficient when navigating over any large distance. Predefined nodes are the way to go. |
Quote:
|
I'm about to take a look, and judging by that screenie and what people are saying, it sounds really good. I'm very impressed to say the least. Konidias asked me how to make one, and it was like 3 am in the morning so I didn't have time nor the will to do it then ;)
Nice work m8. ---SHifter |
:-/ this is pretty dang hard.
Mine will sometimes find the path, but he keeps blocking himself in, becouse I made it so he can't go back on tiles he already crossed. |
Behold! if you don't move them it works.
(Yes I know I used the other fella's start and end graphics) |
Quote:
btw, A* is a concept for pathfinding, just do a little research. It is the most popular one, but not the most efficient. I've read up alot of it in the past, and I never really gave a shot of making one up...lately with all the pathfinding talk I decided to try. Quote:
Quote:
I was thinking of the concept of it, and I think I got it all figured out. It will work similiar to the A* technique, except instead of thousands of indexes in multiple arrays, it will only be about 20 or so, and would work instantly. My plan is this: First the NPC detects any nodes seen from the start point, and from that start (assigned number 0) it assigns every seen node number 2. From there, the nodes assign every unassigned node a number increasingly, and once a node has line of sight of the target, the node cost script will be terminated. At that point, it will work backwords from the target, saving the x/y coord of the nodes. Each time it selects a new node, it will decrease the value, and eventually it will get to the start point. From there, pathing is complete and all you must do is reverse the targets trip for the start, and so on more easy stuff. Heh, I suppose it is still a form of A*, but it must be agreed that it is a superior form as far as efficiency goes. It is also the only smart way to do long distance travel for serverside pathfinding (I was trying to tell Konidias the horrid lag which would occur using A* over a gmap, but I don't know for sure, so maybe I am wrong. I think it would lag tremendously though). Oh also, I am thinking to solve the problem with this path finding, I should seperate the loops so each loop will stay under 10,000. I need to figure everything though...maybe Giltwists plan of using sleep would work. I was thinking of assigning a sleep every 9999 runs of a loop, but it might be better to find ways to reduce the number of loops it requires. Heh, I really should bother Stefan about making a built in pathfinding function -_-. |
Quote:
|
The loop limit shouldn't be a huge problem (I'm still not entirely sure how it works, I need to ask Stefan about it) if you segment the overworld. One set of nodes per town, a few other sets for areas of wilderness etc.
|
1 Attachment(s)
Quote:
|
I took a look at the scripting, quite nice, but it does takea long time, I'm sure we can find a way to fix this though.
Can either one of you explain how the nodes would work? I understand WHAT a node is, but I'm not sure how you would implement is so? ---Shifter |
1 Attachment(s)
Quote:
Here this one seems ot work all the time now! remove the sleep to make it fast. |
1 Attachment(s)
Quote:
Quote:
Now on to the node system My implementation includes using cool little node graphics for NPCs. Basicly rather then checking tiles, I will check to see if the NPCs graphic is set to the node graphic (or possibly use a save[index] variable, in addition). There will be less then 5 or maybe even less nodes per level, but it doesn't really matter the number because the nodes themselves will most likely have no script at all, other then hide. I will post it when I am finished with it, which could be in about a week as I am most likely leaving for that long. The major thing needed to know is that it is essentialy for efficient serverside pathing. Quote:
|
1 Attachment(s)
I got it to be a little less spastic when it comes to diagonal movement, it just needed to check the cardinal dirs first. But if you want it to not do that at all it would need to be able to move diagonaly in smaller increments (.5ish)
|
Quote:
|
Quote:
|
I still don't get all the mathmatical crap here... I need to sit down and read up on HOW it goes through it all... been too busy as of late, I guess it's time to check the entire script and figure it out now.
---Shifter |
Quote:
http://www.policyalmanac.org/games/aStarTutorial.htm It even has a download with a really cool pac-man-ish example of pathfinding. It's cool and very very fast. and always works! wow! |
Quote:
|
1 Attachment(s)
This is fun actually, well when it works, otherwise it would seem more fun to bash the computer to bits... bleh, I got that same loop bug, but atleast it works. Now if only I could get the binary heap to work, if anyone can take a look and tell me whats wrong or atleast explain it to me better it would be greatly appreciated.
Dunno why, but my script says that the player is blocking. I don't like it. |
Quote:
I like it. Actually I take that back, It's more than Excellent. I really don't see where your going with that binary heap thing. But hey that's just me, I didn't read up on it. Just heard about it. |
Quote:
|
Quote:
|
Do what G2k1 did for railroad tracks lol. and whatever Soul Blade said is false graal wont handle a npc with nothing in it. It will just go bye bye when you come to execute it on a server. You need to define something like a string (setstring this.realnpc,true;) then use say save[] and then the pathfinding npc can easy find each of the nodes in order.
|
It will not work, I tell you.
|
Quote:
It will work, I can promise you that...you'll see. The way I plan on making it work, it would probably be easy to use an array as well as NPCs. No time to explain, need to sleep. |
I'm thinking, positiong the path nodes with npc's and use another npc to store them in an array and gather info on which one's are connected to which.
|
Um, whether you like it or not, the easiest thing to do would be what Kai is saying
|
Quote:
|
Quote:
NPC Code:for (i=0; i<arraylen(var); i++) Have it check all the coords, for example this.x and this.y as arrays. I still don't understand HOW the nodes are supposed to work, perhaps if it was explained in depth then I could be more helpful. ---Shifter |
1 Attachment(s)
Quote:
Define links between the nodes. Let the NPC figure out the way from A to B, following the desired links. See diagram. |
All times are GMT +2. The time now is 05:20 AM. |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.
Copyright (C) 1998-2019 Toonslab All Rights Reserved.