Multiplayer packets - Server info

Research related to Arcanum and it's game engine.
Post Reply
User avatar
Crypton
Arronax's Best Friend
Arronax's Best Friend
Posts: 420
Joined: Wed Jul 08, 2009 5:04 am
Location: Abyss
Contact:

Multiplayer packets - Server info

Post by Crypton » Mon Jul 27, 2009 12:41 pm

After a bit of researching, I’ve found almost complete structure of server info packet, this packet is broadcasted by server at port 31434 via UDP packet and its size is always 332 bytes.

This is arcanum packet header:

Code: Select all

struct MM_ARCANUM_PACKET
{
WORD Type; // for server info packet, its 0×0219
WORD Size; // size of whole packet, including header
DWORD ReplyType; // Type of reply packet
};
After header, there are data, in this case its server info:

Code: Select all

struct MM_ARCANUM_SERVER_INFO
{
char GameName[23];
char ModuleName[23];
WORD Unknown1;
DWORD GameType; // Check below
DWORD MinLevel;
DWORD MaxLevel;
DWORD MaxPlayers;
DWORD PlayerCount; // Number of players connected to server
sockaddr_in ServerAddress; // Socket address
DWORD UpTime; // How long is server running
DWORD Unknown2; // Ping ?
DWORD GameFlags; // Check below
MM_ARCANUM_SERVER_PLAYER_INFO PlayerTable[8];
};
Definition of player info struct:

Code: Select all

struct MM_ARCANUM_SERVER_PLAYER_INFO {
DWORD Unknown; // Maybe its index or id
char PlayerName[24];
};
Game types:

Code: Select all

0 = ”Free for all”
1 = ”Cooperative”
2 = ”Roleplay”
Game flags:

Code: Select all

0×00000001 = IsPlayerKilling
0×00000002 = FriendlyFire
0×00000004 = PrivateChat
0×00000008 = IsPasswordProtected
0×00000010 = AutoJoin
0×00000020 = AutoEquip
0×00000040 = KeySharing
If you find what means that unknown values, please let me know, I’ll update this post and credit you as well!

Thanks!

Post Reply