Changeset - r28480:005e26a72bd2
[Not reviewed]
master
0 3 0
Patric Stout - 3 months ago 2024-01-16 21:04:35
truebrain@openttd.org
Codechange: compile-time validate the string format of IConsolePrint (#11804)

This means we can no longer use runtime picking what string to use.
3 files changed with 23 insertions and 24 deletions:
0 comments (0 inline, 0 general)
src/console_cmds.cpp
Show inline comments
 
@@ -267,20 +267,18 @@ DEF_CONSOLE_CMD(ConZoomToLevel)
 
		case 0:
 
			IConsolePrint(CC_HELP, "Set the current zoom level of the main viewport.");
 
			IConsolePrint(CC_HELP, "Usage: 'zoomto <level>'.");
 
			IConsolePrint(
 
				CC_HELP,
 
				ZOOM_LVL_MIN < _settings_client.gui.zoom_min ?
 
					"The lowest zoom-in level allowed by current client settings is {}." :
 
					"The lowest supported zoom-in level is {}.",
 
				std::max(ZOOM_LVL_MIN, _settings_client.gui.zoom_min)
 
			);
 
			IConsolePrint(
 
				CC_HELP,
 
				_settings_client.gui.zoom_max < ZOOM_LVL_MAX ?
 
					"The highest zoom-out level allowed by current client settings is {}." :
 
					"The highest supported zoom-out level is {}.",
 
				std::min(_settings_client.gui.zoom_max, ZOOM_LVL_MAX)
 
			);
 

	
 
			if (ZOOM_LVL_MIN < _settings_client.gui.zoom_min) {
 
				IConsolePrint(CC_HELP, "The lowest zoom-in level allowed by current client settings is {}.", std::max(ZOOM_LVL_MIN, _settings_client.gui.zoom_min));
 
			} else {
 
				IConsolePrint(CC_HELP, "The lowest supported zoom-in level is {}.", std::max(ZOOM_LVL_MIN, _settings_client.gui.zoom_min));
 
			}
 

	
 
			if (_settings_client.gui.zoom_max < ZOOM_LVL_MAX) {
 
				IConsolePrint(CC_HELP, "The highest zoom-out level allowed by current client settings is {}.", std::min(_settings_client.gui.zoom_max, ZOOM_LVL_MAX));
 
			} else {
 
				IConsolePrint(CC_HELP, "The highest supported zoom-out level is {}.", std::min(_settings_client.gui.zoom_max, ZOOM_LVL_MAX));
 
			}
 
			return true;
 

	
 
		case 2: {
src/console_func.h
Show inline comments
 
@@ -34,16 +34,15 @@ void IConsolePrint(TextColour colour_cod
 
 * @param format_string The formatting string to tell what to do with the remaining arguments.
 
 * @param first_arg The first argument to the format.
 
 * @param other_args The other arguments to the format.
 
 * @tparam T The type of formatting parameter.
 
 * @tparam A The type of the first argument.
 
 * @tparam Args The types of the other arguments.
 
 */
 
template <typename T, typename A, typename ... Args>
 
inline void IConsolePrint(TextColour colour_code, const T &format, A first_arg, Args&&... other_args)
 
template <typename A, typename ... Args>
 
inline void IConsolePrint(TextColour colour_code, fmt::format_string<A, Args...> format, A first_arg, Args&&... other_args)
 
{
 
	/* The separate first_arg argument is added to aid overloading.
 
	 * Otherwise the calls that do no need formatting will still use this function. */
 
	IConsolePrint(colour_code, fmt::format(format, first_arg, other_args...));
 
	IConsolePrint(colour_code, fmt::format(format, std::forward<A>(first_arg), std::forward<Args>(other_args)...));
 
}
 

	
 
/* Parser */
src/network/network_server.cpp
Show inline comments
 
@@ -1704,12 +1704,14 @@ void NetworkServer_Tick(bool send_frame)
 
			case NetworkClientSocket::STATUS_ACTIVE:
 
				if (lag > _settings_client.network.max_lag_time) {
 
					/* Client did still not report in within the specified limit. */
 
					IConsolePrint(CC_WARNING, cs->last_packet + std::chrono::milliseconds(lag * MILLISECONDS_PER_TICK) > std::chrono::steady_clock::now() ?
 
							/* A packet was received in the last three game days, so the client is likely lagging behind. */
 
								"Client #{} (IP: {}) is dropped because the client's game state is more than {} ticks behind." :
 
							/* No packet was received in the last three game days; sounds like a lost connection. */
 
								"Client #{} (IP: {}) is dropped because the client did not respond for more than {} ticks.",
 
							cs->client_id, cs->GetClientIP(), lag);
 

	
 
					if (cs->last_packet + std::chrono::milliseconds(lag * MILLISECONDS_PER_TICK) > std::chrono::steady_clock::now()) {
 
						/* A packet was received in the last three game days, so the client is likely lagging behind. */
 
						IConsolePrint(CC_WARNING, "Client #{} (IP: {}) is dropped because the client's game state is more than {} ticks behind.", cs->client_id, cs->GetClientIP(), lag);
 
					} else {
 
						/* No packet was received in the last three game days; sounds like a lost connection. */
 
						IConsolePrint(CC_WARNING, "Client #{} (IP: {}) is dropped because the client did not respond for more than {} ticks.", cs->client_id, cs->GetClientIP(), lag);
 
					}
 
					cs->SendError(NETWORK_ERROR_TIMEOUT_COMPUTER);
 
					continue;
 
				}
0 comments (0 inline, 0 general)