bool UPKReader::Deserialize(uint32_t idx, bool TryUnsafe, bool QuickMode) { if (idx < 1 || idx >= ExportTable.size()) { LogWarn("Index is out of bounds in Deserialize!"); return false; } if (ObjectsMap.count(idx) > 0) { return true; } UObject* Obj; if (ExportTable[idx].ObjectFlagsH & (uint32_t)UObjectFlagsH::PropertiesObject) { Obj = UObjectFactory::Create(GlobalType::UObject); } else { Obj = UObjectFactory::Create(ExportTable[idx].Type); } if (Obj == nullptr) { LogWarn("Error creating an Object in Deserialize!"); return false; } Obj->LinkPackage(PackageName, idx); Obj->SetParams(TryUnsafe, QuickMode); if (!Obj->Deserialize()) { LogWarn("Error deserializing an Object in Deserialize!"); delete Obj; return false; } ObjectsMap[idx] = Obj; return true; }