The launcher first load the launcher page, then read the update server IP & port
Then send to the update server:
where FR is the current used locale and 400 the current game version
then the update server answer that:
Code:
SERVER_LIST : patch.rappelz.gpotato.eu/fr/RZ_FR/Patch
which tell the launcher where to download files
then the update server send all updated files since the game version that the launcher sent (here it was 400)
Then it do the same as above but for localized files using the query (for example translation files: db_string.rdb)
Code:
QUERY RZ_FR_LOCAL 400
Note that the versions for the 2 queries are not related (so for the FR server, RZ_FR has a version of 900~ and RZ_FR_LOCAL 200~
This is text data with 1 line = 1 file, it's almost what you tell to the patch server:
Code:
sdXwe'vmvdeHga$:216:11935985:30CF20EB:6813532:37603A3D:/036/
Where:
- sdXwe'vmvdeHga$ is the file name (hashed, it's db_string.rdb)
- 216 is the file's version
- 11935985 the unpacked file size
- 30CF20EB the unpacked file's checksum (sum of all bytes)
- 6813532 the packed size (it use zlib)
- 37603A3D the packed file's checksum (sum of all bytes)
- /036/ the folder where to find the file in the patch file server
So here, launcher.exe will download http://patch.rappelz.gpotato.eu/fr/RZ_FR/Patch/036/sdXwe'vmvdeHga$
(which exist if you go to that url ^^)
So for you:
Code:
:RZ_ME:100:sidA4Mxj(66;ig_V:365680:037E0D1C:354973:02D0B221:/053/::
- RZ_ME : the locale, the patch server will answer to 'QUERY RZ_ME <version>' and 'QUERY RZ_ME_LOCAL <local_version>'
- 100 : is the file version
- sidA4Mxj(66;ig_V : the file name
- 365680 : the unpacked file size
- 037E0D1C : the unpacked file checksum
- 354973 : the packed file size
- 02D0B221 : the packed file checksum
- /053/ : the folder where to find the file
I will release a tool compress / uncompress server's option files (eop) and your patch files (as it use the same algorithm, that is zlib)
I made this tool more than one year before so it may be outdated, is the new one works still ? (I know about the encrypted version for newer servers and that Pyrok or someone else patched the server binary to use old version that use compression only, mine is also only compatible to only the old version though I remember having found how the server handle the new format, but I will have to discover where I saved that information ...)
Anyway, I am pretty sure that the hex string is the checksum, it's the same along with the size for non packed file like sframe.exe
But hey, we have the PDB
So all information needed is there waiting for someone to open that chest to find the answer to everything (that is a number -- 42
)
------------------------
Some more information:
------------------------
After reading the PDB file, there are indeed checksum of unpacked and packed files.
Notice that there are 2 ':' at the end, you can write something, it's a description it seems (optional)
So we have:
Code:
:applicationName:version:fileName:unpackedSize:unpackedChecksum:packedSize:packedChecksum:directory:description:
To add a file server which will provide all downloadable files (the patch server will use that with SERVER_LIST)
Write a line like that in the tpf file:
:HTTP_SERVER:RZ_ME:
For official french server, it's probably (if not 100% sure^^) to be this:
Code:
:HTTP_SERVER:RZ_FR:patch.rappelz.gpotato.eu/fr/RZ_FR/Patch:
Then to download a file, the launcher will prefix all files to be downloaded by
+ the file's directory (036 for db_string.rdb) + the file name hashed to have:
Code:
http://patch.rappelz.gpotato.eu/fr/RZ_FR/Patch/036/sdXwe'vmvdeHga$
Note that "http://" is not included in the config file.
That should work (the HTTP_SERVER need to be in capitals)
All tpf files have to be in the "PathInfo" directory along with the PatchServer.exe
To have this:
Code:
+ server_directory
|
+--+ PatchServer.exe
|
+--+ PatchInfo
|
+--+ file1.tpf
|
+--+ file2.tpf
...