BuildIdOverride

BuildIdOverride

#Overview

name: BuildIdOverride

The value of this variable can be defined or overridden in .ini config files. 1 .ini config file referencing this setting variable.

It is referenced in 8 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of BuildIdOverride is to provide a way to manually set or override the build ID used for matchmaking in Unreal Engine’s online services and subsystems. This variable allows developers to control the build identification for networking and compatibility purposes.

BuildIdOverride is primarily used in the Online Services and Online Subsystem modules of Unreal Engine. These modules are responsible for handling various online functionalities, including matchmaking.

The value of BuildIdOverride can be set in multiple ways:

  1. Through the command line using the “BuildIdOverride=” parameter
  2. In the DefaultEngine.ini file under the [OnlineServices] or [OnlineSubsystem] section
  3. At runtime using the “buildidoverride” console variable

BuildIdOverride interacts with other variables such as:

Developers should be aware of the following when using this variable:

  1. It affects matchmaking compatibility between different game builds
  2. Incorrect use can lead to players with different versions being unable to connect
  3. It can be useful for testing and development purposes, but should be used carefully in production

Best practices for using BuildIdOverride include:

  1. Use it consistently across all instances of a game that should be compatible
  2. Document any custom build ID schemes used in your project
  3. Consider using automated systems to manage build IDs in production environments
  4. Test thoroughly to ensure proper matchmaking behavior when using custom build IDs
  5. Be cautious when changing the build ID in live environments, as it may disrupt ongoing matches or player connections

#Setting Variables

#References In INI files

Location: <Workspace>/Engine/Config/BaseEngine.ini:2236, section: [OnlineSubsystem]

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Plugins/Online/OnlineServices/Source/OnlineServicesInterface/Private/Online/OnlineServices.cpp:17

Scope (from outer to inner):

file
namespace    UE::Online
function     int32 GetBuildUniqueId

Source code excerpt:

	static int32 BuildId = 0;
	static bool bUseBuildIdOverride = false;
	static int32 BuildIdOverride = 0;

	// add a cvar so it can be modified at runtime
	static FAutoConsoleVariableRef CVarBuildIdOverride(
		TEXT("buildidoverride"), BuildId,
		TEXT("Sets build id used for matchmaking "),
		ECVF_Default);

#Loc: <Workspace>/Engine/Plugins/Online/OnlineServices/Source/OnlineServicesInterface/Private/Online/OnlineServices.cpp:31

Scope (from outer to inner):

file
namespace    UE::Online
function     int32 GetBuildUniqueId

Source code excerpt:

		if (FParse::Value(FCommandLine::Get(), TEXT("BuildIdOverride="), BuildIdOverrideCommandLineString))
		{
			BuildIdOverride = FCString::Atoi(*BuildIdOverrideCommandLineString);
		}
		if (BuildIdOverride != 0)
		{
			bUseBuildIdOverride = true;
		}
		else
		{
			if (!GConfig->GetBool(TEXT("OnlineServices"), TEXT("bUseBuildIdOverride"), bUseBuildIdOverride, GEngineIni))

#Loc: <Workspace>/Engine/Plugins/Online/OnlineServices/Source/OnlineServicesInterface/Private/Online/OnlineServices.cpp:44

Scope (from outer to inner):

file
namespace    UE::Online
function     int32 GetBuildUniqueId

Source code excerpt:

			}

			if (!GConfig->GetInt(TEXT("OnlineServices"), TEXT("BuildIdOverride"), BuildIdOverride, GEngineIni))
			{
				UE_LOG(LogOnlineServices, Warning, TEXT("Missing BuildIdOverride= in [OnlineServices] of DefaultEngine.ini"));
			}
		}

		if (bUseBuildIdOverride == false)

#Loc: <Workspace>/Engine/Plugins/Online/OnlineServices/Source/OnlineServicesInterface/Private/Online/OnlineServices.cpp:58

Scope (from outer to inner):

file
namespace    UE::Online
function     int32 GetBuildUniqueId

Source code excerpt:

		else
		{
			BuildId = BuildIdOverride;
		}
	}

	return BuildId;
}

#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystem/Source/Private/OnlineSubsystem.cpp:213

Scope (from outer to inner):

file
function     int32 GetBuildUniqueId

Source code excerpt:

	static int32 BuildId = 0;
	static bool bUseBuildIdOverride = false;
	static int32 BuildIdOverride = 0;

	// add a cvar so it can be modified at runtime
	static FAutoConsoleVariableRef CVarBuildIdOverride(
		TEXT("buildidoverride"), BuildId,
		TEXT("Sets build id used for matchmaking "),
		ECVF_Default);

#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystem/Source/Private/OnlineSubsystem.cpp:227

Scope (from outer to inner):

file
function     int32 GetBuildUniqueId

Source code excerpt:

		if (FParse::Value(FCommandLine::Get(), TEXT("BuildIdOverride="), BuildIdOverrideCommandLineString))
		{
			BuildIdOverride = FCString::Atoi(*BuildIdOverrideCommandLineString);
		}
		if (BuildIdOverride != 0)
		{
			bUseBuildIdOverride = true;
		}
		else
		{
			if (!GConfig->GetBool(TEXT("OnlineSubsystem"), TEXT("bUseBuildIdOverride"), bUseBuildIdOverride, GEngineIni))

#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystem/Source/Private/OnlineSubsystem.cpp:240

Scope (from outer to inner):

file
function     int32 GetBuildUniqueId

Source code excerpt:

			}

			if (!GConfig->GetInt(TEXT("OnlineSubsystem"), TEXT("BuildIdOverride"), BuildIdOverride, GEngineIni))
			{
				UE_LOG_ONLINE(Warning, TEXT("Missing BuildIdOverride= in [OnlineSubsystem] of DefaultEngine.ini"));
			}
		}

		if (bUseBuildIdOverride == false)

#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystem/Source/Private/OnlineSubsystem.cpp:254

Scope (from outer to inner):

file
function     int32 GetBuildUniqueId

Source code excerpt:

		else
		{
			BuildId = BuildIdOverride;
		}

		// Will add an info entry to the console
		static FTrackedActivity Ta(TEXT("BuildId"), *FString::FromInt(BuildId), FTrackedActivity::ELight::None, FTrackedActivity::EType::Info);
		CVarBuildIdOverride->SetOnChangedCallback(FConsoleVariableDelegate::CreateLambda([](IConsoleVariable* CVar) { Ta.Update(*CVar->GetString()); }));
	}