Skip to content

Commit

Permalink
Merge pull request #11 from Spuckwaffel/development
Browse files Browse the repository at this point in the history
hotfix for <4.25
  • Loading branch information
Spuckwaffel authored Sep 11, 2023
2 parents 1d92077 + 53bc73f commit 2cff129
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 72 deletions.
71 changes: 2 additions & 69 deletions UEDumper/Engine/Core/Core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,82 +242,15 @@ bool EngineCore::generateStructOrClass(UStruct* object, std::vector<EngineStruct
windows::LogWindow::Log(windows::LogWindow::log_1, "CORE", "Struct %s: %s at 0x%p is unknown prop! Missing support?", object->getCName().c_str(), member.name.c_str(), member.offset);
continue;
}
//offset mismatch?
if (currentOffset < member.offset)
{
//maybe the user defined that unknown block
findOverrideMember(member.offset, currentOffset, bitOffset, eStruct);

//if the bitoffset is 0 it indicates that the last item was not a bit -> reset prevbitfield
//otherwise save
if (bitOffset == 0)
prevBitField = prevBitProp();
else
prevBitField = { currentOffset - 1, bitOffset - 1 }; //-1 because both update and we need to get the item before

//fix offset
currentOffset = member.offset + member.size;
}
if (type.propertyType == PropertyType::BoolProperty && prop->castTo<UBoolProperty>()->isBitField())
{
auto boolProp = child->castTo<UBoolProperty>();

const auto bitPos = boolProp->getBitPosition(boolProp->ByteMask);

//does a previous bitfield exist and is the bitbos not 0?
if (prevBitField.offset == -1 && bitPos > 0)
{
generateUnknownBitMembers(bitPos, member.offset, bitOffset, eStruct);
}
//bitpos higher than expected?
else if (prevBitField.offset == member.offset && bitPos > prevBitField.bitOffset + 1)
{
generateUnknownBitMembers(bitPos - prevBitField.bitOffset - 1, member.offset, bitOffset, eStruct);
}
//member offset 1 larger than expected?
else if (member.offset > prevBitField.offset && prevBitField.offset != -1)
{
//make sure old offset has 8 bits
generateUnknownBitMembers(8 - prevBitField.bitOffset - 1, prevBitField.offset, bitOffset, eStruct);
if (bitPos > 0)
generateUnknownBitMembers(bitPos, member.offset, bitOffset, eStruct);
}

prevBitField = { member.offset, bitPos };
member.isBit = true;
member.bitOffset = bitOffset++;
bitOffset = bitOffset % 8;
}
else
{
//before the last field was a bitfield, check if maybe user defined bits are there too
if (bitOffset != 0 && overridingStructMembers.contains(eStruct.fullName))
{
auto& oStruct = overridingStructMembers[eStruct.fullName];
for (auto& missingMember : oStruct.members)
{
if (missingMember.bitOffset >= 99 || //member already used go to next one, we use this as a used flag
!missingMember.isBit || //no bit? Continue
missingMember.offset != (currentOffset - 1)) //wrong offset? Continue
continue;

if (missingMember.bitOffset < bitOffset) //already defined
continue;

int diff = missingMember.bitOffset - bitOffset;
if (diff > 0)
generateUnknownBitMembers(diff, currentOffset - 1, bitOffset, eStruct);
bitOffset = missingMember.bitOffset;
missingMember.type.name = TYPE_BOOLEAN;
eStruct.members.push_back(missingMember);
}
}
prevBitField = prevBitProp();
bitOffset = 0;
member.bitOffset = bitPos;
}

currentOffset = member.offset + member.size;
eStruct.members.push_back(member);
eStruct.definedMembers.push_back(member);
}
}
}
Expand Down
4 changes: 4 additions & 0 deletions UEDumper/Engine/Core/ObjectsManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,8 @@ void ObjectsManager::copyUBigObjects(int64_t& finishedBytes, int64_t& totalBytes
bOperationSuccess = true;
}

#if UE_VERSION >= UE_4_25

uint64_t ObjectsManager::cacheFField(uint64_t gamePtr)
{
if(gFFieldManager.linkedFFieldIndexCount >= gFFieldManager.maxFFieldCacheNum)
Expand Down Expand Up @@ -282,6 +284,8 @@ FFieldClass* ObjectsManager::getFFieldClass(void* gamePtr)
return reinterpret_cast<FFieldClass*>(realAddress);
}

#endif

void ObjectsManager::setSDKGenerationDone()
{
cacheState = CS_RUNTIME;
Expand Down
2 changes: 1 addition & 1 deletion UEDumper/Engine/UEClasses/UnrealClasses.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ UClass* UStruct::staticClass()
std::vector<TPair<FName, int64_t>> UEnum::getNames() const
{
std::vector<TPair<FName, int64_t>> vec(Names.Count);

Memory::read(Names.Data, vec.data(), sizeof(TPair<FName, int64_t>) * Names.Count);

return vec;
Expand Down
2 changes: 1 addition & 1 deletion UEDumper/Engine/UEClasses/UnrealClasses.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ class UStruct : public UField
FStructBaseChain baseChainInheritance;
#endif
#endif

/** Struct this inherits from, may be null */
UStruct* SuperStruct;

Expand Down
2 changes: 1 addition & 1 deletion UEDumper/Engine/Userdefined/UEdefinitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
/* UE version settings */

//set your games ue version
#define UE_VERSION UE_5_01
#define UE_VERSION UE_4_22


/* FName settings */
Expand Down

0 comments on commit 2cff129

Please sign in to comment.