implement meet user on dcv1

This commit is contained in:
Martin Michelsen
2022-08-27 18:58:47 -07:00
parent 34b70a8a03
commit dc278a7843
3 changed files with 18 additions and 11 deletions
+10 -10
View File
@@ -1218,13 +1218,21 @@ struct C_RegisterV1_DC_92 {
// 93 (C->S): Log in (DCv1)
template <typename CharT>
struct C_Login_MeetUserExtension {
le_uint32_t menu_id;
le_uint32_t preferred_lobby_id;
parray<uint8_t, 0x3C> unknown_a1;
ptext<CharT, 0x20> target_player_name;
};
struct C_LoginV1_DC_93 {
le_uint32_t player_tag;
le_uint32_t guild_card_number;
le_uint32_t unknown_a1;
le_uint32_t unknown_a2;
le_uint32_t sub_version;
uint8_t unknown_a3; // Probably is_extended
uint8_t is_extended;
uint8_t language;
parray<uint8_t, 2> unused1;
ptext<char, 0x11> serial_number;
@@ -1237,7 +1245,7 @@ struct C_LoginV1_DC_93 {
};
struct C_LoginExtendedV1_DC_93 : C_LoginV1_DC_93 {
parray<uint8_t, 0x64> unused3;
C_Login_MeetUserExtension<char> extension;
};
// 93 (C->S): Log in (BB)
@@ -1407,14 +1415,6 @@ struct C_Register_BB_9C {
// selected the Meet User option, in which case it specifies the requested lobby
// by its menu ID and item ID.
template <typename CharT>
struct C_Login_MeetUserExtension {
le_uint32_t menu_id;
le_uint32_t preferred_lobby_id;
parray<uint8_t, 0x3C> unknown_a1;
ptext<CharT, 0x20> target_player_name;
};
struct C_Login_DC_PC_GC_9D {
le_uint32_t player_tag; // 0x00010000 if guild card is set (via 04)
le_uint32_t guild_card_number; // 0xFFFFFFFF if not set
+1 -1
View File
@@ -238,7 +238,7 @@ static HandlerResult process_server_dc_pc_v3_patch_02_17(
cmd.unknown_a1 = 0;
cmd.unknown_a2 = 0;
cmd.sub_version = session.sub_version;
cmd.unknown_a3 = 0;
cmd.is_extended = 0;
cmd.language = session.language;
cmd.serial_number = string_printf("%08" PRIX32 "",
session.license->serial_number);
+7
View File
@@ -280,6 +280,13 @@ void process_login_3_dc_pc_v3(shared_ptr<ServerState> s, shared_ptr<Client> c,
}
}
if (cmd.is_extended) {
const auto& ext_cmd = check_size_t<C_LoginExtendedV1_DC_93>(data);
if (ext_cmd.extension.menu_id == MenuID::LOBBY) {
c->preferred_lobby_id = ext_cmd.extension.preferred_lobby_id;
}
}
send_update_client_config(c);
process_login_complete(s, c);