diff --git a/Project Reboot 3.0/FortLootPackage.cpp b/Project Reboot 3.0/FortLootPackage.cpp index 6bb1324..e8bdd06 100644 --- a/Project Reboot 3.0/FortLootPackage.cpp +++ b/Project Reboot 3.0/FortLootPackage.cpp @@ -323,6 +323,8 @@ void PickLootDropsFromLootPackage(const std::vector& LPTables, cons } } +// #define brudda + std::vector PickLootDrops(FName TierGroupName, int ForcedLootTier, bool bPrint, int recursive) { std::vector LootDrops; @@ -361,6 +363,7 @@ std::vector PickLootDrops(FName TierGroupName, int ForcedLootTier, boo if (LootTierDataSoft.IsValid() && LootPackagesSoft.IsValid()) { +#ifndef brudda auto LootTierDataStr = LootTierDataSoft.SoftObjectPtr.ObjectID.AssetPathName.ToString(); auto LootPackagesStr = LootPackagesSoft.SoftObjectPtr.ObjectID.AssetPathName.ToString(); auto LootTierDataTableIsComposite = LootTierDataStr.contains("Composite"); @@ -368,6 +371,10 @@ std::vector PickLootDrops(FName TierGroupName, int ForcedLootTier, boo auto StrongLootTierData = LootTierDataSoft.Get(LootTierDataTableIsComposite ? CompositeDataTableClass : UDataTable::StaticClass(), true); auto StrongLootPackage = LootPackagesSoft.Get(LootPackageTableIsComposite ? CompositeDataTableClass : UDataTable::StaticClass(), true); +#else + auto StrongLootTierData = (UDataTable*)Assets::LoadAsset(LootTierDataSoft.SoftObjectPtr.ObjectID.AssetPathName); + auto StrongLootPackage = (UDataTable*)Assets::LoadAsset(LootPackagesSoft.SoftObjectPtr.ObjectID.AssetPathName); +#endif if (StrongLootTierData && StrongLootPackage) { @@ -381,8 +388,13 @@ std::vector PickLootDrops(FName TierGroupName, int ForcedLootTier, boo if (!bFoundPlaylistTable) { +#ifdef brudda + LTDTables.push_back((UDataTable*)Assets::LoadAsset(UKismetStringLibrary::Conv_StringToName(L"/Game/Items/Datatables/AthenaLootTierData_Client.AthenaLootTierData_Client"))); + LPTables.push_back((UDataTable*)Assets::LoadAsset(UKismetStringLibrary::Conv_StringToName(L"/Game/Items/Datatables/AthenaLootPackages_Client.AthenaLootPackages_Client"))); +#else LTDTables.push_back(LoadObject(L"/Game/Items/Datatables/AthenaLootTierData_Client.AthenaLootTierData_Client")); LPTables.push_back(LoadObject(L"/Game/Items/Datatables/AthenaLootPackages_Client.AthenaLootPackages_Client")); +#endif } // LTDTables.push_back(LoadObject(L"/Game/Athena/Playlists/Playground/AthenaLootTierData_Client.AthenaLootTierData_Client")); diff --git a/Project Reboot 3.0/Project Reboot 3.0.vcxproj b/Project Reboot 3.0/Project Reboot 3.0.vcxproj index 0b0bbb0..6f420f6 100644 --- a/Project Reboot 3.0/Project Reboot 3.0.vcxproj +++ b/Project Reboot 3.0/Project Reboot 3.0.vcxproj @@ -249,6 +249,7 @@ + diff --git a/Project Reboot 3.0/Project Reboot 3.0.vcxproj.filters b/Project Reboot 3.0/Project Reboot 3.0.vcxproj.filters index 79b3686..03caec9 100644 --- a/Project Reboot 3.0/Project Reboot 3.0.vcxproj.filters +++ b/Project Reboot 3.0/Project Reboot 3.0.vcxproj.filters @@ -106,9 +106,6 @@ FortniteGame\Source\FortniteGame\Private\Pawns - - Reboot\Private\Gameplay - FortniteGame\Source\FortniteGame\Private\Player @@ -271,6 +268,12 @@ Reboot\Private + + Reboot\Private + + + Reboot\Private + @@ -546,9 +549,6 @@ Reboot\Public - - Reboot\Public\Gameplay - Engine\Source\Runtime\Engine\Classes\Engine @@ -859,6 +859,9 @@ Reboot\Public + + Reboot\Public + @@ -1011,9 +1014,6 @@ {ad1c6299-9a6d-4eba-a1f8-66642a8afd21} - - {9923af6f-0a65-43f7-ad58-8a66e83814ba} - {51b57917-fec7-41b7-bdc8-ad284a5385a4} @@ -1086,9 +1086,6 @@ {563ca89b-be74-42a6-a995-f87ac7a532e4} - - {52d438db-beaf-44be-bddd-9aeb07c2459f} - {39656a6c-bfe1-4521-8652-aea0146564d6} diff --git a/Project Reboot 3.0/addresses.cpp b/Project Reboot 3.0/addresses.cpp index 10efbc4..e98ff82 100644 --- a/Project Reboot 3.0/addresses.cpp +++ b/Project Reboot 3.0/addresses.cpp @@ -291,6 +291,9 @@ void Addresses::FindAll() LOG_INFO(LogDev, "Finding PickSupplyDropLocation"); Addresses::PickSupplyDropLocation = FindPickSupplyDropLocation(); + LOG_INFO(LogDev, "Finding LoadAsset"); + Addresses::LoadAsset = FindLoadAsset(); + LOG_INFO(LogDev, "Finished finding!"); } @@ -359,6 +362,7 @@ void Addresses::Print() LOG_INFO(LogDev, "CombinePickupLea: 0x{:x}", CombinePickupLea - Base); LOG_INFO(LogDev, "CreateBuildingActorCallForDeco: 0x{:x}", CreateBuildingActorCallForDeco - Base); LOG_INFO(LogDev, "PickSupplyDropLocation: 0x{:x}", PickSupplyDropLocation - Base); + LOG_INFO(LogDev, "LoadAsset: 0x{:x}", LoadAsset - Base) } void Offsets::FindAll() diff --git a/Project Reboot 3.0/addresses.h b/Project Reboot 3.0/addresses.h index abe7fd8..e19ae94 100644 --- a/Project Reboot 3.0/addresses.h +++ b/Project Reboot 3.0/addresses.h @@ -69,6 +69,7 @@ namespace Addresses extern inline uint64 CombinePickupLea = 0; extern inline uint64 CreateBuildingActorCallForDeco = 0; extern inline uint64 PickSupplyDropLocation = 0; + extern inline uint64 LoadAsset = 0; void SetupVersion(); // Finds Engine Version void FindAll(); diff --git a/Project Reboot 3.0/ai.h b/Project Reboot 3.0/ai.h index a8ec7a3..fe29840 100644 --- a/Project Reboot 3.0/ai.h +++ b/Project Reboot 3.0/ai.h @@ -92,7 +92,9 @@ static void SetupServerBotManager() static auto CachedGameModeOffset = ServerBotManager->GetOffset("CachedGameMode"); ServerBotManager->Get(CachedGameModeOffset) = GameMode; - static auto CachedGameStateOffset = ServerBotManager->GetOffset("CachedGameState"); + static auto CachedGameStateOffset = ServerBotManager->GetOffset("CachedGameState", false); + + if (CachedGameStateOffset != -1) ServerBotManager->Get(CachedGameStateOffset) = GameState; static auto CachedBotMutatorOffset = ServerBotManager->GetOffset("CachedBotMutator"); diff --git a/Project Reboot 3.0/finder.h b/Project Reboot 3.0/finder.h index a4aab88..cdcd8c9 100644 --- a/Project Reboot 3.0/finder.h +++ b/Project Reboot 3.0/finder.h @@ -168,6 +168,22 @@ static inline uint64 FindCreateNetDriver() return 0; } +static inline uint64 FindLoadAsset() +{ + auto Addrr = Memcury::Scanner::FindStringRef(L"Loaded delay-load asset %s").Get(); + + for (int i = 0; i < 2000; i++) + { + if (*(uint8_t*)(uint8_t*)(Addrr - i) == 0x48 && *(uint8_t*)(uint8_t*)(Addrr - i + 1) == 0x89 && + (*(uint8_t*)(uint8_t*)(Addrr - i + 2) == 0x74 || *(uint8_t*)(uint8_t*)(Addrr - i + 2) == 0x6C)) + { + return Addrr - i; + } + } + + return 0; +} + static inline uint64 FindKickPlayer() { if (Engine_Version == 416) diff --git a/Project Reboot 3.0/reboot.cpp b/Project Reboot 3.0/reboot.cpp new file mode 100644 index 0000000..9bcda9a --- /dev/null +++ b/Project Reboot 3.0/reboot.cpp @@ -0,0 +1,29 @@ +#include "reboot.h" + +#include "SoftObjectPtr.h" + +#include "KismetStringLibrary.h" + +UObject* Assets::LoadAsset(FName Name, bool ShowDelayTimes) +{ + static UObject* (*LoadAssetOriginal)(FName a1, bool a2); + + return LoadAssetOriginal(Name, ShowDelayTimes); +} + +UObject* Assets::LoadSoftObject(void* SoftObjectPtr) +{ + if (Engine_Version == 416) + { + auto tAssetPtr = (TAssetPtr*)SoftObjectPtr; + // return LoadAsset(tAssetPtr->AssetPtr.ObjectID.AssetLongPathname.); + return nullptr; // later + } + + auto tSoftObjectPtr = (TSoftObjectPtr*)SoftObjectPtr; + + // if (auto WeakObject = tSoftObjectPtr->GetByWeakObject()) + // return WeakObject; + + return Assets::LoadAsset(tSoftObjectPtr->SoftObjectPtr.ObjectID.AssetPathName); +} \ No newline at end of file diff --git a/Project Reboot 3.0/reboot.h b/Project Reboot 3.0/reboot.h index 18c5d27..ec9f29d 100644 --- a/Project Reboot 3.0/reboot.h +++ b/Project Reboot 3.0/reboot.h @@ -384,6 +384,13 @@ static void CopyStruct(void* Dest, void* Src, size_t Size, UStruct* Struct = nul } } +class Assets +{ +public: + static UObject* LoadAsset(FName Name, bool ShowDelayTimes = false); + static UObject* LoadSoftObject(void* SoftObjectPtr); +}; + template static T* Alloc(size_t Size = sizeof(T), bool bUseFMemoryRealloc = false) {