diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index e88023cd..22fc80f1 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -44,6 +44,7 @@ Version 1.9.0 (not released yet) - Add level filename to "Level Initializing" console message - Properly handle WM_PAINT in dedicated server, may improve performance (DF bug) - Fix crash when `verify_level` command is run without a level being loaded +- Add `server_rcon_password` command Version 1.8.0 (released 2022-09-17) ----------------------------------- diff --git a/game_patch/os/commands.cpp b/game_patch/os/commands.cpp index a1586ad8..8601ef80 100644 --- a/game_patch/os/commands.cpp +++ b/game_patch/os/commands.cpp @@ -92,6 +92,34 @@ DcCommandAlias map_info_cmd{ level_info_cmd, }; +ConsoleCommand2 server_rcon_password_cmd{ + "server_rcon_password", + [](std::optional new_rcon_password) { + if (!rf::is_multi || !rf::is_dedicated_server) { + rf::console::print("This command can only be run on a dedicated server!"); + return; + } + + if (new_rcon_password) { + if (new_rcon_password->size() > 16) { + // game limits client requests to 16 characters + rf::console::print("Server rcon password cannot exceed 16 characters."); + return; + } + + std::strncpy(rf::rcon_password, new_rcon_password->c_str(), sizeof(rf::rcon_password) - 1); + rf::rcon_password[sizeof(rf::rcon_password) - 1] = '\0'; // null terminator + rf::console::print("Server rcon password set to: {}", rf::rcon_password); + } + else { + *rf::rcon_password = '\0'; + rf::console::print("Server rcon password removed."); + } + }, + "Set or remove the server rcon password.", + "server_rcon_password ", +}; + // only allow verify_level if a level is loaded (avoid a crash if command is run in menu) FunHook verify_level_cmd_hook{ 0x0045E1F0, @@ -205,5 +233,6 @@ void console_commands_init() map_cmd.register_cmd(); level_info_cmd.register_cmd(); map_info_cmd.register_cmd(); + server_rcon_password_cmd.register_cmd(); verify_level_cmd_hook.install(); } diff --git a/game_patch/rf/multi.h b/game_patch/rf/multi.h index 92bb5b99..4b18e615 100644 --- a/game_patch/rf/multi.h +++ b/game_patch/rf/multi.h @@ -174,6 +174,7 @@ namespace rf static auto& is_dedicated_server = addr_as_ref(0x0064ECBB); static auto& simultaneous_ping = addr_as_ref(0x00599CD8); static auto& tracker_addr = addr_as_ref(0x006FC550); + static auto& rcon_password = addr_as_ref(0x0064ECD0); enum ChatSayType { CHAT_SAY_GLOBAL = 0,