WIP world select packets

This commit is contained in:
KimLS
2026-03-30 21:54:15 -07:00
parent 485ae4809d
commit ca23b8612e
2 changed files with 112 additions and 48 deletions
+30 -3
View File
@@ -345,18 +345,19 @@ void Client::SendFailedLogin()
m_stored_username.clear(); m_stored_username.clear();
m_stored_password.clear(); m_stored_password.clear();
if (m_client_version == cv_steam_latest) {
// unencrypted // unencrypted
LoginBaseMessage h{}; LoginBaseMessage h{};
h.sequence = m_login_base_message.sequence; // login (3) h.sequence = m_login_base_message.sequence; // login (3)
h.encrypt_type = m_login_base_message.encrypt_type; 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");
} }
@@ -367,6 +368,32 @@ void Client::SendFailedLogin()
outapp.WriteData(&encrypted_buffer, sizeof(encrypted_buffer)); outapp.WriteData(&encrypted_buffer, sizeof(encrypted_buffer));
m_connection->QueuePacket(&outapp); 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);
}
m_client_status = cs_failed_to_login; m_client_status = cs_failed_to_login;
} }
+49 -12
View File
@@ -689,7 +689,7 @@ 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 (version == cv_steam_latest) {
if (use_local_ip) { if (use_local_ip) {
out.WriteString(GetLocalIP()); out.WriteString(GetLocalIP());
} }
@@ -697,8 +697,52 @@ void WorldServer::SerializeForClientServerList(SerializeBuffer &out, bool use_lo
out.WriteString(m_remote_ip_address); out.WriteString(m_remote_ip_address);
} }
if (version == cv_steam_latest) { out.WriteInt32(9000); // port, not currently settable in eqemu but needed for compat
out.WriteUInt32(9000);
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.WriteInt32(289); //unsure what this is yet
out.WriteUInt32(m_server_id);
out.WriteString(m_server_long_name);
out.WriteString("US"); // country code
out.WriteString("EN"); // language code
out.WriteString("Standard");
out.WriteString("This server has no description set currently.");
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());
out.WriteInt32(31); //expansions
out.WriteInt32(0); //truebox
}
else {
// see LoginClientServerData_Struct
if (use_local_ip) {
out.WriteString(GetLocalIP());
}
else {
out.WriteString(m_remote_ip_address);
} }
switch (GetServerListID()) { switch (GetServerListID()) {
@@ -712,16 +756,8 @@ void WorldServer::SerializeForClientServerList(SerializeBuffer &out, bool use_lo
out.WriteInt32(LS::ServerTypeFlags::Standard); out.WriteInt32(LS::ServerTypeFlags::Standard);
break; break;
} }
if (version == cv_steam_latest) {
auto server_id = m_server_id;
//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
@@ -740,6 +776,7 @@ void WorldServer::SerializeForClientServerList(SerializeBuffer &out, bool use_lo
} }
out.WriteUInt32(GetPlayersOnline()); out.WriteUInt32(GetPlayersOnline());
}
} }
void WorldServer::FormatWorldServerName(char *name, int8 server_list_type) void WorldServer::FormatWorldServerName(char *name, int8 server_list_type)