Register for your free account! | Forgot your password?

You last visited: Today at 04:05

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Release]Pathfinder Open Source

Discussion on [Release]Pathfinder Open Source within the EO PServer Guides & Releases forum part of the EO PServer Hosting category.

Reply
 
Old   #1
 
funhacker's Avatar
 
elite*gold: 20
Join Date: Sep 2007
Posts: 1,767
Received Thanks: 1,746
[Release]Pathfinder Open Source

Yes as you see this is now open source. Meaning NO one can make money using this code in ANY way. It's a 100% free. All I ask is you give credits to those that deserve it!

Reason for me being so nice is people (mostly Hio77) are actually doing something and willing to share! So I am now giving out the ByteMap Encryption keys and even the source code to my pathfinder app I made. Be aware I coded this a long time ago and rushed it. I know it's not perfect. I will be updating it later on for use with my ACME BO project so expect an updated cleaner and more stable source soon.

Files attached are
Pathfinder Decryptor Solution (c# 2008 Express edition)
--------------------------------------------------------
Full source code no comments sorry I will re do this at some point.


MapDestination.dat Encryption Byte Map (xlsx, Excel 2008 spreadsheet)
----------------------------------------------------------------------
Byte Map with Encryption keys to show the structure of the MapDestination.dat



Lastly,
ENJOY!



Update [01-12-2010]
---------------------

Made a working Limited Pathfinder Editor. I will be adding features of add path delete path and so forth. But for now there is a basic "Change" path option for editing already existing paths within the MapDestination.dat file.

Click the path you wish to edit -> Click the Change Button -> Make the changes -> Click Apply (or enter) to save the changes or Click Cancel (Escape) to cancel the changes.

After changes are made save the file.

Everything has a comment and explanation of what it's used for and it's purpose and what the code is attempting to accomplish.

Should also note that the source codes and apps posted here are not allowed on any site yet and if so I change my mind I will post here and in the updated source codes that I have.
Attached Files
File Type: rar PathFinderDecryptor.rar (280.6 KB, 243 views)
File Type: rar MapDestination.dat Encryption - Byte Map.rar (8.4 KB, 95 views)
File Type: rar [Source]Pathfinder Editor Solution[01-12-2010].rar (79.2 KB, 126 views)
File Type: rar [App]Pathfinder Editor[01-12-2010].rar (11.1 KB, 111 views)
funhacker is offline  
Thanks
13 Users
Old 11/24/2010, 09:56   #2
 
elite*gold: 0
Join Date: Jul 2010
Posts: 134
Received Thanks: 38
how to use it
track19 is offline  
Old 11/24/2010, 12:13   #3
 
kyushiro's Avatar
 
elite*gold: 0
Join Date: Oct 2010
Posts: 68
Received Thanks: 94
nice release funhacker thanks for the updates cheers!
kyushiro is offline  
Old 11/25/2010, 00:57   #4
 
Jack Sparrow's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 522
Received Thanks: 628
Nice release keep it up
Jack Sparrow is offline  
Old 11/25/2010, 09:37   #5
 
hio77's Avatar
 
elite*gold: 20
Join Date: Jun 2006
Posts: 1,759
Received Thanks: 827
awesome release

btw i see what you meant by byte maps now, mine are more text based lol
hio77 is offline  
Old 11/25/2010, 18:33   #6
 
funhacker's Avatar
 
elite*gold: 20
Join Date: Sep 2007
Posts: 1,767
Received Thanks: 1,746
Quote:
Originally Posted by hio77 View Post
awesome release

btw i see what you meant by byte maps now, mine are more text based lol
Byte maps of mine look more pretty and easy to understand imo

Here is an update I have been working on this app. Created a class which is well on it's way. Here's it's code so far for those interested in comments

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;

namespace Pathfinder_Editor_Project
{
    public class MapDestination
    {
        #region Public Variables
        public MapData[] Data;
        #endregion

        #region Private Variables
        ///////////////////////
        // Private Variables //
        ///////////////////////
        private int[] encryptionKeys;
        private const int NameLength = 255;
        private const int DescriptionLength = 257;
        private const int PathLength = 532;
        #endregion

            public MapDestination()
            {
                //Initialisation Code for MapData structure

                //Setup the encryption key array
                encryptionKeys = new int[27] 
                { 0xA1, 0xEF, 0xC4, 0xA7, 0xA1, 0xEF, 0xD3, 0xF2, 0xA1, 0xEF, 0xCD, 0xBB, 0xA1, 0xEF, 0xC6,
                    0xC6, 0xA1, 0xEF, 0x31, 0x30, 0x30, 0xA1, 0xEF, 0xCD, 0xF2, 0xA1, 0xEF };



            }

            public void LoadFile(string FileName)
            {
                //Loads input file for the pathfinder to create mapdata

                //Declare Variables
                FileStream fs;
                BinaryReader br;
                int pathCount;
                int keyIndex = 0; //Used to track what encryption key is to be used.

                //Check file exists
                if (!File.Exists(FileName))
                {throw new Exception("File not found! (" + FileName + ")");}

                //Create filestream
                fs = new FileStream(FileName,FileMode.Open);

                //Create Binary Reader
                br = new BinaryReader(fs);

                //Get the path count
                pathCount = br.ReadInt32();

                //Check length of file
                if (fs.Length < pathCount * PathLength + 4)
                {throw new Exception("File not large enough!");}

                //Setup MapData array
                Data = new MapData[pathCount];

                //Loopthrough and get all the data from the file.
                for (int pathIndex = 0; pathIndex < pathCount; pathIndex++)
                {
                    //Check if the keyindex is at it's limit
                    if (keyIndex == encryptionKeys.Length)
                    { keyIndex = 0; }

                    //Initialise the Path's Name and Description
                    Data[pathIndex].Name = string.Empty;
                    Data[pathIndex].Description = string.Empty;

                    //Get all the characters of the name and decrypt it
                    //using the current encryption key
                    for (int charIndex = 0; charIndex < NameLength; charIndex++)
                    {
                        Data[pathIndex].Name +=
                            Convert.ToChar(
                                br.ReadByte() ^ encryptionKeys[keyIndex]);
                    }

                    //Get all the characters of the description and decrypt it
                    //using the current encryption key
                    for (int charIndex = 0; charIndex < DescriptionLength; charIndex++)
                    {
                        Data[pathIndex].Description +=
                            Convert.ToChar(
                                br.ReadByte() ^ encryptionKeys[keyIndex]);
                    }

                    //Get the first byte of the MenuID and decrypt it using the current encryption key
                    Data[pathIndex].MenuID = br.ReadByte() ^ encryptionKeys[keyIndex];
                    //Get the remaining 3 bytes using any special rules required depending on current encryption key
                    if (keyIndex >= 18 && keyIndex <= 20)
                    {
                        Data[pathIndex].MenuID += br.ReadByte() * 256;
                        Data[pathIndex].MenuID += br.ReadByte() * 65536;
                        Data[pathIndex].MenuID += br.ReadByte() * 16777216;
                    }
                    else
                    {
                        Data[pathIndex].MenuID += (br.ReadByte() ^ 0xFF) * 256;
                        Data[pathIndex].MenuID += (br.ReadByte() ^ 0xFF) * 65536;
                        Data[pathIndex].MenuID += (br.ReadByte() ^ 0xFF) * 16777216;
                    }

                    //Get the first byte of the X position and decrypt it using the current encryption key
                    Data[pathIndex].PosX = br.ReadByte() ^ encryptionKeys[keyIndex];
                    //Get the remaining 3 bytes using any special rules required depending on current encryption key
                    if (keyIndex >= 18 && keyIndex <= 20)
                    {
                        Data[pathIndex].PosX += br.ReadByte() * 256;
                        Data[pathIndex].PosX += br.ReadByte() * 65536;
                        Data[pathIndex].PosX += br.ReadByte() * 16777216;
                    }
                    else
                    {
                        Data[pathIndex].PosX += (br.ReadByte() ^ 0xFF) * 256;
                        Data[pathIndex].PosX += (br.ReadByte() ^ 0xFF) * 65536;
                        Data[pathIndex].PosX += (br.ReadByte() ^ 0xFF) * 16777216;
                    }

                    //Get the first byte of the Y position and decrypt it using the current encryption key
                    Data[pathIndex].PosY = br.ReadByte() ^ encryptionKeys[keyIndex];
                    //Get the remaining 3 bytes using any special rules required depending on current encryption key
                    if (keyIndex >= 18 && keyIndex <= 20)
                    {
                        Data[pathIndex].PosY += br.ReadByte() * 256;
                        Data[pathIndex].PosY += br.ReadByte() * 65536;
                        Data[pathIndex].PosY += br.ReadByte() * 16777216;
                    }
                    else
                    {
                        Data[pathIndex].PosY += (br.ReadByte() ^ 0xFF) * 256;
                        Data[pathIndex].PosY += (br.ReadByte() ^ 0xFF) * 65536;
                        Data[pathIndex].PosY += (br.ReadByte() ^ 0xFF) * 16777216;
                    }

                    //Get the first byte of the parent ID and decrypt it using the current encryption key
                    Data[pathIndex].ParentID = br.ReadByte() ^ encryptionKeys[keyIndex];
                    //Get the remaining 3 bytes using any special rules required depending on current encryption key
                    if (keyIndex >= 18 && keyIndex <= 20)
                    {
                        Data[pathIndex].ParentID += br.ReadByte() * 256;
                        Data[pathIndex].ParentID += br.ReadByte() * 65536;
                        Data[pathIndex].ParentID += br.ReadByte() * 16777216;
                    }
                    else
                    {
                        Data[pathIndex].ParentID += (br.ReadByte() ^ 0xFF) * 256;
                        Data[pathIndex].ParentID += (br.ReadByte() ^ 0xFF) * 65536;
                        Data[pathIndex].ParentID += (br.ReadByte() ^ 0xFF) * 16777216;
                    }

                    //Get the first byte of the map ID and decrypt it using the current encryption key
                    Data[pathIndex].MapID = br.ReadByte() ^ encryptionKeys[keyIndex];
                    //Get the remaining 3 bytes using any special rules required depending on current encryption key
                    if (keyIndex >= 18 && keyIndex <= 20)
                    {
                        Data[pathIndex].MapID += br.ReadByte() * 256;
                        Data[pathIndex].MapID += br.ReadByte() * 65536;
                        Data[pathIndex].MapID += br.ReadByte() * 16777216;
                    }
                    else
                    {
                        Data[pathIndex].MapID += (br.ReadByte() ^ 0xFF) * 256;
                        Data[pathIndex].MapID += (br.ReadByte() ^ 0xFF) * 65536;
                        Data[pathIndex].MapID += (br.ReadByte() ^ 0xFF) * 16777216;
                    }

                    //Add one to the keyIndex
                    keyIndex++;

                }

                //Close the file
                fs.Close();
            }

            public string[] GetNameList()
            {
                //Declare Variables
                string[] result = new string[Data.Length];
                int nullIndex;

                for (int pathIndex = 0; pathIndex < Data.Length; pathIndex++)
                {
                    //Get the index of the first null byte
                    nullIndex = Data[pathIndex].Name.IndexOf(Convert.ToChar(0x00));

                    //If the null index is greater than 0 then modify the result otherwise use the original
                    if (nullIndex > 0)
                    {
                        //Get only the data that contains a character
                        result[pathIndex] = Data[pathIndex].Name.Substring(0, nullIndex);
                    }
                    else
                    {
                        result[pathIndex] = Data[pathIndex].Name;
                    }

                    
                }

                return result;
            }

            public int[] GetMapList()
            {
                //Declare Variables
                int[] result = new int[Data.Length];

                for (int pathIndex = 0; pathIndex < Data.Length; pathIndex++)
                {
                        result[pathIndex] = Data[pathIndex].MapID;
                }

                return result;
            }

            public struct MapData
        {
            //Declare Variables
            #region Public Variables
            //////////////////////
            // Public Variables //
            //////////////////////
            public string Name;
            public string Description;
            public int MenuID;
            public int PosX;
            public int PosY;
            public int ParentID;
            public int MapID;
            public int ID;
            #endregion
        };

    }
}
funhacker is offline  
Old 11/25/2010, 22:50   #7
 
hio77's Avatar
 
elite*gold: 20
Join Date: Jun 2006
Posts: 1,759
Received Thanks: 827
very nice looking a lot more clearer there
hio77 is offline  
Old 11/26/2010, 17:36   #8
 
funhacker's Avatar
 
elite*gold: 20
Join Date: Sep 2007
Posts: 1,767
Received Thanks: 1,746
Another Update on this. The app is comming along quite nicely

Got some minor clean up code to do, then some interaction with the "TreeView" object. First time ever using one of these but it will make navigating the pathfinder much easier

Attached Screenshot
Attached Images
File Type: jpg PathfinderEditor01.jpg (9.0 KB, 74 views)
funhacker is offline  
Old 11/27/2010, 00:03   #9
 
hio77's Avatar
 
elite*gold: 20
Join Date: Jun 2006
Posts: 1,759
Received Thanks: 827
Quote:
Originally Posted by funhacker View Post
Another Update on this. The app is comming along quite nicely

Got some minor clean up code to do, then some interaction with the "TreeView" object. First time ever using one of these but it will make navigating the pathfinder much easier

Attached Screenshot
much cleaner i started looking at the action walker that i got from loveomg or forcer (dont remember which atm lol)

looks like it dont have too much work in it so when i get stuck on my source next i might break it out and have a bit of a mess around with it

the other option to a tree view is a view like the action walker uses (a tree view still but it uses the map ids and branches off)


EDIT:
now that i think about it its the same lol
hio77 is offline  
Old 11/30/2010, 16:54   #10
 
funhacker's Avatar
 
elite*gold: 20
Join Date: Sep 2007
Posts: 1,767
Received Thanks: 1,746
Update [01-12-2010]
---------------------

Made a working Limited Pathfinder Editor. I will be adding features of add path delete path and so forth. But for now there is a basic "Change" path option for editing already existing paths within the MapDestination.dat file.

Click the path you wish to edit -> Click the Change Button -> Make the changes -> Click Apply (or enter) to save the changes or Click Cancel (Escape) to cancel the changes.

After changes are made save the file.

Everything has a comment and explanation of what it's used for and it's purpose and what the code is attempting to accomplish.

Should also note that the source codes and apps posted here are not allowed on any site yet and if so I change my mind I will post here and in the updated source codes that I have.
funhacker is offline  
Thanks
1 User
Old 11/30/2010, 21:23   #11
 
hio77's Avatar
 
elite*gold: 20
Join Date: Jun 2006
Posts: 1,759
Received Thanks: 827
Quote:
Originally Posted by funhacker View Post
Update [01-12-2010]
---------------------

Made a working Limited Pathfinder Editor. I will be adding features of add path delete path and so forth. But for now there is a basic "Change" path option for editing already existing paths within the MapDestination.dat file.

Click the path you wish to edit -> Click the Change Button -> Make the changes -> Click Apply (or enter) to save the changes or Click Cancel (Escape) to cancel the changes.

After changes are made save the file.

Everything has a comment and explanation of what it's used for and it's purpose and what the code is attempting to accomplish.

Should also note that the source codes and apps posted here are not allowed on any site yet and if so I change my mind I will post here and in the updated source codes that I have.
new source is looking really good

btw sorry i stopped talking to you suddenly last night my connection is broken atm and they are doing all sorts of **** to my line to test what the problem is with it...
hio77 is offline  
Old 04/09/2020, 02:10   #12
 
elite*gold: 0
Join Date: Sep 2019
Posts: 65
Received Thanks: 4
thanks dude
mesobedo is offline  
Reply


Similar Threads Similar Threads
[RELEASE] [OPEN SOURCE] CE 5.5 Pointer to AutoIt Source-Code
02/13/2011 - AutoIt - 6 Replies
Habe heute erst gemerkt, dass es hier eine AutoIt Sektion gibt xD also poste ich mal mein Programm mit rein. Funktionsweise: 1. in CE Rechtsklick auf den Pointer und auf "Copy" klicken 2. in meinem Programm auf "Code generieren" klicken 3. In euer Scite gehen und einfügen Hier ist der Source Code vom Programm:
[RELEASE][OPEN-SOURCE] Nostale Bot mit Waypoints
08/22/2010 - Nostale Hacks, Bots, Cheats & Exploits - 35 Replies
Naja wieder der Name schon sagt gebe ich euch meinen Grindbot inclusive Source Code. :p Da ich keinen Char habe der über Level 20 ist kann ich nicht sagen wie es sich beim Wiederbeleben auswirkt (bei unter Level 20 muss man ja beim Wiederbeleben auf Zurück klicken) Was kann er alles: - Kämpfen - Looten - Healen - Weglaufen - Auto wiederbeleben
[Release][APP]-PathFinder Compiler
06/29/2009 - EO PServer Guides & Releases - 13 Replies
This app will compile pathfinder data file for you all you have to do is fill out an INI file (MapDestination.ini) then run the exe it will then output a fresh MapDestination.dat for you. INI Instructions: Firstly you have the The only value in this so far is totalpaths This is how many path finding options you want you may put in as many as you want (I have yet to find a limit) Next we have the paths settings within the ini file
Release Open Source Flyff Project
10/20/2008 - Flyff PServer Guides & Releases - 4 Replies
Leeched [x



All times are GMT +1. The time now is 04:05.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.