-
Notifications
You must be signed in to change notification settings - Fork 13
Cmd_ServerList
GigaToni edited this page Jul 14, 2017
·
4 revisions
I'm unsure if this packet is needed. Since it gets already sent by the UserAuthAck packet. But in the leaked ZoneServer it gets sent before the UserAuthAck packet and after UserAuth.
Information shows that this packet is not needed. UserAuthAck already contains all informations!
This packet contains only informations about the servers available. The pseudo struct should be self-explaining.
This packet gets sent in the following packets:
- Cmd_UserAuth
- Cmd_ServerMessage
- Cmd_UserAuth2
000000: 17 00 01 00 00 00 54 00 65 00 73 00 74 00 00 00 · · · · · · T · e · s · t · · ·
000016: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 · · · · · · · · · · · · · · · ·
000032: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 · · · · · · · · · · · · · · · ·
000048: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 · · · · · · · · · · · · · · · ·
000064: 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 C0 · · · · · · · · · · · · · · · ·
000080: DA 45 01 00 00 00 A7 FC D1 00 A7 FC D1 00 A7 FC · E · · · · · · · · · · · · · ·
000096: D1 00 A7 FC D1 00 A7 FC D1 00 7F 00 00 01 7F 00 · · · · · · · · · · · · · · · ·
000112: 00 01 7F 00 00 01 7F 00 00 01 7F 00 00 01 0D 2B · · · · · · · · · · · · · · · +
000128: 03 2B 17 2B 21 2B CD 29 CE 29 46 2B · + · + ! + · ) · ) F +
/* 2792 */
struct XiServerInfo
{
wchar_t ServerName[32];
unsigned int ServerId;
float Current;
float Capacity;
int State;
int GameUpdateTime;
int LobbyUpdateTime;
int Area1UpdateTime;
int Area2UpdateTime;
unsigned int GameIp;
unsigned int LobbyIp;
unsigned int Area1Ip;
unsigned int Area2Ip;
unsigned __int16 GamePort;
unsigned __int16 LobbyPort;
unsigned __int16 Area1Port;
unsigned __int16 Area2Port;
unsigned __int16 Area1UDPPort;
unsigned __int16 Area2UDPPort;
};
struct __cppobj __unaligned __declspec(align(2)) BS_PktServerList : BS_PktBody
{
unsigned int m_Size;
XiServerInfo m_Servers[1];
};
*(_DWORD *)(msg + 2) = nSize;
for ( i = 0; ; ++i )
{
v2 = thisa->m_servers._Myfirst ? thisa->m_servers._Mylast - thisa->m_servers._Myfirst : 0;
if ( i >= v2 )
break;
qmemcpy((void *)(msg + 124 * i + 6), &thisa->m_servers._Myfirst[i], 0x7Cu);
*(_DWORD *)(msg + 124 * i + 86) = GetSystemTick() - *(_DWORD *)(msg + 124 * i + 86);
*(_DWORD *)(msg + 124 * i + 90) = GetSystemTick() - *(_DWORD *)(msg + 124 * i + 90);
*(_DWORD *)(msg + 124 * i + 94) = GetSystemTick() - *(_DWORD *)(msg + 124 * i + 94);
*(_DWORD *)(msg + 124 * i + 98) = GetSystemTick() - *(_DWORD *)(msg + 124 * i + 98);
if ( thisa->m_servers._Myfirst[i].m_info.State == 100 )
{
*(_DWORD *)(msg + 124 * i + 86) = 0;
*(_DWORD *)(msg + 124 * i + 90) = 0;
*(_DWORD *)(msg + 124 * i + 94) = 0;
*(_DWORD *)(msg + 124 * i + 98) = 0;
}
}
typedef struct
{
int ServerCount
typedef struct
{
char ServerName[32];
unsigned int ServerId;
float PlayerCount;
float MaxPlayers;
int ServerState;
int GameTime
int LobbyTime;
int Area1Time;
int Area2Time;
int RankingUpdateTime;
unsigned char GameServerIp[];
unsigned char LobbyServerIp[];
unsigned char AreaServer1Ip[];
unsigned char AreaServer2Ip[];
unsigned char RankingServerIp[];
unsigned short GameServerPort;
unsigned short LobbyServerPort;
unsigned short AreaServerPort;
unsigned short AreaServer2Port;
unsigned short AreaServerUdpPort;
unsigned short AreaServer2UdpPort;
unsigned short RankingServerPort;
} Server;
Server serverList[ServerCount];
};
public class ServerListPacket
{
public int ServerCount;
public struct Server
{
public string ServerName;
public uint ServerId;
public float PlayerCount;
public float MaxPlayers;
public int ServerState;
public int GameTime;
public int LobbyTime;
public int Area1Time;
public int Area2Time;
public int RankingUpdateTime;
public byte[] GameServerIp;
public byte[] LobbyServerIp;
public byte[] AreaServer1Ip;
public byte[] AreaServer2Ip;
public byte[] RankingServerIp;
public ushort GameServerPort;
public ushort LobbyServerPort;
public ushort AreaServerPort;
public ushort AreaServer2Port;
public ushort AreaServerUdpPort;
public ushort AreaServer2UdpPort;
public ushort RankingServerPort;
};
public Server[] Servers;
}
DCNC Copyright ©️ 2017 GigaToni
- Home
- Cmd_UserAuth (20)
- Cmd_ServerList (23)
- Cmd_UserAuthAck (22)
- Cmd_ServerMessage (24)
- Cmd_ServerMessageAck (25)
- Home
- Cmd_AreaChat (571)
- Cmd_AreaChatAck (572)
- Cmd_AreaStatus (682)
- Cmd_AreaStatusAck (683)
- Cmd_EnterArea (562)
- Cmd_EnterAreaAck (563)
- Cmd_UdpTimeSync (540)
- Cmd_UdpTimeSyncAck (540)