Dedicated Server and World Partitioning (MissingLevelPackage)

I am packaging a dedicated server with a map that uses world partitioning. There’s an entry map that connects to the server, and when I start a client from that entry map from the editor, in “Standalone Game” mode, I get kicked out immediately after connecting, with the following messages in the server log:

LogPlayerController: Warning: ServerUpdateLevelVisibility() ignored non-existant package. PackageName='/Memory/OpenWorld_MainGrid_L2_X-1_Y-1_DL0', FileName='/Memory/OpenWorld_MainGrid_L2_X-1_Y-1_DL0'
LogNet: UNetConnection::Close: CloseReason:
LogNet:  - Result=MissingLevelPackage, ErrorContext="/Memory/OpenWorld_MainGrid_L2_X-1_Y-1_DL0,/Memory/OpenWorld_MainGrid_L2_X-1_Y-1_DL0"

Notably, this only happens when starting the client from the editor. A packaged client works as expected.

This seems to be connected to world partitioning (I can connect fine to a non-partitioned map like the ThirdPersonExampleMap, but even the unmodified “Open World” level will fail. What could I be missing?

2 Likes

For the sake of completeness, if I try to connect with a PIE client, the editor crashes with an assertion:

Assertion failed: PIEInstanceID != INDEX_NONE [File:D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\WorldPartition\WorldPartitionLevelStreamingDynamic.cpp] [Line: 395]

UnrealEditor_Engine!UWorldPartitionLevelStreamingDynamic::FinalizeRuntimeLevel() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\WorldPartition\WorldPartitionLevelStreamingDynamic.cpp:395]
UnrealEditor_Engine!<lambda_28f6e57365b2a69c5efc67b5b153067f>::operator()() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\WorldPartition\WorldPartitionLevelHelper.cpp:318]
UnrealEditor_Engine!TBaseFunctorDelegateInstance<void __cdecl(FName const &,UPackage *,enum EAsyncLoadingResult::Type),FDefaultDelegateUserPolicy,<lambda_28f6e57365b2a69c5efc67b5b153067f> >::ExecuteIfSafe() [D:\Source\UnrealEngine\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:838]
UnrealEditor_CoreUObject!FAsyncPackage::CallCompletionCallbacks() [D:\Source\UnrealEngine\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading.cpp:6646]
UnrealEditor_CoreUObject!FAsyncLoadingThread::ProcessLoadedPackages() [D:\Source\UnrealEngine\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading.cpp:4300]
UnrealEditor_CoreUObject!FAsyncLoadingThread::TickAsyncLoading() [D:\Source\UnrealEngine\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading.cpp:4441]
UnrealEditor_CoreUObject!FAsyncLoadingThread::FlushLoading() [D:\Source\UnrealEngine\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading.cpp:6833]
UnrealEditor_CoreUObject!FlushAsyncLoading() [D:\Source\UnrealEngine\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncPackageLoader.cpp:637]
UnrealEditor_Engine!UWorld::FlushLevelStreaming() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\World.cpp:4203]
UnrealEditor_Engine!UWorld::BlockTillLevelStreamingCompleted() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\World.cpp:3863]
UnrealEditor_Engine!TBaseUObjectMethodDelegateInstance<0,UWorldPartition,void __cdecl(void),FDefaultDelegateUserPolicy>::ExecuteIfSafe() [D:\Source\UnrealEngine\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:611]
UnrealEditor_Engine!TMulticastDelegate<void __cdecl(void),FDefaultDelegateUserPolicy>::Broadcast() [D:\Source\UnrealEngine\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl:967]
UnrealEditor_Engine!AWorldSettings::NotifyMatchStarted() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\WorldSettings.cpp:300]
UnrealEditor_CoreUObject!UFunction::Invoke() [D:\Source\UnrealEngine\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:5912]
UnrealEditor_CoreUObject!UObject::ProcessEvent() [D:\Source\UnrealEngine\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:2003]
UnrealEditor_Engine!AActor::ProcessEvent() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\Actor.cpp:1030]
UnrealEditor_Engine!FRepLayout::CallRepNotifies() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\RepLayout.cpp:4548]
UnrealEditor_Engine!FObjectReplicator::CallRepNotifies() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\DataReplication.cpp:2170]
UnrealEditor_Engine!UActorChannel::ProcessBunch() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\DataChannel.cpp:2965]
UnrealEditor_Engine!UActorChannel::ReceivedBunch() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\DataChannel.cpp:2768]
UnrealEditor_Engine!UChannel::ReceivedSequencedBunch() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\DataChannel.cpp:416]
UnrealEditor_Engine!UChannel::ReceivedNextBunch() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\DataChannel.cpp:877]
UnrealEditor_Engine!UChannel::ReceivedRawBunch() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\DataChannel.cpp:528]
UnrealEditor_Engine!UNetConnection::ReceivedPacket() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\NetConnection.cpp:3202]
UnrealEditor_Engine!UNetConnection::ReceivedRawPacket() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\NetConnection.cpp:1594]
UnrealEditor_OnlineSubsystemUtils!UIpNetDriver::TickDispatch() [D:\Source\UnrealEngine\Engine\Plugins\Online\OnlineSubsystemUtils\Source\OnlineSubsystemUtils\Private\IpNetDriver.cpp:1396]
UnrealEditor_Engine!TBaseUObjectMethodDelegateInstance<0,UNetDriver,void __cdecl(float),FDefaultDelegateUserPolicy>::ExecuteIfSafe() [D:\Source\UnrealEngine\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:611]
UnrealEditor_Engine!TMulticastDelegate<void __cdecl(float),FDefaultDelegateUserPolicy>::Broadcast() [D:\Source\UnrealEngine\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl:967]
UnrealEditor_Engine!UWorld::Tick() [D:\Source\UnrealEngine\Engine\Source\Runtime\Engine\Private\LevelTick.cpp:1373]
UnrealEditor_UnrealEd!UEditorEngine::Tick() [D:\Source\UnrealEngine\Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:1777]
UnrealEditor_UnrealEd!UUnrealEdEngine::Tick() [D:\Source\UnrealEngine\Engine\Source\Editor\UnrealEd\Private\UnrealEdEngine.cpp:474]
UnrealEditor!FEngineLoop::Tick() [D:\Source\UnrealEngine\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5215]
UnrealEditor!GuardedMain() [D:\Source\UnrealEngine\Engine\Source\Runtime\Launch\Private\Launch.cpp:183]
UnrealEditor!GuardedMainWrapper() [D:\Source\UnrealEngine\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:147]
UnrealEditor!LaunchWindowsStartup() [D:\Source\UnrealEngine\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:283]
UnrealEditor!WinMain() [D:\Source\UnrealEngine\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:330]
UnrealEditor!__scrt_common_main_seh() [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]

That probably should not happen, either. Again, this only happens in maps with world partitioning.

Hey did you find a solution for the first issue that you posted?

Thanks

No. I sent a report and test project to Epic in July, but haven’t heard back from them.

Update: Epic have created a ticket for the issue. I don’t know if that means they reproduced it, but it has a “target fix” attribute of 5.1, which gives me hope.

2 Likes

even though this says resolved its still happening for me in 5.1 any ideas?

Even though this ticket says it is resolved. The issue still seems to be occurring for me in 5.1, are you still getting this issue as well?

It happens for me in 5.1.1. It happens only if the client is packaged (shipping or development is the same). A non packaged client works.

The result is that the client connecting is kicked out as its missing a map and so cannot login in the server (dedicated server setup) I get this error:

[2023.02.16-17.04.07:068][338]LogNet: UNetConnection::SendCloseReason:
[2023.02.16-17.04.07:068][338]LogNet: - Result=MissingLevelPackage, ErrorContext=“/Game/Maps/MainWorld/Yliakum/Generated/MainGrid_L7_X-1_Y-1_DL0,/Game/Maps/MainWorld/Yliakum/Generated/MainGrid_L7_X-1_Y-1_DL0”

Adding manually the maps to “Packaging->List of maps to include in a package build” in settings doesnt help. The maps do not end up in the packaged game (I checked with unpak)

I guess the startup map is not included in the package as the engine thinks everything is worldpartition? I can’t release our game due to this. Any help please?

yeah its a pain

I think I found the issue which is frustrating but a possible solution. If you have a menu level that goes to your partition level. You will have to make the menu level apart of the partition level streaming levels. But the major issue is that the default game map must be the partition level

its just not an ideal scenario for me haha

I had this issue with PIE client and uncooked server. Was able to workaround by re-applying the reverted change found here, looks like there are still issues with the content bundles in 5.1: https://github.com/EpicGames/UnrealEngine/commit/611e2f1271c1172bf73b264dbdc10df87c1f5098

1 Like

i tried use world partition in server map, same issue

This is still relevant in 5.3.2
Is there an actual solution?

Same issue found in 5.2 when enable World Partition in ds server.
Have not found the solution…

Disable WP in ds, same issue also happened…

Hello everyone!

I have found how to fix this bug!

First of all, I want to say, that EpicGames completely broke possibility to use not-builded dedicated server with World Partition map with builded game client.
You cannot use simple .bat file:

“unreal path” projectName.uproject -server -log

To run dedicated server you should build it too. For example:

“unreal path” BuildCookRun -nocompileeditor -projectName.uproject" -nop4 -build -cook -compressed -stage -noclient -server -serverplatform=Win64 -serverconfig=Development -pak -archive -archivedirectory=“%~dp0\DedicatedServerBuild” -utf8output

1 Like

Hello guys, our team have found the solution. There are two main reasons for the problem:

  1. The package name is different between PIE client and cooked DS, so the DS Server will close the connection if the package name mismatched.


Under DS, the package name start with “/Game/ThirdPerson/…”


Under PIE, the package name start with “/Memory/”

  1. There is a bug if a game has both world partition map and non world partition map, duing the DS cooking process, they will affect each other, and can’t generate world partition information properly.

We fix the problem by the following code:


We just compare the hash value.


Apply variables before generate a map every time.

After this, a PIE client can connect a cooked DS Server and work properly.

4 Likes

Hey alex thanks for the fix i havent tested it yet although i am having this issue could you provide the files to make thease changes and have you considered opening a PR on github to merge this.
Thanks Dante.
(Edit)
1st Picture: LevelUtils.cpp
2nd Picture: WorldPartitionRuntimeSpatialHash.cpp