ObjectDeliverer icon indicating copy to clipboard operation
ObjectDeliverer copied to clipboard

Bugs ObjectDeliveryBoxUsingJson UE5.4.3 - Fix inside

Open Micha95 opened this issue 1 year ago • 0 comments

Unfortunately the game crashes when using "Create Dynamic Object Delivery Box Using Json" or using "Create Custom Object Delivery Box Using Json" with "Write Type" Serializer. Because the ConstructorHelpers can now only be accessed within constructors.

Also the Map for "Create Custom Object Delivery Box Using Json" is not used at all.

To fix this replace the following functions:

ODObjectUtil.cpp:

bool UODObjectUtil::FindClass(const FString& ClassName, UClass*& Class)
{	
	UClass* LoadedClass = FSoftClassPath(ClassName).TryLoadClass<UObject>();

	bool bFound = false;
	if (LoadedClass)
	{
		LoadedClass->AddToRoot();
		bFound = true;
		Class = LoadedClass;
	}	
	if (!bFound) UE_LOG(LogObjectDeliverer, Error, TEXT("Can't find class."));
	return bFound;
}

ODJsonSerializer.cpp:

TSharedPtr<FJsonObject> UODJsonSerializer::CreateJsonObject(const UObject* Obj, int64 CheckFlags /*= 0*/, int64 SkipFlags /*= 0*/)
{
	return UObjectToJsonObject(Obj->GetClass(), Obj, CheckFlags, SkipFlags);
}

ODOverrideJsonSerializer.cpp:

TSharedPtr<FJsonObject> UODWriteTypeJsonSerializer::UObjectToJsonObject(UODJsonSerializer* JsonSerializer, const UObject* Obj, int64 CheckFlags, int64 SkipFlags) const
{
	TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());

	if (!Obj) return JsonObject;
	JsonObject->SetStringField(TEXT("Type"), Obj->GetClass()->GetPathName());

	TSharedPtr<FJsonObject> JsonObjectBody = MakeShareable(new FJsonObject());

	for (TFieldIterator<FProperty> PropIt(Obj->GetClass(), EFieldIteratorFlags::IncludeSuper); PropIt; ++PropIt)
	{
		JsonSerializer->AddJsonValue(JsonObjectBody, Obj, *PropIt, CheckFlags, SkipFlags);
	}

	JsonObject->SetObjectField(TEXT("Body"), JsonObjectBody);

	return JsonObject;
}

Micha95 avatar Aug 24 '24 20:08 Micha95