Crash on missing declarations in C parts

This may be a bit of an esoteric case but it is a legitimate bug that just cost me 4 or 5 hours to find. I will have to explain it verbally since I cant send any example code, but I do my best.

I have two separate UE projects that work together. Both are C++ projects. The purpose of them is basically in a Client Server scenario for a MMPG that uses our own network layer. One of them is the client that has the full scale of graphical experience, the other one is a spatial server that holds the world and some scaled down versions of objects on the server side.

The client is the graphic rich version, so we decided to edit the world levels on the client, then migrate the maps to the Spatial Server where they are used with a different code base. Needless to say we have to be careful not to use stuff in the Blueprints on the client that don’t exist on the SS.

Recently what we did was to add an enum in a C++ BP function library on the client side like so:

UENUM(BlueprintType)
enum class FE_HOUSE_SPECIAL_USE_TYPE : uint8
{
	NONE						UMETA(DisplayName = "NONE"),
	SHOP						UMETA(DisplayName = "SHOP"),
	BAR							UMETA(DisplayName = "BAR"),

	E_MAX		                UMETA(DisplayName = "E_MAX")
};

then one of our Actor Blueprints used this enum in a switch statement. Coincidentally it is an actor that implements a 3D widget, which is experimental still.

Now we migrate the main map to the server side, start the server UE project and load the map and it crashed deep in a C++ engine stack. The crash happens even when you simply right click on the widget that uses the enum in the object browser.

It took me a while to figure out that the enum, which did not exist on the target project, was the culprit.

I understand that the migrate operation can not transfer C++ code, but there should be a warning of the form “This Blueprint uses this and that data element which is defined in your C++ code and can not be transferred” Preferrably with a question like “Do you still want to migrate”. Of course you dont want this error recognition to block a transfer when you are certain that you have manually transferred the C++ code/data that the Blueprint needs. But a good warning like this with an information what data element / which C++ function is problematic can safe others a sleepless night like I just had.