implement meet user on dcv1
This commit is contained in:
+10
-10
@@ -1218,13 +1218,21 @@ struct C_RegisterV1_DC_92 {
|
|||||||
|
|
||||||
// 93 (C->S): Log in (DCv1)
|
// 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 {
|
struct C_LoginV1_DC_93 {
|
||||||
le_uint32_t player_tag;
|
le_uint32_t player_tag;
|
||||||
le_uint32_t guild_card_number;
|
le_uint32_t guild_card_number;
|
||||||
le_uint32_t unknown_a1;
|
le_uint32_t unknown_a1;
|
||||||
le_uint32_t unknown_a2;
|
le_uint32_t unknown_a2;
|
||||||
le_uint32_t sub_version;
|
le_uint32_t sub_version;
|
||||||
uint8_t unknown_a3; // Probably is_extended
|
uint8_t is_extended;
|
||||||
uint8_t language;
|
uint8_t language;
|
||||||
parray<uint8_t, 2> unused1;
|
parray<uint8_t, 2> unused1;
|
||||||
ptext<char, 0x11> serial_number;
|
ptext<char, 0x11> serial_number;
|
||||||
@@ -1237,7 +1245,7 @@ struct C_LoginV1_DC_93 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct C_LoginExtendedV1_DC_93 : 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)
|
// 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
|
// selected the Meet User option, in which case it specifies the requested lobby
|
||||||
// by its menu ID and item ID.
|
// 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 {
|
struct C_Login_DC_PC_GC_9D {
|
||||||
le_uint32_t player_tag; // 0x00010000 if guild card is set (via 04)
|
le_uint32_t player_tag; // 0x00010000 if guild card is set (via 04)
|
||||||
le_uint32_t guild_card_number; // 0xFFFFFFFF if not set
|
le_uint32_t guild_card_number; // 0xFFFFFFFF if not set
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ static HandlerResult process_server_dc_pc_v3_patch_02_17(
|
|||||||
cmd.unknown_a1 = 0;
|
cmd.unknown_a1 = 0;
|
||||||
cmd.unknown_a2 = 0;
|
cmd.unknown_a2 = 0;
|
||||||
cmd.sub_version = session.sub_version;
|
cmd.sub_version = session.sub_version;
|
||||||
cmd.unknown_a3 = 0;
|
cmd.is_extended = 0;
|
||||||
cmd.language = session.language;
|
cmd.language = session.language;
|
||||||
cmd.serial_number = string_printf("%08" PRIX32 "",
|
cmd.serial_number = string_printf("%08" PRIX32 "",
|
||||||
session.license->serial_number);
|
session.license->serial_number);
|
||||||
|
|||||||
@@ -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);
|
send_update_client_config(c);
|
||||||
|
|
||||||
process_login_complete(s, c);
|
process_login_complete(s, c);
|
||||||
|
|||||||
Reference in New Issue
Block a user