From 668c9f94577a5e40bc0e2da77cf795b8e26a1801 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sat, 15 Jul 2023 22:52:06 -0700 Subject: [PATCH] add some extra proxy options --- src/ProxyCommands.cc | 12 ++++++++++++ src/ProxyServer.hh | 2 ++ src/ServerShell.cc | 8 ++++++++ 3 files changed, 22 insertions(+) diff --git a/src/ProxyCommands.cc b/src/ProxyCommands.cc index 1978d148..8bc2420d 100644 --- a/src/ProxyCommands.cc +++ b/src/ProxyCommands.cc @@ -36,6 +36,10 @@ using namespace std; +static constexpr uint16_t encode_xrgb1555(uint32_t xrgb8888) { + return ((xrgb8888 >> 9) & 0x7C00) | ((xrgb8888 >> 6) & 0x03E0) | ((xrgb8888 >> 3) & 0x001F); +} + struct HandlerResult { enum class Type { FORWARD = 0, @@ -1033,6 +1037,10 @@ static HandlerResult C_GXB_61(shared_ptr, pd.disp.visual.name_color = 0x00000000; modified = true; } + if (!session.challenge_rank_title_override.empty()) { + pd.records.challenge.title_color = encode_xrgb1555(session.challenge_rank_color_override); + pd.records.challenge.rank_title = encrypt_challenge_rank_text(session.challenge_rank_title_override); + } } else { C_CharacterData_V3_61_98* pd; @@ -1066,6 +1074,10 @@ static HandlerResult C_GXB_61(shared_ptr, pd->disp.visual.name_color = 0x00000000; modified = true; } + if (!session.challenge_rank_title_override.empty()) { + pd->records.challenge.title_color = encode_xrgb1555(session.challenge_rank_color_override); + pd->records.challenge.rank_title = encrypt_challenge_rank_text(session.challenge_rank_title_override); + } } return modified ? HandlerResult::Type::MODIFIED : HandlerResult::Type::FORWARD; diff --git a/src/ProxyServer.hh b/src/ProxyServer.hh index c4bb9228..1fe1e0ff 100644 --- a/src/ProxyServer.hh +++ b/src/ProxyServer.hh @@ -65,6 +65,8 @@ public: std::string login_command_bb; ClientOptions options; + uint32_t challenge_rank_color_override; + std::string challenge_rank_title_override; int64_t remote_guild_card_number; parray remote_client_config_data; ClientConfigBB newserv_client_config; diff --git a/src/ServerShell.cc b/src/ServerShell.cc index f29b499c..1d168e33 100644 --- a/src/ServerShell.cc +++ b/src/ServerShell.cc @@ -720,6 +720,14 @@ Proxy session commands:\n\ session->options.override_lobby_number = lobby_type_for_name(command_args); } + } else if (command_name == "set-challenge-rank-title") { + auto session = this->get_proxy_session(session_name); + session->challenge_rank_title_override = command_args; + + } else if (command_name == "set-challenge-rank-color") { + auto session = this->get_proxy_session(session_name); + session->challenge_rank_color_override = stoul(command_args, nullptr, 16); + } else if (command_name == "set-chat-filter") { auto session = this->get_proxy_session(session_name); set_boolean(&session->options.enable_chat_filter, command_args);