Jump to content
Eternal Lands Official Forums
Placid

EL Network Protocol Documentation

Recommended Posts

Greetings!

 

robotbob on a previous thread suggested documenting the EL protocol. This is obviously an awesome idea as at current there isn't any publicly available information. Therefore I have provided a Wiki aptly named 'Eternal Lands Network Protocol Wiki' for documentation. The wiki will provide a breakdown of the protocol, its uses, examples of packets and other information pertaining to communication to and from the Eternal Lands server.

 

If you are a programmer and have experience with the protocol, you are invited to join us to help make the Wiki an extensive source of information for the EL protocol.

 

Disclaimer

If there is any abuse to this Wiki, the IPs in question will receive an outright ban from accessing my server, both the Wiki and the webserver in general.

 

Currently it is just myself and Vegar editing it, with robotbob planning to join us. Please feel free to assist us by creating a username and begin editing. If you run a trade bot, we could use the item ID information if you have it to hand ;)

 

Cheers :)

Edited by Placid

Share this post


Link to post
Share on other sites

Excellent idea,

 

I'll add some of my protocol knowledge in the next couple of days

 

cheers

 

Greetings!

 

robotbob on a previous thread suggested documenting the EL protocol. This is obviously an awesome idea as at current there isn't any publicly available information. Therefore I have provided a Wiki article for documentation. The wiki will provide a breakdown of the protocol, it's uses, examples of packets and other information pertaining to communication to and from the Eternal Lands server.

 

If you are a programmer and have experience with the protocol, you are invited to join us to help make the Wiki an extensive source of information regarding the EL protocol.

 

Disclaimer

If there is any abuse to this Wiki, the IPs in question will receive an outright ban from accessing my server, both the Wiki and the webserver in general.

 

Currently it is just myself and Vegar editing it, with robotbob planning to join us. Please feel free to assist us by creating a username and begin editing. If you run a trade bot, we could use the item ID information if you have it to hand ;)

 

Cheers :)

Share this post


Link to post
Share on other sites

Excellent idea,

 

I'll add some of my protocol knowledge in the next couple of days

 

cheers

Good to have you aboard, jump on over and create a username when you're free ;)

 

(I'd prefer to keep anonymous edits at a minimum)

 

[EDIT]

Anonymous edits are now disabled.

Share this post


Link to post
Share on other sites

Semi-off-topic but not irrelevant:

 

Yes, I do have both IE and FireFox installed on my computer.

But I refuse to switch to FireFox because of some tactic which aggressiveness towers over any of M$...

 

Not meant to be offensive.. or maybe it is...?

Well, you show your statement on your blocking page as shown in IE, I have my statement written here.

:shrugs:

Share this post


Link to post
Share on other sites

Semi-off-topic but not irrelevant:

 

Yes, I do have both IE and FireFox installed on my computer.

But I refuse to switch to FireFox because of some tactic which aggressiveness towers over any of M$...

 

Not meant to be offensive.. or maybe it is...?

Well, you show your statement on your blocking page as shown in IE, I have my statement written here.

:shrugs:

I will add the wiki to an exclusion list to allow all browsers.

Share this post


Link to post
Share on other sites

Please (as I just requested on the wiki discussion page) let us have some kind of flag to show that somebody is currently editing the page.. a minor change made by somebody else causes a lot of headache to somebody that just went through half the page filling in the gaps.

Share this post


Link to post
Share on other sites

Please (as I just requested on the wiki discussion page) let us have some kind of flag to show that somebody is currently editing the page.. a minor change made by somebody else causes a lot of headache to somebody that just went through half the page filling in the gaps.

Maybe it needs to be broken up into multiple pages to reduce contention/conflicts on edits.

Share this post


Link to post
Share on other sites

Please (as I just requested on the wiki discussion page) let us have some kind of flag to show that somebody is currently editing the page.. a minor change made by somebody else causes a lot of headache to somebody that just went through half the page filling in the gaps.

As a tip (i've added a reply to the discussion page), edit the page by sections and not the whole page in it's entirety.

Share this post


Link to post
Share on other sites

Hello all,

 

Great! After speaking with vegar about a wiki, in the neighborhood of 24-48 hrs ago, the doc

is coming to life! :D

 

Some ideas and wishes:

  • I would like the data type to stay in the byte, word, dword ; instead of the C-sque data types.
    Like a format specification for a file fomat.
  • Personally I prefer seeing the protocol byte listed as hexadecimal, instead of decimal. But perhaps
    decimal is the best to prevent confusion.

Here is a blurb from a rar spec doc:

 

Each block begins with following fields:

  • HEAD_CRC 2 bytes CRC of total block or block part
  • HEAD_TYPE 1 byte Block type
  • HEAD_FLAGS 2 bytes Block flags
  • HEAD_SIZE 2 bytes Block size
  • ADD_SIZE 4 bytes Optional field - added block size

Declared block types:

  • HEAD_TYPE=0x72 marker block
  • HEAD_TYPE=0x73 archive header
  • HEAD_TYPE=0x74 file header
  • HEAD_TYPE=0x75 comment header
  • HEAD_TYPE=0x76 extra information
  • HEAD_TYPE=0x77 subblock
  • HEAD_TYPE=0x78 recovery record

 

Just my first thoughts over coffee,

 

robotbob

Share this post


Link to post
Share on other sites

I would like the data type to stay in the byte, word, dword ; instead of the C-sque data types.

word and dword are ambigous, depending on the machine architecture (64b procesors have different word and dword sizes).

C is also like that, which is why the best idea is to use SDL types, such as uint32, sint16, etc.

 

Personally I prefer seeing the protocol byte listed as hexadecimal, instead of decimal. But perhaps

decimal is the best to prevent confusion.

The data is in decimal in the protocol file. Making it hex would complicate things way too much and would be pointless.

Share this post


Link to post
Share on other sites

I would like the data type to stay in the byte, word, dword ; instead of the C-sque data types.

word and dword are ambigous, depending on the machine architecture (64b procesors have different word and dword sizes).

C is also like that, which is why the best idea is to use SDL types, such as uint32, sint16, etc.

 

Personally I prefer seeing the protocol byte listed as hexadecimal, instead of decimal. But perhaps

decimal is the best to prevent confusion.

The data is in decimal in the protocol file. Making it hex would complicate things way too much and would be pointless.

Feel free to join us :D

 

robotbob: Vegar mentioned this to me, but I think it would be best to stick to more common terminology. By all means you can add a section describing the correlation or indeed just add '(or dword)' etc to the text wherever you see fit.

 

Thanks for joining those who have :)

Share this post


Link to post
Share on other sites
and would be pointless.

Ok yes. i just realized the client code itself references the protocol with decimal.

(I packet sniff most, so intitally I saw this in hex)

 

Just a personal wish, I never use decimal values in cmps. But for this project, it differs from the design

of the app itself. I understand.

 

which is why the best idea is to use SDL types, such as uint32, sint16, etc.

 

Ok, then I'll make sure the examples I present use sdl.

At least a generic non-langauge, non-platform data types are going to be used.

 

robotbob

Share this post


Link to post
Share on other sites

This is looking really good - and best of all (for me;-), the docs are uncovering errors

in my understanding of the protocol - looks like I'll have some bug fixes to make ;-)

 

cheers

 

Greetings!

 

robotbob on a previous thread suggested documenting the EL protocol. This is obviously an awesome idea as at current there isn't any publicly available information. Therefore I have provided a Wiki article for documentation. The wiki will provide a breakdown of the protocol, it's uses, examples of packets and other information pertaining to communication to and from the Eternal Lands server.

 

If you are a programmer and have experience with the protocol, you are invited to join us to help make the Wiki an extensive source of information regarding the EL protocol.

 

Disclaimer

If there is any abuse to this Wiki, the IPs in question will receive an outright ban from accessing my server, both the Wiki and the webserver in general.

 

Currently it is just myself and Vegar editing it, with robotbob planning to join us. Please feel free to assist us by creating a username and begin editing. If you run a trade bot, we could use the item ID information if you have it to hand :D

 

Cheers :)

Share this post


Link to post
Share on other sites

Here are a few errors/suggestions:

 

Rewrite Message_Length description as follows:

MESSAGE_LENGTH=(length of PROTOCOL TYPE)+(length of DATA) = 1+(length of DATA)

 

The structure for sending to local chat is wrong. The correct structure (from wireshark) is:

[RAW_TEXT (0)][LENGTH (X*)]MESSAGE

Basically you only have to send the message with Protocol_type=0 and the length. The channel seems to be only for messages from the server.

 

Otherwise, great job!

Share this post


Link to post
Share on other sites

Here is another problem I found. When my client receives a PM, it looks like this:

 

message type= 0

message length= 25

data= '\x01\x80[PM from squiz: hello]'

 

The first byte implies channel 1 (pm). What is the second byte?

Share this post


Link to post
Share on other sites

Here are a few errors/suggestions:

 

Rewrite Message_Length description as follows:

MESSAGE_LENGTH=(length of PROTOCOL TYPE)+(length of DATA) = 1+(length of DATA)

 

The structure for sending to local chat is wrong. The correct structure (from wireshark) is:

[RAW_TEXT (0)][LENGTH (X*)]MESSAGE

Basically you only have to send the message with Protocol_type=0 and the length. The channel seems to be only for messages from the server.

 

Otherwise, great job!

Thanks for the feedback. Please add this to the Wiki or it's discussion page.

 

Here is another problem I found. When my client receives a PM, it looks like this:

 

message type= 0

message length= 25

data= '\x01\x80[PM from squiz: hello]'

 

The first byte implies channel 1 (pm). What is the second byte?

I am assuming it's the colour of the text. The Wiki does need the client colours, so that's something i'll add to the discussion page.

 

Cheers :(

Share this post


Link to post
Share on other sites

I'll sign up and do colours shortly, and possibly some other bits... I'm entering exam time at uni now, though, so if there's still more to do in a month or so, nudge me then ;)

Share this post


Link to post
Share on other sites
I'll sign up and do colours shortly
done. http://wiki.beplacid.com/EL_Colors ... if you don't want separate pages, just merge it into the protocol page, but I don't like pages that are too long

Thanks. The colours are needed and yes the page is getting rather long. I am in favour of just linking to the colours page as it is not crucial to the protocol (as in, things'll work without it)

Share this post


Link to post
Share on other sites

Going to add my stuff to the wiki soon.

 

Data type soup at the moment for me, but nearly done.

 

robotbob

Great.

 

At the moment we really need trade documentation and the completion of 'Server to Client' and 'Client to server'. A comprehensive list of Item Image IDs is also required (we have other ways of getting this info, though).

Share this post


Link to post
Share on other sites

Ok, ill add then the next 100 item ID's i have, when i have the time to do it :P

 

(hopefully soon)

 

Well done to everybody, who contributed to that Wiki, and thumbs up for snowball for running it :dry:

 

Piper

Share this post


Link to post
Share on other sites

Thanks to Timbol and Freeone3000 for their recent work on the Wiki. An explanation of message parsing and some examples in Python and Java have been added (although some of the Java code is questionable ;))

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×