mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-26 23:57:17 +00:00
WIP world select packets
This commit is contained in:
+45
-18
@@ -345,28 +345,55 @@ void Client::SendFailedLogin()
|
|||||||
m_stored_username.clear();
|
m_stored_username.clear();
|
||||||
m_stored_password.clear();
|
m_stored_password.clear();
|
||||||
|
|
||||||
// unencrypted
|
if (m_client_version == cv_steam_latest) {
|
||||||
LoginBaseMessage h{};
|
// unencrypted
|
||||||
h.sequence = m_login_base_message.sequence; // login (3)
|
LoginBaseMessage h{};
|
||||||
h.encrypt_type = m_login_base_message.encrypt_type;
|
h.sequence = m_login_base_message.sequence; // login (3)
|
||||||
|
h.encrypt_type = m_login_base_message.encrypt_type;
|
||||||
|
|
||||||
// encrypted
|
// encrypted
|
||||||
PlayerLoginReply r{};
|
PlayerLoginReplySteamLatest r{};
|
||||||
r.base_reply.success = false;
|
r.base_reply.success = false;
|
||||||
r.base_reply.error_str_id = 105; // Error - The username and/or password were not valid
|
r.base_reply.error_str_id = 105; // Error - The username and/or password were not valid
|
||||||
|
|
||||||
char encrypted_buffer[80] = {0};
|
char encrypted_buffer[80] = { 0 };
|
||||||
auto rc = eqcrypt_block((const char *) &r, sizeof(r), encrypted_buffer, 1);
|
auto rc = eqcrypt_block((const char*)&r, sizeof(r), encrypted_buffer, 1);
|
||||||
if (rc == nullptr) {
|
if (rc == nullptr) {
|
||||||
LogDebug("Failed to encrypt eqcrypt block for failed login");
|
LogDebug("Failed to encrypt eqcrypt block for failed login");
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr int outsize = sizeof(LoginBaseMessage) + sizeof(encrypted_buffer);
|
||||||
|
EQApplicationPacket outapp(OP_LoginAccepted, outsize);
|
||||||
|
outapp.WriteData(&h, sizeof(h));
|
||||||
|
outapp.WriteData(&encrypted_buffer, sizeof(encrypted_buffer));
|
||||||
|
|
||||||
|
m_connection->QueuePacket(&outapp);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// unencrypted
|
||||||
|
LoginBaseMessage h{};
|
||||||
|
h.sequence = m_login_base_message.sequence; // login (3)
|
||||||
|
h.encrypt_type = m_login_base_message.encrypt_type;
|
||||||
|
|
||||||
|
// encrypted
|
||||||
|
PlayerLoginReply r{};
|
||||||
|
r.base_reply.success = false;
|
||||||
|
r.base_reply.error_str_id = 105; // Error - The username and/or password were not valid
|
||||||
|
|
||||||
|
char encrypted_buffer[80] = { 0 };
|
||||||
|
auto rc = eqcrypt_block((const char*)&r, sizeof(r), encrypted_buffer, 1);
|
||||||
|
if (rc == nullptr) {
|
||||||
|
LogDebug("Failed to encrypt eqcrypt block for failed login");
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr int outsize = sizeof(LoginBaseMessage) + sizeof(encrypted_buffer);
|
||||||
|
EQApplicationPacket outapp(OP_LoginAccepted, outsize);
|
||||||
|
outapp.WriteData(&h, sizeof(h));
|
||||||
|
outapp.WriteData(&encrypted_buffer, sizeof(encrypted_buffer));
|
||||||
|
|
||||||
|
m_connection->QueuePacket(&outapp);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr int outsize = sizeof(LoginBaseMessage) + sizeof(encrypted_buffer);
|
|
||||||
EQApplicationPacket outapp(OP_LoginAccepted, outsize);
|
|
||||||
outapp.WriteData(&h, sizeof(h));
|
|
||||||
outapp.WriteData(&encrypted_buffer, sizeof(encrypted_buffer));
|
|
||||||
|
|
||||||
m_connection->QueuePacket(&outapp);
|
|
||||||
m_client_status = cs_failed_to_login;
|
m_client_status = cs_failed_to_login;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -689,19 +689,17 @@ bool WorldServer::ValidateWorldServerAdminLogin(
|
|||||||
|
|
||||||
void WorldServer::SerializeForClientServerList(SerializeBuffer &out, bool use_local_ip, LSClientVersion version) const
|
void WorldServer::SerializeForClientServerList(SerializeBuffer &out, bool use_local_ip, LSClientVersion version) const
|
||||||
{
|
{
|
||||||
// see LoginClientServerData_Struct
|
|
||||||
if (use_local_ip) {
|
|
||||||
out.WriteString(GetLocalIP());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
out.WriteString(m_remote_ip_address);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (version == cv_steam_latest) {
|
if (version == cv_steam_latest) {
|
||||||
out.WriteUInt32(9000);
|
if (use_local_ip) {
|
||||||
}
|
out.WriteString(GetLocalIP());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
out.WriteString(m_remote_ip_address);
|
||||||
|
}
|
||||||
|
|
||||||
switch (GetServerListID()) {
|
out.WriteInt32(9000); // port, not currently settable in eqemu but needed for compat
|
||||||
|
|
||||||
|
switch (GetServerListID()) {
|
||||||
case LS::ServerType::Legends:
|
case LS::ServerType::Legends:
|
||||||
out.WriteInt32(LS::ServerTypeFlags::Legends);
|
out.WriteInt32(LS::ServerTypeFlags::Legends);
|
||||||
break;
|
break;
|
||||||
@@ -711,35 +709,74 @@ void WorldServer::SerializeForClientServerList(SerializeBuffer &out, bool use_lo
|
|||||||
default:
|
default:
|
||||||
out.WriteInt32(LS::ServerTypeFlags::Standard);
|
out.WriteInt32(LS::ServerTypeFlags::Standard);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (version == cv_steam_latest) {
|
|
||||||
auto server_id = m_server_id;
|
out.WriteInt32(289); //unsure what this is yet
|
||||||
//if this is 0, the client will not show the server in the list
|
|
||||||
out.WriteUInt32(1);
|
|
||||||
out.WriteUInt32(server_id);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
out.WriteUInt32(m_server_id);
|
out.WriteUInt32(m_server_id);
|
||||||
}
|
|
||||||
|
|
||||||
out.WriteString(m_server_long_name);
|
out.WriteString(m_server_long_name);
|
||||||
out.WriteString("us"); // country code
|
out.WriteString("US"); // country code
|
||||||
out.WriteString("en"); // language code
|
out.WriteString("EN"); // language code
|
||||||
|
out.WriteString("Standard");
|
||||||
|
out.WriteString("This server has no description set currently.");
|
||||||
|
|
||||||
// 0 = Up, 1 = Down, 2 = Up, 3 = down, 4 = locked, 5 = locked(down)
|
if (GetStatus() < 0) {
|
||||||
if (GetStatus() < 0) {
|
if (GetZonesBooted() == 0) {
|
||||||
if (GetZonesBooted() == 0) {
|
out.WriteInt32(LS::ServerStatusFlags::Down);
|
||||||
out.WriteInt32(LS::ServerStatusFlags::Down);
|
}
|
||||||
|
else {
|
||||||
|
out.WriteInt32(LS::ServerStatusFlags::Locked);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
out.WriteInt32(LS::ServerStatusFlags::Locked);
|
out.WriteInt32(LS::ServerStatusFlags::Up);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out.WriteUInt32(GetPlayersOnline());
|
||||||
|
out.WriteInt32(31); //expansions
|
||||||
|
out.WriteInt32(0); //truebox
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
out.WriteInt32(LS::ServerStatusFlags::Up);
|
// see LoginClientServerData_Struct
|
||||||
}
|
if (use_local_ip) {
|
||||||
|
out.WriteString(GetLocalIP());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
out.WriteString(m_remote_ip_address);
|
||||||
|
}
|
||||||
|
|
||||||
out.WriteUInt32(GetPlayersOnline());
|
switch (GetServerListID()) {
|
||||||
|
case LS::ServerType::Legends:
|
||||||
|
out.WriteInt32(LS::ServerTypeFlags::Legends);
|
||||||
|
break;
|
||||||
|
case LS::ServerType::Preferred:
|
||||||
|
out.WriteInt32(LS::ServerTypeFlags::Preferred);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
out.WriteInt32(LS::ServerTypeFlags::Standard);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
out.WriteUInt32(m_server_id);
|
||||||
|
out.WriteString(m_server_long_name);
|
||||||
|
out.WriteString("us"); // country code
|
||||||
|
out.WriteString("en"); // language code
|
||||||
|
|
||||||
|
// 0 = Up, 1 = Down, 2 = Up, 3 = down, 4 = locked, 5 = locked(down)
|
||||||
|
if (GetStatus() < 0) {
|
||||||
|
if (GetZonesBooted() == 0) {
|
||||||
|
out.WriteInt32(LS::ServerStatusFlags::Down);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
out.WriteInt32(LS::ServerStatusFlags::Locked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
out.WriteInt32(LS::ServerStatusFlags::Up);
|
||||||
|
}
|
||||||
|
|
||||||
|
out.WriteUInt32(GetPlayersOnline());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldServer::FormatWorldServerName(char *name, int8 server_list_type)
|
void WorldServer::FormatWorldServerName(char *name, int8 server_list_type)
|
||||||
|
|||||||
Reference in New Issue
Block a user