handle disable_udp correctly for games
This commit is contained in:
@@ -927,6 +927,7 @@ struct S_JoinGame {
|
||||
// Note: The 64 command for PSO DC ends here (the next 4 fields are ignored).
|
||||
// newserv sends them anyway for code simplicity reasons.
|
||||
uint8_t episode;
|
||||
// Similarly, PSO GC ignores the values in the following fields.
|
||||
uint8_t unused2; // Should be 1 for PSO PC?
|
||||
uint8_t solo_mode;
|
||||
uint8_t unused3;
|
||||
@@ -1018,7 +1019,9 @@ struct S_JoinLobby_XB_65_67_68 {
|
||||
struct S_LeaveLobby_66_69_Ep3_E9 {
|
||||
uint8_t client_id;
|
||||
uint8_t leader_id;
|
||||
le_uint16_t unused;
|
||||
// Note: disable_udp only has an effect for games; it is unused for lobbies.
|
||||
uint8_t disable_udp;
|
||||
uint8_t unused;
|
||||
};
|
||||
|
||||
// 67 (S->C): Join lobby
|
||||
@@ -1448,6 +1451,7 @@ struct C_LoginExtended_PC_9D : C_Login_DC_PC_GC_9D {
|
||||
// Not used on GC Episodes 1&2 Trial Edition.
|
||||
// The extended version of this command is used in the same circumstances as
|
||||
// when PSO PC uses the extended version of the 9D command.
|
||||
// header.flag is 1 if the client has UDP disabled.
|
||||
|
||||
struct C_Login_GC_9E : C_Login_DC_PC_GC_9D {
|
||||
union ClientConfigFields {
|
||||
|
||||
+1
-1
@@ -672,7 +672,7 @@ void ProxyServer::LinkedSession::send_to_game_server(const char* error_message)
|
||||
}
|
||||
uint8_t leaving_id = x;
|
||||
uint8_t leader_id = this->lobby_client_id;
|
||||
S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_id, leader_id, 0};
|
||||
S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_id, leader_id, 1, 0};
|
||||
this->client_channel.send(0x69, leaving_id, &cmd, sizeof(cmd));
|
||||
}
|
||||
|
||||
|
||||
+10
-6
@@ -39,10 +39,14 @@ const unordered_set<uint32_t> v2_crypt_initial_client_commands({
|
||||
});
|
||||
const unordered_set<uint32_t> v3_crypt_initial_client_commands({
|
||||
0x00E000DB, // (17) GC/XB license check
|
||||
0x00EC019E, // (02) GC login
|
||||
0x0150019E, // (02) GC extended login
|
||||
0x0130019E, // (02) XB login
|
||||
0x0194019E, // (02) XB extended login
|
||||
0x00EC009E, // (02) GC login
|
||||
0x00EC019E, // (02) GC login (UDP off)
|
||||
0x0150009E, // (02) GC extended login
|
||||
0x0150019E, // (02) GC extended login (UDP off)
|
||||
0x0130009E, // (02) XB login
|
||||
0x0130019E, // (02) XB login (UDP off)
|
||||
0x0194009E, // (02) XB extended login
|
||||
0x0194019E, // (02) XB extended login (UDP off)
|
||||
});
|
||||
|
||||
|
||||
@@ -1229,12 +1233,12 @@ void send_player_join_notification(shared_ptr<Client> c,
|
||||
}
|
||||
|
||||
void send_player_leave_notification(shared_ptr<Lobby> l, uint8_t leaving_client_id) {
|
||||
S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_client_id, l->leader_id, 0};
|
||||
S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_client_id, l->leader_id, 1, 0};
|
||||
send_command_t(l, l->is_game() ? 0x66 : 0x69, leaving_client_id, cmd);
|
||||
}
|
||||
|
||||
void send_self_leave_notification(shared_ptr<Client> c) {
|
||||
S_LeaveLobby_66_69_Ep3_E9 cmd = {c->lobby_client_id, 0, 0};
|
||||
S_LeaveLobby_66_69_Ep3_E9 cmd = {c->lobby_client_id, 0, 1, 0};
|
||||
send_command_t(c, 0x69, c->lobby_client_id, cmd);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user