From 6f056cb1bdf8a9da12c14eb69c4226438324d75c Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sun, 23 Jun 2024 15:55:06 -0700 Subject: [PATCH] update proxy options --- src/Client.hh | 1 + src/Menu.hh | 15 ++++++++------- src/ProxyCommands.cc | 14 +++++++------- src/ProxyServer.hh | 5 +++++ src/ReceiveCommands.cc | 5 +++++ 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/Client.hh b/src/Client.hh index e90dff44..1ab91189 100644 --- a/src/Client.hh +++ b/src/Client.hh @@ -94,6 +94,7 @@ public: PROXY_BLANK_NAME_ENABLED = 0x0000400000000000, PROXY_BLOCK_FUNCTION_CALLS = 0x0000800000000000, PROXY_EP3_UNMASK_WHISPERS = 0x0008000000000000, + PROXY_VIRTUAL_CLIENT = 0x0400000000000000, // clang-format on }; enum class ItemDropNotificationMode { diff --git a/src/Menu.hh b/src/Menu.hh index 184507a8..064b8ea3 100644 --- a/src/Menu.hh +++ b/src/Menu.hh @@ -80,13 +80,14 @@ constexpr uint32_t SWITCH_ASSIST = 0xAA0707AA; constexpr uint32_t BLOCK_EVENTS = 0xAA0808AA; constexpr uint32_t BLOCK_PATCHES = 0xAA0909AA; constexpr uint32_t SAVE_FILES = 0xAA0A0AAA; -constexpr uint32_t RED_NAME = 0xAA0B0BAA; -constexpr uint32_t BLANK_NAME = 0xAA0C0CAA; -constexpr uint32_t SUPPRESS_LOGIN = 0xAA0D0DAA; -constexpr uint32_t SKIP_CARD = 0xAA0E0EAA; -constexpr uint32_t EP3_INFINITE_MESETA = 0xAA0F0FAA; -constexpr uint32_t EP3_INFINITE_TIME = 0xAA1010AA; -constexpr uint32_t EP3_UNMASK_WHISPERS = 0xAA1111AA; +constexpr uint32_t VIRTUAL_CLIENT = 0xAA0B0BAA; +constexpr uint32_t RED_NAME = 0xAA0C0CAA; +constexpr uint32_t BLANK_NAME = 0xAA0D0DAA; +constexpr uint32_t SUPPRESS_LOGIN = 0xAA0E0EAA; +constexpr uint32_t SKIP_CARD = 0xAA0F0FAA; +constexpr uint32_t EP3_INFINITE_MESETA = 0xAA1010AA; +constexpr uint32_t EP3_INFINITE_TIME = 0xAA1111AA; +constexpr uint32_t EP3_UNMASK_WHISPERS = 0xAA1212AA; } // namespace ProxyOptionsMenuItemID namespace TeamRewardMenuItemID { diff --git a/src/ProxyCommands.cc b/src/ProxyCommands.cc index 9e531af3..3f18a824 100644 --- a/src/ProxyCommands.cc +++ b/src/ProxyCommands.cc @@ -169,7 +169,7 @@ static HandlerResult S_G_9A(shared_ptr ses, uint16_t } cmd.unused1 = 0; cmd.unused2 = 0; - cmd.sub_version = ses->sub_version; + cmd.sub_version = ses->effective_sub_version(); cmd.is_extended = (ses->remote_guild_card_number < 0) ? 1 : 0; cmd.language = ses->language(); cmd.serial_number.encode(string_printf("%08" PRIX32 "", ses->login->account->account_id)); @@ -275,7 +275,7 @@ static HandlerResult S_V123P_02_17( } cmd.unknown_a1 = 0; cmd.unknown_a2 = 0; - cmd.sub_version = ses->sub_version; + cmd.sub_version = ses->effective_sub_version(); cmd.is_extended = 0; cmd.language = ses->language(); cmd.serial_number.encode(string_printf("%08" PRIX32 "", ses->login->account->account_id)); @@ -313,7 +313,7 @@ static HandlerResult S_V123P_02_17( cmd.player_tag = 0x00010000; cmd.guild_card_number = ses->remote_guild_card_number; } - cmd.sub_version = ses->sub_version; + cmd.sub_version = ses->effective_sub_version(); cmd.serial_number.encode(string_printf("%08" PRIX32 "", ses->login->account->account_id)); cmd.access_key.encode(*access_key); if (ses->version() != Version::GC_NTE) { @@ -337,7 +337,7 @@ static HandlerResult S_V123P_02_17( } cmd.unused1 = 0; cmd.unused2 = 0; - cmd.sub_version = ses->sub_version; + cmd.sub_version = ses->effective_sub_version(); cmd.is_extended = 0; cmd.language = ses->language(); cmd.serial_number.encode(string_printf("%08" PRIX32 "", ses->login->account->account_id)); @@ -367,7 +367,7 @@ static HandlerResult S_V123P_02_17( C_VerifyAccount_V3_DB cmd; cmd.serial_number.encode(string_printf("%08" PRIX32 "", ses->login->account->account_id)); cmd.access_key.encode(ses->login->gc_license->access_key); - cmd.sub_version = ses->sub_version; + cmd.sub_version = ses->effective_sub_version(); cmd.serial_number2 = cmd.serial_number; cmd.access_key2 = cmd.access_key; cmd.password.encode(ses->login->gc_license->password); @@ -396,7 +396,7 @@ static HandlerResult S_V123P_02_17( cmd.guild_card_number = guild_card_number; cmd.unused1 = 0; cmd.unused2 = 0; - cmd.sub_version = ses->sub_version; + cmd.sub_version = ses->effective_sub_version(); cmd.is_extended = 0; cmd.language = ses->language(); cmd.serial_number.encode(string_printf("%08" PRIX32, fake_serial_number)); @@ -432,7 +432,7 @@ static HandlerResult S_V123P_02_17( } cmd.unused1 = 0; cmd.unused2 = 0; - cmd.sub_version = ses->sub_version; + cmd.sub_version = ses->effective_sub_version(); cmd.is_extended = (ses->remote_guild_card_number < 0) ? 1 : 0; cmd.language = ses->language(); cmd.serial_number.encode(ses->login->xb_license->gamertag); diff --git a/src/ProxyServer.hh b/src/ProxyServer.hh index 4efc682a..36c69656 100644 --- a/src/ProxyServer.hh +++ b/src/ProxyServer.hh @@ -160,6 +160,11 @@ public: inline uint8_t language() const { return this->client_channel.language; } + inline uint32_t effective_sub_version() const { + return this->config.check_flag(Client::Flag::PROXY_VIRTUAL_CLIENT) + ? default_sub_version_for_version(this->version()) + : this->sub_version; + } void set_version(Version v); void resume( diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index e4667335..eb647256 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -103,6 +103,8 @@ static shared_ptr proxy_options_menu_for_client(shared_ptrproxy_enable_login_options) { + add_flag_option(ProxyOptionsMenuItemID::VIRTUAL_CLIENT, Client::Flag::PROXY_VIRTUAL_CLIENT, + "Virtual client", ""); add_flag_option(ProxyOptionsMenuItemID::RED_NAME, Client::Flag::PROXY_RED_NAME_ENABLED, "Red name", "Set the colors\nof your name and\nChallenge Mode\nrank to red"); add_flag_option(ProxyOptionsMenuItemID::BLANK_NAME, Client::Flag::PROXY_BLANK_NAME_ENABLED, @@ -2371,6 +2373,9 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, string& data) { case ProxyOptionsMenuItemID::SAVE_FILES: c->config.toggle_flag(Client::Flag::PROXY_SAVE_FILES); goto resend_proxy_options_menu; + case ProxyOptionsMenuItemID::VIRTUAL_CLIENT: + c->config.toggle_flag(Client::Flag::PROXY_VIRTUAL_CLIENT); + goto resend_proxy_options_menu; case ProxyOptionsMenuItemID::RED_NAME: c->config.toggle_flag(Client::Flag::PROXY_RED_NAME_ENABLED); goto resend_proxy_options_menu;