diff --git a/Project Reboot 3.0/Array.h b/Project Reboot 3.0/Array.h index aa8f4e0..0684f84 100644 --- a/Project Reboot 3.0/Array.h +++ b/Project Reboot 3.0/Array.h @@ -261,16 +261,32 @@ public: return -1; } - void FreeReal() + void FreeReal(SizeType Size = sizeof(InElementType)) { - if (Data && ArrayNum > 0 && sizeof(InElementType) > 0) + if (!IsBadReadPtr(Data, 8) && ArrayNum > 0 && sizeof(InElementType) > 0) { + for (int i = 0; i < ArrayNum; i++) + { + auto current = AtPtr(i, Size); + + RtlSecureZeroMemory(current, Size); + } + // VirtualFree(Data, _msize(Data), MEM_RELEASE); // VirtualFree(Data, sizeof(InElementType) * ArrayNum, MEM_RELEASE); // ik this does nothing - // auto res = VirtualFree(Data, 0, MEM_RELEASE); - // LOG_INFO(LogDev, "Free: {} aa: 0x{:x}", res, res ? 0 : GetLastError()); - static void (*FreeOriginal)(void*) = decltype(FreeOriginal)(Addresses::Free); - // FreeOriginal(Data); + + /* static void (*FreeOriginal)(void*) = decltype(FreeOriginal)(Addresses::Free); + + if (FreeOriginal) + { + FreeOriginal(Data); + } + else */ + { + auto res = VirtualFree(Data, 0, MEM_RELEASE); + // auto res = VirtualFree(Data, sizeof(InElementType) * ArrayNum, MEM_RELEASE); + LOG_INFO(LogDev, "Free: {} aa: 0x{:x}", res, res ? 0 : GetLastError()); + } } Data = nullptr; diff --git a/Project Reboot 3.0/FortInventory.cpp b/Project Reboot 3.0/FortInventory.cpp index c9eac7e..d766ce6 100644 --- a/Project Reboot 3.0/FortInventory.cpp +++ b/Project Reboot 3.0/FortInventory.cpp @@ -150,15 +150,15 @@ std::pair, std::vector> AFortInventory::AddI if (bEnableStateValues) { - FFortItemEntryStateValue* StateValue = (FFortItemEntryStateValue*)FMemory::Realloc(0, FFortItemEntryStateValue::GetStructSize(), 0); - // Alloc(FFortItemEntryStateValue::GetStructSize()); + FFortItemEntryStateValue* StateValue = Alloc(FFortItemEntryStateValue::GetStructSize()); StateValue->GetIntValue() = bShowItemToast; StateValue->GetStateType() = EFortItemEntryState::ShouldShowItemToast; NewItemInstance->GetItemEntry()->GetStateValues().AddPtr(StateValue, FFortItemEntryStateValue::GetStructSize()); } ItemInstances.Add(NewItemInstance); - GetItemList().GetReplicatedEntries().Add(*NewItemInstance->GetItemEntry(), FortItemEntrySize); + auto ReplicatedEntryIdx = GetItemList().GetReplicatedEntries().Add(*NewItemInstance->GetItemEntry(), FortItemEntrySize); + // GetItemList().GetReplicatedEntries().AtPtr(ReplicatedEntryIdx, FFortItemEntry::GetStructSize())->GetIsReplicatedCopy() = true; if (WorldItemDefinition->IsValidLowLevel()) { diff --git a/Project Reboot 3.0/FortItem.h b/Project Reboot 3.0/FortItem.h index bbae0d6..c43c0bd 100644 --- a/Project Reboot 3.0/FortItem.h +++ b/Project Reboot 3.0/FortItem.h @@ -65,6 +65,12 @@ struct FFortItemEntry : FFastArraySerializerItem return *(FGuid*)(__int64(this) + ItemGuidOffset); } + bool& GetIsReplicatedCopy() + { + static auto bIsReplicatedCopyOffset = FindOffsetStruct("/Script/FortniteGame.FortItemEntry", "bIsReplicatedCopy"); + return *(bool*)(__int64(this) + bIsReplicatedCopyOffset); + } + class UFortItemDefinition*& GetItemDefinition() { static auto ItemDefinitionOffset = FindOffsetStruct("/Script/FortniteGame.FortItemEntry", "ItemDefinition"); diff --git a/Project Reboot 3.0/FortLootPackage.cpp b/Project Reboot 3.0/FortLootPackage.cpp index aece32f..0207b67 100644 --- a/Project Reboot 3.0/FortLootPackage.cpp +++ b/Project Reboot 3.0/FortLootPackage.cpp @@ -95,13 +95,13 @@ std::vector PickLootDrops(FName TierGroupName, bool bPrint, int recurs static auto DataTableClass = FindObject("/Script/Engine.DataTable"); static auto CompositeDataTableClass = FindObject("/Script/Engine.CompositeDataTable"); - static bool bHasFoundTables = false; + static int LastNum1 = 14915; auto CurrentPlaylist = CurrentPlaylistDataOffset == -1 && Fortnite_Version < 6 ? nullptr : GameState->GetCurrentPlaylist(); - if (!bHasFoundTables) + if (LastNum1 != AmountOfRestarts) { - bHasFoundTables = true; + LastNum1 = AmountOfRestarts; bool bFoundPlaylistTable = false; diff --git a/Project Reboot 3.0/FortPlayerController.cpp b/Project Reboot 3.0/FortPlayerController.cpp index 5dab71f..3707a5b 100644 --- a/Project Reboot 3.0/FortPlayerController.cpp +++ b/Project Reboot 3.0/FortPlayerController.cpp @@ -175,6 +175,11 @@ void AFortPlayerController::ApplyCosmeticLoadout() UFortKismetLibrary::StaticClass()->ProcessEvent(UpdatePlayerCustomCharacterPartsVisualizationFn, &PlayerStateAsFort); } +void AFortPlayerController::ServerSetInventoryStateValueHook(AFortPlayerController* PlayerController, FGuid a2, __int64 StateValue) +{ + LOG_INFO(LogDev, "ServerSetInventoryStateValueHook! Please tell Milxnor if this gets logged."); +} + void AFortPlayerController::ServerLoadingScreenDroppedHook(UObject* Context, FFrame* Stack, void* Ret) { auto PlayerController = (AFortPlayerController*)Context; @@ -704,7 +709,7 @@ void AFortPlayerController::ServerCreateBuildingActorHook(UObject* Context, FFra auto MatInstance = WorldInventory->FindItemInstance(MatDefinition); - bool bShouldDestroy = MatInstance ? (PlayerController->DoesBuildFree() ? false : MatInstance->GetItemEntry()->GetCount() < 10) : true; + bool bShouldDestroy = MatInstance && MatInstance->GetItemEntry() ? (PlayerController->DoesBuildFree() ? false : MatInstance->GetItemEntry()->GetCount() < 10) : true; if (bShouldDestroy) { diff --git a/Project Reboot 3.0/FortPlayerController.h b/Project Reboot 3.0/FortPlayerController.h index f4d4f87..47f9d53 100644 --- a/Project Reboot 3.0/FortPlayerController.h +++ b/Project Reboot 3.0/FortPlayerController.h @@ -84,6 +84,7 @@ public: void DropAllItems(const std::vector& IgnoreItemDefs, bool bIgnoreSecondaryQuickbar = false, bool bRemoveIfNotDroppable = false); void ApplyCosmeticLoadout(); + static void ServerSetInventoryStateValueHook(AFortPlayerController* PlayerController, FGuid a2, __int64 StateValue); static void ServerLoadingScreenDroppedHook(UObject* Context, FFrame* Stack, void* Ret); static void ServerRepairBuildingActorHook(AFortPlayerController* PlayerController, ABuildingSMActor* BuildingActorToRepair); static void ServerExecuteInventoryItemHook(AFortPlayerController* PlayerController, FGuid ItemGuid); diff --git a/Project Reboot 3.0/dllmain.cpp b/Project Reboot 3.0/dllmain.cpp index 45f8218..019c027 100644 --- a/Project Reboot 3.0/dllmain.cpp +++ b/Project Reboot 3.0/dllmain.cpp @@ -417,7 +417,9 @@ DWORD WINAPI Main(LPVOID) Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject(L"/Script/FortniteGame.FortPlayerController.ServerDropAllItems"), AFortPlayerController::ServerDropAllItemsHook, nullptr, false); - Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, + Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject(L"/Script/FortniteGame.FortPlayerController.ServerSetInventoryStateValue"), + AFortPlayerController::ServerSetInventoryStateValueHook, nullptr, false); + Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject("/Script/FortniteGame.FortPlayerController.ServerSpawnInventoryDrop") ? FindObject("/Script/FortniteGame.FortPlayerController.ServerSpawnInventoryDrop") : FindObject(L"/Script/FortniteGame.FortPlayerController.ServerAttemptInventoryDrop"), AFortPlayerController::ServerAttemptInventoryDropHook, nullptr, false);