Runing game with -nosteam with steam client runing makes crash

in 4.12 there was no same issue.

in 4.13 if you run the game with commandline like:
“C:\Program Files (x86)\Epic Games\4.13\Engine\Binaries\Win64\UE4Editor.exe” “C:\GAME\game.uproject” -game -log -debug -nosteam and you have runing steam client then game crashes

if you will turn off steam client and run the game with same commandline, then everything is working fine and you are avle to create session host game and play, and clients can joing and etc.

Hey h2o,

I’ve tested this by running one of my network projects that uses steam, but I wasn’t able to reproduce a crash. It seemed to be working as expected even with Steam running, the game just came up without the Steam overlay enabled as expected when running with the -nosteam command.

Could you please copy your Machine ID so I can look up this crash, as well as provide your dxdiag?

Thanks

we have this crash on min 2 different PC we tested it. i will provide you with extended info

Could you please reupload the images and logs you provided through PM? The links don’t seem to be working for me, and the image as well.

Let me know when you have done this and I’ll look over it again.

Thanks

Have you tested this issue in a clean project? Could you please do so and then let me know if you’re seeing the same crash?

I’ve spent some more time attempting to reproduce this on my end, but I’m not seeing the crash occur. I’ve read over your logs for the crash, but I’m not able to get anything like that to appear on my end.

Hello,

I’m marking this topic as resolved for tracking purposes, as we have not heard from you in a few days. If this issue persists, feel free to respond to this thread. For any new issues, please create a new Answerhub topic.

Have a great day

i sent you new logs some time ago, also this issue not happens in 4.14 but there as you can see when you pass -nosteam parameter, then steam sysbsystem is still used instead of subsystemNULL which was in 4.12 and elder (before 4.13)

Thanks for the information. I’m glad that you are no longer experiencing the crash. As far as the use of the Steam Subsystem rather than NULL, I’ll continue to investigate this.

Edit: In my logs, I’m not seeing the use of the Steam. Could you point out where you are seeing that it is using Steam rather than NULL? It’s possible I’m overlooking something.

Thanks

Haya, I’m seeing a similar issue. I’m running into an issue where we’re using the null subsystem, but the steam net driver is still being created. I feel like it might be a config file issue. I was formerly just using the IPNetDriver as the backup to the steam one, and I’m guessing since we’re still technically loading the steam OSS module, we’re not getting the ipnetdriver as a possible net driver to fall back to or something.

Is it possible to see your test project’s DefaultEngine.ini?

Hi.

[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
 
[OnlineSubsystem]
DefaultPlatformService=Steam
PollingIntervalInMs=20
 
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
GameServerQueryPort=27015
bRelaunchInSteam=false
GameVersion=1.0.0.0
bVACEnabled=1
bAllowP2PPacketRelay=true
P2PConnectionTimeout=90
 
[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="/Script/OnlineSubsystemSteam.SteamNetConnection"

Haya, I meant Sean, but in the meantime I made some progress.

So what I’m seeing happen is that the ModuleManager is loading all the plugins that are enabled (steam OSS module is enabled, we’re just not using it when we use nosteam). This calls StartupModule on it, which registers steam as a possible platform service.

The nosteam check only seems to be checked in LoadSubsystemModule, which is called by the Get() initialization flow when a factory doesn’t already exist, but because the modulemanager already loaded our module, our factory does exist, so the nosteam argument can be ignored.

What I’m not sure about is that it seems intermittent. The null online subsystem seems to be used sometimes, but for some reason the steam socket seems to still be our default socket type rather than using our fallback :confused:

Slightly more progress. Check to see if you’re calling IOnlineSubsystem::Get(“Steam”) specifically anywhere. The move to plugins means that the factories for any enabled plugins exist, which will avoid the “no[x]” checks. If you ever try to explicitly get a subsystem for an enabled plugin though, it will try to create it no matter what, and after the steam subsystem is created all sorts of wonky stuff happens.

Specifically for this, once the steam subsystem is created, you will start using the steam net driver instead of the ip net driver fallback.

Hey mrooney,

Here’s my .ini

[URL]
[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
 
[OnlineSubsystem]
DefaultPlatformService=Steam
PollingIntervalInMs=20
 
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
GameServerQueryPort=27015
bRelaunchInSteam=false
GameVersion=1.0.0.0
bVACEnabled=1
bAllowP2PPacketRelay=true
P2PConnectionTimeout=90
 
[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="/Script/OnlineSubsystemSteam.SteamNetConnection"

[/Script/HardwareTargeting.HardwareTargetingSettings]
TargetedHardwareClass=Desktop
AppliedTargetedHardwareClass=Desktop
DefaultGraphicsPerformance=Maximum
AppliedDefaultGraphicsPerformance=Maximum

[/Script/EngineSettings.GameMapsSettings]
EditorStartupMap=/Game/Level/GameLevel.GameLevel
GameDefaultMap=/Game/Level/GameLevel.GameLevel
GlobalDefaultGameMode=/Script/Steam.LobbySteamGameMode
GlobalDefaultServerGameMode=/Script/Steam.SteamGameModeBase
TransitionMap=/Engine/Maps/Entry.Entry
ServerDefaultMap=/Game/Level/GameLevel.GameLevel

I’ve tried your suggestion of implementing the Get function but I’m not seeing a crash still when running the command line in the original post.

Let me know if you have any more info that could help reproduce the issue.

Ah. I wasn’t crashing either. The problem I was running into was that running two game instances with -nosteam on the same computer with the steam client opened made it impossible for them to connect (one would use the steam net driver and the other the ip net driver).

I think I tracked down better repro steps for my problem though.

You need to have the SteamNetDriver definition iwth the IpNetDriver fallback like you do in your ini.

Add the OnlineSubsystem plugin in the .uproject file as enabled (This I think was part of the problem because we were formerly dynamically loading the module using the build.cs, but when we upgraded we switched to this way. I couldn’t get dynamically loading it to work anymore)

Start two instances of the game with nosteam and attempt to connect them via the session interface.

The problem afaik is that enabled plugins added in the uproject file are always loaded on startup, which registers the online subsystem factory for the steam subsystem. When you create a GameNetDriver later, it checks if the steam net driver is available by calling IOnlineSubsystem::Get(“Steam”), which then creates the Steam subsystem, and successfully creates a steam net driver instead of the ip net driver.

It’s very likely it’s a build.cs/config problem on our side, but for some reason the engine was unable to find the OnlineSubsystemSteam module trying to change the build.cs file to the way we had it before upgrading or setting it to disabled in the uproject file to try to only load it when it’s created through the OnlineSubsystemModule, so doing it that way broke the normal steam version instead of the nosteam version.

In the meantime I added this check to the GetOnlineSubsystem function also, but not sure that’s the appropriate fix.

bool bAttemptLoadModule = !FParse::Param(FCommandLine::Get(), *FString::Printf(TEXT("no%s"), *SubsystemName));

Anyway, that’s all the info I have so far. Sorry that’s tons of info.

Hey mrooney,

Sorry for the delay. Unfortunately, I’ve still been unable to experience this issue on my end. As a result, we are currently unable to take any further action. If you are able to reproduce the issue in a clean project and can provide us with a full, detailed list of steps or a test project that showcases the issue, please feel free to leave a comment with the information to reopen this thread.

Have a great day

Hey Sean,
Sorry for the delay, was on vacation for the holidays. I’ll try to make a test project when I get home that makes it easy to reproduce.

Thanks, feel free to leave a comment to reopen the thread once you’ve created the project and I’ll be happy to take a look.

Hello. I have new updated info in 4.14

If i am closing steam client and runing game, event with -nosteam parameter i see many errors in logs that steam init failed. In this time i think DriverClassNameFallback which is set to OnlineSubsystemUtils.IpNetDriver should work, am i right? But it seems that something wrong there. For example i can not find games. It is look like IpNetDriver not working.

To take IpNetDriver working i need to remove steam from NetDriverDefinitions and add there IpNetDriver only and also in set
[OnlineSubsystem]
DefaultPlatformService=null

Only once i change configs i am able to use IpNetDriver and find network games without steam.

This sounds like you could have some incorrect information in your .ini file. If you’re not looking to use Steam, all you need to do is add the [OnlineSubsystem] DefaultPlatformService=null to your .ini file. Make sure the OSS Steam plugin is also disabled in your project. If it’s looking for Steam, you probably added something related to Steam to your .ini or have enabled the plugin at some point.

hm. disabling plugin works for me. tnx.and yes it looks like game is still trying to use steam even if -nosteam passed and steam client closed.