diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index a5869f2b21..750fa768d3 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -3068,6 +3068,39 @@ DEF_CONSOLE_CMD(ConMiscDebug) return true; } +DEF_CONSOLE_CMD(ConSetNewGRFOptimiserFlags) +{ + if (argc < 1 || argc > 2) { + IConsoleHelp("Debug: misc set_newgrf_optimiser_flags. Usage: 'set_newgrf_optimiser_flags []'"); + return true; + } + + if (argc == 1) { + IConsolePrintF(CC_DEFAULT, "NewGRF optimiser flags: %X", _settings_game.debug.newgrf_optimiser_flags); + } else { + if (_game_mode == GM_MENU || (_networking && !_network_server)) { + IConsoleError("This command is only available in-game and in the editor, and not as a network client."); + return true; + } + extern uint NetworkClientCount(); + if (_networking && NetworkClientCount() > 1) { + IConsoleError("This command is not available when network clients are connected."); + return true; + } + + uint value = strtoul(argv[1], nullptr, 16); + if (_settings_game.debug.newgrf_optimiser_flags == value) return true; + _settings_game.debug.newgrf_optimiser_flags = value; + + ReloadNewGRFData(); + + extern void PostCheckNewGRFLoadWarnings(); + PostCheckNewGRFLoadWarnings(); + } + + return true; +} + DEF_CONSOLE_CMD(ConDoDisaster) { if (argc == 0) { @@ -3662,6 +3695,7 @@ void IConsoleStdLibRegister() IConsole::CmdRegister("csleep", ConCSleep, nullptr, true); IConsole::CmdRegister("recalculate_road_cached_one_way_states", ConRecalculateRoadCachedOneWayStates, ConHookNoNetwork, true); IConsole::CmdRegister("misc_debug", ConMiscDebug, nullptr, true); + IConsole::CmdRegister("set_newgrf_optimiser_flags", ConSetNewGRFOptimiserFlags, nullptr, true); /* NewGRF development stuff */ IConsole::CmdRegister("reload_newgrfs", ConNewGRFReload, ConHookNewGRFDeveloperTool); diff --git a/src/network/network.cpp b/src/network/network.cpp index ddf3a3a13e..51c8ec3047 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -158,6 +158,10 @@ byte NetworkSpectatorCount() return count; } +uint NetworkClientCount() { + return (uint)NetworkClientInfo::GetNumItems(); +} + /** * Change the company password of a given company. * @param company_id ID of the company the password should be changed for. diff --git a/src/network/network_func.h b/src/network/network_func.h index 88a5456a87..3096bbc1a9 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -37,6 +37,7 @@ extern StringList _network_host_list; extern StringList _network_ban_list; byte NetworkSpectatorCount(); +uint NetworkClientCount(); bool NetworkIsValidClientName(const std::string_view client_name); bool NetworkValidateOurClientName(); bool NetworkValidateClientName(std::string &client_name);